From 0c3dc88d09033cbbe268c5bbb71a1714f1a972f0 Mon Sep 17 00:00:00 2001 From: Viktor Kombov Date: Thu, 27 Aug 2026 12:25:16 +0300 Subject: [PATCH 1/3] Update to 22.1.0 --- .../igniteui-angular-components/SKILL.md | 62 + .../references/charts.md | 250 + .../references/data-display.md | 273 + .../references/directives.md | 162 + .../references/feedback.md | 141 + .../references/form-controls.md | 309 + .../references/layout-manager.md | 322 + .../references/layout.md | 209 + .../references/mcp-setup.md | 76 + .../references/setup.md | 165 + .../igniteui-angular-figma-to-app/SKILL.md | 772 + .../references/asset-extraction.md | 393 + .../references/design-token-bridge.md | 324 + .../references/figma-component-map.md | 305 + .../references/mcp-setup.md | 455 + .../references/validation-patterns.md | 326 + .../SKILL.md | 241 + .../references/component-mapping.md | 144 + .../references/gotchas.md | 189 + .../skills/igniteui-angular-grids/SKILL.md | 113 + .../references/data-operations.md | 420 + .../references/editing.md | 482 + .../references/features.md | 221 + .../references/grid-migration.md | 479 + .../references/paging-remote.md | 391 + .../references/sizing.md | 215 + .../references/state.md | 303 + .../references/structure.md | 283 + .../references/types.md | 486 + .../skills/igniteui-angular-theming/SKILL.md | 383 + .../references/common-patterns.md | 45 + .../references/mcp-setup.md | 74 + .claude/CLAUDE.md | 58 + .../igniteui-angular-components/SKILL.md | 62 + .../references/charts.md | 250 + .../references/data-display.md | 273 + .../references/directives.md | 162 + .../references/feedback.md | 141 + .../references/form-controls.md | 309 + .../references/layout-manager.md | 322 + .../references/layout.md | 209 + .../references/mcp-setup.md | 76 + .../references/setup.md | 165 + .../igniteui-angular-figma-to-app/SKILL.md | 772 + .../references/asset-extraction.md | 393 + .../references/design-token-bridge.md | 324 + .../references/figma-component-map.md | 305 + .../references/mcp-setup.md | 455 + .../references/validation-patterns.md | 326 + .../SKILL.md | 241 + .../references/component-mapping.md | 144 + .../references/gotchas.md | 189 + .../skills/igniteui-angular-grids/SKILL.md | 113 + .../references/data-operations.md | 420 + .../references/editing.md | 482 + .../references/features.md | 221 + .../references/grid-migration.md | 479 + .../references/paging-remote.md | 391 + .../references/sizing.md | 215 + .../references/state.md | 303 + .../references/structure.md | 283 + .../references/types.md | 486 + .../skills/igniteui-angular-theming/SKILL.md | 383 + .../references/common-patterns.md | 45 + .../references/mcp-setup.md | 74 + .mcp.json | 20 + AGENTS.md | 58 + angular.json | 270 +- browserslist | 3 +- docs/3rdpartylicenses.txt | 991 +- docs/chunk-B-Z5f9Bq.js | 3 + docs/chunk-BZLeeQ-I.js | 5 + docs/chunk-Df2FdJZg.js | 5 + docs/chunk-iest0pt_.js | 78 + docs/index.html | 12 +- docs/main-ZSOIWSXQ.js | 2097 ++ docs/main.3c19cdd3b7bfeee6.js | 1 - docs/polyfills.9f7423acfeff3aa5.js | 1 - docs/prerendered-routes.json | 3 + docs/runtime.70a8e1dd74829026.js | 1 - docs/scripts.cd816875f3dc91fb.js | 1 - docs/styles-MLBARMBW.css | 1 + docs/styles.c9823f20c1909450.css | 1 - eslint.config.js | 51 + package-lock.json | 18960 ++++++---------- package.json | 68 +- src/app/backlog/backlog.component.html | 98 +- src/app/backlog/backlog.component.ts | 135 +- src/app/header/header.component.html | 2 +- src/app/header/header.component.ts | 28 +- src/app/interfaces.ts | 112 +- src/app/pipes/taskplanner.pipes.ts | 63 +- src/app/services/tasks.service.ts | 56 +- src/app/services/tasksData.ts | 1642 +- .../taskplanner/taskplanner.component.html | 1064 +- .../taskplanner/taskplanner.component.scss | 8 +- src/app/taskplanner/taskplanner.component.ts | 503 +- src/app/tp-theme/_index.scss | 30 +- src/app/tp-theme/_tp-badge.scss | 3 + src/app/tp-theme/_tp-button.scss | 48 +- src/app/tp-theme/_tp-card.scss | 3 + src/app/tp-theme/_tp-checkbox.scss | 3 + src/app/tp-theme/_tp-dialog.scss | 3 + src/app/tp-theme/_tp-drop-down.scss | 3 + src/app/tp-theme/_tp-grid.scss | 27 +- src/app/tp-theme/_tp-icon.scss | 3 + src/app/tp-theme/_tp-input-group.scss | 3 + src/app/tp-theme/_tp-list.scss | 3 + src/app/tp-theme/_tp-navbar.scss | 3 + src/app/tp-theme/_tp-paginator.scss | 5 +- src/app/tp-theme/_tp-tabs.scss | 6 +- src/app/tp-theme/_tp-toolbar.scss | 5 +- src/app/tp-theme/_vars.scss | 6 +- src/main.ts | 34 +- src/polyfills.ts | 74 - src/styles.scss | 50 +- tsconfig-es5.app.json | 6 - tsconfig.app.json | 10 +- tsconfig.json | 21 +- tsconfig.spec.json | 18 - tslint.json | 24 - 121 files changed, 30124 insertions(+), 14692 deletions(-) create mode 100644 .agents/skills/igniteui-angular-components/SKILL.md create mode 100644 .agents/skills/igniteui-angular-components/references/charts.md create mode 100644 .agents/skills/igniteui-angular-components/references/data-display.md create mode 100644 .agents/skills/igniteui-angular-components/references/directives.md create mode 100644 .agents/skills/igniteui-angular-components/references/feedback.md create mode 100644 .agents/skills/igniteui-angular-components/references/form-controls.md create mode 100644 .agents/skills/igniteui-angular-components/references/layout-manager.md create mode 100644 .agents/skills/igniteui-angular-components/references/layout.md create mode 100644 .agents/skills/igniteui-angular-components/references/mcp-setup.md create mode 100644 .agents/skills/igniteui-angular-components/references/setup.md create mode 100644 .agents/skills/igniteui-angular-figma-to-app/SKILL.md create mode 100644 .agents/skills/igniteui-angular-figma-to-app/references/asset-extraction.md create mode 100644 .agents/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md create mode 100644 .agents/skills/igniteui-angular-figma-to-app/references/figma-component-map.md create mode 100644 .agents/skills/igniteui-angular-figma-to-app/references/mcp-setup.md create mode 100644 .agents/skills/igniteui-angular-figma-to-app/references/validation-patterns.md create mode 100644 .agents/skills/igniteui-angular-generate-from-image-design/SKILL.md create mode 100644 .agents/skills/igniteui-angular-generate-from-image-design/references/component-mapping.md create mode 100644 .agents/skills/igniteui-angular-generate-from-image-design/references/gotchas.md create mode 100644 .agents/skills/igniteui-angular-grids/SKILL.md create mode 100644 .agents/skills/igniteui-angular-grids/references/data-operations.md create mode 100644 .agents/skills/igniteui-angular-grids/references/editing.md create mode 100644 .agents/skills/igniteui-angular-grids/references/features.md create mode 100644 .agents/skills/igniteui-angular-grids/references/grid-migration.md create mode 100644 .agents/skills/igniteui-angular-grids/references/paging-remote.md create mode 100644 .agents/skills/igniteui-angular-grids/references/sizing.md create mode 100644 .agents/skills/igniteui-angular-grids/references/state.md create mode 100644 .agents/skills/igniteui-angular-grids/references/structure.md create mode 100644 .agents/skills/igniteui-angular-grids/references/types.md create mode 100644 .agents/skills/igniteui-angular-theming/SKILL.md create mode 100644 .agents/skills/igniteui-angular-theming/references/common-patterns.md create mode 100644 .agents/skills/igniteui-angular-theming/references/mcp-setup.md create mode 100644 .claude/CLAUDE.md create mode 100644 .claude/skills/igniteui-angular-components/SKILL.md create mode 100644 .claude/skills/igniteui-angular-components/references/charts.md create mode 100644 .claude/skills/igniteui-angular-components/references/data-display.md create mode 100644 .claude/skills/igniteui-angular-components/references/directives.md create mode 100644 .claude/skills/igniteui-angular-components/references/feedback.md create mode 100644 .claude/skills/igniteui-angular-components/references/form-controls.md create mode 100644 .claude/skills/igniteui-angular-components/references/layout-manager.md create mode 100644 .claude/skills/igniteui-angular-components/references/layout.md create mode 100644 .claude/skills/igniteui-angular-components/references/mcp-setup.md create mode 100644 .claude/skills/igniteui-angular-components/references/setup.md create mode 100644 .claude/skills/igniteui-angular-figma-to-app/SKILL.md create mode 100644 .claude/skills/igniteui-angular-figma-to-app/references/asset-extraction.md create mode 100644 .claude/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md create mode 100644 .claude/skills/igniteui-angular-figma-to-app/references/figma-component-map.md create mode 100644 .claude/skills/igniteui-angular-figma-to-app/references/mcp-setup.md create mode 100644 .claude/skills/igniteui-angular-figma-to-app/references/validation-patterns.md create mode 100644 .claude/skills/igniteui-angular-generate-from-image-design/SKILL.md create mode 100644 .claude/skills/igniteui-angular-generate-from-image-design/references/component-mapping.md create mode 100644 .claude/skills/igniteui-angular-generate-from-image-design/references/gotchas.md create mode 100644 .claude/skills/igniteui-angular-grids/SKILL.md create mode 100644 .claude/skills/igniteui-angular-grids/references/data-operations.md create mode 100644 .claude/skills/igniteui-angular-grids/references/editing.md create mode 100644 .claude/skills/igniteui-angular-grids/references/features.md create mode 100644 .claude/skills/igniteui-angular-grids/references/grid-migration.md create mode 100644 .claude/skills/igniteui-angular-grids/references/paging-remote.md create mode 100644 .claude/skills/igniteui-angular-grids/references/sizing.md create mode 100644 .claude/skills/igniteui-angular-grids/references/state.md create mode 100644 .claude/skills/igniteui-angular-grids/references/structure.md create mode 100644 .claude/skills/igniteui-angular-grids/references/types.md create mode 100644 .claude/skills/igniteui-angular-theming/SKILL.md create mode 100644 .claude/skills/igniteui-angular-theming/references/common-patterns.md create mode 100644 .claude/skills/igniteui-angular-theming/references/mcp-setup.md create mode 100644 .mcp.json create mode 100644 AGENTS.md create mode 100644 docs/chunk-B-Z5f9Bq.js create mode 100644 docs/chunk-BZLeeQ-I.js create mode 100644 docs/chunk-Df2FdJZg.js create mode 100644 docs/chunk-iest0pt_.js create mode 100644 docs/main-ZSOIWSXQ.js delete mode 100644 docs/main.3c19cdd3b7bfeee6.js delete mode 100644 docs/polyfills.9f7423acfeff3aa5.js create mode 100644 docs/prerendered-routes.json delete mode 100644 docs/runtime.70a8e1dd74829026.js delete mode 100644 docs/scripts.cd816875f3dc91fb.js create mode 100644 docs/styles-MLBARMBW.css delete mode 100644 docs/styles.c9823f20c1909450.css create mode 100644 eslint.config.js delete mode 100644 src/polyfills.ts delete mode 100644 tsconfig-es5.app.json delete mode 100644 tsconfig.spec.json delete mode 100644 tslint.json diff --git a/.agents/skills/igniteui-angular-components/SKILL.md b/.agents/skills/igniteui-angular-components/SKILL.md new file mode 100644 index 0000000..7551cdf --- /dev/null +++ b/.agents/skills/igniteui-angular-components/SKILL.md @@ -0,0 +1,62 @@ +--- +name: igniteui-angular-components +description: "Covers all non-grid Ignite UI for Angular UI components: application scaffolding and setup, form controls (inputs, combos, selects, date/time pickers, calendar, checkbox, radio, switch, slider), layout containers (tabs, stepper, accordion, splitter, navigation drawer), data-display components (list, tree, card, chips, carousel, paginator, progress indicators, chat), feedback overlays (dialog, snackbar, toast, banner), directives (button, icon button, button group, ripple, tooltip, drag-and-drop), Dock Manager, Layout Manager, Tile Manager, and Charts. Use when users ask about any Ignite UI Angular component that is NOT a data grid — such as forms, dropdowns, pickers, dialogs, navigation, lists, trees, cards, charts, or initial project setup. Do NOT use for data grids, tables, or tabular data — use igniteui-angular-grids instead. Do NOT use for theming or styling — use igniteui-angular-theming instead." +user-invocable: true +--- + +# Ignite UI for Angular — UI Components + +## Prerequisites +- An Angular project on the major version matching the installed `igniteui-angular` package (igniteui-angular majors track Angular majors) +- `@angular/cli` installed +- `igniteui-angular` or `@infragistics/igniteui-angular` added to the project via `ng add igniteui-angular` (or the `@infragistics` variant) or `npm install` — see [Package Variants](#package-variants) below. +- A theme applied to the application (see [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md)). +- `provideAnimations()` in `app.config.ts` — **required before using any overlay or animated component** + +## Ignite UI CLI MCP Server (recommended, not required) + +The `igniteui-cli` MCP server provides `list_components`, `get_doc`, `search_docs`, `search_api`, and `get_api_reference`. Its **full component docs cover a subset of components** (the catalog grows over releases — call `list_components` once to see what exists; e.g. Combo, Simple Combo, Chat, Tooltip, and grid toolbar/export docs). Where a `get_doc` doc exists, prefer it over the reference files below. `search_api`/`get_api_reference` cover API members (inputs, outputs, methods) for all components — use them for member-level lookups. For everything else, the reference files below are the primary guidance. + +If the tools are not available, do not block the task — use the reference files. Suggest that the user run `npx -y igniteui-cli ai-config` from the project root (it configures both the `igniteui-cli` and `igniteui-theming` MCP servers and copies the agent skill files) and reload the editor. MCP servers cannot be started mid-session; the configuration takes effect on the next session. Editor-specific details are in [`references/mcp-setup.md`](./references/mcp-setup.md). + +## Required Workflow + +**This file is a routing hub only. It contains no code examples and no API details.** Component APIs change between releases, so never write component selectors, import paths, input/output names, or directive names from memory — read the relevant reference files first. + +1. **Identify every component or feature involved.** Map the user's request to one or more rows in the Task → Reference File table below. A single request often spans multiple categories (e.g., a form inside a Dialog requires both `form-controls.md` and `feedback.md`). +2. **Read every identified reference file in full**, in a single parallel batch of file reads — even if you believe you already know the answer. +3. **Then produce output**, based only on what you read. If something is not covered by the reference files, look it up with `get_doc`/`search_docs` when the MCP tools are available; otherwise state explicitly that the detail is unverified instead of guessing. + +### Task → Reference File + +| Task | Reference file to read | +|---|---| +| App setup, `app.config.ts` providers, `provideAnimations()`, entry-point imports, convenience directive arrays | [`references/setup.md`](./references/setup.md) | +| Input Group, Combo, Simple Combo, Select, Date Picker, Date Range Picker, Time Picker, Calendar, Checkbox, Radio, Switch, Slider, Autocomplete, reactive/template-driven forms | [`references/form-controls.md`](./references/form-controls.md) | +| Tabs, Bottom Navigation, Stepper, Accordion, Expansion Panel, Splitter, Navigation Drawer | [`references/layout.md`](./references/layout.md) | +| List, Tree, Card, Chips, Avatar, Badge, Icon, Carousel, Paginator, Progress Indicators, Chat | [`references/data-display.md`](./references/data-display.md) | +| Dialog, Snackbar, Toast, Banner | [`references/feedback.md`](./references/feedback.md) | +| Button, Icon Button, Button Group, Ripple, Tooltip, Drag and Drop | [`references/directives.md`](./references/directives.md) | +| Layout Manager (`igxLayout`, `igxFlex` directives), Dock Manager (`igc-dockmanager` web component), Tile Manager (`igc-tile-manager` web component) | [`references/layout-manager.md`](./references/layout-manager.md) | +| Charts (Area, Bar, Column, Stock/Financial, Pie), chart configuration, chart features (animation, tooltips, markers, highlighting, zooming), data binding | [`references/charts.md`](./references/charts.md) | + +> **When in doubt, read more rather than fewer reference files.** The cost of an unnecessary file read is negligible; the cost of hallucinated API usage is a broken application. + +--- + +## Package Variants + +| Package | Install | Who uses it | +|---|---|---| +| `igniteui-angular` | `npm install igniteui-angular` | Open-source / community | +| `@infragistics/igniteui-angular` | Requires private `@infragistics` registry | Licensed / enterprise users | + +Both packages share **identical entry-point paths**. Check `package.json` and use that package name as the prefix for every import. Never import from the root barrel of either package. +Both packages can be added to the project using `@angular/cli` with the following commands: `ng add igniteui-angular` or `ng add @infragistics/igniteui-angular`. + +--- + +## Related Skills + +- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — Data Grids (Flat Grid, Tree Grid, Hierarchical Grid, Pivot Grid, Grid Lite) +- [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.agents/skills/igniteui-angular-components/references/charts.md b/.agents/skills/igniteui-angular-components/references/charts.md new file mode 100644 index 0000000..2e9bc6e --- /dev/null +++ b/.agents/skills/igniteui-angular-components/references/charts.md @@ -0,0 +1,250 @@ +# Angular Charts Reference + +## Contents + +- [Overview](#overview) +- [General Chart Configuration](#general-chart-configuration) +- [Chart Types Reference](#chart-types-reference) +- [Standalone component example](#standalone-component-example) +- [Common errors and fixes](#common-errors-and-fixes) +- [Styling & Theming](#styling--theming) + +## Overview + +Ignite UI for Angular Charts provides 65+ chart types for data visualization. Charts are packaged separately in `igniteui-angular-charts` (or `@infragistics/igniteui-angular-charts` for licensed users). +This reference gives high-level guidance on when to use each chart type, their key features, and common API members. The MCP doc catalog currently has no chart docs — use `search_api` for member-level lookups. + +### Chart Component packages +- `igniteui-angular-charts` — Category Chart, Financial Chart, Data Chart, Pie Chart, and Sparkline components (NPM) +- `@infragistics/igniteui-angular-charts` — Licensed version with same API (ProGet) + +### Main Chart Components + +> **IMPORTANT — Not Standalone Components**: Chart components from `igniteui-angular-charts` are **NOT** Angular standalone components (they predate the standalone API). They must always be imported via their **NgModule**. Standalone Angular components (Angular 14+) can still import NgModules directly in their `imports` array — this is fully supported. + +| Component | NgModule to import | Description | +|---|---|---| +| `IgxCategoryChartComponent` | `IgxCategoryChartModule` | Simplified API for column, line, area, spline, StepLine/StepArea, point, waterfall | +| `IgxFinancialChartComponent` | `IgxFinancialChartModule` | Stock/candlestick charts with OHLC data | +| `IgxDataChartComponent` | `IgxDataChartModule` | Advanced: explicit axes, series, >65 chart types | +| `IgxPieChartComponent` | `IgxPieChartModule` | Part-to-whole pie and donut charts | +| `IgxDataPieChartComponent` | `IgxDataPieChartModule` | Simplified API for pie charts | +| `IgxLegendComponent` | `IgxLegendModule` | Shared legend component | +| `IgxSparklineComponent` | `IgxSparklineModule` | Compact inline chart for grid cells or small layouts | + +### When to use each: +- **Category Chart** → Use for simple area/column/line/spline/waterfall; let framework auto-configure +- **Financial Chart** → Use for stock data with time-series OHLC, indicators, volume +- **Data Chart** → Use for advanced scenarios: multiple axes, custom series combinations, stacked/scatter +- **Pie Chart** → Use for part-to-whole (segments sum to 100%) +- **Sparkline** → Use for compact inline visualization in grid cells, dashboards, or small-space layouts + +--- + +## General Chart Configuration + +### Chart Type Selection +- **Category Chart**: `chartType` property — type: `CategoryChartType` (Auto, Line, Area, Column, Spline, ...) +- **Financial Chart**: `chartType` property — type: `FinancialChartType` (Auto, Bar, Candle, ...) +- **Data Chart**: Configure explicit series (IgxAreaSeriesComponent, IgxBarSeriesComponent, IgxColumnSeriesComponent, etc.) +- **Sparkline**: `displayType` property — type: `SparklineDisplayType` (Line, Area, Column, WinLoss) +- **Pie Chart**: No chartType needed; inherent pie structure + +### Required Properties + +**IgxCategoryChartComponent** (simplest API; auto-detects numeric & string columns): +- `dataSource` — Data array (required) +- `chartType` — type: `CategoryChartType` +- Component auto-detects: first string column → X-axis labels, numeric columns → Y-axis data + +**IgxDataChartComponent** (advanced; requires explicit configuration): +- Data is bound on individual series via `itemsSource`, not on the chart itself +- `valueMemberPath` — Set on the series, not the chart +- Requires explicit axis and series components + +**IgxFinancialChartComponent** (stock data): +- `dataSource` — Data array with date + OHLC columns (chart auto-detects columns) +- `chartType` — type: `FinancialChartType` + +**IgxPieChartComponent**: +- `dataSource` — Data array +- `labelMemberPath` — Field with category labels +- `valueMemberPath` — Field with numeric values + +### Responsive & Sizing +- Set height/width on chart container (div, flexbox parent). The chart will render with 0px height if the container doesn't have a defined height. + +--- + +## Chart Types Reference + +### Area Chart (`IgxCategoryChartComponent`, `chartType: 'Area'`) +- **Use**: Trends over time, cumulative part-to-whole +- **Data**: X-axis categories, Y-axis numeric values +- **Variants**: Area, StepArea, Stacked Area, Stacked 100% Area +- **API**: `chartType`, `dataSource` (auto-detects numeric columns) +- **Best Practices**: + - Start Y-axis at 0 for accuracy + - Use transparent colors for overlaid series + - Order time-series left to right +- **Avoid**: More than 7-10 series (readability), when data values are similar (overlap) + +### Bar Chart (`IgxDataChartComponent`, `IgxBarSeriesComponent`) +- **Use**: Compare categories, show rankings, time-series changes +- **Data**: X-axis numeric, Y-axis categories (reversed from Column) +- **Variants**: Grouped Bar, Stacked Bar, Stacked 100% Bar, Polar Bar +- **Best Practices**: + - Start numeric axis at 0 + - Sort categories by value (ascending/descending) + - Right-align Y-axis labels +- **Avoid**: Too much data (axis becomes illegible), Time-series detail (use Line instead) + +### Column Chart (`IgxCategoryChartComponent`, `chartType: 'Column'`) +- **Use**: Compare categories, show distribution, time-series changes +- **Data**: X-axis categories, Y-axis numeric values +- **Variants**: Column, StackedColumn, Stacked100%Column, RangeColumn, WaterfallColumn +- **Best Practices**: + - Start Y-axis at 0 + - Order time-series left to right +- **Avoid**: Many series (>10) side-by-side (readability) +- **Related**: Bar Chart (horizontal equivalent, use `IgxDataChartComponent` + `IgxBarSeriesComponent`), Waterfall (show differences between values) + +### Stock Chart (`IgxFinancialChartComponent`) +- **Use**: Financial/OHLC data analysis, candlestick visualization, technical indicators +- **Data Structure**: + - **Required**: Date/time column, numeric value column(s) + - **For Candlestick**: Open, High, Low, Close (4 numeric columns) + - **With Volume**: Open, High, Low, Close, Volume (5 numeric columns) +- **Display Modes**: + - **Price Pane**: Show candlestick, OHLC bar, line (configurable via `chartType`) + - **Volume Pane**: Show trading volume (column, line, or area chart) + - **Indicator Pane**: Financial indicators (RSI, MACD, Bollinger Bands, etc.) + - **Zoom Pane**: Navigation slider to zoom/pan +- **Indicators**: RSI, MACD, Bollinger Bands, Force Index, Standard Deviation, and more +- **Features**: + - Crosshairs with value snapshots + - Trendlines and overlays + - Time-based filters (users can select 1M, 3M, 6M, YTD, 1Y, ALL) +- **Data Binding**: + - The Financial Chart auto-detects OHLC, Volume, and Date columns from the data source + - Data items should have properties named like `open`, `high`, `low`, `close`, `volume`, `date` (or similar) + - No explicit member path properties are needed on the chart component + +### Pie Chart (`IgxPieChartComponent` or `IgxDataPieChartComponent`) +- **Use**: Part-to-whole visualization (segments sum to 100%) +- **Data**: Category labels, numeric values +- **Variants**: Pie, Donut (ring), Radial Pie +- **Features**: + - Slice explosion (separate a slice from pie) + - Slice selection (single or multiple) + - Legends with custom item templates + - Animation on load + - "Others" category for small segments +- **Best Practices**: + - Use for small data sets (6-8 segments max) + - Arrange largest to smallest (clockwise from 12 o'clock) + - Ensure segments sum to 100% + - Use distinguishable colors +- **Avoid**: Many segments (>8), change over time (use Bar/Line instead), precise comparisons (Bar is better) + +### Sparkline (`IgxSparklineComponent`) +- **Use**: Compact inline data visualization in grid cells, dashboards, or small-space layouts +- **Data**: One-dimensional array with at least one numeric field +- **Variants**: Line, Area, Column, WinLoss +- **Features**: + - Configurable markers (All, Low, High, First, Last, Negative) + - Normal range — horizontal shaded band (`normalRangeMinimum`, `normalRangeMaximum`) + - Trendlines via `trendLineType` + - Unknown value plotting via `unknownValuePlotting` + - Tooltip support via `tooltipTemplate` +- **Best Practices**: + - Set explicit `height` and `width` on the component or its container (renders at 0px otherwise) + - Start Y-axis at 0 for accurate comparisons + - Use Line or Area type for trend visualization; Column for discrete comparisons; WinLoss for binary positive/negative + - When embedding in a grid cell, set compact dimensions (e.g. `height="40px"` `width="220px"`) +- **Avoid**: Detailed data analysis (use Category Chart or Data Chart), displaying many data labels (Sparkline only supports first/last X-axis labels and high/low Y-axis values) + +--- + +### Standalone component example + +```typescript +import { Component } from '@angular/core'; +import { + IgxCategoryChartModule, + CategoryChartType +} from 'igniteui-angular-charts'; + +@Component({ + selector: 'app-sales-chart', + imports: [ + IgxCategoryChartModule // ✅ Import the NgModule, NOT IgxCategoryChartComponent + ], + template: ` + + + ` +}) +export class SalesChartComponent { + data = [ + { month: 'Jan', revenue: 5000 }, + { month: 'Feb', revenue: 6500 }, + { month: 'Mar', revenue: 7200 } + ]; +} +``` + +### Common errors and fixes + +**Error 1: NG2011 — component not standalone** +``` +// ❌ WRONG: importing component directly +import { IgxCategoryChartComponent } from 'igniteui-angular-charts'; +@Component({ imports: [IgxCategoryChartComponent] }) + +// ✅ CORRECT: import the NgModule instead +import { IgxCategoryChartModule } from 'igniteui-angular-charts'; +@Component({ imports: [IgxCategoryChartModule] }) +``` + +**Error 2: NG8002 — can't bind to property (incorrect inputs)** +``` +// ❌ WRONG: using IgxDataChartComponent or generic property names + + [valueMemberPath]="'value'" + [showDefaultTooltip]="true" + [transitionDuration]="400"> + +// ✅ CORRECT: use Category Chart's actual inputs + +``` + +**Key difference**: IgxCategoryChartComponent **auto-detects** numeric columns and requires minimal configuration. For fine-grained control over field mapping and series types, use `IgxDataChartComponent` instead (but it requires explicit series and axis components). + +--- + +## Styling & Theming + +### Color Customization +- **Series colors**: `brushes` (fill), `outlines` (border) +- **Marker colors**: `markerBrushes`, `markerOutlines` +- **Axis styles**: `xAxisMajorStroke`, `yAxisMajorStroke`, `xAxisLabelTextColor`, `yAxisLabelTextColor` +- **Tooltip**: Controlled via `toolTipType` and custom tooltip templates +- **Highlight**: `highlightingFadeOpacity` (opacity for faded non-highlighted series) + +### CSS & Host Binding +- Chart containers inherit CSS flex/grid properties +- Use host element width/height for responsive sizing +- Theme colors via `IgxTheme` palette + diff --git a/.agents/skills/igniteui-angular-components/references/data-display.md b/.agents/skills/igniteui-angular-components/references/data-display.md new file mode 100644 index 0000000..5f0e510 --- /dev/null +++ b/.agents/skills/igniteui-angular-components/references/data-display.md @@ -0,0 +1,273 @@ +# Data Display & Other UI Components + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +## Contents + +- [List](#list) +- [Tree](#tree) +- [Card](#card) +- [Chips](#chips) +- [Avatar & Badge](#avatar--badge) +- [Icon](#icon) +- [Carousel](#carousel) +- [Paginator](#paginator) +- [Progress Indicators](#progress-indicators) +- [Chat (AI Chat Component)](#chat-ai-chat-component) + +## List + +```typescript +import { IGX_LIST_DIRECTIVES } from 'igniteui-angular/list'; +import { IgxAvatarComponent } from 'igniteui-angular/avatar'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + Contacts + @for (contact of contacts; track contact.id) { + + + {{ contact.name }} + {{ contact.phone }} + phone + + } + +``` + +Auxiliary directives for list items: `igxListThumbnail`, `igxListAction`, `igxListLine`, `igxListLineTitle`, `igxListLineSubTitle`. + +## Tree + +```typescript +import { IGX_TREE_DIRECTIVES } from 'igniteui-angular/tree'; +``` + +```html + + @for (node of treeData; track node.id) { + + folder + {{ node.label }} + @for (child of node.children; track child.id) { + + description + {{ child.label }} + + } + + } + +``` + +Selection modes: `'None'`, `'BiState'`, `'Cascading'`. + +## Card + +```typescript +import { IgxCardComponent, IgxCardHeaderComponent, IgxCardContentDirective, IgxCardActionsComponent, IgxCardMediaDirective, IgxCardHeaderTitleDirective, IgxCardHeaderSubtitleDirective, IgxCardThumbnailDirective } from 'igniteui-angular/card'; +import { IgxAvatarComponent } from 'igniteui-angular/avatar'; +import { IgxButtonDirective, IgxIconButtonDirective } from 'igniteui-angular/directives'; +import { IgxRippleDirective } from 'igniteui-angular/directives'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + + + + + + +

{{ article.title }}

+
{{ author.name }}
+
+ +

{{ article.excerpt }}

+
+ + + + +
+``` + +## Chips + +```typescript +import { IgxChipComponent, IgxChipsAreaComponent } from 'igniteui-angular/chips'; +``` + +```html + + @for (tag of tags; track tag) { + + {{ tag }} + + } + +``` + +## Avatar & Badge + +```typescript +import { IgxAvatarComponent } from 'igniteui-angular/avatar'; +import { IgxBadgeComponent } from 'igniteui-angular/badge'; +``` + +```html + +
+ + +
+ + + + + + + + + +``` + +```scss +// Required styles to position the badge as an overlay on the avatar +.avatar-badge-container { + position: relative; + display: inline-flex; + + igx-badge { + position: absolute; + bottom: 0; + right: 0; + transform: translate(25%, 25%); + } +} +``` + +Avatar shapes: `'circle'`, `'rounded'`, `'square'`. Sizes: `'small'`, `'medium'`, `'large'`, or custom CSS. +Badge types: `'primary'`, `'info'`, `'success'`, `'warning'`, `'error'`. + +## Icon + +```typescript +import { IgxIconComponent, IgxIconService } from 'igniteui-angular/icon'; +``` + +```html + +settings +favorite + + + +``` + +Register custom SVG icons in a service or component constructor: + +```typescript +export class AppComponent { + constructor() { + const iconService = inject(IgxIconService); + // From inline SVG string + iconService.addSvgIconFromText('logo', '...', 'my-icons'); + // From URL + iconService.addSvgIcon('arrow', '/assets/icons/arrow.svg', 'my-icons'); + } +} +``` + +## Carousel + +```typescript +import { IgxCarouselComponent, IgxSlideComponent } from 'igniteui-angular/carousel'; +``` + +```html + + @for (slide of slides; track slide.id) { + + +
{{ slide.caption }}
+
+ } +
+``` + +> **Important:** Carousel uses Angular animations — ensure `provideAnimations()` is present in `app.config.ts`. + +## Paginator + +```typescript +import { IgxPaginatorComponent } from 'igniteui-angular/paginator'; +``` + +```html + + +``` + +> **NOTE:** For grid paging, attach `` inside the grid element. See [`../../igniteui-angular-grids/references/paging-remote.md`](../../igniteui-angular-grids/references/paging-remote.md) for grid-specific paging patterns. + +## Progress Indicators + +```typescript +import { IgxLinearProgressBarComponent } from 'igniteui-angular/progressbar'; +import { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar'; +``` + +```html + + + + + + + + + +``` + +Types for linear bar: `'default'`, `'info'`, `'success'`, `'warning'`, `'error'`. + +## Chat (AI Chat Component) + +> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "chat" })` covers messages, attachments, quick replies, typing indicators, templates, and styling. Prefer it over writing chat code from memory. + +```typescript +import { IgxChatComponent, IgxChatMessageContextDirective, type IgxChatOptions } from 'igniteui-angular/chat'; +import { MarkdownPipe } from 'igniteui-angular/chat-extras'; // template usage: message.text | fromMarkdown | async +``` + +Gotchas not obvious from the doc: + +- The markdown pipe class is `MarkdownPipe` (from `igniteui-angular/chat-extras`) but its template name is `fromMarkdown`, and it is async — combine with `AsyncPipe`. +- Custom templates (`messageHeader`, `messageContent`, `suggestionPrefix`, …) are passed as one object via the `[templates]` input — collect the `ng-template` refs with `viewChild` and assemble the object in an `effect()` (or `computed()`). + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner +- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop +- [`../../igniteui-angular-grids/references/paging-remote.md`](../../igniteui-angular-grids/references/paging-remote.md) — Grid-specific paginator usage diff --git a/.agents/skills/igniteui-angular-components/references/directives.md b/.agents/skills/igniteui-angular-components/references/directives.md new file mode 100644 index 0000000..3bfa990 --- /dev/null +++ b/.agents/skills/igniteui-angular-components/references/directives.md @@ -0,0 +1,162 @@ +# Directives + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +## Contents + +- [Button & Icon Button](#button--icon-button) +- [Button Group](#button-group) +- [Ripple Effect](#ripple-effect) +- [Tooltip](#tooltip) +- [Drag and Drop](#drag-and-drop) + +## Button & Icon Button + +```typescript +import { IgxButtonDirective, IgxIconButtonDirective } from 'igniteui-angular/directives'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + + + + + + + + + + + + +``` + +Button variants for `igxButton`: `'flat'`, `'contained'`, `'outlined'`, `'fab'`. +Button variants for `igxIconButton`: `'flat'`, `'outlined'`, `'contained'`. + +## Button Group + +```typescript +// Option A — convenience collection (includes IgxButtonGroupComponent + IgxButtonDirective) +import { IGX_BUTTON_GROUP_DIRECTIVES } from 'igniteui-angular/button-group'; + +// Option B — individual imports +import { IgxButtonGroupComponent } from 'igniteui-angular/button-group'; +import { IgxButtonDirective } from 'igniteui-angular/directives'; + +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + + + + +``` + +- `selectionMode`: `'single'` (default) | `'singleRequired'` (one always stays selected) | `'multi'` +- `alignment`: `'horizontal'` (default) | `'vertical'`; `[disabled]` on the group disables all buttons +- `(selected)`/`(deselected)` emit `IButtonGroupEventArgs` (`{ owner, button, index }`, from `igniteui-angular/button-group`) +- Programmatic: `selectButton(index)`, `deselectButton(index)`, `selectedButtons` on `IgxButtonGroupComponent` +- Further members: `search_api({ framework: "angular", query: "IgxButtonGroupComponent" })` + +## Ripple Effect + +```typescript +import { IgxRippleDirective } from 'igniteui-angular/directives'; +``` + +```html + + +
Interactive div
+``` + +Inputs: `[igxRipple]` (ripple color), `[igxRippleCentered]` (always start from center), `[igxRippleDisabled]`. + +```html + +``` + +## Tooltip + +> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "tooltip" })` covers triggers, overlay behavior, sticky/arrowed tooltips, styling, and accessibility. + +The at-a-glance pairing — `igxTooltipTarget` on the host references the `igxTooltip` element (both from `igniteui-angular/directives`): + +```html + +
Helpful tooltip text
+``` + +## Drag and Drop + +```typescript +import { IgxDragDirective, IgxDropDirective, IDragMoveEventArgs, IDropDroppedEventArgs } from 'igniteui-angular/directives'; +``` + +### Basic drag and drop + +```html + +
+ drag_indicator + {{ item.name }} +
+ + +
+ Drop here +
+``` + +```typescript +onDrop(event: IDropDroppedEventArgs) { + const draggedItem = event.drag.data; + // Move draggedItem to this drop zone + event.cancel = false; // allow the drop +} +``` + +### Ghost element (custom drag preview) + +```html +
Drag me
+ + +
+ content_copy Moving... +
+
+``` + +### Reorderable list + +```html + + @for (item of items; track item.id) { + + drag_handle + {{ item.name }} + + } + +``` + +Key drag events: `(dragStart)`, `(dragMove)`, `(dragEnd)`, `(dragClick)`, `(ghostCreate)`, `(ghostDestroy)`, `(transitioned)`. +Key drop events: `(enter)`, `(leave)`, `(over)`, `(dropped)`. + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner diff --git a/.agents/skills/igniteui-angular-components/references/feedback.md b/.agents/skills/igniteui-angular-components/references/feedback.md new file mode 100644 index 0000000..5fcc509 --- /dev/null +++ b/.agents/skills/igniteui-angular-components/references/feedback.md @@ -0,0 +1,141 @@ +# Feedback & Overlay Components + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +> **Important:** All components in this file rely on Angular animations and the Ignite UI overlay system. Before using any of them, ensure `provideAnimations()` (or `provideAnimationsAsync()`) is present in `app.config.ts`. If it is missing, add it — these components will throw runtime errors or silently fail to animate without it. + +## Contents + +- [Dialog](#dialog) +- [Snackbar](#snackbar) +- [Toast](#toast) +- [Banner](#banner) +- [Key Rules](#key-rules) + +## Dialog + +```typescript +import { IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective } from 'igniteui-angular/dialog'; +import { IgxButtonDirective } from 'igniteui-angular/directives'; +``` + +```html + + Confirm Delete +

Are you sure you want to delete this item? This action cannot be undone.

+
+ + +
+
+ + +``` + +Programmatic control: + +```typescript +dialog = viewChild.required('confirmDialog'); + +open() { this.dialog().open(); } +close() { this.dialog().close(); } +``` + +Events: `(opening)`, `(opened)`, `(closing)`, `(closed)`, `(leftButtonSelect)`, `(rightButtonSelect)`. + +## Snackbar + +```typescript +import { IgxSnackbarComponent } from 'igniteui-angular/snackbar'; +import { IgxButtonDirective } from 'igniteui-angular/directives'; +``` + +```html + + Item saved successfully + +``` + +Trigger in TypeScript: + +```typescript +snackbar = viewChild.required('snackbar'); + +save() { + this.dataService.save(this.item); + this.snackbar().open('Item saved'); // optional: pass message text +} +``` + +## Toast + +```typescript +import { IgxToastComponent } from 'igniteui-angular/toast'; +``` + +```html +Operation complete + + +``` + +Toast vs Snackbar: Toast is non-interactive (no action button), always auto-hides. Snackbar supports an action button and can be persistent. + +## Banner + +```typescript +import { IgxBannerComponent, IgxBannerActionsDirective } from 'igniteui-angular/banner'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +import { IgxButtonDirective } from 'igniteui-angular/directives'; +``` + +```html + + wifi_off + You are offline. Some features may not be available. + + + + + +``` + +Trigger in TypeScript: + +```typescript +banner = viewChild.required('banner'); + +showOfflineWarning() { this.banner().open(); } +hideWarning() { this.banner().close(); } +``` + +Events: `(opening)`, `(opened)`, `(closing)`, `(closed)`. + +Banner always renders inline (not overlaid) — it pushes page content down when open. + +## Key Rules + +- **`provideAnimations()` is required** — add it to `app.config.ts` before using Dialog, Snackbar, Toast, or Banner +- **Dialog** uses the Ignite UI overlay system — set `[isModal]="true"` for blocking modals +- **Snackbar** vs **Toast**: Snackbar supports action buttons and can be persistent; Toast is always auto-hiding and non-interactive +- **Banner** renders **inline** (pushes content), not as an overlay — use Dialog for blocking prompts + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components +- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.agents/skills/igniteui-angular-components/references/form-controls.md b/.agents/skills/igniteui-angular-components/references/form-controls.md new file mode 100644 index 0000000..e873b4e --- /dev/null +++ b/.agents/skills/igniteui-angular-components/references/form-controls.md @@ -0,0 +1,309 @@ +# Form Controls & Reactive Forms Integration + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +## Contents + +- [Input Group](#input-group) +- [Combo (Multi-Select Dropdown)](#combo-multi-select-dropdown) +- [Simple Combo (Single-Select)](#simple-combo-single-select) +- [Select](#select) +- [Date Picker](#date-picker) +- [Date Range Picker](#date-range-picker) +- [Time Picker](#time-picker) +- [Calendar](#calendar) +- [Checkbox, Radio, Switch](#checkbox-radio-switch) +- [Slider](#slider) +- [Autocomplete](#autocomplete) +- [Reactive Forms Integration](#reactive-forms-integration) +- [Key Rules](#key-rules) + +## Input Group + +```typescript +import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + person + + + clear + Enter your username + +``` + +Types: `line` (default), `border`, `box`, `search`. + +## Combo (Multi-Select Dropdown) + +> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "combo" })` covers data binding, selection APIs, forms support, keyboard behavior, and known issues. Prefer it over this snippet when available. + +```typescript +import { IgxComboComponent } from 'igniteui-angular/combo'; +``` + +```html + +``` + +## Simple Combo (Single-Select) + +> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "simple-combo" })`. + +`IgxSimpleComboComponent` from `igniteui-angular/simple-combo` (its own entry point, not `/combo`). Same API as `igx-combo` but restricted to single selection. + +## Select + +```typescript +import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select'; +``` + +```html + + @for (role of roles; track role.id) { + {{ role.name }} + } + +``` + +## Date Picker + +```typescript +import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; +``` + +```html + + +``` + +Implements `ControlValueAccessor` and `Validator`. Works with both reactive and template-driven forms. + +## Date Range Picker + +```typescript +import { IgxDateRangePickerComponent, IgxDateRangeStartComponent, IgxDateRangeEndComponent } from 'igniteui-angular/date-picker'; +import { IgxDateTimeEditorDirective } from 'igniteui-angular/directives'; +import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +import { IgxPickerToggleComponent, IgxPickerClearComponent } from 'igniteui-angular/core'; +``` + +Two-input configuration rules — place the `input` directly inside `igx-date-range-start`/`igx-date-range-end` (no extra `igx-input-group` wrapper); use `igx-picker-toggle igxPrefix` for the calendar action and `igx-picker-clear igxSuffix` for the clear action on **both** inputs. A plain `igx-prefix`/`igx-suffix` icon is decorative only and does not trigger picker actions. + +```html + + + calendar_today + + + clear + + + calendar_today + + + clear + + +``` + +## Time Picker + +```typescript +import { IgxTimePickerComponent } from 'igniteui-angular/time-picker'; +``` + +```html + + +``` + +## Calendar + +```typescript +import { IgxCalendarComponent } from 'igniteui-angular/calendar'; +``` + +```html + + +``` + +Selection modes: `'single'`, `'multi'`, `'range'`. + +## Checkbox, Radio, Switch + +```typescript +import { IgxCheckboxComponent } from 'igniteui-angular/checkbox'; +import { IgxRadioComponent, IgxRadioGroupDirective } from 'igniteui-angular/radio'; +import { IgxSwitchComponent } from 'igniteui-angular/switch'; +``` + +```html +Remember me + + + Basic + Pro + + +Dark mode +``` + +## Slider + +```typescript +import { IgxSliderComponent, IgxSliderType } from 'igniteui-angular/slider'; + +public sliderType = IgxSliderType; + public priceRange = { + lower: 200, + upper: 800 + }; +``` + +```html + + + + + + +``` + +## Autocomplete + +```typescript +import { IgxAutocompleteDirective, IgxDropDownComponent, IgxDropDownItemComponent } from 'igniteui-angular/drop-down'; +import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; +``` + +```html + + + + + + @for (city of cities | startsWith:selectedCity; track city) { + + {{ city }} + + } + +``` + +The `igxAutocomplete` directive attaches to an input and displays a drop-down of suggestions as the user types. It references an `igx-drop-down` via a template variable. + +Filtering is **not** built in — use a pipe or filter the data in the component to control which items appear. + +## Reactive Forms Integration + +All form controls implement `ControlValueAccessor` and work with both reactive and template-driven forms. + +```typescript +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms'; +import { IgxComboComponent } from 'igniteui-angular/combo'; +import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; +import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; +import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select'; + +@Component({ + selector: 'app-my-form', + imports: [ + ReactiveFormsModule, + IGX_INPUT_GROUP_DIRECTIVES, + IgxComboComponent, + IgxDatePickerComponent, + IgxSelectComponent, + IgxSelectItemComponent + ], + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` +
+ + + + @if (form.controls.name.invalid && form.controls.name.touched) { + Name is required + } + + + + + + + + + @for (r of roles; track r.id) { + {{ r.name }} + } + +
+ ` +}) +export class MyFormComponent { + form = new FormGroup({ + name: new FormControl('', Validators.required), + skills: new FormControl([]), + startDate: new FormControl(null), + role: new FormControl(null) + }); + + skills = [{ id: 1, name: 'Angular' }, { id: 2, name: 'TypeScript' }]; + roles = [{ id: 'admin', name: 'Admin' }, { id: 'user', name: 'User' }]; + + submit() { + if (this.form.valid) { + console.log(this.form.value); + } + } +} +``` + +## Key Rules + +- **Always check `app.config.ts` first** — add `provideAnimations()` before using Combo, Select, Date Picker, or any overlay component +- **Import from specific entry points** — avoid the root `igniteui-angular` barrel +- Date/Time pickers implement both `ControlValueAccessor` and `Validator` — they integrate with reactive forms natively +- How to choose between Combo, Simple Combo, Select, and Auto-complete: + - Use `igx-combo` for multi-select dropdowns with built-in filtering and grouping + - Use `igx-simple-combo` for single-select dropdowns with built-in filtering and grouping + - Use `igx-select` for simple single-select dropdowns without filtering or grouping (or when you want to provide custom filtering UI) + - Use `igxAutocomplete` for input fields with dynamic suggestions based on user input + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner +- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.agents/skills/igniteui-angular-components/references/layout-manager.md b/.agents/skills/igniteui-angular-components/references/layout-manager.md new file mode 100644 index 0000000..8a62972 --- /dev/null +++ b/.agents/skills/igniteui-angular-components/references/layout-manager.md @@ -0,0 +1,322 @@ +# Layout Manager, Dock Manager & Tile Manager + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +## Contents + +- [Layout Manager Directives](#layout-manager-directives) +- [Dock Manager](#dock-manager) +- [Tile Manager](#tile-manager) + +--- + +## Layout Manager Directives + +The Layout Manager is a pair of Angular directives (`igxLayout` / `igxFlex`) that wrap CSS Flexbox. Apply `igxLayout` to any container to control its children's flow; apply `igxFlex` to individual children to control their flex properties. + +```typescript +import { IgxLayoutDirective, IgxFlexDirective } from 'igniteui-angular/directives'; +``` + +```html + +
+
Item 1
+
Item 2
+
Item 3
+
+``` + +### Common Layout Patterns + +#### App Shell (Sidebar + Content) + +```html +
+ + + + + +
+
Header
+
+ +
+
Col 1
+
Col 2
+
Col 3
+
+
+ +
+ +
+``` + +Other patterns (centering, wrapping tile grids) follow directly from the directive inputs below — e.g. `igxLayoutJustify="center" igxLayoutItemAlign="center"` to center, `igxLayoutWrap="wrap"` + fixed `igxFlexBasis` children for tile grids. + +### `igxLayout` Directive Inputs + +| Input | Values | Default | Description | +|---|---|---|---| +| `igxLayoutDir` | `'row'` \| `'column'` | `'row'` | Flex direction | +| `igxLayoutReverse` | `true` \| `false` | `false` | Reverse flow order | +| `igxLayoutWrap` | `'nowrap'` \| `'wrap'` \| `'wrap-reverse'` | `'nowrap'` | Child wrapping | +| `igxLayoutJustify` | `'flex-start'` \| `'center'` \| `'flex-end'` \| `'space-between'` \| `'space-around'` | `'flex-start'` | Main axis alignment | +| `igxLayoutItemAlign` | `'flex-start'` \| `'center'` \| `'flex-end'` \| `'stretch'` \| `'baseline'` | `'stretch'` | Cross axis alignment | + +### `igxFlex` Directive Inputs + +| Input | Type | Default | Description | +|---|---|---|---| +| `igxFlexGrow` | `number` | `1` | How much the element grows to fill space | +| `igxFlexShrink` | `number` | `1` | How much the element shrinks when space is limited | +| `igxFlexBasis` | `string` | `'auto'` | Initial main-axis size (e.g., `'200px'`, `'30%'`) | +| `igxFlexOrder` | `number` | `0` | Visual order among siblings | + +### Key Rules for Layout Manager + +- `igxLayout` affects its **immediate children only** — nest multiple `igxLayout` containers for deeper control +- Combine `igxLayoutDir="column"` on the outer container with `igxFlex` on children to create page shells +- `igxFlexGrow="0"` on headers/footers/sidebars prevents them from stretching; leave it at `1` (default) for the main content area +- This is a thin CSS Flexbox wrapper — the container element gets `display: flex` applied + +--- + +## Dock Manager + +The Dock Manager is a **separate package** (`igniteui-dockmanager`) and is implemented as a **Web Component** (``). It provides IDE-style dockable, resizable, floating, and tabbed pane layouts. It is a **premium** (licensed) component. + +### Installation + +```bash +npm install igniteui-dockmanager +``` + +### Setup + +Because Dock Manager is a Web Component, it requires two one-time setup steps: + +**1. Register custom elements — `app.config.ts`:** + +```typescript +import { defineCustomElements } from 'igniteui-dockmanager/loader'; + +defineCustomElements(); +``` + +**2. Add `CUSTOM_ELEMENTS_SCHEMA` to every standalone component that uses ``:** + +```typescript +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; + +@Component({ + selector: 'app-dock-manager', + templateUrl: './dock-manager.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class DockManagerComponent { ... } +``` + +### Basic Usage + +```typescript +import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { + IgcDockManagerLayout, + IgcDockManagerPaneType, + IgcSplitPaneOrientation +} from 'igniteui-dockmanager'; + +@Component({ + selector: 'app-dock-manager', + templateUrl: './dock-manager.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class DockManagerComponent { + layout: IgcDockManagerLayout = { + rootPane: { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.horizontal, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'sidebar', + header: 'Explorer' + }, + { + type: IgcDockManagerPaneType.documentHost, + rootPane: { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.horizontal, + allowEmpty: true, + panes: [ + { + type: IgcDockManagerPaneType.tabGroupPane, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + header: 'File 1', + contentId: 'doc1', + documentOnly: true + }, + { + type: IgcDockManagerPaneType.contentPane, + header: 'File 2', + contentId: 'doc2', + documentOnly: true + } + ] + } + ] + } + }, + { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.vertical, + size: 280, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'properties', + header: 'Properties' + }, + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'output', + header: 'Output', + isPinned: false // starts unpinned (auto-hidden) + } + ] + } + ] + }, + floatingPanes: [ + { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.horizontal, + floatingWidth: 300, + floatingHeight: 200, + floatingLocation: { x: 200, y: 150 }, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'search', + header: 'Search' + } + ] + } + ] + }; +} +``` + +```html + + +
File explorer content
+
Document 1 content
+
Document 2 content
+
Properties panel
+
Output panel
+
Search panel
+
+``` + +### Key Rules for Dock Manager + +1. **Separate package** — `igniteui-dockmanager` is installed independently of `igniteui-angular` +2. **Call `defineCustomElements()` from `igniteui-dockmanager/loader` in `app.config.ts`** — without this the `` element renders as an unknown element +3. **Add `CUSTOM_ELEMENTS_SCHEMA`** to every standalone component or NgModule that uses `` +4. **Slot names = `contentId` values** — the `slot="..."` attribute on child elements must exactly match the `contentId` string in the layout +5. **Premium component** — requires a licensed Ignite UI subscription; verify availability before recommending to users +6. **Not part of `igniteui-angular`** — do not import from `igniteui-angular` entry points; all Dock Manager types come from `igniteui-dockmanager` + +--- + +## Tile Manager + +> **Docs:** [Tile Manager (Angular)](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tile-manager) +> **Full API Docs:** [Tile Manager Web Component](https://www.infragistics.com/products/ignite-ui-web-components/web-components/components/layouts/tile-manager.html) + +The Tile Manager is a **layout Web Component** that displays content in individual tiles users can **rearrange and resize**. It is implemented as an `igc-tile-manager` container with one or more `igc-tile` children. + +### Installation + +```bash +npm install igniteui-webcomponents +``` + +### Setup + +Register the Tile Manager Web Component before bootstrap: + +```typescript +import { defineComponents, IgcTileManagerComponent } from 'igniteui-webcomponents'; + +defineComponents(IgcTileManagerComponent); +``` + +Add `CUSTOM_ELEMENTS_SCHEMA` to any component using ``: + +```typescript +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; + +@Component({ + selector: 'app-tile-manager', + templateUrl: './tile-manager.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class TileManagerComponent { } +``` + +### Usage + +```html + + + Wide tile +

Content spanning two columns

+
+ + Tall tile +

Content spanning two rows

+
+
+``` + +`igc-tile-manager` properties: + +- **`column-count`**: number of grid columns; if omitted or \<1, as many columns as fit with a minimum width (200px) are created +- **`gap`** / **`min-column-width`** / **`min-row-height`**: spacing and minimum track sizes (e.g., `"20px"`) +- **`resize-mode`**: `"none"` | `"hover"` | `"always"` — controls tile resizing +- **`drag-mode`**: `"tile"` | `"tile-header"` — enables reordering + +`igc-tile` properties: + +- **`row-start` / `col-start`** and **`row-span` / `col-span`**: grid placement and spanning +- **`disable-resize`**, **`disable-maximize`** / **`disable-fullscreen`**: opt out of resize / default header actions + +### Key Rules for Tile Manager + +1. **Web Component package** — Tile Manager ships via `igniteui-webcomponents`, not `igniteui-angular`. +2. **Register components** — call `defineComponents(IgcTileManagerComponent)` once before using ``. +3. **Use `CUSTOM_ELEMENTS_SCHEMA`** on Angular components that host the Tile Manager. +4. **Use slots** — header content goes into `slot="title"`; additional actions and custom adorners use the documented slots (`fullscreen-action`, `maximize-action`, `actions`, `side-adorner`, `corner-adorner`, `bottom-adorner`). +5. **Treat it as a layout container** — use Tile Manager when users need interactive, resizable and re-orderable tiles, not tabular data (use grids for that). + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner +- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.agents/skills/igniteui-angular-components/references/layout.md b/.agents/skills/igniteui-angular-components/references/layout.md new file mode 100644 index 0000000..96d4ed1 --- /dev/null +++ b/.agents/skills/igniteui-angular-components/references/layout.md @@ -0,0 +1,209 @@ +# Layout Components + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +## Contents + +- [Tabs](#tabs) +- [Bottom Navigation](#bottom-navigation) +- [Stepper](#stepper) +- [Accordion](#accordion) +- [Splitter](#splitter) +- [Navigation Drawer](#navigation-drawer) + +## Tabs + +```typescript +import { IGX_TABS_DIRECTIVES } from 'igniteui-angular/tabs'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + + + info + Info + + Content for Info tab + + + + Settings + + Settings content + + +``` + +Key inputs: `[(selectedIndex)]`, `[tabAlignment]` (`'start'` | `'end'` | `'center'` | `'justify'`), `[disableAnimation]`. + +## Bottom Navigation + +```typescript +import { IgxBottomNavComponent, IgxBottomNavItemComponent, IgxBottomNavHeaderComponent, IgxBottomNavContentComponent } from 'igniteui-angular/bottom-nav'; +``` + +```html + + + + home + Home + + Home content + + + + settings + Settings + + Settings content + + +``` + +## Stepper + +```typescript +import { IGX_STEPPER_DIRECTIVES } from 'igniteui-angular/stepper'; +``` + +```html + + +
Account
+
Create your account
+
+ +
+
+ +
Profile
+
Optional step
+
...
+
+ +
Confirm
+
Review and submit
+
+
+``` + +Programmatic navigation: +```typescript +stepper = viewChild.required(IgxStepperComponent); + +next() { this.stepper().next(); } +prev() { this.stepper().prev(); } +navigateTo(index: number) { this.stepper().navigateTo(index); } +``` + +## Accordion + +```typescript +import { IgxAccordionComponent } from 'igniteui-angular/accordion'; +import { IGX_EXPANSION_PANEL_DIRECTIVES } from 'igniteui-angular/expansion-panel'; +``` + +```html + + + + Panel 1 + Subtitle text + + + Content for panel 1 + + + + + Panel 2 + + Content for panel 2 + + +``` + +Standalone `igx-expansion-panel` (without accordion): +```html + + + Settings + + Content + +``` + +## Splitter + +```typescript +import { IgxSplitterComponent, IgxSplitterPaneComponent, SplitterType } from 'igniteui-angular/splitter'; +``` + +```html + + + + Left panel content + + + Right panel content + + + + + + Top panel + Bottom panel + +``` + +## Navigation Drawer + +```typescript +import { IgxNavigationDrawerComponent, IgxNavDrawerItemDirective, IgxNavDrawerTemplateDirective, IgxNavDrawerMiniTemplateDirective } from 'igniteui-angular/navigation-drawer'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +import { IgxRippleDirective } from 'igniteui-angular/directives'; +``` + +```html + + + + + + + home + settings + + + + +``` + +Key inputs: `[isOpen]`, `[pin]` (dock to content), `[pinThreshold]` (auto-pin at viewport width), `[width]`, `[miniWidth]`. + +Events: `(opened)`, `(closed)`, `(pinChange)`. + +> **Important:** The Navigation Drawer uses the Ignite UI overlay/animation system — ensure `provideAnimations()` is in `app.config.ts`. + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider +- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner +- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.agents/skills/igniteui-angular-components/references/mcp-setup.md b/.agents/skills/igniteui-angular-components/references/mcp-setup.md new file mode 100644 index 0000000..d855515 --- /dev/null +++ b/.agents/skills/igniteui-angular-components/references/mcp-setup.md @@ -0,0 +1,76 @@ +# Setting Up the Ignite UI CLI MCP Server + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** + +The Ignite UI CLI MCP server exposes `list_components`, `get_doc`, `search_docs`, and `search_api` so AI assistants can discover Ignite UI components and read version-accurate documentation. It must be configured in the editor/agent before these tools become available, and the editor or agent session must be restarted afterwards — MCP servers cannot be hot-loaded into a running session. + +> Depending on the client, MCP tool names may appear with a server prefix (e.g. `mcp__igniteui-cli__list_components` in Claude Code). This skill refers to tools by their bare names. + +## Recommended: One-Command Setup + +From the project root: + +```bash +npx -y igniteui-cli ai-config +``` + +This configures **both** the `igniteui-cli` and `igniteui-theming` MCP servers, copies the Ignite UI Agent Skills into the project, and preserves any existing server entries in the config files. Inline options such as `--agents claude copilot` and `--assistants vscode cursor` select which agents and editors to configure. + +Projects created with `npx igniteui-cli new` already have the `igniteui-cli` MCP entry configured. + +## Manual Configuration (fallback) + +Use these only when `ai-config` is unavailable or your editor is not covered by it. + +### VS Code — `.vscode/mcp.json` + +```json +{ + "servers": { + "igniteui-cli": { + "command": "npx", + "args": ["-y", "igniteui-cli", "mcp"] + } + } +} +``` + +`npx -y` works whether `igniteui-cli` is installed locally in `node_modules` or needs to be pulled from the npm registry. + +### Claude Code + +```bash +claude mcp add igniteui-cli -- npx -y igniteui-cli mcp +``` + +### Cursor — `.cursor/mcp.json` + +```json +{ + "mcpServers": { + "igniteui-cli": { + "command": "npx", + "args": ["-y", "igniteui-cli", "mcp"] + } + } +} +``` + +### Claude Desktop + +Edit the Claude Desktop config file (**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`, **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`) and add the same `mcpServers` entry as shown for Cursor above. + +### WebStorm / JetBrains IDEs + +1. Go to **Settings → Tools → AI Assistant → MCP Servers** +2. Click **+ Add MCP Server** +3. Set Command to `npx` and Arguments to `-y igniteui-cli mcp` +4. Click OK and restart the AI Assistant + +## Verifying the Setup + +After restarting the editor/session, ask the AI assistant: + +> "List all available Ignite UI components" + +If the MCP server is running, the `list_components` tool will return all available components for the detected framework. diff --git a/.agents/skills/igniteui-angular-components/references/setup.md b/.agents/skills/igniteui-angular-components/references/setup.md new file mode 100644 index 0000000..a9e769d --- /dev/null +++ b/.agents/skills/igniteui-angular-components/references/setup.md @@ -0,0 +1,165 @@ +# Application Setup & Architecture + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** + +## Contents + +- [Installation](#installation) +- [Required Providers (`app.config.ts`)](#required-providers-appconfigts) +- [Architecture — Standalone Components](#architecture--standalone-components) +- [Multi-Entry-Point Imports](#multi-entry-point-imports) + +## Installation + +```bash +# Open-source +npm install igniteui-angular + +# Licensed (requires @infragistics registry configured) +npm install @infragistics/igniteui-angular +``` + +Both packages share identical entry-point paths. Everywhere below, replace `igniteui-angular` with `@infragistics/igniteui-angular` if using the licensed package. + +## Required Providers (`app.config.ts`) + +> **Important:** Before adding any Ignite UI component, verify that `app.config.ts` contains the providers listed below. Missing `provideAnimations()` is the most common cause of runtime errors — all overlay and animated components (Dialog, Combo, Select, Date Picker, Snackbar, Toast, Banner, Navigation Drawer, Dropdown) will silently fail or throw without it. + +```typescript +import { ApplicationConfig } from '@angular/core'; +import { provideAnimations } from '@angular/platform-browser/animations'; +import { provideRouter } from '@angular/router'; +import { provideIgniteIntl } from 'igniteui-angular/core'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideAnimations(), // REQUIRED — all overlay and animated components + provideRouter(appRoutes), + provideIgniteIntl(), // recommended — localization for date/time pickers, grids, etc. + ] +}; +``` + +| Provider | Package | Required for | +|---|---|---| +| `provideAnimations()` | `@angular/platform-browser/animations` | **All overlay and animated components** — Dialog, Combo, Select, Dropdown, Date/Time Picker, Snackbar, Toast, Banner, Navigation Drawer, Carousel, Overlay service | + +> **`provideAnimationsAsync()`** lazy-loads the animations module — prefer it for SSR or when optimizing initial bundle size: +> ```typescript +> import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; +> ``` + +## Architecture — Standalone Components + +All Ignite UI components are **standalone** — no NgModules needed. Import them directly into your component's `imports` array: + +```typescript +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { IgxButtonDirective } from 'igniteui-angular/directives'; +import { IgxDialogComponent } from 'igniteui-angular/dialog'; + +@Component({ + selector: 'app-example', + imports: [IgxButtonDirective, IgxDialogComponent], + templateUrl: './example.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ExampleComponent {} +``` + +## Multi-Entry-Point Imports + +> **Important:** Always import from specific entry points, never from the root barrel. Check `package.json` to determine whether the project uses `igniteui-angular` or `@infragistics/igniteui-angular` — that prefix applies to every import path. + +```typescript +// CORRECT — tree-shakeable, specific entry point +import { IgxComboComponent } from 'igniteui-angular/combo'; +import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; + +// AVOID — pulls in entire library +import { IgxComboComponent } from 'igniteui-angular'; +``` + +### Common Entry Points + +| Component / Directive | Entry Point | +|---|---| +| Input Group | `igniteui-angular/input-group` | +| Combo | `igniteui-angular/combo` | +| Simple Combo | `igniteui-angular/simple-combo` | +| Select | `igniteui-angular/select` | +| Date Picker / Date Range Picker | `igniteui-angular/date-picker` | +| Time Picker | `igniteui-angular/time-picker` | +| Calendar | `igniteui-angular/calendar` | +| Checkbox | `igniteui-angular/checkbox` | +| Radio | `igniteui-angular/radio` | +| Switch | `igniteui-angular/switch` | +| Slider | `igniteui-angular/slider` | +| Tabs | `igniteui-angular/tabs` | +| Stepper | `igniteui-angular/stepper` | +| Accordion | `igniteui-angular/accordion` | +| Expansion Panel | `igniteui-angular/expansion-panel` | +| Splitter | `igniteui-angular/splitter` | +| Navigation Drawer | `igniteui-angular/navigation-drawer` | +| Bottom Navigation | `igniteui-angular/bottom-nav` | +| List | `igniteui-angular/list` | +| Tree | `igniteui-angular/tree` | +| Card | `igniteui-angular/card` | +| Dialog | `igniteui-angular/dialog` | +| Snackbar | `igniteui-angular/snackbar` | +| Toast | `igniteui-angular/toast` | +| Banner | `igniteui-angular/banner` | +| Chips | `igniteui-angular/chips` | +| Avatar | `igniteui-angular/avatar` | +| Badge | `igniteui-angular/badge` | +| Icon | `igniteui-angular/icon` | +| Carousel | `igniteui-angular/carousel` | +| Paginator | `igniteui-angular/paginator` | +| Linear Progress | `igniteui-angular/progressbar` | +| Circular Progress | `igniteui-angular/progressbar` | +| Chat | `igniteui-angular/chat` | +| Button / Icon Button | `igniteui-angular/directives` | +| Button Group | `igniteui-angular/button-group` | +| Ripple | `igniteui-angular/directives` | +| IgxTooltipDirective, IgxTooltipTargetDirective | `igniteui-angular/directives` | +| Drag & Drop | `igniteui-angular/directives` | +| Layout Manager (`igxLayout`, `igxFlex`) | `igniteui-angular/directives` | +| Core utilities, services, base types | `igniteui-angular/core` | +| Icon Service | `igniteui-angular/icon` | +| Overlay Service | `igniteui-angular/core` | +| **Dock Manager** | `igniteui-dockmanager` *(separate package — `npm install igniteui-dockmanager`)* | + +**Grid-specific entry points** (tree-shakable imports): + +| Component / Feature | Entry Point | +|---|---| +| Shared grid infrastructure (columns, toolbar, filtering, sorting, etc.) | `igniteui-angular/grids/core` | +| Standard grid (`IgxGridComponent`) | `igniteui-angular/grids/grid` | +| Tree grid (`IgxTreeGridComponent`) | `igniteui-angular/grids/tree-grid` | +| Hierarchical grid (`IgxHierarchicalGridComponent`, `IgxRowIslandComponent`) | `igniteui-angular/grids/hierarchical-grid` | +| Pivot grid (`IgxPivotGridComponent`, `IgxPivotDataSelectorComponent`) | `igniteui-angular/grids/pivot-grid` | + +### Convenience Directive Collections + +For complex components, use the bundled directive arrays instead of listing every sub-directive individually: + +| Token | Entry Point | Includes | +|---|---|---| +| `IGX_BUTTON_GROUP_DIRECTIVES` | `igniteui-angular/button-group` | Button group + button directive | +| `IGX_INPUT_GROUP_DIRECTIVES` | `igniteui-angular/input-group` | Input group + label, hint, prefix, suffix | +| `IGX_TABS_DIRECTIVES` | `igniteui-angular/tabs` | Tabs + tab item, header, content | +| `IGX_STEPPER_DIRECTIVES` | `igniteui-angular/stepper` | Stepper + step | +| `IGX_EXPANSION_PANEL_DIRECTIVES` | `igniteui-angular/expansion-panel` | Panel + header, body | +| `IGX_LIST_DIRECTIVES` | `igniteui-angular/list` | List + list item | +| `IGX_TREE_DIRECTIVES` | `igniteui-angular/tree` | Tree + tree node | + +## See Also + +- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider, forms integration +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`data-display.md`](./data-display.md) — List, Tree, Card, Chips, Avatar, Badge, Icon, Carousel, Paginator, Progress, Chat +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner +- [`directives.md`](./directives.md) — Button, Icon Button, Button Group, Ripple, Tooltip, Drag and Drop +- [`layout-manager.md`](./layout-manager.md) — Layout Manager directives, Dock Manager +- [`../../igniteui-angular-grids/SKILL.md`](../../igniteui-angular-grids/SKILL.md) — Data Grids +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.agents/skills/igniteui-angular-figma-to-app/SKILL.md b/.agents/skills/igniteui-angular-figma-to-app/SKILL.md new file mode 100644 index 0000000..e7c07e8 --- /dev/null +++ b/.agents/skills/igniteui-angular-figma-to-app/SKILL.md @@ -0,0 +1,772 @@ +--- +name: igniteui-angular-figma-to-app +description: > + Translate Figma app screens designed using the Indigo.Design UI Kits into production + Angular applications with Ignite UI for Angular. The Indigo.Design UI Kits are Figma + component libraries available in four design-system variants — Material, Fluent, + Bootstrap, and Indigo — each with light and dark themes. Designers build their own + app frames in Figma using these kit libraries, and every kit component instance maps + 1:1 to an Ignite UI Angular control. The active kit variant also determines the + design system used in the Angular theme. Uses the Figma MCP for design data, the + Ignite UI CLI MCP for component docs, the Ignite UI Theming MCP for palette and + component-level styling, and the Playwright MCP for visual validation against the + original Figma design. Triggers on "implement this Figma design", "build from Figma", + "translate Figma to Angular", "implement this artboard", "generate app from Figma", + or when a Figma URL is shared with implementation intent in an Ignite UI Angular context. +user-invocable: true +--- + +# Ignite UI for Angular — Figma to App + +Translate Figma app screens built with the **Indigo.Design UI Kits** into production +Angular applications. Designers create their own frames in Figma using the Indigo.Design +component libraries as shared libraries — these kits come in four design-system variants +(**Material**, **Fluent**, **Bootstrap**, **Indigo**) with light and dark themes each. +Every component instance in the design maps 1:1 to an Ignite UI Angular control, and +the active kit variant directly determines which design system to use in the Angular +theme. + +This skill orchestrates four MCP servers: **Figma** (design data), **Ignite UI CLI** +(component docs), **Ignite UI Theming** (styles), and **Playwright** (visual validation). + +--- + +## Required Workflow + +Complete all phases in order — do not skip phases or generate component code from +memory. Every component selector, input name, and import path must come from +`get_doc` results or, where no doc exists in the catalog, from the +`igniteui-angular-components` / `igniteui-angular-grids` skill reference files — +never guessed. + +Read [references/figma-component-map.md](references/figma-component-map.md) before Phase 2. +Read [references/design-token-bridge.md](references/design-token-bridge.md) before Phase 3. +Read [references/asset-extraction.md](references/asset-extraction.md) before Phase 1h. +Read [references/validation-patterns.md](references/validation-patterns.md) before Phase 5. + +--- + +## Phase 0 — Prerequisites + +> **Tool naming:** this skill writes MCP tool names as `_` (e.g. +> `figma_get_metadata`, `theming_create_theme`). The exact name depends on the client — +> Claude Code exposes them as `mcp____` (e.g. `mcp__figma__get_metadata`). +> Match by the tool's base name on whatever server is connected. + +### 0a: Verify All Four MCP Servers + +Run these checks **silently** in parallel. Each verification call is a no-op if the +server is not connected; do not surface raw errors to the user at this point. + +| Server | Verification call | Success signal | +| --------------------- | ---------------------------------------------- | ----------------------------------- | +| **Figma** | `figma_get_metadata` with no `nodeId` | Returns page list or selection info | +| **Ignite UI CLI** | `list_components` with `framework: "angular"` | Returns component list | +| **Ignite UI Theming** | `theming_detect_platform` | Returns platform info | +| **Playwright** | `playwright_browser_navigate` to `about:blank` | Navigates without error | + +If **any server fails**, stop and guide the user through setup **for that server only** +before continuing. For `igniteui-cli` and `igniteui-theming`, the fastest path is +`npx -y igniteui-cli ai-config`, which configures both. Full setup instructions for all +servers are in [references/mcp-setup.md](references/mcp-setup.md). Newly configured MCP +servers require an editor/session reload before their tools appear. + +### 0b: Detect or Scaffold Angular Project + +Check whether the current working directory contains a valid Angular + Ignite UI project: + +``` +1. Does package.json exist? +2. Does it list "igniteui-angular" OR "@infragistics/igniteui-angular" in dependencies? +3. Is there a src/app/ directory? +``` + +**If a valid project is found:** + +- Note the package layout: `igniteui-angular` (open-source) or `@infragistics/igniteui-angular` (licensed) +- Note the Angular version from `package.json` +- **Check the MCP configuration for all four required server entries** — `figma`, `igniteui-cli`, + `igniteui-theming`, and `playwright` (in `.vscode/mcp.json` or the client's equivalent). + If `igniteui-cli` or `igniteui-theming` is missing, run `npx -y igniteui-cli ai-config` + from the project root — it configures both servers and copies the Agent Skills, preserving + existing entries. Add missing `figma` and `playwright` entries from + [references/mcp-setup.md](references/mcp-setup.md). Projects scaffolded with + `npx igniteui-cli new` have `igniteui-cli` pre-wired but typically lack the other three. + A reload is required before newly configured servers' tools appear. +- Inform the user: "Found existing Ignite UI Angular project. Proceeding with the Figma workflow." + +**If no valid project is found:** +Present this message and wait for the user’s choice: + +> “No Ignite UI Angular project found in the current directory. Would you like me to +> scaffold a new one using the Ignite UI CLI before implementing the Figma design? +> +> `npx -y igniteui-cli new` creates a project pre-configured with Ignite UI Angular, +> theming already applied in `styles.scss`, and the Ignite UI CLI MCP server auto-wired +> into `.vscode/mcp.json`. No global install required. +> +> Alternatively, point me at an existing project directory.” + +If the user confirms scaffolding: + +1. Ask for a project name. If the user has already shared a Figma URL, suggest a name + derived from the Figma file name; otherwise prompt. + +2. Choose the project template based on the artboard structure. Because Phase 1 has + not run yet, use the lightest signal available: + + | Signal | Template to use | + | -------------------------------------------------------------------- | ------------------------------------------------ | + | User mentions a sidebar, navigation drawer, or multiple routed views | `side-nav` | + | No strong signal — default | `empty` (routing + home page; easiest to extend) | + +3. Create the project: + + ```bash + npx -y igniteui-cli new --framework=angular --type=igx-ts --template= + ``` + + This produces a standard Angular workspace fully compatible with `ng` commands, + and additionally: + - Installs and configures `igniteui-angular` with a default theme in `styles.scss` + - Generates `.vscode/mcp.json` with the Ignite UI CLI MCP server entry already set + - Copies Ignite UI Agent Skills to `.claude/skills/` + +4. `cd ` + +5. Open the auto-generated `.vscode/mcp.json` and **append** the Figma, Ignite UI + Theming, and Playwright server entries from `references/mcp-setup.md`. The Ignite + UI CLI entry is already present — do not duplicate it. + +6. Confirm the project starts cleanly: + ```bash + npm start + ``` + Then continue to Phase 1. + +--- + +## Phase 1 — Figma Design Exploration + +**Goal:** understand the full design structure and capture all data needed for +implementation and validation before writing any code. + +> **Rate-limit awareness:** Figma MCP calls count against plan quotas +> (indicative, subject to change — verify against the user's current Figma plan: +> Starter **6 calls/month**, Organization 200/day, Enterprise 600/day). +> +> Estimated call budget for a 5-artboard design: +> `figma_get_metadata` ×2 + `figma_get_screenshot` ×5 + `figma_get_design_context` ×5 + `figma_get_variable_defs` ×1 + `figma_get_code_connect_map` ×5 = **~18 calls**. +> **Starter plan users will exceed their monthly quota in a single session.** Strategies: +> 1. Call `figma_get_variable_defs` only **once** for the root page (variables are file-scoped, not artboard-scoped — calling it per artboard wastes quota on duplicate data). +> 2. Prioritize `figma_get_design_context` over additional screenshots if quota is tight. +> 3. For large files, consider implementing one artboard per monthly budget cycle. +> +> Use `figma_get_metadata` first to discover structure cheaply, then call +> `figma_get_design_context` only for the artboards you will implement. + +### 1a: Discover Pages and Artboards + +Call `figma_get_metadata` with no `nodeId`. This returns the top-level page list. +Then call `figma_get_metadata` again for each page that looks relevant to get its +artboard tree. + +> If the user already shared a Figma URL, extract the `nodeId` from it: +> URL format: `https://figma.com/design/:fileKey/:name?node-id=1-2` → nodeId = `1:2` +> (replace `-` with `:`) + +### 1b: Select Target Artboards + +If there are multiple pages or artboards, show the user a list: + +> "I found these artboards in your Figma file: +> +> - Page 1: [list artboard names + node IDs] +> - Page 2: [list artboard names + node IDs] +> +> Which artboards should I implement? (You can say 'all' or list specific names.)" + +Wait for confirmation before proceeding. + +### 1c: Capture Reference Screenshots + +> **IMPORTANT — Figma MCP is session-bound.** The `figma_get_screenshot` tool returns a +> screenshot of the **currently selected node in the Figma desktop app**, regardless of any +> `nodeId` parameter passed. To capture each artboard, you must ask the user to navigate +> to it in Figma first. + +For each target artboard: + +1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* +2. Wait for confirmation, then call: + ``` + figma_get_screenshot({}) + // Store: { artboardName, screenshotFile, width: , height: } + ``` +3. Repeat for each artboard — do **not** batch these calls before the user navigates. + +After all artboards are captured, confirm the count: +> *"I have N reference screenshots: [list artboard names]. Proceeding to design context extraction." +> If any are missing, navigate to that artboard in Figma and recapture before continuing.* + +> Never skip this step. The screenshots are your ground truth for Phase 5 validation. + +### 1d: Extract Design Context + +> **IMPORTANT — Figma MCP is session-bound.** The `figma_get_design_context` tool returns +> context for the **currently selected node in the Figma desktop app**. You must ask the +> user to navigate to each artboard before calling this tool. +> +> **Output format:** `figma_get_design_context` returns **React + Tailwind CSS code**, not +> structured Angular metadata. The response is explicitly tagged *"SUPER CRITICAL: The +> generated React+Tailwind code MUST be converted to match the target project's technology +> stack."* Do **not** copy the React code into Angular files. Instead, read the JSX to extract +> the information below. Image localhost URLs in the output are session-scoped previews — +> do **not** use them as final assets (see Phase 1h and `references/asset-extraction.md`). + +For **each** target artboard: + +1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* +2. Wait for confirmation, then call: + ``` + figma_get_design_context({ + clientLanguages: "typescript", + clientFrameworks: "angular", + artifactType: "WEB_PAGE_OR_APP_SCREEN", + taskType: "CREATE_ARTIFACT" + }) + ``` +3. From the React+Tailwind output, extract: + + - **Component layer names** (`data-name` attributes in the JSX) — match against `references/figma-component-map.md` + - **Layout structure** — `flex`, `grid`, `gap-*`, `p-*`, `w-*`, `h-*` Tailwind classes on container divs + - **Typography** — `font-['...']`, `text-[...]`, `font-weight` classes + - **Surface colors** — `bg-[#XXXXXX]` classes on container `
` elements that wrap major sections + (these become plain `
` wrappers in Angular with `background: #XXXXXX`) + - **Border/roundness** — `rounded-[...]`, `border`, `border-[...]` classes on containers and cards + - **Input type variants** — look for hidden zero-size nodes (`size-[0.5px]`) whose `data-name` + contains a component type (e.g. `"Date Picker Type"`, `"Combo Input"`). These are the + Indigo.Design kit's **variant indicator nodes** — their name encodes which input variant + (border/line/box) is active for that component. + - **Chart series colors** — for any chart layer, note the fill colors on its series paths + - **Action controls** — list every button, icon button, and toolbar action visible in the artboard; + this is your authoritative inventory — do not add actions not present in the design + - **Active kit variant** — look for library component references whose source file name + contains "Material", "Fluent", "Bootstrap", or "Indigo". If not found here, defer to + Phase 1e variable names and [references/design-token-bridge.md](references/design-token-bridge.md). + +4. Record all surface containers in the **Surfaces Spec** (added to Phase 1g). + +### 1e: Extract Design Tokens + +> Figma variables are **file-scoped**, not artboard-scoped. Call `figma_get_variable_defs` +> **once** for the root page node — not once per artboard. Calling it multiple times returns +> identical data and wastes plan quota. + +Call once: + +``` +figma_get_variable_defs({}) +``` + +The response contains a map of variable names to values, e.g.: + +``` +"color/primary/500": "#6200EE" +"color/surface": "#FFFFFF" +"typography/body/font-family": "Roboto" +``` + +Use `references/design-token-bridge.md` to map color and typography variables to Ignite +UI theming inputs in Phase 3. Do **not** attempt to map Figma spacing or sizing values +— see `references/design-token-bridge.md § Spacing, Sizing, and Roundness` for why. + +### 1f: Check for Existing Code Connect Mappings + +Call `figma_get_code_connect_map` for each artboard. If mappings exist, they confirm +which Ignite UI Angular components correspond to which Figma nodes — use these to +validate or augment your component mapping in Phase 2. + +``` +figma_get_code_connect_map({ nodeId: "" }) +``` + +### 1g: Build the Decomposition Table + +Before writing any code, produce **two tables** for **each artboard**. + +#### Table A — Ignite UI Components + +| Figma Layer Name | Visual Role | Ignite UI Component | Design Tokens Used | Data Type | +| -------------------------- | ------------------ | ----------------------- | ------------------- | --------------- | +| _e.g._ `_NavBar` | Top navigation bar | `IgxNavbarComponent` | `color/primary/500` | n/a | +| _e.g._ `_Grid/Default` | Data table | `IgxGridComponent` | `color/surface` | Tabular records | +| _e.g._ `_Button/Contained` | Primary CTA | `igxButton="contained"` | `color/primary/500` | n/a | + +Fallback to plain semantic HTML only when no Ignite UI component can match the layer +after consulting `references/figma-component-map.md`. Document the reason inline. + +#### Table B — Layout Surfaces + +Record every **non-IgxXxx container** that carries visual properties (background color, +border, padding, shadow). These are plain `
` wrappers in Angular — not Ignite UI +components — but they are critical to visual fidelity. Populate this table from the +`bg-[...]`, `rounded-[...]`, `border`, `p-[...]`, and `shadow-[...]` Tailwind classes +observed on container divs in the Phase 1d design context output. + +| Figma Frame / Container Name | Background | Border-Radius | Padding | Border | Shadow | Encloses (child sections) | +| ---------------------------- | ---------- | ------------- | ------- | ------ | ------ | ------------------------- | +| _e.g._ `Budget Categories` | `#222222` | `4px` | `24px` | none | none | Categories list, Add button | +| _e.g._ `Friend Card` | `#222222` | `8px` | `24px 16px` | `1px solid #333` | none | Avatar, name, phone, email, buttons | + +> **Rule:** if a section appears on a surface in Figma (i.e. its container has a +> non-transparent background), it **must** have that background in the Angular implementation. +> If a section floats on the page background (transparent), do **not** add a surface wrapper. +> Never infer surface structure from another page — always derive it from the design context +> for the specific artboard being implemented. + +Present both tables to the user for review before proceeding. + +### 1h: Extract Image Assets + +Read [references/asset-extraction.md](references/asset-extraction.md) in full before +running any extraction. + +**Zero-placeholder policy:** every image visible in the Figma design must be extracted +and committed to `src/assets/` before Phase 4. Gradient placeholders are not acceptable. + +**Step 0 — Get the file key first.** Ask the user to share the Figma file URL or key +before attempting any extraction. In Figma desktop: right-click the file tab → +**Copy link**. Without it you fall back to Tier 2 or Tier 3 (see below). + +From the decomposition tables, identify every layer that is a **static image asset** +(photo, background, logo, custom icon, illustration) rather than an Ignite UI component. +Do **not** extract Indigo.Design UI Kit component instances. + +**Use the four-tier decision tree from `asset-extraction.md`:** + +| Tier | Method | When to use | +| ---- | ------ | ----------- | +| **1** | REST API `/v1/files/:key/images` (Method A) or `/v1/images/:key` (Method B) | File key available — always the highest fidelity | +| **2** | Download localhost URLs from `figma_get_design_context` with `curl` | No file key; Figma session is active; design context was already called | +| **3** | `figma_get_screenshot` per node (ask user to select each node) | No file key; no localhost URLs | +| **4** | CSS gradient/color placeholder with `// TODO` comment | Only for confirmed pure-color fills — never as a shortcut | + +After extraction, save assets to: +- `src/assets/images/` — raster images (PNG, JPG) +- `src/assets/icons/` — SVG icons and logos + +Build a concise asset manifest (see `asset-extraction.md § Build an Asset Manifest`) +so the implementation phase uses consistent paths. + +If you used Tier 2 or Tier 3 for any asset, tell the user which ones need re-export +once the file key becomes available. + +--- + +## Phase 2 — Component Discovery (Ignite UI CLI MCP) + +**Goal:** look up exact Angular selectors, inputs, outputs, and usage patterns for every +component identified in Phase 1. Never generate component code from memory. + +### 2a: Read the Component Map + +Read [references/figma-component-map.md](references/figma-component-map.md) in full. +Find the row for each Figma layer name from your Phase 1 decomposition table. +Each row gives you: + +- The Ignite UI Angular selector +- The `get_doc` key to call +- Key inputs and variants to configure + +### 2b: Fetch Component Docs + +Call `list_components({ framework: "angular" })` **once** to discover which component +families have full docs — **the catalog covers only a subset of components**. Then: + +- For families **with** a doc: call `get_doc({ framework: "angular", name: "" })`, + all in a single parallel batch — never sequentially. +- For families **without** a doc: read the matching reference files from the + [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) and + [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) skills, and use + `search_api` for member-level API lookups. + +Do **not** write any component code until you have read its doc or reference file. + +### 2c: Search for Feature Docs + +Use `search_docs` for feature-level questions raised by the artboard, for example: + +``` +search_docs({ framework: "angular", query: "row editing" }) +search_docs({ framework: "angular", query: "virtual scrolling" }) +search_docs({ framework: "angular", query: "column pinning" }) +``` + +Feature docs are mandatory when the artboard shows grid editing, filtering, sorting, +pinning, or other advanced feature states. + +### 2d: Document the Final Component Plan + +After reading all docs, confirm or revise the decomposition table from Phase 1g with: + +- Exact selectors (e.g. ``, ``) +- Exact import paths (never imported from the root barrel) +- Required peer modules or provider functions + +Present this updated plan to the user and wait for confirmation before Phase 3. + +--- + +## Phase 3 — Theme Generation (Ignite UI Theming MCP) + +**Goal:** produce Sass theming code that matches the Figma design's visual language +using design tokens extracted in Phase 1e. + +Read [references/design-token-bridge.md](references/design-token-bridge.md) in full +before running any theming tool. + +### 3a: Inspect Existing Theme (Guard) + +Open `src/styles.scss` (or the project's global stylesheet). Look for an active +`@include theme(...)` or `@include palette(...)` call. + +- **Theme found, but variant mismatch** — if the existing theme is **light** and the + Figma design is **dark** (or vice versa), treat this as a theme change and proceed with + 3b–3c. A light theme applied to a dark design produces wrong background colors on every + component and will fail every Phase 5 check. +- **Theme found, variant matches** → do **not** call `theming_create_theme` or + `theming_create_palette` unless the user explicitly asks for a global theme change. + Reuse the existing palette. Skip to step 3d. +- **No theme found** → proceed with 3b. + +Detect the Figma design's variant from Phase 1e: if a `color/mode` variable exists, +use its value. Otherwise, use the artboard background color: near-black (`#121212`, +`#1a1a1a`, `#000`) → `"dark"`; near-white (`#fff`, `#f5f5f5`) → `"light"`. + +### 3b: Resolve Design System + +You don't need to call `theming_detect_platform` to confirm the Angular package layout. We already did that in Phase 0. + +To determine the design system, use this **strict precedence order**. Stop at the first +signal that gives a clear answer: + +1. **Explicit user request** — "make it Material", "use Fluent", etc. +2. **Library source name in design context** — the `figma_get_design_context` or + `figma_get_metadata` response may reference the Figma source library file name + (e.g. `"Indigo.Design UI Kit for Material"` → `material`). +3. **Variable collection names from Phase 1e** — collection names like + `Material/color/primary` identify the kit variant directly. +4. **Elevation variable structure** — inspect the `Elevations/*` variables in + `figma_get_variable_defs` output: + - **Three-layer DROP_SHADOW** (umbra + penumbra + ambient) → **Material Design** + - **Single-layer DROP_SHADOW** → Indigo, Fluent, or Bootstrap +5. **Palette shade naming** — variables named `primary/500`, `primary/100`–`primary/900` + follow the Material 100–900 palette convention → likely **Material**. +6. **Visual heuristics** (use only when all above are inconclusive): + prominent shadows + ripple effects → `"material"`; + flat surfaces + sharp corners + Segoe/Inter font → `"fluent"`; + component borders + Bootstrap grid → `"bootstrap"`; + rounded purple/indigo accents without Material shadows → `"indigo"`. + +> **Never use font name as a primary signal.** "Titillium Web" is the default body font +> in the Indigo.Design UI Kit for Material — it is not exclusive to the Indigo design system. + +Supported values: `material` (default), `bootstrap`, `fluent`, `indigo`. + +### 3c: Generate Global Theme + +Extract the following from Phase 1e variables using +[references/design-token-bridge.md](references/design-token-bridge.md): + +``` +primaryColor ← from "color/primary/500" or "primary/500" +secondaryColor ← from "color/secondary/500" or "secondary/500" +surfaceColor ← from "color/surface" or "surface/default" +fontFamily ← from "typography/font-family" or "typography/body/font-family" +``` + +Then call in order: + +> **Parameter names differ between tools** — `theming_create_palette` uses `primary`, +> `secondary`, `surface` (not `primaryColor` etc.). `theming_create_theme` uses +> `primaryColor`, `secondaryColor`, `surfaceColor`. Do not mix them up. + +> **fontFamily double-quote bug** — `theming_create_theme` may double-wrap the fontFamily +> string (e.g. `""'Titillium Web', sans-serif""`) in its Sass output, producing invalid Sass. +> If you see double-quoted strings in the generated output, strip the outer quotes before +> applying to `styles.scss`. + +``` +theming_create_palette({ + primary: primaryColor, + secondary: secondaryColor, + surface: surfaceColor, + platform: "angular", + licensed: +}) + +theming_create_elevations({ + preset: "material" // or "indigo" if design system is Indigo +}) + +theming_create_typography({ + fontFamily, + platform: "angular" +}) + +theming_create_theme({ + palette: , + elevations: , + typography: , + variant: "", + designSystem: "", + platform: "angular", + licensed: +}) +``` + +Apply the generated output to `src/styles.scss` as instructed in the tool's response. + +### 3d: Per-Component Token Mapping + +> **Scope:** applies only to core Ignite UI Angular components (grid, navbar, card, +> inputs, chips, list, etc.). Charts, maps, and gauges have no Sass tokens — configure +> those via component inputs only. + +For **every** Ignite UI core component in your plan, run this loop: + +1. `theming_get_component_design_tokens({ component: "" })` + — review all token names, types, and descriptions +2. Go back to the Phase 1e variable map and find Figma variables that correspond to + this component's surfaces (background, text, border, hover state) +3. `theming_create_component_theme({ component: "", platform: "angular", tokens: { } })` +4. Apply the generated `@include tokens()` block to the component's SCSS or to a + scoped block in `styles.scss` + +When a specific component needs a different density or spacing from the global default, +use `theming_set_size` or `theming_set_spacing` with the `component` parameter — this +scopes `--ig-size` or `--ig-spacing` to that component’s selector rather than applying +globally. For compound components, use `scope` with a sub-component selector. Only +apply these globally (`:root`) when the entire app has a clearly distinct density. +Leave `theming_set_roundness` at its default unless the user explicitly requests a +change. Never derive multiplier values from Figma pixel values. +See `references/design-token-bridge.md § Spacing, Sizing, and Roundness`. + +--- + +## Phase 4 — Implementation + +**Goal:** build the Angular view(s) that match the artboard decomposition from Phase 2. + +### Implementation Rules + +1. **Never generate component code without reading its `get_doc` result first** (Phase 2b) +2. **Section by section** — layout → navigation → primary content → secondary → data +3. Follow Angular standalone component conventions and AGENTS.md coding standards +4. Import components from their specific entry points, never from the root barrel +5. Use CSS Grid first to match Figma frame proportions; add Flexbox for sub-regions +6. Apply theming via the SCSS classes and tokens generated in Phase 3 +7. Use typed mock data that matches the design's density and domain +8. Keep layout, spacing, and typography in SCSS files — not inline styles +9. For DV components (charts, maps, gauges), set visual properties via component inputs + as described in [references/figma-component-map.md](references/figma-component-map.md) +10. After implementing each major section, save and check in the browser (if dev server is running) +11. **Global input type:** if the Figma design uses `border`-type inputs globally (detected + via variant indicator nodes in Phase 1d), set the `IGX_INPUT_GROUP_TYPE` injection token + once in `app.config.ts` rather than `type="border"` on every component. This covers all + compound components that wrap `IgxInputGroup` internally (`IgxSimpleCombo`, + `IgxDatePickerComponent`, `IgxDateRangePickerComponent`, `IgxTimePickerComponent`, + `IgxSelectComponent`): + ```typescript + // app.config.ts + import { IGX_INPUT_GROUP_TYPE } from 'igniteui-angular/input-group'; + // in providers array: + { provide: IGX_INPUT_GROUP_TYPE, useValue: 'border' } + ``` +12. **Layout surfaces:** for every entry in the Phase 1g Surfaces table, add a CSS class + with the recorded `background`, `border-radius`, `padding`, `border`, and `box-shadow`. + Never leave a section transparent if the Figma surface has a background. Never add a + background to a section that floats on the page background in the Figma design. +13. **Implement only controls that appear in the Figma artboard.** Do not add toolbar + buttons, actions, or UI elements that look useful but are not visible in the design + context output for that artboard. + +### Layout Strategy + +Translate Figma frame dimensions into CSS Grid first: + +```scss +// Artboard: 1440×900px, sidebar 280px, content 1160px +.app-layout { + display: grid; + grid-template-columns: 280px 1fr; + grid-template-rows: 64px 1fr; + min-height: 100vh; +} +``` + +Match desktop proportions before adding responsive breakpoints. + +### Angular Project Structure + +For a new view or page generated from a Figma artboard, create: + +``` +src/app/ + / + .component.ts ← standalone component + .component.html ← template + .component.scss ← styles + component theme overrides +``` + +Register the route in `app.routes.ts` when the project uses routing. + +--- + +## Phase 5 — Visual Validation (Playwright MCP) + +**Goal:** measure and compare the running app against the Figma reference screenshots +from Phase 1c. Use the measurement-driven loop — compare numbers, not impressions. + +Read [references/validation-patterns.md](references/validation-patterns.md) in full +before running any Playwright tool. + +### 5a: Ensure the Dev Server Is Running + +Ask the user for the local dev URL if not already known (default: `http://localhost:4200`). +Navigate to confirm the app is running: + +``` +playwright_browser_navigate({ url: "http://localhost:4200" }) +playwright_browser_console_messages() // check for startup errors +``` + +### 5b: Match Viewport to Artboard Dimensions + +Resize the browser to match the Figma artboard dimensions captured in Phase 1c: + +``` +playwright_browser_resize({ width: , height: }) +playwright_browser_navigate({ url: "" }) // re-navigate after resize +``` + +> **Always re-navigate after resize.** The browser may reset to `about:blank` on +> viewport change. This is a known Playwright MCP pitfall. + +### 5c: Capture and Compare Screenshots + +> **IMPORTANT — Figma MCP is session-bound.** To get a fresh Figma reference screenshot +> for comparison, ask the user to select the artboard in Figma, then call +> `figma_get_screenshot({})`. Alternatively, use the Phase 1c reference screenshots +> already saved to disk. + +For **each target artboard** (run the full 5c–5f loop once per page): + +1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* +2. Navigate the browser to the corresponding route. +3. Take a browser screenshot: + ``` + playwright_browser_take_screenshot({ type: "png" }) + ``` +4. Do a **section-by-section** visual comparison against the Phase 1c reference: + - top bar → sidebar → **every section in the Phase 1g Surfaces table** → footer +5. Do **not** advance to the next artboard until no Critical/Major issues remain on the current one. + +### 5d: Measure Computed Styles + +For each section with visible differences — and **mandatorily for every entry in the +Phase 1g Surfaces table** — use `playwright_browser_evaluate` to extract exact values. +Pass code as a **plain JavaScript function string** using the `function` parameter +(see [references/validation-patterns.md](references/validation-patterns.md)): + +``` +playwright_browser_evaluate({ + function: "() => { var el = document.querySelector(''); if (!el) return { error: 'not found' }; var s = getComputedStyle(el); var r = el.getBoundingClientRect(); return { fontSize: s.fontSize, backgroundColor: s.backgroundColor, padding: s.padding, borderRadius: s.borderRadius, border: s.border, gap: s.gap, height: Math.round(r.height), width: Math.round(r.width) }; }" +}) +``` + +**Surfaces audit (mandatory for every page):** For every section in the Phase 1g Surfaces +table, assert: +- `backgroundColor` is **not** `rgba(0, 0, 0, 0)` when the surface has a background color +- `backgroundColor` **is** `rgba(0, 0, 0, 0)` when the design shows the section floating + on the page background (no card wrapper) +- All child elements shown inside the surface card in Figma are enclosed within the card's + bounding rect in the DOM + +**Action controls audit (mandatory for every page):** Count and name all visible action +buttons and toolbar controls. Compare against the Phase 1d inventory — any button not +recorded in the Figma design context is fabricated and must be removed. + +Compare all returned values against the Figma spec (from Phase 1d design context). + +### 5e: Classify and Report Mismatches + +| Severity | Category | Example | Action | +| ------------ | --------------- | ----------------------------------------- | --------------------------- | +| **Critical** | Missing element | Button in Figma, absent in code | Auto-fix | +| **Major** | Wrong component | Figma shows dropdown, code has text input | Auto-fix | +| **Minor** | Spacing off | 24px gap in Figma, 16px in code | Auto-fix if straightforward | +| **Cosmetic** | Color shade | `#333` vs `#2d2d2d` | Report only | + +For each mismatch, produce: + +``` +ISSUE: +LOCATION:
+FIGMA: +RENDERED: +SEVERITY: +FIX: +``` + +### 5f: Apply Corrections + +Fix Critical and Major issues immediately. After applying fixes, re-navigate and take a +fresh screenshot to confirm: + +``` +playwright_browser_navigate({ url: "" }) +playwright_browser_take_screenshot({ type: "png" }) +``` + +Repeat the measure → fix → re-verify loop until no Critical or Major issues remain. + +### 5g: Accessibility Snapshot + +Take an accessibility snapshot to verify the structural integrity of the view: + +``` +playwright_browser_snapshot() +``` + +Check that: + +- Interactive elements have accessible labels +- Headings follow a logical hierarchy +- Navigation landmarks are present + +--- + +## Critical Rules + +- **Phase 0 is not optional.** Never skip MCP verification. +- **Phase 2b before code.** Never write a selector you have not read from a doc. +- **Phase 1c screenshots are immutable ground truth.** Never overwrite them; always + compare against the original Figma state. +- **Re-navigate after resize** in Phase 5 to avoid Playwright's browser reset bug. +- **Rate-limit Figma MCP calls.** Use `figma_get_metadata` for discovery, then targeted + `figma_get_design_context` per artboard. Batch screenshot calls. +- **Fail fast on 3 retries.** If the same correction fails three times, stop, report + the issue to the user, and ask for guidance. +- **Do not modify dependency manifests or lock files without asking.** Identify the exact + packages and versions required, then get approval before installing. + +--- + +## Related Skills + +- [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) — deep reference for non-grid components +- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — deep reference for grid, tree-grid, hierarchical-grid, pivot-grid +- [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md) — theming system architecture and advanced palette patterns +- [`igniteui-angular-generate-from-image-design`](../igniteui-angular-generate-from-image-design/SKILL.md) — fallback when no Figma file is available (static image input) diff --git a/.agents/skills/igniteui-angular-figma-to-app/references/asset-extraction.md b/.agents/skills/igniteui-angular-figma-to-app/references/asset-extraction.md new file mode 100644 index 0000000..346135c --- /dev/null +++ b/.agents/skills/igniteui-angular-figma-to-app/references/asset-extraction.md @@ -0,0 +1,393 @@ +# Asset Extraction from Figma + +> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** +> +> Use this file in Phase 1h to identify and extract image assets from Figma artboards +> before implementation. Read in full before calling any extraction tool. +> +> **Zero-placeholder policy:** every image asset visible in the Figma design must be +> extracted and committed to `src/assets/` before Phase 4 begins. Gradient placeholders +> and empty `
` boxes are not acceptable. If the highest-fidelity method is +> unavailable, use the next tier — but always extract something real. + +--- + +## Step 0 — Acquire the Figma File Key (Required for REST API) + +The Figma REST API requires a **file key** — the identifier embedded in every Figma +file URL. Without it, you can still extract assets using Tier 2 and Tier 3 methods +below, but the REST API (Tier 1) produces the highest quality output and should always +be the first attempt. + +**Ask the user for the file key at the start of Phase 1h:** + +> "To extract image assets at the highest quality, I need the Figma file key. +> In the Figma desktop app: +> +> 1. Right-click the file tab at the top → **Copy link** (or go to **File → Share** and copy the URL) +> 2. The URL looks like: `https://www.figma.com/design/ABCDEF1234567890/My-File-Name` +> 3. The file key is the segment after `/design/`: **`ABCDEF1234567890`** +> +> Please share that key (or the full URL). If you cannot access it right now, I will +> proceed with the desktop-app extraction methods and note which assets need to be +> re-exported at higher quality." + +**Extracting the key from a URL (if the user pastes it):** + +```bash +# URL format: https://www.figma.com/design//?... +# Extract key with sed: +echo "https://www.figma.com/design/ABCDEF1234567890/My-App" \ + | sed -E 's|.*/design/([^/]+)/.*|\1|' +# → ABCDEF1234567890 +export FILE_KEY="ABCDEF1234567890" +``` + +**Your Figma personal access token** (same one used for the MCP server) is needed for REST calls. Store it as an environment variable: + +```bash +export FIGMA_TOKEN="your-personal-access-token" +``` + +--- + +## Two Fundamentally Different Types of Image Assets + +Figma stores images in two distinct ways — understanding the difference is essential for choosing the right extraction method: + +| Type | What it is | Figma signal | Best extraction method | +| ---------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------- | ---------------------------------------- | +| **Image fill** | A photo, texture, or raster image dragged/pasted into Figma. Stored as an IMAGE fill on a RECTANGLE or FRAME node. | Layer has fill of type `IMAGE`; `imageRef` in node data | REST API Method A → original source file | +| **Vector asset** | A logo, icon, or illustration drawn in Figma using vector tools. | Node type `VECTOR`, `BOOLEAN_OPERATION`, or `GROUP` | REST API Method B → clean SVG | + +Do **not** confuse these with Ignite UI component instances — those become Angular components, not extracted assets. + +--- + +## Step 1 — Identify Image Nodes + +### Naming patterns to look for in `figma_get_metadata` + +Scan the XML returned by `figma_get_metadata` for layer names matching: + +| Naming pattern | Likely asset type | Action | +| -------------------------------------------------- | ----------------- | ----------------------------------------- | +| `_Image`, `_Photo`, `_Picture`, `image`, `photo` | Raster image fill | Extract as PNG | +| `_Hero`, `_Banner`, `_Cover`, `hero`, `banner` | Large raster fill | Extract as PNG (2× scale) | +| `_Thumbnail`, `_Avatar`, `_Illustration` | Raster image fill | Extract as PNG | +| `_Logo`, `_Brand`, `logo`, `brand` | Vector or raster | If vector: extract as SVG; if raster: PNG | +| `_Icon/` prefix (custom icons not in igx-icon set) | Custom SVG icon | Extract as SVG | +| `_Background`, `_Bg`, `bg`, `background` | Large raster fill | Extract as PNG | +| `_Illustration`, `_Art`, `_Pattern` | Vector or raster | Classify before extracting | + +> **Ignore these** — do NOT extract them as image assets: +> +> - Any layer whose name starts with `_Button`, `_Input`, `_Grid`, `_Card`, etc. +> (Indigo.Design UI Kit component instances → implement as IgxXxx components) +> - `igx-icon` glyph nodes (use `` in Angular instead) +> - Artboard/frame boundaries themselves + +### Size heuristic + +Large rectangles (width > 200px or height > 200px) at key layout positions (hero area, +sidebar background, card thumbnail slot) are almost always image fills. + +Small nodes (< 48×48px) named with icon-like names are usually SVG icons. + +### Confirm with design context + +For ambiguous nodes, look at the `figma_get_design_context` output for the artboard. +Each image asset appears as either: + +- An `` — confirms it is a raster fill; note the node ID +- Inline SVG or an `` with `.svg` extension — confirms it is a vector; note the node ID + +Note all localhost image URLs from the design context — these are needed for Tier 2 +extraction if the REST API is unavailable. + +--- + +## Step 2 — Extract at the Highest Available Fidelity + +Use this **four-tier decision tree**. Start at Tier 1. Move to the next tier only if +the previous one is unavailable for this specific asset. + +``` +Do you have the FILE_KEY? +├─ YES → Use Tier 1 (REST API). Always the best. +└─ NO → Did figma_get_design_context include a localhost URL for this asset? + ├─ YES → Use Tier 2 (download localhost URL to disk). + └─ NO → Can you get a clean node screenshot? + ├─ YES → Use Tier 3 (figma_get_screenshot per node). + └─ NO → Use Tier 4 (CSS gradient/color placeholder as last resort, + with a TODO comment to replace later). +``` + +**After completing Phase 4, if you used Tier 2 or Tier 3 for any asset:** + +> Tell the user: "The following assets were extracted at reduced quality because the +> Figma file key was not available: [list]. To replace them with the original +> source files, run the Tier 1 REST API commands in Step 2a once you have the file key." + +--- + +### Tier 1 — REST API (Highest Fidelity) + +**Requires:** `FILE_KEY` and `FIGMA_TOKEN`. + +#### Method A — Original Image Fills + +Use this to download **photos, textures, and raster images** that were uploaded to +Figma (identified by `imageRef` in node fill data). Returns the original source file +at its native resolution — never a re-render. + +```bash +# Step A.1 — Get all image fill URLs in the file +curl -s \ + -H "X-Figma-Token: $FIGMA_TOKEN" \ + "https://api.figma.com/v1/files/$FILE_KEY/images" \ + -o /tmp/figma_image_fills.json + +# Response: { "images": { "": "", ... } } + +# Step A.2 — Get node fill data to match imageRef → node +curl -s \ + -H "X-Figma-Token: $FIGMA_TOKEN" \ + "https://api.figma.com/v1/files/$FILE_KEY/nodes?ids=$NODE_IDS" \ + -o /tmp/figma_nodes.json +# In the response, look for: "fills": [{ "type": "IMAGE", "imageRef": "abc123" }] +# Match "abc123" → URL from figma_image_fills.json + +# Step A.3 — Download to assets folder +mkdir -p src/assets/images src/assets/icons +IMAGE_URL=$(jq -r '.images[""]' /tmp/figma_image_fills.json) +curl -sL "$IMAGE_URL" -o src/assets/images/hero-background.jpg +``` + +> **URL expiry:** image fill URLs expire in **14 days**. Download during the session. + +#### Method B — Node Export (SVG, PNG, JPG) + +Use this to export **any node** as SVG, PNG, or JPG. Best for logos, custom icons, +vector illustrations, and raster compositions. + +```bash +mkdir -p src/assets/images src/assets/icons + +# SVG export (vectors — logos, icons, illustrations) +curl -s \ + -H "X-Figma-Token: $FIGMA_TOKEN" \ + "https://api.figma.com/v1/images/$FILE_KEY?ids=$NODE_IDS&format=svg&svg_outline_text=false&contents_only=true" \ + -o /tmp/figma_svg_export.json + +jq -r '.images | to_entries[] | "\(.key)\t\(.value)"' /tmp/figma_svg_export.json | \ +while IFS=$'\t' read -r nodeId url; do + filename="$(echo "$nodeId" | tr ':' '-').svg" + curl -sL "$url" -o "src/assets/icons/$filename" + echo "Downloaded $nodeId → src/assets/icons/$filename" +done + +# PNG export at 2× (raster compositions, hero banners) +curl -s \ + -H "X-Figma-Token: $FIGMA_TOKEN" \ + "https://api.figma.com/v1/images/$FILE_KEY?ids=$NODE_IDS&format=png&scale=2&contents_only=true" \ + -o /tmp/figma_png_export.json + +jq -r '.images | to_entries[] | "\(.key)\t\(.value)"' /tmp/figma_png_export.json | \ +while IFS=$'\t' read -r nodeId url; do + filename="$(echo "$nodeId" | tr ':' '-').png" + curl -sL "$url" -o "src/assets/images/$filename" +done +``` + +**Key export parameters:** + +| Parameter | Value | When to use | +| ------------------ | ------- | ---------------------------------------------------- | +| `format` | `svg` | Logos, icons, vector illustrations | +| `format` | `png` | Hero backgrounds, thumbnails — always pair `scale=2` | +| `format` | `jpg` | Photos without transparency — use `scale=2` | +| `scale` | `2` | **Always for PNG/JPG** — retina-quality output | +| `svg_outline_text` | `false` | Keep text as `` elements (smaller, accessible) | +| `contents_only` | `true` | Render the node in isolation (default) | + +> **Export URL expiry:** export URLs expire in **30 days**. Download immediately. + +--- + +### Tier 2 — Localhost URL Download (Desktop MCP Fallback) + +**Use when:** the file key is unavailable and `figma_get_design_context` returned +localhost URLs (e.g. `http://localhost:3845/assets/abc123.png`). + +These URLs are served by the Figma desktop app's in-memory renderer and are accessible +via `curl` during the active Figma session. They are **not** the original source file +(they are a renderer output), but they are substantially better than placeholders and +can be committed to the repository. + +```bash +mkdir -p src/assets/images src/assets/icons + +# Extract localhost URLs from a design context output and download them +# Replace with the actual URL found in figma_get_design_context output +curl -sL "http://localhost:3845/assets/.png" -o src/assets/images/hero-background.png +curl -sL "http://localhost:3845/assets/.svg" -o src/assets/icons/logo.svg +``` + +**Finding localhost URLs in design context output:** + +In the React+Tailwind code returned by `figma_get_design_context`, look for: + +- `const imgXxx = "http://localhost:3845/assets/.";` at the top of the output +- `` or `background-image` references inline + +Each `const` at the top is an image asset. Note its variable name, the URL, and which +Figma node it belongs to (from context around the `` tag). + +**Limitations of Tier 2 assets:** + +- Raster renders — vectors become PNGs, not SVGs +- Renderer resolution (typically 2×) — adequate for most uses +- Expire when the Figma desktop app closes — **must be downloaded before closing Figma** +- Must be renamed from `.png` to descriptive names before committing + +**Commit as-is** — they are real assets. Add a comment in the asset manifest: + +```typescript +// TODO: Replace with Tier 1 REST API export once FILE_KEY is available +heroBg: 'assets/images/hero-background.png', // extracted from Figma session +``` + +--- + +### Tier 3 — `figma_get_screenshot` per Node + +**Use when:** no file key AND no localhost URLs were produced for a specific node. + +`figma_get_screenshot` renders any currently-selected Figma node as a PNG screenshot. +Ask the user to select each image node in Figma, then call the tool. + +``` +// 1. Ask: "In Figma, please click the [Hero Background] layer to select it." +// 2. After confirmation: +figma_get_screenshot({}) +// 3. The returned image is a 1× screen-capture PNG. Save it to src/assets/images/. +``` + +**Limitations:** + +- 1× resolution — suitable as a placeholder but blurry on retina screens +- Rasterizes all vectors — logos become PNGs +- May include surrounding canvas elements + +Label these assets clearly in the manifest: + +```typescript +// TODO: Re-export at 2× via Tier 1 or Tier 2 — current version is 1× screen capture +heroBg: 'assets/images/hero-background.png', +``` + +--- + +### Tier 4 — CSS Fallback (Last Resort Only) + +**Use only when** an asset is confirmed to be a pure color fill or a gradient — not when +an image exists in Figma but extraction failed. Never use Tier 4 because extraction +feels difficult. + +```scss +// Only acceptable when the Figma layer is genuinely a gradient, not a photo +.hero-banner { + // TODO: Replace with real asset — extraction blocked (no file key, no session URL) + background: linear-gradient(135deg, #0d1b3e 0%, #1a0533 100%); +} +``` + +If you use Tier 4, add the `TODO` comment and include it in the post-session handoff +notes to the user. + +--- + +## Step 3 — Build an Asset Manifest + +After extraction, create a manifest so the implementation phase uses consistent paths: + +```typescript +// src/app//_assets.ts — generated during Phase 1h + +export const PAGE_ASSETS = { + // Figma node 123:456 — "Hero/Background" layer + // Tier 1: REST API PNG export at 2× + heroBg: 'assets/images/hero-background.jpg', + + // Figma node 789:012 — "_Logo/Main" layer + // Tier 1: REST API SVG export + logo: 'assets/icons/logo.svg', + + // Figma node 345:678 — "Card/Thumbnail" layer + // Tier 2: localhost URL download (TODO: re-export via REST API) + cardThumbnail: 'assets/images/card-thumbnail.png', +} as const; +``` + +Name files by layer purpose, not by node ID. + +--- + +## Step 4 — Angular Usage Patterns + +### Static images via `NgOptimizedImage` + +```html + +Dashboard hero background +``` + +Import `NgOptimizedImage` in the component's `imports` array. Note: `NgOptimizedImage` +does **not** work for inline base64 images. + +### Background images via SCSS + +```scss +.dashboard-hero { + background-image: url('/assets/images/hero-background.jpg'); + background-size: cover; + background-position: center; +} +``` + +### Inline SVG logos + +```html +Company logo +``` + +### Igx-icon for kit icons (do NOT extract as assets) + +Standard Material icons and `imx-icons` (Material Icons Extended) are registered at +runtime — never extract them as image files: + +```html +settings +``` + +See `figma-component-map.md § Material Icons Extended` for setup. + +--- + +## Pitfalls + +| Pitfall | Consequence | Fix | +| ------------------------------------------------------------ | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| Skipping asset extraction entirely (gradient placeholders) | Implementation looks nothing like the design; Phase 5 fails | Always use at least Tier 2 or Tier 3 — never skip | +| Not asking for the file key before starting extraction | Defaults to Tier 2/3 when Tier 1 was actually possible | Ask for the file key at the start of Phase 1h (see Step 0) | +| Using localhost URLs without downloading them in the session | URLs expire when Figma closes; assets become broken | Download with `curl` immediately; commit the files | +| Naming assets by node ID ("node-123-456.png") | Unmaintainable; breaks if Figma is reorganized | Name by layer purpose: `hero-background.jpg`, `company-logo.svg` | +| Using `figma_get_screenshot` for SVG logos | Logo is rasterized to PNG; loses vector scalability | Use Tier 1 Method B with `format=svg` instead; fall back to Tier 2 only if unavailable | +| Exporting PNG at `scale=1` | Blurry on HiDPI/retina screens | Always use `scale=2` | +| Storing Figma CDN export URLs in source code | URLs expire in 14–30 days; breaks production | Only store local `src/assets/...` paths in code | +| Downloading SVG with `svg_outline_text=true` (default) | All text converted to paths; larger file; no accessibility | Set `svg_outline_text=false` | +| Extracting Ignite UI component instances as images | Produces a static screenshot instead of an interactive component | Identify layer names from `figma-component-map.md`; those are components, not assets | +| Extracting background colors or gradients as images | Inflates bundle size, breaks theming | Colors → CSS custom properties or Ignite UI theming tokens | +| Not creating asset directories before running curl | Writes fail silently or to the wrong path | Always run `mkdir -p src/assets/images src/assets/icons` first | +| Large SVGs from complex illustrations | Slow render, large bundle | Consider PNG for illustrations > 50KB as SVG; SVG is best for logos and icons | diff --git a/.agents/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md b/.agents/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md new file mode 100644 index 0000000..6ce6526 --- /dev/null +++ b/.agents/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md @@ -0,0 +1,324 @@ +# Figma Variables → Ignite UI Angular Theming Bridge + +> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** +> +> Use this file in Phase 3 to translate Figma variable values (from `figma_get_variable_defs`) +> into Ignite UI Theming MCP inputs. Read this file in full before calling any theming tool. + +--- + +## How the Indigo.Design UI Kits Organize Variables + +The **Indigo.Design UI Kits** are Figma component libraries published by Infragistics. +Designers build their own app frames in Figma using these kits as shared libraries. +The kits come in four design-system variants, each with light and dark themes: + +| Kit variant | Figma library name pattern | Ignite UI `designSystem` | +| ---------------------- | ----------------------------------------------- | ------------------------ | +| Material (most common) | `Indigo.Design UI Kit for Material` | `"material"` | +| Fluent | `Indigo.Design UI Kit for Fluent` | `"fluent"` | +| Bootstrap | `Indigo.Design UI Kit for Bootstrap` | `"bootstrap"` | +| Indigo | `Indigo.Design UI Kit` / `Indigo.Design System` | `"indigo"` | + +**Identifying the active kit variant** is the first task in Phase 3 because it sets +the `designSystem` parameter for `theming_create_theme`. Use these signals in **strict +precedence order** — stop at the first clear match: + +1. **Library source name** — `figma_get_design_context` and `figma_get_metadata` responses + may reference the source library file name (e.g. `"Indigo.Design UI Kit for Material"`). +2. **Variable collection name** — `figma_get_variable_defs` may return collection names + that include the design system (e.g. `Material/color/primary`). +3. **Elevation variable structure** — inspect the `Elevations/*` variables from + `figma_get_variable_defs`: + - **Three-layer DROP_SHADOW** (umbra + penumbra + ambient, `Elevations/Shadow 01-03`) → **Material** + - **Single-layer DROP_SHADOW** → Indigo, Fluent, or Bootstrap +4. **Palette shade naming** — variables named `primary/500`, `primary/100`–`primary/900` + follow the Material 100–900 convention → likely **Material**. +5. **Visual heuristics** (use only when all above are inconclusive) — see the + [Design System Detection table](#design-system-detection-from-figma) below. + +> **Never use font name as a primary signal.** "Titillium Web" is the default body font +> in the Indigo.Design UI Kit for Material — it is not exclusive to any single kit variant. + +All four kit variants share the same variable naming conventions described below. The Ignite UI theming system uses Figma variable collections that mirror its own token structure: + +``` +Primitives collection → raw palette values (e.g. blue/500 = #6200EE) +Semantic collection → role-based aliases (e.g. color/primary = alias → blue/500) +Component collection → per-component overrides (e.g. button/background = alias → color/primary) +``` + +The `figma_get_variable_defs` response returns a flat map of resolved variable names to values. Use the sections below to identify which variables map to which theming inputs. + +--- + +## Global Palette Mapping + +### Primary Color + +| Figma Variable Pattern | Theming Input | Notes | +| ---------------------- | ------------------------------------- | --------------------------------------- | +| `color/primary` | `primary` in `theming_create_palette` | Use the resolved hex value | +| `primary/500` | `primary` | The 500 shade is the seed color | +| `Primary/Default` | `primary` | Alternative naming in some kit versions | +| `palette/primary/500` | `primary` | Prefixed naming pattern | + +> **Parameter names:** `theming_create_palette` uses `primary`, `secondary`, `surface` +> (short names). `theming_create_theme` uses `primaryColor`, `secondaryColor`, +> `surfaceColor` (long names). Do **not** mix them up. + +### Secondary / Accent Color + +| Figma Variable Pattern | Theming Input | Notes | +| ---------------------- | --------------------------------------- | ---------------------------------- | +| `color/secondary` | `secondary` in `theming_create_palette` | — | +| `secondary/500` | `secondary` | — | +| `Secondary/Default` | `secondary` | — | +| `color/accent` | `secondary` | Some kit variants call it "accent" | + +### Surface / Background Color + +| Figma Variable Pattern | Theming Input | Notes | +| ---------------------- | ------------------------------------- | ------------------- | +| `color/surface` | `surface` in `theming_create_palette` | The main background | +| `surface/default` | `surface` | — | +| `Surface` | `surface` | — | +| `color/background` | `surface` | Alternative naming | + +### Gray / Neutral Palette + +The Ignite UI theming system derives the gray scale automatically from the surface color. +You do **not** need to pass gray values to `theming_create_palette` explicitly unless you +need a custom gray family. If the Figma file has explicit gray variables, compare them +against the auto-generated palette after calling `theming_create_palette` and only add +a custom gray override if they differ significantly. + +### Semantic Status Colors + +| Figma Variable Pattern | Theming Input | Notes | +| -------------------------------- | ------------------------------------------ | -------- | +| `color/success` or `success/500` | `successColor` in `theming_create_palette` | Optional | +| `color/warning` or `warning/500` | `warningColor` in `theming_create_palette` | Optional | +| `color/error` or `error/500` | `errorColor` in `theming_create_palette` | Optional | +| `color/info` or `info/500` | `infoColor` in `theming_create_palette` | Optional | + +--- + +## Typography Mapping + +| Figma Variable Pattern | Theming Input | Notes | +| -------------------------------- | --------------------------------------------------- | ------------------------------------- | +| `typography/font-family` | `fontFamily` in `theming_create_typography` | Primary font | +| `typography/body/font-family` | `fontFamily` | Body font family | +| `typography/heading/font-family` | `fontFamily` | Use if heading font differs from body | +| `font/primary` | `fontFamily` | Alternative naming | +| `font/display` | Pass as `displayFontFamily` if the tool supports it | Display/headline font | + +> **fontFamily double-quote bug:** `theming_create_theme` may double-wrap the fontFamily +> string in its Sass output, producing invalid Sass such as `""'Titillium Web', sans-serif""`. +> If you see this pattern, strip the outer quotes before applying to `styles.scss`: +> +> ```scss +> // BAD (generated with bug) +> $font-family: +> '' 'Titillium Web', +> sans-serif ''; +> // GOOD (manually corrected) +> $font-family: 'Titillium Web', sans-serif; +> ``` + +> **Comma-separated font families** must be wrapped in parentheses when used in Sass +> typography mixins: +> +> ```scss +> // BAD — parsed as multiple Sass arguments +> @include typography($font-family: 'Roboto', 'Arial', sans-serif); +> // GOOD +> @include typography( +> $font-family: ( +> 'Roboto', +> 'Arial', +> sans-serif, +> ) +> ); +> ``` + +--- + +## Spacing, Sizing, and Roundness — Do Not Map Directly + +> **These Ignite UI theming tools are NOT equivalent to Figma spacing values.** +> Do not create a mapping between Figma pixel values and these tools. + +`theming_set_spacing` and `theming_set_roundness` accept **multipliers**, not pixel values. Passing a Figma `spacing/md = 16` as `theming_set_spacing({ spacing: 16 })` would produce a 1600% increase over the default — a catastrophic result. + +`theming_set_size` accepts a **density enum** (`small`, `medium`, `large`) — it controls how tightly packed components render, not a pixel measurement. + +### When to touch these tools (sparingly) + +| Tool | Use only when | Never use because | +| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `theming_set_size` | The Figma design clearly and consistently uses a noticeably tighter or looser component density than the design system default — e.g. a data-dense admin UI vs a spacious marketing page | A Figma spacing variable happens to match the name "compact" | +| `theming_set_spacing` | Explicitly requested by the user or required to match a very specific density contract; default (1.0) should be the starting point | A Figma `spacing/*` pixel value looks similar to the multiplier number | +| `theming_set_roundness` | The entire app has a clearly distinct border-radius language from the design system default (e.g. fully squared off vs fully rounded) | A Figma `border-radius/md = 8` maps numerically to the multiplier | + +### The correct adjustment path + +When a specific component needs tighter or looser density or spacing, scope `--ig-size` +and `--ig-spacing` to that component’s selector — not raw CSS overrides, not +`::ng-deep`. Both `theming_set_size` and `theming_set_spacing` accept a `component` +parameter that generates exactly this scoped output: + +``` +// Scoped size for one component type +theming_set_size({ component: "calendar", size: "small", platform: "angular" }) +// → igx-calendar { --ig-size: var(--ig-size-small); } + +// Scoped spacing: 0.75 = 75% of default +theming_set_spacing({ component: "calendar", spacing: 0.75, platform: "angular" }) +// → igx-calendar { --ig-spacing: 0.75; } +``` + +For compound components, scope to a sub-component selector via the `scope` parameter: + +``` +theming_set_size({ scope: "igx-grid-toolbar", size: "small", platform: "angular" }) +``` + +Or set the CSS custom properties directly in SCSS: + +```scss +igx-calendar { + --ig-size: var(--ig-size-small); + --ig-spacing: 0.75; +} +``` + +The Indigo.Design kit’s component proportions are already calibrated for each design +system; start from the defaults and only adjust when there is a clear visual reason. + +--- + +## Light vs Dark Mode Detection + +Detect from the Figma artboard: + +| Figma Signal | Action | +| -------------------------------------------------------- | ---------------------------------------------------------------------- | +| Dark artboard background (`#121212`, `#1a1a1a`, similar) | Use `variant: "dark"` in `theming_create_theme` | +| Light artboard background (`#fff`, `#f5f5f5`, similar) | Use `variant: "light"` in `theming_create_theme` | +| Multiple artboards — one light, one dark | Generate both theme variants with a `prefers-color-scheme` media query | +| `color/mode` variable present | Its value (`light` or `dark`) is the authoritative signal | + +--- + +## Design System Detection from Figma + +| Figma Visual Signal | Likely Design System | `designSystem` Value | +| ------------------------------------------------------------------ | -------------------------- | ----------------------- | +| Three-layer `DROP_SHADOW` on elevation variables (`Shadow 01-03`) | Material Design | `"material"` | +| Prominent single-layer shadows, rounded cards, ripple effects | Material Design | `"material"` | +| Flat surfaces, sharp corners, Segoe/Inter font | Microsoft Fluent | `"fluent"` | +| Component borders, Bootstrap-like grid | Bootstrap | `"bootstrap"` | +| Heavy use of purple/indigo accents, rounded corners, single shadow | Infragistics Indigo | `"indigo"` | +| `primary/500`, `primary/900` palette shade naming | Material (100–900 palette) | `"material"` | +| Explicit `$light-material-schema` or similar in Figma descriptions | Match the schema name | Use corresponding value | + +--- + +## Per-Component Token Resolution + +For each Ignite UI Angular component you use, follow this lookup order: + +### Step 1: Discover component tokens + +``` +theming_get_component_design_tokens({ component: "" }) +``` + +The result lists every available token with its name, type, and description. + +### Step 2: Match Figma variables to token names + +The **Indigo.Design UI Kits** use component-level variables that follow the pattern: + +``` +// +``` + +Examples: + +- `button/background` → token `background` in the button component +- `button/foreground` or `button/text-color` → token `foreground-color` +- `chip/background/selected` → token `selected-chip-color` +- `grid/header-background` → token `header-background` +- `navbar/background` → token `background` + +**Lookup process:** + +1. Take the Figma variable name (e.g. `button/background`) +2. Strip the component prefix (`background`) +3. Match it against the token list from `theming_get_component_design_tokens` +4. If no exact match, find the token whose description mentions the same visual role + +### Step 3: Common component token patterns + +| Component | Figma Variable | Likely Token Name | Notes | +| --------- | -------------------------- | ----------------------- | ----------------------- | +| Button | `button/background` | `background` | For `contained` variant | +| Button | `button/foreground` | `foreground-color` | Text color | +| Button | `button/border` | `border-color` | For `outlined` variant | +| Chip | `chip/background` | `background` | Default state | +| Chip | `chip/selected-background` | `selected-chip-color` | — | +| Grid | `grid/header/background` | `header-background` | — | +| Grid | `grid/row/background` | `content-background` | — | +| Grid | `grid/row/hover` | `row-hover-background` | — | +| Navbar | `navbar/background` | `background` | — | +| Input | `input/background` | `box-background` | Box/filled variant | +| Input | `input/border` | `border-color` | Line/border variant | +| Card | `card/background` | `background` | — | +| Card | `card/border` | `border-color` | — | +| List | `list/item/background` | `item-background` | — | +| List | `list/item/hover` | `item-hover-background` | — | +| Dialog | `dialog/background` | `background` | — | + +### Step 4: Generate component theme + +Pass **only tokens that differ from the global theme** to avoid over-specification: + +``` +theming_create_component_theme({ + component: "", + platform: "angular", + licensed: , + tokens: { + "background": "", + "foreground-color": "" + // only include tokens whose value differs from the generated global palette + } +}) +``` + +Apply the result using the `@include tokens()` call returned by the tool. + +--- + +## Variable Resolution Priority + +When multiple Figma variables could map to the same theming input, use this priority: + +1. **Component-scoped variable** (e.g. `button/background`) → per-component token +2. **Semantic role variable** (e.g. `color/primary`) → global palette input +3. **Primitive variable** (e.g. `primary/500`) → global palette seed color +4. **Raw hex/rgb value** (no variable) → extract directly from the design context + +--- + +## What to Skip + +Do **not** call theming tools for: + +- Chart, gauge, and map DV components → configure via component `[input]` bindings only +- Tile Manager and Dock Manager → these are web components with their own CSS custom properties +- Pure layout CSS (margins, grid columns, flex gaps) → write directly in SCSS +- Icon SVG fill colors → use `color` CSS property or the custom `--foreground` CSS property on the `igx-icon` host or its parent diff --git a/.agents/skills/igniteui-angular-figma-to-app/references/figma-component-map.md b/.agents/skills/igniteui-angular-figma-to-app/references/figma-component-map.md new file mode 100644 index 0000000..636f03f --- /dev/null +++ b/.agents/skills/igniteui-angular-figma-to-app/references/figma-component-map.md @@ -0,0 +1,305 @@ +# Indigo.Design UI Kit → Ignite UI Angular Component Map + +> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** +> +> The **Indigo.Design UI Kits** are Figma component libraries (Material, Fluent, Bootstrap, +> Indigo variants) that designers use to build their app screens. Every component instance +> in a design file is drawn from one of these libraries and maps 1:1 to an Ignite UI +> Angular control. +> +> Use this file in Phase 2a to map Figma layer names — as they appear in the kit +> library — to Ignite UI Angular selectors, `get_doc` keys, and key inputs. When a +> layer name is not in this table, call `list_components` then `get_doc` on the closest +> match. + +--- + +## How to Use This File + +1. Find the kit component name (as it appears in the Figma layers panel or the + Indigo.Design kit library) in the **Kit Component Name** column. +2. Read the **Angular Selector** and **IgxXxx Class** for the template. +3. Try the **`get_doc` Key** with `get_doc({ framework: "angular", name: "" })`. + **The doc catalog covers only a subset of components** (verify with `list_components` + once). When no doc exists for a key, use the + [`igniteui-angular-components`](../../igniteui-angular-components/SKILL.md) / + [`igniteui-angular-grids`](../../igniteui-angular-grids/SKILL.md) skill reference files + for usage patterns and `search_api` for member-level API lookups — do not guess. +4. Consult **Key Inputs / Variants** for the properties most commonly configured from + Figma variants. + +> The component names are identical across all four kit variants (Material, Fluent, +> Bootstrap, Indigo). The kit variant determines the theme style, not the component name. + +--- + +## Button Components + +| Kit Component Name | Angular Selector | IgxXxx Class | `get_doc` Key | Key Inputs / Variants | +| -------------------------------------- | ------------------------------------ | ------------------------- | -------------- | ---------------------------------------------------------- | +| `_Button/Flat` | ` +``` + +> **Key inputs summary:** +> - `[rowEditable]="true"` — enables the Done/Cancel overlay per row +> - `[editable]="true"` on each `igx-column` — marks which fields the user can change +> - `[primaryKey]` — **required** for editing to work +> - `[autoGenerate]="false"` — always define columns explicitly when editing is enabled so you control which fields are editable +> - `` with `` — adds hover Edit/Delete buttons and an optional Add Row button automatically + +### Programmatic Row Adding with Default Values + +When starting a new row programmatically, pre-populate fields using `(cellEditEnter)` on the new row: + +```typescript +onCellEditEnter(event: IGridEditEventArgs) { + if (event.isAddRow && event.column.field === 'available') { + event.newValue = true; // default new cars to available + } + if (event.isAddRow && event.column.field === 'year') { + event.newValue = new Date().getFullYear(); + } +} +``` + +```html + +``` + +--- + +## Batch Editing & Transactions + +> **Docs:** [Batch Editing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/batch-editing) (substitute URL prefix per grid type) + +> **Applies to**: Flat Grid, Tree Grid, and Hierarchical Grid. **Pivot Grid does NOT support batch editing.** +> Use batch editing when users need to **edit many rows at once** and commit or discard all changes together, with undo/redo support. + +### Enabling Batch Editing + +```html + + + + + + + + + + +``` + +### Managing Transactions + +```typescript +commitChanges() { + // Exit any active edit before committing + this.gridRef().endEdit(true); + this.gridRef().transactions.commit(this.gridRef().data); +} + +undoLast() { + // Must exit edit mode before undo/redo + this.gridRef().endEdit(true); + this.gridRef().transactions.undo(); +} + +redoLast() { + this.gridRef().endEdit(true); + this.gridRef().transactions.redo(); +} + +discardAll() { + this.gridRef().endEdit(false); + this.gridRef().transactions.clear(); +} +``` + +Use `canUndo` and `canRedo` to control button state: + +```html + + + + +``` + +### Transaction State + +```typescript +// Check if there are pending changes +const hasPendingChanges = this.gridRef().transactions.getAggregatedChanges(false).length > 0; + +// Get all pending transactions +const pending = this.gridRef().transactions.getAggregatedChanges(true); +// Each transaction has: { id, type ('add'|'update'|'delete'), newValue } +``` + +### Sending Batch Changes to Server + +```typescript +saveToServer() { + const changes = this.gridRef().transactions.getAggregatedChanges(true); + + const adds = changes.filter(t => t.type === 'add').map(t => t.newValue); + const updates = changes.filter(t => t.type === 'update').map(t => ({ id: t.id, ...t.newValue })); + const deletes = changes.filter(t => t.type === 'delete').map(t => t.id); + + this.dataService.saveBatch({ adds, updates, deletes }).subscribe(() => { + this.gridRef().transactions.commit(this.gridRef().data); + this.gridRef().transactions.clear(); + }); +} +``` + +## Excel-Style Editing Workflows + +### Inline Cell Editing with Validation + +```html + + + + + + +``` + +```typescript +import { Validators } from '@angular/forms'; + +emailValidators = [Validators.required, Validators.email]; +quantityValidators = [Validators.required, Validators.min(0), Validators.max(9999)]; + +onCellEditDone(event: IGridEditDoneEventArgs) { + // React to edits — e.g., recalculate totals + if (event.column.field === 'quantity' || event.column.field === 'unitPrice') { + this.recalculateRowTotal(event.rowID); + } +} +``` + +### Clipboard Paste for Bulk Edit + +Grids support paste from Excel/spreadsheets by default. Configure clipboard behavior: + +```html + + +``` + +### Row Adding via UI + +```typescript +// Flat Grid / Hierarchical Grid: +this.gridRef().beginAddRowByIndex(0); // at top +this.gridRef().beginAddRowById('ALFKI'); // under a specific row +this.gridRef().beginAddRowByIndex(this.gridRef().data.length); // at end + +// Tree Grid — add as child of a parent: +this.treeGridRef().addRow(newRowData, parentRowID); // add row as child of parentRowID +this.treeGridRef().beginAddRowByIndex(3, true); // add as child of row at index 3 +``` + +Use with Action Strip for visual add/edit actions: + +```html + + + + + + +``` + +## Editing Events Reference + +All grids fire a consistent sequence of events during cell and row editing: + +| Event | Fires When | Cancelable | +|---|---|---| +| `(rowEditEnter)` | Row enters edit mode | Yes | +| `(cellEditEnter)` | Cell enters edit mode (after `rowEditEnter`) | Yes | +| `(cellEdit)` | Cell value is about to be committed | Yes | +| `(cellEditDone)` | Cell value has been committed | No | +| `(cellEditExit)` | Cell exits edit mode | No | +| `(rowEdit)` | Row edit is about to be committed (Done button) | Yes | +| `(rowEditDone)` | Row edit has been committed | No | +| `(rowEditExit)` | Row exits edit mode | No | + +Canceling `(cellEdit)` keeps the cell in edit mode — the value won't commit until Cancel is clicked: + +```typescript +onCellEdit(event: IGridEditEventArgs) { + if (!event.valid) { + event.cancel = true; // prevent committing invalid values + } +} +``` + +## Validation + +### Template-Driven Validation + +Apply Angular validators directly on columns: + +```html + + +``` + +Supported built-in validators: `required`, `min`, `max`, `email`, `minlength`, `maxlength`, `pattern`. + +### Reactive Form Validation + +Use the `formGroupCreated` event to add custom validators when a row enters edit mode: + +```html + + +``` + +```typescript +onFormGroupCreated(event: IGridFormGroupCreatedEventArgs) { + const { formGroup } = event; + formGroup.get('endDate')?.addValidators(this.dateAfterValidator('startDate')); +} +``` + +### Validation Service + +The grid exposes a `validation` service: + +```typescript +// Check if the grid is in a valid state +const isValid = this.gridRef().validation.valid; + +// Get all records with validation errors +const invalid = this.gridRef().validation.getInvalid(); + +// Clear validation state for a specific record (or all if no id) +this.gridRef().validation.clear(recordId); +``` + +## Summaries + +### Built-In Summaries + +```html + +``` + +Default summaries by type: +- **number**: Count, Min, Max, Sum, Average +- **date**: Count, Earliest, Latest +- **string/boolean**: Count + +### Custom Summary Operand + +```typescript +import { IgxNumberSummaryOperand } from 'igniteui-angular/grids/core'; +import { IgxSummaryResult } from 'igniteui-angular/core'; + +class RevenueSummary extends IgxNumberSummaryOperand { + operate(data: number[]): IgxSummaryResult[] { + const result = super.operate(data); + result.push({ + key: 'margin', + label: 'Avg Margin', + summaryResult: data.length ? data.reduce((a, b) => a + b, 0) / data.length * 0.15 : 0 + }); + return result; + } +} + +// Use in component +revenueSummary = RevenueSummary; +``` + +```html + +``` + +### Summaries with Grouping + +When grouping is enabled, summaries appear for each group. Control this with: + +```html + + +``` + +## Key Rules + +1. **Choose the right editing mode** — cell editing (`[editable]` + `(cellEditDone)`) for immediate per-cell saves; row editing (`[rowEditable]="true"` + `(rowEditDone)`) for confirm/cancel per row (**recommended default for CRUD**); batch editing (`[batchEditing]="true"`) for accumulate-then-commit with undo/redo +2. **`[primaryKey]` is required for all editing** — row editing, batch editing, row adding, and row deletion all depend on it (Flat, Tree, Hierarchical, Pivot grids; NOT Grid Lite) +3. **Always set `[autoGenerate]="false"` when editing** — define columns explicitly and mark each with `[editable]="true"` to control exactly what users can change +4. **Batch editing requires `[primaryKey]`** — call `endEdit(true)` before `transactions.undo()`/`redo()`, commit via `transactions.commit(data)` +5. **Cancelable events** — use `event.cancel = true` in `(cellEdit)`, `(rowEdit)`, `(rowEditEnter)`, `(cellEditEnter)` to prevent the action +6. **Validation** — use template-driven validators on columns (`required`, `min`, `max`, `email`, `pattern`) or reactive validators via `(formGroupCreated)` + +Universal rules (viewChild types, directive bundles, signals) are in the [hub](../SKILL.md#universal-rules-every-grid-type). + +## See Also + +- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns +- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization +- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations +- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection +- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.agents/skills/igniteui-angular-grids/references/features.md b/.agents/skills/igniteui-angular-grids/references/features.md new file mode 100644 index 0000000..3d51203 --- /dev/null +++ b/.agents/skills/igniteui-angular-grids/references/features.md @@ -0,0 +1,221 @@ +# Grid Features — Grouping, Summaries, Toolbar, Export, Row Drag & More + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For grid setup, column config, sorting, filtering, selection — see [`structure.md`](./structure.md). +> For Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics — see [`types.md`](./types.md). +> For full editing coverage (cell/row/batch) — see [`editing.md`](./editing.md). + +## Contents + +- [Editing](#editing) +- [Grouping (Flat and Tree Grid only)](#grouping-flat-and-tree-grid-only) +- [Summaries](#summaries) +- [Cell Merging](#cell-merging) +- [Toolbar](#toolbar) +- [Export](#export) +- [Virtualization & Performance](#virtualization--performance) +- [Row Drag](#row-drag) +- [Action Strip](#action-strip) +- [Master-Detail (Grid only)](#master-detail-grid-only) +- [Clipboard](#clipboard) +- [Key Rules](#key-rules) + +## Editing + +> **Full editing coverage is in [`editing.md`](./editing.md)**, which includes cell editing, row editing, batch editing with transactions, row adding/deleting, validation, and summaries. Use that reference for any editing task. + +Quick reference: + +| Mode | Key properties | +|---|---| +| **Cell editing** | `[editable]="true"` on columns + `(cellEditDone)` | +| **Row editing** (recommended default) | `[rowEditable]="true"` + `[editable]="true"` on columns + `(rowEditDone)` | +| **Batch editing** | `[batchEditing]="true"` + `[rowEditable]="true"` + `transactions.commit(data)` | + +## Grouping (Flat and Tree Grid only) + +The two grids group differently: + +- **Flat Grid** has built-in GroupBy — `[groupable]="true"` on columns (not on the grid component itself) plus the `groupBy()`/`clearGrouping()` API. +- **Tree Grid** has no `groupBy()` API — it groups via `IgxTreeGridGroupByAreaComponent` (``) paired with the tree-grid grouping pipe that reshapes flat data into a grouped hierarchy. + +```html + + + + + + {{ groupRow.expression.fieldName }}: {{ groupRow.value }} ({{ groupRow.records.length }} items) + + +``` + +Programmatic (Flat Grid): + +```typescript +this.gridRef().groupBy({ fieldName: 'category', dir: SortingDirection.Asc }); +this.gridRef().clearGrouping('category'); +``` + +For advanced programmatic grouping patterns — see [`data-operations.md`](./data-operations.md). + +## Summaries + +> **Full summaries coverage — built-in summaries, custom summary operands, and summaries with grouping — is in [`editing.md`](./editing.md#summaries).** +> +> Quick reference: enable per-column summaries with `[hasSummary]="true"` on an `igx-column`. Default operands: **number** → Count/Min/Max/Sum/Average; **date** → Count/Earliest/Latest; **string/boolean** → Count. + +## Cell Merging + +Merge adjacent cells with equal values: + +```html + + + +``` + +Grid merge modes (`cellMergeMode`): +- `'onSort'` — merge only when the column is sorted **(default)** +- `'always'` — merge regardless of sort state + +Or apply a custom merge strategy at the **grid level** (not column): + +```html + + + +``` + +```typescript +import { DefaultMergeStrategy } from 'igniteui-angular/core'; +// import { DefaultMergeStrategy } from '@infragistics/igniteui-angular/core'; for licensed package + +// Extend DefaultMergeStrategy and override comparer +class PriceRangeMergeStrategy extends DefaultMergeStrategy { + public override comparer(prevRecord: any, record: any, field: string): boolean { + return Math.abs(prevRecord[field] - record[field]) < 10; + } +} + +customMerge = new PriceRangeMergeStrategy(); +``` + +## Toolbar + +> **Full docs in the MCP** — `get_doc` with `grid-toolbar`, `treegrid-toolbar`, or `hierarchicalgrid-toolbar` covers title, built-in actions (hiding, pinning, advanced filtering, exporter), custom content, progress indication, and theming. Prefer those over memory. + +Toolbar components (`IgxGridToolbarComponent` and the action components) import from `igniteui-angular/grids/core` and nest inside the grid element: + +```html + + + Products + + + + + + + + + +``` + +## Export + +> **Full docs in the MCP** — `get_doc` with `grid-export-excel`, `treegrid-export-excel`, `hierarchicalgrid-export-excel`, `pivotGrid-export-excel`, or `exporter-pdf` covers setup, full-data vs. visible exports, multi-column headers, customization events, and known limitations. Prefer those over memory. + +Quick reference — exporter services (`IgxExcelExporterService`, `IgxCsvExporterService`, and their `*ExporterOptions`) import from `igniteui-angular/grids/core`; `inject()` the service and call `export(grid, options)` (respects filtering/sorting) or `exportData(data, options)` (raw data). + +## Virtualization & Performance + +Grids use virtualization by default for both rows and columns — no setup needed. For remote data/paging: + +```html + + +``` + +For full remote virtualization patterns — see [`paging-remote.md`](./paging-remote.md). + +## Row Drag + +```html + + + + arrow_right_alt + + +``` + +Handle drops via `igxDrop` on the target: + +```typescript +import { IDropDroppedEventArgs } from 'igniteui-angular/directives'; + +onDropAllowed(args: IDropDroppedEventArgs) { + this.targetGrid.addRow(args.dragData.data); // row data + this.sourceGrid.deleteRow(args.dragData.key); // primary key +} +``` + +## Action Strip + +Overlay actions on a row: + +```html + + + + + + + +``` + +## Master-Detail (Grid only) + +Expand rows to show arbitrary detail content: + +```html + + + + + +
+

Order Items for {{ dataItem.customer }}

+ + +
+
+
+``` + +## Clipboard + +Grids support copy to clipboard by default. Configure via: + +```html + + +``` + +## Key Rules + +1. **Cancelable events** — use `event.cancel = true` in `(rowEdit)`, `(cellEdit)`, `(sorting)`, `(filtering)` to prevent the action +2. **The `groupBy()` API is Flat Grid only** — Tree Grid groups via `igx-tree-grid-group-by-area` + grouping pipe; Hierarchical Grid uses row islands, Pivot Grid uses dimensions + +Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). + +## See Also + +- [`structure.md`](./structure.md) — Column config, sorting UI, filtering UI, selection +- [`types.md`](./types.md) — Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics +- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping +- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization +- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries +- [`state.md`](./state.md) — State persistence +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.agents/skills/igniteui-angular-grids/references/grid-migration.md b/.agents/skills/igniteui-angular-grids/references/grid-migration.md new file mode 100644 index 0000000..ae77b8d --- /dev/null +++ b/.agents/skills/igniteui-angular-grids/references/grid-migration.md @@ -0,0 +1,479 @@ +# Ignite UI for Angular - Grid Lite → Premium Data Grid Migration + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** + +## Purpose + +This skill automates the migration from the **open-source Grid Lite** (`igx-grid-lite`, MIT licensed) to the **Premium Data Grid** (`igx-grid`, commercially licensed). Use it when a project outgrows Grid Lite's read-only capabilities and needs enterprise features such as editing, selection, paging, grouping, summaries, export, or state persistence. + +## Required Workflow + +Grid APIs change between releases — do not write migration code from memory. Before producing migration code: + +1. **Identify the current Grid Lite usage** - read the user's existing component files to understand their column configuration, templates, data binding, and any `dataPipelineConfiguration` usage. +2. **Consult the grids skill** - read the relevant reference files from [`igniteui-angular-grids`](../SKILL.md) for the target features the user needs after migration. +3. **Use the MCP server when in doubt** - call `get_doc` or `search_docs` from the `igniteui-cli` MCP server (if available) for Angular to verify current API details. +4. **Only then produce output** - base all code on verified references, not memory. + +--- + +## When to Migrate + +Migrate from Grid Lite to the Premium Grid when the user needs **any** of these features: + +| Required Feature | Grid Lite | Premium Grid | +|---|---|---| +| Cell / Row / Batch editing | No | Yes | +| Row adding / deleting | No | Yes | +| Row / Cell / Column selection | No | Yes | +| Paging (client or remote) | No | Yes | +| GroupBy | No | Yes | +| Summaries (built-in & custom) | No | Yes | +| Column pinning | No | Yes | +| Column moving | No | Yes | +| Master-Detail rows | No | Yes (exclusive to flat grid) | +| Export (Excel / CSV) | No | Yes | +| Toolbar | No | Yes | +| State persistence | No | Yes | +| Advanced filtering | No | Yes | +| Action strip | No | Yes | +| Row drag | No | Yes | +| Clipboard support | No | Yes | +| Cell merging | No | Yes | + +> **IMPORTANT:** The upgrade path from Grid Lite is **always** to `igx-grid` (`IgxGridComponent`). Never recommend a different component type as a substitute. + +--- + +## Migration Checklist + +### Step 1 - Install / Verify the Premium Package + +Grid Lite uses the separate `igniteui-grid-lite` npm package. The Premium Grid is part of the main `igniteui-angular` (or `@infragistics/igniteui-angular`) package. + +> **Important:** Check `package.json` to determine which package variant is installed. If only `igniteui-grid-lite` is present, the user needs to install the full package. + +```bash +# Open-source package +npm install igniteui-angular + +# OR licensed package (requires private registry) +npm install @infragistics/igniteui-angular +``` + +The `igniteui-grid-lite` package can be removed after migration if no other Grid Lite instances remain: + +```bash +npm uninstall igniteui-grid-lite +``` + +### Step 2 - Update Imports + +**Before (Grid Lite):** + +```typescript +import { + IgxGridLiteComponent, + IgxGridLiteColumnComponent, + IgxGridLiteCellTemplateDirective, + IgxGridLiteHeaderTemplateDirective, +} from 'igniteui-angular/grids/lite'; +``` + +**After (Premium Grid):** + +```typescript +// Open-source +import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; + +// Licensed +// import { IgxGridComponent, IGX_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/grid'; +``` + +> **Key change:** The Premium Grid provides `IGX_GRID_DIRECTIVES` - a single convenience import that includes all grid directives (columns, templates, toolbar, paginator bindings, etc.). You no longer need to import each directive individually. + +### Step 3 - Update the Component Decorator + +**Before:** + +```typescript +@Component({ + selector: 'app-data-view', + imports: [ + IgxGridLiteComponent, + IgxGridLiteColumnComponent, + IgxGridLiteCellTemplateDirective, + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], // Optional: only needed when using the underlying web component directly + templateUrl: './data-view.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +``` + +**After:** + +```typescript +@Component({ + selector: 'app-data-view', + imports: [IGX_GRID_DIRECTIVES], + // No CUSTOM_ELEMENTS_SCHEMA needed - Premium Grid is a native Angular component + templateUrl: './data-view.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +``` + +**Changes:** +- Replace individual Grid Lite imports with `IGX_GRID_DIRECTIVES` +- If you previously added `CUSTOM_ELEMENTS_SCHEMA` for Grid Lite (e.g. when using the underlying web component directly), remove it after migrating — Premium Grid is a native Angular component +- Remove the `schemas` array entirely if it only contained `CUSTOM_ELEMENTS_SCHEMA` + +### Step 4 - Update the Component Class + +**Before:** + +```typescript +export class DataViewComponent { + gridRef = viewChild>('grid'); + data: Product[] = []; +} +``` + +**After:** + +```typescript +export class DataViewComponent { + gridRef = viewChild.required('grid'); + protected data = signal([]); +} +``` + +**Changes:** +- Replace `IgxGridLiteComponent` with `IgxGridComponent` +- Add `[primaryKey]` support - strongly recommended for editing, selection, and any row-targeted API (`getRowByKey`, transactions, row pinning, etc.). Without it the grid falls back to row indexes/object identity, which breaks across virtualization and remote data. +- Use `signal()` for reactive data (recommended but not required) + +### Step 5 - Update the Template + +#### Selector & Grid Element + +| Grid Lite | Premium Grid | +|---|---| +| `` | `` (needs an explicit `height` - or a parent with a fixed height - for row virtualization) | +| `` | `` | +| No `[primaryKey]` | `[primaryKey]="'id'"` (strongly recommended for editing/selection/row APIs) | +| `[sortingOptions]="{ mode: 'multiple' }"` | `[sortingOptions]="{ mode: 'multiple' }"` or per-column `[sortable]="true"` | + +**Before:** + +```html + + + + + + +``` + +**After:** + +```html + + + + + + + +``` + +#### Column Attribute Differences + +| Grid Lite attribute | Premium Grid equivalent | Notes | +|---|---|---| +| `sortable` (boolean HTML attr) | `[sortable]="true"` or bare `sortable` | Both styles work on `igx-column`; bracketed binding is preferred for clarity | +| `filterable` (boolean HTML attr) | `[filterable]="true"` or bare `filterable` | Same pattern | +| `resizable` (boolean HTML attr) | `[resizable]="true"` or bare `resizable` | Same pattern | +| `hidden` (boolean HTML attr) | `[hidden]="true"` | Use binding - bare `hidden` collides with the native HTML attribute | +| `field` | `field` | Identical | +| `header` | `header` | Identical | +| `dataType` | `dataType` | Premium supports additional types: `dateTime`, `time`, `currency`, `percent`, `image` | +| `width` | `width` | Identical (CSS value, e.g., `'250px'`) | + +#### Cell Template Migration + +**Before (Grid Lite):** + +```html + + + {{ value }} + + +``` + +**After (Premium Grid):** + +```html + + + {{ cell.value }} + + +``` + +**Key differences:** +- Template directive: `igxGridLiteCell` → `igxCell` +- Context object: Grid Lite exposes `let-value` directly; Premium exposes `let-cell="cell"` where you access `cell.value`, `cell.row`, `cell.column` +- Premium also supports `igxCellEditor` for edit templates (not available in Grid Lite) + +#### Header Template Migration + +**Before:** + +```html + + {{ column.header }} + +``` + +**After:** + +```html + + {{ column.header }} + +``` + +**Change:** `igxGridLiteHeader` → `igxHeader` + +### Step 6 - Migrate Remote Data Operations + +Grid Lite uses `dataPipelineConfiguration` (async callbacks). The Premium Grid uses **noop data operation strategies + events**. + +**Before (Grid Lite - `dataPipelineConfiguration`):** + +```typescript +dataPipeline: IgxGridLiteDataPipelineConfiguration = { + sort: async (params) => { + return await this.dataService.sortRemote(params.grid.sortingExpressions); + }, + filter: async (params) => { + return await this.dataService.filterRemote(params.grid.filteringExpressions); + }, +}; +``` + +```html + + +``` + +**After (Premium Grid - noop strategies + events):** + +```typescript +import { + NoopSortingStrategy, + NoopFilteringStrategy, +} from 'igniteui-angular/core'; +import { ISortingEventArgs } from 'igniteui-angular/grids/core'; + +export class DataViewComponent { + gridRef = viewChild.required('grid'); + noopSort = NoopSortingStrategy.instance(); + noopFilter = NoopFilteringStrategy.instance(); + + onSortingDone(event: ISortingEventArgs) { + this.dataService.sortRemote(this.gridRef().sortingExpressions).subscribe(data => this.data.set(data)); + } + + onFilteringDone() { + this.dataService.filterRemote(this.gridRef().filteringExpressionsTree).subscribe(data => this.data.set(data)); + } +} +``` + +```html + + +``` + +### Step 7 - Migrate Sort/Filter Events + +| Grid Lite Event | Premium Grid Event | Notes | +|---|---|---| +| `(sorting)` | `(sorting)` | Both cancelable | +| `(sorted)` | `(sortingDone)` | Name changed | +| `(filtering)` | `(filtering)` | Both cancelable | +| `(filtered)` | `(filteringDone)` | Name changed. For **remote** filtering, bind `(filteringExpressionsTreeChange)` instead — see Step 6 and [`paging-remote.md`](./paging-remote.md) | + +### Step 8 - Migrate Programmatic Sort/Filter API + +**Grid Lite API:** + +```typescript +this.gridRef().sort({ key: 'name', direction: 'ascending' }); +this.gridRef().filter({ key: 'age', condition: 'greaterThan', searchTerm: 21 }); +this.gridRef().clearSort(); +this.gridRef().clearFilter(); +``` + +**Premium Grid API:** + +```typescript +import { SortingDirection, IgxNumberFilteringOperand } from 'igniteui-angular/core'; + +// Sorting +this.gridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); +this.gridRef().clearSort('name'); + +// Filtering +this.gridRef().filter('age', 21, IgxNumberFilteringOperand.instance().condition('greaterThan')); +this.gridRef().clearFilter('age'); +``` + +**Key differences:** +- Sort expression: `key` → `fieldName`, `direction: 'ascending'` → `dir: SortingDirection.Asc` +- Filter: object-based → positional arguments with typed operand instances + +### Step 9 - Remove Grid Lite Artifacts + +After migration, clean up: + +1. Remove `CUSTOM_ELEMENTS_SCHEMA` from any component that only used it for Grid Lite +2. Remove `import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'` if no longer needed +3. Remove `igniteui-grid-lite` from `package.json` if no Grid Lite instances remain +4. Remove any `IgxGridLiteDataPipelineConfiguration` types and replace with noop strategies + +--- + +## Adding Enterprise Features Post-Migration + +Once on the Premium Grid, enable the features that motivated the migration: + +### Editing + +```html + + + + +``` + +### Selection + +```html + + + +``` + +### Paging + +```html + + + + +``` + +### GroupBy + +```html + + + +``` + +### Export + +```typescript +import { IgxExcelExporterService, IgxExcelExporterOptions } from 'igniteui-angular/grids/core'; + +export class DataViewComponent { + private excelExporter = inject(IgxExcelExporterService); + + exportToExcel() { + this.excelExporter.exportData(this.data(), new IgxExcelExporterOptions('export')); + } +} +``` + +### Toolbar + +```html + + + Products + + + + + + + + +``` + +### Summaries + +```html + +``` + +### Batch Editing + +```html + + + +``` + +```typescript +// Commit or discard all pending changes +this.gridRef().transactions.commit(this.data()); +this.gridRef().transactions.clear(); +``` + +--- + +## Quick Reference - Full Migration Map + +| Aspect | Grid Lite | Premium Grid | +|---|---|---| +| **Package** | `igniteui-grid-lite` (separate) | `igniteui-angular` or `@infragistics/igniteui-angular` | +| **Entry point** | `igniteui-angular/grids/lite` | `igniteui-angular/grids/grid` | +| **Component** | `IgxGridLiteComponent` | `IgxGridComponent` | +| **Selector** | `` | `` | +| **Column selector** | `` | `` | +| **Imports style** | Individual (`IgxGridLiteComponent`, `IgxGridLiteColumnComponent`, ...) | Bundle (`IGX_GRID_DIRECTIVES`) | +| **Schema** | `CUSTOM_ELEMENTS_SCHEMA` (optional; only if using the underlying web component directly) | Not needed | +| **Primary key** | Not supported | `[primaryKey]="'id'"` (required for editing/selection) | +| **Cell template** | `igxGridLiteCell` (exposes `let-value`) | `igxCell` (exposes `let-cell="cell"`, access `cell.value`) | +| **Header template** | `igxGridLiteHeader` | `igxHeader` | +| **Editor template** | Not available | `igxCellEditor` | +| **Column attributes** | Boolean HTML attrs (`sortable`, `filterable`) | Angular inputs (`[sortable]="true"`, `[filterable]="true"`) | +| **Remote data** | `dataPipelineConfiguration` (async callbacks) | Noop strategies + events | +| **Sort event (done)** | `(sorted)` | `(sortingDone)` | +| **Filter event (done)** | `(filtered)` | `(filteringDone)` | +| **Sort expression** | `{ key, direction }` | `{ fieldName, dir: SortingDirection }` | +| **License** | MIT (free) | Commercial (trial with watermark) | + +--- + +## Related Skills + +- **[`igniteui-angular-grids`](../SKILL.md)** - Full grid reference for all grid types (use after migration for feature details) +- **[`igniteui-angular-theming`](../../igniteui-angular-theming/SKILL.md)** - Theming and styling (works with both Grid Lite and Premium Grid) +- **[`igniteui-angular-components`](../../igniteui-angular-components/SKILL.md)** - Non-grid UI components diff --git a/.agents/skills/igniteui-angular-grids/references/paging-remote.md b/.agents/skills/igniteui-angular-grids/references/paging-remote.md new file mode 100644 index 0000000..0ddd40d --- /dev/null +++ b/.agents/skills/igniteui-angular-grids/references/paging-remote.md @@ -0,0 +1,391 @@ +# Grid Paging, Remote Data & Virtualization + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For grid import patterns and `viewChild` access — see [`data-operations.md`](./data-operations.md). +> For editing and validation — see [`editing.md`](./editing.md). +> For state persistence — see [`state.md`](./state.md). + +## Contents + +- [Paging](#paging) +- [Remote Data Operations](#remote-data-operations) +- [Virtualization](#virtualization) +- [Multi-Grid Coordination](#multi-grid-coordination) +- [Key Rules](#key-rules) + +## Paging + +### Using the Paginator Component + +```html + + + + + + + +``` + +### Programmatic Paging + +```typescript +// Navigate pages +this.gridRef().paginator.page = 3; +this.gridRef().paginator.nextPage(); +this.gridRef().paginator.previousPage(); +this.gridRef().paginator.paginate(0); // go to first page + +// Change page size +this.gridRef().paginator.perPage = 25; +``` + +### Paging Events + +| Event | Description | +|---|---| +| `(paging)` | Fires before page changes (cancelable) | +| `(pagingDone)` | Fires after page has changed | +| `(perPageChange)` | Fires when page size changes | + +### Remote Paging + +```typescript +import { GridPagingMode } from 'igniteui-angular/grids/core'; +import { IPageEventArgs } from 'igniteui-angular/paginator'; + +export class RemotePagingComponent { + data = signal([]); + totalCount = signal(0); + perPage = signal(15); + pagingMode = GridPagingMode.Remote; + + gridRef = viewChild.required('grid'); + private dataService = inject(ProductService); + + constructor() { + this.loadPage(0); + } + + onPagingDone(event: IPageEventArgs) { + this.loadPage(event.current); + } + + onPerPageChange(perPage: number) { + this.perPage.set(perPage); + this.loadPage(0); + } + + private loadPage(pageIndex: number) { + const skip = pageIndex * this.perPage(); + this.dataService.getProducts({ skip, take: this.perPage() }).subscribe(result => { + this.data.set(result.data); + this.totalCount.set(result.totalCount); + }); + } +} +``` + +```html + + + + + + + +``` + +## Remote Data Operations + +### The Problem + +Grids perform sorting, filtering, and paging **client-side** by default. For large datasets, you must intercept these operations and delegate them to the server. + +### Complete Remote Data Pattern + +This is the canonical pattern for server-side sorting, filtering, and virtualization. **You must disable the built-in client-side sorting/filtering** by applying `NoopSortingStrategy` and `NoopFilteringStrategy` on the grid: + +```typescript +import { Component, ChangeDetectionStrategy, signal, viewChild, inject, DestroyRef } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; +import { + IFilteringExpressionsTree, + ISortingExpression, + NoopSortingStrategy, + NoopFilteringStrategy +} from 'igniteui-angular/core'; +import { IForOfState } from 'igniteui-angular/directives'; +import { debounceTime, Subject } from 'rxjs'; + +@Component({ + selector: 'app-remote-grid', + imports: [IGX_GRID_DIRECTIVES], + templateUrl: './remote-grid.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class RemoteGridComponent { + data = signal([]); + totalCount = signal(0); + isLoading = signal(false); + + // Noop strategies — disable built-in client-side sort/filter + noopSort = NoopSortingStrategy.instance(); + noopFilter = NoopFilteringStrategy.instance(); + + gridRef = viewChild.required('grid'); + private dataService = inject(OrderService); + private destroyRef = inject(DestroyRef); + + private currentSort: ISortingExpression[] | undefined; + private currentFilter: IFilteringExpressionsTree | undefined; + + // Debounce rapid dataPreLoad events during fast scrolling + private dataPreLoad$ = new Subject(); + + constructor() { + this.dataPreLoad$.pipe( + debounceTime(150), + takeUntilDestroyed(this.destroyRef) + ).subscribe(event => { + // NOTE: The first chunkSize will always be 0 — use a reasonable default + const chunkSize = event.chunkSize || 15; + this.loadData(event.startIndex, chunkSize); + }); + + this.loadData(0, 15); + } + + onDataPreLoad(event: IForOfState) { + this.dataPreLoad$.next(event); + } + + onSortingDone() { + this.currentSort = this.gridRef().sortingExpressions; + this.loadData(0, 15); + } + + onFilteringExpressionsTreeChange() { + this.currentFilter = this.gridRef().filteringExpressionsTree; + this.loadData(0, 15); + } + + private loadData(skip: number, take: number) { + this.isLoading.set(true); + this.dataService.getOrders({ + skip, + take, + sort: this.currentSort, + filter: this.currentFilter + }).subscribe(result => { + this.data.set(result.data); + this.totalCount.set(result.total); + this.isLoading.set(false); + }); + } +} +``` + +```html + + + + + + + + +``` + +> **IMPORTANT**: `[sortStrategy]="noopSort"` and `[filterStrategy]="noopFilter"` prevent the grid from applying sort/filter operations client-side. The grid still fires events (allowing you to send them to the server), but the local data remains untouched until you replace it. + +### Excel-Style Filtering with Remote Unique Values + +When using Excel-style filtering with remote data, provide a strategy to fetch unique column values from the server: + +```typescript +// Tell the grid how to load unique values for Excel-style filter lists +uniqueValuesStrategy = (column: any, tree: any, done: (values: any[]) => void) => { + this.dataService.getUniqueValues(column.field).subscribe(values => done(values)); +}; +``` + +```html + + +``` + +### Remote Data Service Example + +```typescript +import { Injectable, inject } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +export interface RemoteDataResult { + data: T[]; + total: number; +} + +@Injectable({ providedIn: 'root' }) +export class OrderService { + private http = inject(HttpClient); + private apiUrl = '/api/orders'; + + getOrders(params: { + skip: number; + take: number; + sort?: any[]; + filter?: any; + }): Observable> { + let httpParams = new HttpParams() + .set('skip', params.skip) + .set('take', params.take); + + if (params.sort?.length) { + httpParams = httpParams.set('sort', JSON.stringify(params.sort)); + } + if (params.filter) { + httpParams = httpParams.set('filter', JSON.stringify(params.filter)); + } + + return this.http.get>(this.apiUrl, { params: httpParams }); + } +} +``` + +### Key Points for Remote Data + +1. **Set `[totalItemCount]`** — the grid needs the total record count for correct virtual scrollbar sizing +2. **Use `[isLoading]`** — shows a loading indicator while data is being fetched +3. **Apply `NoopSortingStrategy` and `NoopFilteringStrategy`** — prevents the grid from performing client-side sorting/filtering, so the server results are displayed as-is +4. **Listen to `(dataPreLoad)`** — fires when the user scrolls and the grid needs more rows; provides `startIndex` and `chunkSize` (first `chunkSize` will be 0 — use a fallback) +5. **Listen to `(sortingDone)` and `(filteringExpressionsTreeChange)`** — reset to the beginning and re-fetch with new parameters; `filteringExpressionsTreeChange` is the grid-level output that reflects the complete filter state (unlike the column-level `filteringDone`) +6. **Track current sort/filter state** — store them so every `loadData` call includes the active criteria +7. **Debounce `(dataPreLoad)`** — use `debounceTime` to avoid flooding the server during fast scrolling +8. **Use `[uniqueColumnValuesStrategy]`** — when using Excel-style filtering, supply a callback to load unique column values from the server + +## Virtualization + +### How It Works + +All Ignite UI grids use **row and column virtualization** by default. Only the visible rows and columns are rendered in the DOM, enabling smooth scrolling through millions of records. + +### Requirements + +- Set a fixed `height` on the grid (e.g., `height="600px"`) +- No additional configuration is needed — virtualization is automatic +- Do **not** wrap the grid in a virtual scroll container + +### Remote Virtualization + +For datasets too large to load entirely, combine virtualization with remote data: + +```html + + +``` + +The `(dataPreLoad)` event fires with an `IForOfState` containing: +- `startIndex` — the first visible row index +- `chunkSize` — number of rows the grid needs + +## Multi-Grid Coordination + +### Master-Detail Filtering + +When using a master grid to drive a detail grid: + +```typescript +export class MasterDetailComponent { + masterGrid = viewChild.required('masterGrid'); + orders = signal([]); + selectedCustomer = signal(null); + customerOrders = signal([]); + + onRowSelectionChanging(event: IRowSelectionEventArgs) { + const selectedId = event.newSelection[0]; + const customer = this.customers().find(c => c.id === selectedId); + this.selectedCustomer.set(customer ?? null); + + if (customer) { + this.dataService.getOrdersByCustomer(customer.id).subscribe(orders => { + this.customerOrders.set(orders); + }); + } + } +} +``` + +```html + + + + + + + + +``` + +## Key Rules + +1. **Remote data requires `[totalItemCount]`** — without it, the virtual scrollbar won't size correctly +2. **Remote data requires noop strategies** — apply `NoopSortingStrategy` and `NoopFilteringStrategy` to disable client-side operations when the server handles them +3. **Track sort/filter state for remote operations** — store current expressions and include them in every server request +4. **Debounce rapid virtual scroll** — use `debounceTime` on `(dataPreLoad)` to avoid flooding the server + +Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). + +## See Also + +- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns +- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries +- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations +- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection +- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.agents/skills/igniteui-angular-grids/references/sizing.md b/.agents/skills/igniteui-angular-grids/references/sizing.md new file mode 100644 index 0000000..f693de6 --- /dev/null +++ b/.agents/skills/igniteui-angular-grids/references/sizing.md @@ -0,0 +1,215 @@ +# Grid Sizing — Width, Height, Column Sizing & Spacing + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For grid setup, column config, sorting, filtering, selection — see [`structure.md`](./structure.md). +> For virtualization and performance — see [`features.md`](./features.md). + +## Contents + +- [Overview](#overview) +- [Grid Width](#grid-width) +- [Grid Height](#grid-height) +- [Column Sizing](#column-sizing) +- [Grid Cell Spacing Control](#grid-cell-spacing-control) +- [Key Rules](#key-rules) + +## Overview + +The grid uses **border-box sizing** — border and padding are included in the width/height calculations. Do **not** override `box-sizing` on the grid element; doing so will break size calculations. + +The grid supports both component inputs (`width`/`height`) and regular CSS/layout sizing from the host or wrapping container (including flex/grid layouts). Use the inputs when you need explicit fixed or percentage grid sizing. + +## Grid Width + +> **Docs:** [Grid Sizing — Width](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#width) + +**Default:** `100%` — the grid fills available width of the parent/window. + +### `null` Width + +```html + +``` + +- All columns are rendered in the DOM — **horizontal column virtualization is disabled**. +- **Warning:** rendering many columns without virtualization can significantly impact performance. + +### Pixel Width + +```html + +``` + +- Grid is fixed at the specified size and does not react to browser/DOM resizing. +- A horizontal scrollbar appears inside the grid when the combined column widths exceed the grid `width`. +- If a parent element is narrower than the grid and has `overflow: auto | scroll`, the parent scrolls — the grid itself remains at its specified width. + +### Percentage Width + +```html + +``` + +- Grid sizes relative to its parent element (or the browser window if there is no parent with explicit width). +- Resizes responsively when the browser or parent is resized. +- Setting `width` above `100%` (e.g. `150%`) makes the grid wider than the parent; the parent renders a scrollbar only if it has `overflow: auto | scroll`. + +## Grid Height + +> **Docs:** [Grid Sizing — Height](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#height) + +**Default:** `100%` — see the Percentage Height section for how this behaves depending on the DOM structure. + +### `null` Height + +```html + +``` + +- All rows are rendered — **row virtualization is disabled**. +- Grid height expands to show every row with no vertical scrollbar inside the grid. +- If rows overflow the viewport, the browser renders a native scrollbar. +- A parent element with `overflow: auto | scroll` will scroll while the grid itself remains unshrunk. +- **Warning:** large data sets with `null` height can significantly impact browser performance due to no virtualization. + +### Pixel Height + +```html + +``` + +- Grid is fixed at the specified height. +- A vertical scrollbar appears when rows exceed the visible area. +- If the grid is taller than a parent with `overflow: auto | scroll`, the parent scrolls. + +### Percentage Height + +```html + +``` + +- Grid sizes relative to the **parent element's height**. +- **Parent has explicit height** (px or %): grid sizes to that percentage of the parent's height. +- **Parent has NO explicit height**: the browser cannot resolve a percentage, so the grid falls back to rendering a maximum of **10 rows** with a vertical scrollbar if there are more rows, or fits all rows if there are fewer. +- To fill the entire browser window: set both `body` and the parent container `height: 100%`, then use `height="100%"` on the grid. + +```css +/* Full-window grid */ +html, body, .grid-container { + height: 100%; +} +``` + +```html +
+ +
+``` + +## Column Sizing + +> **Docs:** [Grid Sizing — Column Sizing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#column-sizing) + +### Default (no `width` set — auto-sized) + +- Auto-sized columns share the available grid width equally. +- Minimum column width is **`136px`**; if the equal share is less than `136px`, all auto-sized columns default to `136px` and the grid renders a horizontal scrollbar. +- Feature columns (row selector checkbox, etc.) consume space that reduces what is available for auto-sized columns. + +```html + + + +``` + +### Pixel Width + +```html + +``` + +- Column is fixed at the specified width regardless of grid size. +- If the combined column widths are less than the grid width, empty space appears on the right — this is expected. +- If the combined column widths exceed the grid width, a horizontal scrollbar is rendered. + +### `auto` Width + +```html + +``` + +- Column sizes to fit the longest visible cell value. +- May leave empty space if most values are short but one is very long. + +### Percentage Width + +```html + +``` + +- Column width is calculated as a percentage of the grid width. +- Responsive — resizes when the grid resizes. +- Combined percentages less than `100%` leave an empty area; greater than `100%` triggers a horizontal scrollbar. +- If the grid `width` is `null`, percentage-width columns fall back to `136px` each. + +## Grid Cell Spacing Control + +> **Docs:** [Grid Sizing — Cell Spacing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#grid-cell-spacing-control) + +The grid automatically adapts internal cell spacing based on the `size` (display density) setting. Fine-grained control is available through CSS custom properties. + +### Global Spacing (all grids in the app) + +```css +igx-grid { + --ig-spacing: 0.8; /* multiplier — reduces all grid spacing by 20% */ +} +``` + +### Instance-Specific Spacing + +```css +.my-compact-grid { + --ig-spacing: 0.6; +} +``` + +### Directional Spacing (horizontal vs vertical independently) + +```css +.my-grid { + --ig-spacing-inline: 0.5; /* horizontal padding */ + --ig-spacing-block: 1.0; /* vertical padding */ +} +``` + +### Density-Level Spacing + +```css +.my-grid { + --ig-spacing-small: 0.5; /* compact density */ + --ig-spacing-medium: 1.0; /* medium density */ + --ig-spacing-large: 1.3; /* comfortable density */ +} +``` + +### Header vs Body Cell Spacing + +```css +.my-grid igx-grid-header { + --ig-spacing: 0.7; +} + +.my-grid igx-grid-cell { + --ig-spacing: 0.9; +} +``` + +## Key Rules + +- Grid sizing can come from CSS/layout context (host/container sizing) or from `[width]`/`[height]` inputs. +- **Never** override `box-sizing` on the grid — it uses border-box and relies on this. +- Use `null` for height only when the data set is small; row virtualization is disabled and large data will hurt performance. +- When using percentage height, the parent **must** have an explicit height for the percentage to resolve correctly. Without it, the grid falls back to 10 visible rows. +- A mix of fixed-width and auto-sized columns is valid — auto-sized columns fill the remaining space after fixed-width columns are laid out. +- **Omit `width` on generated columns.** No `width` = columns equally share available grid width. Pixel widths leave empty space when their sum is less than the grid width. Only set `width` when the user explicitly asks for it. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. diff --git a/.agents/skills/igniteui-angular-grids/references/state.md b/.agents/skills/igniteui-angular-grids/references/state.md new file mode 100644 index 0000000..0b68aff --- /dev/null +++ b/.agents/skills/igniteui-angular-grids/references/state.md @@ -0,0 +1,303 @@ +# Grid State Persistence & Grid-Type-Specific Operations + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For grid import patterns and `viewChild` access — see [`data-operations.md`](./data-operations.md). +> For Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite setup — see [`types.md`](./types.md). +> For paging and remote data — see [`paging-remote.md`](./paging-remote.md). + +## Contents + +- [State Persistence](#state-persistence) +- [Tree Grid Data Operations](#tree-grid-data-operations) +- [Hierarchical Grid Data Operations](#hierarchical-grid-data-operations) +- [Pivot Grid Data Operations](#pivot-grid-data-operations) +- [Grid Lite Data Operations](#grid-lite-data-operations) +- [Key Rules](#key-rules) + +## State Persistence + +### Saving and Restoring Grid State + +Use `IgxGridStateDirective` to persist sorting, filtering, grouping, paging, selection, and column state: + +```html + + + +``` + +```typescript +import { IgxGridStateDirective } from 'igniteui-angular/grids/core'; + +export class StatefulGridComponent { + gridState = viewChild.required(IgxGridStateDirective); + + saveState() { + const state = this.gridState().getState(); + localStorage.setItem('gridState', state); + } + + restoreState() { + const state = localStorage.getItem('gridState'); + if (state) { + this.gridState().setState(state); + } + } +} +``` + +### Selective State Features + +Control which features are persisted: + +```html + + +``` + +```typescript +stateOptions = { + sorting: true, + filtering: true, + groupBy: true, + paging: true, + columns: true, + cellSelection: false, // skip selection state + rowSelection: false, + columnSelection: false, + advancedFiltering: true, + rowPinning: true, + expansion: true +}; +``` + +### Restoring Custom Strategies + +`IgxGridState` does **not** persist functions — this includes sorting strategies, filtering strategies, column formatters, summaries, `cellClasses`, and `cellStyles`. Use the `stateParsed` event to reapply these after restoring state: + +```typescript +restoreState() { + const stateJson = localStorage.getItem('gridState'); + if (!stateJson) return; + + // Subscribe to stateParsed to reapply custom strategies before state is applied + this.gridState().stateParsed.pipe(take(1)).subscribe(parsedState => { + parsedState.sorting?.forEach(expr => expr.strategy = NoopSortingStrategy.instance()); + }); + + this.gridState().setState(stateJson); +} +``` + +### Restoring Column Templates + +Column templates are also not serialized. Use the `columnInit` event to reassign them: + +```typescript +activeTemplate = viewChild.required>('activeTemplate'); + +onColumnInit(column: IgxColumnComponent) { + if (column.field === 'IsActive') { + column.bodyTemplate = this.activeTemplate(); + } +} +``` + +```html + + + + + +``` + +## Tree Grid Data Operations + +### Recursive Filtering Behavior + +Tree Grid filtering is **inclusive** — when a child matches, all its ancestors are kept visible (marked as `isFilteredOutParent`) and auto-expanded. This is the default `TreeGridFilteringStrategy`. + +```html + + + + +``` + +When you filter for `title = 'Developer'`, all ancestor rows are shown even though they don't match, and they're auto-expanded so you can see the matching children in context. + +### Per-Level Sorting + +Tree Grid sorting is applied **within each parent level** — children are sorted among siblings, not globally flattened: + +```typescript +// This sorts employees within their respective manager, not globally +this.treeGridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); +``` + +### Tree Grid Batch Editing + +Tree Grid uses `HierarchicalTransactionService` — each transaction carries a `path` array tracing the parent hierarchy, enabling proper undo/redo of nested changes: + +```html + + + +``` + +```typescript +// Add a row as child of a specific parent +this.treeGridRef().addRow({ id: 100, name: 'New Employee', managerId: 2 }, 2); + +// Cascade delete — deleting a parent removes all descendants (default behavior) +this.treeGridRef().deleteRow(2); // deletes row 2 and all its children +``` + +## Hierarchical Grid Data Operations + +### Independent Grid Levels + +Each level of a hierarchical grid has its **own independent** sorting, filtering, and paging state. Configure features on the `` blueprint: + +```html + + + + + + + + + + + + +``` + +### Accessing Child Grid Instances + +To perform programmatic operations on child grids, use the `(gridCreated)` event: + +```typescript +onChildGridCreated(event: IGridCreatedEventArgs) { + const childGrid = event.grid; + // Example: apply a default sort to all child grids + childGrid.sort({ fieldName: 'orderId', dir: SortingDirection.Desc, ignoreCase: false }); +} +``` + +```html + + + +``` + +### Batch Editing Propagation + +Setting `[batchEditing]="true"` on the root hierarchical grid automatically propagates to all child grids: + +```html + + + + + + +``` + +> **NOTE**: Each child grid instance has its **own** `TransactionService`. Commits must be done per grid instance. + +## Pivot Grid Data Operations + +> **IMPORTANT**: The Pivot Grid does NOT use standard sorting, filtering, editing, or paging APIs. All data operations are controlled through `pivotConfiguration`. + +### Dimension-Based Filtering + +```typescript +import { FilteringExpressionsTree, FilteringLogic, IgxStringFilteringOperand } from 'igniteui-angular/core'; + +// Create a filter for a dimension +const regionFilter = new FilteringExpressionsTree(FilteringLogic.Or); +regionFilter.filteringOperands = [ + { + fieldName: 'Region', + condition: IgxStringFilteringOperand.instance().condition('equals'), + searchVal: 'North America' + }, + { + fieldName: 'Region', + condition: IgxStringFilteringOperand.instance().condition('equals'), + searchVal: 'Europe' + } +]; + +// Apply the filter to a dimension and notify the grid +this.pivotConfig.filters[0].filter = regionFilter; +this.pivotGridRef().notifyDimensionChange(true); +``` + +### Dimension-Based Sorting + +```typescript +// Sort a row dimension via the public API +this.pivotGridRef().sortDimension(this.pivotConfig.rows[0], SortingDirection.Desc); +``` + +### Key Pivot Grid Limitations + +- No cell/row editing, batch editing, or row adding +- No paging +- No column pinning, moving, or hiding (columns are auto-generated) +- No row dragging +- No standard filtering (`allowFiltering` is forced to `false`) +- No GroupBy (grouping is inherent via dimensions) +- State persistence serializes the full `pivotConfiguration` + +## Grid Lite Data Operations + +> **Grid Lite sorting, filtering, remote data, events, and limitations are fully documented in [`types.md`](./types.md#grid-lite).** Refer to that file for all Grid Lite data operations — this section intentionally avoids duplicating that content. +> +> Key differences from Flat/Tree/Hierarchical Grid APIs: +> - Uses `IgxGridLiteSortingExpression` / `IgxGridLiteFilteringExpression` (NOT `ISortingExpression` / `FilteringExpressionsTree`) +> - Uses `dataPipelineConfiguration` for remote ops (NOT noop strategies + events) +> - Has no editing, grouping, paging, summaries, selection, state persistence, or export + +## Key Rules + +1. **State persistence** — use `IgxGridStateDirective` to save/restore sort, filter, group, and column configuration; functions (formatters, strategies, summaries) must be reapplied via `stateParsed` event +2. **Tree Grid filtering is recursive** — parents of matching children are always shown and auto-expanded +3. **Hierarchical Grid levels are independent** — sorting/filtering/paging don't cascade; configure on `` +4. **Pivot Grid is read-only** — no editing, paging, or standard filtering/sorting; use `pivotConfiguration` for all data operations +5. **Grid Lite has its own API** — uses `IgxGridLiteSortingExpression`/`IgxGridLiteFilteringExpression` (NOT `ISortingExpression`/`FilteringExpressionsTree`), `dataPipelineConfiguration` for remote ops (NOT noop strategies), and has no editing, grouping, paging, summaries, or selection + +Universal rules (viewChild types, directive bundles, signals) are in the [hub](../SKILL.md#universal-rules-every-grid-type). + +## See Also + +- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns +- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization +- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries +- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection +- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.agents/skills/igniteui-angular-grids/references/structure.md b/.agents/skills/igniteui-angular-grids/references/structure.md new file mode 100644 index 0000000..ba8a504 --- /dev/null +++ b/.agents/skills/igniteui-angular-grids/references/structure.md @@ -0,0 +1,283 @@ +# Grid Structure — Column Configuration, Sorting, Filtering & Selection + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For grid type selection, imports, and feature availability — see the hub. +> For editing, grouping, summaries, toolbar, export — see [`features.md`](./features.md). +> For Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics — see [`types.md`](./types.md). +> For programmatic data operations — see [`data-operations.md`](./data-operations.md). + +## Contents + +- [Quick Start](#quick-start) +- [Column Configuration](#column-configuration) +- [Sorting](#sorting) +- [Filtering](#filtering) +- [Selection](#selection) +- [Key Rules](#key-rules) + +## Quick Start + +### Imports + +> **Important:** Check `package.json` to determine whether the project uses `igniteui-angular` or `@infragistics/igniteui-angular`. Always import from the specific entry point of whichever package is installed. Never import from the root barrel of either package. + +```typescript +// Open-source package — import from specific entry points +import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; + +// Licensed package — same entry-point structure, different prefix +// import { IgxGridComponent, IGX_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/grid'; + +// AVOID — never import from the root barrel (wrong for BOTH variants) +// import { IgxGridComponent } from 'igniteui-angular'; +// import { IgxGridComponent } from '@infragistics/igniteui-angular'; + +import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; + +@Component({ + selector: 'app-users-grid', + imports: [IGX_GRID_DIRECTIVES], + templateUrl: './users-grid.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class UsersGridComponent { + // Signal-based view child — use #grid on the template element + gridRef = viewChild.required('grid'); + + protected users = signal([]); +} +``` + +### Basic Grid + +```html + + + + + + + + + + + +``` + +## Column Configuration + +### Data Types + +Set `dataType` to enable proper formatting, filtering, sorting, and editing: + +| dataType | Behavior | +|---|---| +| `string` | Text input, string filtering | +| `number` | Numeric input, number filtering, number summaries | +| `boolean` | Checkbox editor, boolean filtering | +| `date` | Date picker editor, date filtering | +| `dateTime` | Date+time editor | +| `time` | Time picker editor | +| `currency` | Currency formatting, number filtering | +| `percent` | Percentage formatting | +| `image` | Image rendering (read-only) | + +### Column Templates + +Override default rendering with template directives: + +```html + + + + + {{ cell.value }} + + + + + + verified {{ column.header }} + + + + + + Active + Inactive + + + + + + + + + + + Active: {{ getActiveCount(summaryResults) }} + + +``` + +### Column Groups + +Group columns under a shared header: + +```html + + + + + + + + + +``` + +### Multi-Row Layout (MRL) + +Create complex cell layouts spanning multiple rows/columns: + +```html + + + + + +``` + +### Column Pinning + +```html + +``` + +Or programmatically: `this.gridRef().pinColumn('name')`. + +### Column Moving + +Enable column moving (drag-to-reorder headers) with `[moving]="true"` on the grid. +There is no [movable] input on . + +```html + + + + + +```html + + + +``` + +Programmatic sorting: + +```typescript +this.gridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); +this.gridRef().clearSort(); +``` + +Events: `(sorting)` (cancelable), `(sortingDone)`. + +For advanced programmatic sorting patterns, custom sort strategies, and sorting events — see [`data-operations.md`](./data-operations.md). + +## Filtering + +### Quick Filter (Row Filter) + +```html + + + +``` + +### Excel-Style Filter + +```html + + + +``` + +### Advanced Filtering Dialog + +```html + + + +``` + +### Programmatic Filtering + +```typescript +this.gridRef().filter('name', 'John', IgxStringFilteringOperand.instance().condition('contains'), true); +this.gridRef().clearFilter('name'); +this.gridRef().clearFilter(); // clear all +``` + +Events: `(filtering)` (cancelable), `(filteringDone)`. + +For advanced programmatic filtering, complex AND/OR trees, and remote filtering patterns — see [`data-operations.md`](./data-operations.md). + +## Selection + +### Row Selection + +```html + + + + + + + +``` + +Modes: `'none'`, `'single'`, `'multiple'`, `'multipleCascade'` (tree grids). + +### Cell Selection + +```html + +``` + +### Column Selection + +```html + + + +``` + +Events: `(rowSelectionChanging)`, `(columnSelectionChanging)`, `(selected)` (cell). + +## Key Rules + +Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). + +1. **Pick the right grid type first** — see the [hub](../SKILL.md) for the decision guide +2. **Always set `[primaryKey]`** — required for editing, selection, row operations (Flat, Tree, Hierarchical, Pivot grids; NOT Grid Lite) +3. **Set `[autoGenerate]="false"`** and define columns explicitly for production grids (except Pivot Grid where columns are auto-generated) +4. **Set `dataType` on every column** for correct filtering, sorting, editing, and summaries +5. **Omit `width` on generated `` elements.** Columns without `width` equally share available grid width. Only set `width` when the user explicitly asks for fixed or percentage column sizing. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. + +## See Also + +- [`features.md`](./features.md) — Editing, grouping, summaries, toolbar, export, row drag, action strip, master-detail +- [`types.md`](./types.md) — Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics +- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping, canonical import patterns +- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization +- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries +- [`state.md`](./state.md) — State persistence, grid-type-specific operations +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.agents/skills/igniteui-angular-grids/references/types.md b/.agents/skills/igniteui-angular-grids/references/types.md new file mode 100644 index 0000000..b95276e --- /dev/null +++ b/.agents/skills/igniteui-angular-grids/references/types.md @@ -0,0 +1,486 @@ +# Grid Types — Tree Grid, Hierarchical Grid, Grid Lite & Pivot Grid + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For the grid type selection guide and feature availability — see the hub. +> For shared column config, sorting, filtering, selection — see [`structure.md`](./structure.md). +> For editing, grouping, toolbar, export — see [`features.md`](./features.md). + +## Contents + +- [Tree Grid](#tree-grid) +- [Hierarchical Grid](#hierarchical-grid) +- [Grid Lite](#grid-lite) +- [Pivot Grid](#pivot-grid) +- [Key Rules](#key-rules) + +## Tree Grid + +For data with parent-child relationships **within a single schema** (e.g., org charts, file systems, categories). + +### Two Data Binding Modes + +**Mode 1: Flat data with foreign key** — rows reference their parent via a foreign key: + +```typescript +import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; +import { IgxTreeGridComponent, IGX_TREE_GRID_DIRECTIVES } from 'igniteui-angular/grids/tree-grid'; + +@Component({ + selector: 'app-org-tree', + imports: [IGX_TREE_GRID_DIRECTIVES], + templateUrl: './org-tree.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class OrgTreeComponent { + treeGridRef = viewChild.required('treeGrid'); + employees = signal([ + { id: 1, name: 'CEO', managerId: -1, title: 'CEO' }, + { id: 2, name: 'VP Engineering', managerId: 1, title: 'VP' }, + { id: 3, name: 'Developer', managerId: 2, title: 'Dev' }, + ]); +} +``` + +```html + + + + +``` + +**Mode 2: Nested object data** — each row contains its children in an array property: + +```html + + + + +``` + +### Tree Grid Unique Features + +- **Cascade selection**: `[rowSelection]="'multipleCascade'"` — selecting a parent selects all children; indeterminate state propagates up +- **Cascade delete**: `[cascadeOnDelete]="true"` (default) — deleting a parent removes all descendants +- **Load on demand**: `[loadChildrenOnDemand]="loadChildren"` — lazy-load children when a row is expanded +- **Expansion depth**: `[expansionDepth]="2"` — control initial expansion level (`Infinity` by default) +- **Add child row**: `treeGridRef().addRow(data, parentRowID)` — add a row as a child of a specific parent + +### Tree Grid Data Operation Behavior + +- **Filtering is recursive**: when a child matches, its parent is always shown (even if the parent doesn't match). Matched parents are auto-expanded. +- **Sorting is per-level**: children are sorted within their parent, not globally flattened +- **Batch editing** uses `HierarchicalTransactionService` — transactions carry a `path` array tracing the parent hierarchy for proper undo/redo +- **Summaries** are computed per tree level + +--- + +## Hierarchical Grid + +For master-detail data where **each level has a different schema** (e.g., Companies → Departments → Employees). Each level is defined by a **Row Island** blueprint. + +```typescript +import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; +import { IgxHierarchicalGridComponent, IGX_HIERARCHICAL_GRID_DIRECTIVES } from 'igniteui-angular/grids/hierarchical-grid'; + +@Component({ + selector: 'app-company-grid', + imports: [IGX_HIERARCHICAL_GRID_DIRECTIVES], + templateUrl: './company-grid.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class CompanyGridComponent { + hGridRef = viewChild.required('hGrid'); + companies = signal([]); +} +``` + +```html + + + + + + + + + + + + + + + + +``` + +### How Row Islands Work + +- A `` defines the **blueprint** (columns, features, templates) for all child grids at that level +- The `[key]` property specifies which property of the parent row's data holds the child array +- Row islands can be **nested** — an `igx-row-island` can contain another for deeper levels +- Each expanded row creates a **full grid instance** — be aware of memory usage with very deep/wide hierarchies + +### Accessing Child Grid Instances + +Use the `(gridCreated)` event on the row island: + +```html + + + +``` + +```typescript +onChildGridCreated(event: IGridCreatedEventArgs) { + const childGrid = event.grid; + // Configure the child grid instance, load data, etc. +} +``` + +### Hierarchical Grid Data Operation Behavior + +- **Sorting and filtering do NOT cascade** — each grid level is independent with its own state +- **Configure features on the row island** and all child grids at that level inherit them +- **Batch editing propagates**: setting `[batchEditing]="true"` on the root automatically enables it on all child grids +- **State persistence** recursively saves/restores state for each child grid instance, keyed by row island ID + parent row ID + +--- + +## Grid Lite + +The **lightest grid option** — an open-source (MIT licensed) Web Component with an Angular wrapper. Use it for **read-only data display** with sorting, filtering, column hiding/resizing, and row virtualization. It has **no editing, no selection, no paging, no grouping, no summaries, no export**. + +> **When to recommend Grid Lite vs. Flat Grid**: If the user only needs to display data with basic sorting/filtering and doesn't need editing, batch operations, paging, grouping, summaries, or export, Grid Lite is the lighter, faster choice. If any of those enterprise features are needed, **upgrade strictly to `igx-grid` (`IgxGridComponent`)** from `igniteui-angular/grids/grid` — do NOT recommend other non-grid components as a substitute. + +> **Important — Grid Lite → Grid Upgrade**: When a user is working with `igx-grid-lite` and you identify that their requirements exceed Grid Lite's capabilities (e.g., they need editing, selection, paging, grouping, summaries, export, row operations, or any feature not available in Grid Lite), you MUST recommend upgrading to `igx-grid` (`IgxGridComponent`). Never suggest a different component type — the upgrade path from Grid Lite is always to `igx-grid`. Replace `IgxGridLiteComponent` with `IgxGridComponent`, update imports from `igniteui-angular/grids/lite` to `igniteui-angular/grids/grid`, use `IGX_GRID_DIRECTIVES` instead of individual Grid Lite imports, and remove `CUSTOM_ELEMENTS_SCHEMA` if it was added for direct web-component usage. See [`grid-migration.md`](./grid-migration.md) for the full migration checklist. + +### Installation + +Grid Lite requires a **separate npm package**: + +```bash +npm install igniteui-grid-lite +``` + +### Setup + +```typescript +import { Component, ChangeDetectionStrategy, viewChild } from '@angular/core'; +import { + IgxGridLiteComponent, + IgxGridLiteColumnComponent, + IgxGridLiteCellTemplateDirective, + IgxGridLiteHeaderTemplateDirective +} from 'igniteui-angular/grids/lite'; + +@Component({ + selector: 'app-users-lite', + imports: [ + IgxGridLiteComponent, + IgxGridLiteColumnComponent, + IgxGridLiteCellTemplateDirective, + IgxGridLiteHeaderTemplateDirective + ], + templateUrl: './users-lite.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class UsersLiteComponent { + gridRef = viewChild>('grid'); + data: User[] = []; +} +``` + +### Template + +```html + + + + + + + + + + + {{ value ? 'Yes' : 'No' }} + + + +``` + +### Column Configuration + +Columns use `` with these inputs: + +| Input | Type | Description | +|---|---|---| +| `field` | `string` | Data property key (required) | +| `dataType` | `'string' \| 'number' \| 'boolean' \| 'date'` | Column data type | +| `header` | `string` | Header text | +| `width` | `string` | CSS width — omit by default; columns auto-fill available grid space. Only set when a fixed or percentage width is explicitly needed (e.g. `'20%'`). | +| `hidden` | `boolean` | Hide the column | +| `resizable` | `boolean` | Allow column resizing | +| `sortable` | `boolean` | Enable sorting | +| `filterable` | `boolean` | Enable filtering | +| `sortingCaseSensitive` | `boolean` | Case-sensitive sorting | +| `filteringCaseSensitive` | `boolean` | Case-sensitive filtering | + +### Templates + +Use `igxGridLiteCell` for cell templates and `igxGridLiteHeader` for header templates: + +```html + + + ⭐ Rating + + + {{ value }} + + +``` + +> When a header template is provided, the `header` text property is ignored. + +### Sorting & Filtering API + +```typescript +// Sort programmatically +this.gridRef().sort({ key: 'name', direction: 'ascending' }); +this.gridRef().sort([ + { key: 'name', direction: 'ascending' }, + { key: 'age', direction: 'descending' } +]); +this.gridRef().clearSort('name'); +this.gridRef().clearSort(); // clear all + +// Filter programmatically +this.gridRef().filter({ key: 'age', condition: 'greaterThan', searchTerm: 21 }); +this.gridRef().clearFilter('age'); +this.gridRef().clearFilter(); // clear all +``` + +### Two-Way Binding for Sort/Filter State + +```html + + +``` + +Events: `(sorting)` (cancelable), `(sorted)`, `(filtering)` (cancelable), `(filtered)`. + +### Remote Data Operations + +Use `dataPipelineConfiguration` to intercept sort/filter and delegate to the server: + +```typescript +import { IgxGridLiteDataPipelineConfiguration } from 'igniteui-angular/grids/lite'; + +dataPipeline: IgxGridLiteDataPipelineConfiguration = { + sort: async (params) => { + // params.grid — the grid instance + // params.data — current data + // params.type — 'sort' + const sorted = await this.dataService.sortRemote(params.grid.sortingExpressions); + return sorted; + }, + filter: async (params) => { + const filtered = await this.dataService.filterRemote(params.grid.filteringExpressions); + return filtered; + } +}; +``` + +```html + + +``` + +### Grid Lite Events + +| Event | Cancelable | Payload | +|---|---|---| +| `(sorting)` | Yes (`event.preventDefault()`) | Sorting expression about to be applied | +| `(sorted)` | No | Sorting completed | +| `(filtering)` | Yes (`event.preventDefault()`) | Filter expression about to be applied | +| `(filtered)` | No | Filtering completed | + +### Grid Lite Limitations + +These features are **NOT available** in Grid Lite: +- Editing (cell, row, batch) — no `[editable]`, no `beginEdit()`, no transactions +- Grouping — no `groupBy()`, no `IgxGroupByRow` +- Paging — no `IgxPaginatorComponent` +- Summaries — no `IgxSummaryOperand` +- Selection — no `rowSelection`, `cellSelection`, or `columnSelection` +- State persistence — no `IgxGridStateDirective` +- Export — no `IgxExcelExporterService` or `IgxCsvExporterService` +- Advanced filtering — no `advancedFilteringExpressionsTree` + +### Grid Lite Key Differences from Flat Grid + +- **Separate package**: `npm install igniteui-grid-lite` +- **`CUSTOM_ELEMENTS_SCHEMA` is not required** — the `IgxGridLiteComponent` Angular wrapper declares it internally; add it to your component's `schemas` only when using the underlying web component tag directly +- **No directives bundle** — import `IgxGridLiteComponent`, `IgxGridLiteColumnComponent`, and template directives individually +- **No `[primaryKey]`** — not needed (no editing, selection, or row operations) +- **No editing** of any kind (cell, row, batch) +- **No selection** (row, cell, column) +- **No paging, grouping, summaries, pinning, moving, export** +- **Column config differs**: uses `field` (not `field` on ``), `sortable`/`filterable` are boolean attributes +- **Remote data**: uses `dataPipelineConfiguration` (async callback) instead of noop strategies + events + +--- + +## Pivot Grid + +For **pivot table analytics** where users reshape data by dragging dimensions between rows, columns, filters, and values. + +> **IMPORTANT**: The Pivot Grid is fundamentally different from the other three grids. Standard grid features like cell editing, row editing, batch editing, paging, column pinning, column moving, row dragging, and standard filtering/sorting are **disabled**. All data operations are driven by the `pivotConfiguration`. + +```typescript +import { Component } from "@angular/core"; +import { DATA } from '../../data/pivot-data'; + +import { IPivotConfiguration, IgxPivotNumericAggregate } from 'igniteui-angular/grids/core'; +import { IgxPivotGridComponent } from 'igniteui-angular/grids/pivot-grid'; + +@Component({ + selector: 'app-pivot-grid-basic-sample', + styleUrls: ['./pivot-grid-basic-sample.component.scss'], + templateUrl: './pivot-grid-basic-sample.component.html', + imports: [IgxPivotGridComponent] +}) +export class PivotGridBasicSampleComponent { + public data = DATA; + public pivotConfigHierarchy: IPivotConfiguration = { + columns: [ + { + + memberName: 'Product', + memberFunction: (data) => data.Product.Name, + enabled: true + } + + ], + rows: [ + { + memberName: 'Seller', + memberFunction: (data) => data.Seller.Name, + enabled: true + } + ], + values: [ + { + member: 'NumberOfUnits', + aggregate: { + aggregator: IgxPivotNumericAggregate.sum, + key: 'sum', + label: 'Sum' + }, + enabled: true + + } + ], + filters: null + }; +} +``` + +```html + + +``` + +```typescript +// Data shape — nested objects are flattened via memberFunction: +export const DATA = [ + { + Product: { Name: 'Clothing', UnitPrice: '12.81' }, + Seller: { Name: 'Stanley Brooker', City: 'Seattle' }, + Date: '2007-01-01T00:00:00', + Value: '94.27', + NumberOfUnits: '282' + }, + // ... +]; +``` + +### Pivot Data Selector + +Provide a drag-and-drop UI for users to reshape the pivot interactively: + +```typescript +// Component class — reference the pivot grid instance for the selector +pivotGridRef = viewChild.required('pivotGrid'); +``` + +```html + + +``` + +### Pivot Grid Data Operations + +- **Filtering**: Per-dimension only — set the `filter` property on an `IPivotDimension`, NOT `[allowFiltering]` +- **Sorting**: Per-dimension only — set `sortable: true` and `sortDirection` on an `IPivotDimension` +- **Aggregation**: Configured via `IPivotValue.aggregate` (e.g., `IgxPivotNumericAggregate.sum`, `.average`, `.min`, `.max`, `.count`) +- **Columns are auto-generated** from the pivot configuration — do not define `` manually +- **State persistence**: Serializes the entire `pivotConfiguration` (dimensions, values, filters) + +--- + +## Key Rules + +1. **Tree Grid**: use `[primaryKey]` + `[foreignKey]` for flat data or `[childDataKey]` for nested objects; filtering is recursive (parents of matching children are always shown) +2. **Hierarchical Grid**: sorting/filtering/paging are independent per level; configure features on the `` blueprint +3. **Pivot Grid is read-only** — editing, paging, pinning, column moving, row dragging are all disabled; use `pivotConfiguration` for all data operations +4. **Grid Lite requires the `igniteui-grid-lite` npm package** — it has no editing, selection, paging, or export; `CUSTOM_ELEMENTS_SCHEMA` is not needed when using the `IgxGridLiteComponent` wrapper +5. **Omit `width` on generated `` elements.** Columns without `width` equally share available grid width. Only set `width` when the user explicitly asks for it. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. + +## See Also + +- [`structure.md`](./structure.md) — Grid setup, column config, sorting UI, filtering UI, selection +- [`features.md`](./features.md) — Grouping, summaries, toolbar, export, row drag, action strip +- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping, canonical import patterns +- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization +- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries +- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.agents/skills/igniteui-angular-theming/SKILL.md b/.agents/skills/igniteui-angular-theming/SKILL.md new file mode 100644 index 0000000..43d40ee --- /dev/null +++ b/.agents/skills/igniteui-angular-theming/SKILL.md @@ -0,0 +1,383 @@ +--- +name: igniteui-angular-theming +description: "Generates and customizes Ignite UI for Angular themes including color palettes, typography, elevations, and component-level styles using the Sass theming system and the igniteui-theming MCP server. Use when users ask to theme, restyle, or style Ignite UI components, change colors or the color palette, switch between light and dark themes, create or apply a global theme, customize typography or elevation shadows, adjust spacing, sizing, or roundness, or configure per-component design tokens. Do NOT use for component behavior, APIs, or data binding — use igniteui-angular-components or igniteui-angular-grids instead." +user-invocable: true +--- + +# Ignite UI for Angular — Theming Skill + +## Description + +This skill teaches AI agents how to theme Ignite UI for Angular applications using the Sass-based theming system and the **Ignite UI Theming MCP server**. It covers global themes, palettes, typography, elevations, component-level theming, layout controls (spacing, sizing, roundness), and how to use the MCP tools for code generation. + +## Prerequisites + +- An Angular project with `igniteui-angular` installed, **or** `@infragistics/igniteui-angular` for licensed users +- Sass support enabled in the project (default for Angular CLI projects) + +## Ignite UI Theming MCP Server (recommended, not required) + +The `igniteui-theming` MCP server generates production-ready theme code (`create_theme`, `create_palette`, `create_component_theme`, `get_component_design_tokens`, `get_color`, and more). When its tools are available, prefer them over writing theme Sass from memory — start by calling `detect_platform`. + +If the tools are not available, do not block the task — use the manual Sass workflow in this file. Suggest that the user run `npx -y igniteui-cli ai-config` from the project root (it configures both the `igniteui-cli` and `igniteui-theming` MCP servers) and reload the editor. MCP servers cannot be started mid-session; the configuration takes effect on the next session. Editor-specific details are in [`references/mcp-setup.md`](./references/mcp-setup.md). + +## Theming Architecture + +> **Docs:** [Theming Overview](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/index) · [Palette](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/palettes) · [Typography](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/typography) · [Elevations](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/elevations) + +The Ignite UI theming system is built on four pillars: + +| Concept | Purpose | +| -------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| **Palette** | Color system with primary, secondary, surface, gray, info, success, warn, error families, each with shades 50–900 + accents A100–A700 | +| **Typography** | Font family, type scale (h1–h6, subtitle, body, button, caption, overline) | +| **Elevations** | Box-shadow levels 0–24 for visual depth | +| **Schema** | Per-component recipes mapping palette colors to component tokens | + +### Design Systems + +Four built-in design systems are available: + +- **Material** (default) — Material Design 3 +- **Bootstrap** — Bootstrap-inspired +- **Fluent** — Microsoft Fluent Design +- **Indigo** — Infragistics Indigo Design + +Each has light and dark variants (e.g., `$light-material-schema`, `$dark-fluent-schema`). + +## Pre-built Themes + +The quickest way to theme an app is to include a pre-built CSS file in `angular.json`: + +```json +"styles": ["node_modules/igniteui-angular/styles/igniteui-angular.css"] +``` + +> **Licensed package users:** replace `igniteui-angular` with `@infragistics/igniteui-angular` in the path: +> ```json +> "styles": ["node_modules/@infragistics/igniteui-angular/styles/igniteui-angular.css"] +> ``` + +Available pre-built CSS files: + +| File | Theme | +| ------------------------------ | --------------- | +| `igniteui-angular.css` | Material Light | +| `igniteui-angular-dark.css` | Material Dark | +| `igniteui-fluent-light.css` | Fluent Light | +| `igniteui-fluent-dark.css` | Fluent Dark | +| `igniteui-bootstrap-light.css` | Bootstrap Light | +| `igniteui-bootstrap-dark.css` | Bootstrap Dark | +| `igniteui-indigo-light.css` | Indigo Light | +| `igniteui-indigo-dark.css` | Indigo Dark | + +All files are located under `node_modules/igniteui-angular/styles/` (or `node_modules/@infragistics/igniteui-angular/styles/` for the licensed package). + +## Custom Sass Theme (Manual) + +> **Important — Sass Theming Docs**: If the user explicitly asks to build a Sass-based theme or configure Sass, refer to the dedicated Sass documentation: +> +> - [Sass Theming Overview](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/index) +> - [Sass Configuration](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/configuration) +> - [Sass Palettes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/palettes) +> - [Sass Component Themes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/component-themes) + +Create a `styles.scss` file and include it in `angular.json`: + +```scss +// Open-source package +@use 'igniteui-angular/theming' as *; +// Licensed package — same Sass API, different import path +// @use '@infragistics/igniteui-angular/theming' as *; +$my-palette: palette( + $primary: #1976d2, + $secondary: #ff9800, + $surface: #fafafa, +); + +// 2. Typography (optional) +@include typography($font-family: $material-typeface, $type-scale: $material-type-scale); + +// 3. Core reset & base styles +@include core(); + +// 4. Apply theme +@include theme($palette: $my-palette, $schema: $light-material-schema); +``` + +For dark themes, use a dark surface color and a dark schema: + +```scss +$dark-palette: palette( + $primary: #90caf9, + $secondary: #ffb74d, + $surface: #121212, +); + +@include theme($palette: $dark-palette, $schema: $dark-material-schema); +``` + +## Component-Level Theming + +> **Docs:** [Component Themes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/component-themes) + +Override individual component appearance using component theme functions and the `tokens` mixin. + +All color values passed to component themes must be palette tokens, not raw hex/RGB/HSL — see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation) below. + +```scss +@use 'igniteui-angular/theming' as *; + +$custom-avatar: avatar-theme( + $schema: $light-material-schema, + $background: var(--ig-primary-500), + $color: var(--ig-primary-500-contrast), +); + +igx-avatar { + @include tokens($custom-avatar); +} +``` + +### Discovering Available Tokens + +Each component has its own set of design tokens (themeable CSS custom properties). Before theming a component, you must know which tokens exist. Use the **MCP tool** `get_component_design_tokens` to discover them. + +### Compound Components + +Some components (e.g., `combo`, `grid`, `date-picker`, `select`) are **compound** — they contain internal child components, each requiring their own theme. For example, `date-picker` uses `calendar`, `flat-button`, and `input-group` internally. + +Workflow for compound components: +1. Call `get_component_design_tokens` for the parent (e.g., `date-picker`) +2. The response lists related themes and scope selectors +3. Call `create_component_theme` for each child, using the parent's selector as the wrapper + +## Layout Controls + +### Sizing + +> **Docs:** [Display Density / Sizing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/display-density) + +Controls the size of components via `--ig-size` (values: 1 = small, 2 = medium, 3 = large): + +```css +/* Global */ +:root { + --ig-size: 2; +} + +/* Component-scoped */ +igx-grid { + --ig-size: 1; +} +``` + +### Spacing + +> **Docs:** [Spacing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/spacing) + +Controls internal padding via `--ig-spacing` (1 = default, 0.5 = compact, 2 = spacious): + +```css +:root { + --ig-spacing: 1; +} +.compact-section { + --ig-spacing: 0.75; +} +``` + +### Roundness + +Controls border-radius via `--ig-radius-factor` (0 = square, 1 = maximum radius): + +```css +:root { + --ig-radius-factor: 1; +} +igx-avatar { + --ig-radius-factor: 0.5; +} +``` + +## Using the Theming MCP Server + +The Ignite UI Theming MCP server provides tools for AI-assisted theme code generation. + +> **File safety**: When applying generated theme code to an existing style file, make targeted edits that preserve the user's existing custom styles — never wholesale-replace the file contents. If the environment does not gate file writes behind user approval, present the change as a diff for review before writing. + +Always follow this workflow: + +### Step 1 — Detect Platform + +``` +Tool: detect_platform +``` +This auto-detects `angular` from `package.json` and sets the correct import paths. + +### Step 2 — Generate a Full Theme + +``` +Tool: create_theme +Params: { + platform: "angular", + designSystem: "material", + primaryColor: "#1976D2", + secondaryColor: "#FF9800", + surfaceColor: "#FAFAFA", + variant: "light", + fontFamily: "'Roboto', sans-serif", + includeTypography: true, + includeElevations: true +} +``` + +Generates a complete Sass file with palette, typography, elevations, and the `theme()` mixin call. + +### Step 3 — Customize Individual Components + +``` +Tool: get_component_design_tokens +Params: { component: "grid" } +``` + +Then use **palette token references** (not hardcoded hex values) for every color: + +``` +Tool: create_component_theme +Params: { + platform: "angular", + designSystem: "material", + variant: "light", + component: "grid", + tokens: { + "header-background": "var(--ig-primary-50)", + "header-text-color": "var(--ig-primary-800)" + } +} +``` + +### Step 4 — Generate a Palette + +For simple mid-luminance base colors: + +``` +Tool: create_palette +Params: { + platform: "angular", + primary: "#1976D2", + secondary: "#FF9800", + surface: "#FAFAFA", + variant: "light" +} +``` + +For brand-specific exact shade values, use `create_custom_palette` with `mode: "explicit"` for full control over each shade. + +### Step 5 — Adjust Layout + +``` +Tool: set_size → { size: "medium" } +Tool: set_spacing → { spacing: 0.75, component: "grid" } +Tool: set_roundness → { radiusFactor: 0.8 } +``` + +### Step 6 — Reference Palette Colors via `get_color` + +After a palette is generated, use the `get_color` tool to obtain the correct CSS custom property reference for any color you need (see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation)): + +``` +Tool: get_color +Params: { color: "primary", variant: "600" } +→ var(--ig-primary-600) + +Params: { color: "primary", variant: "600", contrast: true } +→ var(--ig-primary-600-contrast) + +Params: { color: "primary", opacity: 0.5 } +→ hsl(from var(--ig-primary-500) h s l / 0.5) +``` + +### Loading Reference Data + +Use `read_resource` with these URIs for preset values and documentation: + +| URI | Content | +| --------------------------------- | ------------------------------ | +| `theming://presets/palettes` | Preset palette colors | +| `theming://presets/typography` | Typography presets | +| `theming://presets/elevations` | Elevation shadow presets | +| `theming://guidance/colors/usage` | Which shades for which purpose | +| `theming://guidance/colors/roles` | Semantic color roles | +| `theming://guidance/colors/rules` | Light/dark theme rules | +| `theming://platforms/angular` | Angular platform specifics | + +## No Hardcoded Colors After Palette Generation + +This is the single most important theming rule. Once a palette exists (via `palette()` in Sass or `create_palette` / `create_theme` via MCP), every color reference must come from the palette tokens, which are available as CSS custom properties on `:root`. This applies to all style code: component theme `tokens` values, custom CSS rules (`color`, `background`, `border-color`, `fill`, `stroke`), Sass variables for derived values, Angular `host` bindings, and inline styles. Hardcoded values break theme switching and drift out of sync when the palette changes. + +### Correct: Palette Tokens + +```scss +// All colors come from the theme — respects palette changes and dark/light switching +.sidebar { + background: var(--ig-surface-500); + color: var(--ig-gray-900); + border-right: 1px solid var(--ig-gray-200); +} + +.accent-badge { + background: var(--ig-secondary-500); + color: var(--ig-secondary-500-contrast); +} + +.hero-section { + // Semi-transparent primary overlay + background: hsl(from var(--ig-primary-500) h s l / 0.12); +} +``` + +### Incorrect: Hardcoded Values + +```scss +// WRONG — these break when the palette changes and ignore dark/light mode +$primary-color: #00838f; // ✗ hardcoded +$secondary-color: #3d5afe; // ✗ hardcoded +$surface-color: #f0f5fa; // ✗ hardcoded + +.sidebar { + background: $surface-color; // ✗ not a palette token + color: #333; // ✗ not a palette token +} +``` + +### When Raw Hex Values Are OK + +Raw hex values are acceptable **only** in these contexts: + +1. **`palette()` call** — the initial seed colors that generate the full palette +2. **`create_palette` / `create_theme` MCP tool inputs** — the base colors passed to the tool +3. **Non-palette decorative values** — e.g., a one-off SVG illustration color that intentionally stays fixed regardless of theme + +Everything else must use `var(--ig--)` tokens. + +## Common Patterns + +> **Light/dark theme switching, scoped themes, and licensed package configuration are in [`references/common-patterns.md`](./references/common-patterns.md).** Read that file for ready-to-use Sass patterns. + +## Key Rules + +1. **Preserve existing styles** — apply theme code as targeted edits to existing style files; never wholesale-replace a file the user has customized +2. **Always call `detect_platform` first** when using MCP tools +3. **Always call `get_component_design_tokens` before `create_component_theme`** to discover valid token names +4. **Palette shades 50 = lightest, 900 = darkest** for all chromatic colors — never invert for dark themes (only gray inverts) +5. **Surface color must match the variant** — light color for `light`, dark color for `dark` +6. **Use `@include core()` once** before `@include theme()` in your global styles +7. **Component themes use `@include tokens($theme)`** inside a selector to emit CSS custom properties +8. **For compound components**, follow the full checklist returned by `get_component_design_tokens` — theme each child component with its scoped selector +9. **No hardcoded colors after palette generation** — see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation); raw hex/RGB/HSL is only acceptable in the initial palette seed values + +## Related Skills + +- [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) — UI components (form controls, layout, data display, feedback/overlays, directives, charts) +- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — Data Grids (Flat Grid, Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid) diff --git a/.agents/skills/igniteui-angular-theming/references/common-patterns.md b/.agents/skills/igniteui-angular-theming/references/common-patterns.md new file mode 100644 index 0000000..9888eff --- /dev/null +++ b/.agents/skills/igniteui-angular-theming/references/common-patterns.md @@ -0,0 +1,45 @@ +# Common Theming Patterns + +> **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.** + +## Contents + +- [Switching Between Light and Dark Themes](#switching-between-light-and-dark-themes) +- [Scoping a Theme to a Container](#scoping-a-theme-to-a-container) +- [Licensed Package Users](#licensed-package-users) + +## Switching Between Light and Dark Themes + +```scss +@use 'igniteui-angular/theming' as *; + +$light-palette: palette($primary: #1976D2, $secondary: #FF9800, $surface: #FAFAFA); +$dark-palette: palette($primary: #90CAF9, $secondary: #FFB74D, $surface: #121212); + +@include core(); +@include typography($font-family: $material-typeface, $type-scale: $material-type-scale); + +// Light is default +@include theme($palette: $light-palette, $schema: $light-material-schema); + +// Dark via class on or +.dark-theme { + @include theme($palette: $dark-palette, $schema: $dark-material-schema); +} +``` + +## Scoping a Theme to a Container + +```scss +.admin-panel { + @include theme($palette: $admin-palette, $schema: $light-indigo-schema); +} +``` + +## Licensed Package Users + +If using the licensed `@infragistics/igniteui-angular` package, set `licensed: true` on MCP tool calls and change the Sass import: + +```scss +@use '@infragistics/igniteui-angular/theming' as *; +``` diff --git a/.agents/skills/igniteui-angular-theming/references/mcp-setup.md b/.agents/skills/igniteui-angular-theming/references/mcp-setup.md new file mode 100644 index 0000000..1e69e24 --- /dev/null +++ b/.agents/skills/igniteui-angular-theming/references/mcp-setup.md @@ -0,0 +1,74 @@ +# Setting Up the Theming MCP Server + +> **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.** + +The Ignite UI Theming MCP server enables AI assistants to generate production-ready theming code. It must be configured in the editor/agent before the theming tools become available, and the editor or agent session must be restarted afterwards — MCP servers cannot be hot-loaded into a running session. + +> Depending on the client, MCP tool names may appear with a server prefix (e.g. `mcp__igniteui-theming__detect_platform` in Claude Code). This skill refers to tools by their bare names. + +## Recommended: One-Command Setup + +From the project root: + +```bash +npx -y igniteui-cli ai-config +``` + +This configures **both** the `igniteui-theming` and `igniteui-cli` MCP servers, copies the Ignite UI Agent Skills into the project, and preserves any existing server entries in the config files. Inline options such as `--agents claude copilot` and `--assistants vscode cursor` select which agents and editors to configure. + +## Manual Configuration (fallback) + +Use these only when `ai-config` is unavailable or your editor is not covered by it. + +### VS Code — `.vscode/mcp.json` + +```json +{ + "servers": { + "igniteui-theming": { + "command": "npx", + "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"] + } + } +} +``` + +`npx -y` works whether `igniteui-theming` is installed locally in `node_modules` or needs to be pulled from the npm registry. + +### Claude Code + +```bash +claude mcp add igniteui-theming -- npx -y igniteui-theming igniteui-theming-mcp +``` + +### Cursor — `.cursor/mcp.json` + +```json +{ + "mcpServers": { + "igniteui-theming": { + "command": "npx", + "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"] + } + } +} +``` + +### Claude Desktop + +Edit the Claude Desktop config file (**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`, **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`) and add the same `mcpServers` entry as shown for Cursor above. + +### WebStorm / JetBrains IDEs + +1. Go to **Settings → Tools → AI Assistant → MCP Servers** +2. Click **+ Add MCP Server** +3. Set Command to `npx` and Arguments to `-y igniteui-theming igniteui-theming-mcp` +4. Click OK and restart the AI Assistant + +## Verifying the Setup + +After restarting the editor/session, ask the AI assistant: + +> "Detect which Ignite UI platform my project uses" + +If the MCP server is running, the `detect_platform` tool will analyze `package.json` and return the detected platform (e.g., `angular`). diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md new file mode 100644 index 0000000..13b3007 --- /dev/null +++ b/.claude/CLAUDE.md @@ -0,0 +1,58 @@ +You are an expert in TypeScript, Angular, and scalable web application development. You write functional, maintainable, performant, and accessible code following Angular and TypeScript best practices. + +## TypeScript Best Practices + +- Use strict type checking +- Prefer type inference when the type is obvious +- Avoid the `any` type; use `unknown` when type is uncertain + +## Angular Best Practices + +- Always use standalone components over NgModules +- Must NOT set `standalone: true` inside Angular decorators. It's the default in Angular v20+. +- Use signals for state management +- Implement lazy loading for feature routes +- Do NOT use the `@HostBinding` and `@HostListener` decorators. Put host bindings inside the `host` object of the `@Component` or `@Directive` decorator instead +- Use `NgOptimizedImage` for all static images. + - `NgOptimizedImage` does not work for inline base64 images. + +## Accessibility Requirements + +- It MUST pass all AXE checks. +- It MUST follow all WCAG AA minimums, including focus management, color contrast, and ARIA attributes. + +### Components + +- Keep components small and focused on a single responsibility +- Use `input()` and `output()` functions instead of decorators +- Use `computed()` for derived state +- Set `changeDetection: ChangeDetectionStrategy.OnPush` in `@Component` decorator +- Prefer inline templates for small components +- Prefer Reactive forms instead of Template-driven ones +- Do NOT use `ngClass`, use `class` bindings instead +- Do NOT use `ngStyle`, use `style` bindings instead +- When using external templates/styles, use paths relative to the component TS file. + +## State Management + +- Use signals for local component state +- Use `computed()` for derived state +- Keep state transformations pure and predictable +- Do NOT use `mutate` on signals, use `update` or `set` instead + +## Templates + +- Keep templates simple and avoid complex logic +- Use native control flow (`@if`, `@for`, `@switch`) instead of `*ngIf`, `*ngFor`, `*ngSwitch` +- Use the async pipe to handle observables +- Do not assume globals like (`new Date()`) are available. + +## Services + +- Design services around a single responsibility +- Use the `providedIn: 'root'` option for singleton services +- Use the `inject()` function instead of constructor injection + +## UI components + +- Use `igniteui-angular`. diff --git a/.claude/skills/igniteui-angular-components/SKILL.md b/.claude/skills/igniteui-angular-components/SKILL.md new file mode 100644 index 0000000..7551cdf --- /dev/null +++ b/.claude/skills/igniteui-angular-components/SKILL.md @@ -0,0 +1,62 @@ +--- +name: igniteui-angular-components +description: "Covers all non-grid Ignite UI for Angular UI components: application scaffolding and setup, form controls (inputs, combos, selects, date/time pickers, calendar, checkbox, radio, switch, slider), layout containers (tabs, stepper, accordion, splitter, navigation drawer), data-display components (list, tree, card, chips, carousel, paginator, progress indicators, chat), feedback overlays (dialog, snackbar, toast, banner), directives (button, icon button, button group, ripple, tooltip, drag-and-drop), Dock Manager, Layout Manager, Tile Manager, and Charts. Use when users ask about any Ignite UI Angular component that is NOT a data grid — such as forms, dropdowns, pickers, dialogs, navigation, lists, trees, cards, charts, or initial project setup. Do NOT use for data grids, tables, or tabular data — use igniteui-angular-grids instead. Do NOT use for theming or styling — use igniteui-angular-theming instead." +user-invocable: true +--- + +# Ignite UI for Angular — UI Components + +## Prerequisites +- An Angular project on the major version matching the installed `igniteui-angular` package (igniteui-angular majors track Angular majors) +- `@angular/cli` installed +- `igniteui-angular` or `@infragistics/igniteui-angular` added to the project via `ng add igniteui-angular` (or the `@infragistics` variant) or `npm install` — see [Package Variants](#package-variants) below. +- A theme applied to the application (see [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md)). +- `provideAnimations()` in `app.config.ts` — **required before using any overlay or animated component** + +## Ignite UI CLI MCP Server (recommended, not required) + +The `igniteui-cli` MCP server provides `list_components`, `get_doc`, `search_docs`, `search_api`, and `get_api_reference`. Its **full component docs cover a subset of components** (the catalog grows over releases — call `list_components` once to see what exists; e.g. Combo, Simple Combo, Chat, Tooltip, and grid toolbar/export docs). Where a `get_doc` doc exists, prefer it over the reference files below. `search_api`/`get_api_reference` cover API members (inputs, outputs, methods) for all components — use them for member-level lookups. For everything else, the reference files below are the primary guidance. + +If the tools are not available, do not block the task — use the reference files. Suggest that the user run `npx -y igniteui-cli ai-config` from the project root (it configures both the `igniteui-cli` and `igniteui-theming` MCP servers and copies the agent skill files) and reload the editor. MCP servers cannot be started mid-session; the configuration takes effect on the next session. Editor-specific details are in [`references/mcp-setup.md`](./references/mcp-setup.md). + +## Required Workflow + +**This file is a routing hub only. It contains no code examples and no API details.** Component APIs change between releases, so never write component selectors, import paths, input/output names, or directive names from memory — read the relevant reference files first. + +1. **Identify every component or feature involved.** Map the user's request to one or more rows in the Task → Reference File table below. A single request often spans multiple categories (e.g., a form inside a Dialog requires both `form-controls.md` and `feedback.md`). +2. **Read every identified reference file in full**, in a single parallel batch of file reads — even if you believe you already know the answer. +3. **Then produce output**, based only on what you read. If something is not covered by the reference files, look it up with `get_doc`/`search_docs` when the MCP tools are available; otherwise state explicitly that the detail is unverified instead of guessing. + +### Task → Reference File + +| Task | Reference file to read | +|---|---| +| App setup, `app.config.ts` providers, `provideAnimations()`, entry-point imports, convenience directive arrays | [`references/setup.md`](./references/setup.md) | +| Input Group, Combo, Simple Combo, Select, Date Picker, Date Range Picker, Time Picker, Calendar, Checkbox, Radio, Switch, Slider, Autocomplete, reactive/template-driven forms | [`references/form-controls.md`](./references/form-controls.md) | +| Tabs, Bottom Navigation, Stepper, Accordion, Expansion Panel, Splitter, Navigation Drawer | [`references/layout.md`](./references/layout.md) | +| List, Tree, Card, Chips, Avatar, Badge, Icon, Carousel, Paginator, Progress Indicators, Chat | [`references/data-display.md`](./references/data-display.md) | +| Dialog, Snackbar, Toast, Banner | [`references/feedback.md`](./references/feedback.md) | +| Button, Icon Button, Button Group, Ripple, Tooltip, Drag and Drop | [`references/directives.md`](./references/directives.md) | +| Layout Manager (`igxLayout`, `igxFlex` directives), Dock Manager (`igc-dockmanager` web component), Tile Manager (`igc-tile-manager` web component) | [`references/layout-manager.md`](./references/layout-manager.md) | +| Charts (Area, Bar, Column, Stock/Financial, Pie), chart configuration, chart features (animation, tooltips, markers, highlighting, zooming), data binding | [`references/charts.md`](./references/charts.md) | + +> **When in doubt, read more rather than fewer reference files.** The cost of an unnecessary file read is negligible; the cost of hallucinated API usage is a broken application. + +--- + +## Package Variants + +| Package | Install | Who uses it | +|---|---|---| +| `igniteui-angular` | `npm install igniteui-angular` | Open-source / community | +| `@infragistics/igniteui-angular` | Requires private `@infragistics` registry | Licensed / enterprise users | + +Both packages share **identical entry-point paths**. Check `package.json` and use that package name as the prefix for every import. Never import from the root barrel of either package. +Both packages can be added to the project using `@angular/cli` with the following commands: `ng add igniteui-angular` or `ng add @infragistics/igniteui-angular`. + +--- + +## Related Skills + +- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — Data Grids (Flat Grid, Tree Grid, Hierarchical Grid, Pivot Grid, Grid Lite) +- [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.claude/skills/igniteui-angular-components/references/charts.md b/.claude/skills/igniteui-angular-components/references/charts.md new file mode 100644 index 0000000..2e9bc6e --- /dev/null +++ b/.claude/skills/igniteui-angular-components/references/charts.md @@ -0,0 +1,250 @@ +# Angular Charts Reference + +## Contents + +- [Overview](#overview) +- [General Chart Configuration](#general-chart-configuration) +- [Chart Types Reference](#chart-types-reference) +- [Standalone component example](#standalone-component-example) +- [Common errors and fixes](#common-errors-and-fixes) +- [Styling & Theming](#styling--theming) + +## Overview + +Ignite UI for Angular Charts provides 65+ chart types for data visualization. Charts are packaged separately in `igniteui-angular-charts` (or `@infragistics/igniteui-angular-charts` for licensed users). +This reference gives high-level guidance on when to use each chart type, their key features, and common API members. The MCP doc catalog currently has no chart docs — use `search_api` for member-level lookups. + +### Chart Component packages +- `igniteui-angular-charts` — Category Chart, Financial Chart, Data Chart, Pie Chart, and Sparkline components (NPM) +- `@infragistics/igniteui-angular-charts` — Licensed version with same API (ProGet) + +### Main Chart Components + +> **IMPORTANT — Not Standalone Components**: Chart components from `igniteui-angular-charts` are **NOT** Angular standalone components (they predate the standalone API). They must always be imported via their **NgModule**. Standalone Angular components (Angular 14+) can still import NgModules directly in their `imports` array — this is fully supported. + +| Component | NgModule to import | Description | +|---|---|---| +| `IgxCategoryChartComponent` | `IgxCategoryChartModule` | Simplified API for column, line, area, spline, StepLine/StepArea, point, waterfall | +| `IgxFinancialChartComponent` | `IgxFinancialChartModule` | Stock/candlestick charts with OHLC data | +| `IgxDataChartComponent` | `IgxDataChartModule` | Advanced: explicit axes, series, >65 chart types | +| `IgxPieChartComponent` | `IgxPieChartModule` | Part-to-whole pie and donut charts | +| `IgxDataPieChartComponent` | `IgxDataPieChartModule` | Simplified API for pie charts | +| `IgxLegendComponent` | `IgxLegendModule` | Shared legend component | +| `IgxSparklineComponent` | `IgxSparklineModule` | Compact inline chart for grid cells or small layouts | + +### When to use each: +- **Category Chart** → Use for simple area/column/line/spline/waterfall; let framework auto-configure +- **Financial Chart** → Use for stock data with time-series OHLC, indicators, volume +- **Data Chart** → Use for advanced scenarios: multiple axes, custom series combinations, stacked/scatter +- **Pie Chart** → Use for part-to-whole (segments sum to 100%) +- **Sparkline** → Use for compact inline visualization in grid cells, dashboards, or small-space layouts + +--- + +## General Chart Configuration + +### Chart Type Selection +- **Category Chart**: `chartType` property — type: `CategoryChartType` (Auto, Line, Area, Column, Spline, ...) +- **Financial Chart**: `chartType` property — type: `FinancialChartType` (Auto, Bar, Candle, ...) +- **Data Chart**: Configure explicit series (IgxAreaSeriesComponent, IgxBarSeriesComponent, IgxColumnSeriesComponent, etc.) +- **Sparkline**: `displayType` property — type: `SparklineDisplayType` (Line, Area, Column, WinLoss) +- **Pie Chart**: No chartType needed; inherent pie structure + +### Required Properties + +**IgxCategoryChartComponent** (simplest API; auto-detects numeric & string columns): +- `dataSource` — Data array (required) +- `chartType` — type: `CategoryChartType` +- Component auto-detects: first string column → X-axis labels, numeric columns → Y-axis data + +**IgxDataChartComponent** (advanced; requires explicit configuration): +- Data is bound on individual series via `itemsSource`, not on the chart itself +- `valueMemberPath` — Set on the series, not the chart +- Requires explicit axis and series components + +**IgxFinancialChartComponent** (stock data): +- `dataSource` — Data array with date + OHLC columns (chart auto-detects columns) +- `chartType` — type: `FinancialChartType` + +**IgxPieChartComponent**: +- `dataSource` — Data array +- `labelMemberPath` — Field with category labels +- `valueMemberPath` — Field with numeric values + +### Responsive & Sizing +- Set height/width on chart container (div, flexbox parent). The chart will render with 0px height if the container doesn't have a defined height. + +--- + +## Chart Types Reference + +### Area Chart (`IgxCategoryChartComponent`, `chartType: 'Area'`) +- **Use**: Trends over time, cumulative part-to-whole +- **Data**: X-axis categories, Y-axis numeric values +- **Variants**: Area, StepArea, Stacked Area, Stacked 100% Area +- **API**: `chartType`, `dataSource` (auto-detects numeric columns) +- **Best Practices**: + - Start Y-axis at 0 for accuracy + - Use transparent colors for overlaid series + - Order time-series left to right +- **Avoid**: More than 7-10 series (readability), when data values are similar (overlap) + +### Bar Chart (`IgxDataChartComponent`, `IgxBarSeriesComponent`) +- **Use**: Compare categories, show rankings, time-series changes +- **Data**: X-axis numeric, Y-axis categories (reversed from Column) +- **Variants**: Grouped Bar, Stacked Bar, Stacked 100% Bar, Polar Bar +- **Best Practices**: + - Start numeric axis at 0 + - Sort categories by value (ascending/descending) + - Right-align Y-axis labels +- **Avoid**: Too much data (axis becomes illegible), Time-series detail (use Line instead) + +### Column Chart (`IgxCategoryChartComponent`, `chartType: 'Column'`) +- **Use**: Compare categories, show distribution, time-series changes +- **Data**: X-axis categories, Y-axis numeric values +- **Variants**: Column, StackedColumn, Stacked100%Column, RangeColumn, WaterfallColumn +- **Best Practices**: + - Start Y-axis at 0 + - Order time-series left to right +- **Avoid**: Many series (>10) side-by-side (readability) +- **Related**: Bar Chart (horizontal equivalent, use `IgxDataChartComponent` + `IgxBarSeriesComponent`), Waterfall (show differences between values) + +### Stock Chart (`IgxFinancialChartComponent`) +- **Use**: Financial/OHLC data analysis, candlestick visualization, technical indicators +- **Data Structure**: + - **Required**: Date/time column, numeric value column(s) + - **For Candlestick**: Open, High, Low, Close (4 numeric columns) + - **With Volume**: Open, High, Low, Close, Volume (5 numeric columns) +- **Display Modes**: + - **Price Pane**: Show candlestick, OHLC bar, line (configurable via `chartType`) + - **Volume Pane**: Show trading volume (column, line, or area chart) + - **Indicator Pane**: Financial indicators (RSI, MACD, Bollinger Bands, etc.) + - **Zoom Pane**: Navigation slider to zoom/pan +- **Indicators**: RSI, MACD, Bollinger Bands, Force Index, Standard Deviation, and more +- **Features**: + - Crosshairs with value snapshots + - Trendlines and overlays + - Time-based filters (users can select 1M, 3M, 6M, YTD, 1Y, ALL) +- **Data Binding**: + - The Financial Chart auto-detects OHLC, Volume, and Date columns from the data source + - Data items should have properties named like `open`, `high`, `low`, `close`, `volume`, `date` (or similar) + - No explicit member path properties are needed on the chart component + +### Pie Chart (`IgxPieChartComponent` or `IgxDataPieChartComponent`) +- **Use**: Part-to-whole visualization (segments sum to 100%) +- **Data**: Category labels, numeric values +- **Variants**: Pie, Donut (ring), Radial Pie +- **Features**: + - Slice explosion (separate a slice from pie) + - Slice selection (single or multiple) + - Legends with custom item templates + - Animation on load + - "Others" category for small segments +- **Best Practices**: + - Use for small data sets (6-8 segments max) + - Arrange largest to smallest (clockwise from 12 o'clock) + - Ensure segments sum to 100% + - Use distinguishable colors +- **Avoid**: Many segments (>8), change over time (use Bar/Line instead), precise comparisons (Bar is better) + +### Sparkline (`IgxSparklineComponent`) +- **Use**: Compact inline data visualization in grid cells, dashboards, or small-space layouts +- **Data**: One-dimensional array with at least one numeric field +- **Variants**: Line, Area, Column, WinLoss +- **Features**: + - Configurable markers (All, Low, High, First, Last, Negative) + - Normal range — horizontal shaded band (`normalRangeMinimum`, `normalRangeMaximum`) + - Trendlines via `trendLineType` + - Unknown value plotting via `unknownValuePlotting` + - Tooltip support via `tooltipTemplate` +- **Best Practices**: + - Set explicit `height` and `width` on the component or its container (renders at 0px otherwise) + - Start Y-axis at 0 for accurate comparisons + - Use Line or Area type for trend visualization; Column for discrete comparisons; WinLoss for binary positive/negative + - When embedding in a grid cell, set compact dimensions (e.g. `height="40px"` `width="220px"`) +- **Avoid**: Detailed data analysis (use Category Chart or Data Chart), displaying many data labels (Sparkline only supports first/last X-axis labels and high/low Y-axis values) + +--- + +### Standalone component example + +```typescript +import { Component } from '@angular/core'; +import { + IgxCategoryChartModule, + CategoryChartType +} from 'igniteui-angular-charts'; + +@Component({ + selector: 'app-sales-chart', + imports: [ + IgxCategoryChartModule // ✅ Import the NgModule, NOT IgxCategoryChartComponent + ], + template: ` + + + ` +}) +export class SalesChartComponent { + data = [ + { month: 'Jan', revenue: 5000 }, + { month: 'Feb', revenue: 6500 }, + { month: 'Mar', revenue: 7200 } + ]; +} +``` + +### Common errors and fixes + +**Error 1: NG2011 — component not standalone** +``` +// ❌ WRONG: importing component directly +import { IgxCategoryChartComponent } from 'igniteui-angular-charts'; +@Component({ imports: [IgxCategoryChartComponent] }) + +// ✅ CORRECT: import the NgModule instead +import { IgxCategoryChartModule } from 'igniteui-angular-charts'; +@Component({ imports: [IgxCategoryChartModule] }) +``` + +**Error 2: NG8002 — can't bind to property (incorrect inputs)** +``` +// ❌ WRONG: using IgxDataChartComponent or generic property names + + [valueMemberPath]="'value'" + [showDefaultTooltip]="true" + [transitionDuration]="400"> + +// ✅ CORRECT: use Category Chart's actual inputs + +``` + +**Key difference**: IgxCategoryChartComponent **auto-detects** numeric columns and requires minimal configuration. For fine-grained control over field mapping and series types, use `IgxDataChartComponent` instead (but it requires explicit series and axis components). + +--- + +## Styling & Theming + +### Color Customization +- **Series colors**: `brushes` (fill), `outlines` (border) +- **Marker colors**: `markerBrushes`, `markerOutlines` +- **Axis styles**: `xAxisMajorStroke`, `yAxisMajorStroke`, `xAxisLabelTextColor`, `yAxisLabelTextColor` +- **Tooltip**: Controlled via `toolTipType` and custom tooltip templates +- **Highlight**: `highlightingFadeOpacity` (opacity for faded non-highlighted series) + +### CSS & Host Binding +- Chart containers inherit CSS flex/grid properties +- Use host element width/height for responsive sizing +- Theme colors via `IgxTheme` palette + diff --git a/.claude/skills/igniteui-angular-components/references/data-display.md b/.claude/skills/igniteui-angular-components/references/data-display.md new file mode 100644 index 0000000..5f0e510 --- /dev/null +++ b/.claude/skills/igniteui-angular-components/references/data-display.md @@ -0,0 +1,273 @@ +# Data Display & Other UI Components + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +## Contents + +- [List](#list) +- [Tree](#tree) +- [Card](#card) +- [Chips](#chips) +- [Avatar & Badge](#avatar--badge) +- [Icon](#icon) +- [Carousel](#carousel) +- [Paginator](#paginator) +- [Progress Indicators](#progress-indicators) +- [Chat (AI Chat Component)](#chat-ai-chat-component) + +## List + +```typescript +import { IGX_LIST_DIRECTIVES } from 'igniteui-angular/list'; +import { IgxAvatarComponent } from 'igniteui-angular/avatar'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + Contacts + @for (contact of contacts; track contact.id) { + + + {{ contact.name }} + {{ contact.phone }} + phone + + } + +``` + +Auxiliary directives for list items: `igxListThumbnail`, `igxListAction`, `igxListLine`, `igxListLineTitle`, `igxListLineSubTitle`. + +## Tree + +```typescript +import { IGX_TREE_DIRECTIVES } from 'igniteui-angular/tree'; +``` + +```html + + @for (node of treeData; track node.id) { + + folder + {{ node.label }} + @for (child of node.children; track child.id) { + + description + {{ child.label }} + + } + + } + +``` + +Selection modes: `'None'`, `'BiState'`, `'Cascading'`. + +## Card + +```typescript +import { IgxCardComponent, IgxCardHeaderComponent, IgxCardContentDirective, IgxCardActionsComponent, IgxCardMediaDirective, IgxCardHeaderTitleDirective, IgxCardHeaderSubtitleDirective, IgxCardThumbnailDirective } from 'igniteui-angular/card'; +import { IgxAvatarComponent } from 'igniteui-angular/avatar'; +import { IgxButtonDirective, IgxIconButtonDirective } from 'igniteui-angular/directives'; +import { IgxRippleDirective } from 'igniteui-angular/directives'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + + + + + + +

{{ article.title }}

+
{{ author.name }}
+
+ +

{{ article.excerpt }}

+
+ + + + +
+``` + +## Chips + +```typescript +import { IgxChipComponent, IgxChipsAreaComponent } from 'igniteui-angular/chips'; +``` + +```html + + @for (tag of tags; track tag) { + + {{ tag }} + + } + +``` + +## Avatar & Badge + +```typescript +import { IgxAvatarComponent } from 'igniteui-angular/avatar'; +import { IgxBadgeComponent } from 'igniteui-angular/badge'; +``` + +```html + +
+ + +
+ + + + + + + + + +``` + +```scss +// Required styles to position the badge as an overlay on the avatar +.avatar-badge-container { + position: relative; + display: inline-flex; + + igx-badge { + position: absolute; + bottom: 0; + right: 0; + transform: translate(25%, 25%); + } +} +``` + +Avatar shapes: `'circle'`, `'rounded'`, `'square'`. Sizes: `'small'`, `'medium'`, `'large'`, or custom CSS. +Badge types: `'primary'`, `'info'`, `'success'`, `'warning'`, `'error'`. + +## Icon + +```typescript +import { IgxIconComponent, IgxIconService } from 'igniteui-angular/icon'; +``` + +```html + +settings +favorite + + + +``` + +Register custom SVG icons in a service or component constructor: + +```typescript +export class AppComponent { + constructor() { + const iconService = inject(IgxIconService); + // From inline SVG string + iconService.addSvgIconFromText('logo', '...', 'my-icons'); + // From URL + iconService.addSvgIcon('arrow', '/assets/icons/arrow.svg', 'my-icons'); + } +} +``` + +## Carousel + +```typescript +import { IgxCarouselComponent, IgxSlideComponent } from 'igniteui-angular/carousel'; +``` + +```html + + @for (slide of slides; track slide.id) { + + +
{{ slide.caption }}
+
+ } +
+``` + +> **Important:** Carousel uses Angular animations — ensure `provideAnimations()` is present in `app.config.ts`. + +## Paginator + +```typescript +import { IgxPaginatorComponent } from 'igniteui-angular/paginator'; +``` + +```html + + +``` + +> **NOTE:** For grid paging, attach `` inside the grid element. See [`../../igniteui-angular-grids/references/paging-remote.md`](../../igniteui-angular-grids/references/paging-remote.md) for grid-specific paging patterns. + +## Progress Indicators + +```typescript +import { IgxLinearProgressBarComponent } from 'igniteui-angular/progressbar'; +import { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar'; +``` + +```html + + + + + + + + + +``` + +Types for linear bar: `'default'`, `'info'`, `'success'`, `'warning'`, `'error'`. + +## Chat (AI Chat Component) + +> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "chat" })` covers messages, attachments, quick replies, typing indicators, templates, and styling. Prefer it over writing chat code from memory. + +```typescript +import { IgxChatComponent, IgxChatMessageContextDirective, type IgxChatOptions } from 'igniteui-angular/chat'; +import { MarkdownPipe } from 'igniteui-angular/chat-extras'; // template usage: message.text | fromMarkdown | async +``` + +Gotchas not obvious from the doc: + +- The markdown pipe class is `MarkdownPipe` (from `igniteui-angular/chat-extras`) but its template name is `fromMarkdown`, and it is async — combine with `AsyncPipe`. +- Custom templates (`messageHeader`, `messageContent`, `suggestionPrefix`, …) are passed as one object via the `[templates]` input — collect the `ng-template` refs with `viewChild` and assemble the object in an `effect()` (or `computed()`). + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner +- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop +- [`../../igniteui-angular-grids/references/paging-remote.md`](../../igniteui-angular-grids/references/paging-remote.md) — Grid-specific paginator usage diff --git a/.claude/skills/igniteui-angular-components/references/directives.md b/.claude/skills/igniteui-angular-components/references/directives.md new file mode 100644 index 0000000..3bfa990 --- /dev/null +++ b/.claude/skills/igniteui-angular-components/references/directives.md @@ -0,0 +1,162 @@ +# Directives + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +## Contents + +- [Button & Icon Button](#button--icon-button) +- [Button Group](#button-group) +- [Ripple Effect](#ripple-effect) +- [Tooltip](#tooltip) +- [Drag and Drop](#drag-and-drop) + +## Button & Icon Button + +```typescript +import { IgxButtonDirective, IgxIconButtonDirective } from 'igniteui-angular/directives'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + + + + + + + + + + + + +``` + +Button variants for `igxButton`: `'flat'`, `'contained'`, `'outlined'`, `'fab'`. +Button variants for `igxIconButton`: `'flat'`, `'outlined'`, `'contained'`. + +## Button Group + +```typescript +// Option A — convenience collection (includes IgxButtonGroupComponent + IgxButtonDirective) +import { IGX_BUTTON_GROUP_DIRECTIVES } from 'igniteui-angular/button-group'; + +// Option B — individual imports +import { IgxButtonGroupComponent } from 'igniteui-angular/button-group'; +import { IgxButtonDirective } from 'igniteui-angular/directives'; + +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + + + + +``` + +- `selectionMode`: `'single'` (default) | `'singleRequired'` (one always stays selected) | `'multi'` +- `alignment`: `'horizontal'` (default) | `'vertical'`; `[disabled]` on the group disables all buttons +- `(selected)`/`(deselected)` emit `IButtonGroupEventArgs` (`{ owner, button, index }`, from `igniteui-angular/button-group`) +- Programmatic: `selectButton(index)`, `deselectButton(index)`, `selectedButtons` on `IgxButtonGroupComponent` +- Further members: `search_api({ framework: "angular", query: "IgxButtonGroupComponent" })` + +## Ripple Effect + +```typescript +import { IgxRippleDirective } from 'igniteui-angular/directives'; +``` + +```html + + +
Interactive div
+``` + +Inputs: `[igxRipple]` (ripple color), `[igxRippleCentered]` (always start from center), `[igxRippleDisabled]`. + +```html + +``` + +## Tooltip + +> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "tooltip" })` covers triggers, overlay behavior, sticky/arrowed tooltips, styling, and accessibility. + +The at-a-glance pairing — `igxTooltipTarget` on the host references the `igxTooltip` element (both from `igniteui-angular/directives`): + +```html + +
Helpful tooltip text
+``` + +## Drag and Drop + +```typescript +import { IgxDragDirective, IgxDropDirective, IDragMoveEventArgs, IDropDroppedEventArgs } from 'igniteui-angular/directives'; +``` + +### Basic drag and drop + +```html + +
+ drag_indicator + {{ item.name }} +
+ + +
+ Drop here +
+``` + +```typescript +onDrop(event: IDropDroppedEventArgs) { + const draggedItem = event.drag.data; + // Move draggedItem to this drop zone + event.cancel = false; // allow the drop +} +``` + +### Ghost element (custom drag preview) + +```html +
Drag me
+ + +
+ content_copy Moving... +
+
+``` + +### Reorderable list + +```html + + @for (item of items; track item.id) { + + drag_handle + {{ item.name }} + + } + +``` + +Key drag events: `(dragStart)`, `(dragMove)`, `(dragEnd)`, `(dragClick)`, `(ghostCreate)`, `(ghostDestroy)`, `(transitioned)`. +Key drop events: `(enter)`, `(leave)`, `(over)`, `(dropped)`. + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner diff --git a/.claude/skills/igniteui-angular-components/references/feedback.md b/.claude/skills/igniteui-angular-components/references/feedback.md new file mode 100644 index 0000000..5fcc509 --- /dev/null +++ b/.claude/skills/igniteui-angular-components/references/feedback.md @@ -0,0 +1,141 @@ +# Feedback & Overlay Components + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +> **Important:** All components in this file rely on Angular animations and the Ignite UI overlay system. Before using any of them, ensure `provideAnimations()` (or `provideAnimationsAsync()`) is present in `app.config.ts`. If it is missing, add it — these components will throw runtime errors or silently fail to animate without it. + +## Contents + +- [Dialog](#dialog) +- [Snackbar](#snackbar) +- [Toast](#toast) +- [Banner](#banner) +- [Key Rules](#key-rules) + +## Dialog + +```typescript +import { IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective } from 'igniteui-angular/dialog'; +import { IgxButtonDirective } from 'igniteui-angular/directives'; +``` + +```html + + Confirm Delete +

Are you sure you want to delete this item? This action cannot be undone.

+
+ + +
+
+ + +``` + +Programmatic control: + +```typescript +dialog = viewChild.required('confirmDialog'); + +open() { this.dialog().open(); } +close() { this.dialog().close(); } +``` + +Events: `(opening)`, `(opened)`, `(closing)`, `(closed)`, `(leftButtonSelect)`, `(rightButtonSelect)`. + +## Snackbar + +```typescript +import { IgxSnackbarComponent } from 'igniteui-angular/snackbar'; +import { IgxButtonDirective } from 'igniteui-angular/directives'; +``` + +```html + + Item saved successfully + +``` + +Trigger in TypeScript: + +```typescript +snackbar = viewChild.required('snackbar'); + +save() { + this.dataService.save(this.item); + this.snackbar().open('Item saved'); // optional: pass message text +} +``` + +## Toast + +```typescript +import { IgxToastComponent } from 'igniteui-angular/toast'; +``` + +```html +Operation complete + + +``` + +Toast vs Snackbar: Toast is non-interactive (no action button), always auto-hides. Snackbar supports an action button and can be persistent. + +## Banner + +```typescript +import { IgxBannerComponent, IgxBannerActionsDirective } from 'igniteui-angular/banner'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +import { IgxButtonDirective } from 'igniteui-angular/directives'; +``` + +```html + + wifi_off + You are offline. Some features may not be available. + + + + + +``` + +Trigger in TypeScript: + +```typescript +banner = viewChild.required('banner'); + +showOfflineWarning() { this.banner().open(); } +hideWarning() { this.banner().close(); } +``` + +Events: `(opening)`, `(opened)`, `(closing)`, `(closed)`. + +Banner always renders inline (not overlaid) — it pushes page content down when open. + +## Key Rules + +- **`provideAnimations()` is required** — add it to `app.config.ts` before using Dialog, Snackbar, Toast, or Banner +- **Dialog** uses the Ignite UI overlay system — set `[isModal]="true"` for blocking modals +- **Snackbar** vs **Toast**: Snackbar supports action buttons and can be persistent; Toast is always auto-hiding and non-interactive +- **Banner** renders **inline** (pushes content), not as an overlay — use Dialog for blocking prompts + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components +- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.claude/skills/igniteui-angular-components/references/form-controls.md b/.claude/skills/igniteui-angular-components/references/form-controls.md new file mode 100644 index 0000000..e873b4e --- /dev/null +++ b/.claude/skills/igniteui-angular-components/references/form-controls.md @@ -0,0 +1,309 @@ +# Form Controls & Reactive Forms Integration + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +## Contents + +- [Input Group](#input-group) +- [Combo (Multi-Select Dropdown)](#combo-multi-select-dropdown) +- [Simple Combo (Single-Select)](#simple-combo-single-select) +- [Select](#select) +- [Date Picker](#date-picker) +- [Date Range Picker](#date-range-picker) +- [Time Picker](#time-picker) +- [Calendar](#calendar) +- [Checkbox, Radio, Switch](#checkbox-radio-switch) +- [Slider](#slider) +- [Autocomplete](#autocomplete) +- [Reactive Forms Integration](#reactive-forms-integration) +- [Key Rules](#key-rules) + +## Input Group + +```typescript +import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + person + + + clear + Enter your username + +``` + +Types: `line` (default), `border`, `box`, `search`. + +## Combo (Multi-Select Dropdown) + +> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "combo" })` covers data binding, selection APIs, forms support, keyboard behavior, and known issues. Prefer it over this snippet when available. + +```typescript +import { IgxComboComponent } from 'igniteui-angular/combo'; +``` + +```html + +``` + +## Simple Combo (Single-Select) + +> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "simple-combo" })`. + +`IgxSimpleComboComponent` from `igniteui-angular/simple-combo` (its own entry point, not `/combo`). Same API as `igx-combo` but restricted to single selection. + +## Select + +```typescript +import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select'; +``` + +```html + + @for (role of roles; track role.id) { + {{ role.name }} + } + +``` + +## Date Picker + +```typescript +import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; +``` + +```html + + +``` + +Implements `ControlValueAccessor` and `Validator`. Works with both reactive and template-driven forms. + +## Date Range Picker + +```typescript +import { IgxDateRangePickerComponent, IgxDateRangeStartComponent, IgxDateRangeEndComponent } from 'igniteui-angular/date-picker'; +import { IgxDateTimeEditorDirective } from 'igniteui-angular/directives'; +import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +import { IgxPickerToggleComponent, IgxPickerClearComponent } from 'igniteui-angular/core'; +``` + +Two-input configuration rules — place the `input` directly inside `igx-date-range-start`/`igx-date-range-end` (no extra `igx-input-group` wrapper); use `igx-picker-toggle igxPrefix` for the calendar action and `igx-picker-clear igxSuffix` for the clear action on **both** inputs. A plain `igx-prefix`/`igx-suffix` icon is decorative only and does not trigger picker actions. + +```html + + + calendar_today + + + clear + + + calendar_today + + + clear + + +``` + +## Time Picker + +```typescript +import { IgxTimePickerComponent } from 'igniteui-angular/time-picker'; +``` + +```html + + +``` + +## Calendar + +```typescript +import { IgxCalendarComponent } from 'igniteui-angular/calendar'; +``` + +```html + + +``` + +Selection modes: `'single'`, `'multi'`, `'range'`. + +## Checkbox, Radio, Switch + +```typescript +import { IgxCheckboxComponent } from 'igniteui-angular/checkbox'; +import { IgxRadioComponent, IgxRadioGroupDirective } from 'igniteui-angular/radio'; +import { IgxSwitchComponent } from 'igniteui-angular/switch'; +``` + +```html +Remember me + + + Basic + Pro + + +Dark mode +``` + +## Slider + +```typescript +import { IgxSliderComponent, IgxSliderType } from 'igniteui-angular/slider'; + +public sliderType = IgxSliderType; + public priceRange = { + lower: 200, + upper: 800 + }; +``` + +```html + + + + + + +``` + +## Autocomplete + +```typescript +import { IgxAutocompleteDirective, IgxDropDownComponent, IgxDropDownItemComponent } from 'igniteui-angular/drop-down'; +import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; +``` + +```html + + + + + + @for (city of cities | startsWith:selectedCity; track city) { + + {{ city }} + + } + +``` + +The `igxAutocomplete` directive attaches to an input and displays a drop-down of suggestions as the user types. It references an `igx-drop-down` via a template variable. + +Filtering is **not** built in — use a pipe or filter the data in the component to control which items appear. + +## Reactive Forms Integration + +All form controls implement `ControlValueAccessor` and work with both reactive and template-driven forms. + +```typescript +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms'; +import { IgxComboComponent } from 'igniteui-angular/combo'; +import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; +import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; +import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select'; + +@Component({ + selector: 'app-my-form', + imports: [ + ReactiveFormsModule, + IGX_INPUT_GROUP_DIRECTIVES, + IgxComboComponent, + IgxDatePickerComponent, + IgxSelectComponent, + IgxSelectItemComponent + ], + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` +
+ + + + @if (form.controls.name.invalid && form.controls.name.touched) { + Name is required + } + + + + + + + + + @for (r of roles; track r.id) { + {{ r.name }} + } + +
+ ` +}) +export class MyFormComponent { + form = new FormGroup({ + name: new FormControl('', Validators.required), + skills: new FormControl([]), + startDate: new FormControl(null), + role: new FormControl(null) + }); + + skills = [{ id: 1, name: 'Angular' }, { id: 2, name: 'TypeScript' }]; + roles = [{ id: 'admin', name: 'Admin' }, { id: 'user', name: 'User' }]; + + submit() { + if (this.form.valid) { + console.log(this.form.value); + } + } +} +``` + +## Key Rules + +- **Always check `app.config.ts` first** — add `provideAnimations()` before using Combo, Select, Date Picker, or any overlay component +- **Import from specific entry points** — avoid the root `igniteui-angular` barrel +- Date/Time pickers implement both `ControlValueAccessor` and `Validator` — they integrate with reactive forms natively +- How to choose between Combo, Simple Combo, Select, and Auto-complete: + - Use `igx-combo` for multi-select dropdowns with built-in filtering and grouping + - Use `igx-simple-combo` for single-select dropdowns with built-in filtering and grouping + - Use `igx-select` for simple single-select dropdowns without filtering or grouping (or when you want to provide custom filtering UI) + - Use `igxAutocomplete` for input fields with dynamic suggestions based on user input + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner +- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.claude/skills/igniteui-angular-components/references/layout-manager.md b/.claude/skills/igniteui-angular-components/references/layout-manager.md new file mode 100644 index 0000000..8a62972 --- /dev/null +++ b/.claude/skills/igniteui-angular-components/references/layout-manager.md @@ -0,0 +1,322 @@ +# Layout Manager, Dock Manager & Tile Manager + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +## Contents + +- [Layout Manager Directives](#layout-manager-directives) +- [Dock Manager](#dock-manager) +- [Tile Manager](#tile-manager) + +--- + +## Layout Manager Directives + +The Layout Manager is a pair of Angular directives (`igxLayout` / `igxFlex`) that wrap CSS Flexbox. Apply `igxLayout` to any container to control its children's flow; apply `igxFlex` to individual children to control their flex properties. + +```typescript +import { IgxLayoutDirective, IgxFlexDirective } from 'igniteui-angular/directives'; +``` + +```html + +
+
Item 1
+
Item 2
+
Item 3
+
+``` + +### Common Layout Patterns + +#### App Shell (Sidebar + Content) + +```html +
+ + + + + +
+
Header
+
+ +
+
Col 1
+
Col 2
+
Col 3
+
+
+ +
+ +
+``` + +Other patterns (centering, wrapping tile grids) follow directly from the directive inputs below — e.g. `igxLayoutJustify="center" igxLayoutItemAlign="center"` to center, `igxLayoutWrap="wrap"` + fixed `igxFlexBasis` children for tile grids. + +### `igxLayout` Directive Inputs + +| Input | Values | Default | Description | +|---|---|---|---| +| `igxLayoutDir` | `'row'` \| `'column'` | `'row'` | Flex direction | +| `igxLayoutReverse` | `true` \| `false` | `false` | Reverse flow order | +| `igxLayoutWrap` | `'nowrap'` \| `'wrap'` \| `'wrap-reverse'` | `'nowrap'` | Child wrapping | +| `igxLayoutJustify` | `'flex-start'` \| `'center'` \| `'flex-end'` \| `'space-between'` \| `'space-around'` | `'flex-start'` | Main axis alignment | +| `igxLayoutItemAlign` | `'flex-start'` \| `'center'` \| `'flex-end'` \| `'stretch'` \| `'baseline'` | `'stretch'` | Cross axis alignment | + +### `igxFlex` Directive Inputs + +| Input | Type | Default | Description | +|---|---|---|---| +| `igxFlexGrow` | `number` | `1` | How much the element grows to fill space | +| `igxFlexShrink` | `number` | `1` | How much the element shrinks when space is limited | +| `igxFlexBasis` | `string` | `'auto'` | Initial main-axis size (e.g., `'200px'`, `'30%'`) | +| `igxFlexOrder` | `number` | `0` | Visual order among siblings | + +### Key Rules for Layout Manager + +- `igxLayout` affects its **immediate children only** — nest multiple `igxLayout` containers for deeper control +- Combine `igxLayoutDir="column"` on the outer container with `igxFlex` on children to create page shells +- `igxFlexGrow="0"` on headers/footers/sidebars prevents them from stretching; leave it at `1` (default) for the main content area +- This is a thin CSS Flexbox wrapper — the container element gets `display: flex` applied + +--- + +## Dock Manager + +The Dock Manager is a **separate package** (`igniteui-dockmanager`) and is implemented as a **Web Component** (``). It provides IDE-style dockable, resizable, floating, and tabbed pane layouts. It is a **premium** (licensed) component. + +### Installation + +```bash +npm install igniteui-dockmanager +``` + +### Setup + +Because Dock Manager is a Web Component, it requires two one-time setup steps: + +**1. Register custom elements — `app.config.ts`:** + +```typescript +import { defineCustomElements } from 'igniteui-dockmanager/loader'; + +defineCustomElements(); +``` + +**2. Add `CUSTOM_ELEMENTS_SCHEMA` to every standalone component that uses ``:** + +```typescript +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; + +@Component({ + selector: 'app-dock-manager', + templateUrl: './dock-manager.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class DockManagerComponent { ... } +``` + +### Basic Usage + +```typescript +import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { + IgcDockManagerLayout, + IgcDockManagerPaneType, + IgcSplitPaneOrientation +} from 'igniteui-dockmanager'; + +@Component({ + selector: 'app-dock-manager', + templateUrl: './dock-manager.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class DockManagerComponent { + layout: IgcDockManagerLayout = { + rootPane: { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.horizontal, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'sidebar', + header: 'Explorer' + }, + { + type: IgcDockManagerPaneType.documentHost, + rootPane: { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.horizontal, + allowEmpty: true, + panes: [ + { + type: IgcDockManagerPaneType.tabGroupPane, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + header: 'File 1', + contentId: 'doc1', + documentOnly: true + }, + { + type: IgcDockManagerPaneType.contentPane, + header: 'File 2', + contentId: 'doc2', + documentOnly: true + } + ] + } + ] + } + }, + { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.vertical, + size: 280, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'properties', + header: 'Properties' + }, + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'output', + header: 'Output', + isPinned: false // starts unpinned (auto-hidden) + } + ] + } + ] + }, + floatingPanes: [ + { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.horizontal, + floatingWidth: 300, + floatingHeight: 200, + floatingLocation: { x: 200, y: 150 }, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'search', + header: 'Search' + } + ] + } + ] + }; +} +``` + +```html + + +
File explorer content
+
Document 1 content
+
Document 2 content
+
Properties panel
+
Output panel
+
Search panel
+
+``` + +### Key Rules for Dock Manager + +1. **Separate package** — `igniteui-dockmanager` is installed independently of `igniteui-angular` +2. **Call `defineCustomElements()` from `igniteui-dockmanager/loader` in `app.config.ts`** — without this the `` element renders as an unknown element +3. **Add `CUSTOM_ELEMENTS_SCHEMA`** to every standalone component or NgModule that uses `` +4. **Slot names = `contentId` values** — the `slot="..."` attribute on child elements must exactly match the `contentId` string in the layout +5. **Premium component** — requires a licensed Ignite UI subscription; verify availability before recommending to users +6. **Not part of `igniteui-angular`** — do not import from `igniteui-angular` entry points; all Dock Manager types come from `igniteui-dockmanager` + +--- + +## Tile Manager + +> **Docs:** [Tile Manager (Angular)](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tile-manager) +> **Full API Docs:** [Tile Manager Web Component](https://www.infragistics.com/products/ignite-ui-web-components/web-components/components/layouts/tile-manager.html) + +The Tile Manager is a **layout Web Component** that displays content in individual tiles users can **rearrange and resize**. It is implemented as an `igc-tile-manager` container with one or more `igc-tile` children. + +### Installation + +```bash +npm install igniteui-webcomponents +``` + +### Setup + +Register the Tile Manager Web Component before bootstrap: + +```typescript +import { defineComponents, IgcTileManagerComponent } from 'igniteui-webcomponents'; + +defineComponents(IgcTileManagerComponent); +``` + +Add `CUSTOM_ELEMENTS_SCHEMA` to any component using ``: + +```typescript +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; + +@Component({ + selector: 'app-tile-manager', + templateUrl: './tile-manager.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class TileManagerComponent { } +``` + +### Usage + +```html + + + Wide tile +

Content spanning two columns

+
+ + Tall tile +

Content spanning two rows

+
+
+``` + +`igc-tile-manager` properties: + +- **`column-count`**: number of grid columns; if omitted or \<1, as many columns as fit with a minimum width (200px) are created +- **`gap`** / **`min-column-width`** / **`min-row-height`**: spacing and minimum track sizes (e.g., `"20px"`) +- **`resize-mode`**: `"none"` | `"hover"` | `"always"` — controls tile resizing +- **`drag-mode`**: `"tile"` | `"tile-header"` — enables reordering + +`igc-tile` properties: + +- **`row-start` / `col-start`** and **`row-span` / `col-span`**: grid placement and spanning +- **`disable-resize`**, **`disable-maximize`** / **`disable-fullscreen`**: opt out of resize / default header actions + +### Key Rules for Tile Manager + +1. **Web Component package** — Tile Manager ships via `igniteui-webcomponents`, not `igniteui-angular`. +2. **Register components** — call `defineComponents(IgcTileManagerComponent)` once before using ``. +3. **Use `CUSTOM_ELEMENTS_SCHEMA`** on Angular components that host the Tile Manager. +4. **Use slots** — header content goes into `slot="title"`; additional actions and custom adorners use the documented slots (`fullscreen-action`, `maximize-action`, `actions`, `side-adorner`, `corner-adorner`, `bottom-adorner`). +5. **Treat it as a layout container** — use Tile Manager when users need interactive, resizable and re-orderable tiles, not tabular data (use grids for that). + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner +- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.claude/skills/igniteui-angular-components/references/layout.md b/.claude/skills/igniteui-angular-components/references/layout.md new file mode 100644 index 0000000..96d4ed1 --- /dev/null +++ b/.claude/skills/igniteui-angular-components/references/layout.md @@ -0,0 +1,209 @@ +# Layout Components + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** +> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). + +## Contents + +- [Tabs](#tabs) +- [Bottom Navigation](#bottom-navigation) +- [Stepper](#stepper) +- [Accordion](#accordion) +- [Splitter](#splitter) +- [Navigation Drawer](#navigation-drawer) + +## Tabs + +```typescript +import { IGX_TABS_DIRECTIVES } from 'igniteui-angular/tabs'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +``` + +```html + + + + info + Info + + Content for Info tab + + + + Settings + + Settings content + + +``` + +Key inputs: `[(selectedIndex)]`, `[tabAlignment]` (`'start'` | `'end'` | `'center'` | `'justify'`), `[disableAnimation]`. + +## Bottom Navigation + +```typescript +import { IgxBottomNavComponent, IgxBottomNavItemComponent, IgxBottomNavHeaderComponent, IgxBottomNavContentComponent } from 'igniteui-angular/bottom-nav'; +``` + +```html + + + + home + Home + + Home content + + + + settings + Settings + + Settings content + + +``` + +## Stepper + +```typescript +import { IGX_STEPPER_DIRECTIVES } from 'igniteui-angular/stepper'; +``` + +```html + + +
Account
+
Create your account
+
+ +
+
+ +
Profile
+
Optional step
+
...
+
+ +
Confirm
+
Review and submit
+
+
+``` + +Programmatic navigation: +```typescript +stepper = viewChild.required(IgxStepperComponent); + +next() { this.stepper().next(); } +prev() { this.stepper().prev(); } +navigateTo(index: number) { this.stepper().navigateTo(index); } +``` + +## Accordion + +```typescript +import { IgxAccordionComponent } from 'igniteui-angular/accordion'; +import { IGX_EXPANSION_PANEL_DIRECTIVES } from 'igniteui-angular/expansion-panel'; +``` + +```html + + + + Panel 1 + Subtitle text + + + Content for panel 1 + + + + + Panel 2 + + Content for panel 2 + + +``` + +Standalone `igx-expansion-panel` (without accordion): +```html + + + Settings + + Content + +``` + +## Splitter + +```typescript +import { IgxSplitterComponent, IgxSplitterPaneComponent, SplitterType } from 'igniteui-angular/splitter'; +``` + +```html + + + + Left panel content + + + Right panel content + + + + + + Top panel + Bottom panel + +``` + +## Navigation Drawer + +```typescript +import { IgxNavigationDrawerComponent, IgxNavDrawerItemDirective, IgxNavDrawerTemplateDirective, IgxNavDrawerMiniTemplateDirective } from 'igniteui-angular/navigation-drawer'; +import { IgxIconComponent } from 'igniteui-angular/icon'; +import { IgxRippleDirective } from 'igniteui-angular/directives'; +``` + +```html + + + + + + + home + settings + + + + +``` + +Key inputs: `[isOpen]`, `[pin]` (dock to content), `[pinThreshold]` (auto-pin at viewport width), `[width]`, `[miniWidth]`. + +Events: `(opened)`, `(closed)`, `(pinChange)`. + +> **Important:** The Navigation Drawer uses the Ignite UI overlay/animation system — ensure `provideAnimations()` is in `app.config.ts`. + +## See Also + +- [`setup.md`](./setup.md) — App providers, architecture, all entry points +- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider +- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner +- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.claude/skills/igniteui-angular-components/references/mcp-setup.md b/.claude/skills/igniteui-angular-components/references/mcp-setup.md new file mode 100644 index 0000000..d855515 --- /dev/null +++ b/.claude/skills/igniteui-angular-components/references/mcp-setup.md @@ -0,0 +1,76 @@ +# Setting Up the Ignite UI CLI MCP Server + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** + +The Ignite UI CLI MCP server exposes `list_components`, `get_doc`, `search_docs`, and `search_api` so AI assistants can discover Ignite UI components and read version-accurate documentation. It must be configured in the editor/agent before these tools become available, and the editor or agent session must be restarted afterwards — MCP servers cannot be hot-loaded into a running session. + +> Depending on the client, MCP tool names may appear with a server prefix (e.g. `mcp__igniteui-cli__list_components` in Claude Code). This skill refers to tools by their bare names. + +## Recommended: One-Command Setup + +From the project root: + +```bash +npx -y igniteui-cli ai-config +``` + +This configures **both** the `igniteui-cli` and `igniteui-theming` MCP servers, copies the Ignite UI Agent Skills into the project, and preserves any existing server entries in the config files. Inline options such as `--agents claude copilot` and `--assistants vscode cursor` select which agents and editors to configure. + +Projects created with `npx igniteui-cli new` already have the `igniteui-cli` MCP entry configured. + +## Manual Configuration (fallback) + +Use these only when `ai-config` is unavailable or your editor is not covered by it. + +### VS Code — `.vscode/mcp.json` + +```json +{ + "servers": { + "igniteui-cli": { + "command": "npx", + "args": ["-y", "igniteui-cli", "mcp"] + } + } +} +``` + +`npx -y` works whether `igniteui-cli` is installed locally in `node_modules` or needs to be pulled from the npm registry. + +### Claude Code + +```bash +claude mcp add igniteui-cli -- npx -y igniteui-cli mcp +``` + +### Cursor — `.cursor/mcp.json` + +```json +{ + "mcpServers": { + "igniteui-cli": { + "command": "npx", + "args": ["-y", "igniteui-cli", "mcp"] + } + } +} +``` + +### Claude Desktop + +Edit the Claude Desktop config file (**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`, **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`) and add the same `mcpServers` entry as shown for Cursor above. + +### WebStorm / JetBrains IDEs + +1. Go to **Settings → Tools → AI Assistant → MCP Servers** +2. Click **+ Add MCP Server** +3. Set Command to `npx` and Arguments to `-y igniteui-cli mcp` +4. Click OK and restart the AI Assistant + +## Verifying the Setup + +After restarting the editor/session, ask the AI assistant: + +> "List all available Ignite UI components" + +If the MCP server is running, the `list_components` tool will return all available components for the detected framework. diff --git a/.claude/skills/igniteui-angular-components/references/setup.md b/.claude/skills/igniteui-angular-components/references/setup.md new file mode 100644 index 0000000..a9e769d --- /dev/null +++ b/.claude/skills/igniteui-angular-components/references/setup.md @@ -0,0 +1,165 @@ +# Application Setup & Architecture + +> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** + +## Contents + +- [Installation](#installation) +- [Required Providers (`app.config.ts`)](#required-providers-appconfigts) +- [Architecture — Standalone Components](#architecture--standalone-components) +- [Multi-Entry-Point Imports](#multi-entry-point-imports) + +## Installation + +```bash +# Open-source +npm install igniteui-angular + +# Licensed (requires @infragistics registry configured) +npm install @infragistics/igniteui-angular +``` + +Both packages share identical entry-point paths. Everywhere below, replace `igniteui-angular` with `@infragistics/igniteui-angular` if using the licensed package. + +## Required Providers (`app.config.ts`) + +> **Important:** Before adding any Ignite UI component, verify that `app.config.ts` contains the providers listed below. Missing `provideAnimations()` is the most common cause of runtime errors — all overlay and animated components (Dialog, Combo, Select, Date Picker, Snackbar, Toast, Banner, Navigation Drawer, Dropdown) will silently fail or throw without it. + +```typescript +import { ApplicationConfig } from '@angular/core'; +import { provideAnimations } from '@angular/platform-browser/animations'; +import { provideRouter } from '@angular/router'; +import { provideIgniteIntl } from 'igniteui-angular/core'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideAnimations(), // REQUIRED — all overlay and animated components + provideRouter(appRoutes), + provideIgniteIntl(), // recommended — localization for date/time pickers, grids, etc. + ] +}; +``` + +| Provider | Package | Required for | +|---|---|---| +| `provideAnimations()` | `@angular/platform-browser/animations` | **All overlay and animated components** — Dialog, Combo, Select, Dropdown, Date/Time Picker, Snackbar, Toast, Banner, Navigation Drawer, Carousel, Overlay service | + +> **`provideAnimationsAsync()`** lazy-loads the animations module — prefer it for SSR or when optimizing initial bundle size: +> ```typescript +> import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; +> ``` + +## Architecture — Standalone Components + +All Ignite UI components are **standalone** — no NgModules needed. Import them directly into your component's `imports` array: + +```typescript +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { IgxButtonDirective } from 'igniteui-angular/directives'; +import { IgxDialogComponent } from 'igniteui-angular/dialog'; + +@Component({ + selector: 'app-example', + imports: [IgxButtonDirective, IgxDialogComponent], + templateUrl: './example.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ExampleComponent {} +``` + +## Multi-Entry-Point Imports + +> **Important:** Always import from specific entry points, never from the root barrel. Check `package.json` to determine whether the project uses `igniteui-angular` or `@infragistics/igniteui-angular` — that prefix applies to every import path. + +```typescript +// CORRECT — tree-shakeable, specific entry point +import { IgxComboComponent } from 'igniteui-angular/combo'; +import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; + +// AVOID — pulls in entire library +import { IgxComboComponent } from 'igniteui-angular'; +``` + +### Common Entry Points + +| Component / Directive | Entry Point | +|---|---| +| Input Group | `igniteui-angular/input-group` | +| Combo | `igniteui-angular/combo` | +| Simple Combo | `igniteui-angular/simple-combo` | +| Select | `igniteui-angular/select` | +| Date Picker / Date Range Picker | `igniteui-angular/date-picker` | +| Time Picker | `igniteui-angular/time-picker` | +| Calendar | `igniteui-angular/calendar` | +| Checkbox | `igniteui-angular/checkbox` | +| Radio | `igniteui-angular/radio` | +| Switch | `igniteui-angular/switch` | +| Slider | `igniteui-angular/slider` | +| Tabs | `igniteui-angular/tabs` | +| Stepper | `igniteui-angular/stepper` | +| Accordion | `igniteui-angular/accordion` | +| Expansion Panel | `igniteui-angular/expansion-panel` | +| Splitter | `igniteui-angular/splitter` | +| Navigation Drawer | `igniteui-angular/navigation-drawer` | +| Bottom Navigation | `igniteui-angular/bottom-nav` | +| List | `igniteui-angular/list` | +| Tree | `igniteui-angular/tree` | +| Card | `igniteui-angular/card` | +| Dialog | `igniteui-angular/dialog` | +| Snackbar | `igniteui-angular/snackbar` | +| Toast | `igniteui-angular/toast` | +| Banner | `igniteui-angular/banner` | +| Chips | `igniteui-angular/chips` | +| Avatar | `igniteui-angular/avatar` | +| Badge | `igniteui-angular/badge` | +| Icon | `igniteui-angular/icon` | +| Carousel | `igniteui-angular/carousel` | +| Paginator | `igniteui-angular/paginator` | +| Linear Progress | `igniteui-angular/progressbar` | +| Circular Progress | `igniteui-angular/progressbar` | +| Chat | `igniteui-angular/chat` | +| Button / Icon Button | `igniteui-angular/directives` | +| Button Group | `igniteui-angular/button-group` | +| Ripple | `igniteui-angular/directives` | +| IgxTooltipDirective, IgxTooltipTargetDirective | `igniteui-angular/directives` | +| Drag & Drop | `igniteui-angular/directives` | +| Layout Manager (`igxLayout`, `igxFlex`) | `igniteui-angular/directives` | +| Core utilities, services, base types | `igniteui-angular/core` | +| Icon Service | `igniteui-angular/icon` | +| Overlay Service | `igniteui-angular/core` | +| **Dock Manager** | `igniteui-dockmanager` *(separate package — `npm install igniteui-dockmanager`)* | + +**Grid-specific entry points** (tree-shakable imports): + +| Component / Feature | Entry Point | +|---|---| +| Shared grid infrastructure (columns, toolbar, filtering, sorting, etc.) | `igniteui-angular/grids/core` | +| Standard grid (`IgxGridComponent`) | `igniteui-angular/grids/grid` | +| Tree grid (`IgxTreeGridComponent`) | `igniteui-angular/grids/tree-grid` | +| Hierarchical grid (`IgxHierarchicalGridComponent`, `IgxRowIslandComponent`) | `igniteui-angular/grids/hierarchical-grid` | +| Pivot grid (`IgxPivotGridComponent`, `IgxPivotDataSelectorComponent`) | `igniteui-angular/grids/pivot-grid` | + +### Convenience Directive Collections + +For complex components, use the bundled directive arrays instead of listing every sub-directive individually: + +| Token | Entry Point | Includes | +|---|---|---| +| `IGX_BUTTON_GROUP_DIRECTIVES` | `igniteui-angular/button-group` | Button group + button directive | +| `IGX_INPUT_GROUP_DIRECTIVES` | `igniteui-angular/input-group` | Input group + label, hint, prefix, suffix | +| `IGX_TABS_DIRECTIVES` | `igniteui-angular/tabs` | Tabs + tab item, header, content | +| `IGX_STEPPER_DIRECTIVES` | `igniteui-angular/stepper` | Stepper + step | +| `IGX_EXPANSION_PANEL_DIRECTIVES` | `igniteui-angular/expansion-panel` | Panel + header, body | +| `IGX_LIST_DIRECTIVES` | `igniteui-angular/list` | List + list item | +| `IGX_TREE_DIRECTIVES` | `igniteui-angular/tree` | Tree + tree node | + +## See Also + +- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider, forms integration +- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer +- [`data-display.md`](./data-display.md) — List, Tree, Card, Chips, Avatar, Badge, Icon, Carousel, Paginator, Progress, Chat +- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner +- [`directives.md`](./directives.md) — Button, Icon Button, Button Group, Ripple, Tooltip, Drag and Drop +- [`layout-manager.md`](./layout-manager.md) — Layout Manager directives, Dock Manager +- [`../../igniteui-angular-grids/SKILL.md`](../../igniteui-angular-grids/SKILL.md) — Data Grids +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.claude/skills/igniteui-angular-figma-to-app/SKILL.md b/.claude/skills/igniteui-angular-figma-to-app/SKILL.md new file mode 100644 index 0000000..e7c07e8 --- /dev/null +++ b/.claude/skills/igniteui-angular-figma-to-app/SKILL.md @@ -0,0 +1,772 @@ +--- +name: igniteui-angular-figma-to-app +description: > + Translate Figma app screens designed using the Indigo.Design UI Kits into production + Angular applications with Ignite UI for Angular. The Indigo.Design UI Kits are Figma + component libraries available in four design-system variants — Material, Fluent, + Bootstrap, and Indigo — each with light and dark themes. Designers build their own + app frames in Figma using these kit libraries, and every kit component instance maps + 1:1 to an Ignite UI Angular control. The active kit variant also determines the + design system used in the Angular theme. Uses the Figma MCP for design data, the + Ignite UI CLI MCP for component docs, the Ignite UI Theming MCP for palette and + component-level styling, and the Playwright MCP for visual validation against the + original Figma design. Triggers on "implement this Figma design", "build from Figma", + "translate Figma to Angular", "implement this artboard", "generate app from Figma", + or when a Figma URL is shared with implementation intent in an Ignite UI Angular context. +user-invocable: true +--- + +# Ignite UI for Angular — Figma to App + +Translate Figma app screens built with the **Indigo.Design UI Kits** into production +Angular applications. Designers create their own frames in Figma using the Indigo.Design +component libraries as shared libraries — these kits come in four design-system variants +(**Material**, **Fluent**, **Bootstrap**, **Indigo**) with light and dark themes each. +Every component instance in the design maps 1:1 to an Ignite UI Angular control, and +the active kit variant directly determines which design system to use in the Angular +theme. + +This skill orchestrates four MCP servers: **Figma** (design data), **Ignite UI CLI** +(component docs), **Ignite UI Theming** (styles), and **Playwright** (visual validation). + +--- + +## Required Workflow + +Complete all phases in order — do not skip phases or generate component code from +memory. Every component selector, input name, and import path must come from +`get_doc` results or, where no doc exists in the catalog, from the +`igniteui-angular-components` / `igniteui-angular-grids` skill reference files — +never guessed. + +Read [references/figma-component-map.md](references/figma-component-map.md) before Phase 2. +Read [references/design-token-bridge.md](references/design-token-bridge.md) before Phase 3. +Read [references/asset-extraction.md](references/asset-extraction.md) before Phase 1h. +Read [references/validation-patterns.md](references/validation-patterns.md) before Phase 5. + +--- + +## Phase 0 — Prerequisites + +> **Tool naming:** this skill writes MCP tool names as `_` (e.g. +> `figma_get_metadata`, `theming_create_theme`). The exact name depends on the client — +> Claude Code exposes them as `mcp____` (e.g. `mcp__figma__get_metadata`). +> Match by the tool's base name on whatever server is connected. + +### 0a: Verify All Four MCP Servers + +Run these checks **silently** in parallel. Each verification call is a no-op if the +server is not connected; do not surface raw errors to the user at this point. + +| Server | Verification call | Success signal | +| --------------------- | ---------------------------------------------- | ----------------------------------- | +| **Figma** | `figma_get_metadata` with no `nodeId` | Returns page list or selection info | +| **Ignite UI CLI** | `list_components` with `framework: "angular"` | Returns component list | +| **Ignite UI Theming** | `theming_detect_platform` | Returns platform info | +| **Playwright** | `playwright_browser_navigate` to `about:blank` | Navigates without error | + +If **any server fails**, stop and guide the user through setup **for that server only** +before continuing. For `igniteui-cli` and `igniteui-theming`, the fastest path is +`npx -y igniteui-cli ai-config`, which configures both. Full setup instructions for all +servers are in [references/mcp-setup.md](references/mcp-setup.md). Newly configured MCP +servers require an editor/session reload before their tools appear. + +### 0b: Detect or Scaffold Angular Project + +Check whether the current working directory contains a valid Angular + Ignite UI project: + +``` +1. Does package.json exist? +2. Does it list "igniteui-angular" OR "@infragistics/igniteui-angular" in dependencies? +3. Is there a src/app/ directory? +``` + +**If a valid project is found:** + +- Note the package layout: `igniteui-angular` (open-source) or `@infragistics/igniteui-angular` (licensed) +- Note the Angular version from `package.json` +- **Check the MCP configuration for all four required server entries** — `figma`, `igniteui-cli`, + `igniteui-theming`, and `playwright` (in `.vscode/mcp.json` or the client's equivalent). + If `igniteui-cli` or `igniteui-theming` is missing, run `npx -y igniteui-cli ai-config` + from the project root — it configures both servers and copies the Agent Skills, preserving + existing entries. Add missing `figma` and `playwright` entries from + [references/mcp-setup.md](references/mcp-setup.md). Projects scaffolded with + `npx igniteui-cli new` have `igniteui-cli` pre-wired but typically lack the other three. + A reload is required before newly configured servers' tools appear. +- Inform the user: "Found existing Ignite UI Angular project. Proceeding with the Figma workflow." + +**If no valid project is found:** +Present this message and wait for the user’s choice: + +> “No Ignite UI Angular project found in the current directory. Would you like me to +> scaffold a new one using the Ignite UI CLI before implementing the Figma design? +> +> `npx -y igniteui-cli new` creates a project pre-configured with Ignite UI Angular, +> theming already applied in `styles.scss`, and the Ignite UI CLI MCP server auto-wired +> into `.vscode/mcp.json`. No global install required. +> +> Alternatively, point me at an existing project directory.” + +If the user confirms scaffolding: + +1. Ask for a project name. If the user has already shared a Figma URL, suggest a name + derived from the Figma file name; otherwise prompt. + +2. Choose the project template based on the artboard structure. Because Phase 1 has + not run yet, use the lightest signal available: + + | Signal | Template to use | + | -------------------------------------------------------------------- | ------------------------------------------------ | + | User mentions a sidebar, navigation drawer, or multiple routed views | `side-nav` | + | No strong signal — default | `empty` (routing + home page; easiest to extend) | + +3. Create the project: + + ```bash + npx -y igniteui-cli new --framework=angular --type=igx-ts --template= + ``` + + This produces a standard Angular workspace fully compatible with `ng` commands, + and additionally: + - Installs and configures `igniteui-angular` with a default theme in `styles.scss` + - Generates `.vscode/mcp.json` with the Ignite UI CLI MCP server entry already set + - Copies Ignite UI Agent Skills to `.claude/skills/` + +4. `cd ` + +5. Open the auto-generated `.vscode/mcp.json` and **append** the Figma, Ignite UI + Theming, and Playwright server entries from `references/mcp-setup.md`. The Ignite + UI CLI entry is already present — do not duplicate it. + +6. Confirm the project starts cleanly: + ```bash + npm start + ``` + Then continue to Phase 1. + +--- + +## Phase 1 — Figma Design Exploration + +**Goal:** understand the full design structure and capture all data needed for +implementation and validation before writing any code. + +> **Rate-limit awareness:** Figma MCP calls count against plan quotas +> (indicative, subject to change — verify against the user's current Figma plan: +> Starter **6 calls/month**, Organization 200/day, Enterprise 600/day). +> +> Estimated call budget for a 5-artboard design: +> `figma_get_metadata` ×2 + `figma_get_screenshot` ×5 + `figma_get_design_context` ×5 + `figma_get_variable_defs` ×1 + `figma_get_code_connect_map` ×5 = **~18 calls**. +> **Starter plan users will exceed their monthly quota in a single session.** Strategies: +> 1. Call `figma_get_variable_defs` only **once** for the root page (variables are file-scoped, not artboard-scoped — calling it per artboard wastes quota on duplicate data). +> 2. Prioritize `figma_get_design_context` over additional screenshots if quota is tight. +> 3. For large files, consider implementing one artboard per monthly budget cycle. +> +> Use `figma_get_metadata` first to discover structure cheaply, then call +> `figma_get_design_context` only for the artboards you will implement. + +### 1a: Discover Pages and Artboards + +Call `figma_get_metadata` with no `nodeId`. This returns the top-level page list. +Then call `figma_get_metadata` again for each page that looks relevant to get its +artboard tree. + +> If the user already shared a Figma URL, extract the `nodeId` from it: +> URL format: `https://figma.com/design/:fileKey/:name?node-id=1-2` → nodeId = `1:2` +> (replace `-` with `:`) + +### 1b: Select Target Artboards + +If there are multiple pages or artboards, show the user a list: + +> "I found these artboards in your Figma file: +> +> - Page 1: [list artboard names + node IDs] +> - Page 2: [list artboard names + node IDs] +> +> Which artboards should I implement? (You can say 'all' or list specific names.)" + +Wait for confirmation before proceeding. + +### 1c: Capture Reference Screenshots + +> **IMPORTANT — Figma MCP is session-bound.** The `figma_get_screenshot` tool returns a +> screenshot of the **currently selected node in the Figma desktop app**, regardless of any +> `nodeId` parameter passed. To capture each artboard, you must ask the user to navigate +> to it in Figma first. + +For each target artboard: + +1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* +2. Wait for confirmation, then call: + ``` + figma_get_screenshot({}) + // Store: { artboardName, screenshotFile, width: , height: } + ``` +3. Repeat for each artboard — do **not** batch these calls before the user navigates. + +After all artboards are captured, confirm the count: +> *"I have N reference screenshots: [list artboard names]. Proceeding to design context extraction." +> If any are missing, navigate to that artboard in Figma and recapture before continuing.* + +> Never skip this step. The screenshots are your ground truth for Phase 5 validation. + +### 1d: Extract Design Context + +> **IMPORTANT — Figma MCP is session-bound.** The `figma_get_design_context` tool returns +> context for the **currently selected node in the Figma desktop app**. You must ask the +> user to navigate to each artboard before calling this tool. +> +> **Output format:** `figma_get_design_context` returns **React + Tailwind CSS code**, not +> structured Angular metadata. The response is explicitly tagged *"SUPER CRITICAL: The +> generated React+Tailwind code MUST be converted to match the target project's technology +> stack."* Do **not** copy the React code into Angular files. Instead, read the JSX to extract +> the information below. Image localhost URLs in the output are session-scoped previews — +> do **not** use them as final assets (see Phase 1h and `references/asset-extraction.md`). + +For **each** target artboard: + +1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* +2. Wait for confirmation, then call: + ``` + figma_get_design_context({ + clientLanguages: "typescript", + clientFrameworks: "angular", + artifactType: "WEB_PAGE_OR_APP_SCREEN", + taskType: "CREATE_ARTIFACT" + }) + ``` +3. From the React+Tailwind output, extract: + + - **Component layer names** (`data-name` attributes in the JSX) — match against `references/figma-component-map.md` + - **Layout structure** — `flex`, `grid`, `gap-*`, `p-*`, `w-*`, `h-*` Tailwind classes on container divs + - **Typography** — `font-['...']`, `text-[...]`, `font-weight` classes + - **Surface colors** — `bg-[#XXXXXX]` classes on container `
` elements that wrap major sections + (these become plain `
` wrappers in Angular with `background: #XXXXXX`) + - **Border/roundness** — `rounded-[...]`, `border`, `border-[...]` classes on containers and cards + - **Input type variants** — look for hidden zero-size nodes (`size-[0.5px]`) whose `data-name` + contains a component type (e.g. `"Date Picker Type"`, `"Combo Input"`). These are the + Indigo.Design kit's **variant indicator nodes** — their name encodes which input variant + (border/line/box) is active for that component. + - **Chart series colors** — for any chart layer, note the fill colors on its series paths + - **Action controls** — list every button, icon button, and toolbar action visible in the artboard; + this is your authoritative inventory — do not add actions not present in the design + - **Active kit variant** — look for library component references whose source file name + contains "Material", "Fluent", "Bootstrap", or "Indigo". If not found here, defer to + Phase 1e variable names and [references/design-token-bridge.md](references/design-token-bridge.md). + +4. Record all surface containers in the **Surfaces Spec** (added to Phase 1g). + +### 1e: Extract Design Tokens + +> Figma variables are **file-scoped**, not artboard-scoped. Call `figma_get_variable_defs` +> **once** for the root page node — not once per artboard. Calling it multiple times returns +> identical data and wastes plan quota. + +Call once: + +``` +figma_get_variable_defs({}) +``` + +The response contains a map of variable names to values, e.g.: + +``` +"color/primary/500": "#6200EE" +"color/surface": "#FFFFFF" +"typography/body/font-family": "Roboto" +``` + +Use `references/design-token-bridge.md` to map color and typography variables to Ignite +UI theming inputs in Phase 3. Do **not** attempt to map Figma spacing or sizing values +— see `references/design-token-bridge.md § Spacing, Sizing, and Roundness` for why. + +### 1f: Check for Existing Code Connect Mappings + +Call `figma_get_code_connect_map` for each artboard. If mappings exist, they confirm +which Ignite UI Angular components correspond to which Figma nodes — use these to +validate or augment your component mapping in Phase 2. + +``` +figma_get_code_connect_map({ nodeId: "" }) +``` + +### 1g: Build the Decomposition Table + +Before writing any code, produce **two tables** for **each artboard**. + +#### Table A — Ignite UI Components + +| Figma Layer Name | Visual Role | Ignite UI Component | Design Tokens Used | Data Type | +| -------------------------- | ------------------ | ----------------------- | ------------------- | --------------- | +| _e.g._ `_NavBar` | Top navigation bar | `IgxNavbarComponent` | `color/primary/500` | n/a | +| _e.g._ `_Grid/Default` | Data table | `IgxGridComponent` | `color/surface` | Tabular records | +| _e.g._ `_Button/Contained` | Primary CTA | `igxButton="contained"` | `color/primary/500` | n/a | + +Fallback to plain semantic HTML only when no Ignite UI component can match the layer +after consulting `references/figma-component-map.md`. Document the reason inline. + +#### Table B — Layout Surfaces + +Record every **non-IgxXxx container** that carries visual properties (background color, +border, padding, shadow). These are plain `
` wrappers in Angular — not Ignite UI +components — but they are critical to visual fidelity. Populate this table from the +`bg-[...]`, `rounded-[...]`, `border`, `p-[...]`, and `shadow-[...]` Tailwind classes +observed on container divs in the Phase 1d design context output. + +| Figma Frame / Container Name | Background | Border-Radius | Padding | Border | Shadow | Encloses (child sections) | +| ---------------------------- | ---------- | ------------- | ------- | ------ | ------ | ------------------------- | +| _e.g._ `Budget Categories` | `#222222` | `4px` | `24px` | none | none | Categories list, Add button | +| _e.g._ `Friend Card` | `#222222` | `8px` | `24px 16px` | `1px solid #333` | none | Avatar, name, phone, email, buttons | + +> **Rule:** if a section appears on a surface in Figma (i.e. its container has a +> non-transparent background), it **must** have that background in the Angular implementation. +> If a section floats on the page background (transparent), do **not** add a surface wrapper. +> Never infer surface structure from another page — always derive it from the design context +> for the specific artboard being implemented. + +Present both tables to the user for review before proceeding. + +### 1h: Extract Image Assets + +Read [references/asset-extraction.md](references/asset-extraction.md) in full before +running any extraction. + +**Zero-placeholder policy:** every image visible in the Figma design must be extracted +and committed to `src/assets/` before Phase 4. Gradient placeholders are not acceptable. + +**Step 0 — Get the file key first.** Ask the user to share the Figma file URL or key +before attempting any extraction. In Figma desktop: right-click the file tab → +**Copy link**. Without it you fall back to Tier 2 or Tier 3 (see below). + +From the decomposition tables, identify every layer that is a **static image asset** +(photo, background, logo, custom icon, illustration) rather than an Ignite UI component. +Do **not** extract Indigo.Design UI Kit component instances. + +**Use the four-tier decision tree from `asset-extraction.md`:** + +| Tier | Method | When to use | +| ---- | ------ | ----------- | +| **1** | REST API `/v1/files/:key/images` (Method A) or `/v1/images/:key` (Method B) | File key available — always the highest fidelity | +| **2** | Download localhost URLs from `figma_get_design_context` with `curl` | No file key; Figma session is active; design context was already called | +| **3** | `figma_get_screenshot` per node (ask user to select each node) | No file key; no localhost URLs | +| **4** | CSS gradient/color placeholder with `// TODO` comment | Only for confirmed pure-color fills — never as a shortcut | + +After extraction, save assets to: +- `src/assets/images/` — raster images (PNG, JPG) +- `src/assets/icons/` — SVG icons and logos + +Build a concise asset manifest (see `asset-extraction.md § Build an Asset Manifest`) +so the implementation phase uses consistent paths. + +If you used Tier 2 or Tier 3 for any asset, tell the user which ones need re-export +once the file key becomes available. + +--- + +## Phase 2 — Component Discovery (Ignite UI CLI MCP) + +**Goal:** look up exact Angular selectors, inputs, outputs, and usage patterns for every +component identified in Phase 1. Never generate component code from memory. + +### 2a: Read the Component Map + +Read [references/figma-component-map.md](references/figma-component-map.md) in full. +Find the row for each Figma layer name from your Phase 1 decomposition table. +Each row gives you: + +- The Ignite UI Angular selector +- The `get_doc` key to call +- Key inputs and variants to configure + +### 2b: Fetch Component Docs + +Call `list_components({ framework: "angular" })` **once** to discover which component +families have full docs — **the catalog covers only a subset of components**. Then: + +- For families **with** a doc: call `get_doc({ framework: "angular", name: "" })`, + all in a single parallel batch — never sequentially. +- For families **without** a doc: read the matching reference files from the + [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) and + [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) skills, and use + `search_api` for member-level API lookups. + +Do **not** write any component code until you have read its doc or reference file. + +### 2c: Search for Feature Docs + +Use `search_docs` for feature-level questions raised by the artboard, for example: + +``` +search_docs({ framework: "angular", query: "row editing" }) +search_docs({ framework: "angular", query: "virtual scrolling" }) +search_docs({ framework: "angular", query: "column pinning" }) +``` + +Feature docs are mandatory when the artboard shows grid editing, filtering, sorting, +pinning, or other advanced feature states. + +### 2d: Document the Final Component Plan + +After reading all docs, confirm or revise the decomposition table from Phase 1g with: + +- Exact selectors (e.g. ``, ``) +- Exact import paths (never imported from the root barrel) +- Required peer modules or provider functions + +Present this updated plan to the user and wait for confirmation before Phase 3. + +--- + +## Phase 3 — Theme Generation (Ignite UI Theming MCP) + +**Goal:** produce Sass theming code that matches the Figma design's visual language +using design tokens extracted in Phase 1e. + +Read [references/design-token-bridge.md](references/design-token-bridge.md) in full +before running any theming tool. + +### 3a: Inspect Existing Theme (Guard) + +Open `src/styles.scss` (or the project's global stylesheet). Look for an active +`@include theme(...)` or `@include palette(...)` call. + +- **Theme found, but variant mismatch** — if the existing theme is **light** and the + Figma design is **dark** (or vice versa), treat this as a theme change and proceed with + 3b–3c. A light theme applied to a dark design produces wrong background colors on every + component and will fail every Phase 5 check. +- **Theme found, variant matches** → do **not** call `theming_create_theme` or + `theming_create_palette` unless the user explicitly asks for a global theme change. + Reuse the existing palette. Skip to step 3d. +- **No theme found** → proceed with 3b. + +Detect the Figma design's variant from Phase 1e: if a `color/mode` variable exists, +use its value. Otherwise, use the artboard background color: near-black (`#121212`, +`#1a1a1a`, `#000`) → `"dark"`; near-white (`#fff`, `#f5f5f5`) → `"light"`. + +### 3b: Resolve Design System + +You don't need to call `theming_detect_platform` to confirm the Angular package layout. We already did that in Phase 0. + +To determine the design system, use this **strict precedence order**. Stop at the first +signal that gives a clear answer: + +1. **Explicit user request** — "make it Material", "use Fluent", etc. +2. **Library source name in design context** — the `figma_get_design_context` or + `figma_get_metadata` response may reference the Figma source library file name + (e.g. `"Indigo.Design UI Kit for Material"` → `material`). +3. **Variable collection names from Phase 1e** — collection names like + `Material/color/primary` identify the kit variant directly. +4. **Elevation variable structure** — inspect the `Elevations/*` variables in + `figma_get_variable_defs` output: + - **Three-layer DROP_SHADOW** (umbra + penumbra + ambient) → **Material Design** + - **Single-layer DROP_SHADOW** → Indigo, Fluent, or Bootstrap +5. **Palette shade naming** — variables named `primary/500`, `primary/100`–`primary/900` + follow the Material 100–900 palette convention → likely **Material**. +6. **Visual heuristics** (use only when all above are inconclusive): + prominent shadows + ripple effects → `"material"`; + flat surfaces + sharp corners + Segoe/Inter font → `"fluent"`; + component borders + Bootstrap grid → `"bootstrap"`; + rounded purple/indigo accents without Material shadows → `"indigo"`. + +> **Never use font name as a primary signal.** "Titillium Web" is the default body font +> in the Indigo.Design UI Kit for Material — it is not exclusive to the Indigo design system. + +Supported values: `material` (default), `bootstrap`, `fluent`, `indigo`. + +### 3c: Generate Global Theme + +Extract the following from Phase 1e variables using +[references/design-token-bridge.md](references/design-token-bridge.md): + +``` +primaryColor ← from "color/primary/500" or "primary/500" +secondaryColor ← from "color/secondary/500" or "secondary/500" +surfaceColor ← from "color/surface" or "surface/default" +fontFamily ← from "typography/font-family" or "typography/body/font-family" +``` + +Then call in order: + +> **Parameter names differ between tools** — `theming_create_palette` uses `primary`, +> `secondary`, `surface` (not `primaryColor` etc.). `theming_create_theme` uses +> `primaryColor`, `secondaryColor`, `surfaceColor`. Do not mix them up. + +> **fontFamily double-quote bug** — `theming_create_theme` may double-wrap the fontFamily +> string (e.g. `""'Titillium Web', sans-serif""`) in its Sass output, producing invalid Sass. +> If you see double-quoted strings in the generated output, strip the outer quotes before +> applying to `styles.scss`. + +``` +theming_create_palette({ + primary: primaryColor, + secondary: secondaryColor, + surface: surfaceColor, + platform: "angular", + licensed: +}) + +theming_create_elevations({ + preset: "material" // or "indigo" if design system is Indigo +}) + +theming_create_typography({ + fontFamily, + platform: "angular" +}) + +theming_create_theme({ + palette: , + elevations: , + typography: , + variant: "", + designSystem: "", + platform: "angular", + licensed: +}) +``` + +Apply the generated output to `src/styles.scss` as instructed in the tool's response. + +### 3d: Per-Component Token Mapping + +> **Scope:** applies only to core Ignite UI Angular components (grid, navbar, card, +> inputs, chips, list, etc.). Charts, maps, and gauges have no Sass tokens — configure +> those via component inputs only. + +For **every** Ignite UI core component in your plan, run this loop: + +1. `theming_get_component_design_tokens({ component: "" })` + — review all token names, types, and descriptions +2. Go back to the Phase 1e variable map and find Figma variables that correspond to + this component's surfaces (background, text, border, hover state) +3. `theming_create_component_theme({ component: "", platform: "angular", tokens: { } })` +4. Apply the generated `@include tokens()` block to the component's SCSS or to a + scoped block in `styles.scss` + +When a specific component needs a different density or spacing from the global default, +use `theming_set_size` or `theming_set_spacing` with the `component` parameter — this +scopes `--ig-size` or `--ig-spacing` to that component’s selector rather than applying +globally. For compound components, use `scope` with a sub-component selector. Only +apply these globally (`:root`) when the entire app has a clearly distinct density. +Leave `theming_set_roundness` at its default unless the user explicitly requests a +change. Never derive multiplier values from Figma pixel values. +See `references/design-token-bridge.md § Spacing, Sizing, and Roundness`. + +--- + +## Phase 4 — Implementation + +**Goal:** build the Angular view(s) that match the artboard decomposition from Phase 2. + +### Implementation Rules + +1. **Never generate component code without reading its `get_doc` result first** (Phase 2b) +2. **Section by section** — layout → navigation → primary content → secondary → data +3. Follow Angular standalone component conventions and AGENTS.md coding standards +4. Import components from their specific entry points, never from the root barrel +5. Use CSS Grid first to match Figma frame proportions; add Flexbox for sub-regions +6. Apply theming via the SCSS classes and tokens generated in Phase 3 +7. Use typed mock data that matches the design's density and domain +8. Keep layout, spacing, and typography in SCSS files — not inline styles +9. For DV components (charts, maps, gauges), set visual properties via component inputs + as described in [references/figma-component-map.md](references/figma-component-map.md) +10. After implementing each major section, save and check in the browser (if dev server is running) +11. **Global input type:** if the Figma design uses `border`-type inputs globally (detected + via variant indicator nodes in Phase 1d), set the `IGX_INPUT_GROUP_TYPE` injection token + once in `app.config.ts` rather than `type="border"` on every component. This covers all + compound components that wrap `IgxInputGroup` internally (`IgxSimpleCombo`, + `IgxDatePickerComponent`, `IgxDateRangePickerComponent`, `IgxTimePickerComponent`, + `IgxSelectComponent`): + ```typescript + // app.config.ts + import { IGX_INPUT_GROUP_TYPE } from 'igniteui-angular/input-group'; + // in providers array: + { provide: IGX_INPUT_GROUP_TYPE, useValue: 'border' } + ``` +12. **Layout surfaces:** for every entry in the Phase 1g Surfaces table, add a CSS class + with the recorded `background`, `border-radius`, `padding`, `border`, and `box-shadow`. + Never leave a section transparent if the Figma surface has a background. Never add a + background to a section that floats on the page background in the Figma design. +13. **Implement only controls that appear in the Figma artboard.** Do not add toolbar + buttons, actions, or UI elements that look useful but are not visible in the design + context output for that artboard. + +### Layout Strategy + +Translate Figma frame dimensions into CSS Grid first: + +```scss +// Artboard: 1440×900px, sidebar 280px, content 1160px +.app-layout { + display: grid; + grid-template-columns: 280px 1fr; + grid-template-rows: 64px 1fr; + min-height: 100vh; +} +``` + +Match desktop proportions before adding responsive breakpoints. + +### Angular Project Structure + +For a new view or page generated from a Figma artboard, create: + +``` +src/app/ + / + .component.ts ← standalone component + .component.html ← template + .component.scss ← styles + component theme overrides +``` + +Register the route in `app.routes.ts` when the project uses routing. + +--- + +## Phase 5 — Visual Validation (Playwright MCP) + +**Goal:** measure and compare the running app against the Figma reference screenshots +from Phase 1c. Use the measurement-driven loop — compare numbers, not impressions. + +Read [references/validation-patterns.md](references/validation-patterns.md) in full +before running any Playwright tool. + +### 5a: Ensure the Dev Server Is Running + +Ask the user for the local dev URL if not already known (default: `http://localhost:4200`). +Navigate to confirm the app is running: + +``` +playwright_browser_navigate({ url: "http://localhost:4200" }) +playwright_browser_console_messages() // check for startup errors +``` + +### 5b: Match Viewport to Artboard Dimensions + +Resize the browser to match the Figma artboard dimensions captured in Phase 1c: + +``` +playwright_browser_resize({ width: , height: }) +playwright_browser_navigate({ url: "" }) // re-navigate after resize +``` + +> **Always re-navigate after resize.** The browser may reset to `about:blank` on +> viewport change. This is a known Playwright MCP pitfall. + +### 5c: Capture and Compare Screenshots + +> **IMPORTANT — Figma MCP is session-bound.** To get a fresh Figma reference screenshot +> for comparison, ask the user to select the artboard in Figma, then call +> `figma_get_screenshot({})`. Alternatively, use the Phase 1c reference screenshots +> already saved to disk. + +For **each target artboard** (run the full 5c–5f loop once per page): + +1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* +2. Navigate the browser to the corresponding route. +3. Take a browser screenshot: + ``` + playwright_browser_take_screenshot({ type: "png" }) + ``` +4. Do a **section-by-section** visual comparison against the Phase 1c reference: + - top bar → sidebar → **every section in the Phase 1g Surfaces table** → footer +5. Do **not** advance to the next artboard until no Critical/Major issues remain on the current one. + +### 5d: Measure Computed Styles + +For each section with visible differences — and **mandatorily for every entry in the +Phase 1g Surfaces table** — use `playwright_browser_evaluate` to extract exact values. +Pass code as a **plain JavaScript function string** using the `function` parameter +(see [references/validation-patterns.md](references/validation-patterns.md)): + +``` +playwright_browser_evaluate({ + function: "() => { var el = document.querySelector(''); if (!el) return { error: 'not found' }; var s = getComputedStyle(el); var r = el.getBoundingClientRect(); return { fontSize: s.fontSize, backgroundColor: s.backgroundColor, padding: s.padding, borderRadius: s.borderRadius, border: s.border, gap: s.gap, height: Math.round(r.height), width: Math.round(r.width) }; }" +}) +``` + +**Surfaces audit (mandatory for every page):** For every section in the Phase 1g Surfaces +table, assert: +- `backgroundColor` is **not** `rgba(0, 0, 0, 0)` when the surface has a background color +- `backgroundColor` **is** `rgba(0, 0, 0, 0)` when the design shows the section floating + on the page background (no card wrapper) +- All child elements shown inside the surface card in Figma are enclosed within the card's + bounding rect in the DOM + +**Action controls audit (mandatory for every page):** Count and name all visible action +buttons and toolbar controls. Compare against the Phase 1d inventory — any button not +recorded in the Figma design context is fabricated and must be removed. + +Compare all returned values against the Figma spec (from Phase 1d design context). + +### 5e: Classify and Report Mismatches + +| Severity | Category | Example | Action | +| ------------ | --------------- | ----------------------------------------- | --------------------------- | +| **Critical** | Missing element | Button in Figma, absent in code | Auto-fix | +| **Major** | Wrong component | Figma shows dropdown, code has text input | Auto-fix | +| **Minor** | Spacing off | 24px gap in Figma, 16px in code | Auto-fix if straightforward | +| **Cosmetic** | Color shade | `#333` vs `#2d2d2d` | Report only | + +For each mismatch, produce: + +``` +ISSUE: +LOCATION:
+FIGMA: +RENDERED: +SEVERITY: +FIX: +``` + +### 5f: Apply Corrections + +Fix Critical and Major issues immediately. After applying fixes, re-navigate and take a +fresh screenshot to confirm: + +``` +playwright_browser_navigate({ url: "" }) +playwright_browser_take_screenshot({ type: "png" }) +``` + +Repeat the measure → fix → re-verify loop until no Critical or Major issues remain. + +### 5g: Accessibility Snapshot + +Take an accessibility snapshot to verify the structural integrity of the view: + +``` +playwright_browser_snapshot() +``` + +Check that: + +- Interactive elements have accessible labels +- Headings follow a logical hierarchy +- Navigation landmarks are present + +--- + +## Critical Rules + +- **Phase 0 is not optional.** Never skip MCP verification. +- **Phase 2b before code.** Never write a selector you have not read from a doc. +- **Phase 1c screenshots are immutable ground truth.** Never overwrite them; always + compare against the original Figma state. +- **Re-navigate after resize** in Phase 5 to avoid Playwright's browser reset bug. +- **Rate-limit Figma MCP calls.** Use `figma_get_metadata` for discovery, then targeted + `figma_get_design_context` per artboard. Batch screenshot calls. +- **Fail fast on 3 retries.** If the same correction fails three times, stop, report + the issue to the user, and ask for guidance. +- **Do not modify dependency manifests or lock files without asking.** Identify the exact + packages and versions required, then get approval before installing. + +--- + +## Related Skills + +- [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) — deep reference for non-grid components +- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — deep reference for grid, tree-grid, hierarchical-grid, pivot-grid +- [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md) — theming system architecture and advanced palette patterns +- [`igniteui-angular-generate-from-image-design`](../igniteui-angular-generate-from-image-design/SKILL.md) — fallback when no Figma file is available (static image input) diff --git a/.claude/skills/igniteui-angular-figma-to-app/references/asset-extraction.md b/.claude/skills/igniteui-angular-figma-to-app/references/asset-extraction.md new file mode 100644 index 0000000..346135c --- /dev/null +++ b/.claude/skills/igniteui-angular-figma-to-app/references/asset-extraction.md @@ -0,0 +1,393 @@ +# Asset Extraction from Figma + +> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** +> +> Use this file in Phase 1h to identify and extract image assets from Figma artboards +> before implementation. Read in full before calling any extraction tool. +> +> **Zero-placeholder policy:** every image asset visible in the Figma design must be +> extracted and committed to `src/assets/` before Phase 4 begins. Gradient placeholders +> and empty `
` boxes are not acceptable. If the highest-fidelity method is +> unavailable, use the next tier — but always extract something real. + +--- + +## Step 0 — Acquire the Figma File Key (Required for REST API) + +The Figma REST API requires a **file key** — the identifier embedded in every Figma +file URL. Without it, you can still extract assets using Tier 2 and Tier 3 methods +below, but the REST API (Tier 1) produces the highest quality output and should always +be the first attempt. + +**Ask the user for the file key at the start of Phase 1h:** + +> "To extract image assets at the highest quality, I need the Figma file key. +> In the Figma desktop app: +> +> 1. Right-click the file tab at the top → **Copy link** (or go to **File → Share** and copy the URL) +> 2. The URL looks like: `https://www.figma.com/design/ABCDEF1234567890/My-File-Name` +> 3. The file key is the segment after `/design/`: **`ABCDEF1234567890`** +> +> Please share that key (or the full URL). If you cannot access it right now, I will +> proceed with the desktop-app extraction methods and note which assets need to be +> re-exported at higher quality." + +**Extracting the key from a URL (if the user pastes it):** + +```bash +# URL format: https://www.figma.com/design//?... +# Extract key with sed: +echo "https://www.figma.com/design/ABCDEF1234567890/My-App" \ + | sed -E 's|.*/design/([^/]+)/.*|\1|' +# → ABCDEF1234567890 +export FILE_KEY="ABCDEF1234567890" +``` + +**Your Figma personal access token** (same one used for the MCP server) is needed for REST calls. Store it as an environment variable: + +```bash +export FIGMA_TOKEN="your-personal-access-token" +``` + +--- + +## Two Fundamentally Different Types of Image Assets + +Figma stores images in two distinct ways — understanding the difference is essential for choosing the right extraction method: + +| Type | What it is | Figma signal | Best extraction method | +| ---------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------- | ---------------------------------------- | +| **Image fill** | A photo, texture, or raster image dragged/pasted into Figma. Stored as an IMAGE fill on a RECTANGLE or FRAME node. | Layer has fill of type `IMAGE`; `imageRef` in node data | REST API Method A → original source file | +| **Vector asset** | A logo, icon, or illustration drawn in Figma using vector tools. | Node type `VECTOR`, `BOOLEAN_OPERATION`, or `GROUP` | REST API Method B → clean SVG | + +Do **not** confuse these with Ignite UI component instances — those become Angular components, not extracted assets. + +--- + +## Step 1 — Identify Image Nodes + +### Naming patterns to look for in `figma_get_metadata` + +Scan the XML returned by `figma_get_metadata` for layer names matching: + +| Naming pattern | Likely asset type | Action | +| -------------------------------------------------- | ----------------- | ----------------------------------------- | +| `_Image`, `_Photo`, `_Picture`, `image`, `photo` | Raster image fill | Extract as PNG | +| `_Hero`, `_Banner`, `_Cover`, `hero`, `banner` | Large raster fill | Extract as PNG (2× scale) | +| `_Thumbnail`, `_Avatar`, `_Illustration` | Raster image fill | Extract as PNG | +| `_Logo`, `_Brand`, `logo`, `brand` | Vector or raster | If vector: extract as SVG; if raster: PNG | +| `_Icon/` prefix (custom icons not in igx-icon set) | Custom SVG icon | Extract as SVG | +| `_Background`, `_Bg`, `bg`, `background` | Large raster fill | Extract as PNG | +| `_Illustration`, `_Art`, `_Pattern` | Vector or raster | Classify before extracting | + +> **Ignore these** — do NOT extract them as image assets: +> +> - Any layer whose name starts with `_Button`, `_Input`, `_Grid`, `_Card`, etc. +> (Indigo.Design UI Kit component instances → implement as IgxXxx components) +> - `igx-icon` glyph nodes (use `` in Angular instead) +> - Artboard/frame boundaries themselves + +### Size heuristic + +Large rectangles (width > 200px or height > 200px) at key layout positions (hero area, +sidebar background, card thumbnail slot) are almost always image fills. + +Small nodes (< 48×48px) named with icon-like names are usually SVG icons. + +### Confirm with design context + +For ambiguous nodes, look at the `figma_get_design_context` output for the artboard. +Each image asset appears as either: + +- An `` — confirms it is a raster fill; note the node ID +- Inline SVG or an `` with `.svg` extension — confirms it is a vector; note the node ID + +Note all localhost image URLs from the design context — these are needed for Tier 2 +extraction if the REST API is unavailable. + +--- + +## Step 2 — Extract at the Highest Available Fidelity + +Use this **four-tier decision tree**. Start at Tier 1. Move to the next tier only if +the previous one is unavailable for this specific asset. + +``` +Do you have the FILE_KEY? +├─ YES → Use Tier 1 (REST API). Always the best. +└─ NO → Did figma_get_design_context include a localhost URL for this asset? + ├─ YES → Use Tier 2 (download localhost URL to disk). + └─ NO → Can you get a clean node screenshot? + ├─ YES → Use Tier 3 (figma_get_screenshot per node). + └─ NO → Use Tier 4 (CSS gradient/color placeholder as last resort, + with a TODO comment to replace later). +``` + +**After completing Phase 4, if you used Tier 2 or Tier 3 for any asset:** + +> Tell the user: "The following assets were extracted at reduced quality because the +> Figma file key was not available: [list]. To replace them with the original +> source files, run the Tier 1 REST API commands in Step 2a once you have the file key." + +--- + +### Tier 1 — REST API (Highest Fidelity) + +**Requires:** `FILE_KEY` and `FIGMA_TOKEN`. + +#### Method A — Original Image Fills + +Use this to download **photos, textures, and raster images** that were uploaded to +Figma (identified by `imageRef` in node fill data). Returns the original source file +at its native resolution — never a re-render. + +```bash +# Step A.1 — Get all image fill URLs in the file +curl -s \ + -H "X-Figma-Token: $FIGMA_TOKEN" \ + "https://api.figma.com/v1/files/$FILE_KEY/images" \ + -o /tmp/figma_image_fills.json + +# Response: { "images": { "": "", ... } } + +# Step A.2 — Get node fill data to match imageRef → node +curl -s \ + -H "X-Figma-Token: $FIGMA_TOKEN" \ + "https://api.figma.com/v1/files/$FILE_KEY/nodes?ids=$NODE_IDS" \ + -o /tmp/figma_nodes.json +# In the response, look for: "fills": [{ "type": "IMAGE", "imageRef": "abc123" }] +# Match "abc123" → URL from figma_image_fills.json + +# Step A.3 — Download to assets folder +mkdir -p src/assets/images src/assets/icons +IMAGE_URL=$(jq -r '.images[""]' /tmp/figma_image_fills.json) +curl -sL "$IMAGE_URL" -o src/assets/images/hero-background.jpg +``` + +> **URL expiry:** image fill URLs expire in **14 days**. Download during the session. + +#### Method B — Node Export (SVG, PNG, JPG) + +Use this to export **any node** as SVG, PNG, or JPG. Best for logos, custom icons, +vector illustrations, and raster compositions. + +```bash +mkdir -p src/assets/images src/assets/icons + +# SVG export (vectors — logos, icons, illustrations) +curl -s \ + -H "X-Figma-Token: $FIGMA_TOKEN" \ + "https://api.figma.com/v1/images/$FILE_KEY?ids=$NODE_IDS&format=svg&svg_outline_text=false&contents_only=true" \ + -o /tmp/figma_svg_export.json + +jq -r '.images | to_entries[] | "\(.key)\t\(.value)"' /tmp/figma_svg_export.json | \ +while IFS=$'\t' read -r nodeId url; do + filename="$(echo "$nodeId" | tr ':' '-').svg" + curl -sL "$url" -o "src/assets/icons/$filename" + echo "Downloaded $nodeId → src/assets/icons/$filename" +done + +# PNG export at 2× (raster compositions, hero banners) +curl -s \ + -H "X-Figma-Token: $FIGMA_TOKEN" \ + "https://api.figma.com/v1/images/$FILE_KEY?ids=$NODE_IDS&format=png&scale=2&contents_only=true" \ + -o /tmp/figma_png_export.json + +jq -r '.images | to_entries[] | "\(.key)\t\(.value)"' /tmp/figma_png_export.json | \ +while IFS=$'\t' read -r nodeId url; do + filename="$(echo "$nodeId" | tr ':' '-').png" + curl -sL "$url" -o "src/assets/images/$filename" +done +``` + +**Key export parameters:** + +| Parameter | Value | When to use | +| ------------------ | ------- | ---------------------------------------------------- | +| `format` | `svg` | Logos, icons, vector illustrations | +| `format` | `png` | Hero backgrounds, thumbnails — always pair `scale=2` | +| `format` | `jpg` | Photos without transparency — use `scale=2` | +| `scale` | `2` | **Always for PNG/JPG** — retina-quality output | +| `svg_outline_text` | `false` | Keep text as `` elements (smaller, accessible) | +| `contents_only` | `true` | Render the node in isolation (default) | + +> **Export URL expiry:** export URLs expire in **30 days**. Download immediately. + +--- + +### Tier 2 — Localhost URL Download (Desktop MCP Fallback) + +**Use when:** the file key is unavailable and `figma_get_design_context` returned +localhost URLs (e.g. `http://localhost:3845/assets/abc123.png`). + +These URLs are served by the Figma desktop app's in-memory renderer and are accessible +via `curl` during the active Figma session. They are **not** the original source file +(they are a renderer output), but they are substantially better than placeholders and +can be committed to the repository. + +```bash +mkdir -p src/assets/images src/assets/icons + +# Extract localhost URLs from a design context output and download them +# Replace with the actual URL found in figma_get_design_context output +curl -sL "http://localhost:3845/assets/.png" -o src/assets/images/hero-background.png +curl -sL "http://localhost:3845/assets/.svg" -o src/assets/icons/logo.svg +``` + +**Finding localhost URLs in design context output:** + +In the React+Tailwind code returned by `figma_get_design_context`, look for: + +- `const imgXxx = "http://localhost:3845/assets/.";` at the top of the output +- `` or `background-image` references inline + +Each `const` at the top is an image asset. Note its variable name, the URL, and which +Figma node it belongs to (from context around the `` tag). + +**Limitations of Tier 2 assets:** + +- Raster renders — vectors become PNGs, not SVGs +- Renderer resolution (typically 2×) — adequate for most uses +- Expire when the Figma desktop app closes — **must be downloaded before closing Figma** +- Must be renamed from `.png` to descriptive names before committing + +**Commit as-is** — they are real assets. Add a comment in the asset manifest: + +```typescript +// TODO: Replace with Tier 1 REST API export once FILE_KEY is available +heroBg: 'assets/images/hero-background.png', // extracted from Figma session +``` + +--- + +### Tier 3 — `figma_get_screenshot` per Node + +**Use when:** no file key AND no localhost URLs were produced for a specific node. + +`figma_get_screenshot` renders any currently-selected Figma node as a PNG screenshot. +Ask the user to select each image node in Figma, then call the tool. + +``` +// 1. Ask: "In Figma, please click the [Hero Background] layer to select it." +// 2. After confirmation: +figma_get_screenshot({}) +// 3. The returned image is a 1× screen-capture PNG. Save it to src/assets/images/. +``` + +**Limitations:** + +- 1× resolution — suitable as a placeholder but blurry on retina screens +- Rasterizes all vectors — logos become PNGs +- May include surrounding canvas elements + +Label these assets clearly in the manifest: + +```typescript +// TODO: Re-export at 2× via Tier 1 or Tier 2 — current version is 1× screen capture +heroBg: 'assets/images/hero-background.png', +``` + +--- + +### Tier 4 — CSS Fallback (Last Resort Only) + +**Use only when** an asset is confirmed to be a pure color fill or a gradient — not when +an image exists in Figma but extraction failed. Never use Tier 4 because extraction +feels difficult. + +```scss +// Only acceptable when the Figma layer is genuinely a gradient, not a photo +.hero-banner { + // TODO: Replace with real asset — extraction blocked (no file key, no session URL) + background: linear-gradient(135deg, #0d1b3e 0%, #1a0533 100%); +} +``` + +If you use Tier 4, add the `TODO` comment and include it in the post-session handoff +notes to the user. + +--- + +## Step 3 — Build an Asset Manifest + +After extraction, create a manifest so the implementation phase uses consistent paths: + +```typescript +// src/app//_assets.ts — generated during Phase 1h + +export const PAGE_ASSETS = { + // Figma node 123:456 — "Hero/Background" layer + // Tier 1: REST API PNG export at 2× + heroBg: 'assets/images/hero-background.jpg', + + // Figma node 789:012 — "_Logo/Main" layer + // Tier 1: REST API SVG export + logo: 'assets/icons/logo.svg', + + // Figma node 345:678 — "Card/Thumbnail" layer + // Tier 2: localhost URL download (TODO: re-export via REST API) + cardThumbnail: 'assets/images/card-thumbnail.png', +} as const; +``` + +Name files by layer purpose, not by node ID. + +--- + +## Step 4 — Angular Usage Patterns + +### Static images via `NgOptimizedImage` + +```html + +Dashboard hero background +``` + +Import `NgOptimizedImage` in the component's `imports` array. Note: `NgOptimizedImage` +does **not** work for inline base64 images. + +### Background images via SCSS + +```scss +.dashboard-hero { + background-image: url('/assets/images/hero-background.jpg'); + background-size: cover; + background-position: center; +} +``` + +### Inline SVG logos + +```html +Company logo +``` + +### Igx-icon for kit icons (do NOT extract as assets) + +Standard Material icons and `imx-icons` (Material Icons Extended) are registered at +runtime — never extract them as image files: + +```html +settings +``` + +See `figma-component-map.md § Material Icons Extended` for setup. + +--- + +## Pitfalls + +| Pitfall | Consequence | Fix | +| ------------------------------------------------------------ | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| Skipping asset extraction entirely (gradient placeholders) | Implementation looks nothing like the design; Phase 5 fails | Always use at least Tier 2 or Tier 3 — never skip | +| Not asking for the file key before starting extraction | Defaults to Tier 2/3 when Tier 1 was actually possible | Ask for the file key at the start of Phase 1h (see Step 0) | +| Using localhost URLs without downloading them in the session | URLs expire when Figma closes; assets become broken | Download with `curl` immediately; commit the files | +| Naming assets by node ID ("node-123-456.png") | Unmaintainable; breaks if Figma is reorganized | Name by layer purpose: `hero-background.jpg`, `company-logo.svg` | +| Using `figma_get_screenshot` for SVG logos | Logo is rasterized to PNG; loses vector scalability | Use Tier 1 Method B with `format=svg` instead; fall back to Tier 2 only if unavailable | +| Exporting PNG at `scale=1` | Blurry on HiDPI/retina screens | Always use `scale=2` | +| Storing Figma CDN export URLs in source code | URLs expire in 14–30 days; breaks production | Only store local `src/assets/...` paths in code | +| Downloading SVG with `svg_outline_text=true` (default) | All text converted to paths; larger file; no accessibility | Set `svg_outline_text=false` | +| Extracting Ignite UI component instances as images | Produces a static screenshot instead of an interactive component | Identify layer names from `figma-component-map.md`; those are components, not assets | +| Extracting background colors or gradients as images | Inflates bundle size, breaks theming | Colors → CSS custom properties or Ignite UI theming tokens | +| Not creating asset directories before running curl | Writes fail silently or to the wrong path | Always run `mkdir -p src/assets/images src/assets/icons` first | +| Large SVGs from complex illustrations | Slow render, large bundle | Consider PNG for illustrations > 50KB as SVG; SVG is best for logos and icons | diff --git a/.claude/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md b/.claude/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md new file mode 100644 index 0000000..6ce6526 --- /dev/null +++ b/.claude/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md @@ -0,0 +1,324 @@ +# Figma Variables → Ignite UI Angular Theming Bridge + +> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** +> +> Use this file in Phase 3 to translate Figma variable values (from `figma_get_variable_defs`) +> into Ignite UI Theming MCP inputs. Read this file in full before calling any theming tool. + +--- + +## How the Indigo.Design UI Kits Organize Variables + +The **Indigo.Design UI Kits** are Figma component libraries published by Infragistics. +Designers build their own app frames in Figma using these kits as shared libraries. +The kits come in four design-system variants, each with light and dark themes: + +| Kit variant | Figma library name pattern | Ignite UI `designSystem` | +| ---------------------- | ----------------------------------------------- | ------------------------ | +| Material (most common) | `Indigo.Design UI Kit for Material` | `"material"` | +| Fluent | `Indigo.Design UI Kit for Fluent` | `"fluent"` | +| Bootstrap | `Indigo.Design UI Kit for Bootstrap` | `"bootstrap"` | +| Indigo | `Indigo.Design UI Kit` / `Indigo.Design System` | `"indigo"` | + +**Identifying the active kit variant** is the first task in Phase 3 because it sets +the `designSystem` parameter for `theming_create_theme`. Use these signals in **strict +precedence order** — stop at the first clear match: + +1. **Library source name** — `figma_get_design_context` and `figma_get_metadata` responses + may reference the source library file name (e.g. `"Indigo.Design UI Kit for Material"`). +2. **Variable collection name** — `figma_get_variable_defs` may return collection names + that include the design system (e.g. `Material/color/primary`). +3. **Elevation variable structure** — inspect the `Elevations/*` variables from + `figma_get_variable_defs`: + - **Three-layer DROP_SHADOW** (umbra + penumbra + ambient, `Elevations/Shadow 01-03`) → **Material** + - **Single-layer DROP_SHADOW** → Indigo, Fluent, or Bootstrap +4. **Palette shade naming** — variables named `primary/500`, `primary/100`–`primary/900` + follow the Material 100–900 convention → likely **Material**. +5. **Visual heuristics** (use only when all above are inconclusive) — see the + [Design System Detection table](#design-system-detection-from-figma) below. + +> **Never use font name as a primary signal.** "Titillium Web" is the default body font +> in the Indigo.Design UI Kit for Material — it is not exclusive to any single kit variant. + +All four kit variants share the same variable naming conventions described below. The Ignite UI theming system uses Figma variable collections that mirror its own token structure: + +``` +Primitives collection → raw palette values (e.g. blue/500 = #6200EE) +Semantic collection → role-based aliases (e.g. color/primary = alias → blue/500) +Component collection → per-component overrides (e.g. button/background = alias → color/primary) +``` + +The `figma_get_variable_defs` response returns a flat map of resolved variable names to values. Use the sections below to identify which variables map to which theming inputs. + +--- + +## Global Palette Mapping + +### Primary Color + +| Figma Variable Pattern | Theming Input | Notes | +| ---------------------- | ------------------------------------- | --------------------------------------- | +| `color/primary` | `primary` in `theming_create_palette` | Use the resolved hex value | +| `primary/500` | `primary` | The 500 shade is the seed color | +| `Primary/Default` | `primary` | Alternative naming in some kit versions | +| `palette/primary/500` | `primary` | Prefixed naming pattern | + +> **Parameter names:** `theming_create_palette` uses `primary`, `secondary`, `surface` +> (short names). `theming_create_theme` uses `primaryColor`, `secondaryColor`, +> `surfaceColor` (long names). Do **not** mix them up. + +### Secondary / Accent Color + +| Figma Variable Pattern | Theming Input | Notes | +| ---------------------- | --------------------------------------- | ---------------------------------- | +| `color/secondary` | `secondary` in `theming_create_palette` | — | +| `secondary/500` | `secondary` | — | +| `Secondary/Default` | `secondary` | — | +| `color/accent` | `secondary` | Some kit variants call it "accent" | + +### Surface / Background Color + +| Figma Variable Pattern | Theming Input | Notes | +| ---------------------- | ------------------------------------- | ------------------- | +| `color/surface` | `surface` in `theming_create_palette` | The main background | +| `surface/default` | `surface` | — | +| `Surface` | `surface` | — | +| `color/background` | `surface` | Alternative naming | + +### Gray / Neutral Palette + +The Ignite UI theming system derives the gray scale automatically from the surface color. +You do **not** need to pass gray values to `theming_create_palette` explicitly unless you +need a custom gray family. If the Figma file has explicit gray variables, compare them +against the auto-generated palette after calling `theming_create_palette` and only add +a custom gray override if they differ significantly. + +### Semantic Status Colors + +| Figma Variable Pattern | Theming Input | Notes | +| -------------------------------- | ------------------------------------------ | -------- | +| `color/success` or `success/500` | `successColor` in `theming_create_palette` | Optional | +| `color/warning` or `warning/500` | `warningColor` in `theming_create_palette` | Optional | +| `color/error` or `error/500` | `errorColor` in `theming_create_palette` | Optional | +| `color/info` or `info/500` | `infoColor` in `theming_create_palette` | Optional | + +--- + +## Typography Mapping + +| Figma Variable Pattern | Theming Input | Notes | +| -------------------------------- | --------------------------------------------------- | ------------------------------------- | +| `typography/font-family` | `fontFamily` in `theming_create_typography` | Primary font | +| `typography/body/font-family` | `fontFamily` | Body font family | +| `typography/heading/font-family` | `fontFamily` | Use if heading font differs from body | +| `font/primary` | `fontFamily` | Alternative naming | +| `font/display` | Pass as `displayFontFamily` if the tool supports it | Display/headline font | + +> **fontFamily double-quote bug:** `theming_create_theme` may double-wrap the fontFamily +> string in its Sass output, producing invalid Sass such as `""'Titillium Web', sans-serif""`. +> If you see this pattern, strip the outer quotes before applying to `styles.scss`: +> +> ```scss +> // BAD (generated with bug) +> $font-family: +> '' 'Titillium Web', +> sans-serif ''; +> // GOOD (manually corrected) +> $font-family: 'Titillium Web', sans-serif; +> ``` + +> **Comma-separated font families** must be wrapped in parentheses when used in Sass +> typography mixins: +> +> ```scss +> // BAD — parsed as multiple Sass arguments +> @include typography($font-family: 'Roboto', 'Arial', sans-serif); +> // GOOD +> @include typography( +> $font-family: ( +> 'Roboto', +> 'Arial', +> sans-serif, +> ) +> ); +> ``` + +--- + +## Spacing, Sizing, and Roundness — Do Not Map Directly + +> **These Ignite UI theming tools are NOT equivalent to Figma spacing values.** +> Do not create a mapping between Figma pixel values and these tools. + +`theming_set_spacing` and `theming_set_roundness` accept **multipliers**, not pixel values. Passing a Figma `spacing/md = 16` as `theming_set_spacing({ spacing: 16 })` would produce a 1600% increase over the default — a catastrophic result. + +`theming_set_size` accepts a **density enum** (`small`, `medium`, `large`) — it controls how tightly packed components render, not a pixel measurement. + +### When to touch these tools (sparingly) + +| Tool | Use only when | Never use because | +| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `theming_set_size` | The Figma design clearly and consistently uses a noticeably tighter or looser component density than the design system default — e.g. a data-dense admin UI vs a spacious marketing page | A Figma spacing variable happens to match the name "compact" | +| `theming_set_spacing` | Explicitly requested by the user or required to match a very specific density contract; default (1.0) should be the starting point | A Figma `spacing/*` pixel value looks similar to the multiplier number | +| `theming_set_roundness` | The entire app has a clearly distinct border-radius language from the design system default (e.g. fully squared off vs fully rounded) | A Figma `border-radius/md = 8` maps numerically to the multiplier | + +### The correct adjustment path + +When a specific component needs tighter or looser density or spacing, scope `--ig-size` +and `--ig-spacing` to that component’s selector — not raw CSS overrides, not +`::ng-deep`. Both `theming_set_size` and `theming_set_spacing` accept a `component` +parameter that generates exactly this scoped output: + +``` +// Scoped size for one component type +theming_set_size({ component: "calendar", size: "small", platform: "angular" }) +// → igx-calendar { --ig-size: var(--ig-size-small); } + +// Scoped spacing: 0.75 = 75% of default +theming_set_spacing({ component: "calendar", spacing: 0.75, platform: "angular" }) +// → igx-calendar { --ig-spacing: 0.75; } +``` + +For compound components, scope to a sub-component selector via the `scope` parameter: + +``` +theming_set_size({ scope: "igx-grid-toolbar", size: "small", platform: "angular" }) +``` + +Or set the CSS custom properties directly in SCSS: + +```scss +igx-calendar { + --ig-size: var(--ig-size-small); + --ig-spacing: 0.75; +} +``` + +The Indigo.Design kit’s component proportions are already calibrated for each design +system; start from the defaults and only adjust when there is a clear visual reason. + +--- + +## Light vs Dark Mode Detection + +Detect from the Figma artboard: + +| Figma Signal | Action | +| -------------------------------------------------------- | ---------------------------------------------------------------------- | +| Dark artboard background (`#121212`, `#1a1a1a`, similar) | Use `variant: "dark"` in `theming_create_theme` | +| Light artboard background (`#fff`, `#f5f5f5`, similar) | Use `variant: "light"` in `theming_create_theme` | +| Multiple artboards — one light, one dark | Generate both theme variants with a `prefers-color-scheme` media query | +| `color/mode` variable present | Its value (`light` or `dark`) is the authoritative signal | + +--- + +## Design System Detection from Figma + +| Figma Visual Signal | Likely Design System | `designSystem` Value | +| ------------------------------------------------------------------ | -------------------------- | ----------------------- | +| Three-layer `DROP_SHADOW` on elevation variables (`Shadow 01-03`) | Material Design | `"material"` | +| Prominent single-layer shadows, rounded cards, ripple effects | Material Design | `"material"` | +| Flat surfaces, sharp corners, Segoe/Inter font | Microsoft Fluent | `"fluent"` | +| Component borders, Bootstrap-like grid | Bootstrap | `"bootstrap"` | +| Heavy use of purple/indigo accents, rounded corners, single shadow | Infragistics Indigo | `"indigo"` | +| `primary/500`, `primary/900` palette shade naming | Material (100–900 palette) | `"material"` | +| Explicit `$light-material-schema` or similar in Figma descriptions | Match the schema name | Use corresponding value | + +--- + +## Per-Component Token Resolution + +For each Ignite UI Angular component you use, follow this lookup order: + +### Step 1: Discover component tokens + +``` +theming_get_component_design_tokens({ component: "" }) +``` + +The result lists every available token with its name, type, and description. + +### Step 2: Match Figma variables to token names + +The **Indigo.Design UI Kits** use component-level variables that follow the pattern: + +``` +// +``` + +Examples: + +- `button/background` → token `background` in the button component +- `button/foreground` or `button/text-color` → token `foreground-color` +- `chip/background/selected` → token `selected-chip-color` +- `grid/header-background` → token `header-background` +- `navbar/background` → token `background` + +**Lookup process:** + +1. Take the Figma variable name (e.g. `button/background`) +2. Strip the component prefix (`background`) +3. Match it against the token list from `theming_get_component_design_tokens` +4. If no exact match, find the token whose description mentions the same visual role + +### Step 3: Common component token patterns + +| Component | Figma Variable | Likely Token Name | Notes | +| --------- | -------------------------- | ----------------------- | ----------------------- | +| Button | `button/background` | `background` | For `contained` variant | +| Button | `button/foreground` | `foreground-color` | Text color | +| Button | `button/border` | `border-color` | For `outlined` variant | +| Chip | `chip/background` | `background` | Default state | +| Chip | `chip/selected-background` | `selected-chip-color` | — | +| Grid | `grid/header/background` | `header-background` | — | +| Grid | `grid/row/background` | `content-background` | — | +| Grid | `grid/row/hover` | `row-hover-background` | — | +| Navbar | `navbar/background` | `background` | — | +| Input | `input/background` | `box-background` | Box/filled variant | +| Input | `input/border` | `border-color` | Line/border variant | +| Card | `card/background` | `background` | — | +| Card | `card/border` | `border-color` | — | +| List | `list/item/background` | `item-background` | — | +| List | `list/item/hover` | `item-hover-background` | — | +| Dialog | `dialog/background` | `background` | — | + +### Step 4: Generate component theme + +Pass **only tokens that differ from the global theme** to avoid over-specification: + +``` +theming_create_component_theme({ + component: "", + platform: "angular", + licensed: , + tokens: { + "background": "", + "foreground-color": "" + // only include tokens whose value differs from the generated global palette + } +}) +``` + +Apply the result using the `@include tokens()` call returned by the tool. + +--- + +## Variable Resolution Priority + +When multiple Figma variables could map to the same theming input, use this priority: + +1. **Component-scoped variable** (e.g. `button/background`) → per-component token +2. **Semantic role variable** (e.g. `color/primary`) → global palette input +3. **Primitive variable** (e.g. `primary/500`) → global palette seed color +4. **Raw hex/rgb value** (no variable) → extract directly from the design context + +--- + +## What to Skip + +Do **not** call theming tools for: + +- Chart, gauge, and map DV components → configure via component `[input]` bindings only +- Tile Manager and Dock Manager → these are web components with their own CSS custom properties +- Pure layout CSS (margins, grid columns, flex gaps) → write directly in SCSS +- Icon SVG fill colors → use `color` CSS property or the custom `--foreground` CSS property on the `igx-icon` host or its parent diff --git a/.claude/skills/igniteui-angular-figma-to-app/references/figma-component-map.md b/.claude/skills/igniteui-angular-figma-to-app/references/figma-component-map.md new file mode 100644 index 0000000..636f03f --- /dev/null +++ b/.claude/skills/igniteui-angular-figma-to-app/references/figma-component-map.md @@ -0,0 +1,305 @@ +# Indigo.Design UI Kit → Ignite UI Angular Component Map + +> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** +> +> The **Indigo.Design UI Kits** are Figma component libraries (Material, Fluent, Bootstrap, +> Indigo variants) that designers use to build their app screens. Every component instance +> in a design file is drawn from one of these libraries and maps 1:1 to an Ignite UI +> Angular control. +> +> Use this file in Phase 2a to map Figma layer names — as they appear in the kit +> library — to Ignite UI Angular selectors, `get_doc` keys, and key inputs. When a +> layer name is not in this table, call `list_components` then `get_doc` on the closest +> match. + +--- + +## How to Use This File + +1. Find the kit component name (as it appears in the Figma layers panel or the + Indigo.Design kit library) in the **Kit Component Name** column. +2. Read the **Angular Selector** and **IgxXxx Class** for the template. +3. Try the **`get_doc` Key** with `get_doc({ framework: "angular", name: "" })`. + **The doc catalog covers only a subset of components** (verify with `list_components` + once). When no doc exists for a key, use the + [`igniteui-angular-components`](../../igniteui-angular-components/SKILL.md) / + [`igniteui-angular-grids`](../../igniteui-angular-grids/SKILL.md) skill reference files + for usage patterns and `search_api` for member-level API lookups — do not guess. +4. Consult **Key Inputs / Variants** for the properties most commonly configured from + Figma variants. + +> The component names are identical across all four kit variants (Material, Fluent, +> Bootstrap, Indigo). The kit variant determines the theme style, not the component name. + +--- + +## Button Components + +| Kit Component Name | Angular Selector | IgxXxx Class | `get_doc` Key | Key Inputs / Variants | +| -------------------------------------- | ------------------------------------ | ------------------------- | -------------- | ---------------------------------------------------------- | +| `_Button/Flat` | ` +``` + +> **Key inputs summary:** +> - `[rowEditable]="true"` — enables the Done/Cancel overlay per row +> - `[editable]="true"` on each `igx-column` — marks which fields the user can change +> - `[primaryKey]` — **required** for editing to work +> - `[autoGenerate]="false"` — always define columns explicitly when editing is enabled so you control which fields are editable +> - `` with `` — adds hover Edit/Delete buttons and an optional Add Row button automatically + +### Programmatic Row Adding with Default Values + +When starting a new row programmatically, pre-populate fields using `(cellEditEnter)` on the new row: + +```typescript +onCellEditEnter(event: IGridEditEventArgs) { + if (event.isAddRow && event.column.field === 'available') { + event.newValue = true; // default new cars to available + } + if (event.isAddRow && event.column.field === 'year') { + event.newValue = new Date().getFullYear(); + } +} +``` + +```html + +``` + +--- + +## Batch Editing & Transactions + +> **Docs:** [Batch Editing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/batch-editing) (substitute URL prefix per grid type) + +> **Applies to**: Flat Grid, Tree Grid, and Hierarchical Grid. **Pivot Grid does NOT support batch editing.** +> Use batch editing when users need to **edit many rows at once** and commit or discard all changes together, with undo/redo support. + +### Enabling Batch Editing + +```html + + + + + + + + + + +``` + +### Managing Transactions + +```typescript +commitChanges() { + // Exit any active edit before committing + this.gridRef().endEdit(true); + this.gridRef().transactions.commit(this.gridRef().data); +} + +undoLast() { + // Must exit edit mode before undo/redo + this.gridRef().endEdit(true); + this.gridRef().transactions.undo(); +} + +redoLast() { + this.gridRef().endEdit(true); + this.gridRef().transactions.redo(); +} + +discardAll() { + this.gridRef().endEdit(false); + this.gridRef().transactions.clear(); +} +``` + +Use `canUndo` and `canRedo` to control button state: + +```html + + + + +``` + +### Transaction State + +```typescript +// Check if there are pending changes +const hasPendingChanges = this.gridRef().transactions.getAggregatedChanges(false).length > 0; + +// Get all pending transactions +const pending = this.gridRef().transactions.getAggregatedChanges(true); +// Each transaction has: { id, type ('add'|'update'|'delete'), newValue } +``` + +### Sending Batch Changes to Server + +```typescript +saveToServer() { + const changes = this.gridRef().transactions.getAggregatedChanges(true); + + const adds = changes.filter(t => t.type === 'add').map(t => t.newValue); + const updates = changes.filter(t => t.type === 'update').map(t => ({ id: t.id, ...t.newValue })); + const deletes = changes.filter(t => t.type === 'delete').map(t => t.id); + + this.dataService.saveBatch({ adds, updates, deletes }).subscribe(() => { + this.gridRef().transactions.commit(this.gridRef().data); + this.gridRef().transactions.clear(); + }); +} +``` + +## Excel-Style Editing Workflows + +### Inline Cell Editing with Validation + +```html + + + + + + +``` + +```typescript +import { Validators } from '@angular/forms'; + +emailValidators = [Validators.required, Validators.email]; +quantityValidators = [Validators.required, Validators.min(0), Validators.max(9999)]; + +onCellEditDone(event: IGridEditDoneEventArgs) { + // React to edits — e.g., recalculate totals + if (event.column.field === 'quantity' || event.column.field === 'unitPrice') { + this.recalculateRowTotal(event.rowID); + } +} +``` + +### Clipboard Paste for Bulk Edit + +Grids support paste from Excel/spreadsheets by default. Configure clipboard behavior: + +```html + + +``` + +### Row Adding via UI + +```typescript +// Flat Grid / Hierarchical Grid: +this.gridRef().beginAddRowByIndex(0); // at top +this.gridRef().beginAddRowById('ALFKI'); // under a specific row +this.gridRef().beginAddRowByIndex(this.gridRef().data.length); // at end + +// Tree Grid — add as child of a parent: +this.treeGridRef().addRow(newRowData, parentRowID); // add row as child of parentRowID +this.treeGridRef().beginAddRowByIndex(3, true); // add as child of row at index 3 +``` + +Use with Action Strip for visual add/edit actions: + +```html + + + + + + +``` + +## Editing Events Reference + +All grids fire a consistent sequence of events during cell and row editing: + +| Event | Fires When | Cancelable | +|---|---|---| +| `(rowEditEnter)` | Row enters edit mode | Yes | +| `(cellEditEnter)` | Cell enters edit mode (after `rowEditEnter`) | Yes | +| `(cellEdit)` | Cell value is about to be committed | Yes | +| `(cellEditDone)` | Cell value has been committed | No | +| `(cellEditExit)` | Cell exits edit mode | No | +| `(rowEdit)` | Row edit is about to be committed (Done button) | Yes | +| `(rowEditDone)` | Row edit has been committed | No | +| `(rowEditExit)` | Row exits edit mode | No | + +Canceling `(cellEdit)` keeps the cell in edit mode — the value won't commit until Cancel is clicked: + +```typescript +onCellEdit(event: IGridEditEventArgs) { + if (!event.valid) { + event.cancel = true; // prevent committing invalid values + } +} +``` + +## Validation + +### Template-Driven Validation + +Apply Angular validators directly on columns: + +```html + + +``` + +Supported built-in validators: `required`, `min`, `max`, `email`, `minlength`, `maxlength`, `pattern`. + +### Reactive Form Validation + +Use the `formGroupCreated` event to add custom validators when a row enters edit mode: + +```html + + +``` + +```typescript +onFormGroupCreated(event: IGridFormGroupCreatedEventArgs) { + const { formGroup } = event; + formGroup.get('endDate')?.addValidators(this.dateAfterValidator('startDate')); +} +``` + +### Validation Service + +The grid exposes a `validation` service: + +```typescript +// Check if the grid is in a valid state +const isValid = this.gridRef().validation.valid; + +// Get all records with validation errors +const invalid = this.gridRef().validation.getInvalid(); + +// Clear validation state for a specific record (or all if no id) +this.gridRef().validation.clear(recordId); +``` + +## Summaries + +### Built-In Summaries + +```html + +``` + +Default summaries by type: +- **number**: Count, Min, Max, Sum, Average +- **date**: Count, Earliest, Latest +- **string/boolean**: Count + +### Custom Summary Operand + +```typescript +import { IgxNumberSummaryOperand } from 'igniteui-angular/grids/core'; +import { IgxSummaryResult } from 'igniteui-angular/core'; + +class RevenueSummary extends IgxNumberSummaryOperand { + operate(data: number[]): IgxSummaryResult[] { + const result = super.operate(data); + result.push({ + key: 'margin', + label: 'Avg Margin', + summaryResult: data.length ? data.reduce((a, b) => a + b, 0) / data.length * 0.15 : 0 + }); + return result; + } +} + +// Use in component +revenueSummary = RevenueSummary; +``` + +```html + +``` + +### Summaries with Grouping + +When grouping is enabled, summaries appear for each group. Control this with: + +```html + + +``` + +## Key Rules + +1. **Choose the right editing mode** — cell editing (`[editable]` + `(cellEditDone)`) for immediate per-cell saves; row editing (`[rowEditable]="true"` + `(rowEditDone)`) for confirm/cancel per row (**recommended default for CRUD**); batch editing (`[batchEditing]="true"`) for accumulate-then-commit with undo/redo +2. **`[primaryKey]` is required for all editing** — row editing, batch editing, row adding, and row deletion all depend on it (Flat, Tree, Hierarchical, Pivot grids; NOT Grid Lite) +3. **Always set `[autoGenerate]="false"` when editing** — define columns explicitly and mark each with `[editable]="true"` to control exactly what users can change +4. **Batch editing requires `[primaryKey]`** — call `endEdit(true)` before `transactions.undo()`/`redo()`, commit via `transactions.commit(data)` +5. **Cancelable events** — use `event.cancel = true` in `(cellEdit)`, `(rowEdit)`, `(rowEditEnter)`, `(cellEditEnter)` to prevent the action +6. **Validation** — use template-driven validators on columns (`required`, `min`, `max`, `email`, `pattern`) or reactive validators via `(formGroupCreated)` + +Universal rules (viewChild types, directive bundles, signals) are in the [hub](../SKILL.md#universal-rules-every-grid-type). + +## See Also + +- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns +- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization +- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations +- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection +- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.claude/skills/igniteui-angular-grids/references/features.md b/.claude/skills/igniteui-angular-grids/references/features.md new file mode 100644 index 0000000..3d51203 --- /dev/null +++ b/.claude/skills/igniteui-angular-grids/references/features.md @@ -0,0 +1,221 @@ +# Grid Features — Grouping, Summaries, Toolbar, Export, Row Drag & More + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For grid setup, column config, sorting, filtering, selection — see [`structure.md`](./structure.md). +> For Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics — see [`types.md`](./types.md). +> For full editing coverage (cell/row/batch) — see [`editing.md`](./editing.md). + +## Contents + +- [Editing](#editing) +- [Grouping (Flat and Tree Grid only)](#grouping-flat-and-tree-grid-only) +- [Summaries](#summaries) +- [Cell Merging](#cell-merging) +- [Toolbar](#toolbar) +- [Export](#export) +- [Virtualization & Performance](#virtualization--performance) +- [Row Drag](#row-drag) +- [Action Strip](#action-strip) +- [Master-Detail (Grid only)](#master-detail-grid-only) +- [Clipboard](#clipboard) +- [Key Rules](#key-rules) + +## Editing + +> **Full editing coverage is in [`editing.md`](./editing.md)**, which includes cell editing, row editing, batch editing with transactions, row adding/deleting, validation, and summaries. Use that reference for any editing task. + +Quick reference: + +| Mode | Key properties | +|---|---| +| **Cell editing** | `[editable]="true"` on columns + `(cellEditDone)` | +| **Row editing** (recommended default) | `[rowEditable]="true"` + `[editable]="true"` on columns + `(rowEditDone)` | +| **Batch editing** | `[batchEditing]="true"` + `[rowEditable]="true"` + `transactions.commit(data)` | + +## Grouping (Flat and Tree Grid only) + +The two grids group differently: + +- **Flat Grid** has built-in GroupBy — `[groupable]="true"` on columns (not on the grid component itself) plus the `groupBy()`/`clearGrouping()` API. +- **Tree Grid** has no `groupBy()` API — it groups via `IgxTreeGridGroupByAreaComponent` (``) paired with the tree-grid grouping pipe that reshapes flat data into a grouped hierarchy. + +```html + + + + + + {{ groupRow.expression.fieldName }}: {{ groupRow.value }} ({{ groupRow.records.length }} items) + + +``` + +Programmatic (Flat Grid): + +```typescript +this.gridRef().groupBy({ fieldName: 'category', dir: SortingDirection.Asc }); +this.gridRef().clearGrouping('category'); +``` + +For advanced programmatic grouping patterns — see [`data-operations.md`](./data-operations.md). + +## Summaries + +> **Full summaries coverage — built-in summaries, custom summary operands, and summaries with grouping — is in [`editing.md`](./editing.md#summaries).** +> +> Quick reference: enable per-column summaries with `[hasSummary]="true"` on an `igx-column`. Default operands: **number** → Count/Min/Max/Sum/Average; **date** → Count/Earliest/Latest; **string/boolean** → Count. + +## Cell Merging + +Merge adjacent cells with equal values: + +```html + + + +``` + +Grid merge modes (`cellMergeMode`): +- `'onSort'` — merge only when the column is sorted **(default)** +- `'always'` — merge regardless of sort state + +Or apply a custom merge strategy at the **grid level** (not column): + +```html + + + +``` + +```typescript +import { DefaultMergeStrategy } from 'igniteui-angular/core'; +// import { DefaultMergeStrategy } from '@infragistics/igniteui-angular/core'; for licensed package + +// Extend DefaultMergeStrategy and override comparer +class PriceRangeMergeStrategy extends DefaultMergeStrategy { + public override comparer(prevRecord: any, record: any, field: string): boolean { + return Math.abs(prevRecord[field] - record[field]) < 10; + } +} + +customMerge = new PriceRangeMergeStrategy(); +``` + +## Toolbar + +> **Full docs in the MCP** — `get_doc` with `grid-toolbar`, `treegrid-toolbar`, or `hierarchicalgrid-toolbar` covers title, built-in actions (hiding, pinning, advanced filtering, exporter), custom content, progress indication, and theming. Prefer those over memory. + +Toolbar components (`IgxGridToolbarComponent` and the action components) import from `igniteui-angular/grids/core` and nest inside the grid element: + +```html + + + Products + + + + + + + + + +``` + +## Export + +> **Full docs in the MCP** — `get_doc` with `grid-export-excel`, `treegrid-export-excel`, `hierarchicalgrid-export-excel`, `pivotGrid-export-excel`, or `exporter-pdf` covers setup, full-data vs. visible exports, multi-column headers, customization events, and known limitations. Prefer those over memory. + +Quick reference — exporter services (`IgxExcelExporterService`, `IgxCsvExporterService`, and their `*ExporterOptions`) import from `igniteui-angular/grids/core`; `inject()` the service and call `export(grid, options)` (respects filtering/sorting) or `exportData(data, options)` (raw data). + +## Virtualization & Performance + +Grids use virtualization by default for both rows and columns — no setup needed. For remote data/paging: + +```html + + +``` + +For full remote virtualization patterns — see [`paging-remote.md`](./paging-remote.md). + +## Row Drag + +```html + + + + arrow_right_alt + + +``` + +Handle drops via `igxDrop` on the target: + +```typescript +import { IDropDroppedEventArgs } from 'igniteui-angular/directives'; + +onDropAllowed(args: IDropDroppedEventArgs) { + this.targetGrid.addRow(args.dragData.data); // row data + this.sourceGrid.deleteRow(args.dragData.key); // primary key +} +``` + +## Action Strip + +Overlay actions on a row: + +```html + + + + + + + +``` + +## Master-Detail (Grid only) + +Expand rows to show arbitrary detail content: + +```html + + + + + +
+

Order Items for {{ dataItem.customer }}

+ + +
+
+
+``` + +## Clipboard + +Grids support copy to clipboard by default. Configure via: + +```html + + +``` + +## Key Rules + +1. **Cancelable events** — use `event.cancel = true` in `(rowEdit)`, `(cellEdit)`, `(sorting)`, `(filtering)` to prevent the action +2. **The `groupBy()` API is Flat Grid only** — Tree Grid groups via `igx-tree-grid-group-by-area` + grouping pipe; Hierarchical Grid uses row islands, Pivot Grid uses dimensions + +Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). + +## See Also + +- [`structure.md`](./structure.md) — Column config, sorting UI, filtering UI, selection +- [`types.md`](./types.md) — Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics +- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping +- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization +- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries +- [`state.md`](./state.md) — State persistence +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.claude/skills/igniteui-angular-grids/references/grid-migration.md b/.claude/skills/igniteui-angular-grids/references/grid-migration.md new file mode 100644 index 0000000..ae77b8d --- /dev/null +++ b/.claude/skills/igniteui-angular-grids/references/grid-migration.md @@ -0,0 +1,479 @@ +# Ignite UI for Angular - Grid Lite → Premium Data Grid Migration + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** + +## Purpose + +This skill automates the migration from the **open-source Grid Lite** (`igx-grid-lite`, MIT licensed) to the **Premium Data Grid** (`igx-grid`, commercially licensed). Use it when a project outgrows Grid Lite's read-only capabilities and needs enterprise features such as editing, selection, paging, grouping, summaries, export, or state persistence. + +## Required Workflow + +Grid APIs change between releases — do not write migration code from memory. Before producing migration code: + +1. **Identify the current Grid Lite usage** - read the user's existing component files to understand their column configuration, templates, data binding, and any `dataPipelineConfiguration` usage. +2. **Consult the grids skill** - read the relevant reference files from [`igniteui-angular-grids`](../SKILL.md) for the target features the user needs after migration. +3. **Use the MCP server when in doubt** - call `get_doc` or `search_docs` from the `igniteui-cli` MCP server (if available) for Angular to verify current API details. +4. **Only then produce output** - base all code on verified references, not memory. + +--- + +## When to Migrate + +Migrate from Grid Lite to the Premium Grid when the user needs **any** of these features: + +| Required Feature | Grid Lite | Premium Grid | +|---|---|---| +| Cell / Row / Batch editing | No | Yes | +| Row adding / deleting | No | Yes | +| Row / Cell / Column selection | No | Yes | +| Paging (client or remote) | No | Yes | +| GroupBy | No | Yes | +| Summaries (built-in & custom) | No | Yes | +| Column pinning | No | Yes | +| Column moving | No | Yes | +| Master-Detail rows | No | Yes (exclusive to flat grid) | +| Export (Excel / CSV) | No | Yes | +| Toolbar | No | Yes | +| State persistence | No | Yes | +| Advanced filtering | No | Yes | +| Action strip | No | Yes | +| Row drag | No | Yes | +| Clipboard support | No | Yes | +| Cell merging | No | Yes | + +> **IMPORTANT:** The upgrade path from Grid Lite is **always** to `igx-grid` (`IgxGridComponent`). Never recommend a different component type as a substitute. + +--- + +## Migration Checklist + +### Step 1 - Install / Verify the Premium Package + +Grid Lite uses the separate `igniteui-grid-lite` npm package. The Premium Grid is part of the main `igniteui-angular` (or `@infragistics/igniteui-angular`) package. + +> **Important:** Check `package.json` to determine which package variant is installed. If only `igniteui-grid-lite` is present, the user needs to install the full package. + +```bash +# Open-source package +npm install igniteui-angular + +# OR licensed package (requires private registry) +npm install @infragistics/igniteui-angular +``` + +The `igniteui-grid-lite` package can be removed after migration if no other Grid Lite instances remain: + +```bash +npm uninstall igniteui-grid-lite +``` + +### Step 2 - Update Imports + +**Before (Grid Lite):** + +```typescript +import { + IgxGridLiteComponent, + IgxGridLiteColumnComponent, + IgxGridLiteCellTemplateDirective, + IgxGridLiteHeaderTemplateDirective, +} from 'igniteui-angular/grids/lite'; +``` + +**After (Premium Grid):** + +```typescript +// Open-source +import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; + +// Licensed +// import { IgxGridComponent, IGX_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/grid'; +``` + +> **Key change:** The Premium Grid provides `IGX_GRID_DIRECTIVES` - a single convenience import that includes all grid directives (columns, templates, toolbar, paginator bindings, etc.). You no longer need to import each directive individually. + +### Step 3 - Update the Component Decorator + +**Before:** + +```typescript +@Component({ + selector: 'app-data-view', + imports: [ + IgxGridLiteComponent, + IgxGridLiteColumnComponent, + IgxGridLiteCellTemplateDirective, + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], // Optional: only needed when using the underlying web component directly + templateUrl: './data-view.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +``` + +**After:** + +```typescript +@Component({ + selector: 'app-data-view', + imports: [IGX_GRID_DIRECTIVES], + // No CUSTOM_ELEMENTS_SCHEMA needed - Premium Grid is a native Angular component + templateUrl: './data-view.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +``` + +**Changes:** +- Replace individual Grid Lite imports with `IGX_GRID_DIRECTIVES` +- If you previously added `CUSTOM_ELEMENTS_SCHEMA` for Grid Lite (e.g. when using the underlying web component directly), remove it after migrating — Premium Grid is a native Angular component +- Remove the `schemas` array entirely if it only contained `CUSTOM_ELEMENTS_SCHEMA` + +### Step 4 - Update the Component Class + +**Before:** + +```typescript +export class DataViewComponent { + gridRef = viewChild>('grid'); + data: Product[] = []; +} +``` + +**After:** + +```typescript +export class DataViewComponent { + gridRef = viewChild.required('grid'); + protected data = signal([]); +} +``` + +**Changes:** +- Replace `IgxGridLiteComponent` with `IgxGridComponent` +- Add `[primaryKey]` support - strongly recommended for editing, selection, and any row-targeted API (`getRowByKey`, transactions, row pinning, etc.). Without it the grid falls back to row indexes/object identity, which breaks across virtualization and remote data. +- Use `signal()` for reactive data (recommended but not required) + +### Step 5 - Update the Template + +#### Selector & Grid Element + +| Grid Lite | Premium Grid | +|---|---| +| `` | `` (needs an explicit `height` - or a parent with a fixed height - for row virtualization) | +| `` | `` | +| No `[primaryKey]` | `[primaryKey]="'id'"` (strongly recommended for editing/selection/row APIs) | +| `[sortingOptions]="{ mode: 'multiple' }"` | `[sortingOptions]="{ mode: 'multiple' }"` or per-column `[sortable]="true"` | + +**Before:** + +```html + + + + + + +``` + +**After:** + +```html + + + + + + + +``` + +#### Column Attribute Differences + +| Grid Lite attribute | Premium Grid equivalent | Notes | +|---|---|---| +| `sortable` (boolean HTML attr) | `[sortable]="true"` or bare `sortable` | Both styles work on `igx-column`; bracketed binding is preferred for clarity | +| `filterable` (boolean HTML attr) | `[filterable]="true"` or bare `filterable` | Same pattern | +| `resizable` (boolean HTML attr) | `[resizable]="true"` or bare `resizable` | Same pattern | +| `hidden` (boolean HTML attr) | `[hidden]="true"` | Use binding - bare `hidden` collides with the native HTML attribute | +| `field` | `field` | Identical | +| `header` | `header` | Identical | +| `dataType` | `dataType` | Premium supports additional types: `dateTime`, `time`, `currency`, `percent`, `image` | +| `width` | `width` | Identical (CSS value, e.g., `'250px'`) | + +#### Cell Template Migration + +**Before (Grid Lite):** + +```html + + + {{ value }} + + +``` + +**After (Premium Grid):** + +```html + + + {{ cell.value }} + + +``` + +**Key differences:** +- Template directive: `igxGridLiteCell` → `igxCell` +- Context object: Grid Lite exposes `let-value` directly; Premium exposes `let-cell="cell"` where you access `cell.value`, `cell.row`, `cell.column` +- Premium also supports `igxCellEditor` for edit templates (not available in Grid Lite) + +#### Header Template Migration + +**Before:** + +```html + + {{ column.header }} + +``` + +**After:** + +```html + + {{ column.header }} + +``` + +**Change:** `igxGridLiteHeader` → `igxHeader` + +### Step 6 - Migrate Remote Data Operations + +Grid Lite uses `dataPipelineConfiguration` (async callbacks). The Premium Grid uses **noop data operation strategies + events**. + +**Before (Grid Lite - `dataPipelineConfiguration`):** + +```typescript +dataPipeline: IgxGridLiteDataPipelineConfiguration = { + sort: async (params) => { + return await this.dataService.sortRemote(params.grid.sortingExpressions); + }, + filter: async (params) => { + return await this.dataService.filterRemote(params.grid.filteringExpressions); + }, +}; +``` + +```html + + +``` + +**After (Premium Grid - noop strategies + events):** + +```typescript +import { + NoopSortingStrategy, + NoopFilteringStrategy, +} from 'igniteui-angular/core'; +import { ISortingEventArgs } from 'igniteui-angular/grids/core'; + +export class DataViewComponent { + gridRef = viewChild.required('grid'); + noopSort = NoopSortingStrategy.instance(); + noopFilter = NoopFilteringStrategy.instance(); + + onSortingDone(event: ISortingEventArgs) { + this.dataService.sortRemote(this.gridRef().sortingExpressions).subscribe(data => this.data.set(data)); + } + + onFilteringDone() { + this.dataService.filterRemote(this.gridRef().filteringExpressionsTree).subscribe(data => this.data.set(data)); + } +} +``` + +```html + + +``` + +### Step 7 - Migrate Sort/Filter Events + +| Grid Lite Event | Premium Grid Event | Notes | +|---|---|---| +| `(sorting)` | `(sorting)` | Both cancelable | +| `(sorted)` | `(sortingDone)` | Name changed | +| `(filtering)` | `(filtering)` | Both cancelable | +| `(filtered)` | `(filteringDone)` | Name changed. For **remote** filtering, bind `(filteringExpressionsTreeChange)` instead — see Step 6 and [`paging-remote.md`](./paging-remote.md) | + +### Step 8 - Migrate Programmatic Sort/Filter API + +**Grid Lite API:** + +```typescript +this.gridRef().sort({ key: 'name', direction: 'ascending' }); +this.gridRef().filter({ key: 'age', condition: 'greaterThan', searchTerm: 21 }); +this.gridRef().clearSort(); +this.gridRef().clearFilter(); +``` + +**Premium Grid API:** + +```typescript +import { SortingDirection, IgxNumberFilteringOperand } from 'igniteui-angular/core'; + +// Sorting +this.gridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); +this.gridRef().clearSort('name'); + +// Filtering +this.gridRef().filter('age', 21, IgxNumberFilteringOperand.instance().condition('greaterThan')); +this.gridRef().clearFilter('age'); +``` + +**Key differences:** +- Sort expression: `key` → `fieldName`, `direction: 'ascending'` → `dir: SortingDirection.Asc` +- Filter: object-based → positional arguments with typed operand instances + +### Step 9 - Remove Grid Lite Artifacts + +After migration, clean up: + +1. Remove `CUSTOM_ELEMENTS_SCHEMA` from any component that only used it for Grid Lite +2. Remove `import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'` if no longer needed +3. Remove `igniteui-grid-lite` from `package.json` if no Grid Lite instances remain +4. Remove any `IgxGridLiteDataPipelineConfiguration` types and replace with noop strategies + +--- + +## Adding Enterprise Features Post-Migration + +Once on the Premium Grid, enable the features that motivated the migration: + +### Editing + +```html + + + + +``` + +### Selection + +```html + + + +``` + +### Paging + +```html + + + + +``` + +### GroupBy + +```html + + + +``` + +### Export + +```typescript +import { IgxExcelExporterService, IgxExcelExporterOptions } from 'igniteui-angular/grids/core'; + +export class DataViewComponent { + private excelExporter = inject(IgxExcelExporterService); + + exportToExcel() { + this.excelExporter.exportData(this.data(), new IgxExcelExporterOptions('export')); + } +} +``` + +### Toolbar + +```html + + + Products + + + + + + + + +``` + +### Summaries + +```html + +``` + +### Batch Editing + +```html + + + +``` + +```typescript +// Commit or discard all pending changes +this.gridRef().transactions.commit(this.data()); +this.gridRef().transactions.clear(); +``` + +--- + +## Quick Reference - Full Migration Map + +| Aspect | Grid Lite | Premium Grid | +|---|---|---| +| **Package** | `igniteui-grid-lite` (separate) | `igniteui-angular` or `@infragistics/igniteui-angular` | +| **Entry point** | `igniteui-angular/grids/lite` | `igniteui-angular/grids/grid` | +| **Component** | `IgxGridLiteComponent` | `IgxGridComponent` | +| **Selector** | `` | `` | +| **Column selector** | `` | `` | +| **Imports style** | Individual (`IgxGridLiteComponent`, `IgxGridLiteColumnComponent`, ...) | Bundle (`IGX_GRID_DIRECTIVES`) | +| **Schema** | `CUSTOM_ELEMENTS_SCHEMA` (optional; only if using the underlying web component directly) | Not needed | +| **Primary key** | Not supported | `[primaryKey]="'id'"` (required for editing/selection) | +| **Cell template** | `igxGridLiteCell` (exposes `let-value`) | `igxCell` (exposes `let-cell="cell"`, access `cell.value`) | +| **Header template** | `igxGridLiteHeader` | `igxHeader` | +| **Editor template** | Not available | `igxCellEditor` | +| **Column attributes** | Boolean HTML attrs (`sortable`, `filterable`) | Angular inputs (`[sortable]="true"`, `[filterable]="true"`) | +| **Remote data** | `dataPipelineConfiguration` (async callbacks) | Noop strategies + events | +| **Sort event (done)** | `(sorted)` | `(sortingDone)` | +| **Filter event (done)** | `(filtered)` | `(filteringDone)` | +| **Sort expression** | `{ key, direction }` | `{ fieldName, dir: SortingDirection }` | +| **License** | MIT (free) | Commercial (trial with watermark) | + +--- + +## Related Skills + +- **[`igniteui-angular-grids`](../SKILL.md)** - Full grid reference for all grid types (use after migration for feature details) +- **[`igniteui-angular-theming`](../../igniteui-angular-theming/SKILL.md)** - Theming and styling (works with both Grid Lite and Premium Grid) +- **[`igniteui-angular-components`](../../igniteui-angular-components/SKILL.md)** - Non-grid UI components diff --git a/.claude/skills/igniteui-angular-grids/references/paging-remote.md b/.claude/skills/igniteui-angular-grids/references/paging-remote.md new file mode 100644 index 0000000..0ddd40d --- /dev/null +++ b/.claude/skills/igniteui-angular-grids/references/paging-remote.md @@ -0,0 +1,391 @@ +# Grid Paging, Remote Data & Virtualization + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For grid import patterns and `viewChild` access — see [`data-operations.md`](./data-operations.md). +> For editing and validation — see [`editing.md`](./editing.md). +> For state persistence — see [`state.md`](./state.md). + +## Contents + +- [Paging](#paging) +- [Remote Data Operations](#remote-data-operations) +- [Virtualization](#virtualization) +- [Multi-Grid Coordination](#multi-grid-coordination) +- [Key Rules](#key-rules) + +## Paging + +### Using the Paginator Component + +```html + + + + + + + +``` + +### Programmatic Paging + +```typescript +// Navigate pages +this.gridRef().paginator.page = 3; +this.gridRef().paginator.nextPage(); +this.gridRef().paginator.previousPage(); +this.gridRef().paginator.paginate(0); // go to first page + +// Change page size +this.gridRef().paginator.perPage = 25; +``` + +### Paging Events + +| Event | Description | +|---|---| +| `(paging)` | Fires before page changes (cancelable) | +| `(pagingDone)` | Fires after page has changed | +| `(perPageChange)` | Fires when page size changes | + +### Remote Paging + +```typescript +import { GridPagingMode } from 'igniteui-angular/grids/core'; +import { IPageEventArgs } from 'igniteui-angular/paginator'; + +export class RemotePagingComponent { + data = signal([]); + totalCount = signal(0); + perPage = signal(15); + pagingMode = GridPagingMode.Remote; + + gridRef = viewChild.required('grid'); + private dataService = inject(ProductService); + + constructor() { + this.loadPage(0); + } + + onPagingDone(event: IPageEventArgs) { + this.loadPage(event.current); + } + + onPerPageChange(perPage: number) { + this.perPage.set(perPage); + this.loadPage(0); + } + + private loadPage(pageIndex: number) { + const skip = pageIndex * this.perPage(); + this.dataService.getProducts({ skip, take: this.perPage() }).subscribe(result => { + this.data.set(result.data); + this.totalCount.set(result.totalCount); + }); + } +} +``` + +```html + + + + + + + +``` + +## Remote Data Operations + +### The Problem + +Grids perform sorting, filtering, and paging **client-side** by default. For large datasets, you must intercept these operations and delegate them to the server. + +### Complete Remote Data Pattern + +This is the canonical pattern for server-side sorting, filtering, and virtualization. **You must disable the built-in client-side sorting/filtering** by applying `NoopSortingStrategy` and `NoopFilteringStrategy` on the grid: + +```typescript +import { Component, ChangeDetectionStrategy, signal, viewChild, inject, DestroyRef } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; +import { + IFilteringExpressionsTree, + ISortingExpression, + NoopSortingStrategy, + NoopFilteringStrategy +} from 'igniteui-angular/core'; +import { IForOfState } from 'igniteui-angular/directives'; +import { debounceTime, Subject } from 'rxjs'; + +@Component({ + selector: 'app-remote-grid', + imports: [IGX_GRID_DIRECTIVES], + templateUrl: './remote-grid.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class RemoteGridComponent { + data = signal([]); + totalCount = signal(0); + isLoading = signal(false); + + // Noop strategies — disable built-in client-side sort/filter + noopSort = NoopSortingStrategy.instance(); + noopFilter = NoopFilteringStrategy.instance(); + + gridRef = viewChild.required('grid'); + private dataService = inject(OrderService); + private destroyRef = inject(DestroyRef); + + private currentSort: ISortingExpression[] | undefined; + private currentFilter: IFilteringExpressionsTree | undefined; + + // Debounce rapid dataPreLoad events during fast scrolling + private dataPreLoad$ = new Subject(); + + constructor() { + this.dataPreLoad$.pipe( + debounceTime(150), + takeUntilDestroyed(this.destroyRef) + ).subscribe(event => { + // NOTE: The first chunkSize will always be 0 — use a reasonable default + const chunkSize = event.chunkSize || 15; + this.loadData(event.startIndex, chunkSize); + }); + + this.loadData(0, 15); + } + + onDataPreLoad(event: IForOfState) { + this.dataPreLoad$.next(event); + } + + onSortingDone() { + this.currentSort = this.gridRef().sortingExpressions; + this.loadData(0, 15); + } + + onFilteringExpressionsTreeChange() { + this.currentFilter = this.gridRef().filteringExpressionsTree; + this.loadData(0, 15); + } + + private loadData(skip: number, take: number) { + this.isLoading.set(true); + this.dataService.getOrders({ + skip, + take, + sort: this.currentSort, + filter: this.currentFilter + }).subscribe(result => { + this.data.set(result.data); + this.totalCount.set(result.total); + this.isLoading.set(false); + }); + } +} +``` + +```html + + + + + + + + +``` + +> **IMPORTANT**: `[sortStrategy]="noopSort"` and `[filterStrategy]="noopFilter"` prevent the grid from applying sort/filter operations client-side. The grid still fires events (allowing you to send them to the server), but the local data remains untouched until you replace it. + +### Excel-Style Filtering with Remote Unique Values + +When using Excel-style filtering with remote data, provide a strategy to fetch unique column values from the server: + +```typescript +// Tell the grid how to load unique values for Excel-style filter lists +uniqueValuesStrategy = (column: any, tree: any, done: (values: any[]) => void) => { + this.dataService.getUniqueValues(column.field).subscribe(values => done(values)); +}; +``` + +```html + + +``` + +### Remote Data Service Example + +```typescript +import { Injectable, inject } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +export interface RemoteDataResult { + data: T[]; + total: number; +} + +@Injectable({ providedIn: 'root' }) +export class OrderService { + private http = inject(HttpClient); + private apiUrl = '/api/orders'; + + getOrders(params: { + skip: number; + take: number; + sort?: any[]; + filter?: any; + }): Observable> { + let httpParams = new HttpParams() + .set('skip', params.skip) + .set('take', params.take); + + if (params.sort?.length) { + httpParams = httpParams.set('sort', JSON.stringify(params.sort)); + } + if (params.filter) { + httpParams = httpParams.set('filter', JSON.stringify(params.filter)); + } + + return this.http.get>(this.apiUrl, { params: httpParams }); + } +} +``` + +### Key Points for Remote Data + +1. **Set `[totalItemCount]`** — the grid needs the total record count for correct virtual scrollbar sizing +2. **Use `[isLoading]`** — shows a loading indicator while data is being fetched +3. **Apply `NoopSortingStrategy` and `NoopFilteringStrategy`** — prevents the grid from performing client-side sorting/filtering, so the server results are displayed as-is +4. **Listen to `(dataPreLoad)`** — fires when the user scrolls and the grid needs more rows; provides `startIndex` and `chunkSize` (first `chunkSize` will be 0 — use a fallback) +5. **Listen to `(sortingDone)` and `(filteringExpressionsTreeChange)`** — reset to the beginning and re-fetch with new parameters; `filteringExpressionsTreeChange` is the grid-level output that reflects the complete filter state (unlike the column-level `filteringDone`) +6. **Track current sort/filter state** — store them so every `loadData` call includes the active criteria +7. **Debounce `(dataPreLoad)`** — use `debounceTime` to avoid flooding the server during fast scrolling +8. **Use `[uniqueColumnValuesStrategy]`** — when using Excel-style filtering, supply a callback to load unique column values from the server + +## Virtualization + +### How It Works + +All Ignite UI grids use **row and column virtualization** by default. Only the visible rows and columns are rendered in the DOM, enabling smooth scrolling through millions of records. + +### Requirements + +- Set a fixed `height` on the grid (e.g., `height="600px"`) +- No additional configuration is needed — virtualization is automatic +- Do **not** wrap the grid in a virtual scroll container + +### Remote Virtualization + +For datasets too large to load entirely, combine virtualization with remote data: + +```html + + +``` + +The `(dataPreLoad)` event fires with an `IForOfState` containing: +- `startIndex` — the first visible row index +- `chunkSize` — number of rows the grid needs + +## Multi-Grid Coordination + +### Master-Detail Filtering + +When using a master grid to drive a detail grid: + +```typescript +export class MasterDetailComponent { + masterGrid = viewChild.required('masterGrid'); + orders = signal([]); + selectedCustomer = signal(null); + customerOrders = signal([]); + + onRowSelectionChanging(event: IRowSelectionEventArgs) { + const selectedId = event.newSelection[0]; + const customer = this.customers().find(c => c.id === selectedId); + this.selectedCustomer.set(customer ?? null); + + if (customer) { + this.dataService.getOrdersByCustomer(customer.id).subscribe(orders => { + this.customerOrders.set(orders); + }); + } + } +} +``` + +```html + + + + + + + + +``` + +## Key Rules + +1. **Remote data requires `[totalItemCount]`** — without it, the virtual scrollbar won't size correctly +2. **Remote data requires noop strategies** — apply `NoopSortingStrategy` and `NoopFilteringStrategy` to disable client-side operations when the server handles them +3. **Track sort/filter state for remote operations** — store current expressions and include them in every server request +4. **Debounce rapid virtual scroll** — use `debounceTime` on `(dataPreLoad)` to avoid flooding the server + +Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). + +## See Also + +- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns +- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries +- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations +- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection +- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.claude/skills/igniteui-angular-grids/references/sizing.md b/.claude/skills/igniteui-angular-grids/references/sizing.md new file mode 100644 index 0000000..f693de6 --- /dev/null +++ b/.claude/skills/igniteui-angular-grids/references/sizing.md @@ -0,0 +1,215 @@ +# Grid Sizing — Width, Height, Column Sizing & Spacing + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For grid setup, column config, sorting, filtering, selection — see [`structure.md`](./structure.md). +> For virtualization and performance — see [`features.md`](./features.md). + +## Contents + +- [Overview](#overview) +- [Grid Width](#grid-width) +- [Grid Height](#grid-height) +- [Column Sizing](#column-sizing) +- [Grid Cell Spacing Control](#grid-cell-spacing-control) +- [Key Rules](#key-rules) + +## Overview + +The grid uses **border-box sizing** — border and padding are included in the width/height calculations. Do **not** override `box-sizing` on the grid element; doing so will break size calculations. + +The grid supports both component inputs (`width`/`height`) and regular CSS/layout sizing from the host or wrapping container (including flex/grid layouts). Use the inputs when you need explicit fixed or percentage grid sizing. + +## Grid Width + +> **Docs:** [Grid Sizing — Width](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#width) + +**Default:** `100%` — the grid fills available width of the parent/window. + +### `null` Width + +```html + +``` + +- All columns are rendered in the DOM — **horizontal column virtualization is disabled**. +- **Warning:** rendering many columns without virtualization can significantly impact performance. + +### Pixel Width + +```html + +``` + +- Grid is fixed at the specified size and does not react to browser/DOM resizing. +- A horizontal scrollbar appears inside the grid when the combined column widths exceed the grid `width`. +- If a parent element is narrower than the grid and has `overflow: auto | scroll`, the parent scrolls — the grid itself remains at its specified width. + +### Percentage Width + +```html + +``` + +- Grid sizes relative to its parent element (or the browser window if there is no parent with explicit width). +- Resizes responsively when the browser or parent is resized. +- Setting `width` above `100%` (e.g. `150%`) makes the grid wider than the parent; the parent renders a scrollbar only if it has `overflow: auto | scroll`. + +## Grid Height + +> **Docs:** [Grid Sizing — Height](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#height) + +**Default:** `100%` — see the Percentage Height section for how this behaves depending on the DOM structure. + +### `null` Height + +```html + +``` + +- All rows are rendered — **row virtualization is disabled**. +- Grid height expands to show every row with no vertical scrollbar inside the grid. +- If rows overflow the viewport, the browser renders a native scrollbar. +- A parent element with `overflow: auto | scroll` will scroll while the grid itself remains unshrunk. +- **Warning:** large data sets with `null` height can significantly impact browser performance due to no virtualization. + +### Pixel Height + +```html + +``` + +- Grid is fixed at the specified height. +- A vertical scrollbar appears when rows exceed the visible area. +- If the grid is taller than a parent with `overflow: auto | scroll`, the parent scrolls. + +### Percentage Height + +```html + +``` + +- Grid sizes relative to the **parent element's height**. +- **Parent has explicit height** (px or %): grid sizes to that percentage of the parent's height. +- **Parent has NO explicit height**: the browser cannot resolve a percentage, so the grid falls back to rendering a maximum of **10 rows** with a vertical scrollbar if there are more rows, or fits all rows if there are fewer. +- To fill the entire browser window: set both `body` and the parent container `height: 100%`, then use `height="100%"` on the grid. + +```css +/* Full-window grid */ +html, body, .grid-container { + height: 100%; +} +``` + +```html +
+ +
+``` + +## Column Sizing + +> **Docs:** [Grid Sizing — Column Sizing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#column-sizing) + +### Default (no `width` set — auto-sized) + +- Auto-sized columns share the available grid width equally. +- Minimum column width is **`136px`**; if the equal share is less than `136px`, all auto-sized columns default to `136px` and the grid renders a horizontal scrollbar. +- Feature columns (row selector checkbox, etc.) consume space that reduces what is available for auto-sized columns. + +```html + + + +``` + +### Pixel Width + +```html + +``` + +- Column is fixed at the specified width regardless of grid size. +- If the combined column widths are less than the grid width, empty space appears on the right — this is expected. +- If the combined column widths exceed the grid width, a horizontal scrollbar is rendered. + +### `auto` Width + +```html + +``` + +- Column sizes to fit the longest visible cell value. +- May leave empty space if most values are short but one is very long. + +### Percentage Width + +```html + +``` + +- Column width is calculated as a percentage of the grid width. +- Responsive — resizes when the grid resizes. +- Combined percentages less than `100%` leave an empty area; greater than `100%` triggers a horizontal scrollbar. +- If the grid `width` is `null`, percentage-width columns fall back to `136px` each. + +## Grid Cell Spacing Control + +> **Docs:** [Grid Sizing — Cell Spacing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#grid-cell-spacing-control) + +The grid automatically adapts internal cell spacing based on the `size` (display density) setting. Fine-grained control is available through CSS custom properties. + +### Global Spacing (all grids in the app) + +```css +igx-grid { + --ig-spacing: 0.8; /* multiplier — reduces all grid spacing by 20% */ +} +``` + +### Instance-Specific Spacing + +```css +.my-compact-grid { + --ig-spacing: 0.6; +} +``` + +### Directional Spacing (horizontal vs vertical independently) + +```css +.my-grid { + --ig-spacing-inline: 0.5; /* horizontal padding */ + --ig-spacing-block: 1.0; /* vertical padding */ +} +``` + +### Density-Level Spacing + +```css +.my-grid { + --ig-spacing-small: 0.5; /* compact density */ + --ig-spacing-medium: 1.0; /* medium density */ + --ig-spacing-large: 1.3; /* comfortable density */ +} +``` + +### Header vs Body Cell Spacing + +```css +.my-grid igx-grid-header { + --ig-spacing: 0.7; +} + +.my-grid igx-grid-cell { + --ig-spacing: 0.9; +} +``` + +## Key Rules + +- Grid sizing can come from CSS/layout context (host/container sizing) or from `[width]`/`[height]` inputs. +- **Never** override `box-sizing` on the grid — it uses border-box and relies on this. +- Use `null` for height only when the data set is small; row virtualization is disabled and large data will hurt performance. +- When using percentage height, the parent **must** have an explicit height for the percentage to resolve correctly. Without it, the grid falls back to 10 visible rows. +- A mix of fixed-width and auto-sized columns is valid — auto-sized columns fill the remaining space after fixed-width columns are laid out. +- **Omit `width` on generated columns.** No `width` = columns equally share available grid width. Pixel widths leave empty space when their sum is less than the grid width. Only set `width` when the user explicitly asks for it. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. diff --git a/.claude/skills/igniteui-angular-grids/references/state.md b/.claude/skills/igniteui-angular-grids/references/state.md new file mode 100644 index 0000000..0b68aff --- /dev/null +++ b/.claude/skills/igniteui-angular-grids/references/state.md @@ -0,0 +1,303 @@ +# Grid State Persistence & Grid-Type-Specific Operations + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For grid import patterns and `viewChild` access — see [`data-operations.md`](./data-operations.md). +> For Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite setup — see [`types.md`](./types.md). +> For paging and remote data — see [`paging-remote.md`](./paging-remote.md). + +## Contents + +- [State Persistence](#state-persistence) +- [Tree Grid Data Operations](#tree-grid-data-operations) +- [Hierarchical Grid Data Operations](#hierarchical-grid-data-operations) +- [Pivot Grid Data Operations](#pivot-grid-data-operations) +- [Grid Lite Data Operations](#grid-lite-data-operations) +- [Key Rules](#key-rules) + +## State Persistence + +### Saving and Restoring Grid State + +Use `IgxGridStateDirective` to persist sorting, filtering, grouping, paging, selection, and column state: + +```html + + + +``` + +```typescript +import { IgxGridStateDirective } from 'igniteui-angular/grids/core'; + +export class StatefulGridComponent { + gridState = viewChild.required(IgxGridStateDirective); + + saveState() { + const state = this.gridState().getState(); + localStorage.setItem('gridState', state); + } + + restoreState() { + const state = localStorage.getItem('gridState'); + if (state) { + this.gridState().setState(state); + } + } +} +``` + +### Selective State Features + +Control which features are persisted: + +```html + + +``` + +```typescript +stateOptions = { + sorting: true, + filtering: true, + groupBy: true, + paging: true, + columns: true, + cellSelection: false, // skip selection state + rowSelection: false, + columnSelection: false, + advancedFiltering: true, + rowPinning: true, + expansion: true +}; +``` + +### Restoring Custom Strategies + +`IgxGridState` does **not** persist functions — this includes sorting strategies, filtering strategies, column formatters, summaries, `cellClasses`, and `cellStyles`. Use the `stateParsed` event to reapply these after restoring state: + +```typescript +restoreState() { + const stateJson = localStorage.getItem('gridState'); + if (!stateJson) return; + + // Subscribe to stateParsed to reapply custom strategies before state is applied + this.gridState().stateParsed.pipe(take(1)).subscribe(parsedState => { + parsedState.sorting?.forEach(expr => expr.strategy = NoopSortingStrategy.instance()); + }); + + this.gridState().setState(stateJson); +} +``` + +### Restoring Column Templates + +Column templates are also not serialized. Use the `columnInit` event to reassign them: + +```typescript +activeTemplate = viewChild.required>('activeTemplate'); + +onColumnInit(column: IgxColumnComponent) { + if (column.field === 'IsActive') { + column.bodyTemplate = this.activeTemplate(); + } +} +``` + +```html + + + + + +``` + +## Tree Grid Data Operations + +### Recursive Filtering Behavior + +Tree Grid filtering is **inclusive** — when a child matches, all its ancestors are kept visible (marked as `isFilteredOutParent`) and auto-expanded. This is the default `TreeGridFilteringStrategy`. + +```html + + + + +``` + +When you filter for `title = 'Developer'`, all ancestor rows are shown even though they don't match, and they're auto-expanded so you can see the matching children in context. + +### Per-Level Sorting + +Tree Grid sorting is applied **within each parent level** — children are sorted among siblings, not globally flattened: + +```typescript +// This sorts employees within their respective manager, not globally +this.treeGridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); +``` + +### Tree Grid Batch Editing + +Tree Grid uses `HierarchicalTransactionService` — each transaction carries a `path` array tracing the parent hierarchy, enabling proper undo/redo of nested changes: + +```html + + + +``` + +```typescript +// Add a row as child of a specific parent +this.treeGridRef().addRow({ id: 100, name: 'New Employee', managerId: 2 }, 2); + +// Cascade delete — deleting a parent removes all descendants (default behavior) +this.treeGridRef().deleteRow(2); // deletes row 2 and all its children +``` + +## Hierarchical Grid Data Operations + +### Independent Grid Levels + +Each level of a hierarchical grid has its **own independent** sorting, filtering, and paging state. Configure features on the `` blueprint: + +```html + + + + + + + + + + + + +``` + +### Accessing Child Grid Instances + +To perform programmatic operations on child grids, use the `(gridCreated)` event: + +```typescript +onChildGridCreated(event: IGridCreatedEventArgs) { + const childGrid = event.grid; + // Example: apply a default sort to all child grids + childGrid.sort({ fieldName: 'orderId', dir: SortingDirection.Desc, ignoreCase: false }); +} +``` + +```html + + + +``` + +### Batch Editing Propagation + +Setting `[batchEditing]="true"` on the root hierarchical grid automatically propagates to all child grids: + +```html + + + + + + +``` + +> **NOTE**: Each child grid instance has its **own** `TransactionService`. Commits must be done per grid instance. + +## Pivot Grid Data Operations + +> **IMPORTANT**: The Pivot Grid does NOT use standard sorting, filtering, editing, or paging APIs. All data operations are controlled through `pivotConfiguration`. + +### Dimension-Based Filtering + +```typescript +import { FilteringExpressionsTree, FilteringLogic, IgxStringFilteringOperand } from 'igniteui-angular/core'; + +// Create a filter for a dimension +const regionFilter = new FilteringExpressionsTree(FilteringLogic.Or); +regionFilter.filteringOperands = [ + { + fieldName: 'Region', + condition: IgxStringFilteringOperand.instance().condition('equals'), + searchVal: 'North America' + }, + { + fieldName: 'Region', + condition: IgxStringFilteringOperand.instance().condition('equals'), + searchVal: 'Europe' + } +]; + +// Apply the filter to a dimension and notify the grid +this.pivotConfig.filters[0].filter = regionFilter; +this.pivotGridRef().notifyDimensionChange(true); +``` + +### Dimension-Based Sorting + +```typescript +// Sort a row dimension via the public API +this.pivotGridRef().sortDimension(this.pivotConfig.rows[0], SortingDirection.Desc); +``` + +### Key Pivot Grid Limitations + +- No cell/row editing, batch editing, or row adding +- No paging +- No column pinning, moving, or hiding (columns are auto-generated) +- No row dragging +- No standard filtering (`allowFiltering` is forced to `false`) +- No GroupBy (grouping is inherent via dimensions) +- State persistence serializes the full `pivotConfiguration` + +## Grid Lite Data Operations + +> **Grid Lite sorting, filtering, remote data, events, and limitations are fully documented in [`types.md`](./types.md#grid-lite).** Refer to that file for all Grid Lite data operations — this section intentionally avoids duplicating that content. +> +> Key differences from Flat/Tree/Hierarchical Grid APIs: +> - Uses `IgxGridLiteSortingExpression` / `IgxGridLiteFilteringExpression` (NOT `ISortingExpression` / `FilteringExpressionsTree`) +> - Uses `dataPipelineConfiguration` for remote ops (NOT noop strategies + events) +> - Has no editing, grouping, paging, summaries, selection, state persistence, or export + +## Key Rules + +1. **State persistence** — use `IgxGridStateDirective` to save/restore sort, filter, group, and column configuration; functions (formatters, strategies, summaries) must be reapplied via `stateParsed` event +2. **Tree Grid filtering is recursive** — parents of matching children are always shown and auto-expanded +3. **Hierarchical Grid levels are independent** — sorting/filtering/paging don't cascade; configure on `` +4. **Pivot Grid is read-only** — no editing, paging, or standard filtering/sorting; use `pivotConfiguration` for all data operations +5. **Grid Lite has its own API** — uses `IgxGridLiteSortingExpression`/`IgxGridLiteFilteringExpression` (NOT `ISortingExpression`/`FilteringExpressionsTree`), `dataPipelineConfiguration` for remote ops (NOT noop strategies), and has no editing, grouping, paging, summaries, or selection + +Universal rules (viewChild types, directive bundles, signals) are in the [hub](../SKILL.md#universal-rules-every-grid-type). + +## See Also + +- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns +- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization +- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries +- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection +- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.claude/skills/igniteui-angular-grids/references/structure.md b/.claude/skills/igniteui-angular-grids/references/structure.md new file mode 100644 index 0000000..ba8a504 --- /dev/null +++ b/.claude/skills/igniteui-angular-grids/references/structure.md @@ -0,0 +1,283 @@ +# Grid Structure — Column Configuration, Sorting, Filtering & Selection + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For grid type selection, imports, and feature availability — see the hub. +> For editing, grouping, summaries, toolbar, export — see [`features.md`](./features.md). +> For Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics — see [`types.md`](./types.md). +> For programmatic data operations — see [`data-operations.md`](./data-operations.md). + +## Contents + +- [Quick Start](#quick-start) +- [Column Configuration](#column-configuration) +- [Sorting](#sorting) +- [Filtering](#filtering) +- [Selection](#selection) +- [Key Rules](#key-rules) + +## Quick Start + +### Imports + +> **Important:** Check `package.json` to determine whether the project uses `igniteui-angular` or `@infragistics/igniteui-angular`. Always import from the specific entry point of whichever package is installed. Never import from the root barrel of either package. + +```typescript +// Open-source package — import from specific entry points +import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; + +// Licensed package — same entry-point structure, different prefix +// import { IgxGridComponent, IGX_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/grid'; + +// AVOID — never import from the root barrel (wrong for BOTH variants) +// import { IgxGridComponent } from 'igniteui-angular'; +// import { IgxGridComponent } from '@infragistics/igniteui-angular'; + +import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; + +@Component({ + selector: 'app-users-grid', + imports: [IGX_GRID_DIRECTIVES], + templateUrl: './users-grid.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class UsersGridComponent { + // Signal-based view child — use #grid on the template element + gridRef = viewChild.required('grid'); + + protected users = signal([]); +} +``` + +### Basic Grid + +```html + + + + + + + + + + + +``` + +## Column Configuration + +### Data Types + +Set `dataType` to enable proper formatting, filtering, sorting, and editing: + +| dataType | Behavior | +|---|---| +| `string` | Text input, string filtering | +| `number` | Numeric input, number filtering, number summaries | +| `boolean` | Checkbox editor, boolean filtering | +| `date` | Date picker editor, date filtering | +| `dateTime` | Date+time editor | +| `time` | Time picker editor | +| `currency` | Currency formatting, number filtering | +| `percent` | Percentage formatting | +| `image` | Image rendering (read-only) | + +### Column Templates + +Override default rendering with template directives: + +```html + + + + + {{ cell.value }} + + + + + + verified {{ column.header }} + + + + + + Active + Inactive + + + + + + + + + + + Active: {{ getActiveCount(summaryResults) }} + + +``` + +### Column Groups + +Group columns under a shared header: + +```html + + + + + + + + + +``` + +### Multi-Row Layout (MRL) + +Create complex cell layouts spanning multiple rows/columns: + +```html + + + + + +``` + +### Column Pinning + +```html + +``` + +Or programmatically: `this.gridRef().pinColumn('name')`. + +### Column Moving + +Enable column moving (drag-to-reorder headers) with `[moving]="true"` on the grid. +There is no [movable] input on . + +```html + + + + + +```html + + + +``` + +Programmatic sorting: + +```typescript +this.gridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); +this.gridRef().clearSort(); +``` + +Events: `(sorting)` (cancelable), `(sortingDone)`. + +For advanced programmatic sorting patterns, custom sort strategies, and sorting events — see [`data-operations.md`](./data-operations.md). + +## Filtering + +### Quick Filter (Row Filter) + +```html + + + +``` + +### Excel-Style Filter + +```html + + + +``` + +### Advanced Filtering Dialog + +```html + + + +``` + +### Programmatic Filtering + +```typescript +this.gridRef().filter('name', 'John', IgxStringFilteringOperand.instance().condition('contains'), true); +this.gridRef().clearFilter('name'); +this.gridRef().clearFilter(); // clear all +``` + +Events: `(filtering)` (cancelable), `(filteringDone)`. + +For advanced programmatic filtering, complex AND/OR trees, and remote filtering patterns — see [`data-operations.md`](./data-operations.md). + +## Selection + +### Row Selection + +```html + + + + + + + +``` + +Modes: `'none'`, `'single'`, `'multiple'`, `'multipleCascade'` (tree grids). + +### Cell Selection + +```html + +``` + +### Column Selection + +```html + + + +``` + +Events: `(rowSelectionChanging)`, `(columnSelectionChanging)`, `(selected)` (cell). + +## Key Rules + +Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). + +1. **Pick the right grid type first** — see the [hub](../SKILL.md) for the decision guide +2. **Always set `[primaryKey]`** — required for editing, selection, row operations (Flat, Tree, Hierarchical, Pivot grids; NOT Grid Lite) +3. **Set `[autoGenerate]="false"`** and define columns explicitly for production grids (except Pivot Grid where columns are auto-generated) +4. **Set `dataType` on every column** for correct filtering, sorting, editing, and summaries +5. **Omit `width` on generated `` elements.** Columns without `width` equally share available grid width. Only set `width` when the user explicitly asks for fixed or percentage column sizing. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. + +## See Also + +- [`features.md`](./features.md) — Editing, grouping, summaries, toolbar, export, row drag, action strip, master-detail +- [`types.md`](./types.md) — Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics +- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping, canonical import patterns +- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization +- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries +- [`state.md`](./state.md) — State persistence, grid-type-specific operations +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.claude/skills/igniteui-angular-grids/references/types.md b/.claude/skills/igniteui-angular-grids/references/types.md new file mode 100644 index 0000000..b95276e --- /dev/null +++ b/.claude/skills/igniteui-angular-grids/references/types.md @@ -0,0 +1,486 @@ +# Grid Types — Tree Grid, Hierarchical Grid, Grid Lite & Pivot Grid + +> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** +> For the grid type selection guide and feature availability — see the hub. +> For shared column config, sorting, filtering, selection — see [`structure.md`](./structure.md). +> For editing, grouping, toolbar, export — see [`features.md`](./features.md). + +## Contents + +- [Tree Grid](#tree-grid) +- [Hierarchical Grid](#hierarchical-grid) +- [Grid Lite](#grid-lite) +- [Pivot Grid](#pivot-grid) +- [Key Rules](#key-rules) + +## Tree Grid + +For data with parent-child relationships **within a single schema** (e.g., org charts, file systems, categories). + +### Two Data Binding Modes + +**Mode 1: Flat data with foreign key** — rows reference their parent via a foreign key: + +```typescript +import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; +import { IgxTreeGridComponent, IGX_TREE_GRID_DIRECTIVES } from 'igniteui-angular/grids/tree-grid'; + +@Component({ + selector: 'app-org-tree', + imports: [IGX_TREE_GRID_DIRECTIVES], + templateUrl: './org-tree.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class OrgTreeComponent { + treeGridRef = viewChild.required('treeGrid'); + employees = signal([ + { id: 1, name: 'CEO', managerId: -1, title: 'CEO' }, + { id: 2, name: 'VP Engineering', managerId: 1, title: 'VP' }, + { id: 3, name: 'Developer', managerId: 2, title: 'Dev' }, + ]); +} +``` + +```html + + + + +``` + +**Mode 2: Nested object data** — each row contains its children in an array property: + +```html + + + + +``` + +### Tree Grid Unique Features + +- **Cascade selection**: `[rowSelection]="'multipleCascade'"` — selecting a parent selects all children; indeterminate state propagates up +- **Cascade delete**: `[cascadeOnDelete]="true"` (default) — deleting a parent removes all descendants +- **Load on demand**: `[loadChildrenOnDemand]="loadChildren"` — lazy-load children when a row is expanded +- **Expansion depth**: `[expansionDepth]="2"` — control initial expansion level (`Infinity` by default) +- **Add child row**: `treeGridRef().addRow(data, parentRowID)` — add a row as a child of a specific parent + +### Tree Grid Data Operation Behavior + +- **Filtering is recursive**: when a child matches, its parent is always shown (even if the parent doesn't match). Matched parents are auto-expanded. +- **Sorting is per-level**: children are sorted within their parent, not globally flattened +- **Batch editing** uses `HierarchicalTransactionService` — transactions carry a `path` array tracing the parent hierarchy for proper undo/redo +- **Summaries** are computed per tree level + +--- + +## Hierarchical Grid + +For master-detail data where **each level has a different schema** (e.g., Companies → Departments → Employees). Each level is defined by a **Row Island** blueprint. + +```typescript +import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; +import { IgxHierarchicalGridComponent, IGX_HIERARCHICAL_GRID_DIRECTIVES } from 'igniteui-angular/grids/hierarchical-grid'; + +@Component({ + selector: 'app-company-grid', + imports: [IGX_HIERARCHICAL_GRID_DIRECTIVES], + templateUrl: './company-grid.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class CompanyGridComponent { + hGridRef = viewChild.required('hGrid'); + companies = signal([]); +} +``` + +```html + + + + + + + + + + + + + + + + +``` + +### How Row Islands Work + +- A `` defines the **blueprint** (columns, features, templates) for all child grids at that level +- The `[key]` property specifies which property of the parent row's data holds the child array +- Row islands can be **nested** — an `igx-row-island` can contain another for deeper levels +- Each expanded row creates a **full grid instance** — be aware of memory usage with very deep/wide hierarchies + +### Accessing Child Grid Instances + +Use the `(gridCreated)` event on the row island: + +```html + + + +``` + +```typescript +onChildGridCreated(event: IGridCreatedEventArgs) { + const childGrid = event.grid; + // Configure the child grid instance, load data, etc. +} +``` + +### Hierarchical Grid Data Operation Behavior + +- **Sorting and filtering do NOT cascade** — each grid level is independent with its own state +- **Configure features on the row island** and all child grids at that level inherit them +- **Batch editing propagates**: setting `[batchEditing]="true"` on the root automatically enables it on all child grids +- **State persistence** recursively saves/restores state for each child grid instance, keyed by row island ID + parent row ID + +--- + +## Grid Lite + +The **lightest grid option** — an open-source (MIT licensed) Web Component with an Angular wrapper. Use it for **read-only data display** with sorting, filtering, column hiding/resizing, and row virtualization. It has **no editing, no selection, no paging, no grouping, no summaries, no export**. + +> **When to recommend Grid Lite vs. Flat Grid**: If the user only needs to display data with basic sorting/filtering and doesn't need editing, batch operations, paging, grouping, summaries, or export, Grid Lite is the lighter, faster choice. If any of those enterprise features are needed, **upgrade strictly to `igx-grid` (`IgxGridComponent`)** from `igniteui-angular/grids/grid` — do NOT recommend other non-grid components as a substitute. + +> **Important — Grid Lite → Grid Upgrade**: When a user is working with `igx-grid-lite` and you identify that their requirements exceed Grid Lite's capabilities (e.g., they need editing, selection, paging, grouping, summaries, export, row operations, or any feature not available in Grid Lite), you MUST recommend upgrading to `igx-grid` (`IgxGridComponent`). Never suggest a different component type — the upgrade path from Grid Lite is always to `igx-grid`. Replace `IgxGridLiteComponent` with `IgxGridComponent`, update imports from `igniteui-angular/grids/lite` to `igniteui-angular/grids/grid`, use `IGX_GRID_DIRECTIVES` instead of individual Grid Lite imports, and remove `CUSTOM_ELEMENTS_SCHEMA` if it was added for direct web-component usage. See [`grid-migration.md`](./grid-migration.md) for the full migration checklist. + +### Installation + +Grid Lite requires a **separate npm package**: + +```bash +npm install igniteui-grid-lite +``` + +### Setup + +```typescript +import { Component, ChangeDetectionStrategy, viewChild } from '@angular/core'; +import { + IgxGridLiteComponent, + IgxGridLiteColumnComponent, + IgxGridLiteCellTemplateDirective, + IgxGridLiteHeaderTemplateDirective +} from 'igniteui-angular/grids/lite'; + +@Component({ + selector: 'app-users-lite', + imports: [ + IgxGridLiteComponent, + IgxGridLiteColumnComponent, + IgxGridLiteCellTemplateDirective, + IgxGridLiteHeaderTemplateDirective + ], + templateUrl: './users-lite.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class UsersLiteComponent { + gridRef = viewChild>('grid'); + data: User[] = []; +} +``` + +### Template + +```html + + + + + + + + + + + {{ value ? 'Yes' : 'No' }} + + + +``` + +### Column Configuration + +Columns use `` with these inputs: + +| Input | Type | Description | +|---|---|---| +| `field` | `string` | Data property key (required) | +| `dataType` | `'string' \| 'number' \| 'boolean' \| 'date'` | Column data type | +| `header` | `string` | Header text | +| `width` | `string` | CSS width — omit by default; columns auto-fill available grid space. Only set when a fixed or percentage width is explicitly needed (e.g. `'20%'`). | +| `hidden` | `boolean` | Hide the column | +| `resizable` | `boolean` | Allow column resizing | +| `sortable` | `boolean` | Enable sorting | +| `filterable` | `boolean` | Enable filtering | +| `sortingCaseSensitive` | `boolean` | Case-sensitive sorting | +| `filteringCaseSensitive` | `boolean` | Case-sensitive filtering | + +### Templates + +Use `igxGridLiteCell` for cell templates and `igxGridLiteHeader` for header templates: + +```html + + + ⭐ Rating + + + {{ value }} + + +``` + +> When a header template is provided, the `header` text property is ignored. + +### Sorting & Filtering API + +```typescript +// Sort programmatically +this.gridRef().sort({ key: 'name', direction: 'ascending' }); +this.gridRef().sort([ + { key: 'name', direction: 'ascending' }, + { key: 'age', direction: 'descending' } +]); +this.gridRef().clearSort('name'); +this.gridRef().clearSort(); // clear all + +// Filter programmatically +this.gridRef().filter({ key: 'age', condition: 'greaterThan', searchTerm: 21 }); +this.gridRef().clearFilter('age'); +this.gridRef().clearFilter(); // clear all +``` + +### Two-Way Binding for Sort/Filter State + +```html + + +``` + +Events: `(sorting)` (cancelable), `(sorted)`, `(filtering)` (cancelable), `(filtered)`. + +### Remote Data Operations + +Use `dataPipelineConfiguration` to intercept sort/filter and delegate to the server: + +```typescript +import { IgxGridLiteDataPipelineConfiguration } from 'igniteui-angular/grids/lite'; + +dataPipeline: IgxGridLiteDataPipelineConfiguration = { + sort: async (params) => { + // params.grid — the grid instance + // params.data — current data + // params.type — 'sort' + const sorted = await this.dataService.sortRemote(params.grid.sortingExpressions); + return sorted; + }, + filter: async (params) => { + const filtered = await this.dataService.filterRemote(params.grid.filteringExpressions); + return filtered; + } +}; +``` + +```html + + +``` + +### Grid Lite Events + +| Event | Cancelable | Payload | +|---|---|---| +| `(sorting)` | Yes (`event.preventDefault()`) | Sorting expression about to be applied | +| `(sorted)` | No | Sorting completed | +| `(filtering)` | Yes (`event.preventDefault()`) | Filter expression about to be applied | +| `(filtered)` | No | Filtering completed | + +### Grid Lite Limitations + +These features are **NOT available** in Grid Lite: +- Editing (cell, row, batch) — no `[editable]`, no `beginEdit()`, no transactions +- Grouping — no `groupBy()`, no `IgxGroupByRow` +- Paging — no `IgxPaginatorComponent` +- Summaries — no `IgxSummaryOperand` +- Selection — no `rowSelection`, `cellSelection`, or `columnSelection` +- State persistence — no `IgxGridStateDirective` +- Export — no `IgxExcelExporterService` or `IgxCsvExporterService` +- Advanced filtering — no `advancedFilteringExpressionsTree` + +### Grid Lite Key Differences from Flat Grid + +- **Separate package**: `npm install igniteui-grid-lite` +- **`CUSTOM_ELEMENTS_SCHEMA` is not required** — the `IgxGridLiteComponent` Angular wrapper declares it internally; add it to your component's `schemas` only when using the underlying web component tag directly +- **No directives bundle** — import `IgxGridLiteComponent`, `IgxGridLiteColumnComponent`, and template directives individually +- **No `[primaryKey]`** — not needed (no editing, selection, or row operations) +- **No editing** of any kind (cell, row, batch) +- **No selection** (row, cell, column) +- **No paging, grouping, summaries, pinning, moving, export** +- **Column config differs**: uses `field` (not `field` on ``), `sortable`/`filterable` are boolean attributes +- **Remote data**: uses `dataPipelineConfiguration` (async callback) instead of noop strategies + events + +--- + +## Pivot Grid + +For **pivot table analytics** where users reshape data by dragging dimensions between rows, columns, filters, and values. + +> **IMPORTANT**: The Pivot Grid is fundamentally different from the other three grids. Standard grid features like cell editing, row editing, batch editing, paging, column pinning, column moving, row dragging, and standard filtering/sorting are **disabled**. All data operations are driven by the `pivotConfiguration`. + +```typescript +import { Component } from "@angular/core"; +import { DATA } from '../../data/pivot-data'; + +import { IPivotConfiguration, IgxPivotNumericAggregate } from 'igniteui-angular/grids/core'; +import { IgxPivotGridComponent } from 'igniteui-angular/grids/pivot-grid'; + +@Component({ + selector: 'app-pivot-grid-basic-sample', + styleUrls: ['./pivot-grid-basic-sample.component.scss'], + templateUrl: './pivot-grid-basic-sample.component.html', + imports: [IgxPivotGridComponent] +}) +export class PivotGridBasicSampleComponent { + public data = DATA; + public pivotConfigHierarchy: IPivotConfiguration = { + columns: [ + { + + memberName: 'Product', + memberFunction: (data) => data.Product.Name, + enabled: true + } + + ], + rows: [ + { + memberName: 'Seller', + memberFunction: (data) => data.Seller.Name, + enabled: true + } + ], + values: [ + { + member: 'NumberOfUnits', + aggregate: { + aggregator: IgxPivotNumericAggregate.sum, + key: 'sum', + label: 'Sum' + }, + enabled: true + + } + ], + filters: null + }; +} +``` + +```html + + +``` + +```typescript +// Data shape — nested objects are flattened via memberFunction: +export const DATA = [ + { + Product: { Name: 'Clothing', UnitPrice: '12.81' }, + Seller: { Name: 'Stanley Brooker', City: 'Seattle' }, + Date: '2007-01-01T00:00:00', + Value: '94.27', + NumberOfUnits: '282' + }, + // ... +]; +``` + +### Pivot Data Selector + +Provide a drag-and-drop UI for users to reshape the pivot interactively: + +```typescript +// Component class — reference the pivot grid instance for the selector +pivotGridRef = viewChild.required('pivotGrid'); +``` + +```html + + +``` + +### Pivot Grid Data Operations + +- **Filtering**: Per-dimension only — set the `filter` property on an `IPivotDimension`, NOT `[allowFiltering]` +- **Sorting**: Per-dimension only — set `sortable: true` and `sortDirection` on an `IPivotDimension` +- **Aggregation**: Configured via `IPivotValue.aggregate` (e.g., `IgxPivotNumericAggregate.sum`, `.average`, `.min`, `.max`, `.count`) +- **Columns are auto-generated** from the pivot configuration — do not define `` manually +- **State persistence**: Serializes the entire `pivotConfiguration` (dimensions, values, filters) + +--- + +## Key Rules + +1. **Tree Grid**: use `[primaryKey]` + `[foreignKey]` for flat data or `[childDataKey]` for nested objects; filtering is recursive (parents of matching children are always shown) +2. **Hierarchical Grid**: sorting/filtering/paging are independent per level; configure features on the `` blueprint +3. **Pivot Grid is read-only** — editing, paging, pinning, column moving, row dragging are all disabled; use `pivotConfiguration` for all data operations +4. **Grid Lite requires the `igniteui-grid-lite` npm package** — it has no editing, selection, paging, or export; `CUSTOM_ELEMENTS_SCHEMA` is not needed when using the `IgxGridLiteComponent` wrapper +5. **Omit `width` on generated `` elements.** Columns without `width` equally share available grid width. Only set `width` when the user explicitly asks for it. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. + +## See Also + +- [`structure.md`](./structure.md) — Grid setup, column config, sorting UI, filtering UI, selection +- [`features.md`](./features.md) — Grouping, summaries, toolbar, export, row drag, action strip +- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping, canonical import patterns +- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization +- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries +- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations +- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.claude/skills/igniteui-angular-theming/SKILL.md b/.claude/skills/igniteui-angular-theming/SKILL.md new file mode 100644 index 0000000..43d40ee --- /dev/null +++ b/.claude/skills/igniteui-angular-theming/SKILL.md @@ -0,0 +1,383 @@ +--- +name: igniteui-angular-theming +description: "Generates and customizes Ignite UI for Angular themes including color palettes, typography, elevations, and component-level styles using the Sass theming system and the igniteui-theming MCP server. Use when users ask to theme, restyle, or style Ignite UI components, change colors or the color palette, switch between light and dark themes, create or apply a global theme, customize typography or elevation shadows, adjust spacing, sizing, or roundness, or configure per-component design tokens. Do NOT use for component behavior, APIs, or data binding — use igniteui-angular-components or igniteui-angular-grids instead." +user-invocable: true +--- + +# Ignite UI for Angular — Theming Skill + +## Description + +This skill teaches AI agents how to theme Ignite UI for Angular applications using the Sass-based theming system and the **Ignite UI Theming MCP server**. It covers global themes, palettes, typography, elevations, component-level theming, layout controls (spacing, sizing, roundness), and how to use the MCP tools for code generation. + +## Prerequisites + +- An Angular project with `igniteui-angular` installed, **or** `@infragistics/igniteui-angular` for licensed users +- Sass support enabled in the project (default for Angular CLI projects) + +## Ignite UI Theming MCP Server (recommended, not required) + +The `igniteui-theming` MCP server generates production-ready theme code (`create_theme`, `create_palette`, `create_component_theme`, `get_component_design_tokens`, `get_color`, and more). When its tools are available, prefer them over writing theme Sass from memory — start by calling `detect_platform`. + +If the tools are not available, do not block the task — use the manual Sass workflow in this file. Suggest that the user run `npx -y igniteui-cli ai-config` from the project root (it configures both the `igniteui-cli` and `igniteui-theming` MCP servers) and reload the editor. MCP servers cannot be started mid-session; the configuration takes effect on the next session. Editor-specific details are in [`references/mcp-setup.md`](./references/mcp-setup.md). + +## Theming Architecture + +> **Docs:** [Theming Overview](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/index) · [Palette](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/palettes) · [Typography](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/typography) · [Elevations](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/elevations) + +The Ignite UI theming system is built on four pillars: + +| Concept | Purpose | +| -------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| **Palette** | Color system with primary, secondary, surface, gray, info, success, warn, error families, each with shades 50–900 + accents A100–A700 | +| **Typography** | Font family, type scale (h1–h6, subtitle, body, button, caption, overline) | +| **Elevations** | Box-shadow levels 0–24 for visual depth | +| **Schema** | Per-component recipes mapping palette colors to component tokens | + +### Design Systems + +Four built-in design systems are available: + +- **Material** (default) — Material Design 3 +- **Bootstrap** — Bootstrap-inspired +- **Fluent** — Microsoft Fluent Design +- **Indigo** — Infragistics Indigo Design + +Each has light and dark variants (e.g., `$light-material-schema`, `$dark-fluent-schema`). + +## Pre-built Themes + +The quickest way to theme an app is to include a pre-built CSS file in `angular.json`: + +```json +"styles": ["node_modules/igniteui-angular/styles/igniteui-angular.css"] +``` + +> **Licensed package users:** replace `igniteui-angular` with `@infragistics/igniteui-angular` in the path: +> ```json +> "styles": ["node_modules/@infragistics/igniteui-angular/styles/igniteui-angular.css"] +> ``` + +Available pre-built CSS files: + +| File | Theme | +| ------------------------------ | --------------- | +| `igniteui-angular.css` | Material Light | +| `igniteui-angular-dark.css` | Material Dark | +| `igniteui-fluent-light.css` | Fluent Light | +| `igniteui-fluent-dark.css` | Fluent Dark | +| `igniteui-bootstrap-light.css` | Bootstrap Light | +| `igniteui-bootstrap-dark.css` | Bootstrap Dark | +| `igniteui-indigo-light.css` | Indigo Light | +| `igniteui-indigo-dark.css` | Indigo Dark | + +All files are located under `node_modules/igniteui-angular/styles/` (or `node_modules/@infragistics/igniteui-angular/styles/` for the licensed package). + +## Custom Sass Theme (Manual) + +> **Important — Sass Theming Docs**: If the user explicitly asks to build a Sass-based theme or configure Sass, refer to the dedicated Sass documentation: +> +> - [Sass Theming Overview](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/index) +> - [Sass Configuration](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/configuration) +> - [Sass Palettes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/palettes) +> - [Sass Component Themes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/component-themes) + +Create a `styles.scss` file and include it in `angular.json`: + +```scss +// Open-source package +@use 'igniteui-angular/theming' as *; +// Licensed package — same Sass API, different import path +// @use '@infragistics/igniteui-angular/theming' as *; +$my-palette: palette( + $primary: #1976d2, + $secondary: #ff9800, + $surface: #fafafa, +); + +// 2. Typography (optional) +@include typography($font-family: $material-typeface, $type-scale: $material-type-scale); + +// 3. Core reset & base styles +@include core(); + +// 4. Apply theme +@include theme($palette: $my-palette, $schema: $light-material-schema); +``` + +For dark themes, use a dark surface color and a dark schema: + +```scss +$dark-palette: palette( + $primary: #90caf9, + $secondary: #ffb74d, + $surface: #121212, +); + +@include theme($palette: $dark-palette, $schema: $dark-material-schema); +``` + +## Component-Level Theming + +> **Docs:** [Component Themes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/component-themes) + +Override individual component appearance using component theme functions and the `tokens` mixin. + +All color values passed to component themes must be palette tokens, not raw hex/RGB/HSL — see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation) below. + +```scss +@use 'igniteui-angular/theming' as *; + +$custom-avatar: avatar-theme( + $schema: $light-material-schema, + $background: var(--ig-primary-500), + $color: var(--ig-primary-500-contrast), +); + +igx-avatar { + @include tokens($custom-avatar); +} +``` + +### Discovering Available Tokens + +Each component has its own set of design tokens (themeable CSS custom properties). Before theming a component, you must know which tokens exist. Use the **MCP tool** `get_component_design_tokens` to discover them. + +### Compound Components + +Some components (e.g., `combo`, `grid`, `date-picker`, `select`) are **compound** — they contain internal child components, each requiring their own theme. For example, `date-picker` uses `calendar`, `flat-button`, and `input-group` internally. + +Workflow for compound components: +1. Call `get_component_design_tokens` for the parent (e.g., `date-picker`) +2. The response lists related themes and scope selectors +3. Call `create_component_theme` for each child, using the parent's selector as the wrapper + +## Layout Controls + +### Sizing + +> **Docs:** [Display Density / Sizing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/display-density) + +Controls the size of components via `--ig-size` (values: 1 = small, 2 = medium, 3 = large): + +```css +/* Global */ +:root { + --ig-size: 2; +} + +/* Component-scoped */ +igx-grid { + --ig-size: 1; +} +``` + +### Spacing + +> **Docs:** [Spacing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/spacing) + +Controls internal padding via `--ig-spacing` (1 = default, 0.5 = compact, 2 = spacious): + +```css +:root { + --ig-spacing: 1; +} +.compact-section { + --ig-spacing: 0.75; +} +``` + +### Roundness + +Controls border-radius via `--ig-radius-factor` (0 = square, 1 = maximum radius): + +```css +:root { + --ig-radius-factor: 1; +} +igx-avatar { + --ig-radius-factor: 0.5; +} +``` + +## Using the Theming MCP Server + +The Ignite UI Theming MCP server provides tools for AI-assisted theme code generation. + +> **File safety**: When applying generated theme code to an existing style file, make targeted edits that preserve the user's existing custom styles — never wholesale-replace the file contents. If the environment does not gate file writes behind user approval, present the change as a diff for review before writing. + +Always follow this workflow: + +### Step 1 — Detect Platform + +``` +Tool: detect_platform +``` +This auto-detects `angular` from `package.json` and sets the correct import paths. + +### Step 2 — Generate a Full Theme + +``` +Tool: create_theme +Params: { + platform: "angular", + designSystem: "material", + primaryColor: "#1976D2", + secondaryColor: "#FF9800", + surfaceColor: "#FAFAFA", + variant: "light", + fontFamily: "'Roboto', sans-serif", + includeTypography: true, + includeElevations: true +} +``` + +Generates a complete Sass file with palette, typography, elevations, and the `theme()` mixin call. + +### Step 3 — Customize Individual Components + +``` +Tool: get_component_design_tokens +Params: { component: "grid" } +``` + +Then use **palette token references** (not hardcoded hex values) for every color: + +``` +Tool: create_component_theme +Params: { + platform: "angular", + designSystem: "material", + variant: "light", + component: "grid", + tokens: { + "header-background": "var(--ig-primary-50)", + "header-text-color": "var(--ig-primary-800)" + } +} +``` + +### Step 4 — Generate a Palette + +For simple mid-luminance base colors: + +``` +Tool: create_palette +Params: { + platform: "angular", + primary: "#1976D2", + secondary: "#FF9800", + surface: "#FAFAFA", + variant: "light" +} +``` + +For brand-specific exact shade values, use `create_custom_palette` with `mode: "explicit"` for full control over each shade. + +### Step 5 — Adjust Layout + +``` +Tool: set_size → { size: "medium" } +Tool: set_spacing → { spacing: 0.75, component: "grid" } +Tool: set_roundness → { radiusFactor: 0.8 } +``` + +### Step 6 — Reference Palette Colors via `get_color` + +After a palette is generated, use the `get_color` tool to obtain the correct CSS custom property reference for any color you need (see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation)): + +``` +Tool: get_color +Params: { color: "primary", variant: "600" } +→ var(--ig-primary-600) + +Params: { color: "primary", variant: "600", contrast: true } +→ var(--ig-primary-600-contrast) + +Params: { color: "primary", opacity: 0.5 } +→ hsl(from var(--ig-primary-500) h s l / 0.5) +``` + +### Loading Reference Data + +Use `read_resource` with these URIs for preset values and documentation: + +| URI | Content | +| --------------------------------- | ------------------------------ | +| `theming://presets/palettes` | Preset palette colors | +| `theming://presets/typography` | Typography presets | +| `theming://presets/elevations` | Elevation shadow presets | +| `theming://guidance/colors/usage` | Which shades for which purpose | +| `theming://guidance/colors/roles` | Semantic color roles | +| `theming://guidance/colors/rules` | Light/dark theme rules | +| `theming://platforms/angular` | Angular platform specifics | + +## No Hardcoded Colors After Palette Generation + +This is the single most important theming rule. Once a palette exists (via `palette()` in Sass or `create_palette` / `create_theme` via MCP), every color reference must come from the palette tokens, which are available as CSS custom properties on `:root`. This applies to all style code: component theme `tokens` values, custom CSS rules (`color`, `background`, `border-color`, `fill`, `stroke`), Sass variables for derived values, Angular `host` bindings, and inline styles. Hardcoded values break theme switching and drift out of sync when the palette changes. + +### Correct: Palette Tokens + +```scss +// All colors come from the theme — respects palette changes and dark/light switching +.sidebar { + background: var(--ig-surface-500); + color: var(--ig-gray-900); + border-right: 1px solid var(--ig-gray-200); +} + +.accent-badge { + background: var(--ig-secondary-500); + color: var(--ig-secondary-500-contrast); +} + +.hero-section { + // Semi-transparent primary overlay + background: hsl(from var(--ig-primary-500) h s l / 0.12); +} +``` + +### Incorrect: Hardcoded Values + +```scss +// WRONG — these break when the palette changes and ignore dark/light mode +$primary-color: #00838f; // ✗ hardcoded +$secondary-color: #3d5afe; // ✗ hardcoded +$surface-color: #f0f5fa; // ✗ hardcoded + +.sidebar { + background: $surface-color; // ✗ not a palette token + color: #333; // ✗ not a palette token +} +``` + +### When Raw Hex Values Are OK + +Raw hex values are acceptable **only** in these contexts: + +1. **`palette()` call** — the initial seed colors that generate the full palette +2. **`create_palette` / `create_theme` MCP tool inputs** — the base colors passed to the tool +3. **Non-palette decorative values** — e.g., a one-off SVG illustration color that intentionally stays fixed regardless of theme + +Everything else must use `var(--ig--)` tokens. + +## Common Patterns + +> **Light/dark theme switching, scoped themes, and licensed package configuration are in [`references/common-patterns.md`](./references/common-patterns.md).** Read that file for ready-to-use Sass patterns. + +## Key Rules + +1. **Preserve existing styles** — apply theme code as targeted edits to existing style files; never wholesale-replace a file the user has customized +2. **Always call `detect_platform` first** when using MCP tools +3. **Always call `get_component_design_tokens` before `create_component_theme`** to discover valid token names +4. **Palette shades 50 = lightest, 900 = darkest** for all chromatic colors — never invert for dark themes (only gray inverts) +5. **Surface color must match the variant** — light color for `light`, dark color for `dark` +6. **Use `@include core()` once** before `@include theme()` in your global styles +7. **Component themes use `@include tokens($theme)`** inside a selector to emit CSS custom properties +8. **For compound components**, follow the full checklist returned by `get_component_design_tokens` — theme each child component with its scoped selector +9. **No hardcoded colors after palette generation** — see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation); raw hex/RGB/HSL is only acceptable in the initial palette seed values + +## Related Skills + +- [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) — UI components (form controls, layout, data display, feedback/overlays, directives, charts) +- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — Data Grids (Flat Grid, Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid) diff --git a/.claude/skills/igniteui-angular-theming/references/common-patterns.md b/.claude/skills/igniteui-angular-theming/references/common-patterns.md new file mode 100644 index 0000000..9888eff --- /dev/null +++ b/.claude/skills/igniteui-angular-theming/references/common-patterns.md @@ -0,0 +1,45 @@ +# Common Theming Patterns + +> **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.** + +## Contents + +- [Switching Between Light and Dark Themes](#switching-between-light-and-dark-themes) +- [Scoping a Theme to a Container](#scoping-a-theme-to-a-container) +- [Licensed Package Users](#licensed-package-users) + +## Switching Between Light and Dark Themes + +```scss +@use 'igniteui-angular/theming' as *; + +$light-palette: palette($primary: #1976D2, $secondary: #FF9800, $surface: #FAFAFA); +$dark-palette: palette($primary: #90CAF9, $secondary: #FFB74D, $surface: #121212); + +@include core(); +@include typography($font-family: $material-typeface, $type-scale: $material-type-scale); + +// Light is default +@include theme($palette: $light-palette, $schema: $light-material-schema); + +// Dark via class on or +.dark-theme { + @include theme($palette: $dark-palette, $schema: $dark-material-schema); +} +``` + +## Scoping a Theme to a Container + +```scss +.admin-panel { + @include theme($palette: $admin-palette, $schema: $light-indigo-schema); +} +``` + +## Licensed Package Users + +If using the licensed `@infragistics/igniteui-angular` package, set `licensed: true` on MCP tool calls and change the Sass import: + +```scss +@use '@infragistics/igniteui-angular/theming' as *; +``` diff --git a/.claude/skills/igniteui-angular-theming/references/mcp-setup.md b/.claude/skills/igniteui-angular-theming/references/mcp-setup.md new file mode 100644 index 0000000..1e69e24 --- /dev/null +++ b/.claude/skills/igniteui-angular-theming/references/mcp-setup.md @@ -0,0 +1,74 @@ +# Setting Up the Theming MCP Server + +> **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.** + +The Ignite UI Theming MCP server enables AI assistants to generate production-ready theming code. It must be configured in the editor/agent before the theming tools become available, and the editor or agent session must be restarted afterwards — MCP servers cannot be hot-loaded into a running session. + +> Depending on the client, MCP tool names may appear with a server prefix (e.g. `mcp__igniteui-theming__detect_platform` in Claude Code). This skill refers to tools by their bare names. + +## Recommended: One-Command Setup + +From the project root: + +```bash +npx -y igniteui-cli ai-config +``` + +This configures **both** the `igniteui-theming` and `igniteui-cli` MCP servers, copies the Ignite UI Agent Skills into the project, and preserves any existing server entries in the config files. Inline options such as `--agents claude copilot` and `--assistants vscode cursor` select which agents and editors to configure. + +## Manual Configuration (fallback) + +Use these only when `ai-config` is unavailable or your editor is not covered by it. + +### VS Code — `.vscode/mcp.json` + +```json +{ + "servers": { + "igniteui-theming": { + "command": "npx", + "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"] + } + } +} +``` + +`npx -y` works whether `igniteui-theming` is installed locally in `node_modules` or needs to be pulled from the npm registry. + +### Claude Code + +```bash +claude mcp add igniteui-theming -- npx -y igniteui-theming igniteui-theming-mcp +``` + +### Cursor — `.cursor/mcp.json` + +```json +{ + "mcpServers": { + "igniteui-theming": { + "command": "npx", + "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"] + } + } +} +``` + +### Claude Desktop + +Edit the Claude Desktop config file (**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`, **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`) and add the same `mcpServers` entry as shown for Cursor above. + +### WebStorm / JetBrains IDEs + +1. Go to **Settings → Tools → AI Assistant → MCP Servers** +2. Click **+ Add MCP Server** +3. Set Command to `npx` and Arguments to `-y igniteui-theming igniteui-theming-mcp` +4. Click OK and restart the AI Assistant + +## Verifying the Setup + +After restarting the editor/session, ask the AI assistant: + +> "Detect which Ignite UI platform my project uses" + +If the MCP server is running, the `detect_platform` tool will analyze `package.json` and return the detected platform (e.g., `angular`). diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..8c5cf87 --- /dev/null +++ b/.mcp.json @@ -0,0 +1,20 @@ +{ + "mcpServers": { + "igniteui-cli": { + "command": "npx", + "args": [ + "-y", + "igniteui-cli", + "mcp" + ] + }, + "igniteui-theming": { + "command": "npx", + "args": [ + "-y", + "igniteui-theming", + "igniteui-theming-mcp" + ] + } + } +} diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..13b3007 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,58 @@ +You are an expert in TypeScript, Angular, and scalable web application development. You write functional, maintainable, performant, and accessible code following Angular and TypeScript best practices. + +## TypeScript Best Practices + +- Use strict type checking +- Prefer type inference when the type is obvious +- Avoid the `any` type; use `unknown` when type is uncertain + +## Angular Best Practices + +- Always use standalone components over NgModules +- Must NOT set `standalone: true` inside Angular decorators. It's the default in Angular v20+. +- Use signals for state management +- Implement lazy loading for feature routes +- Do NOT use the `@HostBinding` and `@HostListener` decorators. Put host bindings inside the `host` object of the `@Component` or `@Directive` decorator instead +- Use `NgOptimizedImage` for all static images. + - `NgOptimizedImage` does not work for inline base64 images. + +## Accessibility Requirements + +- It MUST pass all AXE checks. +- It MUST follow all WCAG AA minimums, including focus management, color contrast, and ARIA attributes. + +### Components + +- Keep components small and focused on a single responsibility +- Use `input()` and `output()` functions instead of decorators +- Use `computed()` for derived state +- Set `changeDetection: ChangeDetectionStrategy.OnPush` in `@Component` decorator +- Prefer inline templates for small components +- Prefer Reactive forms instead of Template-driven ones +- Do NOT use `ngClass`, use `class` bindings instead +- Do NOT use `ngStyle`, use `style` bindings instead +- When using external templates/styles, use paths relative to the component TS file. + +## State Management + +- Use signals for local component state +- Use `computed()` for derived state +- Keep state transformations pure and predictable +- Do NOT use `mutate` on signals, use `update` or `set` instead + +## Templates + +- Keep templates simple and avoid complex logic +- Use native control flow (`@if`, `@for`, `@switch`) instead of `*ngIf`, `*ngFor`, `*ngSwitch` +- Use the async pipe to handle observables +- Do not assume globals like (`new Date()`) are available. + +## Services + +- Design services around a single responsibility +- Use the `providedIn: 'root'` option for singleton services +- Use the `inject()` function instead of constructor injection + +## UI components + +- Use `igniteui-angular`. diff --git a/angular.json b/angular.json index b9717a9..b730d0e 100644 --- a/angular.json +++ b/angular.json @@ -1,152 +1,134 @@ { - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "taskplanner": { - "root": "", - "sourceRoot": "src", - "projectType": "application", - "prefix": "app", - "schematics": { - "@schematics/angular:component": { - "style": "scss" - } + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "taskplanner": { + "root": "", + "sourceRoot": "src", + "projectType": "application", + "prefix": "app", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": { + "base": "docs", + "browser": "" }, - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "docs", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "aot": true, - "stylePreprocessorOptions": { - "includePaths": [ - "node_modules" - ] - }, - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "src/styles.scss" - ], - "scripts": ["./node_modules/hammerjs/hammer.min.js"], - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - }, - "configurations": { - "es5": { - "tsConfig": "tsconfig-es5.app.json" - }, - "production": { - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "optimization": true, - "outputHashing": "all", - "sourceMap": false, - "namedChunks": false, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": true, - "budgets": [ - { - "type": "initial", - "maximumWarning": "2mb", - "maximumError": "5mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "6kb", - "maximumError": "10kb" - } - ] - } - } - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "buildTarget": "taskplanner:build" - }, - "configurations": { - "production": { - "buildTarget": "taskplanner:build:production" - }, - "es5": { - "buildTarget": "taskplanner:build:es5" - } - } - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "taskplanner:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", - "styles": [ - "src/styles.scss" - ], - "scripts": ["./node_modules/hammerjs/hammer.min.js"], - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "stylePreprocessorOptions": { - "includePaths": [ - "node_modules" - ] - } - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": [ - "tsconfig.app.json", - "tsconfig.spec.json", - "e2e/tsconfig.json" - ], - "exclude": [ - "**/node_modules/**" - ] - } + "index": "src/index.html", + "tsConfig": "tsconfig.app.json", + "stylePreprocessorOptions": { + "includePaths": [ + "node_modules" + ] + }, + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [], + "optimization": false, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true, + "browser": "src/main.ts" + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" }, - "e2e": { - "builder": "@angular-devkit/build-angular:protractor", - "options": { - "protractorConfig": "e2e/protractor.conf.js", - "devServerTarget": "taskplanner:serve" - }, - "configurations": { - "production": { - "devServerTarget": "taskplanner:serve:production" - } - } + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "10kb" } + ] } + } + }, + "serve": { + "builder": "@angular/build:dev-server", + "options": { + "buildTarget": "taskplanner:build" + }, + "configurations": { + "production": { + "buildTarget": "taskplanner:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular/build:extract-i18n", + "options": { + "buildTarget": "taskplanner:build" + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "src/**/*.ts", + "src/**/*.html" + ] + } } + } + } + }, + "cli": { + "analytics": "4de0cfdb-0644-4d05-980f-3e1a8d9fb31c", + "schematicCollections": [ + "angular-eslint" + ] + }, + "schematics": { + "@schematics/angular:component": { + "type": "component" + }, + "@schematics/angular:directive": { + "type": "directive" + }, + "@schematics/angular:service": { + "type": "service" + }, + "@schematics/angular:guard": { + "typeSeparator": "." + }, + "@schematics/angular:interceptor": { + "typeSeparator": "." + }, + "@schematics/angular:module": { + "typeSeparator": "." + }, + "@schematics/angular:pipe": { + "typeSeparator": "." }, - "cli": { - "analytics": "4de0cfdb-0644-4d05-980f-3e1a8d9fb31c" + "@schematics/angular:resolver": { + "typeSeparator": "." } -} \ No newline at end of file + } +} diff --git a/browserslist b/browserslist index bd82888..a157d30 100644 --- a/browserslist +++ b/browserslist @@ -10,4 +10,5 @@ not > 0.5% not last 2 versions not dead not IE 9-11 -Safari >=15 \ No newline at end of file +# Angular 22.1.5 targets "baseline widely available", which bottoms out at Safari 17.2. +Safari >= 17.2 diff --git a/docs/3rdpartylicenses.txt b/docs/3rdpartylicenses.txt index 3ed5e1f..4f1202a 100644 --- a/docs/3rdpartylicenses.txt +++ b/docs/3rdpartylicenses.txt @@ -1,26 +1,11 @@ -@angular/animations -MIT -@angular/common -MIT +-------------------------------------------------------------------------------- +Package: fflate +License: "MIT" -@angular/core -MIT - -@angular/forms -MIT - -@angular/platform-browser -MIT - -@angular/router -MIT - -@igniteui/material-icons-extended -MIT MIT License -Copyright (c) 2020 Infragistics +Copyright (c) 2026 Arjun Barrett Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -39,16 +24,13 @@ 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. +-------------------------------------------------------------------------------- +Package: @angular/core +License: "MIT" +The MIT License -@infragistics/igniteui-angular -SEE LICENSE IN LICENSE - -fflate -MIT -MIT License - -Copyright (c) 2023 Arjun Barrett +Copyright (c) 2010-2026 Google LLC. https://angular.dev/license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -57,70 +39,21 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall 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. - -lodash-es -MIT -Copyright OpenJS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall 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. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +-------------------------------------------------------------------------------- +Package: rxjs +License: "Apache-2.0" -rxjs -Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -324,28 +257,847 @@ Apache-2.0 limitations under the License. +-------------------------------------------------------------------------------- +Package: tslib +License: "0BSD" + +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +-------------------------------------------------------------------------------- +Package: @angular/common +License: "MIT" + +The MIT License + +Copyright (c) 2010-2026 Google LLC. https://angular.dev/license + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: @angular/forms +License: "MIT" + +The MIT License + +Copyright (c) 2010-2026 Google LLC. https://angular.dev/license + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: lodash-es +License: "MIT" + +Copyright OpenJS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall 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. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. + +-------------------------------------------------------------------------------- +Package: igniteui-i18n-core +License: "MIT" + +MIT License + +Copyright (c) 2025 INFRAGISTICS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. +-------------------------------------------------------------------------------- +Package: @angular/animations +License: "MIT" + +The MIT License + +Copyright (c) 2010-2026 Google LLC. https://angular.dev/license + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: @infragistics/igniteui-angular +License: "SEE LICENSE IN LICENSE" + +================================================================= + +Dual License for Ignite UI for Angular + +================================================================= + +This software package is offered under a dual-license model, which allows for both commercial and permissive open-source use, depending on the components, modules, directives, and services being used. + +It is crucial to understand which license applies to which part of the package. + +----------------------------------------------------------------- + +MIT License + +----------------------------------------------------------------- + +The MIT License applies exclusively to the components (encompassing all related modules and directives), directives, and services listed below and their associated source code. All other parts of this package remain under the Infragistics Commercial License. + +Covered Components, Directives and Services with MIT License: + +- igx-accordion +- igx-action-strip +- igxAutocomplete +- igx-avatar +- igx-badge +- igx-banner +- igx-bottom-nav +- igxButton +- igx-card +- igx-carousel +- igx-chat +- igx-checkbox +- igx-chip +- igx-circular-bar +- igx-combo +- igx-date-picker +- igx-date-range-picker +- igx-dialog +- igx-divider +- igx-drop-down +- igx-expansion-panel +- igx-grid-lite +- igx-icon +- igx-input-group +- igx-linear-bar +- igx-list +- igx-navbar +- igx-nav-drawer +- igx-paginator +- igx-radio +- igx-radio-group +- igx-rating +- igx-select +- igx-simple-combo +- igx-slider +- igx-snackbar +- igx-splitter +- igx-switch +- igx-tabs +- igx-toast +- igx-tooltip +- igx-tree +- igx-time-picker +- igx-stepper +- igx-month-picker +- igx-action-strip +- igx-buttongroup +- igx-calendar +- igx-chip-area +- igxDateTimeEditor +- igxDrag +- igxDrop +- igxFor +- igxIconButton +- igxInput +- igxLabel +- igxLayout +- igxMask +- igxRipple +- IgxOverlayService +- IgxTextHighlightDirective +- IgxTextHighlightService +- igxToggle + +The MIT License applies exclusively to the components (encompassing all related modules and directives), directives, and services listed above and their associated source code. +All other parts of this package remain under the Infragistics Commercial License. -uuid -MIT The MIT License (MIT) -Copyright (c) 2010-2020 Robert Kieffer and other contributors +Copyright (c) 2025 Infragistics + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + +For details, see https://opensource.org/licenses/MIT + +----------------------------------------------------------------- + +Infragistics Commercial License + +----------------------------------------------------------------- + +All components (encompassing all related modules and directives), modules, directives, services, and code within this package, except those listed under the MIT License section above, are licensed under the Infragistics Commercial License (EULA). + +This is a commercial product, requiring a valid paid-for license for commercial use. +This product is free to use for non-commercial educational use for students in K through 12 grades +or University programs, and for educators to use in a classroom setting as examples/tools in their curriculum. + +To verify eligibility for free usage, please register for trial at: +https://www.infragistics.com/angular and open a support ticket with a request for free license. + +To acquire a license for commercial usage, please register for trial at: +https://www.infragistics.com/angular and refer to the purchasing options in the pricing section on the product page. + +This repository includes code originally copied from https://github.com/zloirock/core-js +in the projects/igniteui-angular/src/lib/core/setImmediate.ts file. The original version of the code is MIT licensed. See the file header for details. + +© Copyright 2025 INFRAGISTICS. All Rights Reserved. +The Infragistics Ultimate license & copyright applies to this distribution. +For information on that license, please go to: +https://www.infragistics.com/legal/license + +-------------------------------------------------------------------------------- +Package: @angular/platform-browser +License: "MIT" + +The MIT License + +Copyright (c) 2010-2026 Google LLC. https://angular.dev/license + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: @igniteui/material-icons-extended +License: "MIT" + +MIT License + +Copyright (c) 2020 Infragistics + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: @angular/router +License: "MIT" + +The MIT License + +Copyright (c) 2010-2026 Google LLC. https://angular.dev/license + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: dompurify +License: "(MPL-2.0 OR Apache-2.0)" + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + +-------------------------------------------------------------------------------- +Package: core-js +License: "MIT" + +Copyright (c) 2013–2025 Denis Pushkarev (zloirock.ru) +Copyright (c) 2025–2026 CoreJS Company (core-js.io) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: performance-now +License: "MIT" + +Copyright (c) 2013 Braveg1rl Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall 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. +-------------------------------------------------------------------------------- +Package: raf +License: "MIT" +Copyright 2013 Chris Dickinson -web-animations-js -Apache-2.0 +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -zone.js -MIT -The MIT License +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: rgbcolor +License: "MIT OR SEE LICENSE IN FEEL-FREE.md" + +Copyright (c) 2016 Stoyan Stefanov, http://phpied.com/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -Copyright (c) 2010-2023 Google LLC. https://angular.io/license +The above copyright notice and this permission notice shall 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. + + +Exemptions +========== + +Please either apply this, the MIT license, or the license in './FEEL-FREE.md' + +-------------------------------------------------------------------------------- +Package: canvg +License: "MIT" + +The MIT License (MIT) + +Copyright (c) 2010 - present Gabe Lerner (gabelerner@gmail.com) - https://github.com/canvg/canvg + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: @babel/runtime +License: "MIT" + +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: svg-pathdata +License: "MIT" + +The MIT License (MIT) +Copyright © 2017 Nicolas Froidure + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the “Software”), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: stackblur-canvas +License: "MIT" + +Copyright (c) 2010 Mario Klingemann + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: html2canvas +License: "MIT" + +Copyright (c) 2012 Niklas von Hertzen + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall 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. +-------------------------------------------------------------------------------- +Package: iobuffer +License: "MIT" + +The MIT License (MIT) + +Copyright (c) 2015 Michaël Zasso + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + + +-------------------------------------------------------------------------------- +Package: pako +License: "(MIT AND Zlib)" + +(The MIT License) + +Copyright (C) 2014-2017 by Vitaly Puzrin and Andrei Tuputcyn Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -364,3 +1116,58 @@ 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. + +-------------------------------------------------------------------------------- +Package: fast-png +License: "MIT" + +MIT License + +Copyright (c) 2015 Michaël Zasso + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall 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. + +-------------------------------------------------------------------------------- +Package: jspdf +License: "MIT" + +Copyright +(c) 2010-2025 James Hall, https://github.com/MrRio/jsPDF +(c) 2015-2025 yWorks GmbH, https://www.yworks.com/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall 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/docs/chunk-B-Z5f9Bq.js b/docs/chunk-B-Z5f9Bq.js new file mode 100644 index 0000000..d7bca39 --- /dev/null +++ b/docs/chunk-B-Z5f9Bq.js @@ -0,0 +1,3 @@ +import{o as __esmMin}from"./main-ZSOIWSXQ.js";function We(r,i){(i==null||i>r.length)&&(i=r.length);for(var s=0,c=Array(i);s1?s-1:0),f=1;f2&&arguments[2]!==void 0?arguments[2]:_t;if(Be&&Be(r,null),!at(i))return r;let c=i.length;for(;c--;){let f=i[c];if(typeof f==`string`){let d=s(f);d!==f&&(Bn(i)||(i[c]=d),f=d)}r[f]=!0}return r}function Jn(r){for(let i=0;i0&&arguments[0]!==void 0?arguments[0]:_o(),i=o=>sn(o);if(i.version=`3.4.14`,i.removed=[],!r||!r.document||r.document.nodeType!==M.document||!r.Element)return i.isSupported=!1,i;let s=r.document,c=s,f=c.currentScript;r.DocumentFragment;let d=r.HTMLTemplateElement,y=r.Node,st=r.Element,N=r.NodeFilter;r.NamedNodeMap===void 0&&(r.NamedNodeMap||r.MozNamedAttrMap),r.HTMLFormElement;let xt=r.DOMParser,gt=r.trustedTypes,G=st.prototype,ln=P(G,`cloneNode`),vt=P(G,`remove`),cn=P(G,`nextSibling`),q=P(G,`childNodes`),K=P(G,`parentNode`),ce=P(G,`shadowRoot`),kt=P(G,`attributes`),W=y&&y.prototype?P(y.prototype,`nodeType`):null,Z=y&&y.prototype?P(y.prototype,`nodeName`):null,Et=y&&y.prototype?P(y.prototype,`ownerDocument`):null,ct=function(t){return W?W(t):t.nodeType},Ut=function(t){return Z?Z(t):t.nodeName};if(typeof d==`function`){let o=s.createElement(`template`);o.content&&o.content.ownerDocument&&(s=o.content.ownerDocument)}let L,B=``,Ft,ue=!1,ut=0,fe=function(){if(ut>0)throw X(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},J=function(t){fe(),ut++;try{return L.createHTML(t)}finally{ut--}},un=function(t){fe(),ut++;try{return L.createScriptURL(t)}finally{ut--}},fn=function(){return ue||(Ft=go(gt,f),ue=!0),Ft},At=s,zt=At.implementation,pe=At.createNodeIterator,pn=At.createDocumentFragment,mn=At.getElementsByTagName,dn=c.importNode,T=nn();i.isSupported=typeof on==`function`&&typeof K==`function`&&zt&&zt.createHTMLDocument!==void 0;let Tn=oo,hn=ro,_n=io,gn=ao,En=so,An=lo,me=co,yn=fo,de=Qe,h=null,Ht=p({},[...qe,...ne,...oe,...re,...Ke]),_=null,Gt=p({},[...Ze,...ie,...Je,...Pt]),x=Object.seal(it(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ft=null,Te=null,U=Object.seal(it(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),he=!0,Wt=!0,_e=!1,ge=!0,F=!1,Y=!0,j=!1,Bt=!1,yt=null,St=null,Yt=!1,Q=!1,bt=!1,Ot=!1,Ee=!0,Ae=!1,ye=`user-content-`,jt=!0,$t=!1,tt={},et=null,Se=p({},[`annotation-xml`,`audio`,`colgroup`,`desc`,`foreignobject`,`head`,`iframe`,`math`,`mi`,`mn`,`mo`,`ms`,`mtext`,`noembed`,`noframes`,`noscript`,`plaintext`,`script`,`selectedcontent`,`style`,`svg`,`template`,`thead`,`title`,`video`,`xmp`]),be=null,Oe=p({},[`audio`,`video`,`img`,`source`,`image`,`track`]),Re=null,Le=p({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),Rt=`http://www.w3.org/1998/Math/MathML`,Lt=`http://www.w3.org/2000/svg`,v=`http://www.w3.org/1999/xhtml`,nt=v,Xt=!1,Vt=null,Sn=p({},[Rt,Lt,v],ee),De=S([`mi`,`mo`,`mn`,`ms`,`mtext`]),qt=p({},De),we=S([`annotation-xml`]),Kt=p({},we),bn=p({},[`title`,`style`,`font`,`a`,`script`]),pt=null,On=[`application/xhtml+xml`,`text/html`],Rn=`text/html`,E=null,ot=null,Ln=s.createElement(`form`),Ie=function(t){return t instanceof RegExp||t instanceof Function},Zt=function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(ot&&ot===t)return;(!t||typeof t!=`object`)&&(t={}),t=C(t),pt=On.indexOf(t.PARSER_MEDIA_TYPE)===-1?Rn:t.PARSER_MEDIA_TYPE,E=pt===`application/xhtml+xml`?ee:_t,h=H(t,`ALLOWED_TAGS`,Ht,{transform:E}),_=H(t,`ALLOWED_ATTR`,Gt,{transform:E}),Vt=H(t,`ALLOWED_NAMESPACES`,Sn,{transform:ee}),Re=H(t,`ADD_URI_SAFE_ATTR`,Le,{transform:E,base:Le}),be=H(t,`ADD_DATA_URI_TAGS`,Oe,{transform:E,base:Oe}),et=H(t,`FORBID_CONTENTS`,Se,{transform:E}),ft=H(t,`FORBID_TAGS`,C({}),{transform:E}),Te=H(t,`FORBID_ATTR`,C({}),{transform:E}),tt=I(t,`USE_PROFILES`)?t.USE_PROFILES&&typeof t.USE_PROFILES==`object`?C(t.USE_PROFILES):t.USE_PROFILES:!1,he=t.ALLOW_ARIA_ATTR!==!1,Wt=t.ALLOW_DATA_ATTR!==!1,_e=t.ALLOW_UNKNOWN_PROTOCOLS||!1,ge=t.ALLOW_SELF_CLOSE_IN_ATTR!==!1,F=t.SAFE_FOR_TEMPLATES||!1,Y=t.SAFE_FOR_XML!==!1,j=t.WHOLE_DOCUMENT||!1,Q=t.RETURN_DOM||!1,bt=t.RETURN_DOM_FRAGMENT||!1,Ot=t.RETURN_TRUSTED_TYPE||!1,Yt=t.FORCE_BODY||!1,Ee=t.SANITIZE_DOM!==!1,Ae=t.SANITIZE_NAMED_PROPS||!1,jt=t.KEEP_CONTENT!==!1,$t=t.IN_PLACE||!1,de=to(t.ALLOWED_URI_REGEXP)?t.ALLOWED_URI_REGEXP:Qe,nt=typeof t.NAMESPACE==`string`?t.NAMESPACE:v,qt=ae(t,`MATHML_TEXT_INTEGRATION_POINTS`,()=>p({},De)),Kt=ae(t,`HTML_INTEGRATION_POINTS`,()=>p({},we));let e=ae(t,`CUSTOM_ELEMENT_HANDLING`,()=>it(null));if(x=it(null),I(e,`tagNameCheck`)&&Ie(e.tagNameCheck)&&(x.tagNameCheck=e.tagNameCheck),I(e,`attributeNameCheck`)&&Ie(e.attributeNameCheck)&&(x.attributeNameCheck=e.attributeNameCheck),I(e,`allowCustomizedBuiltInElements`)&&typeof e.allowCustomizedBuiltInElements==`boolean`&&(x.allowCustomizedBuiltInElements=e.allowCustomizedBuiltInElements),b(x),F&&(Wt=!1),bt&&(Q=!0),tt&&(h=p({},Ke),_=it(null),tt.html===!0&&(p(h,qe),p(_,Ze)),tt.svg===!0&&(p(h,ne),p(_,ie),p(_,Pt)),tt.svgFilters===!0&&(p(h,oe),p(_,ie),p(_,Pt)),tt.mathMl===!0&&(p(h,re),p(_,Je),p(_,Pt))),U.tagCheck=null,U.attributeCheck=null,I(t,`ADD_TAGS`)&&(typeof t.ADD_TAGS==`function`?U.tagCheck=t.ADD_TAGS:at(t.ADD_TAGS)&&(h===Ht&&(h=C(h)),p(h,t.ADD_TAGS,E))),I(t,`ADD_ATTR`)&&(typeof t.ADD_ATTR==`function`?U.attributeCheck=t.ADD_ATTR:at(t.ADD_ATTR)&&(_===Gt&&(_=C(_)),p(_,t.ADD_ATTR,E))),I(t,`ADD_FORBID_CONTENTS`)&&at(t.ADD_FORBID_CONTENTS)&&(et===Se&&(et=C(et)),p(et,t.ADD_FORBID_CONTENTS,E)),jt&&(h[`#text`]=!0),j&&p(h,[`html`,`head`,`body`]),h.table&&(p(h,[`tbody`]),delete ft.tbody),t.TRUSTED_TYPES_POLICY){if(typeof t.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw X(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof t.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw X(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let n=L;L=t.TRUSTED_TYPES_POLICY;try{B=J(``)}catch(a){throw L=n,a}}else t.TRUSTED_TYPES_POLICY===null?(L=void 0,B=``):(L===void 0&&(L=fn()),L&&typeof B==`string`&&(B=J(``)));S&&S(t),ot=t},Ne=p({},[...ne,...oe,...eo]),Me=p({},[...re,...no]),Dn=function(t,e,n){return e.namespaceURI===v?t===`svg`:e.namespaceURI===Rt?t===`svg`&&(n===`annotation-xml`||qt[n]):!!Ne[t]},wn=function(t,e,n){return e.namespaceURI===v?t===`math`:e.namespaceURI===Lt?t===`math`&&Kt[n]:!!Me[t]},In=function(t,e,n){return e.namespaceURI===Lt&&!Kt[n]||e.namespaceURI===Rt&&!qt[n]?!1:!Me[t]&&(bn[t]||!Ne[t])},Nn=function(t){let e=K(t);(!e||!e.tagName)&&(e={namespaceURI:nt,tagName:`template`});let n=_t(t.tagName),a=_t(e.tagName);return Vt[t.namespaceURI]?t.namespaceURI===Lt?Dn(n,e,a):t.namespaceURI===Rt?wn(n,e,a):t.namespaceURI===v?In(n,e,a):!!(pt===`application/xhtml+xml`&&Vt[t.namespaceURI]):!1},z=function(t){dt(i.removed,{element:t});try{K(t).removeChild(t)}catch{if(vt(t),!K(t))throw X(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},Ce=function(t,e,n){try{t.removeAttributeNode(e)}catch{try{t.removeAttribute(n)}catch{}}},Dt=function(t){wt(t);let e=q(t);if(e){let a=[];V(e,l=>{dt(a,l)}),V(a,l=>{try{vt(l)}catch{}})}let n=kt(t);if(n)for(let a=n.length-1;a>=0;--a){let l=n[a],u=l&&l.name;typeof u==`string`&&Ce(t,l,u)}},$=function(t,e,n){if(!n)try{n=e.getAttributeNode(t)}catch{n=null}dt(i.removed,{attribute:n||null,from:e});try{n?e.removeAttributeNode(n):e.removeAttribute(t)}catch{try{e.removeAttribute(t)}catch{}}if(t===`is`)if(Q||bt)try{z(e)}catch{}else try{e.setAttribute(t,``)}catch{}},Mn=function(t){let e=kt(t);if(e)for(let n=e.length-1;n>=0;--n){let a=e[n],l=a&&a.name;typeof l!=`string`||_[E(l)]||Ce(t,a,l)}},wt=function(t){let e=[t];for(;e.length>0;){let n=e.pop();ct(n)===M.element&&Mn(n);let l=q(n);if(l)for(let u=l.length-1;u>=0;--u)e.push(l[u])}},Pe=function(t,e){return Y?t===`patchsrc`?!0:t===`for`&&e!==`label`&&e!==`output`:!1},Cn=function(t){if(!Y)return;let e=[t];for(;e.length>0;){let n=e.pop(),a=ct(n);if(a===M.processingInstruction||a===M.comment&&O(en,n.data)){try{vt(n)}catch{}continue}if(a===M.element){let u=n,m=E(Ut(n));try{u.hasAttribute&&u.hasAttribute(`patchsrc`)&&u.removeAttribute(`patchsrc`),u.hasAttribute&&u.hasAttribute(`for`)&&Pe(`for`,m)&&u.removeAttribute(`for`)}catch{}}let l=q(n);if(l)for(let u=l.length-1;u>=0;--u)e.push(l[u])}},xe=function(t){let e=null,n=null;if(Yt)t=``+t;else{let u=je(t,/^[\r\n\t ]+/);n=u&&u[0]}pt===`application/xhtml+xml`&&nt===v&&(t=``+t+``);let a=L?J(t):t;if(nt===v)try{e=new xt().parseFromString(a,pt)}catch{}if(!e||!e.documentElement){e=zt.createDocument(nt,`template`,null);try{e.documentElement.innerHTML=Xt?B:a}catch{}}let l=e.body||e.documentElement;return t&&n&&l.insertBefore(s.createTextNode(n),l.childNodes[0]||null),nt===v?mn.call(e,j?`html`:`body`)[0]:j?e.documentElement:l},ve=function(t){let e=Et?Et(t):t.ownerDocument;return pe.call(e||t,t,N.SHOW_ELEMENT|N.SHOW_COMMENT|N.SHOW_TEXT|N.SHOW_PROCESSING_INSTRUCTION|N.SHOW_CDATA_SECTION,null)},It=function(t){return t=Tt(t,Tn,` `),t=Tt(t,hn,` `),t=Tt(t,_n,` `),t},Jt=function(t){var e;t.normalize();let n=Et?Et(t):t.ownerDocument,a=pe.call(n||t,t,N.SHOW_TEXT|N.SHOW_COMMENT|N.SHOW_CDATA_SECTION|N.SHOW_PROCESSING_INSTRUCTION,null),l=a.nextNode();for(;l;)l.data=It(l.data),l=a.nextNode();let u=(e=t.querySelectorAll)===null||e===void 0?void 0:e.call(t,`template`);u&&V(u,m=>{rt(m.content)&&Jt(m.content)})},Nt=function(t){let e=Z?Z(t):null;return typeof e!=`string`||E(e)!==`form`?!1:typeof t.nodeName!=`string`||typeof t.textContent!=`string`||typeof t.removeChild!=`function`||t.attributes!==kt(t)||typeof t.removeAttribute!=`function`||typeof t.setAttribute!=`function`||typeof t.namespaceURI!=`string`||typeof t.insertBefore!=`function`||typeof t.hasChildNodes!=`function`||t.nodeType!==W(t)||t.childNodes!==q(t)},rt=function(t){if(!W||typeof t!=`object`||t===null)return!1;try{return W(t)===M.documentFragment}catch{return!1}},mt=function(t){if(!W||typeof t!=`object`||t===null)return!1;try{return typeof W(t)==`number`}catch{return!1}};function k(o,t,e){o.length!==0&&V(o,n=>{n.call(i,t,e,ot)})}let Pn=function(t,e){return!!(Y&&t.hasChildNodes()&&!mt(t.firstElementChild)&&O(tn,t.textContent)&&O(tn,t.innerHTML)||Y&&t.namespaceURI===v&&To[e]&&(mt(t.firstElementChild)||typeof t.textContent==`string`&&O(ho[e],t.textContent))||t.nodeType===M.processingInstruction||Y&&t.nodeType===M.comment&&O(en,t.data))},Mt=function(t,e){if(t instanceof RegExp)return O(t,e);if(t instanceof Function){for(var n=arguments.length,a=new Array(n>2?n-2:0),l=2;l=0;--m){let g=t===n?ln(l[m],!0):l[m];a.insertBefore(g,cn(t))}}}return z(t),!0},ke=function(t,e,n,a){return t.length===0?e:e===n||e===a?C(e):e},Ue=function(t,e){return t===e||K(t)!==null?!1:($t&&wt(t),!0)},Fe=function(t,e){if(k(T.beforeSanitizeElements,t,null),Ue(t,e))return!0;if(Nt(t))return z(t),!0;let n=E(Ut(t));if(h=ke(T.uponSanitizeElement,h,Ht,yt),k(T.uponSanitizeElement,t,{tagName:n,allowedTags:h}),Ue(t,e))return!0;if(Pn(t,n))return z(t),!0;if(ft[n]||!(U.tagCheck instanceof Function&&U.tagCheck(n))&&!h[n]){let l=xn(t,n,e);return l===!1&&k(T.afterSanitizeElements,t,null),l}if(ct(t)===M.element&&!Nn(t)||(n===`noscript`||n===`noembed`||n===`noframes`)&&O(po,t.innerHTML))return z(t),!0;if(F&&t.nodeType===M.text){let l=It(t.textContent);t.textContent!==l&&(dt(i.removed,{element:t.cloneNode()}),t.textContent=l)}return k(T.afterSanitizeElements,t,null),!1},ze=function(t,e,n){if(Te[e]||Pe(e,t)||Ee&&(e===`id`||e===`name`)&&(n in s||n in Ln))return!1;let a=_[e]||U.attributeCheck instanceof Function&&U.attributeCheck(e,t);return Wt&&O(gn,e)||he&&O(En,e)?!0:a?Re[e]||O(de,Tt(n,me,``))||(e===`src`||e===`xlink:href`||e===`href`)&&t!==`script`&&$e(n,`data:`)===0&&be[t]||_e&&!O(An,Tt(n,me,``))?!0:!n:He(t)&&Mt(x.tagNameCheck,t)&&Mt(x.attributeNameCheck,e,t)||e===`is`&&x.allowCustomizedBuiltInElements&&Mt(x.tagNameCheck,n)},vn=p({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),He=function(t){return!vn[_t(t)]&&O(yn,t)},kn=function(t,e,n,a){if(L&&typeof gt==`object`&&typeof gt.getAttributeType==`function`&&!n)switch(gt.getAttributeType(t,e)){case`TrustedHTML`:return J(a);case`TrustedScriptURL`:return un(a)}return a},Un=function(t,e,n,a){try{n?t.setAttributeNS(n,e,a):t.setAttribute(e,a),Nt(t)?z(t):Ye(i.removed)}catch{$(e,t)}},Ge=function(t){k(T.beforeSanitizeAttributes,t,null);let e=t.attributes;if(!e||Nt(t))return;_=ke(T.uponSanitizeAttribute,_,Gt,St);let n={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:_,forceKeepAttr:void 0},a=e.length,l=E(t.nodeName);for(;a--;){let u=e[a],m=u.name,g=u.namespaceURI,D=u.value,w=E(m),te=D,R=m===`value`?te:Vn(te);if(n.attrName=w,n.attrValue=R,n.keepAttr=!0,n.forceKeepAttr=void 0,k(T.uponSanitizeAttribute,t,n),R=n.attrValue,Ae&&(w===`id`||w===`name`)&&$e(R,ye)!==0&&($(m,t,u),R=ye+R),Y&&O(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,R)){$(m,t,u);continue}if(w===`attributename`&&je(R,`href`)){$(m,t,u);continue}if(!n.forceKeepAttr){if(!n.keepAttr){$(m,t,u);continue}if(!ge&&O(mo,R)){$(m,t,u);continue}if(F&&(R=It(R)),!ze(l,w,R)){$(m,t,u);continue}R=kn(l,w,g,R),R!==te&&Un(t,m,g,R)}}k(T.afterSanitizeAttributes,t,null)},Ct=function(t){let e=null,n=ve(t);for(k(T.beforeSanitizeShadowDOM,t,null);e=n.nextNode();)if(k(T.uponSanitizeShadowNode,e,null),Fe(e,t),Ge(e),rt(e.content)&&Ct(e.content),ct(e)===M.element){let a=ce(e);rt(a)&&(Qt(a),Ct(a))}k(T.afterSanitizeShadowDOM,t,null)},Qt=function(t){let e=[{node:t,shadow:null}];for(;e.length>0;){let n=e.pop();if(n.shadow){Ct(n.shadow);continue}let a=n.node,u=ct(a)===M.element,m=q(a);if(m)for(let g=m.length-1;g>=0;--g)e.push({node:m[g],shadow:null});if(u){let g=Z?Z(a):null;if(typeof g==`string`&&E(g)===`template`){let D=a.content;rt(D)&&e.push({node:D,shadow:null})}}if(u){let g=ce(a);rt(g)&&e.push({node:null,shadow:g},{node:g,shadow:null})}}};return i.sanitize=function(o){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},e=null,n=null,a=null,l=null;if(Xt=!o,Xt&&(o=``),typeof o!=`string`&&!mt(o)&&(o=Qn(o),typeof o!=`string`))throw X(`dirty is not a string, aborting`);if(!i.isSupported)return o;Bt?(h=yt,_=St):Zt(t),(T.uponSanitizeElement.length>0||T.uponSanitizeAttribute.length>0)&&(h=C(h)),T.uponSanitizeAttribute.length>0&&(_=C(_)),i.removed=[];let u=$t&&typeof o!=`string`&&mt(o);if(u){Cn(o);let D=Ut(o);if(typeof D==`string`){let w=E(D);if(!h[w]||ft[w])throw Dt(o),X(`root node is forbidden and cannot be sanitized in-place`)}if(Nt(o))throw Dt(o),X(`root node is clobbered and cannot be sanitized in-place`);try{Qt(o)}catch(w){throw Dt(o),w}}else if(mt(o))e=xe(``),n=e.ownerDocument.importNode(o,!0),n.nodeType===M.element&&n.nodeName===`BODY`||n.nodeName===`HTML`?e=n:e.appendChild(n),Qt(n);else{if(!Q&&!F&&!j&&o.indexOf(`<`)===-1)return L&&Ot?J(o):o;if(e=xe(o),!e)return Q?null:Ot?B:``}e&&Yt&&z(e.firstChild);let m=u?o:e;try{let D=ve(m);for(;a=D.nextNode();)Fe(a,m),Ge(a),rt(a.content)&&Ct(a.content)}catch(D){throw u&&(Dt(o),V(i.removed,w=>{w.element&&wt(w.element)})),D}if(u)return V(i.removed,D=>{D.element&&wt(D.element)}),F&&Jt(o),o;if(Q){if(F&&Jt(e),bt)for(l=pn.call(e.ownerDocument);e.firstChild;)l.appendChild(e.firstChild);else l=e;return(_.shadowroot||_.shadowrootmode)&&(l=dn.call(c,l,!0)),l}let g=j?e.outerHTML:e.innerHTML;return j&&h[`!doctype`]&&e.ownerDocument&&e.ownerDocument.doctype&&e.ownerDocument.doctype.name&&O(uo,e.ownerDocument.doctype.name)&&(g=` +`+g),F&&(g=It(g)),L&&Ot?J(g):g},i.setConfig=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Zt(o),Bt=!0,yt=h,St=_},i.clearConfig=function(){ot=null,Bt=!1,yt=null,St=null,L=Ft,B=``},i.isValidAttribute=function(o,t,e){ot||Zt({});let n=E(o),a=E(t);return ze(n,a,e)},i.addHook=function(o,t){typeof t==`function`&&I(T,o)&&dt(T[o],t)},i.removeHook=function(o,t){if(I(T,o)){if(t!==void 0){let e=$n(T[o],t);return e===-1?void 0:Xn(T[o],e,1)[0]}return Ye(T[o])}},i.removeHooks=function(o){I(T,o)&&(T[o]=[])},i.removeAllHooks=function(){T=nn()},i}var on,Be,Bn,Yn,jn,S,b,it,rn,se,le,V,$n,Ye,dt,Xn,at,_t,ee,je,Tt,$e,Vn,qn,Kn,Xe,Ve,I,ht,O,X,qe,ne,oe,eo,re,no,Ke,Ze,ie,Je,Pt,oo,ro,io,ao,so,Qe,lo,co,uo,fo,tn,en,po,mo,M,an,To,ho,_o,go,nn,H,ae,Eo;var init_chunk_3SJW2DGQ=__esmMin((()=>{on=Object.entries;Be=Object.setPrototypeOf;Bn=Object.isFrozen;Yn=Object.getPrototypeOf;jn=Object.getOwnPropertyDescriptor;S=Object.freeze;b=Object.seal;it=Object.create;rn=typeof Reflect<`u`&&Reflect;se=rn.apply;le=rn.construct;S||(S=function(i){return i});b||(b=function(i){return i});se||(se=function(i,s){for(var c=arguments.length,f=new Array(c>2?c-2:0),d=2;d1?s-1:0),f=1;f`u`?null:A(BigInt.prototype.toString);Ve=typeof Symbol>`u`?null:A(Symbol.prototype.toString);I=A(Object.prototype.hasOwnProperty);ht=A(Object.prototype.toString);O=A(RegExp.prototype.test);X=Zn(TypeError);qe=S([`a`,`abbr`,`acronym`,`address`,`area`,`article`,`aside`,`audio`,`b`,`bdi`,`bdo`,`big`,`blink`,`blockquote`,`body`,`br`,`button`,`canvas`,`caption`,`center`,`cite`,`code`,`col`,`colgroup`,`content`,`data`,`datalist`,`dd`,`decorator`,`del`,`details`,`dfn`,`dialog`,`dir`,`div`,`dl`,`dt`,`element`,`em`,`fieldset`,`figcaption`,`figure`,`font`,`footer`,`form`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`head`,`header`,`hgroup`,`hr`,`html`,`i`,`img`,`input`,`ins`,`kbd`,`label`,`legend`,`li`,`main`,`map`,`mark`,`marquee`,`menu`,`menuitem`,`meter`,`nav`,`nobr`,`ol`,`optgroup`,`option`,`output`,`p`,`picture`,`pre`,`progress`,`q`,`rp`,`rt`,`ruby`,`s`,`samp`,`search`,`section`,`select`,`shadow`,`slot`,`small`,`source`,`spacer`,`span`,`strike`,`strong`,`style`,`sub`,`summary`,`sup`,`table`,`tbody`,`td`,`template`,`textarea`,`tfoot`,`th`,`thead`,`time`,`tr`,`track`,`tt`,`u`,`ul`,`var`,`video`,`wbr`]);ne=S([`svg`,`a`,`altglyph`,`altglyphdef`,`altglyphitem`,`animatecolor`,`animatemotion`,`animatetransform`,`circle`,`clippath`,`defs`,`desc`,`ellipse`,`enterkeyhint`,`exportparts`,`filter`,`font`,`g`,`glyph`,`glyphref`,`hkern`,`image`,`inputmode`,`line`,`lineargradient`,`marker`,`mask`,`metadata`,`mpath`,`part`,`path`,`pattern`,`polygon`,`polyline`,`radialgradient`,`rect`,`stop`,`style`,`switch`,`symbol`,`text`,`textpath`,`title`,`tref`,`tspan`,`view`,`vkern`]);oe=S([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]);eo=S([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]);re=S([`math`,`menclose`,`merror`,`mfenced`,`mfrac`,`mglyph`,`mi`,`mlabeledtr`,`mmultiscripts`,`mn`,`mo`,`mover`,`mpadded`,`mphantom`,`mroot`,`mrow`,`ms`,`mspace`,`msqrt`,`mstyle`,`msub`,`msup`,`msubsup`,`mtable`,`mtd`,`mtext`,`mtr`,`munder`,`munderover`,`mprescripts`]);no=S([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]);Ke=S([`#text`]);Ze=S([`accept`,`action`,`align`,`alt`,`autocapitalize`,`autocomplete`,`autopictureinpicture`,`autoplay`,`background`,`bgcolor`,`border`,`capture`,`cellpadding`,`cellspacing`,`checked`,`cite`,`class`,`clear`,`color`,`cols`,`colspan`,`command`,`commandfor`,`controls`,`controlslist`,`coords`,`crossorigin`,`datetime`,`decoding`,`default`,`dir`,`disabled`,`disablepictureinpicture`,`disableremoteplayback`,`download`,`draggable`,`enctype`,`enterkeyhint`,`exportparts`,`face`,`for`,`headers`,`height`,`hidden`,`high`,`href`,`hreflang`,`id`,`inert`,`inputmode`,`integrity`,`ismap`,`kind`,`label`,`lang`,`list`,`loading`,`loop`,`low`,`max`,`maxlength`,`media`,`method`,`min`,`minlength`,`multiple`,`muted`,`name`,`nonce`,`noshade`,`novalidate`,`nowrap`,`open`,`optimum`,`part`,`pattern`,`placeholder`,`playsinline`,`popover`,`popovertarget`,`popovertargetaction`,`poster`,`preload`,`pubdate`,`radiogroup`,`readonly`,`rel`,`required`,`rev`,`reversed`,`role`,`rows`,`rowspan`,`spellcheck`,`scope`,`selected`,`shape`,`size`,`sizes`,`slot`,`span`,`srclang`,`start`,`src`,`srcset`,`step`,`style`,`summary`,`tabindex`,`title`,`translate`,`type`,`usemap`,`valign`,`value`,`width`,`wrap`,`xmlns`]);ie=S([`accent-height`,`accumulate`,`additive`,`alignment-baseline`,`amplitude`,`ascent`,`attributename`,`attributetype`,`azimuth`,`basefrequency`,`baseline-shift`,`begin`,`bias`,`by`,`class`,`clip`,`clippathunits`,`clip-path`,`clip-rule`,`color`,`color-interpolation`,`color-interpolation-filters`,`color-profile`,`color-rendering`,`cx`,`cy`,`d`,`dx`,`dy`,`diffuseconstant`,`direction`,`display`,`divisor`,`dominant-baseline`,`dur`,`edgemode`,`elevation`,`end`,`exponent`,`fill`,`fill-opacity`,`fill-rule`,`filter`,`filterunits`,`flood-color`,`flood-opacity`,`font-family`,`font-size`,`font-size-adjust`,`font-stretch`,`font-style`,`font-variant`,`font-weight`,`fx`,`fy`,`g1`,`g2`,`glyph-name`,`glyphref`,`gradientunits`,`gradienttransform`,`height`,`href`,`id`,`image-rendering`,`in`,`in2`,`intercept`,`k`,`k1`,`k2`,`k3`,`k4`,`kerning`,`keypoints`,`keysplines`,`keytimes`,`lang`,`lengthadjust`,`letter-spacing`,`kernelmatrix`,`kernelunitlength`,`lighting-color`,`local`,`marker-end`,`marker-mid`,`marker-start`,`markerheight`,`markerunits`,`markerwidth`,`maskcontentunits`,`maskunits`,`max`,`mask`,`mask-type`,`media`,`method`,`mode`,`min`,`name`,`numoctaves`,`offset`,`operator`,`opacity`,`order`,`orient`,`orientation`,`origin`,`overflow`,`paint-order`,`path`,`pathlength`,`patterncontentunits`,`patterntransform`,`patternunits`,`pointer-events`,`points`,`preservealpha`,`preserveaspectratio`,`primitiveunits`,`r`,`rx`,`ry`,`radius`,`refx`,`refy`,`repeatcount`,`repeatdur`,`restart`,`result`,`rotate`,`scale`,`seed`,`shape-rendering`,`slope`,`specularconstant`,`specularexponent`,`spreadmethod`,`startoffset`,`stddeviation`,`stitchtiles`,`stop-color`,`stop-opacity`,`stroke-dasharray`,`stroke-dashoffset`,`stroke-linecap`,`stroke-linejoin`,`stroke-miterlimit`,`stroke-opacity`,`stroke`,`stroke-width`,`style`,`surfacescale`,`systemlanguage`,`tabindex`,`tablevalues`,`targetx`,`targety`,`transform`,`transform-origin`,`text-anchor`,`text-decoration`,`text-orientation`,`text-rendering`,`textlength`,`type`,`u1`,`u2`,`unicode`,`values`,`vector-effect`,`viewbox`,`visibility`,`version`,`vert-adv-y`,`vert-origin-x`,`vert-origin-y`,`width`,`word-spacing`,`wrap`,`writing-mode`,`xchannelselector`,`ychannelselector`,`x`,`x1`,`x2`,`xmlns`,`y`,`y1`,`y2`,`z`,`zoomandpan`]);Je=S([`accent`,`accentunder`,`align`,`bevelled`,`close`,`columnalign`,`columnlines`,`columnspacing`,`columnspan`,`denomalign`,`depth`,`dir`,`display`,`displaystyle`,`encoding`,`fence`,`frame`,`height`,`href`,`id`,`largeop`,`length`,`linethickness`,`lquote`,`lspace`,`mathbackground`,`mathcolor`,`mathsize`,`mathvariant`,`maxsize`,`minsize`,`movablelimits`,`notation`,`numalign`,`open`,`rowalign`,`rowlines`,`rowspacing`,`rowspan`,`rspace`,`rquote`,`scriptlevel`,`scriptminsize`,`scriptsizemultiplier`,`selection`,`separator`,`separators`,`stretchy`,`subscriptshift`,`supscriptshift`,`symmetric`,`voffset`,`width`,`xmlns`]);Pt=S([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]);oo=b(/{{[\w\W]*|^[\w\W]*}}/g);ro=b(/<%[\w\W]*|^[\w\W]*%>/g);io=b(/\${[\w\W]*/g);ao=b(/^data-[\-\w.\u00B7-\uFFFF]+$/);so=b(/^aria-[\-\w]+$/);Qe=b(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);lo=b(/^(?:\w+script|data):/i);co=b(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);uo=b(/^html$/i);fo=b(/^[a-z][.\w]*(-[.\w]+)+$/i);tn=b(/<[/\w!]/g);en=b(/<[/\w]/g);po=b(/<\/no(script|embed|frames)/i);mo=b(/\/>/i);M={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12};an=[`style`,`script`,`xmp`,`iframe`,`noembed`,`noframes`,`plaintext`,`noscript`];To=S(p({},an));ho=(function(){let r={};return V(an,i=>{r[i]=b(new RegExp(`])`,`i`))}),S(r)})();_o=function(){return typeof window>`u`?null:window};go=function(i,s){if(typeof i!=`object`||typeof i.createPolicy!=`function`)return null;let c=null,f=`data-tt-policy-suffix`;s&&s.hasAttribute(f)&&(c=s.getAttribute(f));let d=`dompurify`+(c?`#`+c:``);try{return i.createPolicy(d,{createHTML(y){return y},createScriptURL(y){return y}})}catch{return console.warn(`TrustedTypes policy `+d+` could not be created.`),null}};nn=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};H=function(i,s,c,f){return I(i,s)&&at(i[s])?p(f.base?C(f.base):{},i[s],f.transform):c};ae=function(i,s,c){let f=I(i,s)?i[s]:void 0;return f&&typeof f==`object`?C(f):c()};Eo=sn()}));init_chunk_3SJW2DGQ();export{Eo as default}; \ No newline at end of file diff --git a/docs/chunk-BZLeeQ-I.js b/docs/chunk-BZLeeQ-I.js new file mode 100644 index 0000000..dea11a2 --- /dev/null +++ b/docs/chunk-BZLeeQ-I.js @@ -0,0 +1,5 @@ +import{n as u,o as __esmMin,r as v,t as init_chunk_IFGU66OU}from"./main-ZSOIWSXQ.js";function mc(i,e,r,t,a,n,o){try{var s=i[n](o),u=s.value}catch(l){r(l);return}s.done?e(u):Promise.resolve(u).then(t,a)}function be(i){return function(){var e=this,r=arguments;return new Promise(function(t,a){var n=i.apply(e,r);function o(u){mc(n,t,a,o,s,`next`,u)}function s(u){mc(n,t,a,o,s,`throw`,u)}o(void 0)})}}function $e(i){"@babel/helpers - typeof";return $e=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},$e(i)}function ov(i,e){if($e(i)!=`object`||!i)return i;var r=i[Symbol.toPrimitive];if(r!==void 0){var t=r.call(i,e||`default`);if($e(t)!=`object`)return t;throw new TypeError(`@@toPrimitive must return a primitive value.`)}return(e===`string`?String:Number)(i)}function uv(i){var e=ov(i,`string`);return $e(e)==`symbol`?e:e+``}function ri(i,e,r){return(e=uv(e))in i?Object.defineProperty(i,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):i[e]=r,i}function Jv(i,e){if(typeof e!=`function`&&e!==null)throw new TypeError(`Class extends value `+String(e)+` is not a constructor or null`);function r(){this.constructor=i}Zv(i,e),i.prototype=e===null?Object.create(e):(r.prototype=e.prototype,new r)}function $T(i){var e=``;Array.isArray(i)||(i=[i]);for(var r=0;ri.phi1&&(i.phi2-=2*Me),i.sweepFlag===1&&i.phi2t)return[];if(t===0)return[[i*r/(i*i+e*e),e*r/(i*i+e*e)]];var a=Math.sqrt(t);return[[(i*r+e*a)/(i*i+e*e),(e*r-i*a)/(i*i+e*e)],[(i*r-e*a)/(i*i+e*e),(e*r+i*a)/(i*i+e*e)]]}function Yv(i,e,r){return(1-r)*i+r*e}function Xv(i,e,r,t){return i+Math.cos(t/180*Me)*e+Math.sin(t/180*Me)*r}function Wv(i,e,r,t){var a=1e-6,n=e-i,o=r-e,s=3*n+3*(t-r)-6*o,u=6*(o-n),l=3*n;return Math.abs(s)>>E;if(o[x+3]=Ti,Ti!==0){var Oi=255/Ti;o[x]=(R*T>>>E)*Oi,o[x+1]=(re*T>>>E)*Oi,o[x+2]=(ce*T>>>E)*Oi}else o[x]=o[x+1]=o[x+2]=0;R-=Q,re-=Y,ce-=K,me-=I,Q-=y.r,Y-=y.g,K-=y.b,I-=y.a;var Ve=xi+n+1;Ve=O+(Ve>>E,ie>0?(ie=255/ie,o[ae]=(tt*T>>>E)*ie,o[ae+1]=(it*T>>>E)*ie,o[ae+2]=(at*T>>>E)*ie):o[ae]=o[ae+1]=o[ae+2]=0,tt-=Si,it-=Ei,at-=wi,nt-=Ci,Si-=y.r,Ei-=y.g,wi-=y.b,Ci-=y.a,ae=Qe+((ae=Ni+h)0&&arguments[0]!==void 0?arguments[0]:{},e={window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:i,createCanvas(r,t){return new OffscreenCanvas(r,t)},createImage(r){return be(function*(){var a=yield(yield fetch(r)).blob();return yield createImageBitmap(a)})()}};return(typeof DOMParser<`u`||typeof i>`u`)&&Reflect.deleteProperty(e,`DOMParser`),e}function oO(i){var{DOMParser:e,canvas:r,fetch:t}=i;return{window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:e,fetch:t,createCanvas:r.createCanvas,createImage:r.loadImage}}function mr(i){return i.replace(/(?!\u3000)\s+/gm,` `)}function uO(i){return i.replace(/^[\n \t]+/,``)}function lO(i){return i.replace(/[\n \t]+$/,``)}function se(i){return((i||``).match(/-?(\d+(?:\.\d*(?:[eE][+-]?\d+)?)?|\.\d+)(?=\D|$)/gm)||[]).map(parseFloat)}function cO(i){return hO.test(i)?i.toLowerCase():i}function og(i){var e=/url\(('([^']+)'|"([^"]+)"|([^'")]+))\)/.exec(i)||[];return e[2]||e[3]||e[4]}function fO(i){if(!i.startsWith(`rgb`))return i;var e=3;return i.replace(/\d+(\.\d+)?/g,(t,a)=>e--&&a?String(Math.round(parseFloat(t))):t)}function Ge(i,e){var r=e.exec(i);return r?[i.replace(e,` `),r.length]:[i,0]}function xO(i){var e=[0,0,0],r=i.replace(/:not\(([^)]*)\)/g,` $1 `).replace(/{[\s\S]*/gm,` `),t=0;return[r,t]=Ge(r,vO),e[1]+=t,[r,t]=Ge(r,gO),e[0]+=t,[r,t]=Ge(r,dO),e[1]+=t,[r,t]=Ge(r,pO),e[2]+=t,[r,t]=Ge(r,yO),e[1]+=t,[r,t]=Ge(r,mO),e[1]+=t,r=r.replace(/[*\s+>~]/g,` `).replace(/[#.]/g,` `),[r,t]=Ge(r,bO),e[2]+=t,e.join(``)}function ug(i){return Math.sqrt(Math.pow(i[0],2)+Math.pow(i[1],2))}function Yn(i,e){return(i[0]*e[0]+i[1]*e[1])/(ug(i)*ug(e))}function lg(i,e){return(i[0]*e[1]`u`?i:i.trim().split(`,`).map(wO).join(`,`)}function qO(i){if(!i)return``;var e=i.trim().toLowerCase();switch(e){case`normal`:case`italic`:case`oblique`:case`inherit`:case`initial`:case`unset`:return e;default:return/^oblique\s+(-|)\d+deg$/.test(e)?e:``}}function AO(i){if(!i)return``;var e=i.trim().toLowerCase();switch(e){case`normal`:case`bold`:case`lighter`:case`bolder`:case`inherit`:case`initial`:case`unset`:return e;default:return/^[\d.]+$/.test(e)?e:``}}function bg(i,e){var r=Object.keys(i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(i);e&&(t=t.filter(function(a){return Object.getOwnPropertyDescriptor(i,a).enumerable})),r.push.apply(r,t)}return r}function oi(i){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:!1,r=document.createElement(`img`);return e&&(r.crossOrigin=`Anonymous`),new Promise((t,a)=>{r.onload=()=>{t(r)},r.onerror=(n,o,s,u,l)=>{a(l)},r.src=i})}),Is.apply(this,arguments)}function Og(i,e){var r=Object.keys(i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(i);e&&(t=t.filter(function(a){return Object.getOwnPropertyDescriptor(i,a).enumerable})),r.push.apply(r,t)}return r}function He(i){for(var e=1;e{init_chunk_IFGU66OU();M=u((Ii,zs)=>{"use strict";var br=function(i){return i&&i.Math===Math&&i};zs.exports=br(typeof globalThis==`object`&&globalThis)||br(typeof window==`object`&&window)||br(typeof self==`object`&&self)||br(typeof global==`object`&&global)||br(typeof Ii==`object`&&Ii)||(function(){return this})()||Function(`return this`)()});_=u((kO,$s)=>{"use strict";$s.exports=function(i){try{return!!i()}catch{return!0}}});ue=u((BO,Gs)=>{"use strict";Gs.exports=!_()(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})});xr=u((jO,Hs)=>{"use strict";Hs.exports=!_()(function(){var i=function(){}.bind();return typeof i!=`function`||i.hasOwnProperty(`prototype`)})});H=u((UO,Ys)=>{"use strict";var qg=xr(),ut=Function.prototype.call;Ys.exports=qg?ut.bind(ut):function(){return ut.apply(ut,arguments)}});Ks=u(Qs=>{"use strict";var Xs={}.propertyIsEnumerable,Ws=Object.getOwnPropertyDescriptor;Qs.f=Ws&&!Xs.call({1:2},1)?function(e){var r=Ws(this,e);return!!r&&r.enumerable}:Xs});lt=u((zO,Zs)=>{"use strict";Zs.exports=function(i,e){return{enumerable:!(i&1),configurable:!(i&2),writable:!(i&4),value:e}}});D=u(($O,ro)=>{"use strict";var Js=xr(),eo=Function.prototype,Mi=eo.call,Pg=Js&&eo.bind.bind(Mi,Mi);ro.exports=Js?Pg:function(i){return function(){return Mi.apply(i,arguments)}}});xe=u((GO,io)=>{"use strict";var to=D(),Rg=to({}.toString),Ng=to(``.slice);io.exports=function(i){return Ng(Rg(i),8,-1)}});_i=u((HO,ao)=>{"use strict";var Ig=D(),Mg=_(),Vg=xe(),Vi=Object,_g=Ig(``.split);ao.exports=Mg(function(){return!Vi(`z`).propertyIsEnumerable(0)})?function(i){return Vg(i)===`String`?_g(i,``):Vi(i)}:Vi});Tr=u((YO,no)=>{"use strict";no.exports=function(i){return i==null}});le=u((XO,so)=>{"use strict";var Dg=Tr(),Lg=TypeError;so.exports=function(i){if(Dg(i))throw new Lg(`Can't call method on `+i);return i}});Ke=u((WO,oo)=>{"use strict";var kg=_i(),Bg=le();oo.exports=function(i){return kg(Bg(i))}});L=u((QO,uo)=>{"use strict";var Di=typeof document==`object`&&document.all;uo.exports=typeof Di>`u`&&Di!==void 0?function(i){return typeof i==`function`||i===Di}:function(i){return typeof i==`function`}});te=u((KO,lo)=>{"use strict";var jg=L();lo.exports=function(i){return typeof i==`object`?i!==null:jg(i)}});Pe=u((ZO,ho)=>{"use strict";var Li=M(),Ug=L(),Fg=function(i){return Ug(i)?i:void 0};ho.exports=function(i,e){return arguments.length<2?Fg(Li[i]):Li[i]&&Li[i][e]}});Or=u((JO,co)=>{"use strict";co.exports=D()({}.isPrototypeOf)});Ze=u((eS,go)=>{"use strict";var fo=M().navigator,vo=fo&&fo.userAgent;go.exports=vo?String(vo):``});ct=u((rS,To)=>{"use strict";var xo=M(),ki=Ze(),po=xo.process,yo=xo.Deno,mo=po&&po.versions||yo&&yo.version,bo=mo&&mo.v8,fe,ht;bo&&(fe=bo.split(`.`),ht=fe[0]>0&&fe[0]<4?1:+(fe[0]+fe[1]));!ht&&ki&&(fe=ki.match(/Edge\/(\d+)/),(!fe||fe[1]>=74)&&(fe=ki.match(/Chrome\/(\d+)/),fe&&(ht=+fe[1])));To.exports=ht});Bi=u((tS,So)=>{"use strict";var Oo=ct(),Gg=_(),Yg=M().String;So.exports=!!Object.getOwnPropertySymbols&&!Gg(function(){var i=Symbol(`symbol detection`);return!Yg(i)||!(Object(i)instanceof Symbol)||!Symbol.sham&&Oo&&Oo<41})});ji=u((iS,Eo)=>{"use strict";Eo.exports=Bi()&&!Symbol.sham&&typeof Symbol.iterator==`symbol`});Ui=u((aS,wo)=>{"use strict";var Wg=Pe(),Qg=L(),Kg=Or(),Zg=ji(),Jg=Object;wo.exports=Zg?function(i){return typeof i==`symbol`}:function(i){var e=Wg(`Symbol`);return Qg(e)&&Kg(e.prototype,Jg(i))}});Sr=u((nS,Co)=>{"use strict";var ed=String;Co.exports=function(i){try{return ed(i)}catch{return`Object`}}});Te=u((sS,qo)=>{"use strict";var rd=L(),td=Sr(),id=TypeError;qo.exports=function(i){if(rd(i))return i;throw new id(td(i)+` is not a function`)}});ke=u((oS,Ao)=>{"use strict";var ad=Te(),nd=Tr();Ao.exports=function(i,e){var r=i[e];return nd(r)?void 0:ad(r)}});Ro=u((uS,Po)=>{"use strict";var Fi=H(),zi=L(),$i=te(),sd=TypeError;Po.exports=function(i,e){var r,t;if(e===`string`&&zi(r=i.toString)&&!$i(t=Fi(r,i))||zi(r=i.valueOf)&&!$i(t=Fi(r,i))||e!==`string`&&zi(r=i.toString)&&!$i(t=Fi(r,i)))return t;throw new sd(`Can't convert object to primitive value`)}});ve=u((lS,No)=>{"use strict";No.exports=!1});ft=u((hS,Mo)=>{"use strict";var Io=M(),od=Object.defineProperty;Mo.exports=function(i,e){try{od(Io,i,{value:e,configurable:!0,writable:!0})}catch{Io[i]=e}return e}});vt=u((cS,Do)=>{"use strict";var ud=ve(),ld=M(),hd=ft(),Vo=`__core-js_shared__`,_o=Do.exports=ld[Vo]||hd(Vo,{});(_o.versions||(_o.versions=[])).push({version:`3.50.0`,mode:ud?`pure`:`global`,copyright:`© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.`,license:`https://github.com/zloirock/core-js/blob/v3.50.0/LICENSE`,source:`https://github.com/zloirock/core-js`})});gt=u((fS,ko)=>{"use strict";var Lo=vt(),cd=Object.create||Object;ko.exports=function(i,e){return Lo[i]||(Lo[i]=e||cd(null))}});Er=u((vS,Bo)=>{"use strict";var fd=le(),vd=Object;Bo.exports=function(i){return vd(fd(i))}});he=u((gS,jo)=>{"use strict";var gd=D(),dd=Er(),pd=gd({}.hasOwnProperty);jo.exports=Object.hasOwn||function(e,r){return pd(dd(e),r)}});Gi=u((dS,Uo)=>{"use strict";var yd=D(),md=0,bd=Math.random(),xd=yd(1.1.toString);Uo.exports=function(i){return`Symbol(`+(i===void 0?``:i)+`)_`+xd(++md+bd,36)}});z=u((pS,zo)=>{"use strict";var Td=M(),Od=gt(),Fo=he(),Sd=Gi(),Ed=Bi(),wd=ji(),Je=Td.Symbol,Hi=Od(`wks`),Cd=wd?Je.for||Je:Je&&Je.withoutSetter||Sd;zo.exports=function(i){return Fo(Hi,i)||(Hi[i]=Ed&&Fo(Je,i)?Je[i]:Cd(`Symbol.`+i)),Hi[i]}});Yo=u((yS,Ho)=>{"use strict";var qd=H(),$o=te(),Go=Ui(),Ad=ke(),Pd=Ro(),Rd=z(),Nd=TypeError,Id=Rd(`toPrimitive`);Ho.exports=function(i,e){if(!$o(i)||Go(i))return i;var r=Ad(i,Id),t;if(r){if(e===void 0&&(e=`default`),t=qd(r,i,e),!$o(t)||Go(t))return t;throw new Nd(`Can't convert object to primitive value`)}return e===void 0&&(e=`number`),Pd(i,e)}});Yi=u((mS,Xo)=>{"use strict";var Md=Yo(),Vd=Ui();Xo.exports=function(i){var e=Md(i,`string`);return Vd(e)?e:e+``}});wr=u((bS,Qo)=>{"use strict";var _d=M(),Wo=te(),Xi=_d.document,Dd=Wo(Xi)&&Wo(Xi.createElement);Qo.exports=function(i){return Dd?Xi.createElement(i):{}}});Wi=u((xS,Ko)=>{"use strict";var Ld=ue(),kd=_(),Bd=wr();Ko.exports=!Ld&&!kd(function(){return Object.defineProperty(Bd(`div`),"a",{get:function(){return 7}}).a!==7})});Cr=u(Jo=>{"use strict";var jd=ue(),Ud=H(),Fd=Ks(),zd=lt(),$d=Ke(),Gd=Yi(),Hd=he(),Yd=Wi(),Zo=Object.getOwnPropertyDescriptor;Jo.f=jd?Zo:function(e,r){if(e=$d(e),r=Gd(r),Yd)try{return Zo(e,r)}catch{}if(Hd(e,r))return zd(!Ud(Fd.f,e,r),e[r])}});Qi=u((OS,eu)=>{"use strict";var Xd=ue(),Wd=_();eu.exports=Xd&&Wd(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})});J=u((SS,ru)=>{"use strict";var Qd=te(),Kd=String,Zd=TypeError;ru.exports=function(i){if(Qd(i))return i;throw new Zd(Kd(i)+` is not an object`)}});Oe=u(iu=>{"use strict";var Jd=ue(),ep=Wi(),rp=Qi(),dt=J(),tu=Yi(),tp=TypeError,Ki=Object.defineProperty,ip=Object.getOwnPropertyDescriptor,Zi=`enumerable`,Ji=`configurable`,ea=`writable`;iu.f=Jd?rp?function(e,r,t){if(dt(e),r=tu(r),dt(t),typeof e==`function`&&r===`prototype`&&`value`in t&&ea in t&&!t[ea]){var a=ip(e,r);a&&a[ea]&&(e[r]=t.value,t={configurable:Ji in t?t[Ji]:a[Ji],enumerable:Zi in t?t[Zi]:a[Zi],writable:!1})}return Ki(e,r,t)}:Ki:function(e,r,t){if(dt(e),r=tu(r),dt(t),ep)try{return Ki(e,r,t)}catch{}if(`get`in t||`set`in t)throw new tp(`Accessors not supported`);return`value`in t&&(e[r]=t.value),e}});er=u((wS,au)=>{"use strict";var ap=ue(),np=Oe(),sp=lt();au.exports=ap?function(i,e,r){return np.f(i,e,sp(1,r))}:function(i,e,r){return i[e]=r,i}});qr=u((CS,su)=>{"use strict";var ra=ue(),op=he(),nu=Function.prototype,up=ra&&Object.getOwnPropertyDescriptor,ta=op(nu,`name`);su.exports={EXISTS:ta,PROPER:ta&&function(){}.name===`something`,CONFIGURABLE:ta&&(!ra||ra&&up(nu,`name`).configurable)}});pt=u((qS,ou)=>{"use strict";var cp=D(),fp=L(),ia=vt(),vp=cp(Function.toString);fp(ia.inspectSource)||(ia.inspectSource=function(i){return vp(i)});ou.exports=ia.inspectSource});hu=u((AS,lu)=>{"use strict";var gp=M(),dp=L(),uu=gp.WeakMap;lu.exports=dp(uu)&&/native code/.test(String(uu))});yt=u((PS,fu)=>{"use strict";var pp=gt(),yp=Gi(),cu=pp(`keys`);fu.exports=function(i){return cu[i]||(cu[i]=yp(i))}});mt=u((RS,vu)=>{"use strict";vu.exports={}});Pr=u((NS,pu)=>{"use strict";var mp=hu(),du=M(),bp=te(),xp=er(),aa=he(),na=vt(),Tp=yt(),Op=mt(),gu=`Object already initialized`,sa=du.TypeError,Sp=du.WeakMap,bt,Ar,xt,Ep=function(i){return xt(i)?Ar(i):bt(i,{})},wp=function(i){return function(e){var r;if(!bp(e)||(r=Ar(e)).type!==i)throw new sa(`Incompatible receiver, `+i+` required`);return r}};mp||na.state?(ge=na.state||(na.state=new Sp),ge.get=ge.get,ge.has=ge.has,ge.set=ge.set,bt=function(i,e){if(ge.has(i))throw new sa(gu);return e.facade=i,ge.set(i,e),e},Ar=function(i){return ge.get(i)||{}},xt=function(i){return ge.has(i)}):(Be=Tp(`state`),Op[Be]=!0,bt=function(i,e){if(aa(i,Be))throw new sa(gu);return e.facade=i,xp(i,Be,e),e},Ar=function(i){return aa(i,Be)?i[Be]:{}},xt=function(i){return aa(i,Be)});var ge,Be;pu.exports={set:bt,get:Ar,has:xt,enforce:Ep,getterFor:wp}});la=u((IS,bu)=>{"use strict";var ua=D(),Cp=_(),qp=L(),Tt=he(),oa=ue(),Ap=qr().CONFIGURABLE,Pp=pt(),mu=Pr(),Rp=mu.enforce,Np=mu.get,yu=String,Ot=Object.defineProperty,Ip=ua(``.slice),Mp=ua(``.replace),Vp=ua([].join),_p=oa&&!Cp(function(){return Ot(function(){},`length`,{value:8}).length!==8}),Dp=String(String).split(`String`),Lp=bu.exports=function(i,e,r){Ip(yu(e),0,7)===`Symbol(`&&(e=`[`+Mp(yu(e),/^Symbol\(([^)]*)\).*$/,`$1`)+`]`),r&&r.getter&&(e=`get `+e),r&&r.setter&&(e=`set `+e),(!Tt(i,`name`)||Ap&&i.name!==e)&&(oa?Ot(i,`name`,{value:e,configurable:!0}):i.name=e),_p&&r&&Tt(r,`arity`)&&i.length!==r.arity&&Ot(i,`length`,{value:r.arity});try{r&&Tt(r,`constructor`)&&r.constructor?oa&&Ot(i,`prototype`,{writable:!1}):i.prototype&&(i.prototype=void 0)}catch{}var t=Rp(i);return Tt(t,`source`)||(t.source=Vp(Dp,typeof e==`string`?e:``)),i};Function.prototype.toString=Lp(function(){return qp(this)&&Np(this).source||Pp(this)},`toString`)});Re=u((MS,xu)=>{"use strict";var kp=L(),Bp=Oe(),jp=la(),Up=ft();xu.exports=function(i,e,r,t){t||(t={});var a=t.enumerable,n=t.name!==void 0?t.name:e;if(kp(r)&&jp(r,n,t),t.global)a?i[e]=r:Up(e,r);else{try{t.unsafe?i[e]&&(a=!0):delete i[e]}catch{}a?i[e]=r:Bp.f(i,e,{value:r,enumerable:!1,configurable:!t.nonConfigurable,writable:!t.nonWritable})}return i}});Ou=u((VS,Tu)=>{"use strict";var Fp=Math.ceil,zp=Math.floor;Tu.exports=Math.trunc||function(e){var r=+e;return(r>0?zp:Fp)(r)}});Rr=u((_S,Su)=>{"use strict";var $p=Ou();Su.exports=function(i){var e=+i;return e!==e||e===0?0:$p(e)}});wu=u((DS,Eu)=>{"use strict";var Gp=Rr(),Hp=Math.max,Yp=Math.min;Eu.exports=function(i,e){var r=Gp(i);return r<0?Hp(r+e,0):Yp(r,e)}});je=u((LS,Cu)=>{"use strict";var Xp=Rr(),Wp=Math.min;Cu.exports=function(i){var e=Xp(i);return e>0?Wp(e,9007199254740991):0}});St=u((kS,qu)=>{"use strict";var Qp=je();qu.exports=function(i){return Qp(i.length)}});ha=u((BS,Pu)=>{"use strict";var Kp=Ke(),Zp=wu(),Jp=St(),Au=function(i){return function(e,r,t){var a=Kp(e),n=Jp(a);if(n===0)return!i&&-1;var o=Zp(t,n),s;if(i&&r!==r){for(;n>o;)if(s=a[o++],s!==s)return!0}else for(;n>o;o++)if((i||o in a)&&a[o]===r)return i||o||0;return!i&&-1}};Pu.exports={includes:Au(!0),indexOf:Au(!1)}});fa=u((jS,Nu)=>{"use strict";var ey=D(),ca=he(),ry=Ke(),ty=ha().indexOf,iy=mt(),Ru=ey([].push);Nu.exports=function(i,e){var r=ry(i),t=0,a=[],n;for(n in r)!ca(iy,n)&&ca(r,n)&&Ru(a,n);for(;e.length>t;)ca(r,n=e[t++])&&(~ty(a,n)||Ru(a,n));return a}});Et=u((US,Iu)=>{"use strict";Iu.exports=[`constructor`,`hasOwnProperty`,`isPrototypeOf`,`propertyIsEnumerable`,`toLocaleString`,`toString`,`valueOf`]});Vu=u(Mu=>{"use strict";var ay=fa(),sy=Et().concat(`length`,`prototype`);Mu.f=Object.getOwnPropertyNames||function(e){return ay(e,sy)}});Du=u(_u=>{"use strict";_u.f=Object.getOwnPropertySymbols});ku=u(($S,Lu)=>{"use strict";var oy=Pe(),uy=D(),ly=Vu(),hy=Du(),cy=J(),fy=uy([].concat);Lu.exports=oy(`Reflect`,`ownKeys`)||function(e){var r=ly.f(cy(e)),t=hy.f;return t?fy(r,t(e)):r}});Uu=u((GS,ju)=>{"use strict";var Bu=he(),vy=ku(),gy=Cr(),dy=Oe();ju.exports=function(i,e,r){for(var t=vy(e),a=dy.f,n=gy.f,o=0;o{"use strict";var py=_(),yy=L(),my=/#|\.prototype\./,Nr=function(i,e){var r=xy[by(i)];return r===Oy?!0:r===Ty?!1:yy(e)?py(e):!!e},by=Nr.normalize=function(i){return String(i).replace(my,`.`).toLowerCase()},xy=Nr.data={},Ty=Nr.NATIVE=`N`,Oy=Nr.POLYFILL=`P`;Fu.exports=Nr});ee=u((YS,zu)=>{"use strict";var wt=M(),Sy=Cr().f,Ey=er(),wy=Re(),Cy=ft(),qy=Uu(),Ay=va();zu.exports=function(i,e){var r=i.target,t=i.global,a=i.stat,n,o,s,u,l,h;if(t?o=wt:a?o=wt[r]||Cy(r,{}):o=wt[r]&&wt[r].prototype,o)for(s in e){if(l=e[s],i.dontCallGetSet?(h=Sy(o,s),u=h&&h.value):u=o[s],n=Ay(t?s:r+(a?`.`:`#`)+s,i.forced),!n&&u!==void 0){if(typeof l==typeof u)continue;qy(l,u)}(i.sham||u&&u.sham)&&Ey(l,`sham`,!0),wy(o,s,l,i)}}});ga=u((XS,$u)=>{"use strict";var Ir=M(),Py=Ze(),Ry=xe(),Ct=function(i){return Py.slice(0,i.length)===i};$u.exports=(function(){return Ct(`Bun/`)?`BUN`:Ct(`Cloudflare-Workers`)?`CLOUDFLARE`:Ct(`Deno/`)?`DENO`:Ct(`Node.js/`)?`NODE`:Ir.Bun&&typeof Bun.version==`string`?`BUN`:Ir.Deno&&typeof Deno.version==`object`?`DENO`:Ry(Ir.process)===`process`?`NODE`:Ir.window&&Ir.document?`BROWSER`:`REST`})()});Mr=u((WS,Gu)=>{"use strict";Gu.exports=ga()===`NODE`});Yu=u((QS,Hu)=>{"use strict";Hu.exports=M()});Wu=u((KS,Xu)=>{"use strict";var My=D(),Vy=Te();Xu.exports=function(i,e,r){try{return My(Vy(Object.getOwnPropertyDescriptor(i,e)[r]))}catch{}}});Ku=u((ZS,Qu)=>{"use strict";var _y=te();Qu.exports=function(i){return _y(i)||i===null}});Ju=u((JS,Zu)=>{"use strict";var Dy=Ku(),Ly=String,ky=TypeError;Zu.exports=function(i){if(Dy(i))return i;throw new ky(`Can't set `+Ly(i)+` as a prototype`)}});da=u((eE,el)=>{"use strict";var By=Wu(),jy=te(),Uy=le(),Fy=Ju();el.exports=Object.setPrototypeOf||(`__proto__`in{}?(function(){var i=!1,e={},r;try{r=By(Object.prototype,`__proto__`,`set`),r(e,[]),i=e instanceof Array}catch{}return function(a,n){return Uy(a),Fy(n),jy(a)&&(i?r(a,n):a.__proto__=n),a}})():void 0)});Vr=u((rE,tl)=>{"use strict";var zy=Oe().f,$y=he(),rl=z()(`toStringTag`);tl.exports=function(i,e,r){i&&!r&&(i=i.prototype),i&&!$y(i,rl)&&zy(i,rl,{configurable:!0,value:e})}});nl=u((tE,al)=>{"use strict";var il=la(),Hy=Oe();al.exports=function(i,e,r){return r.get&&il(r.get,e,{getter:!0}),r.set&&il(r.set,e,{setter:!0}),Hy.f(i,e,r)}});ul=u((iE,ol)=>{"use strict";var Yy=Pe(),Xy=nl(),Wy=z(),Qy=ue(),sl=Wy(`species`);ol.exports=function(i){var e=Yy(i);Qy&&e&&!e[sl]&&Xy(e,sl,{configurable:!0,get:function(){return this}})}});hl=u((aE,ll)=>{"use strict";var Ky=Or(),Zy=TypeError;ll.exports=function(i,e){if(Ky(e,i))return i;throw new Zy(`Incorrect invocation`)}});vl=u((nE,fl)=>{"use strict";var e0=z()(`toStringTag`),cl={};cl[e0]=`z`;fl.exports=String(cl)===`[object z]`});pa=u((sE,gl)=>{"use strict";var r0=vl(),t0=L(),qt=xe(),a0=z()(`toStringTag`),n0=Object,s0=qt((function(){return arguments})())===`Arguments`,o0=function(i,e){try{return i[e]}catch{}};gl.exports=r0?qt:function(i){var e,r,t;return i===void 0?`Undefined`:i===null?`Null`:typeof(r=o0(e=n0(i),a0))==`string`?r:s0?qt(e):(t=qt(e))===`Object`&&t0(e.callee)?`Arguments`:t}});xl=u((oE,bl)=>{"use strict";var u0=D(),l0=_(),dl=L(),h0=pa(),c0=Pe(),f0=pt(),pl=function(){},yl=c0(`Reflect`,`construct`),ya=/^\s*(?:class|function)\b/,v0=u0(ya.exec),g0=!ya.test(pl),_r=function(e){if(!dl(e))return!1;try{return yl(pl,[],e),!0}catch{return!1}},ml=function(e){if(!dl(e))return!1;switch(h0(e)){case`AsyncFunction`:case`GeneratorFunction`:case`AsyncGeneratorFunction`:return!1}try{return g0||!!v0(ya,f0(e))}catch{return!0}};ml.sham=!0;bl.exports=!yl||l0(function(){var i;return _r(_r.call)||!_r(Object)||!_r(function(){i=!0})||i})?ml:_r});Ol=u((uE,Tl)=>{"use strict";var d0=xl(),p0=Sr(),y0=TypeError;Tl.exports=function(i){if(d0(i))return i;throw new y0(p0(i)+` is not a constructor`)}});ma=u((lE,El)=>{"use strict";var Sl=J(),m0=Ol(),b0=Tr(),T0=z()(`species`);El.exports=function(i,e){var r=Sl(i).constructor,t;return r===void 0||b0(t=Sl(r)[T0])?e:m0(t)}});ba=u((hE,Al)=>{"use strict";var O0=xr(),ql=Function.prototype,wl=ql.apply,Cl=ql.call;Al.exports=typeof Reflect==`object`&&Reflect.apply||(O0?Cl.bind(wl):function(){return Cl.apply(wl,arguments)})});Dr=u((cE,Pl)=>{"use strict";var S0=xe(),E0=D();Pl.exports=function(i){if(S0(i)===`Function`)return E0(i)}});At=u((fE,Nl)=>{"use strict";var Rl=Dr(),w0=Te(),C0=xr(),q0=Rl(Rl.bind);Nl.exports=function(i,e){return w0(i),e===void 0?i:C0?q0(i,e):function(){return i.apply(e,arguments)}}});xa=u((vE,Il)=>{"use strict";Il.exports=Pe()(`document`,`documentElement`)});Vl=u((gE,Ml)=>{"use strict";Ml.exports=D()([].slice)});Dl=u((dE,_l)=>{"use strict";var R0=TypeError;_l.exports=function(i,e){if(i{"use strict";var Ll=Ze();kl.exports=/ipad|iphone|ipod/i.test(Ll)&&/applewebkit/i.test(Ll)});Ra=u((yE,Yl)=>{"use strict";var ne=M(),N0=ba(),I0=At(),Bl=L(),M0=he(),Hl=_(),jl=xa(),V0=Vl(),Ul=wr(),_0=Dl(),D0=Ta(),L0=Mr(),qa=ne.setImmediate,Aa=ne.clearImmediate,k0=ne.process,Oa=ne.Dispatch,B0=ne.Function,Fl=ne.MessageChannel,j0=ne.String,Sa=0,Lr={},zl=`onreadystatechange`,kr,Ue,Ea,wa;Hl(function(){kr=ne.location});var Pa=function(i){if(M0(Lr,i)){var e=Lr[i];delete Lr[i],e()}},Ca=function(i){return function(){Pa(i)}},$l=function(i){Pa(i.data)},Gl=function(i){ne.postMessage(j0(i),kr.protocol+`//`+kr.host)};(!qa||!Aa)&&(qa=function(e){_0(arguments.length,1);var r=Bl(e)?e:B0(e),t=V0(arguments,1);return Lr[++Sa]=function(){N0(r,void 0,t)},Ue(Sa),Sa},Aa=function(e){delete Lr[e]},L0?Ue=function(i){k0.nextTick(Ca(i))}:Oa&&Oa.now?Ue=function(i){Oa.now(Ca(i))}:Fl&&!D0?(Ea=new Fl,wa=Ea.port2,Ea.port1.onmessage=$l,Ue=I0(wa.postMessage,wa)):ne.addEventListener&&Bl(ne.postMessage)&&!ne.importScripts&&kr&&kr.protocol!==`file:`&&!Hl(Gl)?(Ue=Gl,ne.addEventListener(`message`,$l,!1)):zl in Ul(`script`)?Ue=function(i){jl.appendChild(Ul(`script`))[zl]=function(){jl.removeChild(this),Pa(i)}}:Ue=function(i){setTimeout(Ca(i),0)});Yl.exports={set:qa,clear:Aa}});Ql=u((mE,Wl)=>{"use strict";var Xl=M(),U0=ue(),F0=Object.getOwnPropertyDescriptor;Wl.exports=function(i){if(!U0)return Xl[i];var e=F0(Xl,i);return e&&e.value}});Na=u((bE,Zl)=>{"use strict";var Kl=function(){this.head=null,this.tail=null};Kl.prototype={add:function(i){var e={item:i,next:null},r=this.tail;r?r.next=e:this.head=e,this.tail=e},get:function(){var i=this.head;if(i)return(this.head=i.next)===null&&(this.tail=null),i.item}};Zl.exports=Kl});eh=u((xE,Jl)=>{"use strict";var z0=Ze();Jl.exports=/ipad|iphone|ipod/i.test(z0)&&typeof Pebble<`u`});th=u((TE,rh)=>{"use strict";var $0=Ze();rh.exports=/web0s(?!.*chrome)/i.test($0)});lh=u((OE,uh)=>{"use strict";var tr=M(),G0=Ql(),ih=At(),Ia=Ra().set,H0=Na(),Y0=Ta(),X0=eh(),W0=th(),Ma=Mr(),ah=tr.MutationObserver||tr.WebKitMutationObserver,nh=tr.document,sh=tr.process,Pt=tr.Promise,Da=G0(`queueMicrotask`),rr,Va,_a,Rt,oh;Da||(Br=new H0,jr=function(){var i,e;for(Ma&&(i=sh.domain)&&i.exit();e=Br.get();)try{e()}catch(r){throw Br.head&&rr(),r}i&&i.enter()},!Y0&&!Ma&&!W0&&ah&&nh?(Va=!0,_a=nh.createTextNode(``),new ah(jr).observe(_a,{characterData:!0}),rr=function(){_a.data=Va=!Va}):!X0&&Pt&&Pt.resolve?(Rt=Pt.resolve(void 0),Rt.constructor=Pt,oh=ih(Rt.then,Rt),rr=function(){oh(jr)}):Ma?rr=function(){sh.nextTick(jr)}:(Ia=ih(Ia,tr),rr=function(){Ia(jr)}),Da=function(i){Br.head||rr(),Br.add(i)});var Br,jr;uh.exports=Da});ch=u((SE,hh)=>{"use strict";hh.exports=function(i,e){try{arguments.length===1?console.error(i):console.error(i,e)}catch{}}});Nt=u((EE,fh)=>{"use strict";fh.exports=function(i){try{return{error:!1,value:i()}}catch(e){return{error:!0,value:e}}}});ir=u((wE,vh)=>{"use strict";vh.exports=M().Promise});ar=u((CE,yh)=>{"use strict";var K0=M(),Ur=ir(),Z0=L(),J0=va(),em=pt(),rm=z(),gh=ga(),tm=ve(),La=ct(),dh=Ur&&Ur.prototype,im=rm(`species`),ka=!1,ph=Z0(K0.PromiseRejectionEvent);yh.exports={CONSTRUCTOR:J0(`Promise`,function(){var i=em(Ur),e=i!==String(Ur);if(!e&&La===66||tm&&!(dh.catch&&dh.finally))return!0;if(!La||La<51||!/native code/.test(i)){var r=new Ur(function(n){n(1)}),t=function(n){n(function(){},function(){})},a=r.constructor={};if(a[im]=t,ka=r.then(function(){})instanceof t,!ka)return!0}return!e&&(gh===`BROWSER`||gh===`DENO`)&&!ph}),REJECTION_EVENT:ph,SUBCLASSING:ka}});nr=u((qE,bh)=>{"use strict";var mh=Te(),nm=TypeError,sm=function(i){var e,r;this.promise=new i(function(t,a){if(e!==void 0||r!==void 0)throw new nm(`Bad Promise constructor`);e=t,r=a}),this.resolve=mh(e),this.reject=mh(r)};bh.exports.f=function(i){return new sm(i)}});Bh=u(()=>{"use strict";var om=ee(),um=ve(),_t=Mr(),Ne=M(),lm=Yu(),lr=H(),xh=Re(),Th=da(),hm=Vr(),cm=ul(),fm=Te(),Vt=L(),vm=te(),gm=hl(),dm=ma(),Ch=Ra().set,za=lh(),pm=ch(),ym=Nt(),mm=Na(),qh=Pr(),Dt=ir(),$a=ar(),Ah=nr(),Lt=`Promise`,Ph=$a.CONSTRUCTOR,bm=$a.REJECTION_EVENT,xm=$a.SUBCLASSING,Ba=qh.getterFor(Lt),Tm=qh.set,sr=Dt&&Dt.prototype,Fe=Dt,It=sr,Rh=Ne.TypeError,ja=Ne.document,Ga=Ne.process,Ua=Ah.f,Om=Ua,Sm=!!(ja&&ja.createEvent&&Ne.dispatchEvent),Nh=`unhandledrejection`,Em=`rejectionhandled`,Oh=0,Ih=1,wm=2,Ha=1,Mh=2,Mt,Sh,Vh,Eh,_h=function(i){var e;return vm(i)&&Vt(e=i.then)?e:!1},Dh=function(i,e){var r=e.value,t=e.state===Ih,a=t?i.ok:i.fail,n=i.resolve,o=i.reject,s=i.domain,u,l,h;try{a?(t||(e.rejection===Mh&&qm(e),e.rejection=Ha),a===!0?u=r:(s&&s.enter(),u=a(r),s&&(s.exit(),h=!0)),u===i.promise?o(new Rh(`Promise-chain cycle`)):(l=_h(u))?lr(l,u,n,o):n(u)):o(r)}catch(c){s&&!h&&s.exit(),o(c)}},Lh=function(i,e){i.notified||(i.notified=!0,za(function(){for(var r=i.reactions,t;t=r.get();)Dh(t,i);i.notified=!1,e&&!i.rejection&&Cm(i)}))},kh=function(i,e,r){var t,a;Sm?(t=ja.createEvent(`Event`),t.promise=e,t.reason=r,t.initEvent(i,!1,!0),Ne.dispatchEvent(t)):t={promise:e,reason:r},!bm&&(a=Ne[`on`+i])?a(t):i===Nh&&pm(`Unhandled promise rejection`,r)},Cm=function(i){lr(Ch,Ne,function(){var e=i.facade,r=i.value,t=wh(i),a;if(t&&(a=ym(function(){_t?Ga.emit(`unhandledRejection`,r,e):kh(Nh,e,r)}),i.rejection=_t||wh(i)?Mh:Ha,a.error))throw a.value})},wh=function(i){return i.rejection!==Ha&&!i.parent},qm=function(i){lr(Ch,Ne,function(){var e=i.facade;_t?Ga.emit(`rejectionHandled`,e):kh(Em,e,i.value)})},or=function(i,e,r){return function(t){i(e,t,r)}},ur=function(i,e,r){i.done||(i.done=!0,r&&(i=r),i.value=e,i.state=wm,Lh(i,!0))},Fa=function(i,e,r){if(!i.done){i.done=!0,r&&(i=r);try{if(i.facade===e)throw new Rh(`Promise can't be resolved itself`);var t=_h(e);t?za(function(){var a={done:!1};try{lr(t,e,or(Fa,a,i),or(ur,a,i))}catch(n){ur(a,n,i)}}):(i.value=e,i.state=Ih,Lh(i,!1))}catch(a){ur({done:!1},a,i)}}};if(Ph&&(Fe=function(e){gm(this,It),fm(e),lr(Mt,this);var r=Ba(this);try{e(or(Fa,r),or(ur,r))}catch(t){ur(r,t)}},It=Fe.prototype,Mt=function(e){Tm(this,{type:Lt,done:!1,notified:!1,parent:!1,reactions:new mm,rejection:!1,state:Oh,value:null})},Mt.prototype=xh(It,`then`,function(e,r){var t=Ba(this),a=Ua(dm(this,Fe));return t.parent=!0,a.ok=Vt(e)?e:!0,a.fail=Vt(r)&&r,a.domain=_t?Ga.domain:void 0,t.state===Oh?t.reactions.add(a):za(function(){Dh(a,t)}),a.promise}),Sh=function(){var i=new Mt,e=Ba(i);this.promise=i,this.resolve=or(Fa,e),this.reject=or(ur,e)},Ah.f=Ua=function(i){return i===Fe||i===Vh?new Sh(i):Om(i)},!um&&Vt(Dt)&&sr!==Object.prototype)){Eh=sr.then,xm||xh(sr,`then`,function(e,r){var t=this;return new Fe(function(a,n){lr(Eh,t,a,n)}).then(e,r)},{unsafe:!0});try{delete sr.constructor}catch{}Th&&Th(sr,It)}om({global:!0,constructor:!0,wrap:!0,forced:Ph},{Promise:Fe});Vh=lm.Promise;hm(Fe,Lt,!1,!0);cm(Lt)});Fr=u((RE,jh)=>{"use strict";jh.exports=Object.create?Object.create(null):{}});Fh=u((NE,Uh)=>{"use strict";var Am=z(),Pm=Fr(),Rm=Am(`iterator`),Nm=Array.prototype;Uh.exports=function(i){return i!==void 0&&(Pm.Array===i||Nm[Rm]===i)}});Ya=u((IE,Gh)=>{"use strict";var Im=xe(),Mm=Tr(),zh=ke(),$h=z()(`iterator`),_m=Array.prototype;Gh.exports=function(i){if(!Mm(i))return zh(i,$h)||zh(i,`@@iterator`)||(Im(i)===`Arguments`?_m[$h]:void 0)}});Yh=u((ME,Hh)=>{"use strict";var Dm=H(),Lm=L(),km=J(),Bm=Sr(),jm=Ya(),Um=TypeError;Hh.exports=function(i,e){var r=arguments.length<2?jm(i):e;if(Lm(r))return km(Dm(r,i));throw new Um(Bm(i)+` is not iterable`)}});Qh=u((VE,Wh)=>{"use strict";var Fm=H(),Xh=J(),zm=ke();Wh.exports=function(i,e,r){var t,a;Xh(i);try{if(t=zm(i,`return`),!t){if(e===`throw`)throw r;return r}t=Fm(t,i)}catch(n){a=!0,t=n}if(e===`throw`)throw r;if(a)throw t;return Xh(t),r}});Xa=u((_E,ec)=>{"use strict";var $m=At(),Gm=H(),Hm=J(),Ym=Sr(),Xm=Fh(),Wm=St(),Kh=Or(),Qm=Yh(),Km=Ya(),Zh=Qh(),Zm=TypeError,kt=function(i,e){this.stopped=i,this.result=e},Jh=kt.prototype;ec.exports=function(i,e,r){var t=r&&r.that,a=!!(r&&r.AS_ENTRIES),n=!!(r&&r.IS_RECORD),o=!!(r&&r.IS_ITERATOR),s=!!(r&&r.INTERRUPTED),u=$m(e,t),l,h,c,v,f,g,p,y=function(x){var T=l;return l=void 0,T&&Zh(T,`normal`),new kt(!0,x)},m=function(x){return a?(Hm(x),s?u(x[0],x[1],y):u(x[0],x[1])):s?u(x,y):u(x)};if(n)l=i.iterator;else if(o)l=i;else{if(h=Km(i),!h)throw new Zm(Ym(i)+` is not iterable`);if(Xm(h)){for(c=0,v=Wm(i);v>c;c++)if(f=m(i[c]),f&&Kh(Jh,f))return f;return new kt(!1)}l=Qm(i,h)}for(g=n?i.next:l.next;!(p=Gm(g,l)).done;){var O=p.value;try{f=m(O)}catch(x){if(l)Zh(l,`throw`,x);else throw x}if(typeof f==`object`&&f&&Kh(Jh,f))return f}return new kt(!1)}});nc=u((DE,ac)=>{"use strict";var tc=z()(`iterator`),ic=!1;try{rc=0,Wa={next:function(){return{done:!!rc++}},return:function(){ic=!0}},Wa[tc]=function(){return this},Array.from(Wa,function(){throw 2})}catch{}var rc,Wa;ac.exports=function(i,e){try{if(!e&&!ic)return!1}catch{return!1}var r=!1;try{var t={};t[tc]=function(){return{next:function(){return{done:r=!0}}}},i(t)}catch{}return r}});Qa=u((LE,sc)=>{"use strict";var eb=ir(),rb=nc();sc.exports=ar().CONSTRUCTOR||!rb(function(i){eb.all(i).then(void 0,function(){})})});oc=u(()=>{"use strict";var ib=ee(),ab=H(),nb=Te(),sb=nr(),ob=Nt(),ub=Xa();ib({target:`Promise`,stat:!0,forced:Qa()},{all:function(e){var r=this,t=sb.f(r),a=t.resolve,n=t.reject,o=ob(function(){var s=nb(r.resolve),u=[],l=0,h=1;ub(e,function(c){var v=l++,f=!1;h++,ab(s,r,c).then(function(g){f||(f=!0,u[v]=g,--h||a(u))},n)}),--h||a(u)});return o.error&&n(o.value),t.promise}})});lc=u(()=>{"use strict";var hb=ee(),cb=ve(),fb=ar().CONSTRUCTOR,Za=ir(),vb=Pe(),gb=L(),db=Re(),uc=Za&&Za.prototype;hb({target:`Promise`,proto:!0,forced:fb,real:!0},{catch:function(i){return this.then(void 0,i)}});!cb&&gb(Za)&&(Ka=vb(`Promise`).prototype.catch,uc.catch!==Ka&&db(uc,`catch`,Ka,{unsafe:!0}));var Ka});hc=u(()=>{"use strict";var pb=ee(),yb=H(),mb=Te(),bb=nr(),xb=Nt(),Tb=Xa();pb({target:`Promise`,stat:!0,forced:Qa()},{race:function(e){var r=this,t=bb.f(r),a=t.reject,n=xb(function(){var o=mb(r.resolve);Tb(e,function(s){yb(o,r,s).then(t.resolve,a)})});return n.error&&a(n.value),t.promise}})});cc=u(()=>{"use strict";var Sb=ee(),Eb=nr(),wb=ar().CONSTRUCTOR;Sb({target:`Promise`,stat:!0,forced:wb},{reject:function(e){var r=Eb.f(this),t=r.reject;return t(e),r.promise}})});vc=u((HE,fc)=>{"use strict";var Cb=J(),qb=te(),Ab=nr();fc.exports=function(i,e){if(Cb(i),qb(e)&&e.constructor===i)return e;var r=Ab.f(i),t=r.resolve;return t(e),r.promise}});pc=u(()=>{"use strict";var Pb=ee(),Rb=Pe(),gc=ve(),Nb=ir(),dc=ar().CONSTRUCTOR,Ib=vc(),Mb=Rb(`Promise`),Vb=gc&&!dc;Pb({target:`Promise`,stat:!0,forced:gc||dc},{resolve:function(e){return Ib(Vb&&this===Mb?Nb:this,e)}})});yc=u(()=>{"use strict";Bh();oc();lc();hc();cc();pc()});de=u((ZE,bc)=>{"use strict";var _b=pa(),Db=String;bc.exports=function(i){if(_b(i)===`Symbol`)throw new TypeError(`Cannot convert a Symbol value to a string`);return Db(i)}});Ja=u((JE,xc)=>{"use strict";var Lb=J();xc.exports=function(){var i=Lb(this),e=``;return i.hasIndices&&(e+=`d`),i.global&&(e+=`g`),i.ignoreCase&&(e+=`i`),i.multiline&&(e+=`m`),i.dotAll&&(e+=`s`),i.unicode&&(e+=`u`),i.unicodeSets&&(e+=`v`),i.sticky&&(e+=`y`),e}});an=u((ew,Tc)=>{"use strict";var en=_(),rn=M().RegExp,tn=en(function(){var i=rn(`a`,`y`);return i.lastIndex=2,i.exec(`abcd`)!==null}),Bb=tn||en(function(){return!rn(`a`,`y`).sticky});Tc.exports={BROKEN_CARET:tn||en(function(){var i=rn(`^r`,`gy`);return i.lastIndex=2,i.exec(`str`)!==null}),MISSED_STICKY:Bb,UNSUPPORTED_Y:tn}});Sc=u((rw,Oc)=>{"use strict";var Ub=fa(),Fb=Et();Oc.exports=Object.keys||function(e){return Ub(e,Fb)}});wc=u(Ec=>{"use strict";var zb=ue(),$b=Qi(),Gb=Oe(),Hb=J(),Yb=Ke(),Xb=Sc();Ec.f=zb&&!$b?Object.defineProperties:function(e,r){Hb(e);for(var t=Yb(r),a=Xb(r),n=a.length,o=0,s;n>o;)Gb.f(e,s=a[o++],t[s]);return e}});zr=u((iw,Ic)=>{"use strict";var Wb=J(),Qb=wc(),Cc=Et(),Kb=mt(),Zb=xa(),Jb=wr(),ex=yt(),qc=`>`,Ac=`<`,sn=`prototype`,on=`script`,Rc=ex(`IE_PROTO`),nn=function(){},Nc=function(i){return Ac+on+qc+i+Ac+`/`+on+qc},Pc=function(i){i.write(Nc(``)),i.close();var e=i.parentWindow.Object;return i=null,e},rx=function(){var i=Jb(`iframe`),e=`java`+on+`:`,r;return i.style.display=`none`,Zb.appendChild(i),i.src=String(e),r=i.contentWindow.document,r.open(),r.write(Nc(`document.F=Object`)),r.close(),r.F},Bt,jt=function(){try{Bt=new ActiveXObject(`htmlfile`)}catch{}jt=typeof document<`u`?document.domain&&Bt?Pc(Bt):rx():Pc(Bt);for(var i=Cc.length;i--;)delete jt[sn][Cc[i]];return jt()};Kb[Rc]=!0;Ic.exports=Object.create||function(e,r){var t;return e!==null?(nn[sn]=Wb(e),t=new nn,nn[sn]=null,t[Rc]=e):t=jt(),r===void 0?t:Qb.f(t,r)}});Vc=u((aw,Mc)=>{"use strict";var tx=_(),ax=M().RegExp;Mc.exports=tx(function(){var i=ax(`.`,`s`);return!(i.dotAll&&i.test(` +`)&&i.flags===`s`)})});Dc=u((nw,_c)=>{"use strict";var nx=_(),ox=M().RegExp;_c.exports=nx(function(){var i=ox(`(?b)`,`g`);return i.exec(`b`).groups.a!==`b`||`b`.replace(i,`$c`)!==`bc`})});zt=u((sw,jc)=>{"use strict";var hr=H(),Ft=D(),ux=de(),lx=Ja(),hx=an(),cx=gt(),fx=zr(),vx=Pr().get,gx=Vc(),dx=Dc(),px=cx(`native-string-replace`,String.prototype.replace),Ut=RegExp.prototype.exec,un=Ut,yx=Ft(``.charAt),mx=Ft(``.indexOf),bx=Ft(``.replace),Lc=Ft(``.slice),ln=(function(){var i=/a/,e=/b*/g;return hr(Ut,i,`a`),hr(Ut,e,`a`),i.lastIndex!==0||e.lastIndex!==0})(),Bc=hx.BROKEN_CARET,hn=/()??/.exec(``)[1]!==void 0,xx=ln||hn||Bc||gx||dx,kc=function(i,e){for(var r=i.groups=fx(null),t=0;t0&&yx(a,r.lastIndex-1);r.lastIndex>0&&(!r.multiline||r.multiline&&p!==` +`&&p!==`\r`&&p!==`\u2028`&&p!==`\u2029`)&&(v=`(?: (?:`+v+`))`,g=` `+g,f++),s=new RegExp(`^(?:`+v+`)`,c)}hn&&(s=new RegExp(`^`+v+`$(?!\\s)`,c)),ln&&(u=r.lastIndex);var y=hr(Ut,h?s:r,g);return h?y?(y.input=a,y[0]=Lc(y[0],f),y.index=r.lastIndex,r.lastIndex+=y[0].length):r.lastIndex=0:ln&&y&&(r.lastIndex=r.global?y.index+y[0].length:u),hn&&y&&y.length>1&&hr(px,y[0],s,function(){for(var m=1;m{"use strict";var Tx=ee(),Uc=zt();Tx({target:`RegExp`,proto:!0,forced:/./.exec!==Uc},{exec:Uc})});$t=u((lw,Yc)=>{"use strict";Fc();var zc=H(),$c=Re(),Ox=zt(),Gc=_(),Hc=z(),Sx=er(),Ex=Hc(`species`),cn=RegExp.prototype;Yc.exports=function(i,e,r,t){var a=Hc(i),n=!Gc(function(){var l={};return l[a]=function(){return 7},``[i](l)!==7}),o=n&&!Gc(function(){var l=!1,h=/a/;if(i===`split`){var c={};c[Ex]=function(){return h},h={constructor:c,flags:``},h[a]=/./[a]}return h.exec=function(){return l=!0,null},h[a](``),!l});if(!n||!o||r){var s=/./[a],u=e(a,``[i],function(l,h,c,v,f){var g=h.exec;return g===Ox||g===cn.exec?n&&!f?{done:!0,value:zc(s,h,c,v)}:{done:!0,value:zc(l,c,h,v)}:{done:!1}});$c(String.prototype,i,u[0]),$c(cn,a,u[1])}t&&Sx(cn[a],`sham`,!0)}});Kc=u((hw,Qc)=>{"use strict";var fn=D(),wx=Rr(),Cx=de(),qx=le(),Ax=fn(``.charAt),Xc=fn(``.charCodeAt),Px=fn(``.slice),Wc=function(i){return function(e,r){var t=Cx(qx(e)),a=wx(r),n=t.length,o,s;return a<0||a>=n?i?``:void 0:(o=Xc(t,a),o<55296||o>56319||a+1===n||(s=Xc(t,a+1))<56320||s>57343?i?Ax(t,a):o:i?Px(t,a,a+2):(o-55296<<10)+(s-56320)+65536)}};Qc.exports={codeAt:Wc(!1),charAt:Wc(!0)}});Gt=u((cw,Zc)=>{"use strict";var Rx=Kc().charAt;Zc.exports=function(i,e,r){return e+(r&&Rx(i,e).length||1)}});rf=u((fw,ef)=>{"use strict";var Nx=M(),Ix=_(),Jc=Nx.RegExp;ef.exports={correct:!Ix(function(){var i=!0;try{Jc(`.`,`d`)}catch{i=!1}var e={},r=``,t=i?`dgimsy`:`gimsy`,a=function(u,l){Object.defineProperty(e,u,{get:function(){return r+=l,!0}})},n={dotAll:`s`,global:`g`,ignoreCase:`i`,multiline:`m`,sticky:`y`};i&&(n.hasIndices=`d`);for(var o in n)a(o,n[o]);return Object.getOwnPropertyDescriptor(Jc.prototype,`flags`).get.call(e)!==t||r!==t})}});$r=u((vw,af)=>{"use strict";var Vx=H(),_x=he(),Dx=Or(),tf=rf(),Lx=Ja(),kx=RegExp.prototype;af.exports=tf.correct?function(i){return i.flags}:function(i){return!tf.correct&&Dx(kx,i)&&!_x(i,`flags`)?Vx(Lx,i):i.flags}});Ht=u((gw,sf)=>{"use strict";var nf=H(),Bx=J(),jx=L(),Ux=xe(),Fx=zt(),zx=TypeError;sf.exports=function(i,e){var r=i.exec;if(jx(r)){var t=nf(r,i,e);return t!==null&&Bx(t),t}if(Ux(i)===`RegExp`)return nf(Fx,i,e);throw new zx(`RegExp#exec called on incompatible receiver`)}});uf=u(()=>{"use strict";var $x=H(),Gx=D(),Hx=$t(),Yx=J(),Xx=te(),Wx=je(),Yt=de(),Qx=le(),Kx=ke(),Zx=Gt(),Jx=$r(),of=Ht(),vn=Gx(``.indexOf);Hx(`match`,function(i,e,r){return[function(a){var n=Qx(this),o=Xx(a)?Kx(a,i):void 0;if(o)return $x(o,a,n);var s=Yt(n);return new RegExp(a)[i](s)},function(t){var a=Yx(this),n=Yt(t),o=r(e,a,n);if(o.done)return o.value;var s=Yt(Jx(a));if(!~vn(s,`g`))return of(a,n);var u=!!~vn(s,`u`)||!!~vn(s,`v`);a.lastIndex=0;for(var l=[],h=0,c;(c=of(a,n))!==null;){var v=Yt(c[0]);l[h]=v,v===``&&(a.lastIndex=Zx(n,Wx(a.lastIndex),u)),h++}return h===0?null:l}]})});hf=u((yw,lf)=>{"use strict";var pn=D(),e1=Er(),r1=Math.floor,gn=pn(``.charAt),t1=pn(``.replace),dn=pn(``.slice),i1=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,a1=/\$([$&'`]|\d{1,2})/g;lf.exports=function(i,e,r,t,a,n){var o=r+i.length,s=t.length,u=a1;return a!==void 0&&(a=e1(a),u=i1),t1(n,u,function(l,h){var c;switch(gn(h,0)){case`$`:return`$`;case`&`:return i;case"`":return dn(e,0,r);case`'`:return dn(e,o);case`<`:c=a[dn(h,1,-1)];break;default:var v=+h;if(v===0)return l;if(v>s){var f=r1(v/10);return f===0?l:f<=s?t[f-1]===void 0?gn(h,1):t[f-1]+gn(h,1):l}c=t[v-1]}return c===void 0?``:c})}});gf=u(()=>{"use strict";var n1=ba(),cf=H(),Xt=D(),s1=$t(),o1=_(),u1=J(),l1=L(),h1=te(),c1=Rr(),f1=je(),ze=de(),v1=le(),g1=Gt(),d1=ke(),p1=hf(),y1=$r(),m1=Ht(),mn=z()(`replace`),x1=Math.max,T1=Math.min,O1=Xt([].concat),yn=Xt([].push),cr=Xt(``.indexOf),ff=Xt(``.slice),S1=function(i){return i===void 0?i:String(i)},E1=(function(){return`a`.replace(/./,`$0`)===`$0`})(),vf=(function(){return/./[mn]?/./[mn](`a`,`$0`)===``:!1})();s1(`replace`,function(i,e,r){var t=vf?`$`:`$0`;return[function(n,o){var s=v1(this),u=h1(n)?d1(n,mn):void 0;return u?cf(u,n,s,o):cf(e,ze(s),n,o)},function(a,n){var o=u1(this),s=ze(a),u=l1(n);u||(n=ze(n));var l=ze(y1(o));if(typeof n==`string`&&!~cr(n,t)&&!~cr(n,`$<`)&&!~cr(l,`y`)){var h=r(e,o,s,n);if(h.done)return h.value}var c=!!~cr(l,`g`),v;c&&(v=!!~cr(l,`u`)||!!~cr(l,`v`),o.lastIndex=0);for(var f=[],g;g=m1(o,s),!(g===null||(yn(f,g),!c));)ze(g[0])===``&&(o.lastIndex=g1(s,f1(o.lastIndex),v));for(var y=``,m=0,O=0;O=m&&(y+=ff(s,m,T)+C,m=T+x.length)}return y+ff(s,m)}]},!!o1(function(){var i=/./;return i.exec=function(){var e=[];return e.groups={a:`7`},e},``.replace(i,`$`)!==`7`})||!E1||vf)});pf=u((xw,df)=>{"use strict";var C1=te(),q1=xe(),P1=z()(`match`);df.exports=function(i){var e;return C1(i)&&((e=i[P1])!==void 0?!!e:q1(i)===`RegExp`)}});Wt=u((Tw,yf)=>{"use strict";var R1=pf(),N1=TypeError;yf.exports=function(i){if(R1(i))throw new N1(`The method doesn't accept regular expressions`);return i}});Qt=u((Ow,mf)=>{"use strict";var M1=z()(`match`);mf.exports=function(i){var e=/./;try{`/./`[i](e)}catch{try{return e[M1]=!1,`/./`[i](e)}catch{}}return!1}});Tf=u(()=>{"use strict";var V1=ee(),_1=Dr(),D1=Cr().f,L1=je(),bf=de(),k1=Wt(),B1=le(),j1=Qt(),U1=ve(),F1=_1(``.slice),z1=Math.min,xf=j1(`startsWith`);V1({target:`String`,proto:!0,forced:!(!U1&&!xf&&!!(function(){var i=D1(String.prototype,`startsWith`);return i&&!i.writable})())&&!xf},{startsWith:function(e){var r=bf(B1(this));k1(e);var t=bf(e),a=L1(z1(arguments.length>1?arguments[1]:void 0,r.length));return F1(r,a,a+t.length)===t}})});Sf=u((ww,Of)=>{"use strict";var G1=z(),H1=zr(),Y1=Oe().f,bn=G1(`unscopables`),xn=Array.prototype;xn[bn]===void 0&&Y1(xn,bn,{configurable:!0,value:H1(null)});Of.exports=function(i){xn[bn][i]=!0}});wf=u((Cw,Ef)=>{"use strict";Ef.exports=!_()(function(){function i(){}return i.prototype.constructor=null,Object.getPrototypeOf(new i)!==i.prototype})});On=u((qw,qf)=>{"use strict";var W1=he(),Q1=L(),K1=Er(),Z1=yt(),J1=wf(),Cf=Z1(`IE_PROTO`),Tn=Object,e2=Tn.prototype;qf.exports=J1?Tn.getPrototypeOf:function(i){var e=K1(i);if(W1(e,Cf))return e[Cf];var r=e.constructor;return Q1(r)&&e instanceof r?r.prototype:e instanceof Tn?e2:null}});Cn=u((Aw,Rf)=>{"use strict";var r2=_(),t2=L(),i2=te(),a2=zr(),Af=On(),n2=Re(),s2=z(),o2=ve(),wn=s2(`iterator`),Pf=!1,Se,Sn,En;[].keys&&(En=[].keys(),`next`in En?(Sn=Af(Af(En)),Sn!==Object.prototype&&(Se=Sn)):Pf=!0);!i2(Se)||r2(function(){var i={};return Se[wn].call(i)!==i})?Se={}:o2&&(Se=a2(Se));t2(Se[wn])||n2(Se,wn,function(){return this});Rf.exports={IteratorPrototype:Se,BUGGY_SAFARI_ITERATORS:Pf}});If=u((Pw,Nf)=>{"use strict";var l2=Cn().IteratorPrototype,h2=zr(),c2=lt(),f2=Vr(),v2=Fr(),g2=function(){return this};Nf.exports=function(i,e,r,t){var a=e+` Iterator`;return i.prototype=h2(l2,{next:c2(+!t,r)}),f2(i,a,!1,!0),v2[a]=g2,i}});zf=u((Rw,Ff)=>{"use strict";var d2=ee(),p2=H(),Kt=ve(),jf=qr(),y2=L(),m2=If(),Mf=On(),Vf=da(),b2=Vr(),x2=er(),qn=Re(),T2=z(),_f=Fr(),Uf=Cn(),O2=jf.PROPER,S2=jf.CONFIGURABLE,Df=Uf.IteratorPrototype,Zt=Uf.BUGGY_SAFARI_ITERATORS,Gr=T2(`iterator`),Lf=`keys`,Hr=`values`,kf=`entries`,Bf=function(){return this};Ff.exports=function(i,e,r,t,a,n,o){m2(r,e,t);var s=function(m){if(m===a&&v)return v;if(!Zt&&m&&m in h)return h[m];switch(m){case Lf:return function(){return new r(this,m)};case Hr:return function(){return new r(this,m)};case kf:return function(){return new r(this,m)}}return function(){return new r(this)}},u=e+` Iterator`,l=!1,h=i.prototype,c=h[Gr]||h[`@@iterator`]||a&&h[a],v=!Zt&&c||s(a),f=e===`Array`&&h.entries||c,g,p,y;if(f&&(g=Mf(f.call(new i)),g!==Object.prototype&&g.next&&(!Kt&&Mf(g)!==Df&&(Vf?Vf(g,Df):y2(g[Gr])||qn(g,Gr,Bf)),b2(g,u,!0,!0),Kt&&(_f[u]=Bf))),O2&&a===Hr&&c&&c.name!==Hr&&(!Kt&&S2?x2(h,`name`,Hr):(l=!0,v=function(){return p2(c,this)})),a)if(p={values:s(Hr),keys:n?v:s(Lf),entries:s(kf)},o)for(y in p)(Zt||l||!(y in h))&&qn(h,y,p[y]);else d2({target:e,proto:!0,forced:Zt||l},p);return(!Kt||o)&&h[Gr]!==v&&qn(h,Gr,v,{name:a}),_f[e]=v,p}});Gf=u((Nw,$f)=>{"use strict";$f.exports=function(i,e){return{value:i,done:e}}});Pn=u((Iw,Qf)=>{"use strict";var E2=Ke(),An=Sf(),Hf=Fr(),Xf=Pr(),w2=Oe().f,C2=zf(),Jt=Gf(),q2=ve(),A2=ue(),Wf=`Array Iterator`,P2=Xf.set,R2=Xf.getterFor(Wf);Qf.exports=C2(Array,`Array`,function(i,e){P2(this,{type:Wf,target:E2(i),index:0,kind:e})},function(){var i=R2(this),e=i.target,r=i.index++;if(!e||r>=e.length)return i.target=null,Jt(void 0,!0);switch(i.kind){case`keys`:return Jt(r,!1);case`values`:return Jt(e[r],!1)}return Jt([r,e[r]],!1)},`values`);var Yf=Hf.Arguments=Hf.Array;An(`keys`);An(`values`);An(`entries`);if(!q2&&A2&&Yf.name!==`values`)try{w2(Yf,`name`,{value:`values`})}catch{}});Zf=u((Mw,Kf)=>{"use strict";Kf.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}});rv=u((Vw,ev)=>{"use strict";var Rn=wr()(`span`).classList,Jf=Rn&&Rn.constructor&&Rn.constructor.prototype;ev.exports=Jf===Object.prototype?void 0:Jf});sv=u(()=>{"use strict";var tv=M(),av=Zf(),I2=rv(),Yr=Pn(),iv=er(),M2=Vr(),Nn=z()(`iterator`),In=Yr.values,nv=function(i,e){if(i){if(i[Nn]!==In)try{iv(i,Nn,In)}catch{i[Nn]=In}if(M2(i,e,!0),av[e]){for(var r in Yr)if(i[r]!==Yr[r])try{iv(i,r,Yr[r])}catch{i[r]=Yr[r]}}}};for(ei in av)nv(tv[ei]&&tv[ei].prototype,ei);var ei;nv(I2,`DOMTokenList`)});vv=u((Gw,fv)=>{"use strict";var _2=Te(),D2=Er(),L2=_i(),k2=St(),lv=TypeError,hv=`Reduce of empty array with no initial value`,cv=function(i){return function(e,r,t,a){var n=D2(e),o=L2(n),s=k2(n);if(_2(r),s===0&&t<2)throw new lv(hv);var u=i?s-1:0,l=i?-1:1;if(t<2)for(;;){if(u in o){a=o[u],u+=l;break}if(u+=l,i?u<0:s<=u)throw new lv(hv)}for(;i?u>=0:s>u;u+=l)u in o&&(a=r(a,o[u],u,n));return a}};fv.exports={left:cv(!1),right:cv(!0)}});Mn=u((Hw,gv)=>{"use strict";var B2=_();gv.exports=function(i,e){var r=[][i];return!!r&&B2(function(){r.call(null,e||function(){return 1},1)})}});pv=u(()=>{"use strict";var j2=ee(),U2=vv().left,F2=Mn(),dv=ct();j2({target:`Array`,proto:!0,forced:!Mr()&&dv>79&&dv<83||!F2(`reduce`)},{reduce:function(e){var r=arguments.length;return U2(this,e,r,r>1?arguments[1]:void 0)}})});bv=u(()=>{"use strict";var H2=ee(),Y2=Dr(),X2=Cr().f,W2=je(),yv=de(),Q2=Wt(),K2=le(),Z2=Qt(),J2=ve(),eT=Y2(``.slice),rT=Math.min,mv=Z2(`endsWith`);H2({target:`String`,proto:!0,forced:!(!J2&&!mv&&!!(function(){var i=X2(String.prototype,`endsWith`);return i&&!i.writable})())&&!mv},{endsWith:function(e){var r=yv(K2(this));Q2(e);var t=yv(e),a=arguments.length>1?arguments[1]:void 0,n=r.length,o=a===void 0?n:rT(W2(a),n);return eT(r,o-t.length,o)===t}})});Ov=u(()=>{"use strict";var Vn=H(),kn=D(),iT=$t(),aT=J(),nT=te(),sT=le(),oT=ma(),uT=Gt(),lT=je(),_n=de(),hT=ke(),cT=$r(),xv=Ht(),fT=an(),vT=_(),fr=fT.UNSUPPORTED_Y,gT=4294967295,dT=Math.min,Dn=kn([].push),Ln=kn(``.slice),ti=kn(``.indexOf),pT=!vT(function(){var i=/(?:)/,e=i.exec;i.exec=function(){return e.apply(this,arguments)};var r=`ab`.split(i);return r.length!==2||r[0]!==`a`||r[1]!==`b`}),Tv=`abbc`.split(/(b)*/)[1]===`c`||`test`.split(/(?:)/,-1).length!==4||`ab`.split(/(?:ab)*/).length!==2||`.`.split(/(.?)(.?)/).length!==4||`.`.split(/()()/).length>1||``.split(/.?/).length;iT(`split`,function(i,e,r){var t=`0`.split(void 0,0).length?function(a,n){return a===void 0&&n===0?[]:Vn(e,this,a,n)}:e;return[function(n,o){var s=sT(this),u=nT(n)?hT(n,i):void 0;return u?Vn(u,n,s,o):Vn(t,_n(s),n,o)},function(a,n){var o=aT(this),s=_n(a);if(!Tv){var u=r(t,o,s,n,t!==e);if(u.done)return u.value}var l=oT(o,RegExp),h=_n(cT(o)),c=!!~ti(h,`u`)||!!~ti(h,`v`);fr?~ti(h,`g`)||(h+=`g`):~ti(h,`y`)||(h+=`y`);var v=new l(fr?`^(?:`+o.source+`)`:o,h),f=n===void 0?gT:n>>>0;if(f===0)return[];if(s.length===0)return xv(v,s)===null?[s]:[];for(var g=0,p=0,y=[];p{"use strict";(function(){var i,e,r,t,a,n;typeof performance<`u`&&performance!==null&&performance.now?Xr.exports=function(){return performance.now()}:typeof process<`u`&&process!==null&&process.hrtime?(Xr.exports=function(){return(i()-a)/1e6},e=process.hrtime,i=function(){var o;return o=e(),o[0]*1e9+o[1]},t=i(),n=process.uptime()*1e9,a=t-n):Date.now?(Xr.exports=function(){return Date.now()-r},r=Date.now()):(Xr.exports=function(){return new Date().getTime()-r},r=new Date().getTime())}).call(Sv)});Cv=u((Jw,ni)=>{"use strict";var yT=Ev(),Ee=typeof window>`u`?global:window,ii=[`moz`,`webkit`],gr=`AnimationFrame`,dr=Ee[`request`+gr],Wr=Ee[`cancel`+gr]||Ee[`cancelRequest`+gr];for(vr=0;!dr&&vr{"use strict";qv.exports=` +\v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`});Rv=u((rC,Pv)=>{"use strict";var mT=D(),bT=le(),xT=de(),Fn=jn(),Av=mT(``.replace),TT=RegExp(`^[`+Fn+`]+`),OT=RegExp(`(^|[^`+Fn+`])[`+Fn+`]+$`),Un=function(i){return function(e){var r=xT(bT(e));return i&1&&(r=Av(r,TT,``)),i&2&&(r=Av(r,OT,`$1`)),r}};Pv.exports={start:Un(1),end:Un(2),trim:Un(3)}});Vv=u((tC,Mv)=>{"use strict";var ST=qr().PROPER,ET=_(),Nv=jn(),Iv=`​…᠎`;Mv.exports=function(i){return ET(function(){return!!Nv[i]()||Iv[i]()!==Iv||ST&&Nv[i].name!==i})}});_v=u(()=>{"use strict";var wT=ee(),CT=Rv().trim;wT({target:`String`,proto:!0,forced:Vv()(`trim`)},{trim:function(){return CT(this)}})});Lv=u((nC,Dv)=>{"use strict";Dv.exports=function(i){this.ok=!1,this.alpha=1,i.charAt(0)==`#`&&(i=i.substr(1,6)),i=i.replace(/ /g,``),i=i.toLowerCase();var e={aliceblue:`f0f8ff`,antiquewhite:`faebd7`,aqua:`00ffff`,aquamarine:`7fffd4`,azure:`f0ffff`,beige:`f5f5dc`,bisque:`ffe4c4`,black:`000000`,blanchedalmond:`ffebcd`,blue:`0000ff`,blueviolet:`8a2be2`,brown:`a52a2a`,burlywood:`deb887`,cadetblue:`5f9ea0`,chartreuse:`7fff00`,chocolate:`d2691e`,coral:`ff7f50`,cornflowerblue:`6495ed`,cornsilk:`fff8dc`,crimson:`dc143c`,cyan:`00ffff`,darkblue:`00008b`,darkcyan:`008b8b`,darkgoldenrod:`b8860b`,darkgray:`a9a9a9`,darkgreen:`006400`,darkkhaki:`bdb76b`,darkmagenta:`8b008b`,darkolivegreen:`556b2f`,darkorange:`ff8c00`,darkorchid:`9932cc`,darkred:`8b0000`,darksalmon:`e9967a`,darkseagreen:`8fbc8f`,darkslateblue:`483d8b`,darkslategray:`2f4f4f`,darkturquoise:`00ced1`,darkviolet:`9400d3`,deeppink:`ff1493`,deepskyblue:`00bfff`,dimgray:`696969`,dodgerblue:`1e90ff`,feldspar:`d19275`,firebrick:`b22222`,floralwhite:`fffaf0`,forestgreen:`228b22`,fuchsia:`ff00ff`,gainsboro:`dcdcdc`,ghostwhite:`f8f8ff`,gold:`ffd700`,goldenrod:`daa520`,gray:`808080`,green:`008000`,greenyellow:`adff2f`,honeydew:`f0fff0`,hotpink:`ff69b4`,indianred:`cd5c5c`,indigo:`4b0082`,ivory:`fffff0`,khaki:`f0e68c`,lavender:`e6e6fa`,lavenderblush:`fff0f5`,lawngreen:`7cfc00`,lemonchiffon:`fffacd`,lightblue:`add8e6`,lightcoral:`f08080`,lightcyan:`e0ffff`,lightgoldenrodyellow:`fafad2`,lightgrey:`d3d3d3`,lightgreen:`90ee90`,lightpink:`ffb6c1`,lightsalmon:`ffa07a`,lightseagreen:`20b2aa`,lightskyblue:`87cefa`,lightslateblue:`8470ff`,lightslategray:`778899`,lightsteelblue:`b0c4de`,lightyellow:`ffffe0`,lime:`00ff00`,limegreen:`32cd32`,linen:`faf0e6`,magenta:`ff00ff`,maroon:`800000`,mediumaquamarine:`66cdaa`,mediumblue:`0000cd`,mediumorchid:`ba55d3`,mediumpurple:`9370d8`,mediumseagreen:`3cb371`,mediumslateblue:`7b68ee`,mediumspringgreen:`00fa9a`,mediumturquoise:`48d1cc`,mediumvioletred:`c71585`,midnightblue:`191970`,mintcream:`f5fffa`,mistyrose:`ffe4e1`,moccasin:`ffe4b5`,navajowhite:`ffdead`,navy:`000080`,oldlace:`fdf5e6`,olive:`808000`,olivedrab:`6b8e23`,orange:`ffa500`,orangered:`ff4500`,orchid:`da70d6`,palegoldenrod:`eee8aa`,palegreen:`98fb98`,paleturquoise:`afeeee`,palevioletred:`d87093`,papayawhip:`ffefd5`,peachpuff:`ffdab9`,peru:`cd853f`,pink:`ffc0cb`,plum:`dda0dd`,powderblue:`b0e0e6`,purple:`800080`,rebeccapurple:`663399`,red:`ff0000`,rosybrown:`bc8f8f`,royalblue:`4169e1`,saddlebrown:`8b4513`,salmon:`fa8072`,sandybrown:`f4a460`,seagreen:`2e8b57`,seashell:`fff5ee`,sienna:`a0522d`,silver:`c0c0c0`,skyblue:`87ceeb`,slateblue:`6a5acd`,slategray:`708090`,snow:`fffafa`,springgreen:`00ff7f`,steelblue:`4682b4`,tan:`d2b48c`,teal:`008080`,thistle:`d8bfd8`,tomato:`ff6347`,turquoise:`40e0d0`,violet:`ee82ee`,violetred:`d02090`,wheat:`f5deb3`,white:`ffffff`,whitesmoke:`f5f5f5`,yellow:`ffff00`,yellowgreen:`9acd32`};i=e[i]||i;for(var r=[{re:/^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*((?:\d?\.)?\d)\)$/,example:[`rgba(123, 234, 45, 0.8)`,`rgba(255,234,245,1.0)`],process:function(u){return[parseInt(u[1]),parseInt(u[2]),parseInt(u[3]),parseFloat(u[4])]}},{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:[`rgb(123, 234, 45)`,`rgb(255,234,245)`],process:function(u){return[parseInt(u[1]),parseInt(u[2]),parseInt(u[3])]}},{re:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,example:[`#00ff00`,`336699`],process:function(u){return[parseInt(u[1],16),parseInt(u[2],16),parseInt(u[3],16)]}},{re:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,example:[`#fb0`,`f0f`],process:function(u){return[parseInt(u[1]+u[1],16),parseInt(u[2]+u[2],16),parseInt(u[3]+u[3],16)]}}],t=0;t3&&(this.alpha=s[3]),this.ok=!0}}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.alpha=this.alpha<0?0:this.alpha>1||isNaN(this.alpha)?1:this.alpha,this.toRGB=function(){return`rgb(`+this.r+`, `+this.g+`, `+this.b+`)`},this.toRGBA=function(){return`rgba(`+this.r+`, `+this.g+`, `+this.b+`, `+this.alpha+`)`},this.toHex=function(){var u=this.r.toString(16),l=this.g.toString(16),h=this.b.toString(16);return u.length==1&&(u=`0`+u),l.length==1&&(l=`0`+l),h.length==1&&(h=`0`+h),`#`+u+l+h},this.getHelpXML=function(){for(var u=new Array,l=0;l `+p.toRGB()+` -> `+p.toHex());g.appendChild(y),g.appendChild(m),f.appendChild(g)}catch{}return f}}});Bv=u(()=>{"use strict";var AT=ee(),PT=Dr(),RT=ha().indexOf,NT=Mn(),zn=PT([].indexOf),kv=!!zn&&1/zn([1],1,-0)<0;AT({target:`Array`,proto:!0,forced:kv||!NT(`indexOf`)},{indexOf:function(e){var r=arguments.length>1?arguments[1]:void 0;return kv?zn(this,e,r)||0:RT(this,e,r)}})});Uv=u(()=>{"use strict";var MT=ee(),VT=D(),_T=Wt(),DT=le(),jv=de(),LT=Qt(),kT=VT(``.indexOf);MT({target:`String`,proto:!0,forced:!LT(`includes`)},{includes:function(e){return!!~kT(jv(DT(this)),jv(_T(e)),arguments.length>1?arguments[1]:void 0)}})});zv=u((hC,Fv)=>{"use strict";var BT=xe();Fv.exports=Array.isArray||function(e){return BT(e)===`Array`}});Gv=u(()=>{"use strict";var jT=ee(),UT=D(),FT=zv(),zT=UT([].reverse),$v=[1,2];jT({target:`Array`,proto:!0,forced:String($v)===String($v.reverse())},{reverse:function(){return FT(this)&&(this.length=this.length),zT(this)}})});ag=u(()=>{"use strict";var XT=qr().PROPER,WT=Re(),QT=J(),rg=de(),KT=_(),ZT=$r(),Hn=`toString`,tg=RegExp.prototype,ig=tg[Hn],JT=KT(function(){return ig.call({source:`a`,flags:`b`})!==`/a/b`}),eO=XT&&ig.name!==Hn;(JT||eO)&&WT(tg,Hn,function(){var e=QT(this),r=rg(e.source),t=rg(ZT(e));return`/`+r+`/`+t},{unsafe:!0})});v(yc(),1);v(uf(),1);v(gf(),1);v(Tf(),1);v(Pn(),1);v(sv(),1);v(pv(),1);v(bv(),1);v(Ov(),1);hi=v(Cv(),1);v(_v(),1);ci=v(Lv(),1);v(Bv(),1);v(Uv(),1);v(Gv(),1);Zv=function(i,e){return(Zv=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,t){r.__proto__=t}||function(r,t){for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(r[a]=t[a])})(i,e)};Me=Math.PI;;we=Math.PI/180;(function(i){function e(){return a((function(s,u,l){return s.relative&&(s.x1!==void 0&&(s.x1+=u),s.y1!==void 0&&(s.y1+=l),s.x2!==void 0&&(s.x2+=u),s.y2!==void 0&&(s.y2+=l),s.x!==void 0&&(s.x+=u),s.y!==void 0&&(s.y+=l),s.relative=!1),s}))}function r(){var s=NaN,u=NaN,l=NaN,h=NaN;return a((function(c,v,f){return c.type&b.SMOOTH_CURVE_TO&&(c.type=b.CURVE_TO,s=isNaN(s)?v:s,u=isNaN(u)?f:u,c.x1=c.relative?v-s:2*v-s,c.y1=c.relative?f-u:2*f-u),c.type&b.CURVE_TO?(s=c.relative?v+c.x2:c.x2,u=c.relative?f+c.y2:c.y2):(s=NaN,u=NaN),c.type&b.SMOOTH_QUAD_TO&&(c.type=b.QUAD_TO,l=isNaN(l)?v:l,h=isNaN(h)?f:h,c.x1=c.relative?v-l:2*v-l,c.y1=c.relative?f-h:2*f-h),c.type&b.QUAD_TO?(l=c.relative?v+c.x1:c.x1,h=c.relative?f+c.y1:c.y1):(l=NaN,h=NaN),c}))}function t(){var s=NaN,u=NaN;return a((function(l,h,c){if(l.type&b.SMOOTH_QUAD_TO&&(l.type=b.QUAD_TO,s=isNaN(s)?h:s,u=isNaN(u)?c:u,l.x1=l.relative?h-s:2*h-s,l.y1=l.relative?c-u:2*c-u),l.type&b.QUAD_TO){s=l.relative?h+l.x1:l.x1,u=l.relative?c+l.y1:l.y1;var v=l.x1,f=l.y1;l.type=b.CURVE_TO,l.x1=((l.relative?0:h)+2*v)/3,l.y1=((l.relative?0:c)+2*f)/3,l.x2=(l.x+2*v)/3,l.y2=(l.y+2*f)/3}else s=NaN,u=NaN;return l}))}function a(s){var u=0,l=0,h=NaN,c=NaN;return function(v){if(isNaN(h)&&!(v.type&b.MOVE_TO))throw new Error(`path must start with moveto`);var f=s(v,u,l,h,c);return v.type&b.CLOSE_PATH&&(u=h,l=c),v.x!==void 0&&(u=v.relative?u+v.x:v.x),v.y!==void 0&&(l=v.relative?l+v.y:v.y),v.type&b.MOVE_TO&&(h=u,c=l),f}}function n(s,u,l,h,c,v){return ye(s,u,l,h,c,v),a((function(f,g,p,y){var m=f.x1,O=f.x2,x=f.relative&&!isNaN(y),T=f.x!==void 0?f.x:x?0:g,E=f.y!==void 0?f.y:x?0:p;function C(ce){return ce*ce}f.type&b.HORIZ_LINE_TO&&u!==0&&(f.type=b.LINE_TO,f.y=f.relative?0:p),f.type&b.VERT_LINE_TO&&l!==0&&(f.type=b.LINE_TO,f.x=f.relative?0:g),f.x!==void 0&&(f.x=f.x*s+E*l+(x?0:c)),f.y!==void 0&&(f.y=T*u+f.y*h+(x?0:v)),f.x1!==void 0&&(f.x1=f.x1*s+f.y1*l+(x?0:c)),f.y1!==void 0&&(f.y1=m*u+f.y1*h+(x?0:v)),f.x2!==void 0&&(f.x2=f.x2*s+f.y2*l+(x?0:c)),f.y2!==void 0&&(f.y2=O*u+f.y2*h+(x?0:v));var S=s*h-u*l;if(f.xRot!==void 0&&(s!==1||u!==0||l!==0||h!==1))if(S===0)delete f.rX,delete f.rY,delete f.xRot,delete f.lArcFlag,delete f.sweepFlag,f.type=b.LINE_TO;else{var A=f.xRot*Math.PI/180,P=Math.sin(A),V=Math.cos(A),k=1/C(f.rX),N=1/C(f.rY),X=C(V)*k+C(P)*N,W=2*P*V*(k-N),G=C(P)*k+C(V)*N,Q=X*h*h-W*u*h+G*u*u,Y=W*(s*h+u*l)-2*(X*l*h+G*s*u),K=X*l*l-W*s*l+G*s*s,I=(Math.atan2(Y,Q-K)+Math.PI)%Math.PI/2,R=Math.sin(I),re=Math.cos(I);f.rX=Math.abs(S)/Math.sqrt(Q*C(re)+Y*R*re+K*C(R)),f.rY=Math.abs(S)/Math.sqrt(Q*C(R)-Y*R*re+K*C(re)),f.xRot=180*I/Math.PI}return f.sweepFlag!==void 0&&0>S&&(f.sweepFlag=+!f.sweepFlag),f}))}function o(){return function(s){var u={};for(var l in s)u[l]=s[l];return u}}i.ROUND=function(s){function u(l){return Math.round(l*s)/s}return s===void 0&&(s=0x9184e72a000),ye(s),function(l){return l.x1!==void 0&&(l.x1=u(l.x1)),l.y1!==void 0&&(l.y1=u(l.y1)),l.x2!==void 0&&(l.x2=u(l.x2)),l.y2!==void 0&&(l.y2=u(l.y2)),l.x!==void 0&&(l.x=u(l.x)),l.y!==void 0&&(l.y=u(l.y)),l.rX!==void 0&&(l.rX=u(l.rX)),l.rY!==void 0&&(l.rY=u(l.rY)),l}},i.TO_ABS=e,i.TO_REL=function(){return a((function(s,u,l){return s.relative||(s.x1!==void 0&&(s.x1-=u),s.y1!==void 0&&(s.y1-=l),s.x2!==void 0&&(s.x2-=u),s.y2!==void 0&&(s.y2-=l),s.x!==void 0&&(s.x-=u),s.y!==void 0&&(s.y-=l),s.relative=!0),s}))},i.NORMALIZE_HVZ=function(s,u,l){return s===void 0&&(s=!0),u===void 0&&(u=!0),l===void 0&&(l=!0),a((function(h,c,v,f,g){if(isNaN(f)&&!(h.type&b.MOVE_TO))throw new Error(`path must start with moveto`);return u&&h.type&b.HORIZ_LINE_TO&&(h.type=b.LINE_TO,h.y=h.relative?0:v),l&&h.type&b.VERT_LINE_TO&&(h.type=b.LINE_TO,h.x=h.relative?0:c),s&&h.type&b.CLOSE_PATH&&(h.type=b.LINE_TO,h.x=h.relative?f-c:f,h.y=h.relative?g-v:g),h.type&b.ARC&&(h.rX===0||h.rY===0)&&(h.type=b.LINE_TO,delete h.rX,delete h.rY,delete h.xRot,delete h.lArcFlag,delete h.sweepFlag),h}))},i.NORMALIZE_ST=r,i.QT_TO_C=t,i.INFO=a,i.SANITIZE=function(s){s===void 0&&(s=0),ye(s);var u=NaN,l=NaN,h=NaN,c=NaN;return a((function(v,f,g,p,y){var m=Math.abs,O=!1,x=0,T=0;if(v.type&b.SMOOTH_CURVE_TO&&(x=isNaN(u)?0:f-u,T=isNaN(l)?0:g-l),v.type&(b.CURVE_TO|b.SMOOTH_CURVE_TO)?(u=v.relative?f+v.x2:v.x2,l=v.relative?g+v.y2:v.y2):(u=NaN,l=NaN),v.type&b.SMOOTH_QUAD_TO?(h=isNaN(h)?f:2*f-h,c=isNaN(c)?g:2*g-c):v.type&b.QUAD_TO?(h=v.relative?f+v.x1:v.x1,c=v.relative?g+v.y1:v.y2):(h=NaN,c=NaN),v.type&b.LINE_COMMANDS||v.type&b.ARC&&(v.rX===0||v.rY===0||!v.lArcFlag)||v.type&b.CURVE_TO||v.type&b.SMOOTH_CURVE_TO||v.type&b.QUAD_TO||v.type&b.SMOOTH_QUAD_TO){var E=v.x===void 0?0:v.relative?v.x:v.x-f,C=v.y===void 0?0:v.relative?v.y:v.y-g;x=isNaN(h)?v.x1===void 0?x:v.relative?v.x:v.x1-f:h-f,T=isNaN(c)?v.y1===void 0?T:v.relative?v.y:v.y1-g:c-g;var S=v.x2===void 0?0:v.relative?v.x:v.x2-f,A=v.y2===void 0?0:v.relative?v.y:v.y2-g;m(E)<=s&&m(C)<=s&&m(x)<=s&&m(T)<=s&&m(S)<=s&&m(A)<=s&&(O=!0)}return v.type&b.CLOSE_PATH&&m(f-p)<=s&&m(g-y)<=s&&(O=!0),O?[]:v}))},i.MATRIX=n,i.ROTATE=function(s,u,l){u===void 0&&(u=0),l===void 0&&(l=0),ye(s,u,l);var h=Math.sin(s),c=Math.cos(s);return n(c,h,-h,c,u-u*c+l*h,l-u*h-l*c)},i.TRANSLATE=function(s,u){return u===void 0&&(u=0),ye(s,u),n(1,0,0,1,s,u)},i.SCALE=function(s,u){return u===void 0&&(u=s),ye(s,u),n(s,0,0,u,0,0)},i.SKEW_X=function(s){return ye(s),n(1,0,Math.atan(s),1,0,0)},i.SKEW_Y=function(s){return ye(s),n(1,Math.atan(s),0,1,0,0)},i.X_AXIS_SYMMETRY=function(s){return s===void 0&&(s=0),ye(s),n(-1,0,0,1,s,0)},i.Y_AXIS_SYMMETRY=function(s){return s===void 0&&(s=0),ye(s),n(1,0,0,-1,0,s)},i.A_TO_C=function(){return a((function(s,u,l){return b.ARC===s.type?(function(h,c,v){var f,g,p,y;h.cX||$n(h,c,v);for(var m=Math.min(h.phi1,h.phi2),O=Math.max(h.phi1,h.phi2)-m,x=Math.ceil(O/90),T=new Array(x),E=c,C=v,S=0;Sc.maxX&&(c.maxX=R),Rc.maxY&&(c.maxY=R),RI&&y(Qv(f,p.x1,p.x2,p.x,I));for(var T=0,E=Wv(g,p.y1,p.y2,p.y);TI&&m(Qv(g,p.y1,p.y2,p.y,I))}if(p.type&b.ARC){y(p.x),m(p.y),$n(p,f,g);for(var C=p.xRot/180*Math.PI,S=Math.cos(C)*p.rX,A=Math.sin(C)*p.rX,P=-Math.sin(C)*p.rY,V=Math.cos(C)*p.rY,k=p.phi1p.phi2?[p.phi2+360,p.phi1+360]:[p.phi2,p.phi1],N=k[0],X=k[1],W=function(R){var re=R[0],ce=R[1],me=180*Math.atan2(ce,re)/Math.PI;return meN&&IN&&Ih)throw new SyntaxError(`Expected positive number, got "`+h+`" at index "`+o+`"`)}else if((this.curArgs.length===3||this.curArgs.length===4)&&this.curNumber!==`0`&&this.curNumber!==`1`)throw new SyntaxError(`Expected a flag, got "`+this.curNumber+`" at index "`+o+`"`)}this.curArgs.push(h),this.curArgs.length===YT[this.curCommandType]&&(b.HORIZ_LINE_TO===this.curCommandType?n({type:b.HORIZ_LINE_TO,relative:this.curCommandRelative,x:h}):b.VERT_LINE_TO===this.curCommandType?n({type:b.VERT_LINE_TO,relative:this.curCommandRelative,y:h}):this.curCommandType===b.MOVE_TO||this.curCommandType===b.LINE_TO||this.curCommandType===b.SMOOTH_QUAD_TO?(n({type:this.curCommandType,relative:this.curCommandRelative,x:this.curArgs[0],y:this.curArgs[1]}),b.MOVE_TO===this.curCommandType&&(this.curCommandType=b.LINE_TO)):this.curCommandType===b.CURVE_TO?n({type:b.CURVE_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x2:this.curArgs[2],y2:this.curArgs[3],x:this.curArgs[4],y:this.curArgs[5]}):this.curCommandType===b.SMOOTH_CURVE_TO?n({type:b.SMOOTH_CURVE_TO,relative:this.curCommandRelative,x2:this.curArgs[0],y2:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===b.QUAD_TO?n({type:b.QUAD_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===b.ARC&&n({type:b.ARC,relative:this.curCommandRelative,rX:this.curArgs[0],rY:this.curArgs[1],xRot:this.curArgs[2],lArcFlag:this.curArgs[3],sweepFlag:this.curArgs[4],x:this.curArgs[5],y:this.curArgs[6]})),this.curNumber=``,this.curNumberHasExpDigits=!1,this.curNumberHasExp=!1,this.curNumberHasDecimal=!1,this.canParseCommandOrComma=!0}if(!GT(s))if(s===`,`&&this.canParseCommandOrComma)this.canParseCommandOrComma=!1;else if(s!==`+`&&s!==`-`&&s!==`.`)if(l)this.curNumber=s,this.curNumberHasDecimal=!1;else{if(this.curArgs.length!==0)throw new SyntaxError(`Unterminated command at index `+o+`.`);if(!this.canParseCommandOrComma)throw new SyntaxError(`Unexpected character "`+s+`" at index `+o+`. Command cannot follow comma`);if(this.canParseCommandOrComma=!1,s!==`z`&&s!==`Z`)if(s===`h`||s===`H`)this.curCommandType=b.HORIZ_LINE_TO,this.curCommandRelative=s===`h`;else if(s===`v`||s===`V`)this.curCommandType=b.VERT_LINE_TO,this.curCommandRelative=s===`v`;else if(s===`m`||s===`M`)this.curCommandType=b.MOVE_TO,this.curCommandRelative=s===`m`;else if(s===`l`||s===`L`)this.curCommandType=b.LINE_TO,this.curCommandRelative=s===`l`;else if(s===`c`||s===`C`)this.curCommandType=b.CURVE_TO,this.curCommandRelative=s===`c`;else if(s===`s`||s===`S`)this.curCommandType=b.SMOOTH_CURVE_TO,this.curCommandRelative=s===`s`;else if(s===`q`||s===`Q`)this.curCommandType=b.QUAD_TO,this.curCommandRelative=s===`q`;else if(s===`t`||s===`T`)this.curCommandType=b.SMOOTH_QUAD_TO,this.curCommandRelative=s===`t`;else{if(s!==`a`&&s!==`A`)throw new SyntaxError(`Unexpected character "`+s+`" at index `+o+`.`);this.curCommandType=b.ARC,this.curCommandRelative=s===`a`}else t.push({type:b.CLOSE_PATH}),this.canParseCommandOrComma=!0,this.curCommandType=-1}else this.curNumber=s,this.curNumberHasDecimal=s===`.`}else this.curNumber+=s,this.curNumberHasDecimal=!0;else this.curNumber+=s;else this.curNumber+=s,this.curNumberHasExp=!0;else this.curNumber+=s,this.curNumberHasExpDigits=this.curNumberHasExp}return t},e.prototype.transform=function(r){return Object.create(this,{parse:{value:function(t,a){a===void 0&&(a=[]);for(var n=0,o=Object.getPrototypeOf(this).parse.call(this,t);n~.[:]+)/g;dO=/(\.[^\s+>~.[:]+)/g;pO=/(::[^\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi;yO=/(:[\w-]+\([^)]*\))/gi;mO=/(:[^\s+>~.[:]+)/g;bO=/([^\s+>~.[:]+)/g;pr=1e-8;w=(()=>{class i{constructor(r,t,a){this.document=r,this.name=t,this.value=a,this.isNormalizedColor=!1}static empty(r){return new i(r,`EMPTY`,``)}split(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:` `,{document:t,name:a}=this;return mr(this.getString()).trim().split(r).map(n=>new i(t,a,n))}hasValue(r){var{value:t}=this;return t!==null&&t!==``&&(r||t!==0)&&typeof t<`u`}isString(r){var{value:t}=this,a=typeof t==`string`;return!a||!r?a:r.test(t)}isUrlDefinition(){return this.isString(/^url\(/)}isPixels(){if(!this.hasValue())return!1;var r=this.getString();switch(!0){case r.endsWith(`px`):case/^[0-9]+$/.test(r):return!0;default:return!1}}setValue(r){return this.value=r,this}getValue(r){return typeof r>`u`||this.hasValue()?this.value:r}getNumber(r){if(!this.hasValue())return typeof r>`u`?0:parseFloat(r);var{value:t}=this,a=parseFloat(t);return this.isString(/%$/)&&(a/=100),a}getString(r){return typeof r>`u`||this.hasValue()?typeof this.value>`u`?``:String(this.value):String(r)}getColor(r){var t=this.getString(r);return this.isNormalizedColor||(this.isNormalizedColor=!0,t=fO(t),this.value=t),t}getDpi(){return 96}getRem(){return this.document.rootEmSize}getEm(){return this.document.emSize}getUnits(){return this.getString().replace(/[0-9.-]/g,``)}getPixels(r){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(!this.hasValue())return 0;var[a,n]=typeof r==`boolean`?[void 0,r]:[r],{viewPort:o}=this.document.screen;switch(!0){case this.isString(/vmin$/):return this.getNumber()/100*Math.min(o.computeSize(`x`),o.computeSize(`y`));case this.isString(/vmax$/):return this.getNumber()/100*Math.max(o.computeSize(`x`),o.computeSize(`y`));case this.isString(/vw$/):return this.getNumber()/100*o.computeSize(`x`);case this.isString(/vh$/):return this.getNumber()/100*o.computeSize(`y`);case this.isString(/rem$/):return this.getNumber()*this.getRem();case this.isString(/em$/):return this.getNumber()*this.getEm();case this.isString(/ex$/):return this.getNumber()*this.getEm()/2;case this.isString(/px$/):return this.getNumber();case this.isString(/pt$/):return this.getNumber()*this.getDpi()*(1/72);case this.isString(/pc$/):return this.getNumber()*15;case this.isString(/cm$/):return this.getNumber()*this.getDpi()/2.54;case this.isString(/mm$/):return this.getNumber()*this.getDpi()/25.4;case this.isString(/in$/):return this.getNumber()*this.getDpi();case this.isString(/%$/)&&n:return this.getNumber()*this.getEm();case this.isString(/%$/):return this.getNumber()*o.computeSize(a);default:var s=this.getNumber();return t&&s<1?s*o.computeSize(a):s}}getMilliseconds(){return this.hasValue()?this.isString(/ms$/)?this.getNumber():this.getNumber()*1e3:0}getRadians(){if(!this.hasValue())return 0;switch(!0){case this.isString(/deg$/):return this.getNumber()*(Math.PI/180);case this.isString(/grad$/):return this.getNumber()*(Math.PI/200);case this.isString(/rad$/):return this.getNumber();default:return this.getNumber()*(Math.PI/180)}}getDefinition(){var r=this.getString(),t=/#([^)'"]+)/.exec(r);return t&&(t=t[1]),t||(t=r),this.document.definitions[t]}getFillStyleDefinition(r,t){var a=this.getDefinition();if(!a)return null;if(typeof a.createGradient==`function`)return a.createGradient(this.document.ctx,r,t);if(typeof a.createPattern==`function`){if(a.getHrefAttribute().hasValue()){var n=a.getAttribute(`patternTransform`);a=a.getHrefAttribute().getDefinition(),n.hasValue()&&a.getAttribute(`patternTransform`,!0).setValue(n.value)}return a.createPattern(this.document.ctx,r,t)}return null}getTextBaseline(){return this.hasValue()?i.textBaselineMapping[this.getString()]:null}addOpacity(r){for(var t=this.getColor(),a=t.length,n=0,o=0;o1&&arguments[1]!==void 0?arguments[1]:0,[t=r,a=r]=se(e);return new i(t,a)}static parseScale(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,[t=r,a=t]=se(e);return new i(t,a)}static parsePath(e){for(var r=se(e),t=r.length,a=[],n=0;n0}runEvents(){if(this.working){var{screen:e,events:r,eventElements:t}=this,{style:a}=e.ctx.canvas;a&&(a.cursor=``),r.forEach((n,o)=>{for(var{run:s}=n,u=t[o];u;)s(u),u=u.parent}),this.events=[],this.eventElements=[]}}checkPath(e,r){if(!(!this.working||!r)){var{events:t,eventElements:a}=this;t.forEach((n,o)=>{var{x:s,y:u}=n;!a[o]&&r.isPointInPath&&r.isPointInPath(s,u)&&(a[o]=e)})}}checkBoundingBox(e,r){if(!(!this.working||!r)){var{events:t,eventElements:a}=this;t.forEach((n,o)=>{var{x:s,y:u}=n;!a[o]&&r.isPointInBox(s,u)&&(a[o]=e)})}}mapXY(e,r){for(var{window:t,ctx:a}=this.screen,n=new $(e,r),o=a.canvas;o;)n.x-=o.offsetLeft,n.y-=o.offsetTop,o=o.offsetParent;return t.scrollX&&(n.x+=t.scrollX),t.scrollY&&(n.y+=t.scrollY),n}onClick(e){var{x:r,y:t}=this.mapXY(e.clientX,e.clientY);this.events.push({type:`onclick`,x:r,y:t,run(a){a.onClick&&a.onClick()}})}onMouseMove(e){var{x:r,y:t}=this.mapXY(e.clientX,e.clientY);this.events.push({type:`onmousemove`,x:r,y:t,run(a){a.onMouseMove&&a.onMouseMove()}})}},yg=typeof window<`u`?window:null,mg=typeof fetch<`u`?fetch.bind(void 0):null,Eg=(()=>{class i{constructor(r){var{fetch:t=mg,window:a=yg}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.ctx=r,this.FRAMERATE=30,this.MAX_VIRTUAL_PIXELS=3e4,this.CLIENT_WIDTH=800,this.CLIENT_HEIGHT=600,this.viewPort=new Xn,this.mouse=new Wn(this),this.animations=[],this.waits=[],this.frameDuration=0,this.isReadyLock=!1,this.isFirstRender=!0,this.intervalId=null,this.window=a,this.fetch=t}wait(r){this.waits.push(r)}ready(){return this.readyPromise?this.readyPromise:Promise.resolve()}isReady(){if(this.isReadyLock)return!0;var r=this.waits.every(t=>t());return r&&(this.waits=[],this.resolveReady&&this.resolveReady()),this.isReadyLock=r,r}setDefaults(r){r.strokeStyle=`rgba(0,0,0,0)`,r.lineCap=`butt`,r.lineJoin=`miter`,r.miterLimit=4}setViewBox(r){var{document:t,ctx:a,aspectRatio:n,width:o,desiredWidth:s,height:u,desiredHeight:l,minX:h=0,minY:c=0,refX:v,refY:f,clip:g=!1,clipX:p=0,clipY:y=0}=r,[O,x]=mr(n).replace(/^defer\s/,``).split(` `),T=O||`xMidYMid`,E=x||`meet`,C=o/s,S=u/l,A=Math.min(C,S),P=Math.max(C,S),V=s,k=l;E===`meet`&&(V*=A,k*=A),E===`slice`&&(V*=P,k*=P);var N=new w(t,`refX`,v),X=new w(t,`refY`,f),W=N.hasValue()&&X.hasValue();if(W&&a.translate(-A*N.getPixels(`x`),-A*X.getPixels(`y`)),g){var G=A*p,Q=A*y;a.beginPath(),a.moveTo(G,Q),a.lineTo(o,Q),a.lineTo(o,u),a.lineTo(G,u),a.closePath(),a.clip()}if(!W){var Y=E===`meet`&&A===S,K=E===`slice`&&P===S,I=E===`meet`&&A===C,R=E===`slice`&&P===C;T.startsWith(`xMid`)&&(Y||K)&&a.translate(o/2-V/2,0),T.endsWith(`YMid`)&&(I||R)&&a.translate(0,u/2-k/2),T.startsWith(`xMax`)&&(Y||K)&&a.translate(o-V,0),T.endsWith(`YMax`)&&(I||R)&&a.translate(0,u-k)}switch(!0){case T===`none`:a.scale(C,S);break;case E===`meet`:a.scale(A,A);break;case E===`slice`:a.scale(P,P);break}a.translate(-h,-c)}start(r){var{enableRedraw:t=!1,ignoreMouse:a=!1,ignoreAnimation:n=!1,ignoreDimensions:o=!1,ignoreClear:s=!1,forceRedraw:u,scaleWidth:l,scaleHeight:h,offsetX:c,offsetY:v}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{FRAMERATE:f,mouse:g}=this,p=1e3/f;if(this.frameDuration=p,this.readyPromise=new Promise(T=>{this.resolveReady=T}),this.isReady()&&this.render(r,o,s,l,h,c,v),!!t){var y=Date.now(),m=y,O=0,x=()=>{y=Date.now(),O=y-m,O>=p&&(m=y-O%p,this.shouldUpdate(n,u)&&(this.render(r,o,s,l,h,c,v),g.runEvents())),this.intervalId=(0,hi.default)(x)};a||g.start(),this.intervalId=(0,hi.default)(x)}}stop(){this.intervalId&&(hi.default.cancel(this.intervalId),this.intervalId=null),this.mouse.stop()}shouldUpdate(r,t){if(!r){var{frameDuration:a}=this;if(this.animations.reduce((o,s)=>s.update(a)||o,!1))return!0}return!!(typeof t==`function`&&t()||!this.isReadyLock&&this.isReady()||this.mouse.hasEvents())}render(r,t,a,n,o,s,u){var{CLIENT_WIDTH:l,CLIENT_HEIGHT:h,viewPort:c,ctx:v,isFirstRender:f}=this,g=v.canvas;c.clear(),g.width&&g.height?c.setCurrent(g.width,g.height):c.setCurrent(l,h);var p=r.getStyle(`width`),y=r.getStyle(`height`);!t&&(f||typeof n!=`number`&&typeof o!=`number`)&&(p.hasValue()&&(g.width=p.getPixels(`x`),g.style&&(g.style.width=``.concat(g.width,`px`))),y.hasValue()&&(g.height=y.getPixels(`y`),g.style&&(g.style.height=``.concat(g.height,`px`))));var m=g.clientWidth||g.width,O=g.clientHeight||g.height;if(t&&p.hasValue()&&y.hasValue()&&(m=p.getPixels(`x`),O=y.getPixels(`y`)),c.setCurrent(m,O),typeof s==`number`&&r.getAttribute(`x`,!0).setValue(s),typeof u==`number`&&r.getAttribute(`y`,!0).setValue(u),typeof n==`number`||typeof o==`number`){var x=se(r.getAttribute(`viewBox`).getString()),T=0,E=0;if(typeof n==`number`){var C=r.getStyle(`width`);C.hasValue()?T=C.getPixels(`x`)/n:isNaN(x[2])||(T=x[2]/n)}if(typeof o==`number`){var S=r.getStyle(`height`);S.hasValue()?E=S.getPixels(`y`)/o:isNaN(x[3])||(E=x[3]/o)}T||(T=E),E||(E=T),r.getAttribute(`width`,!0).setValue(n),r.getAttribute(`height`,!0).setValue(o);var A=r.getStyle(`transform`,!0,!0);A.setValue(``.concat(A.getString(),` scale(`).concat(1/T,`, `).concat(1/E,`)`))}a||v.clearRect(0,0,m,O),r.render(v),f&&(this.isFirstRender=!1)}}return i.defaultWindow=yg,i.defaultFetch=mg,i})(),{defaultFetch:TO}=Eg,OO=typeof DOMParser<`u`?DOMParser:null,Qr=class{constructor(){var{fetch:e=TO,DOMParser:r=OO}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.fetch=e,this.DOMParser=r}parse(e){var r=this;return be(function*(){return e.startsWith(`<`)?r.parseFromString(e):r.load(e)})()}parseFromString(e){var r=new this.DOMParser;try{return this.checkDocument(r.parseFromString(e,`image/svg+xml`))}catch{return this.checkDocument(r.parseFromString(e,`text/xml`))}}checkDocument(e){var r=e.getElementsByTagName(`parsererror`)[0];if(r)throw new Error(r.textContent);return e}load(e){var r=this;return be(function*(){var a=yield(yield r.fetch(e)).text();return r.parseFromString(a)})()}},Qn=class{constructor(e,r){this.type=`translate`,this.point=null,this.point=$.parse(r)}apply(e){var{x:r,y:t}=this.point;e.translate(r||0,t||0)}unapply(e){var{x:r,y:t}=this.point;e.translate(-1*r||0,-1*t||0)}applyToPoint(e){var{x:r,y:t}=this.point;e.applyTransform([1,0,0,1,r||0,t||0])}},Kn=class{constructor(e,r,t){this.type=`rotate`,this.angle=null,this.originX=null,this.originY=null,this.cx=0,this.cy=0;var a=se(r);this.angle=new w(e,`angle`,a[0]),this.originX=t[0],this.originY=t[1],this.cx=a[1]||0,this.cy=a[2]||0}apply(e){var{cx:r,cy:t,originX:a,originY:n,angle:o}=this,s=r+a.getPixels(`x`),u=t+n.getPixels(`y`);e.translate(s,u),e.rotate(o.getRadians()),e.translate(-s,-u)}unapply(e){var{cx:r,cy:t,originX:a,originY:n,angle:o}=this,s=r+a.getPixels(`x`),u=t+n.getPixels(`y`);e.translate(s,u),e.rotate(-1*o.getRadians()),e.translate(-s,-u)}applyToPoint(e){var{cx:r,cy:t,angle:a}=this,n=a.getRadians();e.applyTransform([1,0,0,1,r||0,t||0]),e.applyTransform([Math.cos(n),Math.sin(n),-Math.sin(n),Math.cos(n),0,0]),e.applyTransform([1,0,0,1,-r||0,-t||0])}},Zn=class{constructor(e,r,t){this.type=`scale`,this.scale=null,this.originX=null,this.originY=null;var a=$.parseScale(r);(a.x===0||a.y===0)&&(a.x=1e-8,a.y=1e-8),this.scale=a,this.originX=t[0],this.originY=t[1]}apply(e){var{scale:{x:r,y:t},originX:a,originY:n}=this,o=a.getPixels(`x`),s=n.getPixels(`y`);e.translate(o,s),e.scale(r,t||r),e.translate(-o,-s)}unapply(e){var{scale:{x:r,y:t},originX:a,originY:n}=this,o=a.getPixels(`x`),s=n.getPixels(`y`);e.translate(o,s),e.scale(1/r,1/t||r),e.translate(-o,-s)}applyToPoint(e){var{x:r,y:t}=this.scale;e.applyTransform([r||0,0,0,t||0,0,0])}},fi=class{constructor(e,r,t){this.type=`matrix`,this.matrix=[],this.originX=null,this.originY=null,this.matrix=se(r),this.originX=t[0],this.originY=t[1]}apply(e){var{originX:r,originY:t,matrix:a}=this,n=r.getPixels(`x`),o=t.getPixels(`y`);e.translate(n,o),e.transform(a[0],a[1],a[2],a[3],a[4],a[5]),e.translate(-n,-o)}unapply(e){var{originX:r,originY:t,matrix:a}=this,n=a[0],o=a[2],s=a[4],u=a[1],l=a[3],h=a[5],c=0,v=0,f=1,g=1/(n*(l*f-h*v)-o*(u*f-h*c)+s*(u*v-l*c)),p=r.getPixels(`x`),y=t.getPixels(`y`);e.translate(p,y),e.transform(g*(l*f-h*v),g*(h*c-u*f),g*(s*v-o*f),g*(n*f-s*c),g*(o*h-s*l),g*(s*u-n*h)),e.translate(-p,-y)}applyToPoint(e){e.applyTransform(this.matrix)}},vi=class extends fi{constructor(e,r,t){super(e,r,t),this.type=`skew`,this.angle=null,this.angle=new w(e,`angle`,r)}},Jn=class extends vi{constructor(e,r,t){super(e,r,t),this.type=`skewX`,this.matrix=[1,0,Math.tan(this.angle.getRadians()),1,0,0]}},es=class extends vi{constructor(e,r,t){super(e,r,t),this.type=`skewY`,this.matrix=[1,Math.tan(this.angle.getRadians()),0,1,0,0]}};Ms=(()=>{class i{constructor(r,t,a){this.document=r,this.transforms=[];SO(t).forEach(o=>{if(o!==`none`){var[s,u]=EO(o),l=i.transformTypes[s];typeof l<`u`&&this.transforms.push(new l(this.document,u,a))}})}static fromElement(r,t){var a=t.getStyle(`transform`,!1,!0),[n,o=n]=t.getStyle(`transform-origin`,!1,!0).split(),s=[n,o];return a.hasValue()?new i(r,a.getString(),s):null}apply(r){for(var{transforms:t}=this,a=t.length,n=0;n=0;n--)t[n].unapply(r)}applyToPoint(r){for(var{transforms:t}=this,a=t.length,n=0;n{class i{constructor(r,t){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(this.document=r,this.node=t,this.captureTextNodes=a,this.attributes=Object.create(null),this.styles=Object.create(null),this.stylesSpecificity=Object.create(null),this.animationFrozen=!1,this.animationFrozenValue=``,this.parent=null,this.children=[],!(!t||t.nodeType!==1)){if(Array.from(t.attributes).forEach(u=>{var l=cO(u.nodeName);this.attributes[l]=new w(r,l,u.value)}),this.addStylesFromStyleDefinition(),this.getAttribute(`style`).hasValue())this.getAttribute(`style`).getString().split(`;`).map(u=>u.trim()).forEach(u=>{if(u){var[l,h]=u.split(`:`).map(c=>c.trim());this.styles[l]=new w(r,l,h)}});var{definitions:o}=r,s=this.getAttribute(`id`);s.hasValue()&&(o[s.getString()]||(o[s.getString()]=this)),Array.from(t.childNodes).forEach(u=>{if(u.nodeType===1)this.addChild(u);else if(a&&(u.nodeType===3||u.nodeType===4)){var l=r.createTextNode(u);l.getText().length>0&&this.addChild(l)}})}}getAttribute(r){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,a=this.attributes[r];if(!a&&t){var n=new w(this.document,r,``);return this.attributes[r]=n,n}return a||w.empty(this.document)}getHrefAttribute(){for(var r in this.attributes)if(r===`href`||r.endsWith(`:href`))return this.attributes[r];return w.empty(this.document)}getStyle(r){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=this.styles[r];if(n)return n;var o=this.getAttribute(r);if(o!=null&&o.hasValue())return this.styles[r]=o,o;if(!a){var{parent:s}=this;if(s){var u=s.getStyle(r);if(u!=null&&u.hasValue())return u}}if(t){var l=new w(this.document,r,``);return this.styles[r]=l,l}return n||w.empty(this.document)}render(r){if(!(this.getStyle(`display`).getString()===`none`||this.getStyle(`visibility`).getString()===`hidden`)){if(r.save(),this.getStyle(`mask`).hasValue()){var t=this.getStyle(`mask`).getDefinition();t&&(this.applyEffects(r),t.apply(r,this))}else if(this.getStyle(`filter`).getValue(`none`)!==`none`){var a=this.getStyle(`filter`).getDefinition();a&&(this.applyEffects(r),a.apply(r,this))}else this.setContext(r),this.renderChildren(r),this.clearContext(r);r.restore()}}setContext(r){}applyEffects(r){var t=Ms.fromElement(this.document,this);t&&t.apply(r);var a=this.getStyle(`clip-path`,!1,!0);if(a.hasValue()){var n=a.getDefinition();n&&n.apply(r)}}clearContext(r){}renderChildren(r){this.children.forEach(t=>{t.render(r)})}addChild(r){var t=r instanceof i?r:this.document.createElement(r);t.parent=this,i.ignoreChildTypes.includes(t.type)||this.children.push(t)}matchesSelector(r){var t,{node:a}=this;if(typeof a.matches==`function`)return a.matches(r);var n=(t=a.getAttribute)===null||t===void 0?void 0:t.call(a,`class`);return!n||n===``?!1:n.split(` `).some(o=>`.`.concat(o)===r)}addStylesFromStyleDefinition(){var{styles:r,stylesSpecificity:t}=this.document;for(var a in r)if(!a.startsWith(`@`)&&this.matchesSelector(a)){var n=r[a],o=t[a];if(n)for(var s in n){var u=this.stylesSpecificity[s];typeof u>`u`&&(u=`000`),o>=u&&(this.styles[s]=n[s],this.stylesSpecificity[s]=o)}}}removeStyles(r,t){return t.reduce((n,o)=>{var s=r.getStyle(o);if(!s.hasValue())return n;var u=s.getString();return s.setValue(``),[...n,[o,u]]},[])}restoreStyles(r,t){t.forEach(a=>{var[n,o]=a;r.getStyle(n,!0).setValue(o)})}isFirstChild(){var r;return((r=this.parent)===null||r===void 0?void 0:r.children.indexOf(this))===0}}return i.ignoreChildTypes=[`title`],i})();rs=class extends B{constructor(e,r,t){super(e,r,t)}};yr=(()=>{class i{constructor(r,t,a,n,o,s){var u=s?typeof s==`string`?i.parse(s):s:{};this.fontFamily=o||u.fontFamily,this.fontSize=n||u.fontSize,this.fontStyle=r||u.fontStyle,this.fontWeight=a||u.fontWeight,this.fontVariant=t||u.fontVariant}static parse(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:``,t=arguments.length>1?arguments[1]:void 0,a=``,n=``,o=``,s=``,u=``,l=mr(r).trim().split(` `),h={fontSize:!1,fontStyle:!1,fontWeight:!1,fontVariant:!1};return l.forEach(c=>{switch(!0){case!h.fontStyle&&i.styles.includes(c):c!==`inherit`&&(a=c),h.fontStyle=!0;break;case!h.fontVariant&&i.variants.includes(c):c!==`inherit`&&(n=c),h.fontStyle=!0,h.fontVariant=!0;break;case!h.fontWeight&&i.weights.includes(c):c!==`inherit`&&(o=c),h.fontStyle=!0,h.fontVariant=!0,h.fontWeight=!0;break;case!h.fontSize:c!==`inherit`&&([s]=c.split(`/`)),h.fontStyle=!0,h.fontVariant=!0,h.fontWeight=!0,h.fontSize=!0;break;default:c!==`inherit`&&(u+=c)}}),new i(a,n,o,s,u,t)}toString(){return[qO(this.fontStyle),this.fontVariant,AO(this.fontWeight),this.fontSize,CO(this.fontFamily)].join(` `).trim()}}return i.styles=`normal|italic|oblique|inherit`,i.variants=`normal|small-caps|inherit`,i.weights=`normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit`,i})();oe=class{constructor(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:NaN,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:NaN,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:NaN;this.x1=e,this.y1=r,this.x2=t,this.y2=a,this.addPoint(e,r),this.addPoint(t,a)}get x(){return this.x1}get y(){return this.y1}get width(){return this.x2-this.x1}get height(){return this.y2-this.y1}addPoint(e,r){typeof e<`u`&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=e,this.x2=e),ethis.x2&&(this.x2=e)),typeof r<`u`&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=r,this.y2=r),rthis.y2&&(this.y2=r))}addX(e){this.addPoint(e,null)}addY(e){this.addPoint(null,e)}addBoundingBox(e){if(e){var{x1:r,y1:t,x2:a,y2:n}=e;this.addPoint(r,t),this.addPoint(a,n)}}sumCubic(e,r,t,a,n){return Math.pow(1-e,3)*r+3*Math.pow(1-e,2)*e*t+3*(1-e)*Math.pow(e,2)*a+Math.pow(e,3)*n}bezierCurveAdd(e,r,t,a,n){var o=6*r-12*t+6*a,s=-3*r+9*t-9*a+3*n,u=3*t-3*r;if(s===0){if(o===0)return;var l=-u/o;0=r.length-1}next(){var e=this.commands[++this.i];return this.previousCommand=this.command,this.command=e,e}getPoint(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:`x`,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:`y`,t=new $(this.command[e],this.command[r]);return this.makeAbsolute(t)}getAsControlPoint(e,r){var t=this.getPoint(e,r);return this.control=t,t}getAsCurrentPoint(e,r){var t=this.getPoint(e,r);return this.current=t,t}getReflectedControlPoint(){var e=this.previousCommand.type;if(e!==b.CURVE_TO&&e!==b.SMOOTH_CURVE_TO&&e!==b.QUAD_TO&&e!==b.SMOOTH_QUAD_TO)return this.current;var{current:{x:r,y:t},control:{x:a,y:n}}=this;return new $(2*r-a,2*t-n)}makeAbsolute(e){if(this.command.relative){var{x:r,y:t}=this.current;e.x+=r,e.y+=t}return e}addMarker(e,r,t){var{points:a,angles:n}=this;t&&n.length>0&&!n[n.length-1]&&(n[n.length-1]=a[a.length-1].angleTo(t)),this.addMarkerAngle(e,r?r.angleTo(e):null)}addMarkerAngle(e,r){this.points.push(e),this.angles.push(r)}getMarkerPoints(){return this.points}getMarkerAngles(){for(var{angles:e}=this,r=e.length,t=0;t1&&arguments[1]!==void 0?arguments[1]:!1;if(!r){var t=this.getStyle(`fill`),a=this.getStyle(`fill-opacity`),n=this.getStyle(`stroke`),o=this.getStyle(`stroke-opacity`);if(t.isUrlDefinition()){var s=t.getFillStyleDefinition(this,a);s&&(e.fillStyle=s)}else if(t.hasValue()){t.getString()===`currentColor`&&t.setValue(this.getStyle(`color`).getColor());var u=t.getColor();u!==`inherit`&&(e.fillStyle=u===`none`?`rgba(0,0,0,0)`:u)}if(a.hasValue())e.fillStyle=new w(this.document,`fill`,e.fillStyle).addOpacity(a).getColor();if(n.isUrlDefinition()){var h=n.getFillStyleDefinition(this,o);h&&(e.strokeStyle=h)}else if(n.hasValue()){n.getString()===`currentColor`&&n.setValue(this.getStyle(`color`).getColor());var c=n.getString();c!==`inherit`&&(e.strokeStyle=c===`none`?`rgba(0,0,0,0)`:c)}if(o.hasValue())e.strokeStyle=new w(this.document,`stroke`,e.strokeStyle).addOpacity(o).getString();var f=this.getStyle(`stroke-width`);if(f.hasValue())e.lineWidth=f.getPixels()||1e-8;var p=this.getStyle(`stroke-linecap`),y=this.getStyle(`stroke-linejoin`),m=this.getStyle(`stroke-miterlimit`),O=this.getStyle(`stroke-dasharray`),x=this.getStyle(`stroke-dashoffset`);if(p.hasValue()&&(e.lineCap=p.getString()),y.hasValue()&&(e.lineJoin=y.getString()),m.hasValue()&&(e.miterLimit=m.getNumber()),O.hasValue()&&O.getString()!==`none`){var T=se(O.getString());typeof e.setLineDash<`u`?e.setLineDash(T):typeof e.webkitLineDash<`u`?e.webkitLineDash=T:typeof e.mozDash<`u`&&!(T.length===1&&T[0]===0)&&(e.mozDash=T);var E=x.getPixels();typeof e.lineDashOffset<`u`?e.lineDashOffset=E:typeof e.webkitLineDashOffset<`u`?e.webkitLineDashOffset=E:typeof e.mozDashOffset<`u`&&(e.mozDashOffset=E)}}if(this.modifiedEmSizeStack=!1,typeof e.font<`u`){var C=this.getStyle(`font`),S=this.getStyle(`font-style`),A=this.getStyle(`font-variant`),P=this.getStyle(`font-weight`),V=this.getStyle(`font-size`),k=this.getStyle(`font-family`),N=new yr(S.getString(),A.getString(),P.getString(),V.hasValue()?``.concat(V.getPixels(!0),`px`):``,k.getString(),yr.parse(C.getString(),e.font));S.setValue(N.fontStyle),A.setValue(N.fontVariant),P.setValue(N.fontWeight),V.setValue(N.fontSize),k.setValue(N.fontFamily),e.font=N.toString(),V.isPixels()&&(this.document.emSize=V.getPixels(),this.modifiedEmSizeStack=!0)}r||(this.applyEffects(e),e.globalAlpha=this.calculateOpacity())}clearContext(e){super.clearContext(e),this.modifiedEmSizeStack&&this.document.popEmSize()}};F=class i extends qe{constructor(e,r,t){super(e,r,t),this.type=`path`,this.pathParser=null,this.pathParser=new q(this.getAttribute(`d`).getString())}path(e){var{pathParser:r}=this,t=new oe;for(r.reset(),e&&e.beginPath();!r.isEnd();)switch(r.next().type){case q.MOVE_TO:this.pathM(e,t);break;case q.LINE_TO:this.pathL(e,t);break;case q.HORIZ_LINE_TO:this.pathH(e,t);break;case q.VERT_LINE_TO:this.pathV(e,t);break;case q.CURVE_TO:this.pathC(e,t);break;case q.SMOOTH_CURVE_TO:this.pathS(e,t);break;case q.QUAD_TO:this.pathQ(e,t);break;case q.SMOOTH_QUAD_TO:this.pathT(e,t);break;case q.ARC:this.pathA(e,t);break;case q.CLOSE_PATH:this.pathZ(e,t);break}return t}getBoundingBox(e){return this.path()}getMarkers(){var{pathParser:e}=this,r=e.getMarkerPoints(),t=e.getMarkerAngles();return r.map((n,o)=>[n,t[o]])}renderChildren(e){this.path(e),this.document.screen.mouse.checkPath(this,e);var r=this.getStyle(`fill-rule`);e.fillStyle!==``&&(r.getString(`inherit`)!==`inherit`?e.fill(r.getString()):e.fill()),e.strokeStyle!==``&&(this.getAttribute(`vector-effect`).getString()===`non-scaling-stroke`?(e.save(),e.setTransform(1,0,0,1,0,0),e.stroke(),e.restore()):e.stroke());var t=this.getMarkers();if(t){var a=t.length-1,n=this.getStyle(`marker-start`),o=this.getStyle(`marker-mid`),s=this.getStyle(`marker-end`);if(n.isUrlDefinition()){var u=n.getDefinition(),[l,h]=t[0];u.render(e,l,h)}if(o.isUrlDefinition())for(var c=o.getDefinition(),v=1;v1&&(a*=Math.sqrt(v),n*=Math.sqrt(v));var f=(s===u?-1:1)*Math.sqrt((Math.pow(a,2)*Math.pow(n,2)-Math.pow(a,2)*Math.pow(c.y,2)-Math.pow(n,2)*Math.pow(c.x,2))/(Math.pow(a,2)*Math.pow(c.y,2)+Math.pow(n,2)*Math.pow(c.x,2)));isNaN(f)&&(f=0);var g=new $(f*a*c.y/n,f*-n*c.x/a),p=new $((r.x+h.x)/2+Math.cos(l)*g.x-Math.sin(l)*g.y,(r.y+h.y)/2+Math.sin(l)*g.x+Math.cos(l)*g.y),y=lg([1,0],[(c.x-g.x)/a,(c.y-g.y)/n]),m=[(c.x-g.x)/a,(c.y-g.y)/n],O=[(-c.x-g.x)/a,(-c.y-g.y)/n],x=lg(m,O);return Yn(m,O)<=-1&&(x=Math.PI),Yn(m,O)>=1&&(x=0),{currentPoint:h,rX:a,rY:n,sweepFlag:u,xAxisRotation:l,centp:p,a1:y,ad:x}}pathA(e,r){var{pathParser:t}=this,{currentPoint:a,rX:n,rY:o,sweepFlag:s,xAxisRotation:u,centp:l,a1:h,ad:c}=i.pathA(t),v=1-s?1:-1,f=h+v*(c/2),g=new $(l.x+n*Math.cos(f),l.y+o*Math.sin(f));if(t.addMarkerAngle(g,f-v*Math.PI/2),t.addMarkerAngle(a,f-v*Math.PI),r.addPoint(a.x,a.y),e&&!isNaN(h)&&!isNaN(c)){var p=n>o?n:o,y=n>o?1:n/o,m=n>o?o/n:1;e.translate(l.x,l.y),e.rotate(u),e.scale(y,m),e.arc(0,0,p,h,h+c,!!(1-s)),e.scale(1/y,1/m),e.rotate(-u),e.translate(-l.x,-l.y)}}static pathZ(e){e.current=e.start}pathZ(e,r){i.pathZ(this.pathParser),e&&r.x1!==r.x2&&r.y1!==r.y2&&e.closePath()}};gi=class extends F{constructor(e,r,t){super(e,r,t),this.type=`glyph`,this.horizAdvX=this.getAttribute(`horiz-adv-x`).getNumber(),this.unicode=this.getAttribute(`unicode`).getString(),this.arabicForm=this.getAttribute(`arabic-form`).getString()}};Ye=class i extends qe{constructor(e,r,t){super(e,r,new.target===i?!0:t),this.type=`text`,this.x=0,this.y=0,this.measureCache=-1}setContext(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;super.setContext(e,r);var t=this.getStyle(`dominant-baseline`).getTextBaseline()||this.getStyle(`alignment-baseline`).getTextBaseline();t&&(e.textBaseline=t)}initializeCoordinates(){this.x=0,this.y=0,this.leafTexts=[],this.textChunkStart=0,this.minX=Number.POSITIVE_INFINITY,this.maxX=Number.NEGATIVE_INFINITY}getBoundingBox(e){if(this.type!==`text`)return this.getTElementBoundingBox(e);this.initializeCoordinates(),this.adjustChildCoordinatesRecursive(e);var r=null;return this.children.forEach((t,a)=>{var n=this.getChildBoundingBox(e,this,this,a);r?r.addBoundingBox(n):r=n}),r}getFontSize(){var{document:e,parent:r}=this,t=yr.parse(e.ctx.font).fontSize;return r.getStyle(`font-size`).getNumber(t)}getTElementBoundingBox(e){var r=this.getFontSize();return new oe(this.x,this.y-r,this.x+this.measureText(e),this.y)}getGlyph(e,r,t){var a=r[t],n=null;if(e.isArabic){var o=r.length,s=r[t-1],u=r[t+1],l=`isolated`;if((t===0||s===` `)&&t0&&s!==` `&&t0&&s!==` `&&(t===o-1||u===` `)&&(l=`initial`),typeof e.glyphs[a]<`u`){var h=e.glyphs[a];n=h instanceof gi?h:h[l]}}else n=e.glyphs[a];return n||(n=e.missingGlyph),n}getText(){return``}getTextFromNode(e){var r=e||this.node,t=Array.from(r.parentNode.childNodes),a=t.indexOf(r),n=t.length-1,o=mr(r.textContent||``);return a===0&&(o=uO(o)),a===n&&(o=lO(o)),o}renderChildren(e){if(this.type!==`text`){this.renderTElementChildren(e);return}this.initializeCoordinates(),this.adjustChildCoordinatesRecursive(e),this.children.forEach((t,a)=>{this.renderChild(e,this,this,a)});var{mouse:r}=this.document.screen;r.isWorking()&&r.checkBoundingBox(this,this.getBoundingBox(e))}renderTElementChildren(e){var{document:r,parent:t}=this,a=this.getText(),n=t.getStyle(`font-family`).getDefinition();if(n){for(var{unitsPerEm:o}=n.fontFace,s=yr.parse(r.ctx.font),u=t.getStyle(`font-size`).getNumber(s.fontSize),l=t.getStyle(`font-style`).getString(s.fontStyle),h=u/o,c=n.isRTL?a.split(``).reverse().join(``):a,v=se(t.getAttribute(`dx`).getString()),f=c.length,g=0;g=this.leafTexts.length)){var e=this.leafTexts[this.textChunkStart],r=e.getStyle(`text-anchor`).getString(`start`),t=!1,a=0;r===`start`&&!t||r===`end`&&t?a=e.x-this.minX:r===`end`&&!t||r===`start`&&t?a=e.x-this.maxX:a=e.x-(this.minX+this.maxX)/2;for(var n=this.textChunkStart;n{this.adjustChildCoordinatesRecursiveCore(e,this,this,t)}),this.applyAnchoring()}adjustChildCoordinatesRecursiveCore(e,r,t,a){var n=t.children[a];n.children.length>0?n.children.forEach((o,s)=>{r.adjustChildCoordinatesRecursiveCore(e,r,n,s)}):this.adjustChildCoordinates(e,r,t,a)}adjustChildCoordinates(e,r,t,a){var n=t.children[a];if(typeof n.measureText!=`function`)return n;e.save(),n.setContext(e,!0);var o=n.getAttribute(`x`),s=n.getAttribute(`y`),u=n.getAttribute(`dx`),l=n.getAttribute(`dy`),h=n.getStyle(`font-family`).getDefinition(),c=!!h&&h.isRTL;a===0&&(o.hasValue()||o.setValue(n.getInheritedAttribute(`x`)),s.hasValue()||s.setValue(n.getInheritedAttribute(`y`)),u.hasValue()||u.setValue(n.getInheritedAttribute(`dx`)),l.hasValue()||l.setValue(n.getInheritedAttribute(`dy`)));var v=n.measureText(e);return c&&(r.x-=v),o.hasValue()?(r.applyAnchoring(),n.x=o.getPixels(`x`),u.hasValue()&&(n.x+=u.getPixels(`x`))):(u.hasValue()&&(r.x+=u.getPixels(`x`)),n.x=r.x),r.x=n.x,c||(r.x+=v),s.hasValue()?(n.y=s.getPixels(`y`),l.hasValue()&&(n.y+=l.getPixels(`y`))):(l.hasValue()&&(r.y+=l.getPixels(`y`)),n.y=r.y),r.y=n.y,r.leafTexts.push(n),r.minX=Math.min(r.minX,n.x,n.x+v),r.maxX=Math.max(r.maxX,n.x,n.x+v),n.clearContext(e),e.restore(),n}getChildBoundingBox(e,r,t,a){var n=t.children[a];if(typeof n.getBoundingBox!=`function`)return null;var o=n.getBoundingBox(e);return o?(n.children.forEach((s,u)=>{var l=r.getChildBoundingBox(e,r,n,u);o.addBoundingBox(l)}),o):null}renderChild(e,r,t,a){var n=t.children[a];n.render(e),n.children.forEach((o,s)=>{r.renderChild(e,r,n,s)})}measureText(e){var{measureCache:r}=this;if(~r)return r;var t=this.getText(),a=this.measureTargetText(e,t);return this.measureCache=a,a}measureTargetText(e,r){if(!r.length)return 0;var{parent:t}=this,a=t.getStyle(`font-family`).getDefinition();if(a){for(var n=this.getFontSize(),o=a.isRTL?r.split(``).reverse().join(``):r,s=se(t.getAttribute(`dx`).getString()),u=o.length,l=0,h=0;h0?``:this.getTextFromNode()}getText(){return this.text}};ts=class extends di{constructor(){super(...arguments),this.type=`textNode`}};Xe=class extends qe{constructor(){super(...arguments),this.type=`svg`,this.root=!1}setContext(e){var r,{document:t}=this,{screen:a,window:n}=t,o=e.canvas;if(a.setDefaults(e),o.style&&typeof e.font<`u`&&n&&typeof n.getComputedStyle<`u`){e.font=n.getComputedStyle(o).getPropertyValue(`font`);var s=new w(t,`fontSize`,yr.parse(e.font).fontSize);s.hasValue()&&(t.rootEmSize=s.getPixels(`y`),t.emSize=t.rootEmSize)}this.getAttribute(`x`).hasValue()||this.getAttribute(`x`,!0).setValue(0),this.getAttribute(`y`).hasValue()||this.getAttribute(`y`,!0).setValue(0);var{width:u,height:l}=a.viewPort;this.getStyle(`width`).hasValue()||this.getStyle(`width`,!0).setValue(`100%`),this.getStyle(`height`).hasValue()||this.getStyle(`height`,!0).setValue(`100%`),this.getStyle(`color`).hasValue()||this.getStyle(`color`,!0).setValue(`black`);var h=this.getAttribute(`refX`),c=this.getAttribute(`refY`),v=this.getAttribute(`viewBox`),f=v.hasValue()?se(v.getString()):null,g=!this.root&&this.getStyle(`overflow`).getValue(`hidden`)!==`visible`,p=0,y=0,m=0,O=0;f&&(p=f[0],y=f[1]),this.root||(u=this.getStyle(`width`).getPixels(`x`),l=this.getStyle(`height`).getPixels(`y`),this.type===`marker`&&(m=p,O=y,p=0,y=0)),a.viewPort.setCurrent(u,l),this.node&&(!this.parent||((r=this.node.parentNode)===null||r===void 0?void 0:r.nodeName)===`foreignObject`)&&this.getStyle(`transform`,!1,!0).hasValue()&&!this.getStyle(`transform-origin`,!1,!0).hasValue()&&this.getStyle(`transform-origin`,!0,!0).setValue(`50% 50%`),super.setContext(e),e.translate(this.getAttribute(`x`).getPixels(`x`),this.getAttribute(`y`).getPixels(`y`)),f&&(u=f[2],l=f[3]),t.setViewBox({ctx:e,aspectRatio:this.getAttribute(`preserveAspectRatio`).getString(),width:a.viewPort.width,desiredWidth:u,height:a.viewPort.height,desiredHeight:l,minX:p,minY:y,refX:h.getValue(),refY:c.getValue(),clip:g,clipX:m,clipY:O}),f&&(a.viewPort.removeCurrent(),a.viewPort.setCurrent(u,l))}clearContext(e){super.clearContext(e),this.document.screen.viewPort.removeCurrent()}resize(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:e,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,a=this.getAttribute(`width`,!0),n=this.getAttribute(`height`,!0),o=this.getAttribute(`viewBox`),s=this.getAttribute(`style`),u=a.getNumber(0),l=n.getNumber(0);if(t)if(typeof t==`string`)this.getAttribute(`preserveAspectRatio`,!0).setValue(t);else{var h=this.getAttribute(`preserveAspectRatio`);h.hasValue()&&h.setValue(h.getString().replace(/^\s*(\S.*\S)\s*$/,`$1`))}if(a.setValue(e),n.setValue(r),o.hasValue()||o.setValue(`0 0 `.concat(u||e,` `).concat(l||r)),s.hasValue()){var c=this.getStyle(`width`),v=this.getStyle(`height`);c.hasValue()&&c.setValue(``.concat(e,`px`)),v.hasValue()&&v.setValue(``.concat(r,`px`))}}};pi=class extends F{constructor(){super(...arguments),this.type=`rect`}path(e){var r=this.getAttribute(`x`).getPixels(`x`),t=this.getAttribute(`y`).getPixels(`y`),a=this.getStyle(`width`,!1,!0).getPixels(`x`),n=this.getStyle(`height`,!1,!0).getPixels(`y`),o=this.getAttribute(`rx`),s=this.getAttribute(`ry`),u=o.getPixels(`x`),l=s.getPixels(`y`);if(o.hasValue()&&!s.hasValue()&&(l=u),s.hasValue()&&!o.hasValue()&&(u=l),u=Math.min(u,a/2),l=Math.min(l,n/2),e){var h=4*((Math.sqrt(2)-1)/3);e.beginPath(),n>0&&a>0&&(e.moveTo(r+u,t),e.lineTo(r+a-u,t),e.bezierCurveTo(r+a-u+h*u,t,r+a,t+l-h*l,r+a,t+l),e.lineTo(r+a,t+n-l),e.bezierCurveTo(r+a,t+n-l+h*l,r+a-u+h*u,t+n,r+a-u,t+n),e.lineTo(r+u,t+n),e.bezierCurveTo(r+u-h*u,t+n,r,t+n-l+h*l,r,t+n-l),e.lineTo(r,t+l),e.bezierCurveTo(r,t+l-h*l,r+u-h*u,t,r+u,t),e.closePath())}return new oe(r,t,r+a,t+n)}getMarkers(){return null}};is=class extends F{constructor(){super(...arguments),this.type=`circle`}path(e){var r=this.getAttribute(`cx`).getPixels(`x`),t=this.getAttribute(`cy`).getPixels(`y`),a=this.getAttribute(`r`).getPixels();return e&&a>0&&(e.beginPath(),e.arc(r,t,a,0,Math.PI*2,!1),e.closePath()),new oe(r-a,t-a,r+a,t+a)}getMarkers(){return null}};as=class extends F{constructor(){super(...arguments),this.type=`ellipse`}path(e){var r=4*((Math.sqrt(2)-1)/3),t=this.getAttribute(`rx`).getPixels(`x`),a=this.getAttribute(`ry`).getPixels(`y`),n=this.getAttribute(`cx`).getPixels(`x`),o=this.getAttribute(`cy`).getPixels(`y`);return e&&t>0&&a>0&&(e.beginPath(),e.moveTo(n+t,o),e.bezierCurveTo(n+t,o+r*a,n+r*t,o+a,n,o+a),e.bezierCurveTo(n-r*t,o+a,n-t,o+r*a,n-t,o),e.bezierCurveTo(n-t,o-r*a,n-r*t,o-a,n,o-a),e.bezierCurveTo(n+r*t,o-a,n+t,o-r*a,n+t,o),e.closePath()),new oe(n-t,o-a,n+t,o+a)}getMarkers(){return null}};ns=class extends F{constructor(){super(...arguments),this.type=`line`}getPoints(){return[new $(this.getAttribute(`x1`).getPixels(`x`),this.getAttribute(`y1`).getPixels(`y`)),new $(this.getAttribute(`x2`).getPixels(`x`),this.getAttribute(`y2`).getPixels(`y`))]}path(e){var[{x:r,y:t},{x:a,y:n}]=this.getPoints();return e&&(e.beginPath(),e.moveTo(r,t),e.lineTo(a,n)),new oe(r,t,a,n)}getMarkers(){var[e,r]=this.getPoints(),t=e.angleTo(r);return[[e,t],[r,t]]}};yi=class extends F{constructor(e,r,t){super(e,r,t),this.type=`polyline`,this.points=[],this.points=$.parsePath(this.getAttribute(`points`).getString())}path(e){var{points:r}=this,[{x:t,y:a}]=r,n=new oe(t,a);return e&&(e.beginPath(),e.moveTo(t,a)),r.forEach(o=>{var{x:s,y:u}=o;n.addPoint(s,u),e&&e.lineTo(s,u)}),n}getMarkers(){var{points:e}=this,r=e.length-1,t=[];return e.forEach((a,n)=>{n!==r&&t.push([a,a.angleTo(e[n+1])])}),t.length>0&&t.push([e[e.length-1],t[t.length-1][1]]),t}};ss=class extends yi{constructor(){super(...arguments),this.type=`polygon`}path(e){var r=super.path(e),[{x:t,y:a}]=this.points;return e&&(e.lineTo(t,a),e.closePath()),r}};os=class extends B{constructor(){super(...arguments),this.type=`pattern`}createPattern(e,r,t){var a=this.getStyle(`width`).getPixels(`x`,!0),n=this.getStyle(`height`).getPixels(`y`,!0),o=new Xe(this.document,null);o.attributes.viewBox=new w(this.document,`viewBox`,this.getAttribute(`viewBox`).getValue()),o.attributes.width=new w(this.document,`width`,``.concat(a,`px`)),o.attributes.height=new w(this.document,`height`,``.concat(n,`px`)),o.attributes.transform=new w(this.document,`transform`,this.getAttribute(`patternTransform`).getValue()),o.children=this.children;var s=this.document.createCanvas(a,n),u=s.getContext(`2d`),l=this.getAttribute(`x`),h=this.getAttribute(`y`);l.hasValue()&&h.hasValue()&&u.translate(l.getPixels(`x`,!0),h.getPixels(`y`,!0)),t.hasValue()?this.styles[`fill-opacity`]=t:Reflect.deleteProperty(this.styles,`fill-opacity`);for(var c=-1;c<=1;c++)for(var v=-1;v<=1;v++)u.save(),o.attributes.x=new w(this.document,`x`,c*s.width),o.attributes.y=new w(this.document,`y`,v*s.height),o.render(u),u.restore();return e.createPattern(s,`repeat`)}};us=class extends B{constructor(){super(...arguments),this.type=`marker`}render(e,r,t){if(r){var{x:a,y:n}=r,o=this.getAttribute(`orient`).getString(`auto`),s=this.getAttribute(`markerUnits`).getString(`strokeWidth`);e.translate(a,n),o===`auto`&&e.rotate(t),s===`strokeWidth`&&e.scale(e.lineWidth,e.lineWidth),e.save();var u=new Xe(this.document,null);u.type=this.type,u.attributes.viewBox=new w(this.document,`viewBox`,this.getAttribute(`viewBox`).getValue()),u.attributes.refX=new w(this.document,`refX`,this.getAttribute(`refX`).getValue()),u.attributes.refY=new w(this.document,`refY`,this.getAttribute(`refY`).getValue()),u.attributes.width=new w(this.document,`width`,this.getAttribute(`markerWidth`).getValue()),u.attributes.height=new w(this.document,`height`,this.getAttribute(`markerHeight`).getValue()),u.attributes.overflow=new w(this.document,`overflow`,this.getAttribute(`overflow`).getValue()),u.attributes.fill=new w(this.document,`fill`,this.getAttribute(`fill`).getColor(`black`)),u.attributes.stroke=new w(this.document,`stroke`,this.getAttribute(`stroke`).getValue(`none`)),u.children=this.children,u.render(e),e.restore(),s===`strokeWidth`&&e.scale(1/e.lineWidth,1/e.lineWidth),o===`auto`&&e.rotate(-t),e.translate(-a,-n)}}};ls=class extends B{constructor(){super(...arguments),this.type=`defs`}render(){}};Kr=class extends qe{constructor(){super(...arguments),this.type=`g`}getBoundingBox(e){var r=new oe;return this.children.forEach(t=>{r.addBoundingBox(t.getBoundingBox(e))}),r}};mi=class extends B{constructor(e,r,t){super(e,r,t),this.attributesToInherit=[`gradientUnits`],this.stops=[];var{stops:a,children:n}=this;n.forEach(o=>{o.type===`stop`&&a.push(o)})}getGradientUnits(){return this.getAttribute(`gradientUnits`).getString(`objectBoundingBox`)}createGradient(e,r,t){var a=this;this.getHrefAttribute().hasValue()&&(a=this.getHrefAttribute().getDefinition(),this.inheritStopContainer(a));var{stops:n}=a,o=this.getGradient(e,r);if(!o)return this.addParentOpacity(t,n[n.length-1].color);if(n.forEach(y=>{o.addColorStop(y.offset,this.addParentOpacity(t,y.color))}),this.getAttribute(`gradientTransform`).hasValue()){var{document:s}=this,{MAX_VIRTUAL_PIXELS:u,viewPort:l}=s.screen,[h]=l.viewPorts,c=new pi(s,null);c.attributes.x=new w(s,`x`,-u/3),c.attributes.y=new w(s,`y`,-u/3),c.attributes.width=new w(s,`width`,u),c.attributes.height=new w(s,`height`,u);var v=new Kr(s,null);v.attributes.transform=new w(s,`transform`,this.getAttribute(`gradientTransform`).getValue()),v.children=[c];var f=new Xe(s,null);f.attributes.x=new w(s,`x`,0),f.attributes.y=new w(s,`y`,0),f.attributes.width=new w(s,`width`,h.width),f.attributes.height=new w(s,`height`,h.height),f.children=[v];var g=s.createCanvas(h.width,h.height),p=g.getContext(`2d`);return p.fillStyle=o,f.render(p),p.createPattern(g,`no-repeat`)}return o}inheritStopContainer(e){this.attributesToInherit.forEach(r=>{!this.getAttribute(r).hasValue()&&e.getAttribute(r).hasValue()&&this.getAttribute(r,!0).setValue(e.getAttribute(r).getValue())})}addParentOpacity(e,r){if(e.hasValue())return new w(this.document,`color`,r).addOpacity(e).getColor();return r}};hs=class extends mi{constructor(e,r,t){super(e,r,t),this.type=`linearGradient`,this.attributesToInherit.push(`x1`,`y1`,`x2`,`y2`)}getGradient(e,r){var t=this.getGradientUnits()===`objectBoundingBox`,a=t?r.getBoundingBox(e):null;if(t&&!a)return null;!this.getAttribute(`x1`).hasValue()&&!this.getAttribute(`y1`).hasValue()&&!this.getAttribute(`x2`).hasValue()&&!this.getAttribute(`y2`).hasValue()&&(this.getAttribute(`x1`,!0).setValue(0),this.getAttribute(`y1`,!0).setValue(0),this.getAttribute(`x2`,!0).setValue(1),this.getAttribute(`y2`,!0).setValue(0));var n=t?a.x+a.width*this.getAttribute(`x1`).getNumber():this.getAttribute(`x1`).getPixels(`x`),o=t?a.y+a.height*this.getAttribute(`y1`).getNumber():this.getAttribute(`y1`).getPixels(`y`),s=t?a.x+a.width*this.getAttribute(`x2`).getNumber():this.getAttribute(`x2`).getPixels(`x`),u=t?a.y+a.height*this.getAttribute(`y2`).getNumber():this.getAttribute(`y2`).getPixels(`y`);return n===s&&o===u?null:e.createLinearGradient(n,o,s,u)}};cs=class extends mi{constructor(e,r,t){super(e,r,t),this.type=`radialGradient`,this.attributesToInherit.push(`cx`,`cy`,`r`,`fx`,`fy`,`fr`)}getGradient(e,r){var t=this.getGradientUnits()===`objectBoundingBox`,a=r.getBoundingBox(e);if(t&&!a)return null;this.getAttribute(`cx`).hasValue()||this.getAttribute(`cx`,!0).setValue(`50%`),this.getAttribute(`cy`).hasValue()||this.getAttribute(`cy`,!0).setValue(`50%`),this.getAttribute(`r`).hasValue()||this.getAttribute(`r`,!0).setValue(`50%`);var n=t?a.x+a.width*this.getAttribute(`cx`).getNumber():this.getAttribute(`cx`).getPixels(`x`),o=t?a.y+a.height*this.getAttribute(`cy`).getNumber():this.getAttribute(`cy`).getPixels(`y`),s=n,u=o;this.getAttribute(`fx`).hasValue()&&(s=t?a.x+a.width*this.getAttribute(`fx`).getNumber():this.getAttribute(`fx`).getPixels(`x`)),this.getAttribute(`fy`).hasValue()&&(u=t?a.y+a.height*this.getAttribute(`fy`).getNumber():this.getAttribute(`fy`).getPixels(`y`));var l=t?(a.width+a.height)/2*this.getAttribute(`r`).getNumber():this.getAttribute(`r`).getPixels(),h=this.getAttribute(`fr`).getPixels();return e.createRadialGradient(s,u,h,n,o,l)}};fs=class extends B{constructor(e,r,t){super(e,r,t),this.type=`stop`;var a=Math.max(0,Math.min(1,this.getAttribute(`offset`).getNumber())),n=this.getStyle(`stop-opacity`),o=this.getStyle(`stop-color`,!0);o.getString()===``&&o.setValue(`#000`),n.hasValue()&&(o=o.addOpacity(n)),this.offset=a,this.color=o.getColor()}};Zr=class extends B{constructor(e,r,t){super(e,r,t),this.type=`animate`,this.duration=0,this.initialValue=null,this.initialUnits=``,this.removed=!1,this.frozen=!1,e.screen.animations.push(this),this.begin=this.getAttribute(`begin`).getMilliseconds(),this.maxDuration=this.begin+this.getAttribute(`dur`).getMilliseconds(),this.from=this.getAttribute(`from`),this.to=this.getAttribute(`to`),this.values=new w(e,`values`,null);var a=this.getAttribute(`values`);a.hasValue()&&this.values.setValue(a.getString().split(`;`))}getProperty(){var e=this.getAttribute(`attributeType`).getString(),r=this.getAttribute(`attributeName`).getString();return e===`CSS`?this.parent.getStyle(r,!0):this.parent.getAttribute(r,!0)}calcValue(){var{initialUnits:e}=this,{progress:r,from:t,to:a}=this.getProgress(),n=t.getNumber()+(a.getNumber()-t.getNumber())*r;return e===`%`&&(n*=100),``.concat(n).concat(e)}update(e){var{parent:r}=this,t=this.getProperty();if(this.initialValue||(this.initialValue=t.getString(),this.initialUnits=t.getUnits()),this.duration>this.maxDuration){var a=this.getAttribute(`fill`).getString(`remove`);if(this.getAttribute(`repeatCount`).getString()===`indefinite`||this.getAttribute(`repeatDur`).getString()===`indefinite`)this.duration=0;else if(a===`freeze`&&!this.frozen)this.frozen=!0,r.animationFrozen=!0,r.animationFrozenValue=t.getString();else if(a===`remove`&&!this.removed)return this.removed=!0,t.setValue(r.animationFrozen?r.animationFrozenValue:this.initialValue),!0;return!1}this.duration+=e;var n=!1;if(this.begin{return s+(n[u]-s)*e}).join(` `)}};ds=class extends B{constructor(e,r,t){super(e,r,t),this.type=`font`,this.glyphs=Object.create(null),this.horizAdvX=this.getAttribute(`horiz-adv-x`).getNumber();var{definitions:a}=e,{children:n}=this;for(var o of n)switch(o.type){case`font-face`:this.fontFace=o;var s=o.getStyle(`font-family`);s.hasValue()&&(a[s.getString()]=this);break;case`missing-glyph`:this.missingGlyph=o;break;case`glyph`:var u=o;u.arabicForm?(this.isRTL=!0,this.isArabic=!0,typeof this.glyphs[u.unicode]>`u`&&(this.glyphs[u.unicode]=Object.create(null)),this.glyphs[u.unicode][u.arabicForm]=u):this.glyphs[u.unicode]=u;break}}render(){}};ps=class extends B{constructor(e,r,t){super(e,r,t),this.type=`font-face`,this.ascent=this.getAttribute(`ascent`).getNumber(),this.descent=this.getAttribute(`descent`).getNumber(),this.unitsPerEm=this.getAttribute(`units-per-em`).getNumber()}};ys=class extends F{constructor(){super(...arguments),this.type=`missing-glyph`,this.horizAdvX=0}};ms=class extends Ye{constructor(){super(...arguments),this.type=`tref`}getText(){var e=this.getHrefAttribute().getDefinition();if(e){var r=e.children[0];if(r)return r.getText()}return``}};bs=class extends Ye{constructor(e,r,t){super(e,r,t),this.type=`a`;var{childNodes:a}=r,n=a[0],o=a.length>0&&Array.from(a).every(s=>s.nodeType===3);this.hasText=o,this.text=o?this.getTextFromNode(n):``}getText(){return this.text}renderChildren(e){if(this.hasText){super.renderChildren(e);var{document:r,x:t,y:a}=this,{mouse:n}=r.screen,o=new w(r,`fontSize`,yr.parse(r.ctx.font).fontSize);n.isWorking()&&n.checkBoundingBox(this,new oe(t,a-o.getPixels(`y`),t+this.measureText(e),a))}else if(this.children.length>0){var s=new Kr(this.document,null);s.children=this.children,s.parent=this,s.render(e)}}onClick(){var{window:e}=this.document;e&&e.open(this.getHrefAttribute().getString())}onMouseMove(){var e=this.document.ctx;e.canvas.style.cursor=`pointer`}};xs=class extends Ye{constructor(e,r,t){super(e,r,t),this.type=`textPath`,this.textWidth=0,this.textHeight=0,this.pathLength=-1,this.glyphInfo=null,this.letterSpacingCache=[],this.measuresCache=new Map([[``,0]]);var a=this.getHrefAttribute().getDefinition();this.text=this.getTextFromNode(),this.dataArray=this.parsePathData(a)}getText(){return this.text}path(e){var{dataArray:r}=this;e&&e.beginPath(),r.forEach(t=>{var{type:a,points:n}=t;switch(a){case q.LINE_TO:e&&e.lineTo(n[0],n[1]);break;case q.MOVE_TO:e&&e.moveTo(n[0],n[1]);break;case q.CURVE_TO:e&&e.bezierCurveTo(n[0],n[1],n[2],n[3],n[4],n[5]);break;case q.QUAD_TO:e&&e.quadraticCurveTo(n[0],n[1],n[2],n[3]);break;case q.ARC:var[o,s,u,l,h,c,v,f]=n,g=u>l?u:l,p=u>l?1:u/l,y=u>l?l/u:1;e&&(e.translate(o,s),e.rotate(v),e.scale(p,y),e.arc(0,0,g,h,h+c,!!(1-f)),e.scale(1/p,1/y),e.rotate(-v),e.translate(-o,-s));break;case q.CLOSE_PATH:e&&e.closePath();break}})}renderChildren(e){this.setTextData(e),e.save();var r=this.parent.getStyle(`text-decoration`).getString(),t=this.getFontSize(),{glyphInfo:a}=this,n=e.fillStyle;r===`underline`&&e.beginPath(),a.forEach((o,s)=>{var{p0:u,p1:l,rotation:h,text:c}=o;e.save(),e.translate(u.x,u.y),e.rotate(h),e.fillStyle&&e.fillText(c,0,0),e.strokeStyle&&e.strokeText(c,0,0),e.restore(),r===`underline`&&(s===0&&e.moveTo(u.x,u.y+t/8),e.lineTo(l.x,l.y+t/5))}),r===`underline`&&(e.lineWidth=t/20,e.strokeStyle=n,e.stroke(),e.closePath()),e.restore()}getLetterSpacingAt(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return this.letterSpacingCache[e]||0}findSegmentToFitChar(e,r,t,a,n,o,s,u,l){var h=o,c=this.measureText(e,u);u===` `&&r===`justify`&&t-1&&(h+=this.getLetterSpacingAt(l));var v=this.textHeight/20,f=this.getEquidistantPointOnPath(h,v,0),g=this.getEquidistantPointOnPath(h+c,v,0),p={p0:f,p1:g},y=f&&g?Math.atan2(g.y-f.y,g.x-f.x):0;if(s){var m=Math.cos(Math.PI/2+y)*s,O=Math.cos(-y)*s;p.p0=oi(oi({},f),{},{x:f.x+m,y:f.y+O}),p.p1=oi(oi({},g),{},{x:g.x+m,y:g.y+O})}return h+=c,{offset:h,segment:p,rotation:y}}measureText(e,r){var{measuresCache:t}=this,a=r||this.getText();if(t.has(a))return t.get(a);var n=this.measureTargetText(e,a);return t.set(a,n),n}setTextData(e){if(!this.glyphInfo){var r=this.getText(),t=r.split(``),a=r.split(` `).length-1,n=this.parent.getAttribute(`dx`).split().map(T=>T.getPixels(`x`)),o=this.parent.getAttribute(`dy`).getPixels(`y`),s=this.parent.getStyle(`text-anchor`).getString(`start`),u=this.getStyle(`letter-spacing`),l=this.parent.getStyle(`letter-spacing`),h=0;!u.hasValue()||u.getValue()===`inherit`?h=l.getPixels():u.hasValue()&&u.getValue()!==`initial`&&u.getValue()!==`unset`&&(h=u.getPixels());var c=[],v=r.length;this.letterSpacingCache=c;for(var f=0;fC===0?0:T+E||0,0),p=this.measureText(e),y=Math.max(p+g,0);this.textWidth=p,this.textHeight=this.getFontSize(),this.glyphInfo=[];var m=this.getPathLength(),O=this.getStyle(`startOffset`).getNumber(0)*m,x=0;(s===`middle`||s===`center`)&&(x=-y/2),(s===`end`||s===`right`)&&(x=-y),x+=O,t.forEach((T,E)=>{var{offset:C,segment:S,rotation:A}=this.findSegmentToFitChar(e,s,y,m,a,x,o,T,E);x=C,!(!S.p0||!S.p1)&&this.glyphInfo.push({text:t[E],p0:S.p0,p1:S.p1,rotation:A})})}}parsePathData(e){if(this.pathLength=-1,!e)return[];var r=[],{pathParser:t}=e;for(t.reset();!t.isEnd();){var{current:a}=t,n=a?a.x:0,o=a?a.y:0,s=t.next(),u=s.type,l=[];switch(s.type){case q.MOVE_TO:this.pathM(t,l);break;case q.LINE_TO:u=this.pathL(t,l);break;case q.HORIZ_LINE_TO:u=this.pathH(t,l);break;case q.VERT_LINE_TO:u=this.pathV(t,l);break;case q.CURVE_TO:this.pathC(t,l);break;case q.SMOOTH_CURVE_TO:u=this.pathS(t,l);break;case q.QUAD_TO:this.pathQ(t,l);break;case q.SMOOTH_QUAD_TO:u=this.pathT(t,l);break;case q.ARC:l=this.pathA(t);break;case q.CLOSE_PATH:F.pathZ(t);break}s.type!==q.CLOSE_PATH?r.push({type:u,points:l,start:{x:n,y:o},pathLength:this.calcLength(n,o,u,l)}):r.push({type:q.CLOSE_PATH,points:[],pathLength:0})}return r}pathM(e,r){var{x:t,y:a}=F.pathM(e).point;r.push(t,a)}pathL(e,r){var{x:t,y:a}=F.pathL(e).point;return r.push(t,a),q.LINE_TO}pathH(e,r){var{x:t,y:a}=F.pathH(e).point;return r.push(t,a),q.LINE_TO}pathV(e,r){var{x:t,y:a}=F.pathV(e).point;return r.push(t,a),q.LINE_TO}pathC(e,r){var{point:t,controlPoint:a,currentPoint:n}=F.pathC(e);r.push(t.x,t.y,a.x,a.y,n.x,n.y)}pathS(e,r){var{point:t,controlPoint:a,currentPoint:n}=F.pathS(e);return r.push(t.x,t.y,a.x,a.y,n.x,n.y),q.CURVE_TO}pathQ(e,r){var{controlPoint:t,currentPoint:a}=F.pathQ(e);r.push(t.x,t.y,a.x,a.y)}pathT(e,r){var{controlPoint:t,currentPoint:a}=F.pathT(e);return r.push(t.x,t.y,a.x,a.y),q.QUAD_TO}pathA(e){var{rX:r,rY:t,sweepFlag:a,xAxisRotation:n,centp:o,a1:s,ad:u}=F.pathA(e);return a===0&&u>0&&(u-=2*Math.PI),a===1&&u<0&&(u+=2*Math.PI),[o.x,o.y,r,t,s,u,n,a]}calcLength(e,r,t,a){var n=0,o=null,s=null,u=0;switch(t){case q.LINE_TO:return this.getLineLength(e,r,a[0],a[1]);case q.CURVE_TO:for(n=0,o=this.getPointOnCubicBezier(0,e,r,a[0],a[1],a[2],a[3],a[4],a[5]),u=.01;u<=1;u+=.01)s=this.getPointOnCubicBezier(u,e,r,a[0],a[1],a[2],a[3],a[4],a[5]),n+=this.getLineLength(o.x,o.y,s.x,s.y),o=s;return n;case q.QUAD_TO:for(n=0,o=this.getPointOnQuadraticBezier(0,e,r,a[0],a[1],a[2],a[3]),u=.01;u<=1;u+=.01)s=this.getPointOnQuadraticBezier(u,e,r,a[0],a[1],a[2],a[3]),n+=this.getLineLength(o.x,o.y,s.x,s.y),o=s;return n;case q.ARC:n=0;var l=a[4],h=a[5],c=a[4]+h,v=Math.PI/180;if(Math.abs(l-c)c;u-=v)s=this.getPointOnEllipticalArc(a[0],a[1],a[2],a[3],u,0),n+=this.getLineLength(o.x,o.y,s.x,s.y),o=s;else for(u=l+v;u5&&arguments[5]!==void 0?arguments[5]:r,s=arguments.length>6&&arguments[6]!==void 0?arguments[6]:t,u=(n-t)/(a-r+pr),l=Math.sqrt(e*e/(1+u*u));ar)return null;var{dataArray:n}=this;for(var o of n){if(o&&(o.pathLength<5e-5||t+o.pathLength+5e-5=0&&u>c)break;a=this.getPointOnEllipticalArc(o.points[0],o.points[1],o.points[2],o.points[3],u,o.points[6]);break;case q.CURVE_TO:u=s/o.pathLength,u>1&&(u=1),a=this.getPointOnCubicBezier(u,o.start.x,o.start.y,o.points[0],o.points[1],o.points[2],o.points[3],o.points[4],o.points[5]);break;case q.QUAD_TO:u=s/o.pathLength,u>1&&(u=1),a=this.getPointOnQuadraticBezier(u,o.start.x,o.start.y,o.points[0],o.points[1],o.points[2],o.points[3]);break}if(a)return a;break}return null}getLineLength(e,r,t,a){return Math.sqrt((t-e)*(t-e)+(a-r)*(a-r))}getPathLength(){return this.pathLength===-1&&(this.pathLength=this.dataArray.reduce((e,r)=>r.pathLength>0?e+r.pathLength:e,0)),this.pathLength}getPointOnCubicBezier(e,r,t,a,n,o,s,u,l){return{x:u*hg(e)+o*cg(e)+a*fg(e)+r*vg(e),y:l*hg(e)+s*cg(e)+n*fg(e)+t*vg(e)}}getPointOnQuadraticBezier(e,r,t,a,n,o,s){return{x:o*gg(e)+a*dg(e)+r*pg(e),y:s*gg(e)+n*dg(e)+t*pg(e)}}getPointOnEllipticalArc(e,r,t,a,n,o){var s=Math.cos(o),u=Math.sin(o),l={x:t*Math.cos(n),y:a*Math.sin(n)};return{x:e+(l.x*s-l.y*u),y:r+(l.x*u+l.y*s)}}buildEquidistantCache(e,r){var t=this.getPathLength(),a=r||.25,n=e||t/100;if(!this.equidistantCache||this.equidistantCache.step!==n||this.equidistantCache.precision!==a){this.equidistantCache={step:n,precision:a,points:[]};for(var o=0,s=0;s<=t;s+=a){var u=this.getPointOnPath(s),l=this.getPointOnPath(s+a);!u||!l||(o+=this.getLineLength(u.x,u.y,l.x,l.y),o>=n&&(this.equidistantCache.points.push({x:u.x,y:u.y,distance:s}),o-=n))}}}getEquidistantPointOnPath(e,r,t){if(this.buildEquidistantCache(r,t),e<0||e-this.getPathLength()>5e-5)return null;var a=Math.round(e/this.getPathLength()*(this.equidistantCache.points.length-1));return this.equidistantCache.points[a]||null}};PO=/^\s*data:(([^/,;]+\/[^/,;]+)(?:;([^,;=]+=[^,;=]+))?)?(?:;(base64))?,(.*)$/i;Ts=class extends qe{constructor(e,r,t){super(e,r,t),this.type=`image`,this.loaded=!1;var a=this.getHrefAttribute().getString();if(a){var n=a.endsWith(`.svg`)||/^\s*data:image\/svg\+xml/i.test(a);e.images.push(this),n?this.loadSvg(a):this.loadImage(a),this.isSvg=n}}loadImage(e){var r=this;return be(function*(){try{r.image=yield r.document.createImage(e)}catch(a){console.error(`Error while loading image "`.concat(e,`":`),a)}r.loaded=!0})()}loadSvg(e){var r=this;return be(function*(){var t=PO.exec(e);if(t){var a=t[5];t[4]===`base64`?r.image=atob(a):r.image=decodeURIComponent(a)}else try{r.image=yield(yield r.document.fetch(e)).text()}catch(s){console.error(`Error while loading image "`.concat(e,`":`),s)}r.loaded=!0})()}renderChildren(e){var{document:r,image:t,loaded:a}=this,n=this.getAttribute(`x`).getPixels(`x`),o=this.getAttribute(`y`).getPixels(`y`),s=this.getStyle(`width`).getPixels(`x`),u=this.getStyle(`height`).getPixels(`y`);if(!(!a||!t||!s||!u)){if(e.save(),e.translate(n,o),this.isSvg){var l=r.canvg.forkString(e,this.image,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:0,offsetY:0,scaleWidth:s,scaleHeight:u});l.document.documentElement.parent=this,l.render()}else{var h=this.image;r.setViewBox({ctx:e,aspectRatio:this.getAttribute(`preserveAspectRatio`).getString(),width:s,desiredWidth:h.width,height:u,desiredHeight:h.height}),this.loaded&&(typeof h.complete>`u`||h.complete)&&e.drawImage(h,0,0)}e.restore()}}getBoundingBox(){var e=this.getAttribute(`x`).getPixels(`x`),r=this.getAttribute(`y`).getPixels(`y`),t=this.getStyle(`width`).getPixels(`x`),a=this.getStyle(`height`).getPixels(`y`);return new oe(e,r,e+t,r+a)}};Os=class extends qe{constructor(){super(...arguments),this.type=`symbol`}render(e){}};Ss=class{constructor(e){this.document=e,this.loaded=!1,e.fonts.push(this)}load(e,r){var t=this;return be(function*(){try{var{document:a}=t,o=(yield a.canvg.parser.load(r)).getElementsByTagName(`font`);Array.from(o).forEach(s=>{var u=a.createElement(s);a.definitions[e]=u})}catch(s){console.error(`Error while loading font "`.concat(r,`":`),s)}t.loaded=!0})()}};RO=(()=>{class i extends B{constructor(r,t,a){super(r,t,a),this.type=`style`;mr(Array.from(t.childNodes).map(s=>s.textContent).join(``).replace(/(\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm,``).replace(/@import.*;/g,``)).split(`}`).forEach(s=>{var u=s.trim();if(u){var l=u.split(`{`),h=l[0].split(`,`),c=l[1].split(`;`);h.forEach(v=>{var f=v.trim();if(f){var g=r.styles[f]||{};if(c.forEach(m=>{var O=m.indexOf(`:`),x=m.substr(0,O).trim(),T=m.substr(O+1,m.length-O).trim();x&&T&&(g[x]=new w(r,x,T))}),r.styles[f]=g,r.stylesSpecificity[f]=xO(f),f===`@font-face`){var p=g[`font-family`].getString().replace(/"|'/g,``);g.src.getString().split(`,`).forEach(m=>{if(m.indexOf(`format("svg")`)>0){var O=og(m);O&&new Ss(r).load(p,O)}})}}})}})}}return i.parseExternalUrl=og,i})();Es=class extends qe{constructor(){super(...arguments),this.type=`use`}setContext(e){super.setContext(e);var r=this.getAttribute(`x`),t=this.getAttribute(`y`);r.hasValue()&&e.translate(r.getPixels(`x`),0),t.hasValue()&&e.translate(0,t.getPixels(`y`))}path(e){var{element:r}=this;r&&r.path(e)}renderChildren(e){var{document:r,element:t}=this;if(t){var a=t;if(t.type===`symbol`&&(a=new Xe(r,null),a.attributes.viewBox=new w(r,`viewBox`,t.getAttribute(`viewBox`).getString()),a.attributes.preserveAspectRatio=new w(r,`preserveAspectRatio`,t.getAttribute(`preserveAspectRatio`).getString()),a.attributes.overflow=new w(r,`overflow`,t.getAttribute(`overflow`).getString()),a.children=t.children,t.styles.opacity=new w(r,`opacity`,this.calculateOpacity())),a.type===`svg`){var n=this.getStyle(`width`,!1,!0),o=this.getStyle(`height`,!1,!0);n.hasValue()&&(a.attributes.width=new w(r,`width`,n.getString())),o.hasValue()&&(a.attributes.height=new w(r,`height`,o.getString()))}var s=a.parent;a.parent=this,a.render(e),a.parent=s}}getBoundingBox(e){var{element:r}=this;return r?r.getBoundingBox(e):null}elementTransform(){var{document:e,element:r}=this;return Ms.fromElement(e,r)}get element(){return this.cachedElement||(this.cachedElement=this.getHrefAttribute().getDefinition()),this.cachedElement}};bi=class extends B{constructor(e,r,t){super(e,r,t),this.type=`feColorMatrix`;var a=se(this.getAttribute(`values`).getString());switch(this.getAttribute(`type`).getString(`matrix`)){case`saturate`:var n=a[0];a=[.213+.787*n,.715-.715*n,.072-.072*n,0,0,.213-.213*n,.715+.285*n,.072-.072*n,0,0,.213-.213*n,.715-.715*n,.072+.928*n,0,0,0,0,0,1,0,0,0,0,0,1];break;case`hueRotate`:var o=a[0]*Math.PI/180;a=[Ce(o,.213,.787,-.213),Ce(o,.715,-.715,-.715),Ce(o,.072,-.072,.928),0,0,Ce(o,.213,-.213,.143),Ce(o,.715,.285,.14),Ce(o,.072,-.072,-.283),0,0,Ce(o,.213,-.213,-.787),Ce(o,.715,-.715,.715),Ce(o,.072,.928,.072),0,0,0,0,0,1,0,0,0,0,0,1];break;case`luminanceToAlpha`:a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.2125,.7154,.0721,0,0,0,0,0,0,1];break}this.matrix=a,this.includeOpacity=this.getAttribute(`includeOpacity`).hasValue()}apply(e,r,t,a,n){for(var{includeOpacity:o,matrix:s}=this,u=e.getImageData(0,0,a,n),l=0;l{class i extends B{constructor(){super(...arguments),this.type=`mask`}apply(r,t){var{document:a}=this,n=this.getAttribute(`x`).getPixels(`x`),o=this.getAttribute(`y`).getPixels(`y`),s=this.getStyle(`width`).getPixels(`x`),u=this.getStyle(`height`).getPixels(`y`);if(!s&&!u){var l=new oe;this.children.forEach(p=>{l.addBoundingBox(p.getBoundingBox(r))}),n=Math.floor(l.x1),o=Math.floor(l.y1),s=Math.floor(l.width),u=Math.floor(l.height)}var h=this.removeStyles(t,i.ignoreStyles),c=a.createCanvas(n+s,o+u),v=c.getContext(`2d`);a.screen.setDefaults(v),this.renderChildren(v),new bi(a,{nodeType:1,childNodes:[],attributes:[{nodeName:`type`,value:`luminanceToAlpha`},{nodeName:`includeOpacity`,value:`true`}]}).apply(v,0,0,n+s,o+u);var f=a.createCanvas(n+s,o+u),g=f.getContext(`2d`);a.screen.setDefaults(g),t.render(g),g.globalCompositeOperation=`destination-in`,g.fillStyle=v.createPattern(c,`no-repeat`),g.fillRect(0,0,n+s,o+u),r.fillStyle=g.createPattern(f,`no-repeat`),r.fillRect(0,0,n+s,o+u),this.restoreStyles(t,h)}render(r){}}return i.ignoreStyles=[`mask`,`transform`,`clip-path`],i})();xg=()=>{};ws=class extends B{constructor(){super(...arguments),this.type=`clipPath`}apply(e){var{document:r}=this,t=Reflect.getPrototypeOf(e),{beginPath:a,closePath:n}=e;t&&(t.beginPath=xg,t.closePath=xg),Reflect.apply(a,e,[]),this.children.forEach(o=>{if(!(typeof o.path>`u`)){var s=typeof o.elementTransform<`u`?o.elementTransform():null;s||(s=Ms.fromElement(r,o)),s&&s.apply(e),o.path(e),t&&(t.closePath=n),s&&s.unapply(e)}}),Reflect.apply(n,e,[]),e.clip(),t&&(t.beginPath=a,t.closePath=n)}render(e){}};IO=(()=>{class i extends B{constructor(){super(...arguments),this.type=`filter`}apply(r,t){var{document:a,children:n}=this,o=t.getBoundingBox(r);if(o){var s=0,u=0;n.forEach(O=>{var x=O.extraFilterDistance||0;s=Math.max(s,x),u=Math.max(u,x)});var l=Math.floor(o.width),h=Math.floor(o.height),c=l+2*s,v=h+2*u;if(!(c<1||v<1)){var f=Math.floor(o.x),g=Math.floor(o.y),p=this.removeStyles(t,i.ignoreStyles),y=a.createCanvas(c,v),m=y.getContext(`2d`);a.screen.setDefaults(m),m.translate(-f+s,-g+u),t.render(m),n.forEach(O=>{typeof O.apply==`function`&&O.apply(m,0,0,c,v)}),r.drawImage(y,0,0,c,v,f-s,g-u,c,v),this.restoreStyles(t,p)}}}render(r){}}return i.ignoreStyles=[`filter`,`transform`,`clip-path`],i})();Cs=class extends B{constructor(e,r,t){super(e,r,t),this.type=`feDropShadow`,this.addStylesFromStyleDefinition()}apply(e,r,t,a,n){}};qs=class extends B{constructor(){super(...arguments),this.type=`feMorphology`}apply(e,r,t,a,n){}};As=class extends B{constructor(){super(...arguments),this.type=`feComposite`}apply(e,r,t,a,n){}};Ps=class extends B{constructor(e,r,t){super(e,r,t),this.type=`feGaussianBlur`,this.blurRadius=Math.floor(this.getAttribute(`stdDeviation`).getNumber()),this.extraFilterDistance=this.blurRadius}apply(e,r,t,a,n){var{document:o,blurRadius:s}=this,u=o.window?o.window.document.body:null,l=e.canvas;l.id=o.getUniqueId(),u&&(l.style.display=`none`,u.appendChild(l)),sg(l,r,t,a,n,s),u&&u.removeChild(l)}};Rs=class extends B{constructor(){super(...arguments),this.type=`title`}};Ns=class extends B{constructor(){super(...arguments),this.type=`desc`}};MO={svg:Xe,rect:pi,circle:is,ellipse:as,line:ns,polyline:yi,polygon:ss,path:F,pattern:os,marker:us,defs:ls,linearGradient:hs,radialGradient:cs,stop:fs,animate:Zr,animateColor:vs,animateTransform:gs,font:ds,"font-face":ps,"missing-glyph":ys,glyph:gi,text:Ye,tspan:di,tref:ms,a:bs,textPath:xs,image:Ts,g:Kr,symbol:Os,style:RO,use:Es,mask:NO,clipPath:ws,filter:IO,feDropShadow:Cs,feMorphology:qs,feComposite:As,feColorMatrix:bi,feGaussianBlur:Ps,title:Rs,desc:Ns};LO=(()=>{class i{constructor(r){var{rootEmSize:t=12,emSize:a=12,createCanvas:n=i.createCanvas,createImage:o=i.createImage,anonymousCrossOrigin:s}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.canvg=r,this.definitions=Object.create(null),this.styles=Object.create(null),this.stylesSpecificity=Object.create(null),this.images=[],this.fonts=[],this.emSizeStack=[],this.uniqueId=0,this.screen=r.screen,this.rootEmSize=t,this.emSize=a,this.createCanvas=n,this.createImage=this.bindCreateImage(o,s),this.screen.wait(this.isImagesLoaded.bind(this)),this.screen.wait(this.isFontsLoaded.bind(this))}bindCreateImage(r,t){return typeof t==`boolean`?(a,n)=>r(a,typeof n==`boolean`?n:t):r}get window(){return this.screen.window}get fetch(){return this.screen.fetch}get ctx(){return this.screen.ctx}get emSize(){var{emSizeStack:r}=this;return r[r.length-1]}set emSize(r){var{emSizeStack:t}=this;t.push(r)}popEmSize(){var{emSizeStack:r}=this;r.pop()}getUniqueId(){return`canvg`.concat(++this.uniqueId)}isImagesLoaded(){return this.images.every(r=>r.loaded)}isFontsLoaded(){return this.fonts.every(r=>r.loaded)}createDocumentElement(r){var t=this.createElement(r.documentElement);return t.root=!0,t.addStylesFromStyleDefinition(),this.documentElement=t,t}createElement(r){var t=r.nodeName.replace(/^[^:]+:/,``),a=i.elementTypes[t];return typeof a<`u`?new a(this,r):new rs(this,r)}createTextNode(r){return new ts(this,r)}setViewBox(r){this.screen.setViewBox(VO({document:this},r))}}return i.createCanvas=_O,i.createImage=DO,i.elementTypes=MO,i})();Sg=class i{constructor(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.parser=new Qr(t),this.screen=new Eg(e,t),this.options=t;var a=new LO(this,t),n=a.createDocumentElement(r);this.document=a,this.documentElement=n}static from(e,r){var t=arguments;return be(function*(){var a=t.length>2&&t[2]!==void 0?t[2]:{},o=yield new Qr(a).parse(r);return new i(e,o,a)})()}static fromString(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=new Qr(t).parseFromString(r);return new i(e,n,t)}fork(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return i.from(e,r,He(He({},this.options),t))}forkString(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return i.fromString(e,r,He(He({},this.options),t))}ready(){return this.screen.ready()}isReady(){return this.screen.isReady()}render(){var e=arguments,r=this;return be(function*(){var t=e.length>0&&e[0]!==void 0?e[0]:{};r.start(He({enableRedraw:!0,ignoreAnimation:!0,ignoreMouse:!0},t)),yield r.ready(),r.stop()})()}start(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{documentElement:r,screen:t,options:a}=this;t.start(r,He(He({enableRedraw:!0},a),e))}stop(){this.screen.stop()}resize(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:e,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;this.documentElement.resize(e,r,t)}}}));init_chunk_TQULINJJ();export{bs as AElement,vs as AnimateColorElement,Zr as AnimateElement,gs as AnimateTransformElement,oe as BoundingBox,hg as CB1,cg as CB2,fg as CB3,vg as CB4,Sg as Canvg,Sg as default,is as CircleElement,ws as ClipPathElement,ls as DefsElement,Ns as DescElement,LO as Document,B as Element,as as EllipseElement,bi as FeColorMatrixElement,As as FeCompositeElement,Cs as FeDropShadowElement,Ps as FeGaussianBlurElement,qs as FeMorphologyElement,IO as FilterElement,yr as Font,ds as FontElement,ps as FontFaceElement,Kr as GElement,gi as GlyphElement,mi as GradientElement,Ts as ImageElement,ns as LineElement,hs as LinearGradientElement,us as MarkerElement,NO as MaskElement,fi as Matrix,ys as MissingGlyphElement,Wn as Mouse,pr as PSEUDO_ZERO,Qr as Parser,F as PathElement,q as PathParser,os as PatternElement,$ as Point,ss as PolygonElement,yi as PolylineElement,w as Property,gg as QB1,dg as QB2,pg as QB3,cs as RadialGradientElement,pi as RectElement,qe as RenderedElement,Kn as Rotate,Xe as SVGElement,Ss as SVGFontLoader,Zn as Scale,Eg as Screen,vi as Skew,Jn as SkewX,es as SkewY,fs as StopElement,RO as StyleElement,Os as SymbolElement,ms as TRefElement,di as TSpanElement,Ye as TextElement,xs as TextPathElement,Rs as TitleElement,Ms as Transform,Qn as Translate,rs as UnknownElement,Es as UseElement,Xn as ViewPort,mr as compressSpaces,xO as getSelectorSpecificity,cO as normalizeAttributeName,fO as normalizeColor,og as parseExternalUrl,_C as presets,se as toNumbers,uO as trimLeft,lO as trimRight,ug as vectorMagnitude,lg as vectorsAngle,Yn as vectorsRatio}; \ No newline at end of file diff --git a/docs/chunk-Df2FdJZg.js b/docs/chunk-Df2FdJZg.js new file mode 100644 index 0000000..1b3aa09 --- /dev/null +++ b/docs/chunk-Df2FdJZg.js @@ -0,0 +1,5 @@ +import{n as u,o as __esmMin,t as init_chunk_IFGU66OU}from"./main-ZSOIWSXQ.js";var MQ,chunk_ACAMUYGZ_default;var init_chunk_ACAMUYGZ=__esmMin((()=>{init_chunk_IFGU66OU();MQ=u((nt,st)=>{(function(IA,P){typeof nt==`object`&&typeof st<`u`?st.exports=P():typeof define==`function`&&define.amd?define(P):(IA=typeof globalThis<`u`?globalThis:IA||self,IA.html2canvas=P())})(nt,(function(){"use strict";var IA=function(e,A){return IA=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,r){t.__proto__=r}||function(t,r){for(var B in r)Object.prototype.hasOwnProperty.call(r,B)&&(t[B]=r[B])},IA(e,A)};function P(e,A){if(typeof A!=`function`&&A!==null)throw new TypeError(`Class extends value `+String(A)+` is not a constructor or null`);IA(e,A);function t(){this.constructor=e}e.prototype=A===null?Object.create(A):(t.prototype=A.prototype,new t)}var ir=function(){return ir=Object.assign||function(A){for(var t,r=1,B=arguments.length;r0&&n[n.length-1])&&(o[0]===6||o[0]===2)){t=0;continue}if(o[0]===3&&(!n||o[1]>n[0]&&o[1]=55296&&B<=56319&&t>10)+55296,s%1024+56320)),(B+1===t||r.length>16384)&&(n+=String.fromCharCode.apply(String,r),r.length=0)}return n},at=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,gn=typeof Uint8Array>`u`?[]:new Uint8Array(256),fe=0;fe`u`?[]:new Uint8Array(256),Ue=0;Ue>4,Q[B++]=(s&15)<<4|i>>2,Q[B++]=(i&3)<<6|a&63;return o},cn=function(e){for(var A=e.length,t=[],r=0;r>vA,gr=(1<>vA)+32,En=65536>>or,pn=(1<=0){if(A<55296||A>56319&&A<=65535)return t=this.index[A>>vA],t=(t<>vA)],t=(t<>or),t=this.index[t],t+=A>>vA&pn,t=this.index[t],t=(t<`u`?[]:new Uint8Array(256),Fe=0;Fewt?(B.push(!0),i-=wt):B.push(!1),[`normal`,`auto`,`loose`].indexOf(A)!==-1&&[8208,8211,12316,12448].indexOf(n)!==-1)return r.push(s),t.push(Cr);if(i===Dn||i===wr){if(s===0)return r.push(s),t.push(yA);var a=t[s-1];return Rn.indexOf(a)===-1?(r.push(r[s-1]),t.push(a)):(r.push(s),t.push(yA))}if(r.push(s),i===On)return t.push(A===`strict`?ur:$A);if(i===ht||i===Sn)return t.push(yA);if(i===Mn)return n>=131072&&n<=196605||n>=196608&&n<=262141?t.push($A):t.push(yA);t.push(i)}),[r,t,B]},pr=function(e,A,t,r){var B=r[t];if(Array.isArray(e)?e.indexOf(B)!==-1:e===B)for(var n=t;n<=r.length;){n++;var s=r[n];if(s===A)return!0;if(s!==CA)break}if(B===CA)for(var n=t;n>0;){n--;var i=r[n];if(Array.isArray(e)?e.indexOf(i)!==-1:e===i)for(var a=t;a<=r.length;){a++;var s=r[a];if(s===A)return!0;if(s!==CA)break}if(i!==CA)break}return!1},It=function(e,A){for(var t=e;t>=0;){var r=A[t];if(r===CA)t--;else return r}return 0},Xn=function(e,A,t,r,B){if(t[r]===0)return I;var n=r-1;if(Array.isArray(B)&&B[n]===!0)return I;var s=n-1,i=n+1,a=A[n],o=s>=0?A[s]:0,Q=A[i];if(a===ct&&Q===Ct)return I;if(Hr.indexOf(a)!==-1)return dt;if(Hr.indexOf(Q)!==-1||Et.indexOf(Q)!==-1)return I;if(It(n,A)===lt)return Ie;if(Er.get(e[n])===wr||(a===de||a===Ee)&&Er.get(e[i])===wr||a===ut||Q===ut||a===ft||[CA,cr,WA].indexOf(a)===-1&&Q===ft||[he,ZA,Tn,SA,OA].indexOf(Q)!==-1||It(n,A)===qA||pr(lr,qA,n,A)||pr([he,ZA],ur,n,A)||pr(Ut,Ut,n,A))return I;if(a===CA)return Ie;if(a===lr||Q===lr)return I;if(Q===Cr||a===Cr)return Ie;if([cr,WA,ur].indexOf(Q)!==-1||a===xn||o===Fr&&Vn.indexOf(a)!==-1||a===OA&&Q===Fr||Q===Ft||oA.indexOf(Q)!==-1&&a===j||oA.indexOf(a)!==-1&&Q===j||a===zA&&[$A,de,Ee].indexOf(Q)!==-1||[$A,de,Ee].indexOf(a)!==-1&&Q===jA||oA.indexOf(a)!==-1&&Ht.indexOf(Q)!==-1||Ht.indexOf(a)!==-1&&oA.indexOf(Q)!==-1||[zA,jA].indexOf(a)!==-1&&(Q===j||[qA,WA].indexOf(Q)!==-1&&A[i+1]===j)||[qA,WA].indexOf(a)!==-1&&Q===j||a===j&&[j,OA,SA].indexOf(Q)!==-1)return I;if([j,OA,SA,he,ZA].indexOf(Q)!==-1)for(var g=n;g>=0;){var w=A[g];if(w===j)return I;if([OA,SA].indexOf(w)!==-1)g--;else break}if([zA,jA].indexOf(Q)!==-1)for(var g=[he,ZA].indexOf(a)!==-1?s:n;g>=0;){var w=A[g];if(w===j)return I;if([OA,SA].indexOf(w)!==-1)g--;else break}if(hr===a&&[hr,He,fr,Ur].indexOf(Q)!==-1||[He,fr].indexOf(a)!==-1&&[He,pe].indexOf(Q)!==-1||[pe,Ur].indexOf(a)!==-1&&Q===pe||pt.indexOf(a)!==-1&&[Ft,jA].indexOf(Q)!==-1||pt.indexOf(Q)!==-1&&a===zA||oA.indexOf(a)!==-1&&oA.indexOf(Q)!==-1||a===SA&&oA.indexOf(Q)!==-1||oA.concat(j).indexOf(a)!==-1&&Q===qA&&Gn.indexOf(e[i])===-1||oA.concat(j).indexOf(Q)!==-1&&a===ZA)return I;if(a===dr&&Q===dr){for(var f=t[n],c=1;f>0&&(f--,A[f]===dr);)c++;if(c%2!==0)return I}return a===de&&Q===Ee?I:Ie},_n=function(e,A){A||(A={lineBreak:`normal`,wordBreak:`normal`});var t=Nn(e,A.lineBreak),r=t[0],B=t[1],n=t[2];(A.wordBreak===`break-all`||A.wordBreak===`break-word`)&&(B=B.map(function(i){return[j,yA,ht].indexOf(i)!==-1?$A:i}));var s=A.wordBreak===`keep-all`?n.map(function(i,a){return i&&e[a]>=19968&&e[a]<=40959}):void 0;return[r,B,s]},Jn=(function(){function e(A,t,r,B){this.codePoints=A,this.required=t===dt,this.start=r,this.end=B}return e.prototype.slice=function(){return T.apply(void 0,this.codePoints.slice(this.start,this.end))},e})(),Pn=function(e,A){var t=le(e),r=_n(t,A),B=r[0],n=r[1],s=r[2],i=t.length,a=0,o=0;return{next:function(){if(o>=i)return{done:!0,value:null};for(var Q=I;o=Lt&&e<=57},Is=function(e){return e>=55296&&e<=57343},MA=function(e){return J(e)||e>=xt&&e<=St||e>=Dt&&e<=hs},vs=function(e){return e>=Dt&&e<=Es},ys=function(e){return e>=xt&&e<=ps},Ks=function(e){return vs(e)||ys(e)},ms=function(e){return e>=Qs},De=function(e){return e===ve||e===Wn||e===Zn},be=function(e){return Ks(e)||ms(e)||e===$n},Ot=function(e){return be(e)||J(e)||e===Y},Ls=function(e){return e>=Cs&&e<=us||e===ls||e>=fs&&e<=Us||e===Fs},uA=function(e,A){return e!==ee?!1:A!==ve},xe=function(e,A,t){return e===Y?be(A)||uA(A,t):be(e)?!0:!!(e===ee&&uA(e,A))},vr=function(e,A,t){return e===KA||e===Y?J(A)?!0:A===Be&&J(t):J(e===Be?A:e)},Ds=function(e){var A=0,t=1;(e[A]===KA||e[A]===Y)&&(e[A]===Y&&(t=-1),A++);for(var r=[];J(e[A]);)r.push(e[A++]);var B=r.length?parseInt(T.apply(void 0,r),10):0;e[A]===Be&&A++;for(var n=[];J(e[A]);)n.push(e[A++]);var s=n.length,i=s?parseInt(T.apply(void 0,n),10):0;(e[A]===Tt||e[A]===bt)&&A++;var a=1;(e[A]===KA||e[A]===Y)&&(e[A]===Y&&(a=-1),A++);for(var o=[];J(e[A]);)o.push(e[A++]);var Q=o.length?parseInt(T.apply(void 0,o),10):0;return t*(B+i*Math.pow(10,-s))*Math.pow(10,a*Q)},bs={type:2},xs={type:3},Ts={type:4},Ss={type:13},Os={type:8},Ms={type:21},Gs={type:9},Rs={type:10},Vs={type:11},Ns={type:12},Xs={type:14},Te={type:23},_s={type:1},Js={type:25},Ps={type:24},ks={type:26},Ys={type:27},Ws={type:28},Zs={type:29},qs={type:31},yr={type:32},Mt=(function(){function e(){this._value=[]}return e.prototype.write=function(A){this._value=this._value.concat(le(A))},e.prototype.read=function(){for(var A=[],t=this.consumeToken();t!==yr;)A.push(t),t=this.consumeToken();return A},e.prototype.consumeToken=function(){var A=this.consumeCodePoint();switch(A){case ye:return this.consumeStringToken(ye);case qn:var t=this.peekCodePoint(0),r=this.peekCodePoint(1),B=this.peekCodePoint(2);if(Ot(t)||uA(r,B)){var n=xe(t,r,B)?Yn:kn,s=this.consumeName();return{type:5,value:s,flags:n}}break;case jn:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Ss;break;case Ke:return this.consumeStringToken(Ke);case me:return bs;case te:return xs;case Ir:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Xs;break;case KA:if(vr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case gs:return Ts;case Y:var i=A,a=this.peekCodePoint(0),o=this.peekCodePoint(1);if(vr(i,a,o))return this.reconsumeCodePoint(A),this.consumeNumericToken();if(xe(i,a,o))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();if(a===Y&&o===rs)return this.consumeCodePoint(),this.consumeCodePoint(),Ps;break;case Be:if(vr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case yt:if(this.peekCodePoint(0)===Ir)for(this.consumeCodePoint();;){var Q=this.consumeCodePoint();if(Q===Ir&&(Q=this.consumeCodePoint(),Q===yt))return this.consumeToken();if(Q===BA)return this.consumeToken()}break;case ws:return ks;case cs:return Ys;case es:if(this.peekCodePoint(0)===As&&this.peekCodePoint(1)===Y&&this.peekCodePoint(2)===Y)return this.consumeCodePoint(),this.consumeCodePoint(),Js;break;case ts:if(xe(this.peekCodePoint(0),this.peekCodePoint(1),this.peekCodePoint(2))){var s=this.consumeName();return{type:7,value:s}}break;case Bs:return Ws;case ee:if(uA(A,this.peekCodePoint(0)))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();break;case ns:return Zs;case ss:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Os;break;case as:return Vs;case is:return Ns;case ds:case Hs:var c=this.peekCodePoint(0),C=this.peekCodePoint(1);return c===KA&&(MA(C)||C===Le)&&(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(A),this.consumeIdentLikeToken();case Kt:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Gs;if(this.peekCodePoint(0)===Kt)return this.consumeCodePoint(),Ms;break;case os:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Rs;break;case BA:return yr}return De(A)?(this.consumeWhiteSpace(),qs):J(A)?(this.reconsumeCodePoint(A),this.consumeNumericToken()):be(A)?(this.reconsumeCodePoint(A),this.consumeIdentLikeToken()):{type:6,value:T(A)}},e.prototype.consumeCodePoint=function(){var A=this._value.shift();return typeof A>`u`?-1:A},e.prototype.reconsumeCodePoint=function(A){this._value.unshift(A)},e.prototype.peekCodePoint=function(A){return A>=this._value.length?-1:this._value[A]},e.prototype.consumeUnicodeRangeToken=function(){for(var A=[],t=this.consumeCodePoint();MA(t)&&A.length<6;)A.push(t),t=this.consumeCodePoint();for(var r=!1;t===Le&&A.length<6;)A.push(t),t=this.consumeCodePoint(),r=!0;if(r){var B=parseInt(T.apply(void 0,A.map(function(a){return a===Le?Lt:a})),16),n=parseInt(T.apply(void 0,A.map(function(a){return a===Le?St:a})),16);return{type:30,start:B,end:n}}var s=parseInt(T.apply(void 0,A),16);if(this.peekCodePoint(0)===Y&&MA(this.peekCodePoint(1))){this.consumeCodePoint(),t=this.consumeCodePoint();for(var i=[];MA(t)&&i.length<6;)i.push(t),t=this.consumeCodePoint();var n=parseInt(T.apply(void 0,i),16);return{type:30,start:s,end:n}}else return{type:30,start:s,end:s}},e.prototype.consumeIdentLikeToken=function(){var A=this.consumeName();return A.toLowerCase()===`url`&&this.peekCodePoint(0)===me?(this.consumeCodePoint(),this.consumeUrlToken()):this.peekCodePoint(0)===me?(this.consumeCodePoint(),{type:19,value:A}):{type:20,value:A}},e.prototype.consumeUrlToken=function(){var A=[];if(this.consumeWhiteSpace(),this.peekCodePoint(0)===BA)return{type:22,value:``};var t=this.peekCodePoint(0);if(t===Ke||t===ye){var r=this.consumeStringToken(this.consumeCodePoint());return r.type===0&&(this.consumeWhiteSpace(),this.peekCodePoint(0)===BA||this.peekCodePoint(0)===te)?(this.consumeCodePoint(),{type:22,value:r.value}):(this.consumeBadUrlRemnants(),Te)}for(;;){var B=this.consumeCodePoint();if(B===BA||B===te)return{type:22,value:T.apply(void 0,A)};if(De(B))return this.consumeWhiteSpace(),this.peekCodePoint(0)===BA||this.peekCodePoint(0)===te?(this.consumeCodePoint(),{type:22,value:T.apply(void 0,A)}):(this.consumeBadUrlRemnants(),Te);if(B===ye||B===Ke||B===me||Ls(B))return this.consumeBadUrlRemnants(),Te;if(B===ee)if(uA(B,this.peekCodePoint(0)))A.push(this.consumeEscapedCodePoint());else return this.consumeBadUrlRemnants(),Te;else A.push(B)}},e.prototype.consumeWhiteSpace=function(){for(;De(this.peekCodePoint(0));)this.consumeCodePoint()},e.prototype.consumeBadUrlRemnants=function(){for(;;){var A=this.consumeCodePoint();if(A===te||A===BA)return;uA(A,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},e.prototype.consumeStringSlice=function(A){for(var t=5e4,r=``;A>0;){var B=Math.min(t,A);r+=T.apply(void 0,this._value.splice(0,B)),A-=B}return this._value.shift(),r},e.prototype.consumeStringToken=function(A){var t=``,r=0;do{var B=this._value[r];if(B===BA||B===void 0||B===A)return t+=this.consumeStringSlice(r),{type:0,value:t};if(B===ve)return this._value.splice(0,r),_s;if(B===ee){var n=this._value[r+1];n!==BA&&n!==void 0&&(n===ve?(t+=this.consumeStringSlice(r),r=-1,this._value.shift()):uA(B,n)&&(t+=this.consumeStringSlice(r),t+=T(this.consumeEscapedCodePoint()),r=-1))}r++}while(!0)},e.prototype.consumeNumber=function(){var A=[],t=Ae,r=this.peekCodePoint(0);for((r===KA||r===Y)&&A.push(this.consumeCodePoint());J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());r=this.peekCodePoint(0);var B=this.peekCodePoint(1);if(r===Be&&J(B))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=vt;J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());r=this.peekCodePoint(0),B=this.peekCodePoint(1);var n=this.peekCodePoint(2);if((r===Tt||r===bt)&&((B===KA||B===Y)&&J(n)||J(B)))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=vt;J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());return[Ds(A),t]},e.prototype.consumeNumericToken=function(){var A=this.consumeNumber(),t=A[0],r=A[1],B=this.peekCodePoint(0);if(xe(B,this.peekCodePoint(1),this.peekCodePoint(2)))return{type:15,number:t,flags:r,unit:this.consumeName()};return B===zn?(this.consumeCodePoint(),{type:16,number:t,flags:r}):{type:17,number:t,flags:r}},e.prototype.consumeEscapedCodePoint=function(){var A=this.consumeCodePoint();if(MA(A)){for(var t=T(A);MA(this.peekCodePoint(0))&&t.length<6;)t+=T(this.consumeCodePoint());De(this.peekCodePoint(0))&&this.consumeCodePoint();var r=parseInt(t,16);return r===0||Is(r)||r>1114111?mt:r}return A===BA?mt:A},e.prototype.consumeName=function(){for(var A=``;;){var t=this.consumeCodePoint();if(Ot(t))A+=T(t);else if(uA(t,this.peekCodePoint(0)))A+=T(this.consumeEscapedCodePoint());else return this.reconsumeCodePoint(t),A}},e})(),Gt=(function(){function e(A){this._tokens=A}return e.create=function(A){var t=new Mt;return t.write(A),new e(t.read())},e.parseValue=function(A){return e.create(A).parseComponentValue()},e.parseValues=function(A){return e.create(A).parseComponentValues()},e.prototype.parseComponentValue=function(){for(var A=this.consumeToken();A.type===31;)A=this.consumeToken();if(A.type===32)throw new SyntaxError(`Error parsing CSS component value, unexpected EOF`);this.reconsumeToken(A);var t=this.consumeComponentValue();do A=this.consumeToken();while(A.type===31);if(A.type===32)return t;throw new SyntaxError(`Error parsing CSS component value, multiple values found when expecting only one`)},e.prototype.parseComponentValues=function(){for(var A=[];;){var t=this.consumeComponentValue();if(t.type===32)return A;A.push(t),A.push()}},e.prototype.consumeComponentValue=function(){var A=this.consumeToken();switch(A.type){case 11:case 28:case 2:return this.consumeSimpleBlock(A.type);case 19:return this.consumeFunction(A)}return A},e.prototype.consumeSimpleBlock=function(A){for(var t={type:A,values:[]},r=this.consumeToken();;){if(r.type===32||zs(r,A))return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue()),r=this.consumeToken()}},e.prototype.consumeFunction=function(A){for(var t={name:A.value,values:[],type:18};;){var r=this.consumeToken();if(r.type===32||r.type===3)return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue())}},e.prototype.consumeToken=function(){var A=this._tokens.shift();return typeof A>`u`?yr:A},e.prototype.reconsumeToken=function(A){this._tokens.unshift(A)},e})(),ne=function(e){return e.type===15},GA=function(e){return e.type===17},L=function(e){return e.type===20},js=function(e){return e.type===0},Kr=function(e,A){return L(e)&&e.value===A},Rt=function(e){return e.type!==31},RA=function(e){return e.type!==31&&e.type!==4},nA=function(e){var A=[],t=[];return e.forEach(function(r){if(r.type===4){if(t.length===0)throw new Error(`Error parsing function args, zero tokens for arg`);A.push(t),t=[];return}r.type!==31&&t.push(r)}),t.length&&A.push(t),A},zs=function(e,A){return A===11&&e.type===12||A===28&&e.type===29?!0:A===2&&e.type===3},lA=function(e){return e.type===17||e.type===15},O=function(e){return e.type===16||lA(e)},Vt=function(e){return e.length>1?[e[0],e[1]]:[e[0]]},V={type:17,number:0,flags:Ae},mr={type:16,number:50,flags:Ae},fA={type:16,number:100,flags:Ae},se=function(e,A,t){var r=e[0],B=e[1];return[b(r,A),b(typeof B<`u`?B:r,t)]},b=function(e,A){if(e.type===16)return e.number/100*A;if(ne(e))switch(e.unit){case`rem`:case`em`:return 16*e.number;default:return e.number}return e.number},Nt=`deg`,Xt=`grad`,_t=`rad`,Jt=`turn`,Se={name:`angle`,parse:function(e,A){if(A.type===15)switch(A.unit){case Nt:return Math.PI*A.number/180;case Xt:return Math.PI/200*A.number;case _t:return A.number;case Jt:return Math.PI*2*A.number}throw new Error(`Unsupported angle type`)}},Pt=function(e){return e.type===15&&(e.unit===Nt||e.unit===Xt||e.unit===_t||e.unit===Jt)},kt=function(e){switch(e.filter(L).map(function(t){return t.value}).join(` `)){case`to bottom right`:case`to right bottom`:case`left top`:case`top left`:return[V,V];case`to top`:case`bottom`:return $(0);case`to bottom left`:case`to left bottom`:case`right top`:case`top right`:return[V,fA];case`to right`:case`left`:return $(90);case`to top left`:case`to left top`:case`right bottom`:case`bottom right`:return[fA,fA];case`to bottom`:case`top`:return $(180);case`to top right`:case`to right top`:case`left bottom`:case`bottom left`:return[fA,V];case`to left`:case`right`:return $(270)}return 0},$=function(e){return Math.PI*e/180},UA={name:`color`,parse:function(e,A){if(A.type===18){var t=$s[A.name];if(typeof t>`u`)throw new Error(`Attempting to parse an unsupported color function "`+A.name+`"`);return t(e,A.values)}if(A.type===5){if(A.value.length===3){var r=A.value.substring(0,1),B=A.value.substring(1,2),n=A.value.substring(2,3);return hA(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),1)}if(A.value.length===4){var r=A.value.substring(0,1),B=A.value.substring(1,2),n=A.value.substring(2,3),s=A.value.substring(3,4);return hA(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),parseInt(s+s,16)/255)}if(A.value.length===6){var r=A.value.substring(0,2),B=A.value.substring(2,4),n=A.value.substring(4,6);return hA(parseInt(r,16),parseInt(B,16),parseInt(n,16),1)}if(A.value.length===8){var r=A.value.substring(0,2),B=A.value.substring(2,4),n=A.value.substring(4,6),s=A.value.substring(6,8);return hA(parseInt(r,16),parseInt(B,16),parseInt(n,16),parseInt(s,16)/255)}}if(A.type===20){var i=QA[A.value.toUpperCase()];if(typeof i<`u`)return i}return QA.TRANSPARENT}},FA=function(e){return(255&e)===0},R=function(e){var A=255&e,t=255&e>>8,r=255&e>>16,B=255&e>>24;return A<255?`rgba(`+B+`,`+r+`,`+t+`,`+A/255+`)`:`rgb(`+B+`,`+r+`,`+t+`)`},hA=function(e,A,t,r){return(e<<24|A<<16|t<<8|Math.round(r*255)<<0)>>>0},Yt=function(e,A){if(e.type===17)return e.number;if(e.type===16){var t=A===3?1:255;return A===3?e.number/100*t:Math.round(e.number/100*t)}return 0},Wt=function(e,A){var t=A.filter(RA);if(t.length===3){var r=t.map(Yt),B=r[0],n=r[1],s=r[2];return hA(B,n,s,1)}if(t.length===4){var i=t.map(Yt),B=i[0],n=i[1],s=i[2],a=i[3];return hA(B,n,s,a)}return 0};function Lr(e,A,t){return t<0&&(t+=1),t>=1&&(t-=1),t<1/6?(A-e)*t*6+e:t<1/2?A:t<2/3?(A-e)*6*(2/3-t)+e:e}var Zt=function(e,A){var t=A.filter(RA),r=t[0],B=t[1],n=t[2],s=t[3],i=(r.type===17?$(r.number):Se.parse(e,r))/(Math.PI*2),a=O(B)?B.number/100:0,o=O(n)?n.number/100:0,Q=typeof s<`u`&&O(s)?b(s,1):1;if(a===0)return hA(o*255,o*255,o*255,1);var g=o<=.5?o*(a+1):o+a-o*a,w=o*2-g,f=Lr(w,g,i+1/3),c=Lr(w,g,i),C=Lr(w,g,i-1/3);return hA(f*255,c*255,C*255,Q)},$s={hsl:Zt,hsla:Zt,rgb:Wt,rgba:Wt},ae=function(e,A){return UA.parse(e,Gt.create(A).parseComponentValue())},QA={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199},Aa={name:`background-clip`,initialValue:`border-box`,prefix:!1,type:1,parse:function(e,A){return A.map(function(t){if(L(t))switch(t.value){case`padding-box`:return 1;case`content-box`:return 2}return 0})}},ea={name:`background-color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`},Oe=function(e,A){var t=UA.parse(e,A[0]),r=A[1];return r&&O(r)?{color:t,stop:r}:{color:t,stop:null}},qt=function(e,A){var t=e[0],r=e[e.length-1];t.stop===null&&(t.stop=V),r.stop===null&&(r.stop=fA);for(var B=[],n=0,s=0;sn?B.push(a):B.push(n),n=a}else B.push(null)}for(var o=null,s=0;ss.optimumDistance)?{optimumCorner:i,optimumDistance:Q}:s},{optimumDistance:B?Infinity:-Infinity,optimumCorner:null}).optimumCorner},Ba=function(e,A,t,r,B){var n=0,s=0;switch(e.size){case 0:e.shape===0?n=s=Math.min(Math.abs(A),Math.abs(A-r),Math.abs(t),Math.abs(t-B)):e.shape===1&&(n=Math.min(Math.abs(A),Math.abs(A-r)),s=Math.min(Math.abs(t),Math.abs(t-B)));break;case 2:if(e.shape===0)n=s=Math.min(tA(A,t),tA(A,t-B),tA(A-r,t),tA(A-r,t-B));else if(e.shape===1){var i=Math.min(Math.abs(t),Math.abs(t-B))/Math.min(Math.abs(A),Math.abs(A-r)),a=jt(r,B,A,t,!0),o=a[0],Q=a[1];n=tA(o-A,(Q-t)/i),s=i*n}break;case 1:e.shape===0?n=s=Math.max(Math.abs(A),Math.abs(A-r),Math.abs(t),Math.abs(t-B)):e.shape===1&&(n=Math.max(Math.abs(A),Math.abs(A-r)),s=Math.max(Math.abs(t),Math.abs(t-B)));break;case 3:if(e.shape===0)n=s=Math.max(tA(A,t),tA(A,t-B),tA(A-r,t),tA(A-r,t-B));else if(e.shape===1){var i=Math.max(Math.abs(t),Math.abs(t-B))/Math.max(Math.abs(A),Math.abs(A-r)),g=jt(r,B,A,t,!1),o=g[0],Q=g[1];n=tA(o-A,(Q-t)/i),s=i*n}break}return Array.isArray(e.size)&&(n=b(e.size[0],r),s=e.size.length===2?b(e.size[1],B):n),[n,s]},na=function(e,A){var t=$(180),r=[];return nA(A).forEach(function(B,n){if(n===0){var s=B[0];if(s.type===20&&s.value===`to`){t=kt(B);return}else if(Pt(s)){t=Se.parse(e,s);return}}var i=Oe(e,B);r.push(i)}),{angle:t,stops:r,type:1}},Me=function(e,A){var t=$(180),r=[];return nA(A).forEach(function(B,n){if(n===0){var s=B[0];if(s.type===20&&[`top`,`left`,`right`,`bottom`].indexOf(s.value)!==-1){t=kt(B);return}else if(Pt(s)){t=(Se.parse(e,s)+$(270))%$(360);return}}var i=Oe(e,B);r.push(i)}),{angle:t,stops:r,type:1}},sa=function(e,A){var t=$(180),r=[],B=1;return nA(A).forEach(function(a,o){var Q=a[0];if(o===0){if(L(Q)&&Q.value===`linear`){B=1;return}else if(L(Q)&&Q.value===`radial`){B=2;return}}if(Q.type===18){if(Q.name===`from`){var g=UA.parse(e,Q.values[0]);r.push({stop:V,color:g})}else if(Q.name===`to`){var g=UA.parse(e,Q.values[0]);r.push({stop:fA,color:g})}else if(Q.name===`color-stop`){var w=Q.values.filter(RA);if(w.length===2){var g=UA.parse(e,w[1]),f=w[0];GA(f)&&r.push({stop:{type:16,number:f.number*100,flags:f.flags},color:g})}}}}),B===1?{angle:(t+$(180))%$(360),stops:r,type:B}:{size:3,shape:0,stops:r,position:[],type:B}},zt=`closest-side`,$t=`farthest-side`,AB=`closest-corner`,eB=`farthest-corner`,rB=`circle`,tB=`ellipse`,BB=`cover`,nB=`contain`,aa=function(e,A){var t=0,r=3,B=[],n=[];return nA(A).forEach(function(s,i){var a=!0;if(i===0){var o=!1;a=s.reduce(function(g,w){if(o)if(L(w))switch(w.value){case`center`:return n.push(mr),g;case`top`:case`left`:return n.push(V),g;case`right`:case`bottom`:return n.push(fA),g}else(O(w)||lA(w))&&n.push(w);else if(L(w))switch(w.value){case rB:return t=0,!1;case tB:return t=1,!1;case`at`:return o=!0,!1;case zt:return r=0,!1;case BB:case $t:return r=1,!1;case nB:case AB:return r=2,!1;case eB:return r=3,!1}else if(lA(w)||O(w))return Array.isArray(r)||(r=[]),r.push(w),!1;return g},a)}if(a){var Q=Oe(e,s);B.push(Q)}}),{size:r,shape:t,stops:B,position:n,type:2}},Ge=function(e,A){var t=0,r=3,B=[],n=[];return nA(A).forEach(function(s,i){var a=!0;if(i===0?a=s.reduce(function(Q,g){if(L(g))switch(g.value){case`center`:return n.push(mr),!1;case`top`:case`left`:return n.push(V),!1;case`right`:case`bottom`:return n.push(fA),!1}else if(O(g)||lA(g))return n.push(g),!1;return Q},a):i===1&&(a=s.reduce(function(Q,g){if(L(g))switch(g.value){case rB:return t=0,!1;case tB:return t=1,!1;case nB:case zt:return r=0,!1;case $t:return r=1,!1;case AB:return r=2,!1;case BB:case eB:return r=3,!1}else if(lA(g)||O(g))return Array.isArray(r)||(r=[]),r.push(g),!1;return Q},a)),a){var o=Oe(e,s);B.push(o)}}),{size:r,shape:t,stops:B,position:n,type:2}},ia=function(e){return e.type===1},oa=function(e){return e.type===2},Dr={name:`image`,parse:function(e,A){if(A.type===22){var t={url:A.value,type:0};return e.cache.addImage(A.value),t}if(A.type===18){var r=sB[A.name];if(typeof r>`u`)throw new Error(`Attempting to parse an unsupported image function "`+A.name+`"`);return r(e,A.values)}throw new Error(`Unsupported image type `+A.type)}};function Qa(e){return!(e.type===20&&e.value===`none`)&&(e.type!==18||!!sB[e.name])}for(var sB={"linear-gradient":na,"-moz-linear-gradient":Me,"-ms-linear-gradient":Me,"-o-linear-gradient":Me,"-webkit-linear-gradient":Me,"radial-gradient":aa,"-moz-radial-gradient":Ge,"-ms-radial-gradient":Ge,"-o-radial-gradient":Ge,"-webkit-radial-gradient":Ge,"-webkit-gradient":sa},ga={name:`background-image`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){if(A.length===0)return[];var t=A[0];return t.type===20&&t.value===`none`?[]:A.filter(function(r){return RA(r)&&Qa(r)}).map(function(r){return Dr.parse(e,r)})}},wa={name:`background-origin`,initialValue:`border-box`,prefix:!1,type:1,parse:function(e,A){return A.map(function(t){if(L(t))switch(t.value){case`padding-box`:return 1;case`content-box`:return 2}return 0})}},ca={name:`background-position`,initialValue:`0% 0%`,type:1,prefix:!1,parse:function(e,A){return nA(A).map(function(t){return t.filter(O)}).map(Vt)}},Ca={name:`background-repeat`,initialValue:`repeat`,prefix:!1,type:1,parse:function(e,A){return nA(A).map(function(t){return t.filter(L).map(function(r){return r.value}).join(` `)}).map(ua)}},ua=function(e){switch(e){case`no-repeat`:return 1;case`repeat-x`:case`repeat no-repeat`:return 2;case`repeat-y`:case`no-repeat repeat`:return 3;default:return 0}},ie=(function(e){return e.AUTO=`auto`,e.CONTAIN=`contain`,e.COVER=`cover`,e})(ie||{}),la={name:`background-size`,initialValue:`0`,prefix:!1,type:1,parse:function(e,A){return nA(A).map(function(t){return t.filter(fa)})}},fa=function(e){return L(e)||O(e)},Re=function(e){return{name:`border-`+e+`-color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`}},Ua=Re(`top`),Fa=Re(`right`),ha=Re(`bottom`),da=Re(`left`),Ve=function(e){return{name:`border-radius-`+e,initialValue:`0 0`,prefix:!1,type:1,parse:function(A,t){return Vt(t.filter(O))}}},Ea=Ve(`top-left`),Ha=Ve(`top-right`),pa=Ve(`bottom-right`),Ia=Ve(`bottom-left`),Ne=function(e){return{name:`border-`+e+`-style`,initialValue:`solid`,prefix:!1,type:2,parse:function(A,t){switch(t){case`none`:return 0;case`dashed`:return 2;case`dotted`:return 3;case`double`:return 4}return 1}}},va=Ne(`top`),ya=Ne(`right`),Ka=Ne(`bottom`),ma=Ne(`left`),Xe=function(e){return{name:`border-`+e+`-width`,initialValue:`0`,type:0,prefix:!1,parse:function(A,t){return ne(t)?t.number:0}}},La=Xe(`top`),Da=Xe(`right`),ba=Xe(`bottom`),xa=Xe(`left`),Ta={name:`color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`},Sa={name:`direction`,initialValue:`ltr`,prefix:!1,type:2,parse:function(e,A){return A===`rtl`?1:0}},Oa={name:`display`,initialValue:`inline-block`,prefix:!1,type:1,parse:function(e,A){return A.filter(L).reduce(function(t,r){return t|Ma(r.value)},0)}},Ma=function(e){switch(e){case`block`:case`-webkit-box`:return 2;case`inline`:return 4;case`run-in`:return 8;case`flow`:return 16;case`flow-root`:return 32;case`table`:return 64;case`flex`:case`-webkit-flex`:return 128;case`grid`:case`-ms-grid`:return 256;case`ruby`:return 512;case`subgrid`:return 1024;case`list-item`:return 2048;case`table-row-group`:return 4096;case`table-header-group`:return 8192;case`table-footer-group`:return 16384;case`table-row`:return 32768;case`table-cell`:return 65536;case`table-column-group`:return 131072;case`table-column`:return 262144;case`table-caption`:return 524288;case`ruby-base`:return 1048576;case`ruby-text`:return 2097152;case`ruby-base-container`:return 4194304;case`ruby-text-container`:return 8388608;case`contents`:return 16777216;case`inline-block`:return 33554432;case`inline-list-item`:return 67108864;case`inline-table`:return 134217728;case`inline-flex`:return 268435456;case`inline-grid`:return 536870912}return 0},Ga={name:`float`,initialValue:`none`,prefix:!1,type:2,parse:function(e,A){switch(A){case`left`:return 1;case`right`:return 2;case`inline-start`:return 3;case`inline-end`:return 4}return 0}},Ra={name:`letter-spacing`,initialValue:`0`,prefix:!1,type:0,parse:function(e,A){return A.type===20&&A.value===`normal`?0:A.type===17||A.type===15?A.number:0}},br=(function(e){return e.NORMAL=`normal`,e.STRICT=`strict`,e})(br||{}),Va={name:`line-break`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){return A===`strict`?br.STRICT:br.NORMAL}},Na={name:`line-height`,initialValue:`normal`,prefix:!1,type:4},aB=function(e,A){return L(e)&&e.value===`normal`?1.2*A:e.type===17?A*e.number:O(e)?b(e,A):A},Xa={name:`list-style-image`,initialValue:`none`,type:0,prefix:!1,parse:function(e,A){return A.type===20&&A.value===`none`?null:Dr.parse(e,A)}},_a={name:`list-style-position`,initialValue:`outside`,prefix:!1,type:2,parse:function(e,A){return A===`inside`?0:1}},xr={name:`list-style-type`,initialValue:`none`,prefix:!1,type:2,parse:function(e,A){switch(A){case`disc`:return 0;case`circle`:return 1;case`square`:return 2;case`decimal`:return 3;case`cjk-decimal`:return 4;case`decimal-leading-zero`:return 5;case`lower-roman`:return 6;case`upper-roman`:return 7;case`lower-greek`:return 8;case`lower-alpha`:return 9;case`upper-alpha`:return 10;case`arabic-indic`:return 11;case`armenian`:return 12;case`bengali`:return 13;case`cambodian`:return 14;case`cjk-earthly-branch`:return 15;case`cjk-heavenly-stem`:return 16;case`cjk-ideographic`:return 17;case`devanagari`:return 18;case`ethiopic-numeric`:return 19;case`georgian`:return 20;case`gujarati`:return 21;case`gurmukhi`:return 22;case`hebrew`:return 22;case`hiragana`:return 23;case`hiragana-iroha`:return 24;case`japanese-formal`:return 25;case`japanese-informal`:return 26;case`kannada`:return 27;case`katakana`:return 28;case`katakana-iroha`:return 29;case`khmer`:return 30;case`korean-hangul-formal`:return 31;case`korean-hanja-formal`:return 32;case`korean-hanja-informal`:return 33;case`lao`:return 34;case`lower-armenian`:return 35;case`malayalam`:return 36;case`mongolian`:return 37;case`myanmar`:return 38;case`oriya`:return 39;case`persian`:return 40;case`simp-chinese-formal`:return 41;case`simp-chinese-informal`:return 42;case`tamil`:return 43;case`telugu`:return 44;case`thai`:return 45;case`tibetan`:return 46;case`trad-chinese-formal`:return 47;case`trad-chinese-informal`:return 48;case`upper-armenian`:return 49;case`disclosure-open`:return 50;case`disclosure-closed`:return 51;default:return-1}}},_e=function(e){return{name:`margin-`+e,initialValue:`0`,prefix:!1,type:4}},Ja=_e(`top`),Pa=_e(`right`),ka=_e(`bottom`),Ya=_e(`left`),Wa={name:`overflow`,initialValue:`visible`,prefix:!1,type:1,parse:function(e,A){return A.filter(L).map(function(t){switch(t.value){case`hidden`:return 1;case`scroll`:return 2;case`clip`:return 3;case`auto`:return 4;default:return 0}})}},Za={name:`overflow-wrap`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){return A===`break-word`?`break-word`:`normal`}},Je=function(e){return{name:`padding-`+e,initialValue:`0`,prefix:!1,type:3,format:`length-percentage`}},qa=Je(`top`),ja=Je(`right`),za=Je(`bottom`),$a=Je(`left`),Ai={name:`text-align`,initialValue:`left`,prefix:!1,type:2,parse:function(e,A){switch(A){case`right`:return 2;case`center`:case`justify`:return 1;default:return 0}}},ei={name:`position`,initialValue:`static`,prefix:!1,type:2,parse:function(e,A){switch(A){case`relative`:return 1;case`absolute`:return 2;case`fixed`:return 3;case`sticky`:return 4}return 0}},ri={name:`text-shadow`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){return A.length===1&&Kr(A[0],`none`)?[]:nA(A).map(function(t){for(var r={color:QA.TRANSPARENT,offsetX:V,offsetY:V,blur:V},B=0,n=0;n`u`)throw new Error(`Attempting to parse an unsupported transform function "`+A.name+`"`);return t(A.values)}return null}},ni=function(e){var A=e.filter(function(t){return t.type===17}).map(function(t){return t.number});return A.length===6?A:null},si=function(e){var A=e.filter(function(a){return a.type===17}).map(function(a){return a.number}),t=A[0],r=A[1];A[2],A[3];var B=A[4],n=A[5];A[6],A[7],A[8],A[9],A[10],A[11];var s=A[12],i=A[13];return A[14],A[15],A.length===16?[t,r,B,n,s,i]:null},ai={matrix:ni,matrix3d:si},iB={type:16,number:50,flags:Ae},ii=[iB,iB],oi={name:`transform-origin`,initialValue:`50% 50%`,prefix:!0,type:1,parse:function(e,A){var t=A.filter(O);return t.length!==2?ii:[t[0],t[1]]}},Qi={name:`visible`,initialValue:`none`,prefix:!1,type:2,parse:function(e,A){switch(A){case`hidden`:return 1;case`collapse`:return 2;default:return 0}}},Pe=(function(e){return e.NORMAL=`normal`,e.BREAK_ALL=`break-all`,e.KEEP_ALL=`keep-all`,e})(Pe||{}),gi={name:`word-break`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){switch(A){case`break-all`:return Pe.BREAK_ALL;case`keep-all`:return Pe.KEEP_ALL;default:return Pe.NORMAL}}},wi={name:`z-index`,initialValue:`auto`,prefix:!1,type:0,parse:function(e,A){if(A.type===20)return{auto:!0,order:0};if(GA(A))return{auto:!1,order:A.number};throw new Error(`Invalid z-index number parsed`)}},oB={name:`time`,parse:function(e,A){if(A.type===15)switch(A.unit.toLowerCase()){case`s`:return 1e3*A.number;case`ms`:return A.number}throw new Error(`Unsupported time type`)}},ci={name:`opacity`,initialValue:`1`,type:0,prefix:!1,parse:function(e,A){return GA(A)?A.number:1}},Ci={name:`text-decoration-color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`},ui={name:`text-decoration-line`,initialValue:`none`,prefix:!1,type:1,parse:function(e,A){return A.filter(L).map(function(t){switch(t.value){case`underline`:return 1;case`overline`:return 2;case`line-through`:return 3;case`none`:return 4}return 0}).filter(function(t){return t!==0})}},li={name:`font-family`,initialValue:``,prefix:!1,type:1,parse:function(e,A){var t=[],r=[];return A.forEach(function(B){switch(B.type){case 20:case 0:t.push(B.value);break;case 17:t.push(B.number.toString());break;case 4:r.push(t.join(` `)),t.length=0;break}}),t.length&&r.push(t.join(` `)),r.map(function(B){return B.indexOf(` `)===-1?B:`'`+B+`'`})}},fi={name:`font-size`,initialValue:`0`,prefix:!1,type:3,format:`length`},Ui={name:`font-weight`,initialValue:`normal`,type:0,prefix:!1,parse:function(e,A){return GA(A)?A.number:L(A)&&A.value===`bold`?700:400}},Fi={name:`font-variant`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){return A.filter(L).map(function(t){return t.value})}},hi={name:`font-style`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){switch(A){case`oblique`:return`oblique`;case`italic`:return`italic`;default:return`normal`}}},G=function(e,A){return(e&A)!==0},di={name:`content`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){if(A.length===0)return[];var t=A[0];return t.type===20&&t.value===`none`?[]:A}},Ei={name:`counter-increment`,initialValue:`none`,prefix:!0,type:1,parse:function(e,A){if(A.length===0)return null;var t=A[0];if(t.type===20&&t.value===`none`)return null;for(var r=[],B=A.filter(Rt),n=0;n1?1:0],this.overflowWrap=U(A,Za,t.overflowWrap),this.paddingTop=U(A,qa,t.paddingTop),this.paddingRight=U(A,ja,t.paddingRight),this.paddingBottom=U(A,za,t.paddingBottom),this.paddingLeft=U(A,$a,t.paddingLeft),this.paintOrder=U(A,yi,t.paintOrder),this.position=U(A,ei,t.position),this.textAlign=U(A,Ai,t.textAlign),this.textDecorationColor=U(A,Ci,(r=t.textDecorationColor)!==null&&r!==void 0?r:t.color),this.textDecorationLine=U(A,ui,(B=t.textDecorationLine)!==null&&B!==void 0?B:t.textDecoration),this.textShadow=U(A,ri,t.textShadow),this.textTransform=U(A,ti,t.textTransform),this.transform=U(A,Bi,t.transform),this.transformOrigin=U(A,oi,t.transformOrigin),this.visibility=U(A,Qi,t.visibility),this.webkitTextStrokeColor=U(A,Ki,t.webkitTextStrokeColor),this.webkitTextStrokeWidth=U(A,mi,t.webkitTextStrokeWidth),this.wordBreak=U(A,gi,t.wordBreak),this.zIndex=U(A,wi,t.zIndex)}return e.prototype.isVisible=function(){return this.display>0&&this.opacity>0&&this.visibility===0},e.prototype.isTransparent=function(){return FA(this.backgroundColor)},e.prototype.isTransformed=function(){return this.transform!==null},e.prototype.isPositioned=function(){return this.position!==0},e.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},e.prototype.isFloating=function(){return this.float!==0},e.prototype.isInlineLevel=function(){return G(this.display,4)||G(this.display,33554432)||G(this.display,268435456)||G(this.display,536870912)||G(this.display,67108864)||G(this.display,134217728)},e})(),Di=(function(){function e(A,t){this.content=U(A,di,t.content),this.quotes=U(A,Ii,t.quotes)}return e})(),gB=(function(){function e(A,t){this.counterIncrement=U(A,Ei,t.counterIncrement),this.counterReset=U(A,Hi,t.counterReset)}return e})(),U=function(e,A,t){var r=new Mt,B=t!==null&&typeof t<`u`?t.toString():A.initialValue;r.write(B);var n=new Gt(r.read());switch(A.type){case 2:var s=n.parseComponentValue();return A.parse(e,L(s)?s.value:A.initialValue);case 0:return A.parse(e,n.parseComponentValue());case 1:return A.parse(e,n.parseComponentValues());case 4:return n.parseComponentValue();case 3:switch(A.format){case`angle`:return Se.parse(e,n.parseComponentValue());case`color`:return UA.parse(e,n.parseComponentValue());case`image`:return Dr.parse(e,n.parseComponentValue());case`length`:var i=n.parseComponentValue();return lA(i)?i:V;case`length-percentage`:var a=n.parseComponentValue();return O(a)?a:V;case`time`:return oB.parse(e,n.parseComponentValue())}break}},bi=`data-html2canvas-debug`,xi=function(e){switch(e.getAttribute(bi)){case`all`:return 1;case`clone`:return 2;case`parse`:return 3;case`render`:return 4;default:return 0}},Tr=function(e,A){var t=xi(e);return t===1||A===t},sA=(function(){function e(A,t){if(this.context=A,this.textNodes=[],this.elements=[],this.flags=0,Tr(t,3))debugger;this.styles=new Li(A,window.getComputedStyle(t,null)),Wr(t)&&(this.styles.animationDuration.some(function(r){return r>0})&&(t.style.animationDuration=`0s`),this.styles.transform!==null&&(t.style.transform=`none`)),this.bounds=ue(this.context,t),Tr(t,4)&&(this.flags|=16)}return e})(),Ti=`AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=`,wB=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,oe=typeof Uint8Array>`u`?[]:new Uint8Array(256),ke=0;ke>4,Q[B++]=(s&15)<<4|i>>2,Q[B++]=(i&3)<<6|a&63;return o},Oi=function(e){for(var A=e.length,t=[],r=0;r>mA,Mr=(1<>mA)+32,Pi=65536>>Sr,Yi=(1<=0){if(A<55296||A>56319&&A<=65535)return t=this.index[A>>mA],t=(t<>mA)],t=(t<>Sr),t=this.index[t],t+=A>>mA&Yi,t=this.index[t],t=(t<`u`?[]:new Uint8Array(256),Ye=0;Ye=55296&&B<=56319&&t>10)+55296,s%1024+56320)),(B+1===t||r.length>16384)&&(n+=String.fromCharCode.apply(String,r),r.length=0)}return n},ro=Zi(Ti),AA=`×`,_r=`÷`,to=function(e){return ro.get(e)},Bo=function(e,A,t){var r=t-2,B=A[r],n=A[t-1],s=A[t];if(n===Gr&&s===Rr)return AA;if(n===Gr||n===Rr||n===lB||s===Gr||s===Rr||s===lB)return _r;if(n===UB&&[UB,Vr,FB,hB].indexOf(s)!==-1||(n===FB||n===Vr)&&(s===Vr||s===Nr)||(n===hB||n===Nr)&&s===Nr||s===dB||s===fB||s===$i||n===zi)return AA;if(n===dB&&s===EB){for(;B===fB;)B=A[--r];if(B===EB)return AA}if(n===Xr&&s===Xr){for(var i=0;B===Xr;)i++,B=A[--r];if(i%2===0)return AA}return _r},no=function(e){var A=Ao(e),t=A.length,r=0,B=0,n=A.map(to);return{next:function(){if(r>=t)return{done:!0,value:null};for(var s=AA;rs.x||Q.y>s.y;return s=Q,o===0?!0:g});return e.body.removeChild(A),i},oo=function(){return typeof new Image().crossOrigin<`u`},Qo=function(){return typeof new XMLHttpRequest().responseType==`string`},go=function(e){var A=new Image,t=e.createElement(`canvas`),r=t.getContext(`2d`);if(!r)return!1;A.src=`data:image/svg+xml,`;try{r.drawImage(A,0,0),t.toDataURL()}catch{return!1}return!0},HB=function(e){return e[0]===0&&e[1]===255&&e[2]===0&&e[3]===255},wo=function(e){var A=e.createElement(`canvas`),t=100;A.width=t,A.height=t;var r=A.getContext(`2d`);if(!r)return Promise.reject(!1);r.fillStyle=`rgb(0, 255, 0)`,r.fillRect(0,0,t,t);var B=new Image,n=A.toDataURL();B.src=n;var s=Jr(t,t,0,0,B);return r.fillStyle=`red`,r.fillRect(0,0,t,t),pB(s).then(function(i){r.drawImage(i,0,0);var a=r.getImageData(0,0,t,t).data;r.fillStyle=`red`,r.fillRect(0,0,t,t);var o=e.createElement(`div`);return o.style.backgroundImage=`url(`+n+`)`,o.style.height=t+`px`,HB(a)?pB(Jr(t,t,0,0,o)):Promise.reject(!1)}).then(function(i){return r.drawImage(i,0,0),HB(r.getImageData(0,0,t,t).data)}).catch(function(){return!1})},Jr=function(e,A,t,r,B){var n=`http://www.w3.org/2000/svg`,s=document.createElementNS(n,`svg`),i=document.createElementNS(n,`foreignObject`);return s.setAttributeNS(null,`width`,e.toString()),s.setAttributeNS(null,`height`,A.toString()),i.setAttributeNS(null,`width`,`100%`),i.setAttributeNS(null,`height`,`100%`),i.setAttributeNS(null,`x`,t.toString()),i.setAttributeNS(null,`y`,r.toString()),i.setAttributeNS(null,`externalResourcesRequired`,`true`),s.appendChild(i),i.appendChild(B),s},pB=function(e){return new Promise(function(A,t){var r=new Image;r.onload=function(){return A(r)},r.onerror=t,r.src=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(new XMLSerializer().serializeToString(e))})},N={get SUPPORT_RANGE_BOUNDS(){var e=ao(document);return Object.defineProperty(N,"SUPPORT_RANGE_BOUNDS",{value:e}),e},get SUPPORT_WORD_BREAKING(){var e=N.SUPPORT_RANGE_BOUNDS&&io(document);return Object.defineProperty(N,"SUPPORT_WORD_BREAKING",{value:e}),e},get SUPPORT_SVG_DRAWING(){var e=go(document);return Object.defineProperty(N,"SUPPORT_SVG_DRAWING",{value:e}),e},get SUPPORT_FOREIGNOBJECT_DRAWING(){var e=typeof Array.from==`function`&&typeof window.fetch==`function`?wo(document):Promise.resolve(!1);return Object.defineProperty(N,"SUPPORT_FOREIGNOBJECT_DRAWING",{value:e}),e},get SUPPORT_CORS_IMAGES(){var e=oo();return Object.defineProperty(N,"SUPPORT_CORS_IMAGES",{value:e}),e},get SUPPORT_RESPONSE_TYPE(){var e=Qo();return Object.defineProperty(N,"SUPPORT_RESPONSE_TYPE",{value:e}),e},get SUPPORT_CORS_XHR(){var e=`withCredentials`in new XMLHttpRequest;return Object.defineProperty(N,"SUPPORT_CORS_XHR",{value:e}),e},get SUPPORT_NATIVE_TEXT_SEGMENTATION(){var e=!!(typeof Intl<`u`&&Intl.Segmenter);return Object.defineProperty(N,"SUPPORT_NATIVE_TEXT_SEGMENTATION",{value:e}),e}},Qe=(function(){function e(A,t){this.text=A,this.bounds=t}return e})(),co=function(e,A,t,r){var B=lo(A,t),n=[],s=0;return B.forEach(function(i){if(t.textDecorationLine.length||i.trim().length>0)if(N.SUPPORT_RANGE_BOUNDS){var a=IB(r,s,i.length).getClientRects();if(a.length>1){var o=Pr(i),Q=0;o.forEach(function(w){n.push(new Qe(w,iA.fromDOMRectList(e,IB(r,Q+s,w.length).getClientRects()))),Q+=w.length})}else n.push(new Qe(i,iA.fromDOMRectList(e,a)))}else{var g=r.splitText(i.length);n.push(new Qe(i,Co(e,r))),r=g}else N.SUPPORT_RANGE_BOUNDS||(r=r.splitText(i.length));s+=i.length}),n},Co=function(e,A){var t=A.ownerDocument;if(t){var r=t.createElement(`html2canvaswrapper`);r.appendChild(A.cloneNode(!0));var B=A.parentNode;if(B){B.replaceChild(r,A);var n=ue(e,r);return r.firstChild&&B.replaceChild(r.firstChild,r),n}}return iA.EMPTY},IB=function(e,A,t){var r=e.ownerDocument;if(!r)throw new Error(`Node has no owner document`);var B=r.createRange();return B.setStart(e,A),B.setEnd(e,A+t),B},Pr=function(e){if(N.SUPPORT_NATIVE_TEXT_SEGMENTATION){var A=new Intl.Segmenter(void 0,{granularity:`grapheme`});return Array.from(A.segment(e)).map(function(t){return t.segment})}return so(e)},uo=function(e,A){if(N.SUPPORT_NATIVE_TEXT_SEGMENTATION){var t=new Intl.Segmenter(void 0,{granularity:`word`});return Array.from(t.segment(e)).map(function(r){return r.segment})}return Uo(e,A)},lo=function(e,A){return A.letterSpacing!==0?Pr(e):uo(e,A)},fo=[32,160,4961,65792,65793,4153,4241],Uo=function(e,A){for(var t=Pn(e,{lineBreak:A.lineBreak,wordBreak:A.overflowWrap===`break-word`?`break-word`:A.wordBreak}),r=[],B,n=function(){if(B.value){var i=le(B.value.slice()),a=``;i.forEach(function(o){fo.indexOf(o)===-1?a+=T(o):(a.length&&r.push(a),r.push(T(o)),a=``)}),a.length&&r.push(a)}};!(B=t.next()).done;)n();return r},Fo=(function(){function e(A,t,r){this.text=ho(t.data,r.textTransform),this.textBounds=co(A,this.text,r,t)}return e})(),ho=function(e,A){switch(A){case 1:return e.toLowerCase();case 3:return e.replace(Eo,Ho);case 2:return e.toUpperCase();default:return e}},Eo=/(^|\s|:|-|\(|\))([a-z])/g,Ho=function(e,A,t){return e.length>0?A+t.toUpperCase():e},vB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.src=r.currentSrc||r.src,B.intrinsicWidth=r.naturalWidth,B.intrinsicHeight=r.naturalHeight,B.context.cache.addImage(B.src),B}return A})(sA),yB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.canvas=r,B.intrinsicWidth=r.width,B.intrinsicHeight=r.height,B}return A})(sA),KB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this,n=new XMLSerializer,s=ue(t,r);return r.setAttribute(`width`,s.width+`px`),r.setAttribute(`height`,s.height+`px`),B.svg=`data:image/svg+xml,`+encodeURIComponent(n.serializeToString(r)),B.intrinsicWidth=r.width.baseVal.value,B.intrinsicHeight=r.height.baseVal.value,B.context.cache.addImage(B.svg),B}return A})(sA),mB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.value=r.value,B}return A})(sA),kr=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.start=r.start,B.reversed=typeof r.reversed==`boolean`&&r.reversed===!0,B}return A})(sA),po=[{type:15,flags:0,unit:`px`,number:3}],Io=[{type:16,flags:0,number:50}],vo=function(e){return e.width>e.height?new iA(e.left+(e.width-e.height)/2,e.top,e.height,e.height):e.width0)t.textNodes.push(new Fo(e,B,t.styles));else if(VA(B))if(XB(B)&&B.assignedNodes)B.assignedNodes().forEach(function(i){return qe(e,i,t,r)});else{var s=TB(e,B);s.styles.isVisible()&&(Lo(B,s,r)?s.flags|=4:Do(s.styles)&&(s.flags|=2),mo.indexOf(B.tagName)!==-1&&(s.flags|=8),t.elements.push(s),B.slot,B.shadowRoot?qe(e,B.shadowRoot,s,r):!ze(B)&&!MB(B)&&!$e(B)&&qe(e,B,s,r))}},TB=function(e,A){return qr(A)?new vB(e,A):GB(A)?new yB(e,A):MB(A)?new KB(e,A):bo(A)?new mB(e,A):xo(A)?new kr(e,A):To(A)?new Yr(e,A):$e(A)?new DB(e,A):ze(A)?new bB(e,A):VB(A)?new xB(e,A):new sA(e,A)},SB=function(e,A){var t=TB(e,A);return t.flags|=4,qe(e,A,t,t),t},Lo=function(e,A,t){return A.styles.isPositionedWithZIndex()||A.styles.opacity<1||A.styles.isTransformed()||Zr(e)&&t.styles.isTransparent()},Do=function(e){return e.isPositioned()||e.isFloating()},OB=function(e){return e.nodeType===Node.TEXT_NODE},VA=function(e){return e.nodeType===Node.ELEMENT_NODE},Wr=function(e){return VA(e)&&typeof e.style<`u`&&!je(e)},je=function(e){return typeof e.className==`object`},bo=function(e){return e.tagName===`LI`},xo=function(e){return e.tagName===`OL`},To=function(e){return e.tagName===`INPUT`},So=function(e){return e.tagName===`HTML`},MB=function(e){return e.tagName===`svg`},Zr=function(e){return e.tagName===`BODY`},GB=function(e){return e.tagName===`CANVAS`},RB=function(e){return e.tagName===`VIDEO`},qr=function(e){return e.tagName===`IMG`},VB=function(e){return e.tagName===`IFRAME`},NB=function(e){return e.tagName===`STYLE`},Oo=function(e){return e.tagName===`SCRIPT`},ze=function(e){return e.tagName===`TEXTAREA`},$e=function(e){return e.tagName===`SELECT`},XB=function(e){return e.tagName===`SLOT`},_B=function(e){return e.tagName.indexOf(`-`)>0},Mo=(function(){function e(){this.counters={}}return e.prototype.getCounterValue=function(A){var t=this.counters[A];return t&&t.length?t[t.length-1]:1},e.prototype.getCounterValues=function(A){return this.counters[A]||[]},e.prototype.pop=function(A){var t=this;A.forEach(function(r){return t.counters[r].pop()})},e.prototype.parse=function(A){var t=this,r=A.counterIncrement,B=A.counterReset,n=!0;r!==null&&r.forEach(function(i){var a=t.counters[i.counter];a&&i.increment!==0&&(n=!1,a.length||a.push(1),a[Math.max(0,a.length-1)]+=i.increment)});var s=[];return n&&B.forEach(function(i){var a=t.counters[i.counter];s.push(i.counter),a||(a=t.counters[i.counter]=[]),a.push(i.reset)}),s},e})(),JB={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:[`M`,`CM`,`D`,`CD`,`C`,`XC`,`L`,`XL`,`X`,`IX`,`V`,`IV`,`I`]},PB={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[`Ք`,`Փ`,`Ւ`,`Ց`,`Ր`,`Տ`,`Վ`,`Ս`,`Ռ`,`Ջ`,`Պ`,`Չ`,`Ո`,`Շ`,`Ն`,`Յ`,`Մ`,`Ճ`,`Ղ`,`Ձ`,`Հ`,`Կ`,`Ծ`,`Խ`,`Լ`,`Ի`,`Ժ`,`Թ`,`Ը`,`Է`,`Զ`,`Ե`,`Դ`,`Գ`,`Բ`,`Ա`]},Go={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:[`י׳`,`ט׳`,`ח׳`,`ז׳`,`ו׳`,`ה׳`,`ד׳`,`ג׳`,`ב׳`,`א׳`,`ת`,`ש`,`ר`,`ק`,`צ`,`פ`,`ע`,`ס`,`נ`,`מ`,`ל`,`כ`,`יט`,`יח`,`יז`,`טז`,`טו`,`י`,`ט`,`ח`,`ז`,`ו`,`ה`,`ד`,`ג`,`ב`,`א`]},Ro={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[`ჵ`,`ჰ`,`ჯ`,`ჴ`,`ხ`,`ჭ`,`წ`,`ძ`,`ც`,`ჩ`,`შ`,`ყ`,`ღ`,`ქ`,`ფ`,`ჳ`,`ტ`,`ს`,`რ`,`ჟ`,`პ`,`ო`,`ჲ`,`ნ`,`მ`,`ლ`,`კ`,`ი`,`თ`,`ჱ`,`ზ`,`ვ`,`ე`,`დ`,`გ`,`ბ`,`ა`]},NA=function(e,A,t,r,B,n){return et?we(e,B,n.length>0):r.integers.reduce(function(s,i,a){for(;e>=i;)e-=i,s+=r.values[a];return s},``)+n},kB=function(e,A,t,r){var B=``;do t||e--,B=r(e)+B,e/=A;while(e*A>=A);return B},S=function(e,A,t,r,B){var n=t-A+1;return(e<0?`-`:``)+(kB(Math.abs(e),n,r,function(s){return T(Math.floor(s%n)+A)})+B)},LA=function(e,A,t){t===void 0&&(t=`. `);var r=A.length;return kB(Math.abs(e),r,!1,function(B){return A[Math.floor(B%r)]})+t},XA=1,dA=2,EA=4,ge=8,gA=function(e,A,t,r,B,n){if(e<-9999||e>9999)return we(e,4,B.length>0);var s=Math.abs(e),i=B;if(s===0)return A[0]+i;for(var a=0;s>0&&a<=4;a++){var o=s%10;o===0&&G(n,XA)&&i!==``?i=A[o]+i:o>1||o===1&&a===0||o===1&&a===1&&G(n,dA)||o===1&&a===1&&G(n,EA)&&e>100||o===1&&a>1&&G(n,ge)?i=A[o]+(a>0?t[a-1]:``)+i:o===1&&a>0&&(i=t[a-1]+i),s=Math.floor(s/10)}return(e<0?r:``)+i},YB=`十百千萬`,WB=`拾佰仟萬`,ZB=`マイナス`,jr=`마이너스`,we=function(e,A,t){var r=t?`. `:``,B=t?`、`:``,n=t?`, `:``,s=t?` `:``;switch(A){case 0:return`•`+s;case 1:return`◦`+s;case 2:return`◾`+s;case 5:var i=S(e,48,57,!0,r);return i.length<4?`0`+i:i;case 4:return LA(e,`〇一二三四五六七八九`,B);case 6:return NA(e,1,3999,JB,3,r).toLowerCase();case 7:return NA(e,1,3999,JB,3,r);case 8:return S(e,945,969,!1,r);case 9:return S(e,97,122,!1,r);case 10:return S(e,65,90,!1,r);case 11:return S(e,1632,1641,!0,r);case 12:case 49:return NA(e,1,9999,PB,3,r);case 35:return NA(e,1,9999,PB,3,r).toLowerCase();case 13:return S(e,2534,2543,!0,r);case 14:case 30:return S(e,6112,6121,!0,r);case 15:return LA(e,`子丑寅卯辰巳午未申酉戌亥`,B);case 16:return LA(e,`甲乙丙丁戊己庚辛壬癸`,B);case 17:case 48:return gA(e,`零一二三四五六七八九`,YB,`負`,B,dA|EA|ge);case 47:return gA(e,`零壹貳參肆伍陸柒捌玖`,WB,`負`,B,XA|dA|EA|ge);case 42:return gA(e,`零一二三四五六七八九`,YB,`负`,B,dA|EA|ge);case 41:return gA(e,`零壹贰叁肆伍陆柒捌玖`,WB,`负`,B,XA|dA|EA|ge);case 26:return gA(e,`〇一二三四五六七八九`,`十百千万`,ZB,B,0);case 25:return gA(e,`零壱弐参四伍六七八九`,`拾百千万`,ZB,B,XA|dA|EA);case 31:return gA(e,`영일이삼사오육칠팔구`,`십백천만`,jr,n,XA|dA|EA);case 33:return gA(e,`零一二三四五六七八九`,`十百千萬`,jr,n,0);case 32:return gA(e,`零壹貳參四五六七八九`,`拾百千`,jr,n,XA|dA|EA);case 18:return S(e,2406,2415,!0,r);case 20:return NA(e,1,19999,Ro,3,r);case 21:return S(e,2790,2799,!0,r);case 22:return S(e,2662,2671,!0,r);case 22:return NA(e,1,10999,Go,3,r);case 23:return LA(e,`あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん`);case 24:return LA(e,`いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす`);case 27:return S(e,3302,3311,!0,r);case 28:return LA(e,`アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン`,B);case 29:return LA(e,`イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス`,B);case 34:return S(e,3792,3801,!0,r);case 37:return S(e,6160,6169,!0,r);case 38:return S(e,4160,4169,!0,r);case 39:return S(e,2918,2927,!0,r);case 40:return S(e,1776,1785,!0,r);case 43:return S(e,3046,3055,!0,r);case 44:return S(e,3174,3183,!0,r);case 45:return S(e,3664,3673,!0,r);case 46:return S(e,3872,3881,!0,r);default:return S(e,48,57,!0,r)}},qB=`data-html2canvas-ignore`,jB=(function(){function e(A,t,r){if(this.context=A,this.options=r,this.scrolledElements=[],this.referenceElement=t,this.counters=new Mo,this.quoteDepth=0,!t.ownerDocument)throw new Error(`Cloned element does not have an owner document`);this.documentElement=this.cloneNode(t.ownerDocument.documentElement,!1)}return e.prototype.toIFrame=function(A,t){var r=this,B=Vo(A,t);if(!B.contentWindow)return Promise.reject(`Unable to find iframe window`);var n=A.defaultView.pageXOffset,s=A.defaultView.pageYOffset,i=B.contentWindow,a=i.document,o=_o(B).then(function(){return k(r,void 0,void 0,function(){var Q,g;return _(this,function(w){switch(w.label){case 0:return this.scrolledElements.forEach(Yo),i&&(i.scrollTo(t.left,t.top),/(iPad|iPhone|iPod)/g.test(navigator.userAgent)&&(i.scrollY!==t.top||i.scrollX!==t.left)&&(this.context.logger.warn(`Unable to restore scroll position for cloned document`),this.context.windowBounds=this.context.windowBounds.add(i.scrollX-t.left,i.scrollY-t.top,0,0))),Q=this.options.onclone,g=this.clonedReferenceElement,typeof g>`u`?[2,Promise.reject(`Error finding the `+this.referenceElement.nodeName+` in the cloned document`)]:a.fonts&&a.fonts.ready?[4,a.fonts.ready]:[3,2];case 1:w.sent(),w.label=2;case 2:return/(AppleWebKit)/g.test(navigator.userAgent)?[4,Xo(a)]:[3,4];case 3:w.sent(),w.label=4;case 4:return typeof Q==`function`?[2,Promise.resolve().then(function(){return Q(a,g)}).then(function(){return B})]:[2,B]}})})});return a.open(),a.write(Po(document.doctype)+``),ko(this.referenceElement.ownerDocument,n,s),a.replaceChild(a.adoptNode(this.documentElement),a.documentElement),a.close(),o},e.prototype.createElementClone=function(A){if(Tr(A,2))debugger;if(GB(A))return this.createCanvasClone(A);if(RB(A))return this.createVideoClone(A);if(NB(A))return this.createStyleClone(A);var t=A.cloneNode(!1);return qr(t)&&(qr(A)&&A.currentSrc&&A.currentSrc!==A.src&&(t.src=A.currentSrc,t.srcset=``),t.loading===`lazy`&&(t.loading=`eager`)),_B(t)?this.createCustomElementClone(t):t},e.prototype.createCustomElementClone=function(A){var t=document.createElement(`html2canvascustomelement`);return zr(A.style,t),t},e.prototype.createStyleClone=function(A){try{var t=A.sheet;if(t&&t.cssRules){var r=[].slice.call(t.cssRules,0).reduce(function(n,s){return s&&typeof s.cssText==`string`?n+s.cssText:n},``),B=A.cloneNode(!1);return B.textContent=r,B}}catch(n){if(this.context.logger.error(`Unable to access cssRules property`,n),n.name!==`SecurityError`)throw n}return A.cloneNode(!1)},e.prototype.createCanvasClone=function(A){var t;if(this.options.inlineImages&&A.ownerDocument){var r=A.ownerDocument.createElement(`img`);try{return r.src=A.toDataURL(),r}catch{this.context.logger.info(`Unable to inline canvas contents, canvas is tainted`,A)}}var B=A.cloneNode(!1);try{B.width=A.width,B.height=A.height;var n=A.getContext(`2d`),s=B.getContext(`2d`);if(s)if(!this.options.allowTaint&&n)s.putImageData(n.getImageData(0,0,A.width,A.height),0,0);else{var i=(t=A.getContext(`webgl2`))!==null&&t!==void 0?t:A.getContext(`webgl`);if(i)i.getContextAttributes()?.preserveDrawingBuffer===!1&&this.context.logger.warn(`Unable to clone WebGL context as it has preserveDrawingBuffer=false`,A);s.drawImage(A,0,0)}return B}catch{this.context.logger.info(`Unable to clone canvas as it is tainted`,A)}return B},e.prototype.createVideoClone=function(A){var t=A.ownerDocument.createElement(`canvas`);t.width=A.offsetWidth,t.height=A.offsetHeight;var r=t.getContext(`2d`);try{return r&&(r.drawImage(A,0,0,t.width,t.height),this.options.allowTaint||r.getImageData(0,0,t.width,t.height)),t}catch{this.context.logger.info(`Unable to clone video as it is tainted`,A)}var B=A.ownerDocument.createElement(`canvas`);return B.width=A.offsetWidth,B.height=A.offsetHeight,B},e.prototype.appendChildNode=function(A,t,r){(!VA(t)||!Oo(t)&&!t.hasAttribute(qB)&&(typeof this.options.ignoreElements!=`function`||!this.options.ignoreElements(t)))&&(!this.options.copyStyles||!VA(t)||!NB(t))&&A.appendChild(this.cloneNode(t,r))},e.prototype.cloneChildNodes=function(A,t,r){for(var B=this,n=A.shadowRoot?A.shadowRoot.firstChild:A.firstChild;n;n=n.nextSibling)if(VA(n)&&XB(n)&&typeof n.assignedNodes==`function`){var s=n.assignedNodes();s.length&&s.forEach(function(i){return B.appendChildNode(t,i,r)})}else this.appendChildNode(t,n,r)},e.prototype.cloneNode=function(A,t){if(OB(A))return document.createTextNode(A.data);if(!A.ownerDocument)return A.cloneNode(!1);var r=A.ownerDocument.defaultView;if(r&&VA(A)&&(Wr(A)||je(A))){var B=this.createElementClone(A);B.style.transitionProperty=`none`;var n=r.getComputedStyle(A),s=r.getComputedStyle(A,`:before`),i=r.getComputedStyle(A,`:after`);this.referenceElement===A&&Wr(B)&&(this.clonedReferenceElement=B),Zr(B)&&qo(B);var a=this.counters.parse(new gB(this.context,n)),o=this.resolvePseudoContent(A,B,s,Ar.BEFORE);_B(A)&&(t=!0),RB(A)||this.cloneChildNodes(A,B,t),o&&B.insertBefore(o,B.firstChild);var Q=this.resolvePseudoContent(A,B,i,Ar.AFTER);return Q&&B.appendChild(Q),this.counters.pop(a),(n&&(this.options.copyStyles||je(A))&&!VB(A)||t)&&zr(n,B),(A.scrollTop!==0||A.scrollLeft!==0)&&this.scrolledElements.push([B,A.scrollLeft,A.scrollTop]),(ze(A)||$e(A))&&(ze(B)||$e(B))&&(B.value=A.value),B}return A.cloneNode(!1)},e.prototype.resolvePseudoContent=function(A,t,r,B){var n=this;if(r){var s=r.content,i=t.ownerDocument;if(!(!i||!s||s===`none`||s===`-moz-alt-content`||r.display===`none`)){this.counters.parse(new gB(this.context,r));var a=new Di(this.context,r),o=i.createElement(`html2canvaspseudoelement`);zr(r,o),a.content.forEach(function(g){if(g.type===0)o.appendChild(i.createTextNode(g.value));else if(g.type===22){var w=i.createElement(`img`);w.src=g.value,w.style.opacity=`1`,o.appendChild(w)}else if(g.type===18){if(g.name===`attr`){var f=g.values.filter(L);f.length&&o.appendChild(i.createTextNode(A.getAttribute(f[0].value)||``))}else if(g.name===`counter`){var c=g.values.filter(RA),C=c[0],H=c[1];if(C&&L(C)){var h=n.counters.getCounterValue(C.value),F=H&&L(H)?xr.parse(n.context,H.value):3;o.appendChild(i.createTextNode(we(h,F,!1)))}}else if(g.name===`counters`){var K=g.values.filter(RA),C=K[0],p=K[1],H=K[2];if(C&&L(C)){var d=n.counters.getCounterValues(C.value),l=H&&L(H)?xr.parse(n.context,H.value):3,v=p&&p.type===0?p.value:``,y=d.map(function(W){return we(W,l,!1)}).join(v);o.appendChild(i.createTextNode(y))}}}else if(g.type===20)switch(g.value){case`open-quote`:o.appendChild(i.createTextNode(QB(a.quotes,n.quoteDepth++,!0)));break;case`close-quote`:o.appendChild(i.createTextNode(QB(a.quotes,--n.quoteDepth,!1)));break;default:o.appendChild(i.createTextNode(g.value))}}),o.className=$r+` `+At;var Q=B===Ar.BEFORE?` `+$r:` `+At;return je(t)?t.className.baseValue+=Q:t.className+=Q,o}}},e.destroy=function(A){return A.parentNode?(A.parentNode.removeChild(A),!0):!1},e})(),Ar=(function(e){return e[e.BEFORE=0]=`BEFORE`,e[e.AFTER=1]=`AFTER`,e})(Ar||{}),Vo=function(e,A){var t=e.createElement(`iframe`);return t.className=`html2canvas-container`,t.style.visibility=`hidden`,t.style.position=`fixed`,t.style.left=`-10000px`,t.style.top=`0px`,t.style.border=`0`,t.width=A.width.toString(),t.height=A.height.toString(),t.scrolling=`no`,t.setAttribute(qB,`true`),e.body.appendChild(t),t},No=function(e){return new Promise(function(A){if(e.complete){A();return}if(!e.src){A();return}e.onload=A,e.onerror=A})},Xo=function(e){return Promise.all([].slice.call(e.images,0).map(No))},_o=function(e){return new Promise(function(A,t){var r=e.contentWindow;if(!r)return t(`No window assigned for iframe`);var B=r.document;r.onload=e.onload=function(){r.onload=e.onload=null;var n=setInterval(function(){B.body.childNodes.length>0&&B.readyState===`complete`&&(clearInterval(n),A(e))},50)}})},Jo=[`all`,`d`,`content`],zr=function(e,A){for(var t=e.length-1;t>=0;t--){var r=e.item(t);Jo.indexOf(r)===-1&&A.style.setProperty(r,e.getPropertyValue(r))}return A},Po=function(e){var A=``;return e&&(A+=``),A},ko=function(e,A,t){e&&e.defaultView&&(A!==e.defaultView.pageXOffset||t!==e.defaultView.pageYOffset)&&e.defaultView.scrollTo(A,t)},Yo=function(e){var A=e[0],t=e[1],r=e[2];A.scrollLeft=t,A.scrollTop=r},Wo=`:before`,Zo=`:after`,$r=`___html2canvas___pseudoelement_before`,At=`___html2canvas___pseudoelement_after`,zB=`{ + content: "" !important; + display: none !important; +}`,qo=function(e){jo(e,`.`+$r+Wo+zB+` + .`+At+Zo+zB)},jo=function(e,A){var t=e.ownerDocument;if(t){var r=t.createElement(`style`);r.textContent=A,e.appendChild(r)}},$B=(function(){function e(){}return e.getOrigin=function(A){var t=e._link;return t?(t.href=A,t.href=t.href,t.protocol+t.hostname+t.port):`about:blank`},e.isSameOrigin=function(A){return e.getOrigin(A)===e._origin},e.setContext=function(A){e._link=A.document.createElement(`a`),e._origin=e.getOrigin(A.location.href)},e._origin=`about:blank`,e})(),zo=(function(){function e(A,t){this.context=A,this._options=t,this._cache={}}return e.prototype.addImage=function(A){var t=Promise.resolve();return this.has(A)||(rt(A)||rQ(A))&&(this._cache[A]=this.loadImage(A)).catch(function(){}),t},e.prototype.match=function(A){return this._cache[A]},e.prototype.loadImage=function(A){return k(this,void 0,void 0,function(){var t,r,B,n,s=this;return _(this,function(i){switch(i.label){case 0:return t=$B.isSameOrigin(A),r=!et(A)&&this._options.useCORS===!0&&N.SUPPORT_CORS_IMAGES&&!t,B=!et(A)&&!t&&!rt(A)&&typeof this._options.proxy==`string`&&N.SUPPORT_CORS_XHR&&!r,!t&&this._options.allowTaint===!1&&!et(A)&&!rt(A)&&!B&&!r?[2]:(n=A,B?[4,this.proxy(n)]:[3,2]);case 1:n=i.sent(),i.label=2;case 2:return this.context.logger.debug(`Added image `+A.substring(0,256)),[4,new Promise(function(a,o){var Q=new Image;Q.onload=function(){return a(Q)},Q.onerror=o,(tQ(n)||r)&&(Q.crossOrigin=`anonymous`),Q.src=n,Q.complete===!0&&setTimeout(function(){return a(Q)},500),s._options.imageTimeout>0&&setTimeout(function(){return o(`Timed out (`+s._options.imageTimeout+`ms) loading image`)},s._options.imageTimeout)})];case 3:return[2,i.sent()]}})})},e.prototype.has=function(A){return typeof this._cache[A]<`u`},e.prototype.keys=function(){return Promise.resolve(Object.keys(this._cache))},e.prototype.proxy=function(A){var t=this,r=this._options.proxy;if(!r)throw new Error(`No proxy defined`);var B=A.substring(0,256);return new Promise(function(n,s){var i=N.SUPPORT_RESPONSE_TYPE?`blob`:`text`,a=new XMLHttpRequest;a.onload=function(){if(a.status===200)if(i===`text`)n(a.response);else{var g=new FileReader;g.addEventListener(`load`,function(){return n(g.result)},!1),g.addEventListener(`error`,function(w){return s(w)},!1),g.readAsDataURL(a.response)}else s(`Failed to proxy resource `+B+` with status code `+a.status)},a.onerror=s;var o=r.indexOf(`?`)>-1?`&`:`?`;if(a.open(`GET`,``+r+o+`url=`+encodeURIComponent(A)+`&responseType=`+i),i!==`text`&&a instanceof XMLHttpRequest&&(a.responseType=i),t._options.imageTimeout){var Q=t._options.imageTimeout;a.timeout=Q,a.ontimeout=function(){return s(`Timed out (`+Q+`ms) proxying `+B)}}a.send()})},e})(),$o=/^data:image\/svg\+xml/i,AQ=/^data:image\/.*;base64,/i,eQ=/^data:image\/.*/i,rQ=function(e){return N.SUPPORT_SVG_DRAWING||!BQ(e)},et=function(e){return eQ.test(e)},tQ=function(e){return AQ.test(e)},rt=function(e){return e.substr(0,4)===`blob`},BQ=function(e){return e.substr(-3).toLowerCase()===`svg`||$o.test(e)},u=(function(){function e(A,t){this.type=0,this.x=A,this.y=t}return e.prototype.add=function(A,t){return new e(this.x+A,this.y+t)},e})(),_A=function(e,A,t){return new u(e.x+(A.x-e.x)*t,e.y+(A.y-e.y)*t)},er=(function(){function e(A,t,r,B){this.type=1,this.start=A,this.startControl=t,this.endControl=r,this.end=B}return e.prototype.subdivide=function(A,t){var r=_A(this.start,this.startControl,A),B=_A(this.startControl,this.endControl,A),n=_A(this.endControl,this.end,A),s=_A(r,B,A),i=_A(B,n,A),a=_A(s,i,A);return t?new e(this.start,r,s,a):new e(a,i,n,this.end)},e.prototype.add=function(A,t){return new e(this.start.add(A,t),this.startControl.add(A,t),this.endControl.add(A,t),this.end.add(A,t))},e.prototype.reverse=function(){return new e(this.end,this.endControl,this.startControl,this.start)},e})(),eA=function(e){return e.type===1},nQ=(function(){function e(A){var t=A.styles,r=A.bounds,B=se(t.borderTopLeftRadius,r.width,r.height),n=B[0],s=B[1],i=se(t.borderTopRightRadius,r.width,r.height),a=i[0],o=i[1],Q=se(t.borderBottomRightRadius,r.width,r.height),g=Q[0],w=Q[1],f=se(t.borderBottomLeftRadius,r.width,r.height),c=f[0],C=f[1],H=[];H.push((n+a)/r.width),H.push((c+g)/r.width),H.push((s+C)/r.height),H.push((o+w)/r.height);var h=Math.max.apply(Math,H);h>1&&(n/=h,s/=h,a/=h,o/=h,g/=h,w/=h,c/=h,C/=h);var F=r.width-a,K=r.height-w,p=r.width-g,d=r.height-C,l=t.borderTopWidth,v=t.borderRightWidth,y=t.borderBottomWidth,E=t.borderLeftWidth,M=b(t.paddingTop,A.bounds.width),W=b(t.paddingRight,A.bounds.width),z=b(t.paddingBottom,A.bounds.width),D=b(t.paddingLeft,A.bounds.width);this.topLeftBorderDoubleOuterBox=n>0||s>0?x(r.left+E/3,r.top+l/3,n-E/3,s-l/3,m.TOP_LEFT):new u(r.left+E/3,r.top+l/3),this.topRightBorderDoubleOuterBox=n>0||s>0?x(r.left+F,r.top+l/3,a-v/3,o-l/3,m.TOP_RIGHT):new u(r.left+r.width-v/3,r.top+l/3),this.bottomRightBorderDoubleOuterBox=g>0||w>0?x(r.left+p,r.top+K,g-v/3,w-y/3,m.BOTTOM_RIGHT):new u(r.left+r.width-v/3,r.top+r.height-y/3),this.bottomLeftBorderDoubleOuterBox=c>0||C>0?x(r.left+E/3,r.top+d,c-E/3,C-y/3,m.BOTTOM_LEFT):new u(r.left+E/3,r.top+r.height-y/3),this.topLeftBorderDoubleInnerBox=n>0||s>0?x(r.left+E*2/3,r.top+l*2/3,n-E*2/3,s-l*2/3,m.TOP_LEFT):new u(r.left+E*2/3,r.top+l*2/3),this.topRightBorderDoubleInnerBox=n>0||s>0?x(r.left+F,r.top+l*2/3,a-v*2/3,o-l*2/3,m.TOP_RIGHT):new u(r.left+r.width-v*2/3,r.top+l*2/3),this.bottomRightBorderDoubleInnerBox=g>0||w>0?x(r.left+p,r.top+K,g-v*2/3,w-y*2/3,m.BOTTOM_RIGHT):new u(r.left+r.width-v*2/3,r.top+r.height-y*2/3),this.bottomLeftBorderDoubleInnerBox=c>0||C>0?x(r.left+E*2/3,r.top+d,c-E*2/3,C-y*2/3,m.BOTTOM_LEFT):new u(r.left+E*2/3,r.top+r.height-y*2/3),this.topLeftBorderStroke=n>0||s>0?x(r.left+E/2,r.top+l/2,n-E/2,s-l/2,m.TOP_LEFT):new u(r.left+E/2,r.top+l/2),this.topRightBorderStroke=n>0||s>0?x(r.left+F,r.top+l/2,a-v/2,o-l/2,m.TOP_RIGHT):new u(r.left+r.width-v/2,r.top+l/2),this.bottomRightBorderStroke=g>0||w>0?x(r.left+p,r.top+K,g-v/2,w-y/2,m.BOTTOM_RIGHT):new u(r.left+r.width-v/2,r.top+r.height-y/2),this.bottomLeftBorderStroke=c>0||C>0?x(r.left+E/2,r.top+d,c-E/2,C-y/2,m.BOTTOM_LEFT):new u(r.left+E/2,r.top+r.height-y/2),this.topLeftBorderBox=n>0||s>0?x(r.left,r.top,n,s,m.TOP_LEFT):new u(r.left,r.top),this.topRightBorderBox=a>0||o>0?x(r.left+F,r.top,a,o,m.TOP_RIGHT):new u(r.left+r.width,r.top),this.bottomRightBorderBox=g>0||w>0?x(r.left+p,r.top+K,g,w,m.BOTTOM_RIGHT):new u(r.left+r.width,r.top+r.height),this.bottomLeftBorderBox=c>0||C>0?x(r.left,r.top+d,c,C,m.BOTTOM_LEFT):new u(r.left,r.top+r.height),this.topLeftPaddingBox=n>0||s>0?x(r.left+E,r.top+l,Math.max(0,n-E),Math.max(0,s-l),m.TOP_LEFT):new u(r.left+E,r.top+l),this.topRightPaddingBox=a>0||o>0?x(r.left+Math.min(F,r.width-v),r.top+l,F>r.width+v?0:Math.max(0,a-v),Math.max(0,o-l),m.TOP_RIGHT):new u(r.left+r.width-v,r.top+l),this.bottomRightPaddingBox=g>0||w>0?x(r.left+Math.min(p,r.width-E),r.top+Math.min(K,r.height-y),Math.max(0,g-v),Math.max(0,w-y),m.BOTTOM_RIGHT):new u(r.left+r.width-v,r.top+r.height-y),this.bottomLeftPaddingBox=c>0||C>0?x(r.left+E,r.top+Math.min(d,r.height-y),Math.max(0,c-E),Math.max(0,C-y),m.BOTTOM_LEFT):new u(r.left+E,r.top+r.height-y),this.topLeftContentBox=n>0||s>0?x(r.left+E+D,r.top+l+M,Math.max(0,n-(E+D)),Math.max(0,s-(l+M)),m.TOP_LEFT):new u(r.left+E+D,r.top+l+M),this.topRightContentBox=a>0||o>0?x(r.left+Math.min(F,r.width+E+D),r.top+l+M,F>r.width+E+D?0:a-E+D,o-(l+M),m.TOP_RIGHT):new u(r.left+r.width-(v+W),r.top+l+M),this.bottomRightContentBox=g>0||w>0?x(r.left+Math.min(p,r.width-(E+D)),r.top+Math.min(K,r.height+l+M),Math.max(0,g-(v+W)),w-(y+z),m.BOTTOM_RIGHT):new u(r.left+r.width-(v+W),r.top+r.height-(y+z)),this.bottomLeftContentBox=c>0||C>0?x(r.left+E+D,r.top+d,Math.max(0,c-(E+D)),C-(y+z),m.BOTTOM_LEFT):new u(r.left+E+D,r.top+r.height-(y+z))}return e})(),m=(function(e){return e[e.TOP_LEFT=0]=`TOP_LEFT`,e[e.TOP_RIGHT=1]=`TOP_RIGHT`,e[e.BOTTOM_RIGHT=2]=`BOTTOM_RIGHT`,e[e.BOTTOM_LEFT=3]=`BOTTOM_LEFT`,e})(m||{}),x=function(e,A,t,r,B){var n=4*((Math.sqrt(2)-1)/3),s=t*n,i=r*n,a=e+t,o=A+r;switch(B){case m.TOP_LEFT:return new er(new u(e,o),new u(e,o-i),new u(a-s,A),new u(a,A));case m.TOP_RIGHT:return new er(new u(e,A),new u(e+s,A),new u(a,o-i),new u(a,o));case m.BOTTOM_RIGHT:return new er(new u(a,A),new u(a,A+i),new u(e+s,o),new u(e,o));case m.BOTTOM_LEFT:default:return new er(new u(a,o),new u(a-s,o),new u(e,A+i),new u(e,A))}},rr=function(e){return[e.topLeftBorderBox,e.topRightBorderBox,e.bottomRightBorderBox,e.bottomLeftBorderBox]},sQ=function(e){return[e.topLeftContentBox,e.topRightContentBox,e.bottomRightContentBox,e.bottomLeftContentBox]},tr=function(e){return[e.topLeftPaddingBox,e.topRightPaddingBox,e.bottomRightPaddingBox,e.bottomLeftPaddingBox]},aQ=(function(){function e(A,t,r){this.offsetX=A,this.offsetY=t,this.matrix=r,this.type=0,this.target=6}return e})(),Br=(function(){function e(A,t){this.path=A,this.target=t,this.type=1}return e})(),iQ=(function(){function e(A){this.opacity=A,this.type=2,this.target=6}return e})(),oQ=function(e){return e.type===0},An=function(e){return e.type===1},QQ=function(e){return e.type===2},en=function(e,A){return e.length===A.length?e.some(function(t,r){return t===A[r]}):!1},gQ=function(e,A,t,r,B){return e.map(function(n,s){switch(s){case 0:return n.add(A,t);case 1:return n.add(A+r,t);case 2:return n.add(A+r,t+B);case 3:return n.add(A,t+B)}return n})},rn=(function(){function e(A){this.element=A,this.inlineLevel=[],this.nonInlineLevel=[],this.negativeZIndex=[],this.zeroOrAutoZIndexOrTransformedOrOpacity=[],this.positiveZIndex=[],this.nonPositionedFloats=[],this.nonPositionedInlineLevel=[]}return e})(),tn=(function(){function e(A,t){if(this.container=A,this.parent=t,this.effects=[],this.curves=new nQ(this.container),this.container.styles.opacity<1&&this.effects.push(new iQ(this.container.styles.opacity)),this.container.styles.transform!==null){var r=this.container.bounds.left+this.container.styles.transformOrigin[0].number,B=this.container.bounds.top+this.container.styles.transformOrigin[1].number,n=this.container.styles.transform;this.effects.push(new aQ(r,B,n))}if(this.container.styles.overflowX!==0){var s=rr(this.curves),i=tr(this.curves);en(s,i)?this.effects.push(new Br(s,6)):(this.effects.push(new Br(s,2)),this.effects.push(new Br(i,4)))}}return e.prototype.getEffects=function(A){for(var t=[2,3].indexOf(this.container.styles.position)===-1,r=this.parent,B=this.effects.slice(0);r;){var n=r.effects.filter(function(a){return!An(a)});if(t||r.container.styles.position!==0||!r.parent){if(B.unshift.apply(B,n),t=[2,3].indexOf(r.container.styles.position)===-1,r.container.styles.overflowX!==0){var s=rr(r.curves),i=tr(r.curves);en(s,i)||B.unshift(new Br(i,6))}}else B.unshift.apply(B,n);r=r.parent}return B.filter(function(a){return G(a.target,A)})},e})(),tt=function(e,A,t,r){e.container.elements.forEach(function(B){var n=G(B.flags,4),s=G(B.flags,2),i=new tn(B,e);G(B.styles.display,2048)&&r.push(i);var a=G(B.flags,8)?[]:r;if(n||s){var o=n||B.styles.isPositioned()?t:A,Q=new rn(i);if(B.styles.isPositioned()||B.styles.opacity<1||B.styles.isTransformed()){var g=B.styles.zIndex.order;if(g<0){var w=0;o.negativeZIndex.some(function(c,C){return g>c.element.container.styles.zIndex.order?(w=C,!1):w>0}),o.negativeZIndex.splice(w,0,Q)}else if(g>0){var f=0;o.positiveZIndex.some(function(c,C){return g>=c.element.container.styles.zIndex.order?(f=C+1,!1):f>0}),o.positiveZIndex.splice(f,0,Q)}else o.zeroOrAutoZIndexOrTransformedOrOpacity.push(Q)}else B.styles.isFloating()?o.nonPositionedFloats.push(Q):o.nonPositionedInlineLevel.push(Q);tt(i,Q,n?Q:t,a)}else B.styles.isInlineLevel()?A.inlineLevel.push(i):A.nonInlineLevel.push(i),tt(i,A,t,a);G(B.flags,8)&&Bn(B,a)})},Bn=function(e,A){for(var t=e instanceof kr?e.start:1,r=e instanceof kr?e.reversed:!1,B=0;B`u`?e[0]:t},FQ=function(e,A,t,r,B){var n=A[0],s=A[1],i=t[0],a=t[1];switch(e){case 2:return[new u(Math.round(r.left),Math.round(r.top+s)),new u(Math.round(r.left+r.width),Math.round(r.top+s)),new u(Math.round(r.left+r.width),Math.round(a+r.top+s)),new u(Math.round(r.left),Math.round(a+r.top+s))];case 3:return[new u(Math.round(r.left+n),Math.round(r.top)),new u(Math.round(r.left+n+i),Math.round(r.top)),new u(Math.round(r.left+n+i),Math.round(r.height+r.top)),new u(Math.round(r.left+n),Math.round(r.height+r.top))];case 1:return[new u(Math.round(r.left+n),Math.round(r.top+s)),new u(Math.round(r.left+n+i),Math.round(r.top+s)),new u(Math.round(r.left+n+i),Math.round(r.top+s+a)),new u(Math.round(r.left+n),Math.round(r.top+s+a))];default:return[new u(Math.round(B.left),Math.round(B.top)),new u(Math.round(B.left+B.width),Math.round(B.top)),new u(Math.round(B.left+B.width),Math.round(B.height+B.top)),new u(Math.round(B.left),Math.round(B.height+B.top))]}},hQ=`data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7`,an=`Hidden Text`,dQ=(function(){function e(A){this._data={},this._document=A}return e.prototype.parseMetrics=function(A,t){var r=this._document.createElement(`div`),B=this._document.createElement(`img`),n=this._document.createElement(`span`),s=this._document.body;r.style.visibility=`hidden`,r.style.fontFamily=A,r.style.fontSize=t,r.style.margin=`0`,r.style.padding=`0`,r.style.whiteSpace=`nowrap`,s.appendChild(r),B.src=hQ,B.width=1,B.height=1,B.style.margin=`0`,B.style.padding=`0`,B.style.verticalAlign=`baseline`,n.style.fontFamily=A,n.style.fontSize=t,n.style.margin=`0`,n.style.padding=`0`,n.appendChild(this._document.createTextNode(an)),r.appendChild(n),r.appendChild(B);var i=B.offsetTop-n.offsetTop+2;r.removeChild(n),r.appendChild(this._document.createTextNode(an)),r.style.lineHeight=`normal`,B.style.verticalAlign=`super`;var a=B.offsetTop-r.offsetTop+2;return s.removeChild(r),{baseline:i,middle:a}},e.prototype.getMetrics=function(A,t){var r=A+` `+t;return typeof this._data[r]>`u`&&(this._data[r]=this.parseMetrics(A,t)),this._data[r]},e})(),on=(function(){function e(A,t){this.context=A,this.options=t}return e})(),EQ=1e4,HQ=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B._activeEffects=[],B.canvas=r.canvas?r.canvas:document.createElement(`canvas`),B.ctx=B.canvas.getContext(`2d`),r.canvas||(B.canvas.width=Math.floor(r.width*r.scale),B.canvas.height=Math.floor(r.height*r.scale),B.canvas.style.width=r.width+`px`,B.canvas.style.height=r.height+`px`),B.fontMetrics=new dQ(document),B.ctx.scale(B.options.scale,B.options.scale),B.ctx.translate(-r.x,-r.y),B.ctx.textBaseline=`bottom`,B._activeEffects=[],B.context.logger.debug(`Canvas renderer initialized (`+r.width+`x`+r.height+`) with scale `+r.scale),B}return A.prototype.applyEffects=function(t){for(var r=this;this._activeEffects.length;)this.popEffect();t.forEach(function(B){return r.applyEffect(B)})},A.prototype.applyEffect=function(t){this.ctx.save(),QQ(t)&&(this.ctx.globalAlpha=t.opacity),oQ(t)&&(this.ctx.translate(t.offsetX,t.offsetY),this.ctx.transform(t.matrix[0],t.matrix[1],t.matrix[2],t.matrix[3],t.matrix[4],t.matrix[5]),this.ctx.translate(-t.offsetX,-t.offsetY)),An(t)&&(this.path(t.path),this.ctx.clip()),this._activeEffects.push(t)},A.prototype.popEffect=function(){this._activeEffects.pop(),this.ctx.restore()},A.prototype.renderStack=function(t){return k(this,void 0,void 0,function(){var r;return _(this,function(B){switch(B.label){case 0:return r=t.element.container.styles,r.isVisible()?[4,this.renderStackContent(t)]:[3,2];case 1:B.sent(),B.label=2;case 2:return[2]}})})},A.prototype.renderNode=function(t){return k(this,void 0,void 0,function(){return _(this,function(r){switch(r.label){case 0:if(G(t.container.flags,16))debugger;return t.container.styles.isVisible()?[4,this.renderNodeBackgroundAndBorders(t)]:[3,3];case 1:return r.sent(),[4,this.renderNodeContent(t)];case 2:r.sent(),r.label=3;case 3:return[2]}})})},A.prototype.renderTextWithLetterSpacing=function(t,r,B){var n=this;if(r===0)this.ctx.fillText(t.text,t.bounds.left,t.bounds.top+B);else Pr(t.text).reduce(function(i,a){return n.ctx.fillText(a,i,t.bounds.top+B),i+n.ctx.measureText(a).width},t.bounds.left)},A.prototype.createFontStyle=function(t){var r=t.fontVariant.filter(function(s){return s===`normal`||s===`small-caps`}).join(``),B=KQ(t.fontFamily).join(`, `),n=ne(t.fontSize)?``+t.fontSize.number+t.fontSize.unit:t.fontSize.number+`px`;return[[t.fontStyle,r,t.fontWeight,n,B].join(` `),B,n]},A.prototype.renderTextNode=function(t,r){return k(this,void 0,void 0,function(){var B,n,s,i,a,o,Q,g,w=this;return _(this,function(f){return B=this.createFontStyle(r),n=B[0],s=B[1],i=B[2],this.ctx.font=n,this.ctx.direction=r.direction===1?`rtl`:`ltr`,this.ctx.textAlign=`left`,this.ctx.textBaseline=`alphabetic`,a=this.fontMetrics.getMetrics(s,i),o=a.baseline,Q=a.middle,g=r.paintOrder,t.textBounds.forEach(function(c){g.forEach(function(C){switch(C){case 0:w.ctx.fillStyle=R(r.color),w.renderTextWithLetterSpacing(c,r.letterSpacing,o);var H=r.textShadow;H.length&&c.text.trim().length&&(H.slice(0).reverse().forEach(function(h){w.ctx.shadowColor=R(h.color),w.ctx.shadowOffsetX=h.offsetX.number*w.options.scale,w.ctx.shadowOffsetY=h.offsetY.number*w.options.scale,w.ctx.shadowBlur=h.blur.number,w.renderTextWithLetterSpacing(c,r.letterSpacing,o)}),w.ctx.shadowColor=``,w.ctx.shadowOffsetX=0,w.ctx.shadowOffsetY=0,w.ctx.shadowBlur=0),r.textDecorationLine.length&&(w.ctx.fillStyle=R(r.textDecorationColor||r.color),r.textDecorationLine.forEach(function(h){switch(h){case 1:w.ctx.fillRect(c.bounds.left,Math.round(c.bounds.top+o),c.bounds.width,1);break;case 2:w.ctx.fillRect(c.bounds.left,Math.round(c.bounds.top),c.bounds.width,1);break;case 3:w.ctx.fillRect(c.bounds.left,Math.ceil(c.bounds.top+Q),c.bounds.width,1);break}}));break;case 1:r.webkitTextStrokeWidth&&c.text.trim().length&&(w.ctx.strokeStyle=R(r.webkitTextStrokeColor),w.ctx.lineWidth=r.webkitTextStrokeWidth,w.ctx.lineJoin=window.chrome?`miter`:`round`,w.ctx.strokeText(c.text,c.bounds.left,c.bounds.top+o)),w.ctx.strokeStyle=``,w.ctx.lineWidth=0,w.ctx.lineJoin=`miter`;break}})}),[2]})})},A.prototype.renderReplacedElement=function(t,r,B){if(B&&t.intrinsicWidth>0&&t.intrinsicHeight>0){var n=sr(t),s=tr(r);this.path(s),this.ctx.save(),this.ctx.clip(),this.ctx.drawImage(B,0,0,t.intrinsicWidth,t.intrinsicHeight,n.left,n.top,n.width,n.height),this.ctx.restore()}},A.prototype.renderNodeContent=function(t){return k(this,void 0,void 0,function(){var r,B,n,s,i,a,F,F,o,Q,g,w,p,f,c,d,C,H,h,F,K,p,d;return _(this,function(l){switch(l.label){case 0:this.applyEffects(t.getEffects(4)),r=t.container,B=t.curves,n=r.styles,s=0,i=r.textNodes,l.label=1;case 1:return s0&&X>0&&(y=n.ctx.createPattern(d,`repeat`),n.renderRepeat(M,y,Z,q))):oa(Q)&&(E=Bt(t,r,[null,null,null]),M=E[0],W=E[1],z=E[2],D=E[3],X=E[4],HA=Q.position.length===0?[mr]:Q.position,Z=b(HA[0],D),q=b(HA[HA.length-1],X),DA=Ba(Q,Z,q,D,X),aA=DA[0],pA=DA[1],aA>0&&pA>0&&(bA=n.ctx.createRadialGradient(W+Z,z+q,0,W+Z,z+q,aA),qt(Q.stops,aA*2).forEach(function(ce){return bA.addColorStop(ce.stop,R(ce.color))}),n.path(M),n.ctx.fillStyle=bA,aA!==pA?(xA=t.bounds.left+.5*t.bounds.width,wA=t.bounds.top+.5*t.bounds.height,TA=pA/aA,cA=1/TA,n.ctx.save(),n.ctx.translate(xA,wA),n.ctx.transform(1,0,0,TA,0,0),n.ctx.translate(-xA,-wA),n.ctx.fillRect(W,cA*(z-wA)+wA,D,X*cA),n.ctx.restore()):n.ctx.fill())),kA.label=6;case 6:return r--,[2]}})},n=this,s=0,i=t.styles.backgroundImage.slice(0).reverse(),o.label=1;case 1:return s0?Q.style!==2?[3,5]:[4,this.renderDashedDottedBorder(Q.color,Q.width,i,t.curves,2)]:[3,11]):[3,13];case 4:return w.sent(),[3,11];case 5:return Q.style!==3?[3,7]:[4,this.renderDashedDottedBorder(Q.color,Q.width,i,t.curves,3)];case 6:return w.sent(),[3,11];case 7:return Q.style!==4?[3,9]:[4,this.renderDoubleBorder(Q.color,Q.width,i,t.curves)];case 8:return w.sent(),[3,11];case 9:return[4,this.renderSolidBorder(Q.color,i,t.curves)];case 10:w.sent(),w.label=11;case 11:i++,w.label=12;case 12:return a++,[3,3];case 13:return[2]}})})},A.prototype.renderDashedDottedBorder=function(t,r,B,n,s){return k(this,void 0,void 0,function(){var i,a,o,Q,g,w,f,c,C,H,h,F,K,p,d,l,d,l;return _(this,function(v){return this.ctx.save(),i=uQ(n,B),a=nn(n,B),s===2&&(this.path(a),this.ctx.clip()),eA(a[0])?(o=a[0].start.x,Q=a[0].start.y):(o=a[0].x,Q=a[0].y),eA(a[1])?(g=a[1].end.x,w=a[1].end.y):(g=a[1].x,w=a[1].y),B===0||B===2?f=Math.abs(o-g):f=Math.abs(Q-w),this.ctx.beginPath(),s===3?this.formatPath(i):this.formatPath(a.slice(0,2)),c=r<3?r*3:r*2,C=r<3?r*2:r,s===3&&(c=r,C=r),H=!0,f<=c*2?H=!1:f<=c*2+C?(h=f/(2*c+C),c*=h,C*=h):(F=Math.floor((f+C)/(c+C)),K=(f-F*c)/(F-1),p=(f-(F+1)*c)/F,C=p<=0||Math.abs(C-K)t.length)&&(n=t.length);for(var e=0,i=Array(n);e=0;)t[n]=0}function wl(t,n,e,i,a){this.static_tree=t,this.extra_bits=n,this.extra_base=e,this.elems=i,this.max_length=a,this.has_stree=t&&t.length}function _l(t,n){this.dyn_tree=t,this.max_code=0,this.stat_desc=n}function vi(t,n,e,i,a){this.good_length=t,this.max_lazy=n,this.nice_length=e,this.max_chain=i,this.func=a}function Q1(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=cs,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.legacy_hash=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(G1*2),this.dyn_dtree=new Uint16Array((2*H1+1)*2),this.bl_tree=new Uint16Array((2*W1+1)*2),ir(this.dyn_ltree),ir(this.dyn_dtree),ir(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(V1+1),this.heap=new Uint16Array(2*Rl+1),ir(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*Rl+1),ir(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function y2(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=``,this.state=null,this.data_type=2,this.adler=0}function go(t){this.options=fs.assign({},I2,t||{});let n=this.options;n.raw&&n.windowBits>0?n.windowBits=-n.windowBits:n.gzip&&n.windowBits>0&&n.windowBits<16&&(n.windowBits+=16),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new lf,this.strm.avail_out=0;let e=io.deflateInit2(this.strm,n.level,n.method,n.windowBits,n.memLevel,n.strategy,n.legacyHash);if(e!==ls)throw new Error(Fr[e]);if(n.header&&io.deflateSetHeader(this.strm,n.header),n.dictionary){let i;if(typeof n.dictionary==`string`?i=fo.string2buf(n.dictionary):hf.call(n.dictionary)===`[object ArrayBuffer]`?i=new Uint8Array(n.dictionary):i=n.dictionary,e=io.deflateSetDictionary(this.strm,i),e!==ls)throw new Error(Fr[e]);this._dict_set=!0}}function Zl(t,n){let e=new go(n);if(e.push(t,!0),e.err)throw e.msg||Fr[e.err];return e.result}function C2(t,n){return n=n||{},n.raw=!0,Zl(t,n)}function F2(t,n){return n=n||{},n.gzip=!0,Zl(t,n)}function e0(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function v0(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=``,this.comment=``,this.hcrc=0,this.done=!1}function mo(t){this.options=fs.assign({},A0,t||{});let n=this.options;n.raw&&n.windowBits>=0&&n.windowBits<16&&(n.windowBits=-n.windowBits,n.windowBits===0&&(n.windowBits=-15)),n.windowBits>=0&&n.windowBits<16&&!(t&&t.windowBits)&&(n.windowBits+=32),n.windowBits>15&&n.windowBits<48&&!(n.windowBits&15)&&(n.windowBits|=15),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new lf,this.strm.avail_out=0;let e=wi.inflateInit2(this.strm,n.windowBits);if(e!==da)throw new Error(Fr[e]);if(this.header=new w0,wi.inflateGetHeader(this.strm,this.header),n.dictionary&&(typeof n.dictionary==`string`?n.dictionary=fo.string2buf(n.dictionary):yf.call(n.dictionary)===`[object ArrayBuffer]`&&(n.dictionary=new Uint8Array(n.dictionary)),n.raw&&(e=wi.inflateSetDictionary(this.strm,n.dictionary),e!==da)))throw new Error(Fr[e])}function $l(t,n){let e=new mo(n);if(e.push(t,!0),e.err)throw e.msg||Fr[e.err];return e.result}function N0(t,n){return n=n||{},n.raw=!0,$l(t,n)}function O0(t,n,e){let i=t;for(let a=0;a>>8;return i}function T0(t,n){return(O0(Af,t,n)^Af)>>>0}function Kl(t,n,e){let i=t.readUint32(),a=T0(new Uint8Array(t.buffer,t.byteOffset+t.offset-n-4,n),n);if(a!==i)throw new Error(`CRC mismatch for chunk ${e}. Expected ${i}, found ${a}`)}function ds(t,n,e){for(let i=0;i>1)&255}else{for(;o>1)&255;for(;o>1)&255}}function bs(t,n,e,i,a){let o=0;if(e.length===0){for(;o=e||_t>=i))for(let mt=0;mt>8&255}function Xl(t){let{data:n,width:e,height:i,channels:a,depth:o}=t,f=Math.ceil(o/8)*a,l=Math.ceil(o/8*a*e),c=new Uint8Array(i*l),d=H0,m=0,A,L;for(let p=0;p>8&255}function Jl(t){if(!kf(t.readBytes(vs.length)))throw new Error(`wrong PNG signature`)}function kf(t){if(t.length79)throw new Error(`keyword length must be between 1 and 79`)}function Y0(t){if(!$0.test(t))throw new Error(`invalid latin1 text`)}function If(t,n,e){let i=Ql(n);t[i]=K0(n,e-i.length-1)}function Ql(t){for(t.mark();t.readByte()!==V0;);let n=t.offset;t.reset();let e=Ef.decode(t.readBytes(n-t.offset-1));return t.skip(1),Z0(e),e}function K0(t,n){return Ef.decode(t.readBytes(n))}function X0(t){if(t!==1&&t!==2&&t!==4&&t!==8&&t!==16)throw new Error(`invalid bit depth: ${t}`);return t}function Cf(t,n){return new ys(t,n).decode()}function th(){Yt.console&&typeof Yt.console.log==`function`&&Yt.console.log.apply(Yt.console,arguments)}function eh(t,n,e){var i=new XMLHttpRequest;i.open(`GET`,t),i.responseType=`blob`,i.onload=function(){jr(i.response,n,e)},i.onerror=function(){ke.error(`could not download file`)},i.send()}function Ff(t){var n=new XMLHttpRequest;n.open(`HEAD`,t,!1);try{n.send()}catch{}return n.status>=200&&n.status<=299}function xs(t){try{t.dispatchEvent(new MouseEvent(`click`))}catch{var n=document.createEvent(`MouseEvents`);n.initMouseEvent(`click`,!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(n)}}function tu(t){var n;t=t||``,this.ok=!1,t.charAt(0)==`#`&&(t=t.substr(1,6)),t={aliceblue:`f0f8ff`,antiquewhite:`faebd7`,aqua:`00ffff`,aquamarine:`7fffd4`,azure:`f0ffff`,beige:`f5f5dc`,bisque:`ffe4c4`,black:`000000`,blanchedalmond:`ffebcd`,blue:`0000ff`,blueviolet:`8a2be2`,brown:`a52a2a`,burlywood:`deb887`,cadetblue:`5f9ea0`,chartreuse:`7fff00`,chocolate:`d2691e`,coral:`ff7f50`,cornflowerblue:`6495ed`,cornsilk:`fff8dc`,crimson:`dc143c`,cyan:`00ffff`,darkblue:`00008b`,darkcyan:`008b8b`,darkgoldenrod:`b8860b`,darkgray:`a9a9a9`,darkgreen:`006400`,darkkhaki:`bdb76b`,darkmagenta:`8b008b`,darkolivegreen:`556b2f`,darkorange:`ff8c00`,darkorchid:`9932cc`,darkred:`8b0000`,darksalmon:`e9967a`,darkseagreen:`8fbc8f`,darkslateblue:`483d8b`,darkslategray:`2f4f4f`,darkturquoise:`00ced1`,darkviolet:`9400d3`,deeppink:`ff1493`,deepskyblue:`00bfff`,dimgray:`696969`,dodgerblue:`1e90ff`,feldspar:`d19275`,firebrick:`b22222`,floralwhite:`fffaf0`,forestgreen:`228b22`,fuchsia:`ff00ff`,gainsboro:`dcdcdc`,ghostwhite:`f8f8ff`,gold:`ffd700`,goldenrod:`daa520`,gray:`808080`,green:`008000`,greenyellow:`adff2f`,honeydew:`f0fff0`,hotpink:`ff69b4`,indianred:`cd5c5c`,indigo:`4b0082`,ivory:`fffff0`,khaki:`f0e68c`,lavender:`e6e6fa`,lavenderblush:`fff0f5`,lawngreen:`7cfc00`,lemonchiffon:`fffacd`,lightblue:`add8e6`,lightcoral:`f08080`,lightcyan:`e0ffff`,lightgoldenrodyellow:`fafad2`,lightgrey:`d3d3d3`,lightgreen:`90ee90`,lightpink:`ffb6c1`,lightsalmon:`ffa07a`,lightseagreen:`20b2aa`,lightskyblue:`87cefa`,lightslateblue:`8470ff`,lightslategray:`778899`,lightsteelblue:`b0c4de`,lightyellow:`ffffe0`,lime:`00ff00`,limegreen:`32cd32`,linen:`faf0e6`,magenta:`ff00ff`,maroon:`800000`,mediumaquamarine:`66cdaa`,mediumblue:`0000cd`,mediumorchid:`ba55d3`,mediumpurple:`9370d8`,mediumseagreen:`3cb371`,mediumslateblue:`7b68ee`,mediumspringgreen:`00fa9a`,mediumturquoise:`48d1cc`,mediumvioletred:`c71585`,midnightblue:`191970`,mintcream:`f5fffa`,mistyrose:`ffe4e1`,moccasin:`ffe4b5`,navajowhite:`ffdead`,navy:`000080`,oldlace:`fdf5e6`,olive:`808000`,olivedrab:`6b8e23`,orange:`ffa500`,orangered:`ff4500`,orchid:`da70d6`,palegoldenrod:`eee8aa`,palegreen:`98fb98`,paleturquoise:`afeeee`,palevioletred:`d87093`,papayawhip:`ffefd5`,peachpuff:`ffdab9`,peru:`cd853f`,pink:`ffc0cb`,plum:`dda0dd`,powderblue:`b0e0e6`,purple:`800080`,red:`ff0000`,rosybrown:`bc8f8f`,royalblue:`4169e1`,saddlebrown:`8b4513`,salmon:`fa8072`,sandybrown:`f4a460`,seagreen:`2e8b57`,seashell:`fff5ee`,sienna:`a0522d`,silver:`c0c0c0`,skyblue:`87ceeb`,slateblue:`6a5acd`,slategray:`708090`,snow:`fffafa`,springgreen:`00ff7f`,steelblue:`4682b4`,tan:`d2b48c`,teal:`008080`,thistle:`d8bfd8`,tomato:`ff6347`,turquoise:`40e0d0`,violet:`ee82ee`,violetred:`d02090`,wheat:`f5deb3`,white:`ffffff`,whitesmoke:`f5f5f5`,yellow:`ffff00`,yellowgreen:`9acd32`}[t=(t=t.replace(/ /g,``)).toLowerCase()]||t;for(var e=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:[`rgb(123, 234, 45)`,`rgb(255,234,245)`],process:function(l){return[parseInt(l[1]),parseInt(l[2]),parseInt(l[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:[`#00ff00`,`336699`],process:function(l){return[parseInt(l[1],16),parseInt(l[2],16),parseInt(l[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:[`#fb0`,`f0f`],process:function(l){return[parseInt(l[1]+l[1],16),parseInt(l[2]+l[2],16),parseInt(l[3]+l[3],16)]}}],i=0;i255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return`rgb(`+this.r+`, `+this.g+`, `+this.b+`)`},this.toHex=function(){var l=this.r.toString(16),c=this.g.toString(16),d=this.b.toString(16);return l.length==1&&(l=`0`+l),c.length==1&&(c=`0`+c),d.length==1&&(d=`0`+d),`#`+l+c+d}}function nh(t,n){var e=t[0],i=t[1],a=t[2],o=t[3];e=vn(e,i,a,o,n[0],7,-680876936),o=vn(o,e,i,a,n[1],12,-389564586),a=vn(a,o,e,i,n[2],17,606105819),i=vn(i,a,o,e,n[3],22,-1044525330),e=vn(e,i,a,o,n[4],7,-176418897),o=vn(o,e,i,a,n[5],12,1200080426),a=vn(a,o,e,i,n[6],17,-1473231341),i=vn(i,a,o,e,n[7],22,-45705983),e=vn(e,i,a,o,n[8],7,1770035416),o=vn(o,e,i,a,n[9],12,-1958414417),a=vn(a,o,e,i,n[10],17,-42063),i=vn(i,a,o,e,n[11],22,-1990404162),e=vn(e,i,a,o,n[12],7,1804603682),o=vn(o,e,i,a,n[13],12,-40341101),a=vn(a,o,e,i,n[14],17,-1502002290),e=wn(e,i=vn(i,a,o,e,n[15],22,1236535329),a,o,n[1],5,-165796510),o=wn(o,e,i,a,n[6],9,-1069501632),a=wn(a,o,e,i,n[11],14,643717713),i=wn(i,a,o,e,n[0],20,-373897302),e=wn(e,i,a,o,n[5],5,-701558691),o=wn(o,e,i,a,n[10],9,38016083),a=wn(a,o,e,i,n[15],14,-660478335),i=wn(i,a,o,e,n[4],20,-405537848),e=wn(e,i,a,o,n[9],5,568446438),o=wn(o,e,i,a,n[14],9,-1019803690),a=wn(a,o,e,i,n[3],14,-187363961),i=wn(i,a,o,e,n[8],20,1163531501),e=wn(e,i,a,o,n[13],5,-1444681467),o=wn(o,e,i,a,n[2],9,-51403784),a=wn(a,o,e,i,n[7],14,1735328473),e=_n(e,i=wn(i,a,o,e,n[12],20,-1926607734),a,o,n[5],4,-378558),o=_n(o,e,i,a,n[8],11,-2022574463),a=_n(a,o,e,i,n[11],16,1839030562),i=_n(i,a,o,e,n[14],23,-35309556),e=_n(e,i,a,o,n[1],4,-1530992060),o=_n(o,e,i,a,n[4],11,1272893353),a=_n(a,o,e,i,n[7],16,-155497632),i=_n(i,a,o,e,n[10],23,-1094730640),e=_n(e,i,a,o,n[13],4,681279174),o=_n(o,e,i,a,n[0],11,-358537222),a=_n(a,o,e,i,n[3],16,-722521979),i=_n(i,a,o,e,n[6],23,76029189),e=_n(e,i,a,o,n[9],4,-640364487),o=_n(o,e,i,a,n[12],11,-421815835),a=_n(a,o,e,i,n[15],16,530742520),e=yn(e,i=_n(i,a,o,e,n[2],23,-995338651),a,o,n[0],6,-198630844),o=yn(o,e,i,a,n[7],10,1126891415),a=yn(a,o,e,i,n[14],15,-1416354905),i=yn(i,a,o,e,n[5],21,-57434055),e=yn(e,i,a,o,n[12],6,1700485571),o=yn(o,e,i,a,n[3],10,-1894986606),a=yn(a,o,e,i,n[10],15,-1051523),i=yn(i,a,o,e,n[1],21,-2054922799),e=yn(e,i,a,o,n[8],6,1873313359),o=yn(o,e,i,a,n[15],10,-30611744),a=yn(a,o,e,i,n[6],15,-1560198380),i=yn(i,a,o,e,n[13],21,1309151649),e=yn(e,i,a,o,n[4],6,-145523070),o=yn(o,e,i,a,n[11],10,-1120210379),a=yn(a,o,e,i,n[2],15,718787259),i=yn(i,a,o,e,n[9],21,-343485551),t[0]=lr(e,t[0]),t[1]=lr(i,t[1]),t[2]=lr(a,t[2]),t[3]=lr(o,t[3])}function Fs(t,n,e,i,a,o){return n=lr(lr(n,t),lr(i,o)),lr(n<>>32-a,e)}function vn(t,n,e,i,a,o,f){return Fs(n&e|~n&i,t,n,a,o,f)}function wn(t,n,e,i,a,o,f){return Fs(n&i|e&~i,t,n,a,o,f)}function _n(t,n,e,i,a,o,f){return Fs(n^e^i,t,n,a,o,f)}function yn(t,n,e,i,a,o,f){return Fs(e^(n|~i),t,n,a,o,f)}function eu(t){var n,e=t.length,i=[1732584193,-271733879,-1732584194,271733878];for(n=64;n<=t.length;n+=64)nh(i,J0(t.substring(n-64,n)));t=t.substring(n-64);var a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(n=0;n>2]|=t.charCodeAt(n)<<(n%4<<3);if(a[n>>2]|=128<<(n%4<<3),n>55)for(nh(i,a),n=0;n<16;n++)a[n]=0;return a[14]=8*e,nh(i,a),i}function J0(t){var n,e=[];for(n=0;n<64;n+=4)e[n>>2]=t.charCodeAt(n)+(t.charCodeAt(n+1)<<8)+(t.charCodeAt(n+2)<<16)+(t.charCodeAt(n+3)<<24);return e}function Q0(t){for(var n=``,e=0;e<4;e++)n+=Tf[t>>8*e+4&15]+Tf[t>>8*e&15];return n}function t5(t){return String.fromCharCode(255&t,(65280&t)>>8,(16711680&t)>>16,(4278190080&t)>>24)}function lh(t){return eu(t).map(t5).join(``)}function lr(t,n){if(e5){var e=(65535&t)+(65535&n);return(t>>16)+(n>>16)+(e>>16)<<16|65535&e}return t+n&4294967295}function hh(t,n){var e,i,a,o;if(t!==e){for(var f=(a=t,o=1+(256/t.length|0),new Array(o+1).join(a)),l=[],c=0;c<256;c++)l[c]=c;var d=0;for(c=0;c<256;c++){var m=l[c];d=(d+m+f.charCodeAt(c))%256,l[c]=l[d],l[d]=m}e=t,i=l}else l=i;var A=n.length,L=0,p=0,T=``;for(c=0;c€/\f©þdSiz`;var o=(n+this.padding).substr(0,32),f=(e+this.padding).substr(0,32);this.O=this.processOwnerPassword(o,f),this.P=-(1+(255^a)),this.encryptionKey=lh(o+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(i)).substr(0,5),this.U=hh(this.encryptionKey,this.padding)}function Aa(t){if(/[^\u0000-\u00ff]/.test(t))throw new Error(`Invalid PDF Name Object: `+t+`, Only accept ASCII characters.`);for(var n=``,e=t.length,i=0;i126?`#`+(`0`+a.toString(16)).slice(-2):t[i]}return n}function Bf(t){if(ye(t)!==`object`)throw new Error(`Invalid Context passed to initialize PubSub (jsPDF-module)`);var n={};this.subscribe=function(e,i,a){if(a=a||!1,typeof e!=`string`||typeof i!=`function`||typeof a!=`boolean`)throw new Error(`Invalid arguments passed to PubSub.subscribe (jsPDF-module)`);n.hasOwnProperty(e)||(n[e]={});var o=Math.random().toString(35);return n[e][o]=[i,!!a],o},this.unsubscribe=function(e){for(var i in n)if(n[i][e])return delete n[i][e],Object.keys(n[i]).length===0&&delete n[i],!0;return!1},this.publish=function(e){if(n.hasOwnProperty(e)){var i=Array.prototype.slice.call(arguments,1),a=[];for(var o in n[e]){var f=n[e][o];try{f[0].apply(t,i)}catch(l){Yt.console&&ke.error(`jsPDF PubSub Error`,l.message,l)}f[1]&&a.push(o)}a.length&&a.forEach(this.unsubscribe)}},this.getTopics=function(){return n}}function Is(t){if(!(this instanceof Is))return new Is(t);var n=`opacity,stroke-opacity`.split(`,`);for(var e in t)t.hasOwnProperty(e)&&n.indexOf(e)>=0&&(this[e]=t[e]);this.id=``,this.objectNumber=-1}function nu(t,n){this.gState=t,this.matrix=n,this.id=``,this.objectNumber=-1}function Mr(t,n,e,i,a){if(!(this instanceof Mr))return new Mr(t,n,e,i,a);this.type=t===`axial`?2:3,this.coords=n,this.colors=e,nu.call(this,i,a)}function Na(t,n,e,i,a){if(!(this instanceof Na))return new Na(t,n,e,i,a);this.boundingBox=t,this.xStep=n,this.yStep=e,this.stream=``,this.cloneIndex=0,nu.call(this,i,a)}function Mt(t){var n,e=typeof arguments[0]==`string`?arguments[0]:`p`,i=arguments[1],a=arguments[2],o=arguments[3],f=[],l=1,c=16,d=`S`,m=null;ye(t=t||{})===`object`&&(e=t.orientation,i=t.unit||i,a=t.format||a,o=t.compress||t.compressPdf||o,(m=t.encryption||null)!==null&&(m.userPassword=m.userPassword||``,m.ownerPassword=m.ownerPassword||``,m.userPermissions=m.userPermissions||[]),l=typeof t.userUnit==`number`?Math.abs(t.userUnit):1,t.precision!==void 0&&(n=t.precision),t.floatPrecision!==void 0&&(c=t.floatPrecision),d=t.defaultPathOperation||`S`),f=t.filters||(o===!0?[`FlateEncode`]:f),i=i||`mm`,e=(``+(e||`P`)).toLowerCase();var A=t.putOnlyUsedFonts||!1,L={},p={internal:{},__private__:{}};p.__private__.PubSub=Bf;var T=`1.3`,O=p.__private__.getPdfVersion=function(){return T};p.__private__.setPdfVersion=function(h){T=h};var B={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],"government-letter":[576,756],legal:[612,1008],"junior-legal":[576,360],ledger:[1224,792],tabloid:[792,1224],"credit-card":[153,243]};p.__private__.getPageFormats=function(){return B};var k=p.__private__.getPageFormat=function(h){return B[h]};a=a||`a4`;var Z=`compat`,$=`advanced`,D=Z;function lt(){this.saveGraphicsState(),P(new Vt(ne,0,0,-ne,0,mr()*ne).toString()+` cm`),this.setFontSize(this.getFontSize()/ne),d=`n`,D=$}function _t(){this.restoreGraphicsState(),d=`S`,D=Z}var mt=p.__private__.combineFontStyleAndFontWeight=function(h,b){if(h==`bold`&&b==`normal`||h==`bold`&&b==400||h==`normal`&&b==`italic`||h==`bold`&&b==`italic`)throw new Error(`Invalid Combination of fontweight and fontstyle`);return b&&(h=b==400||b===`normal`?h===`italic`?`italic`:`normal`:b!=700&&b!==`bold`||h!==`normal`?(b==700?`bold`:b)+``+h:`bold`),h};p.advancedAPI=function(h){var b=D===Z;return b&<.call(this),typeof h!=`function`||(h(this),b&&_t.call(this)),this},p.compatAPI=function(h){var b=D===$;return b&&_t.call(this),typeof h!=`function`||(h(this),b&<.call(this)),this},p.isAdvancedAPI=function(){return D===$};var tt,z=function(h){if(D!==$)throw new Error(h+` is only available in 'advanced' API mode. You need to call advancedAPI() first.`)},et=p.roundToPrecision=p.__private__.roundToPrecision=function(h,b){var E=n||b;if(isNaN(h)||isNaN(E))throw new Error(`Invalid argument passed to jsPDF.roundToPrecision`);return h.toFixed(E).replace(/0+$/,``)};tt=p.hpf=p.__private__.hpf=typeof c==`number`?function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.hpf`);return et(h,c)}:c===`smart`?function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.hpf`);return et(h,h>-1&&h<1?16:5)}:function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.hpf`);return et(h,16)};var N=p.f2=p.__private__.f2=function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.f2`);return et(h,2)},F=p.__private__.f3=function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.f3`);return et(h,3)},U=p.scale=p.__private__.scale=function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.scale`);return D===Z?h*ne:D===$?h:void 0},q=function(h){return U((function(b){return D===Z?mr()-b:D===$?b:void 0})(h))};p.__private__.setPrecision=p.setPrecision=function(h){typeof parseInt(h,10)==`number`&&(n=parseInt(h,10))};var it,ft=`00000000000000000000000000000000`,pt=p.__private__.getFileId=function(){return ft},nt=p.__private__.setFileId=function(h){return ft=h!==void 0&&/^[a-fA-F0-9]{32}$/.test(h)?h.toUpperCase():ft.split(``).map(function(){return`ABCDEF0123456789`.charAt(Math.floor(16*Math.random()))}).join(``),m!==null&&(ln=new xa(m.userPermissions,m.userPassword,m.ownerPassword,ft)),ft};p.setFileId=function(h){return nt(h),this},p.getFileId=function(){return pt()};var ut=p.__private__.convertDateToPDFDate=function(h){var b=h.getTimezoneOffset(),E=b<0?`+`:`-`,M=Math.floor(Math.abs(b/60)),V=Math.abs(b%60),ot=[E,j(M),`'`,j(V),`'`].join(``);return[`D:`,h.getFullYear(),j(h.getMonth()+1),j(h.getDate()),j(h.getHours()),j(h.getMinutes()),j(h.getSeconds()),ot].join(``)},At=p.__private__.convertPDFDateToDate=function(h){var b=parseInt(h.substr(2,4),10),E=parseInt(h.substr(6,2),10)-1,M=parseInt(h.substr(8,2),10),V=parseInt(h.substr(10,2),10),ot=parseInt(h.substr(12,2),10),gt=parseInt(h.substr(14,2),10);return new Date(b,E,M,V,ot,gt,0)},yt=p.__private__.setCreationDate=function(h){var b;if(h===void 0&&(h=new Date),h instanceof Date)b=ut(h);else{if(!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(h))throw new Error(`Invalid argument passed to jsPDF.setCreationDate`);b=h}return it=b},y=p.__private__.getCreationDate=function(h){var b=it;return h===`jsDate`&&(b=At(it)),b};p.setCreationDate=function(h){return yt(h),this},p.getCreationDate=function(h){return y(h)};var R,j=p.__private__.padd2=function(h){return(`0`+parseInt(h)).slice(-2)},G=p.__private__.padd2Hex=function(h){return(`00`+(h=h.toString())).substr(h.length)},Y=0,Q=[],rt=[],at=0,dt=[],xt=[],St=!1,kt=rt;p.__private__.setCustomOutputDestination=function(h){St=!0,kt=h};var zt=function(h){St||(kt=h)};p.__private__.resetCustomOutputDestination=function(){St=!1,kt=rt};var P=p.__private__.out=function(h){return h=h.toString(),at+=h.length+1,kt.push(h),kt},Lt=p.__private__.write=function(h){return P(arguments.length===1?h.toString():Array.prototype.join.call(arguments,` `))},ae=p.__private__.getArrayBuffer=function(h){for(var b=h.length,E=new ArrayBuffer(b),M=new Uint8Array(E);b--;)M[b]=h.charCodeAt(b);return E},Ht=[[`Helvetica`,`helvetica`,`normal`,`WinAnsiEncoding`],[`Helvetica-Bold`,`helvetica`,`bold`,`WinAnsiEncoding`],[`Helvetica-Oblique`,`helvetica`,`italic`,`WinAnsiEncoding`],[`Helvetica-BoldOblique`,`helvetica`,`bolditalic`,`WinAnsiEncoding`],[`Courier`,`courier`,`normal`,`WinAnsiEncoding`],[`Courier-Bold`,`courier`,`bold`,`WinAnsiEncoding`],[`Courier-Oblique`,`courier`,`italic`,`WinAnsiEncoding`],[`Courier-BoldOblique`,`courier`,`bolditalic`,`WinAnsiEncoding`],[`Times-Roman`,`times`,`normal`,`WinAnsiEncoding`],[`Times-Bold`,`times`,`bold`,`WinAnsiEncoding`],[`Times-Italic`,`times`,`italic`,`WinAnsiEncoding`],[`Times-BoldItalic`,`times`,`bolditalic`,`WinAnsiEncoding`],[`ZapfDingbats`,`zapfdingbats`,`normal`,null],[`Symbol`,`symbol`,`normal`,null]];p.__private__.getStandardFonts=function(){return Ht};var vt=t.fontSize||16;p.__private__.setFontSize=p.setFontSize=function(h){return vt=D===$?h/ne:h,this};var Wt,Et=p.__private__.getFontSize=p.getFontSize=function(){return D===Z?vt:vt*ne},qt=t.R2L||!1;p.__private__.setR2L=p.setR2L=function(h){return qt=h,this},p.__private__.getR2L=p.getR2L=function(){return qt};var Dt,we=p.__private__.setZoomMode=function(h){if(/^(?:\d+\.\d*|\d*\.\d+|\d+)%$/.test(h))Wt=h;else if(isNaN(h)){if([void 0,null,`fullwidth`,`fullheight`,`fullpage`,`original`].indexOf(h)===-1)throw new Error(`zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. "`+h+`" is not recognized.`);Wt=h}else Wt=parseInt(h,10)};p.__private__.getZoomMode=function(){return Wt};var he,Jt=p.__private__.setPageMode=function(h){if([void 0,null,`UseNone`,`UseOutlines`,`UseThumbs`,`FullScreen`].indexOf(h)==-1)throw new Error(`Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "`+h+`" is not recognized.`);Dt=h};p.__private__.getPageMode=function(){return Dt};var fe=p.__private__.setLayoutMode=function(h){if([void 0,null,`continuous`,`single`,`twoleft`,`tworight`,`two`].indexOf(h)==-1)throw new Error(`Layout mode must be one of continuous, single, twoleft, tworight. "`+h+`" is not recognized.`);he=h};p.__private__.getLayoutMode=function(){return he},p.__private__.setDisplayMode=p.setDisplayMode=function(h,b,E){return we(h),fe(b),Jt(E),this};var ce={title:``,subject:``,author:``,keywords:``,creator:``};p.__private__.getDocumentProperty=function(h){if(Object.keys(ce).indexOf(h)===-1)throw new Error(`Invalid argument passed to jsPDF.getDocumentProperty`);return ce[h]},p.__private__.getDocumentProperties=function(){return ce},p.__private__.setDocumentProperties=p.setProperties=p.setDocumentProperties=function(h){for(var b in ce)ce.hasOwnProperty(b)&&h[b]&&(ce[b]=h[b]);return this},p.__private__.setDocumentProperty=function(h,b){if(Object.keys(ce).indexOf(h)===-1)throw new Error(`Invalid arguments passed to jsPDF.setDocumentProperty`);return ce[h]=b};var Rt,ne,jt,He,ge,oe={},se={},Te=[],Ut={},Pe={},Zt={},Qt={},Re=null,le=0,Gt=[],_e=new Bf(p),cr=t.hotfixes||[],dn={},Si={},li=[],Vt=function h(b,E,M,V,ot,gt){if(!(this instanceof h))return new h(b,E,M,V,ot,gt);isNaN(b)&&(b=1),isNaN(E)&&(E=0),isNaN(M)&&(M=0),isNaN(V)&&(V=1),isNaN(ot)&&(ot=0),isNaN(gt)&&(gt=0),this._matrix=[b,E,M,V,ot,gt]};Object.defineProperty(Vt.prototype,"sx",{get:function(){return this._matrix[0]},set:function(h){this._matrix[0]=h}}),Object.defineProperty(Vt.prototype,"shy",{get:function(){return this._matrix[1]},set:function(h){this._matrix[1]=h}}),Object.defineProperty(Vt.prototype,"shx",{get:function(){return this._matrix[2]},set:function(h){this._matrix[2]=h}}),Object.defineProperty(Vt.prototype,"sy",{get:function(){return this._matrix[3]},set:function(h){this._matrix[3]=h}}),Object.defineProperty(Vt.prototype,"tx",{get:function(){return this._matrix[4]},set:function(h){this._matrix[4]=h}}),Object.defineProperty(Vt.prototype,"ty",{get:function(){return this._matrix[5]},set:function(h){this._matrix[5]=h}}),Object.defineProperty(Vt.prototype,"a",{get:function(){return this._matrix[0]},set:function(h){this._matrix[0]=h}}),Object.defineProperty(Vt.prototype,"b",{get:function(){return this._matrix[1]},set:function(h){this._matrix[1]=h}}),Object.defineProperty(Vt.prototype,"c",{get:function(){return this._matrix[2]},set:function(h){this._matrix[2]=h}}),Object.defineProperty(Vt.prototype,"d",{get:function(){return this._matrix[3]},set:function(h){this._matrix[3]=h}}),Object.defineProperty(Vt.prototype,"e",{get:function(){return this._matrix[4]},set:function(h){this._matrix[4]=h}}),Object.defineProperty(Vt.prototype,"f",{get:function(){return this._matrix[5]},set:function(h){this._matrix[5]=h}}),Object.defineProperty(Vt.prototype,"rotation",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Vt.prototype,"scaleX",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Vt.prototype,"scaleY",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Vt.prototype,"isIdentity",{get:function(){return this.sx===1&&this.shy===0&&this.shx===0&&this.sy===1&&this.tx===0&&this.ty===0}}),Vt.prototype.join=function(h){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(tt).join(h)},Vt.prototype.multiply=function(h){return new Vt(h.sx*this.sx+h.shy*this.shx,h.sx*this.shy+h.shy*this.sy,h.shx*this.sx+h.sy*this.shx,h.shx*this.shy+h.sy*this.sy,h.tx*this.sx+h.ty*this.shx+this.tx,h.tx*this.shy+h.ty*this.sy+this.ty)},Vt.prototype.decompose=function(){var h=this.sx,b=this.shy,E=this.shx,M=this.sy,V=this.tx,ot=this.ty,gt=Math.sqrt(h*h+b*b),Ft=(h/=gt)*E+(b/=gt)*M;E-=h*Ft,M-=b*Ft;var Ct=Math.sqrt(E*E+M*M);return Ft/=Ct,h*(M/=Ct)>16&255,M=Ct>>8&255,V=255&Ct}if(M===void 0||ot===void 0&&E===M&&M===V)b=typeof E==`string`?E+` `+gt[0]:h.precision===2?N(E/255)+` `+gt[0]:F(E/255)+` `+gt[0];else if(ot===void 0||ye(ot)===`object`){if(ot&&!isNaN(ot.a)&&ot.a===0)return[`1.`,`1.`,`1.`,gt[1]].join(` `);b=typeof E==`string`?[E,M,V,gt[1]].join(` `):h.precision===2?[N(E/255),N(M/255),N(V/255),gt[1]].join(` `):[F(E/255),F(M/255),F(V/255),gt[1]].join(` `)}else b=typeof E==`string`?[E,M,V,ot,gt[2]].join(` `):h.precision===2?[N(E),N(M),N(V),N(ot),gt[2]].join(` `):[F(E),F(M),F(V),F(ot),gt[2]].join(` `);return b},ti=p.__private__.getFilters=function(){return f},Gn=p.__private__.putStream=function(h){var b=(h=h||{}).data||``,E=h.filters||ti(),M=h.alreadyAppliedFilters||[],V=h.addLength1||!1,ot=b.length,gt=h.objectId,Ft=function(Fe){return Fe};if(m!==null&>===void 0)throw new Error(`ObjectId must be passed to putStream for file encryption`);m!==null&&(Ft=ln.encryptor(gt,0));var Ct={};E===!0&&(E=[`FlateEncode`]);var Kt=h.additionalKeyValues||[],te=(Ct=Mt.API.processDataByFilters!==void 0?Mt.API.processDataByFilters(b,E):{data:b,reverseChain:[]}).reverseChain+(Array.isArray(M)?M.join(` `):M.toString());if(Ct.data.length!==0&&(Kt.push({key:`Length`,value:Ct.data.length}),V===!0&&Kt.push({key:`Length1`,value:ot})),te.length!=0)if(te.split(`/`).length-1==1)Kt.push({key:`Filter`,value:te});else{Kt.push({key:`Filter`,value:`[`+te+`]`});for(var de=0;de>`),Ct.data.length!==0&&(P(`stream`),P(Ft(Ct.data)),P(`endstream`))},ur=p.__private__.putPage=function(h){var b=h.number,E=h.data,M=h.objId,V=h.contentsObjId;sn(M,!0),P(`<>`),P(`endobj`);var ot=E.join(` +`);return D===$&&(ot+=` +Q`),sn(V,!0),Gn({data:ot,filters:ti(),objectId:V}),P(`endobj`),M},ci=p.__private__.putPages=function(){var h,b,E=[];for(h=1;h<=le;h++)Gt[h].objId=rn(),Gt[h].contentsObjId=rn();for(h=1;h<=le;h++)E.push(ur({number:h,data:xt[h],objId:Gt[h].objId,contentsObjId:Gt[h].contentsObjId,mediaBox:Gt[h].mediaBox,cropBox:Gt[h].cropBox,bleedBox:Gt[h].bleedBox,trimBox:Gt[h].trimBox,artBox:Gt[h].artBox,userUnit:Gt[h].userUnit,rootDictionaryObjId:zi,resourceDictionaryObjId:Jn}));sn(zi,!0),P(`<>`),P(`endobj`),_e.publish(`postPutPages`)},dr=function(h){_e.publish(`putFont`,{font:h,out:P,newObject:De,putStream:Gn}),h.isAlreadyPutted!==!0&&(h.objectNumber=De(),P(`<<`),P(`/Type /Font`),P(`/BaseFont /`+Aa(h.postScriptName)),P(`/Subtype /Type1`),typeof h.encoding==`string`&&P(`/Encoding /`+h.encoding),P(`/FirstChar 32`),P(`/LastChar 255`),P(`>>`),P(`endobj`))},zr=function(h){h.objectNumber=De();var b=[];b.push({key:`Type`,value:`/XObject`}),b.push({key:`Subtype`,value:`/Form`}),b.push({key:`BBox`,value:`[`+[tt(h.x),tt(h.y),tt(h.x+h.width),tt(h.y+h.height)].join(` `)+`]`}),b.push({key:`Matrix`,value:`[`+h.matrix.toString()+`]`});Gn({data:h.pages[1].join(` +`),additionalKeyValues:b,objectId:h.objectNumber}),P(`endobj`)},Hr=function(h,b){b||(b=21);var E=De(),M=(function(gt,Ft){var Ct,Kt=[],te=1/(Ft-1);for(Ct=0;Ct<1;Ct+=te)Kt.push(Ct);if(Kt.push(1),gt[0].offset!=0){var de={offset:0,color:gt[0].color};gt.unshift(de)}if(gt[gt.length-1].offset!=1){var Xe={offset:1,color:gt[gt.length-1].color};gt.push(Xe)}for(var Le=``,Ne=0,Fe=0;Fegt[Ne+1].offset;)Ne++;var je=gt[Ne].offset,Me=(Ct-je)/(gt[Ne+1].offset-je),pn=gt[Ne].color,Ti=gt[Ne+1].color;Le+=G(Math.round((1-Me)*pn[0]+Me*Ti[0]).toString(16))+G(Math.round((1-Me)*pn[1]+Me*Ti[1]).toString(16))+G(Math.round((1-Me)*pn[2]+Me*Ti[2]).toString(16))}return Le.trim()})(h.colors,b),V=[];V.push({key:`FunctionType`,value:`0`}),V.push({key:`Domain`,value:`[0.0 1.0]`}),V.push({key:`Size`,value:`[`+b+`]`}),V.push({key:`BitsPerSample`,value:`8`}),V.push({key:`Range`,value:`[0.0 1.0 0.0 1.0 0.0 1.0]`}),V.push({key:`Decode`,value:`[0.0 1.0 0.0 1.0 0.0 1.0]`}),Gn({data:M,additionalKeyValues:V,alreadyAppliedFilters:[`/ASCIIHexDecode`],objectId:E}),P(`endobj`),h.objectNumber=De(),P(`<< /ShadingType `+h.type),P(`/ColorSpace /DeviceRGB`);var ot=`/Coords [`+tt(parseFloat(h.coords[0]))+` `+tt(parseFloat(h.coords[1]))+` `;h.type===2?ot+=tt(parseFloat(h.coords[2]))+` `+tt(parseFloat(h.coords[3])):ot+=tt(parseFloat(h.coords[2]))+` `+tt(parseFloat(h.coords[3]))+` `+tt(parseFloat(h.coords[4]))+` `+tt(parseFloat(h.coords[5])),P(ot+=`]`),h.matrix&&P(`/Matrix [`+h.matrix.toString()+`]`),P(`/Function `+E+` 0 R`),P(`/Extend [true true]`),P(`>>`),P(`endobj`)},Wr=function(h,b){var E=rn(),M=De();b.push({resourcesOid:E,objectOid:M}),h.objectNumber=M;var V=[];V.push({key:`Type`,value:`/Pattern`}),V.push({key:`PatternType`,value:`1`}),V.push({key:`PaintType`,value:`1`}),V.push({key:`TilingType`,value:`1`}),V.push({key:`BBox`,value:`[`+h.boundingBox.map(tt).join(` `)+`]`}),V.push({key:`XStep`,value:tt(h.xStep)}),V.push({key:`YStep`,value:tt(h.yStep)}),V.push({key:`Resources`,value:E+` 0 R`}),h.matrix&&V.push({key:`Matrix`,value:`[`+h.matrix.toString()+`]`}),Gn({data:h.stream,additionalKeyValues:V,objectId:h.objectNumber}),P(`endobj`)},Os=function(h){for(var b in h.objectNumber=De(),P(`<<`),h)switch(b){case`opacity`:P(`/ca `+N(h[b]));break;case`stroke-opacity`:P(`/CA `+N(h[b]))}P(`>>`),P(`endobj`)},Ea=function(h){sn(h.resourcesOid,!0),P(`<<`),P(`/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]`),(function(){for(var b in P(`/Font <<`),oe)oe.hasOwnProperty(b)&&(A===!1||A===!0&&L.hasOwnProperty(b))&&P(`/`+b+` `+oe[b].objectNumber+` 0 R`);P(`>>`)})(),(function(){if(Object.keys(Ut).length>0){for(var b in P(`/Shading <<`),Ut)Ut.hasOwnProperty(b)&&Ut[b]instanceof Mr&&Ut[b].objectNumber>=0&&P(`/`+b+` `+Ut[b].objectNumber+` 0 R`);_e.publish(`putShadingPatternDict`),P(`>>`)}})(),(function(b){if(Object.keys(Ut).length>0){for(var E in P(`/Pattern <<`),Ut)Ut.hasOwnProperty(E)&&Ut[E]instanceof p.TilingPattern&&Ut[E].objectNumber>=0&&Ut[E].objectNumber>`)}})(h.objectOid),(function(){if(Object.keys(Zt).length>0){var b;for(b in P(`/ExtGState <<`),Zt)Zt.hasOwnProperty(b)&&Zt[b].objectNumber>=0&&P(`/`+b+` `+Zt[b].objectNumber+` 0 R`);_e.publish(`putGStateDict`),P(`>>`)}})(),(function(){for(var b in P(`/XObject <<`),dn)dn.hasOwnProperty(b)&&dn[b].objectNumber>=0&&P(`/`+b+` `+dn[b].objectNumber+` 0 R`);_e.publish(`putXobjectDict`),P(`>>`)})(),P(`>>`),P(`endobj`)},_o=function(h){se[h.fontName]=se[h.fontName]||{},se[h.fontName][h.fontStyle]=h.id},yo=function(h,b,E,M,V){var ot={id:`F`+(Object.keys(oe).length+1).toString(10),postScriptName:h,fontName:b,fontStyle:E,encoding:M,isStandardFont:V||!1,metadata:{}};return _e.publish(`addFont`,{font:ot,instance:this}),oe[ot.id]=ot,_o(ot),ot.id},Vn=p.__private__.pdfEscape=p.pdfEscape=function(h,b){return(function(E,M){var V,ot,gt,Ft,Ct,Kt,te,de,Xe;if(gt=(M=M||{}).sourceEncoding||`Unicode`,Ct=M.outputEncoding,(M.autoencode||Ct)&&oe[Rt].metadata&&oe[Rt].metadata[gt]&&oe[Rt].metadata[gt].encoding&&(Ft=oe[Rt].metadata[gt].encoding,!Ct&&oe[Rt].encoding&&(Ct=oe[Rt].encoding),!Ct&&Ft.codePages&&(Ct=Ft.codePages[0]),typeof Ct==`string`&&(Ct=Ft[Ct]),Ct)){for(te=!1,Kt=[],V=0,ot=E.length;V>8&&(te=!0);E=Kt.join(``)}for(V=E.length;te===void 0&&V!==0;)E.charCodeAt(V-1)>>8&&(te=!0),V--;if(!te)return E;for(Kt=M.noBOM?[]:[254,255],V=0,ot=E.length;V>8)>>8)throw new Error(`Character at position `+V+` of string '`+E+`' exceeds 16bits. Cannot be encoded into UCS-2 BE`);Kt.push(Xe),Kt.push(de-(Xe<<8))}return String.fromCharCode.apply(void 0,Kt)})(h,b).replace(/\\/g,`\\\\`).replace(/\(/g,`\\(`).replace(/\)/g,`\\)`)},Ia=p.__private__.beginPage=function(h){xt[++le]=[],Gt[le]={objId:0,contentsObjId:0,userUnit:Number(l),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(h[0]),topRightY:Number(h[1])}},Ao(le),zt(xt[R])},xo=function(h,b){var E,M,V;switch(e=b||e,typeof h==`string`&&(E=k(h.toLowerCase()),Array.isArray(E)&&(M=E[0],V=E[1])),Array.isArray(h)&&(M=h[0]*ne,V=h[1]*ne),isNaN(M)&&(M=a[0],V=a[1]),(M>14400||V>14400)&&(ke.warn(`A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400`),M=Math.min(14400,M),V=Math.min(14400,V)),a=[M,V],e.substr(0,1)){case`l`:V>M&&(a=[V,M]);break;case`p`:M>V&&(a=[V,M])}Ia(a),Hs($t),P(Kr),Ra!==0&&P(Ra+` J`),Gi!==0&&P(Gi+` j`),_e.publish(`addPage`,{pageNumber:le})},Ca=function(h){h>0&&h<=le&&(xt.splice(h,1),Gt.splice(h,1),le--,R>le&&(R=le),this.setPage(R))},Ao=function(h){h>0&&h<=le&&(R=h)},No=p.__private__.getNumberOfPages=p.getNumberOfPages=function(){return xt.length-1},Lo=function(h,b,E){var M,V=void 0;return E=E||{},h=h!==void 0?h:oe[Rt].fontName,b=b!==void 0?b:oe[Rt].fontStyle,M=h.toLowerCase(),se[M]!==void 0&&se[M][b]!==void 0?V=se[M][b]:se[h]!==void 0&&se[h][b]!==void 0?V=se[h][b]:E.disableWarning===!1&&ke.warn(`Unable to look up font label for font '`+h+`', '`+b+`'. Refer to getFontList() for available fonts.`),V||E.noFallback||((V=se.times[b])??(V=se.times.normal)),V},fi=p.__private__.putInfo=function(){var h=De(),b=function(M){return M};for(var E in m!==null&&(b=ln.encryptor(h,0)),P(`<<`),P(`/Producer (`+Vn(b(`jsPDF `+Mt.version))+`)`),ce)ce.hasOwnProperty(E)&&ce[E]&&P(`/`+E.substr(0,1).toUpperCase()+E.substr(1)+` (`+Vn(b(ce[E]))+`)`);P(`/CreationDate (`+Vn(b(it))+`)`),P(`>>`),P(`endobj`)},Gr=p.__private__.putCatalog=function(h){var b=(h=h||{}).rootDictionaryObjId||zi;switch(De(),P(`<<`),P(`/Type /Catalog`),P(`/Pages `+b+` 0 R`),Wt||(Wt=`fullwidth`),Wt){case`fullwidth`:P(`/OpenAction [3 0 R /FitH null]`);break;case`fullheight`:P(`/OpenAction [3 0 R /FitV null]`);break;case`fullpage`:P(`/OpenAction [3 0 R /Fit]`);break;case`original`:P(`/OpenAction [3 0 R /XYZ null null 1]`);break;default:var E=``+Wt;E.substr(E.length-1)===`%`&&(Wt=parseInt(Wt)/100),typeof Wt==`number`&&P(`/OpenAction [3 0 R /XYZ null null `+N(Wt)+`]`)}switch(he||(he=`continuous`),he){case`continuous`:P(`/PageLayout /OneColumn`);break;case`single`:P(`/PageLayout /SinglePage`);break;case`two`:case`twoleft`:P(`/PageLayout /TwoColumnLeft`);break;case`tworight`:P(`/PageLayout /TwoColumnRight`)}Dt&&P(`/PageMode /`+Dt),_e.publish(`putCatalog`),P(`>>`),P(`endobj`)},Ts=p.__private__.putTrailer=function(){P(`trailer`),P(`<<`),P(`/Size `+(Y+1)),P(`/Root `+Y+` 0 R`),P(`/Info `+(Y-1)+` 0 R`),m!==null&&P(`/Encrypt `+ln.oid+` 0 R`),P(`/ID [ <`+ft+`> <`+ft+`> ]`),P(`>>`)},Ke=p.__private__.putHeader=function(){P(`%PDF-`+T),P(`%ºß¬à`)},So=p.__private__.putXRef=function(){var h=`0000000000`;P(`xref`),P(`0 `+(Y+1)),P(`0000000000 65535 f `);for(var b=1;b<=Y;b++)typeof Q[b]==`function`?P((h+Q[b]()).slice(-10)+` 00000 n `):Q[b]!==void 0?P((h+Q[b]).slice(-10)+` 00000 n `):P(`0000000000 00000 n `)},ui=p.__private__.buildDocument=function(){var h;Y=0,at=0,rt=[],Q=[],dt=[],zi=rn(),Jn=rn(),zt(rt),_e.publish(`buildDocument`),Ke(),ci(),(function(){_e.publish(`putAdditionalObjects`);for(var E=0;E`),P(`/O <`+ln.toHexString(ln.O)+`>`),P(`/P `+ln.P),P(`>>`),P(`endobj`)),fi(),Gr();var b=at;return So(),Ts(),P(`startxref`),P(``+b),P(`%%EOF`),zt(xt[R]),rt.join(` +`)},Vr=p.__private__.getBlob=function(h){return new Blob([ae(h)],{type:`application/pdf`})},Fa=function(h){for(;h.firstChild;)h.removeChild(h.firstChild)},Tn=function(h){var b,E=h.document,M=E.documentElement,V=E.head,ot=E.body;return V||(V=E.createElement(`head`),M.appendChild(V)),ot||(ot=E.createElement(`body`),M.appendChild(ot)),Fa(V),Fa(ot),(b=E.createElement(`style`)).appendChild(E.createTextNode(`html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}`)),V.appendChild(b),{document:E,body:ot}},Zr=p.output=p.__private__.output=(Wn=function(h,b){switch(typeof(b=b||{})==`string`?b={filename:b}:b.filename=b.filename||`generated.pdf`,h){case void 0:return ui();case`save`:p.save(b.filename);break;case`arraybuffer`:return ae(ui());case`blob`:return Vr(ui());case`bloburi`:case`bloburl`:if(Yt.URL!==void 0&&typeof Yt.URL.createObjectURL==`function`)return Yt.URL&&Yt.URL.createObjectURL(Vr(ui()))||void 0;ke.warn(`bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.`);break;case`datauristring`:case`dataurlstring`:var E=``,M=ui();try{E=Of(M)}catch{E=Of(unescape(encodeURIComponent(M)))}return`data:application/pdf;filename=`+encodeURIComponent(b.filename)+`;base64,`+E;case`pdfobjectnewwindow`:if(Object.prototype.toString.call(Yt)===`[object Window]`){var V=`https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js`,ot=!b.pdfObjectUrl;ot||(V=b.pdfObjectUrl);var gt=Yt.open();if(gt!==null){var Ft=Tn(gt),Ct=Ft.document.createElement(`script`),Kt=this;Ct.src=V,ot&&(Ct.integrity=`sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==`,Ct.crossOrigin=`anonymous`),Ct.onload=function(){gt.PDFObject.embed(Kt.output(`dataurlstring`),b)},Ft.body.appendChild(Ct)}return gt}throw new Error(`The option pdfobjectnewwindow just works in a browser-environment.`);case`pdfjsnewwindow`:if(Object.prototype.toString.call(Yt)===`[object Window]`){var te=b.pdfJsUrl||`examples/PDF.js/web/viewer.html`,de=Yt.open();if(de!==null){var Xe=Tn(de),Le=Xe.document.createElement(`iframe`),Ne=te.indexOf(`?`)===-1?`?`:`&`;Kt=this,Le.id=`pdfViewer`,Le.width=`500px`,Le.height=`400px`,Le.src=te+Ne+`file=&downloadName=`+encodeURIComponent(b.filename),Le.onload=function(){de.document.title=b.filename,Le.contentWindow.PDFViewerApplication.open(Kt.output(`bloburl`))},Xe.body.appendChild(Le)}return de}throw new Error(`The option pdfjsnewwindow just works in a browser-environment.`);case`dataurlnewwindow`:if(Object.prototype.toString.call(Yt)!==`[object Window]`)throw new Error(`The option dataurlnewwindow just works in a browser-environment.`);var Fe=Yt.open();if(Fe!==null){var je=Tn(Fe),Me=je.document.createElement(`iframe`);Me.src=this.output(`datauristring`,b),je.body.appendChild(Me),Fe.document.title=b.filename}if(Fe||typeof safari>`u`)return Fe;break;case`datauri`:case`dataurl`:return Yt.document.location.href=this.output(`datauristring`,b);default:return null}},Wn.foo=function(){try{return Wn.apply(this,arguments)}catch(E){var h=E.stack||``;~h.indexOf(` at `)&&(h=h.split(` at `)[1]);var b=`Error in function `+h.split(` +`)[0].split(`<`)[0]+`: `+E.message;if(!Yt.console)throw new Error(b);Yt.console.error(b,E),Yt.alert&&alert(b)}},Wn.foo.bar=Wn,Wn.foo),Ei=function(h){return Array.isArray(cr)===!0&&cr.indexOf(h)>-1};switch(i){case`pt`:ne=1;break;case`mm`:ne=72/25.4;break;case`cm`:ne=72/2.54;break;case`in`:ne=72;break;case`px`:ne=Ei(`px_scaling`)==1?.75:96/72;break;case`pc`:case`em`:ne=12;break;case`ex`:ne=6;break;default:if(typeof i!=`number`)throw new Error(`Invalid unit: `+i);ne=i}var ln=null;yt(),nt();var ko=p.__private__.getPageInfo=p.getPageInfo=function(h){if(isNaN(h)||h%1!=0)throw new Error(`Invalid argument passed to jsPDF.getPageInfo`);return{objId:Gt[h].objId,pageNumber:h,pageContext:Gt[h]}},Rs=p.__private__.getPageInfoByObjId=function(h){if(isNaN(h)||h%1!=0)throw new Error(`Invalid argument passed to jsPDF.getPageInfoByObjId`);for(var b in Gt)if(Gt[b].objId===h)break;return ko(b)},Bs=p.__private__.getCurrentPageInfo=p.getCurrentPageInfo=function(){return{objId:Gt[R].objId,pageNumber:R,pageContext:Gt[R]}};p.addPage=function(){return xo.apply(this,arguments),this},p.setPage=function(){return Ao.apply(this,arguments),zt.call(this,xt[R]),this},p.insertPage=function(h){return this.addPage(),this.movePage(R,h),this},p.movePage=function(h,b){var E,M;if(h>b){E=xt[h],M=Gt[h];for(var V=h;V>b;V--)xt[V]=xt[V-1],Gt[V]=Gt[V-1];xt[b]=E,Gt[b]=M,this.setPage(b)}else if(h0&&(typeof h==`string`?h=Ne.splitTextToSize(h,te):Object.prototype.toString.call(h)===`[object Array]`&&(h=h.reduce(function(Ee,Ie){return Ee.concat(Ne.splitTextToSize(Ie,te))},[]))),ot={text:h,x:b,y:E,options:M,mutex:{pdfEscape:Vn,activeFontKey:Rt,fonts:oe,activeFontSize:vt}},_e.publish(`preProcessText`,ot),h=ot.text,Ft=(M=ot.options).angle,Le instanceof Vt==0&&Ft&&typeof Ft==`number`){Ft*=Math.PI/180,M.rotationDirection===0&&(Ft=-Ft),D===$&&(Ft=-Ft);var Ua=Math.cos(Ft),gi=Math.sin(Ft);Le=new Vt(Ua,gi,-gi,Ua,0,0)}else Ft&&Ft instanceof Vt&&(Le=Ft);D!==$||Le||(Le=Pi),(Kt=M.charSpace||Xr)!==void 0&&(Me+=tt(U(Kt))+` Tc +`,this.setCharSpace(this.getCharSpace()||0)),(Xe=M.horizontalScale)!==void 0&&(Me+=tt(100*Xe)+` Tz +`),M.lang;var xn=-1,Ro=M.renderingMode!==void 0?M.renderingMode:M.stroke,na=Ne.internal.getCurrentPageInfo().pageContext;switch(Ro){case 0:case!1:case`fill`:xn=0;break;case 1:case!0:case`stroke`:xn=1;break;case 2:case`fillThenStroke`:xn=2;break;case 3:case`invisible`:xn=3;break;case 4:case`fillAndAddForClipping`:xn=4;break;case 5:case`strokeAndAddPathForClipping`:xn=5;break;case 6:case`fillThenStrokeAndAddToPathForClipping`:xn=6;break;case 7:case`addToPathForClipping`:xn=7}var Bo=na.usedRenderingMode!==void 0?na.usedRenderingMode:-1;xn!==-1?Me+=xn+` Tr +`:Bo!==-1&&(Me+=`0 Tr +`),xn!==-1&&(na.usedRenderingMode=xn),Ct=M.align||`left`;var Zn,xr=vt*pn,qa=Ne.internal.pageSize.getWidth(),ia=oe[Rt];Kt=M.charSpace||Xr,te=M.maxWidth||0,de=Object.assign({autoencode:!0,noBOM:!0},M.flags);var Ar=[],za=function(Ee){return Ne.getStringUnitWidth(Ee,{font:ia,charSpace:Kt,fontSize:vt,doKerning:!1})*vt/Ti};if(Object.prototype.toString.call(h)===`[object Array]`){var An;gt=br(h),Ct!==`left`&&(Zn=gt.map(za));var En,ra=0;if(Ct===`right`){b-=Zn[0],h=[],gn=gt.length;for(var Zi=0;Zi0?(te-Zn[Je])/Ha:0;Je`:`)`),Sr=parseFloat(gt[mn][1]),kr=parseFloat(gt[mn][2]);break;case 0:Yi=(je?`<`:`(`)+gt[mn]+(je?`>`:`)`),Sr=Ii(b),kr=Ci(E)}Ar!==void 0&&Ar[mn]!==void 0&&(Ki=Ar[mn]+` Tw +`),mn===0?h.push(Ki+sa(Sr,kr,Le)+Yi):Ri===0?h.push(Ki+Yi):Ri===1&&h.push(Ki+sa(Sr,kr,Le)+Yi)}h=Ri===0?h.join(` Tj +T* `):h.join(` Tj +`),h+=` Tj +`;var bi=`BT +/`;return bi+=Rt+` `+vt+` Tf +`,bi+=tt(vt*pn)+` TL +`,bi+=pi+` +`,bi+=Me,bi+=h,P(bi+=`ET`),L[Rt]=!0,Ne};var js=p.__private__.clip=p.clip=function(h){return P(h===`evenodd`?`W*`:`W`),this};p.clipEvenOdd=function(){return js(`evenodd`)},p.__private__.discardPath=p.discardPath=function(){return P(`n`),this};var di=p.__private__.isValidStyle=function(h){var b=!1;return[void 0,null,`S`,`D`,`F`,`DF`,`FD`,`f`,`f*`,`B`,`B*`,`n`].indexOf(h)!==-1&&(b=!0),b};p.__private__.setDefaultPathOperation=p.setDefaultPathOperation=function(h){return di(h)&&(d=h),this};var Po=p.__private__.getStyle=p.getStyle=function(h){var b=d;switch(h){case`D`:case`S`:b=`S`;break;case`F`:b=`f`;break;case`FD`:case`DF`:b=`B`;break;case`f`:case`f*`:case`B`:case`B*`:b=h}return b},$r=p.close=function(){return P(`h`),this};p.stroke=function(){return P(`S`),this},p.fill=function(h){return Yr(`f`,h),this},p.fillEvenOdd=function(h){return Yr(`f*`,h),this},p.fillStroke=function(h){return Yr(`B`,h),this},p.fillStrokeEvenOdd=function(h){return Yr(`B*`,h),this};var Yr=function(h,b){ye(b)===`object`?Ds(b,h):P(h)},Oa=function(h){h===null||D===$&&h===void 0||(h=Po(h),P(h))};function Ms(h,b,E,M,V){var ot=new Na(b||this.boundingBox,E||this.xStep,M||this.yStep,this.gState,V||this.matrix);ot.stream=this.stream;return Hn(h+`$$`+this.cloneIndex+++`$$`,ot),ot}var Ds=function(h,b){var E=Pe[h.key],M=Ut[E];if(M instanceof Mr)P(`q`),P(Us(b)),M.gState&&p.setGState(M.gState),P(h.matrix.toString()+` cm`),P(`/`+E+` sh`),P(`Q`);else if(M instanceof Na){var V=new Vt(1,0,0,-1,0,mr());h.matrix&&(V=V.multiply(h.matrix||Pi),E=Ms.call(M,h.key,h.boundingBox,h.xStep,h.yStep,V).id),P(`q`),P(`/Pattern cs`),P(`/`+E+` scn`),M.gState&&p.setGState(M.gState),P(b),P(`Q`)}},Us=function(h){switch(h){case`f`:case`F`:case`n`:return`W n`;case`f*`:return`W* n`;case`B`:case`S`:return`W S`;case`B*`:return`W* S`}},Hi=p.moveTo=function(h,b){return P(tt(U(h))+` `+tt(q(b))+` m`),this},Eo=p.lineTo=function(h,b){return P(tt(U(h))+` `+tt(q(b))+` l`),this},Wi=p.curveTo=function(h,b,E,M,V,ot){return P([tt(U(h)),tt(q(b)),tt(U(E)),tt(q(M)),tt(U(V)),tt(q(ot)),`c`].join(` `)),this};p.__private__.line=p.line=function(h,b,E,M,V){if(isNaN(h)||isNaN(b)||isNaN(E)||isNaN(M)||!di(V))throw new Error(`Invalid arguments passed to jsPDF.line`);return D===Z?this.lines([[E-h,M-b]],h,b,[1,1],V||`S`):this.lines([[E-h,M-b]],h,b,[1,1]).stroke()},p.__private__.lines=p.lines=function(h,b,E,M,V,ot){var gt,Ft,Ct,Kt,te,de,Xe,Le,Ne,Fe,je,Me;if(typeof h==`number`&&(Me=E,E=b,b=h,h=Me),M=M||[1,1],ot=ot||!1,isNaN(b)||isNaN(E)||!Array.isArray(h)||!Array.isArray(M)||!di(V)||typeof ot!=`boolean`)throw new Error(`Invalid arguments passed to jsPDF.lines`);for(Hi(b,E),gt=M[0],Ft=M[1],Kt=h.length,Fe=b,je=E,Ct=0;Ct=100&&o<=900&&o%100==0?o:400:/^\d00$/.test(o)?parseInt(o):o===`bold`?700:400:400})(t.weight),a=(function(o){return typeof fh[o=o||`normal`]==`number`?o:`normal`})(t.stretch);return{family:n,style:e,weight:i,stretch:a,src:t.src||[],ref:t.ref||{name:n,style:[a,e,i].join(` `)}}}function Mf(t,n,e,i){var a;for(a=e;a>=0&&a=0&&a>>1)&255}return a}function Yf(t,n,e){var i=t.length,a=[];a[0]=4;for(var o=0;o>o&f}function Kf(t,n,e,i){var a=e*i,o=Math.floor(a/8),f=16-(a-8*o+i),l=(1<>8&255;d.setUint8(m,L)}})(t,o,cu(t,o)&~(l<>7,f=1<<1+(7&a);t[n++],t[n++];var l=null,c=null;o&&(l=n,c=f,n+=3*f);var d=!0,m=[],A=0,L=null,p=0,T=null;for(this.width=e,this.height=i;d&&n=0))throw Error(`Invalid block size`);if(N===0)break;n+=N}break;case 249:if(t[n++]!==4||t[n+4]!==0)throw new Error(`Invalid graphics extension block.`);var O=t[n++];A=t[n++]|t[n++]<<8,L=t[n++],1&O||(L=null),p=O>>2&7,n++;break;case 254:for(;;){if(!((N=t[n++])>=0))throw Error(`Invalid block size`);if(N===0)break;n+=N}break;default:throw new Error(`Unknown graphic control label: 0x`+t[n-1].toString(16))}break;case 44:var B=t[n++]|t[n++]<<8,k=t[n++]|t[n++]<<8,Z=t[n++]|t[n++]<<8,$=t[n++]|t[n++]<<8,D=t[n++],lt=D>>6&1,_t=1<<1+(7&D),mt=l,tt=c,z=!1;D>>7&&(z=!0,mt=n,tt=_t,n+=3*_t);var et=n;for(n++;;){var N;if(!((N=t[n++])>=0))throw Error(`Invalid block size`);if(N===0)break;n+=N}m.push({x:B,y:k,width:Z,height:$,has_local_palette:z,palette_offset:mt,palette_size:tt,data_offset:et,data_length:n-et,transparent_index:L,interlaced:!!lt,delay:A,disposal:p});break;case 59:d=!1;break;default:throw new Error(`Unknown gif block: 0x`+t[n-1].toString(16))}this.numFrames=function(){return m.length},this.loopCount=function(){return T},this.frameInfo=function(F){if(F<0||F>=m.length)throw new Error(`Frame index out of range.`);return m[F]},this.decodeAndBlitFrameBGRA=function(F,U){var q=this.frameInfo(F),it=q.width*q.height;if(it>536870912)throw new Error(`Image dimensions exceed 512MB, which is too large.`);var ft=new Uint8Array(it);Xf(t,q.data_offset,ft,it);var pt=q.palette_offset,nt=q.transparent_index;nt===null&&(nt=256);var ut=q.width,At=e-ut,yt=ut,y=4*(q.y*e+q.x),R=4*((q.y+q.height)*e+q.x),j=y,G=4*At;q.interlaced===!0&&(G+=4*e*7);for(var Y=8,Q=0,rt=ft.length;Q=R&&(G=4*At+4*e*(Y-1),j=y+(ut+At)*(Y<<1),Y>>=1)),at===nt)j+=4;else{var dt=t[pt+3*at],xt=t[pt+3*at+1],St=t[pt+3*at+2];U[j++]=St,U[j++]=xt,U[j++]=dt,U[j++]=255}--yt}},this.decodeAndBlitFrameRGBA=function(F,U){var q=this.frameInfo(F),it=q.width*q.height;if(it>536870912)throw new Error(`Image dimensions exceed 512MB, which is too large.`);var ft=new Uint8Array(it);Xf(t,q.data_offset,ft,it);var pt=q.palette_offset,nt=q.transparent_index;nt===null&&(nt=256);var ut=q.width,At=e-ut,yt=ut,y=4*(q.y*e+q.x),R=4*((q.y+q.height)*e+q.x),j=y,G=4*At;q.interlaced===!0&&(G+=4*e*7);for(var Y=8,Q=0,rt=ft.length;Q=R&&(G=4*At+4*e*(Y-1),j=y+(ut+At)*(Y<<1),Y>>=1)),at===nt)j+=4;else{var dt=t[pt+3*at],xt=t[pt+3*at+1],St=t[pt+3*at+2];U[j++]=dt,U[j++]=xt,U[j++]=St,U[j++]=255}--yt}}}function Xf(t,n,e,i){for(var a=t[n++],o=1<>=c,m-=c,B!==o){if(B===f)break;for(var k=Bo;)$=T[$]>>8,++Z;var D=$;if(L+Z+(k!==B?1:0)>i)return void ke.log(`Warning, gif stream longer than expected.`);e[L++]=D;var lt=L+=Z;for(k!==B&&(e[L++]=D),$=k;Z--;)$=T[$],e[--lt]=255&$,$>>=8;O!==null&&l<4096&&(T[l++]=O<<8|D,l>=d+1&&c<12&&(++c,d=d<<1|1)),O=B}else l=f+1,d=(1<<(c=a+1))-1,O=null}return L!==i&&ke.log(`Warning, gif stream shorter than expected.`),e}function sh(t){var n,e,i,a,o,f=Math.floor,l=new Array(64),c=new Array(64),d=new Array(64),m=new Array(64),A=new Array(65535),L=new Array(65535),p=new Array(64),T=new Array(64),O=[],B=0,k=7,Z=new Array(64),$=new Array(64),D=new Array(64),lt=new Array(256),_t=new Array(2048),mt=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],tt=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],z=[0,1,2,3,4,5,6,7,8,9,10,11],et=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],N=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],F=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],U=[0,1,2,3,4,5,6,7,8,9,10,11],q=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],it=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function ft(y,R){for(var j=0,G=0,Y=new Array,Q=1;Q<=16;Q++){for(var rt=1;rt<=y[Q];rt++)Y[R[G]]=[],Y[R[G]][0]=j,Y[R[G]][1]=Q,G++,j++;j*=2}return Y}function pt(y){for(var R=y[0],j=y[1]-1;j>=0;)R&1<>8&255),nt(255&y)}function At(y,R,j,G,Y){for(var Q,rt=Y[0],at=Y[240],dt=(function(vt,Wt){var Et,qt,Dt,we,he,Jt,fe,ce,Rt,ne,jt=0;for(Rt=0;Rt<8;++Rt){Et=vt[jt],qt=vt[jt+1],Dt=vt[jt+2],we=vt[jt+3],he=vt[jt+4],Jt=vt[jt+5],fe=vt[jt+6];var He=Et+(ce=vt[jt+7]),ge=Et-ce,oe=qt+fe,se=qt-fe,Te=Dt+Jt,Ut=Dt-Jt,Pe=we+he,Zt=we-he,Qt=He+Pe,Re=He-Pe,le=oe+Te,Gt=oe-Te;vt[jt]=Qt+le,vt[jt+4]=Qt-le;var _e=.707106781*(Gt+Re);vt[jt+2]=Re+_e,vt[jt+6]=Re-_e;var cr=.382683433*((Qt=Zt+Ut)-(Gt=se+ge)),dn=.5411961*Qt+cr,Si=1.306562965*Gt+cr,li=.707106781*(le=Ut+se),Vt=ge+li,ki=ge-li;vt[jt+5]=ki+dn,vt[jt+3]=ki-dn,vt[jt+1]=Vt+Si,vt[jt+7]=Vt-Si,jt+=8}for(jt=0,Rt=0;Rt<8;++Rt){Et=vt[jt],qt=vt[jt+8],Dt=vt[jt+16],we=vt[jt+24],he=vt[jt+32],Jt=vt[jt+40],fe=vt[jt+48];var Pi=Et+(ce=vt[jt+56]),Hn=Et-ce,Wn=qt+fe,De=qt-fe,rn=Dt+Jt,sn=Dt-Jt,fr=we+he,zi=we-he,Jn=Pi+fr,hi=Pi-fr,Qn=Wn+rn,ti=Wn-rn;vt[jt]=Jn+Qn,vt[jt+32]=Jn-Qn;var Gn=.707106781*(ti+hi);vt[jt+16]=hi+Gn,vt[jt+48]=hi-Gn;var ur=.382683433*((Jn=zi+sn)-(ti=De+Hn)),ci=.5411961*Jn+ur,dr=1.306562965*ti+ur,zr=.707106781*(Qn=sn+De),Hr=Hn+zr,Wr=Hn-zr;vt[jt+40]=Wr+ci,vt[jt+24]=Wr-ci,vt[jt+8]=Hr+dr,vt[jt+56]=Hr-dr,jt++}for(Rt=0;Rt<64;++Rt)ne=vt[Rt]*Wt[Rt],p[Rt]=ne>0?ne+.5|0:ne-.5|0;return p})(y,R),xt=0;xt<64;++xt)T[mt[xt]]=dt[xt];var St=T[0]-j;j=T[0],St==0?pt(G[0]):(pt(G[L[Q=32767+St]]),pt(A[Q]));for(var kt=63;kt>0&&T[kt]==0;)kt--;if(kt==0)return pt(rt),j;for(var zt,P=1;P<=kt;){for(var Lt=P;T[P]==0&&P<=kt;)++P;var ae=P-Lt;if(ae>=16){zt=ae>>4;for(var Ht=1;Ht<=zt;++Ht)pt(at);ae&=15}Q=32767+T[P],pt(Y[(ae<<4)+L[Q]]),pt(A[Q]),P++}return kt!=63&&pt(rt),j}function yt(y){y=Math.min(Math.max(y,1),100),o!=y&&((function(R){for(var j=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],G=0;G<64;G++){var Y=f((j[G]*R+50)/100);Y=Math.min(Math.max(Y,1),255),l[mt[G]]=Y}for(var Q=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],rt=0;rt<64;rt++){var at=f((Q[rt]*R+50)/100);at=Math.min(Math.max(at,1),255),c[mt[rt]]=at}for(var dt=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],xt=0,St=0;St<8;St++)for(var kt=0;kt<8;kt++)d[xt]=1/(l[mt[xt]]*dt[St]*dt[kt]*8),m[xt]=1/(c[mt[xt]]*dt[St]*dt[kt]*8),xt++})(y<50?Math.floor(5e3/y):Math.floor(200-2*y)),o=y)}this.encode=function(y,R){R&&yt(R),O=new Array,B=0,k=7,ut(65496),ut(65504),ut(16),nt(74),nt(70),nt(73),nt(70),nt(0),nt(1),nt(1),nt(0),ut(1),ut(1),nt(0),nt(0),(function(){ut(65499),ut(132),nt(0);for(var qt=0;qt<64;qt++)nt(l[qt]);nt(1);for(var Dt=0;Dt<64;Dt++)nt(c[Dt])})(),(function(qt,Dt){ut(65472),ut(17),nt(8),ut(Dt),ut(qt),nt(3),nt(1),nt(17),nt(0),nt(2),nt(17),nt(1),nt(3),nt(17),nt(1)})(y.width,y.height),(function(){ut(65476),ut(418),nt(0);for(var qt=0;qt<16;qt++)nt(tt[qt+1]);for(var Dt=0;Dt<=11;Dt++)nt(z[Dt]);nt(16);for(var we=0;we<16;we++)nt(et[we+1]);for(var he=0;he<=161;he++)nt(N[he]);nt(1);for(var Jt=0;Jt<16;Jt++)nt(F[Jt+1]);for(var fe=0;fe<=11;fe++)nt(U[fe]);nt(17);for(var ce=0;ce<16;ce++)nt(q[ce+1]);for(var Rt=0;Rt<=161;Rt++)nt(it[Rt])})(),ut(65498),ut(12),nt(3),nt(1),nt(0),nt(2),nt(17),nt(3),nt(17),nt(0),nt(63),nt(0);var j=0,G=0,Y=0;B=0,k=7,this.encode.displayName=`_encode_`;for(var Q,rt,at,dt,xt,St,kt,zt,P,Lt=y.data,ae=y.width,Ht=y.height,vt=4*ae,Wt=0;Wt>3)*vt+(kt=4*(7&P)),Wt+zt>=Ht&&(St-=vt*(Wt+1+zt-Ht)),Q+kt>=vt&&(St-=Q+kt-vt+4),rt=Lt[St++],at=Lt[St++],dt=Lt[St++],Z[P]=(_t[rt]+_t[at+256|0]+_t[dt+512|0]>>16)-128,$[P]=(_t[rt+768|0]+_t[at+1024|0]+_t[dt+1280|0]>>16)-128,D[P]=(_t[rt+1280|0]+_t[at+1536|0]+_t[dt+1792|0]>>16)-128;j=At(Z,d,j,n,i),G=At($,m,G,e,a),Y=At(D,m,Y,e,a),Q+=32}Wt+=8}if(k>=0){var Et=[];Et[1]=k+1,Et[0]=(1<F;F++)if(z[et+F]!=N.charCodeAt(F))return!0;return!1}function i(z,et,N,F,U){for(var q=0;qq+1?[]:new et),!(it.length>>0;r&u;)u>>>=1;return u?(r&u-1)+u:r}function N(r,s,u,g,v){n(!(g%u));do r[s+(g-=u)]=v;while(0=v),512>=v)var w=o(512);else if((w=o(v))==null)return 0;return(function(_,x,S,I,H,J){var C,W,K=x,st=1<C;++C){if(X[C]>1<(ie-=X[C]))return 0;for(;0=C;++C,H<<=1){if(Pt+=ie<<=1,0>(ie-=X[C]))return 0;for(;0wt&&!(0>=(ct-=X[wt]));)++wt,ct<<=1;st+=Ot=1<<(ct=wt-S),_[x+(wt=Bt&bt)].g=ct+S,_[x+wt].value=K-x-wt}I.g=C-S,I.value=J[W++],N(_,K+(Bt>>S),H,Ot,I),Bt=et(Bt,C)}}return Pt!=2*ht[15]-1?0:st})(r,s,u,g,v,w)}function U(){this.value=this.g=0}function q(){this.value=this.g=0}function it(){this.G=f(5,U),this.H=o(5),this.jc=this.Qb=this.qb=this.nd=0,this.pd=f(ia,q)}function ft(r,s,u,g){n(r!=null),n(s!=null),n(2147483648>g),r.Ca=254,r.I=0,r.b=-8,r.Ka=0,r.oa=s,r.pa=u,r.Jd=s,r.Yc=u+g,r.Zc=4<=g?u+g-4+1:u,rt(r)}function pt(r,s){for(var u=0;0g),r.Sb=g,r.Ra=0,r.u=0,r.h=0,4>>=8,r.Ra+=r.oa[r.pa+r.bb]<>>0,++r.bb,r.u-=8;G(r)&&(r.h=1,r.u=0)}function yt(r,s){if(n(0<=s),!r.h&&s<=za){var u=j(r)&Ar[s];return r.u+=s,At(r),u}return r.h=1,r.u=0}function y(){this.b=this.Ca=this.I=0,this.oa=[],this.pa=0,this.Jd=[],this.Yc=0,this.Zc=[],this.Ka=0}function R(){this.Ra=0,this.oa=[],this.h=this.u=this.bb=this.Sb=this.pa=0}function j(r){return r.Ra>>>(r.u&An-1)>>>0}function G(r){return n(r.bb<=r.Sb),r.h||r.bb==r.Sb&&r.u>An}function Y(r,s){r.u=s,r.h=G(r)}function Q(r){r.u>=En&&(n(r.u>=En),At(r))}function rt(r){n(r!=null&&r.oa!=null),r.pa>>0,r.b+=8):(n(r!=null&&r.oa!=null),r.par.b&&rt(r);var g=r.b,v=u*s>>>8,w=(r.I>>>g>v)+0;for(w?(u-=v,r.I-=v+1<>>0):u=v+1,g=u,v=0;256<=g;)v+=8,g>>=8;return g=7^v+ra[g],r.b-=g,r.Ca=(u<>24&255,r[s+1]=u>>16&255,r[s+2]=u>>8&255,r[s+3]=255&u}function St(r,s){return r[s+0]|r[s+1]<<8}function kt(r,s){return St(r,s)|r[s+2]<<16}function zt(r,s){return St(r,s)|St(r,s+2)<<16}function P(r,s){var u=1<=v||0>=w?0:(u[0]=v,g[0]=w,1)}function vt(r,s){return r+(1<>>s}function Wt(r,s){return((4278255360&r)+(4278255360&s)>>>0&4278255360)+((16711935&r)+(16711935&s)>>>0&16711935)>>>0}function Et(r,s){z[s]=function(u,g,v,w,_,x,S){var I;for(I=0;I<_;++I){var H=z[r](x[S+I-1],v,w+I);x[S+I]=Wt(u[g+I],H)}}}function qt(){this.ud=this.hd=this.jd=0}function Dt(r,s){return((4278124286&(r^s))>>>1)+(r&s)>>>0}function we(r){return 0<=r&&256>r?r:0>r?0:255>1))}function Jt(r,s,u){return Math.abs(s-u)-Math.abs(r-u)}function fe(r,s,u,g,v,w,_){for(g=w[_-1],u=0;u>8&255,S=16711935&(S=(S=16711935&_)+((x<<16)+x));g[v+w]=(4278255360&_)+S>>>0}}function Rt(r,s){s.jd=255&r,s.hd=r>>8&255,s.ud=r>>16&255}function ne(r,s,u,g,v,w){var _;for(_=0;_>>8,I=x,H=255&(H=(H=x>>>16)+((r.jd<<24>>24)*(S<<24>>24)>>>5));I=255&(I=(I+=(r.hd<<24>>24)*(S<<24>>24)>>>5)+((r.ud<<24>>24)*(H<<24>>24)>>>5)),v[w+_]=(4278255360&x)+(H<<16)+I}}function jt(r,s,u,g,v){z[s]=function(w,_,x,S,I,H,J,C,W){for(S=J;S>w.b,W=w.Ea,K=w.K[0],st=w.w;if(8>C)for(w=(1<>=C}else z[`VP8LMapColor`+u](S,I,K,st,H,J,_,x,W)}}function He(r,s,u,g,v){for(u=s+u;s>16&255,g[v++]=w>>8&255,g[v++]=255&w}}function ge(r,s,u,g,v){for(u=s+u;s>16&255,g[v++]=w>>8&255,g[v++]=255&w,g[v++]=w>>24&255}}function oe(r,s,u,g,v){for(u=s+u;s>16&240|_>>12&15,_=240&_|_>>28&15;g[v++]=w,g[v++]=_}}function se(r,s,u,g,v){for(u=s+u;s>16&248|_>>13&7,_=_>>5&224|_>>3&31;g[v++]=w,g[v++]=_}}function Te(r,s,u,g,v){for(u=s+u;s>8&255,g[v++]=w>>16&255}}function Ut(r,s,u,g,v,w){if(w==0)for(u=s+u;s>24|w[1]>>8&65280|w[2]<<8&16711680|w[3]<<24)>>>0),v+=32;else i(g,v,r,s,u)}function Pe(r,s){z[s][0]=z[r+`0`],z[s][1]=z[r+`1`],z[s][2]=z[r+`2`],z[s][3]=z[r+`3`],z[s][4]=z[r+`4`],z[s][5]=z[r+`5`],z[s][6]=z[r+`6`],z[s][7]=z[r+`7`],z[s][8]=z[r+`8`],z[s][9]=z[r+`9`],z[s][10]=z[r+`10`],z[s][11]=z[r+`11`],z[s][12]=z[r+`12`],z[s][13]=z[r+`13`],z[s][14]=z[r+`0`],z[s][15]=z[r+`0`]}function Zt(r){return r==tl||r==el||r==Ho||r==nl}function Qt(){this.eb=[],this.size=this.A=this.fb=0}function Re(){this.y=[],this.f=[],this.ea=[],this.F=[],this.Tc=this.Ed=this.Cd=this.Fd=this.lb=this.Db=this.Ab=this.fa=this.J=this.W=this.N=this.O=0}function le(){this.Rd=this.height=this.width=this.S=0,this.f={},this.f.RGBA=new Qt,this.f.kb=new Re,this.sd=null}function Gt(){this.width=[0],this.height=[0],this.Pd=[0],this.Qd=[0],this.format=[0]}function _e(){this.Id=this.fd=this.Md=this.hb=this.ib=this.da=this.bd=this.cd=this.j=this.v=this.Da=this.Sd=this.ob=0}function cr(r){return alert(`todo:WebPSamplerProcessPlane`),r.T}function dn(r,s){var u=r.T,g=s.ba.f.RGBA,v=g.eb,w=g.fb+r.ka*g.A,_=Yn[s.ba.S],x=r.y,S=r.O,I=r.f,H=r.N,J=r.ea,C=r.W,W=s.cc,K=s.dc,st=s.Mc,X=s.Nc,ht=r.ka,ct=r.ka+r.T,wt=r.U,bt=wt+1>>1;for(ht==0?_(x,S,null,null,I,H,J,C,I,H,J,C,v,w,null,null,wt):(_(s.ec,s.fc,x,S,W,K,st,X,I,H,J,C,v,w-g.A,v,w,wt),++u);ht+2u,v=u==Uo||u==qo||u==zo||u==Qs||u==12||Zt(u);if(s.memory=null,s.Ib=null,s.Jb=null,s.Nd=null,!Zn(s.Oa,r,v?11:12))return 0;if(v&&Zt(u)&&Ti(),r.da)alert(`todo:use_scaling`);else{if(g){if(s.Ib=cr,r.Kb){if(u=r.U+1>>1,s.memory=o(r.U+2*u),s.memory==null)return 0;s.ec=s.memory,s.fc=0,s.cc=s.ec,s.dc=s.fc+r.U,s.Mc=s.cc,s.Nc=s.dc+u,s.Ib=dn,Ti()}}else alert(`todo:EmitYUV`);v&&(s.Jb=Si,g&&Me())}if(g&&!Rh){for(r=0;256>r;++r)Cu[r]=89858*(r-128)+Go>>Wo,Tu[r]=-22014*(r-128)+Go,Ou[r]=-45773*(r-128),Fu[r]=113618*(r-128)+Go>>Wo;for(r=$a;r>Wo,Ru[r-$a]=fi(s,255),Bu[r-$a]=fi(s+8>>4,15);Rh=1}return 1}function Vt(r){var s=r.ma,u=r.U,g=r.T;return n(!(1&r.ka)),0>=u||0>=g?0:(u=s.Ib(r,s),s.Jb!=null&&s.Jb(r,s,u),s.Dc+=u,1)}function ki(r){r.ma.memory=null}function Pi(r,s,u,g){return yt(r,8)!=47?0:(s[0]=yt(r,14)+1,u[0]=yt(r,14)+1,g[0]=yt(r,1),yt(r,3)!=0?0:!r.h)}function Hn(r,s){if(4>r)return r+1;var u=r-2>>1;return(2+(1&r)<>4)*r+(8-(15&u)))?u:1;var u}function De(r,s,u){var g=j(u),v=r[s+=255&g].g-8;return 0>>0,n(8>=u.g),r.g}function sn(r,s,u){var g=r.xc;return n((s=g==0?0:r.vc[r.md*(u>>g)+(s>>g)])>Ot.b)*Pt;stwt&&(Tt=wt),(0,ei[ue[tn++]>>8&15])(C,W+ +re,ht,ct+re-wt,Tt-re,ht,ct+re),re=Tt}W+=wt,ct+=wt,++st&Bt||(Ot+=Pt)}J!=I.nc&&i(S,x-K,S,x+(J-H-1)*K,K);break;case 1:for(K=C,X=W,wt=(C=I.Ea)-(ct=C&~(ht=(W=1<>I.b)*st;H=v),0w.o&&(g=w.o),u=g?u=0:(v[0]+=4*w.v,w.ka=u-w.j,w.U=w.va-w.v,w.T=g-u,u=1),u){if(x=x[0],11>(u=r.ca).S){var H=u.f.RGBA,J=(g=u.S,v=w.U,w=w.T,I=H.eb,H.A),C=w;for(H=H.fb+r.Ma*H.A;0g){var v=r.l.width,w=u.ca,_=u.tb+v*g,x=r.V,S=r.Ba+r.c*g,I=r.gc;n(r.ab==1),n(I[0].hc==3),Xs(I[0],g,s,x,S,w,_),hi(u,g,s,w,_,v)}r.C=r.Ma=s}function ti(r,s,u,g,v,w,_){var x=r.$/g,S=r.$%g,I=r.m,H=r.s,J=u+r.$,C=J;v=u+g*v;var W=u+g*w,K=280+H.ua,st=r.Pb?x:16777216,X=0=st){var Bt=J-u;n((st=r).Pb),st.wd=st.m,st.xd=Bt,0ie.g?(Y(bt,bt.u+ie.g),Bt[Pt]=ie.value,bt=0):(Y(bt,bt.u+ie.g-256),n(256<=ie.value),bt=ie.value),bt==0&&(wt=!0)}else bt=De(ct.G[0],ct.H[0],I);if(I.h)break;if(wt||256>bt){if(!wt)if(ct.nd)s[J]=(ct.qb|bt<<8)>>>0;else{if(Q(I),wt=De(ct.G[1],ct.H[1],I),Q(I),Bt=De(ct.G[2],ct.H[2],I),Pt=De(ct.G[3],ct.H[3],I),I.h)break;s[J]=(Pt<<24|wt<<16|bt<<8|Bt)>>>0}if(wt=!1,++J,++S>=g&&(S=0,++x,_!=null&&x<=w&&!(x%16)&&_(r,x),X!=null))for(;C>>X.Mb]=bt}else if(280>bt){if(bt=Hn(bt-256,I),Bt=De(ct.G[4],ct.H[4],I),Q(I),Bt=Wn(g,Bt=Hn(Bt,I)),I.h)break;if(J-u=g;)S-=g,++x,_!=null&&x<=w&&!(x%16)&&_(r,x);if(n(J<=v),S&ht&&(ct=sn(H,S,x)),X!=null)for(;C>>X.Mb]=bt}else{if(!(bt>>X.Mb]=bt;bt=J,n(!(wt>>>(Bt=X).Xa)),s[bt]=Bt.X[wt],wt=!0}wt||n(I.h==G(I))}if(r.Pb&&I.h&&Jw?w:x),r.a=0,r.$=J-u}return 1}return r.a=3,0}function Gn(r){n(r!=null),r.vc=null,r.yc=null,r.Ya=null;var s=r.Wa;s!=null&&(s.X=null),r.vb=null,n(r!=null)}function ur(){var r=new Ft;return r==null?null:(r.a=0,r.xb=Eh,Pe(`Predictor`,`VP8LPredictors`),Pe(`Predictor`,`VP8LPredictors_C`),Pe(`PredictorAdd`,`VP8LPredictorsAdd`),Pe(`PredictorAdd`,`VP8LPredictorsAdd_C`),aa=ce,Lr=ne,Ha=He,Wa=ge,oa=oe,Sr=se,kr=Te,z.VP8LMapColor32b=Je,z.VP8LMapColor8b=mi,r)}function ci(r,s,u,g,v){var w=1,_=[r],x=[s],S=g.m,I=g.s,H=null,J=0;t:for(;;){if(u)for(;w&&yt(S,1);){var C=_,W=x,K=g,st=1,X=K.m,ht=K.gc[K.ab],ct=yt(X,2);if(K.Oc&1<=K.ab),ct){case 0:case 1:ht.b=yt(X,3)+2,st=ci(vt(ht.Ea,ht.b),vt(ht.nc,ht.b),0,K,ht.K),ht.K=ht.K[0];break;case 3:var wt,bt=yt(X,8)+1,Bt=16>Ot.b),tn=o(ue);if(tn==null)wt=0;else{var re=Ot.K[0],Tt=Ot.w;for(tn[0]=Ot.K[0][0],Pt=1;Pt<1*ie;++Pt)tn[Pt]=Wt(re[Tt+Pt],tn[Pt-1]);for(;Pt<4*ue;++Pt)tn[Pt]=0;Ot.K[0]=null,Ot.K[0]=tn,wt=1}}st=wt;break;case 2:break;default:n(0)}w=st}}if(_=_[0],x=x[0],w&&yt(S,1)&&!(w=1<=(J=yt(S,4))&&11>=J)){g.a=3;break t}var Nt;if(Nt=w)e:{var Ge,ee,pe,Oe=g,hn=_,Nn=x,Ue=J,bn=u,Ln=Oe.m,en=Oe.s,me=[null],xe=1,qe=0,Ae=vu[Ue];n:for(;;){if(bn&&yt(Ln,1)){var cn=yt(Ln,3)+2,ii=vt(hn,cn),Ve=vt(Nn,cn),In=ii*Ve;if(!ci(ii,Ve,0,Oe,me))break n;for(me=me[0],en.xc=cn,Ge=0;Ge>8&65535;me[Ge]=Se,Se>=xe&&(xe=Se+1)}}if(Ln.h)break n;for(ee=0;5>ee;++ee){var nn=kh[ee];!ee&&0=Sn),Mn=jn;var Cn=o(qe);if(Mn==null||Cn==null||Bn==null){Oe.a=1;break n}var Dn=Bn;for(Ge=pe=0;Geee;++ee){nn=kh[ee],Un[ee]=Dn,ri[ee]=pe,!ee&&0Xo)break i}else ll=Xo;for(Ka=0;Kaha)zh[Ka++]=ha,ha!=0&&(Hh=ha);else{var Vu=ha==16,Vh=ha-16,Zu=pu[Vh],Zh=yt(tr,du[Vh])+Zu;if(Ka+Zh>Xo)break i;for(var $u=Vu?Hh:0;0=ee){var Xa,cl=Cn[0];for(Xa=1;Xacl&&(cl=Cn[Xa]);fn+=cl}}if(Ce.nd=Mi,Ce.Qb=0,Mi&&(Ce.qb=(Un[3][ri[3]+0].value<<24|Un[1][ri[1]+0].value<<16|Un[2][ri[2]+0].value)>>>0,Pr==0&&256>Un[0][ri[0]+0].value&&(Ce.Qb=1,Ce.qb+=Un[0][ri[0]+0].value<<8)),Ce.jc=!Ce.Qb&&6>fn,Ce.jc){var Jo,Di=Ce;for(Jo=0;Jo>=rn(Qo,8,nr),er>>=rn(Di.G[1][Di.H[1]+er],16,nr),er>>=rn(Di.G[2][Di.H[2]+er],0,nr),rn(Di.G[3][Di.H[3]+er],24,nr))}}}en.vc=me,en.Wb=xe,en.Ya=Mn,en.yc=Bn,Nt=1;break e}Nt=0}if(!(w=Nt)){g.a=3;break t}if(0g+1?[]:0),!(v.lengthr?0:r>s?s:r}function Gr(){this.T=this.U=this.ka=this.height=this.width=0,this.y=[],this.f=[],this.ea=[],this.Rc=this.fa=this.W=this.N=this.O=0,this.ma=`void`,this.put=`VP8IoPutHook`,this.ac=`VP8IoSetupHook`,this.bc=`VP8IoTeardownHook`,this.ha=this.Kb=0,this.data=[],this.hb=this.ib=this.da=this.o=this.j=this.va=this.v=this.Da=this.ob=this.w=0,this.F=[],this.J=0}function Ts(){var r=new Lo;return r!=null&&(r.a=0,r.sc=`OK`,r.cb=0,r.Xb=0,Za||(Za=Vr)),r}function Ke(r,s,u){return r.a==0&&(r.a=s,r.sc=u,r.cb=0),0}function So(r,s,u){return 3<=u&&r[s+0]==157&&r[s+1]==1&&r[s+2]==42}function ui(r,s){if(r==null)return 0;if(r.a=0,r.sc=`OK`,s==null)return Ke(r,2,`null VP8Io passed to VP8GetHeaders()`);var u=s.data,g=s.w,v=s.ha;if(4>v)return Ke(r,7,`Truncated header.`);var w=u[g+0]|u[g+1]<<8|u[g+2]<<16,_=r.Od;if(_.Rb=!(1&w),_.td=w>>1&7,_.yd=w>>4&1,_.ub=w>>5,3<_.td)return Ke(r,3,`Incorrect keyframe parameters.`);if(!_.yd)return Ke(r,4,`Frame not displayable.`);g+=3,v-=3;var x=r.Kc;if(_.Rb){if(7>v)return Ke(r,7,`cannot parse picture header`);if(!So(u,g,v))return Ke(r,3,`Bad code word`);x.c=16383&(u[g+4]<<8|u[g+3]),x.Td=u[g+4]>>6,x.i=16383&(u[g+6]<<8|u[g+5]),x.Ud=u[g+6]>>6,g+=7,v-=7,r.za=x.c+15>>4,r.Ub=x.i+15>>4,s.width=x.c,s.height=x.i,s.Da=0,s.j=0,s.v=0,s.va=s.width,s.o=s.height,s.da=0,s.ib=s.width,s.hb=s.height,s.U=s.width,s.T=s.height,a((w=r.Pa).jb,0,255,w.jb.length),n((w=r.Qa)!=null),w.Cb=0,w.Bb=0,w.Fb=1,a(w.Zb,0,0,w.Zb.length),a(w.Lb,0,0,w.Lb)}if(_.ub>v)return Ke(r,7,`bad partition length`);ft(w=r.m,u,g,_.ub),g+=_.ub,v-=_.ub,_.Rb&&(x.Ld=at(w),x.Kd=at(w)),x=r.Qa;var S,I=r.Pa;if(n(w!=null),n(x!=null),x.Cb=at(w),x.Cb){if(x.Bb=at(w),at(w)){for(x.Fb=at(w),S=0;4>S;++S)x.Zb[S]=at(w)?nt(w,7):0;for(S=0;4>S;++S)x.Lb[S]=at(w)?nt(w,6):0}if(x.Bb)for(S=0;3>S;++S)I.jb[S]=at(w)?pt(w,8):255}else x.Bb=0;if(w.Ka)return Ke(r,3,`cannot parse segment header`);if((x=r.ed).zd=at(w),x.Tb=pt(w,6),x.wb=pt(w,3),x.Pc=at(w),x.Pc&&at(w)){for(I=0;4>I;++I)at(w)&&(x.vd[I]=nt(w,6));for(I=0;4>I;++I)at(w)&&(x.od[I]=nt(w,6))}if(r.L=x.Tb==0?0:x.zd?1:2,w.Ka)return Ke(r,3,`cannot parse filter header`);var H=v;if(v=S=g,g=S+H,x=H,r.Xb=(1<x&&(J=x),ft(r.Jc[+H],u,S,J),S+=J,x-=J,v+=3}ft(r.Jc[+I],u,S,x),u=SJ;++J){if(H.Cb){var C=H.Zb[J];H.Fb||(C+=u)}else{if(0>16,8>W.Eb[1]&&(W.Eb[1]=8),W.Qc[0]=il[fi(C+I,117)],W.Qc[1]=rl[fi(C+S,127)],W.lc=C+S}if(!_.Rb)return Ke(r,4,`Not a key frame.`);for(at(w),_=r.Pa,u=0;4>u;++u){for(v=0;8>v;++v)for(g=0;3>g;++g)for(x=0;11>x;++x)I=dt(w,Nu[u][v][g][x])?pt(w,8):xu[u][v][g][x],_.Wc[u][v].Yb[g][x]=I;for(v=0;17>v;++v)_.Xc[u][v]=_.Wc[u][Lu[v]]}return r.kc=at(w),r.kc&&(r.Bd=pt(w,8)),r.cb=1}function Vr(r,s,u,g,v,w,_){var x=s[v].Yb[u];for(u=0;16>v;++v){if(!dt(r,x[u+0]))return v;for(;!dt(r,x[u+1]);)if(x=s[++v].Yb[0],u=0,v==16)return 16;var S=s[v+1].Yb;if(dt(r,x[u+2])){var I=r,H=0;if(dt(I,(C=x)[(J=u)+3]))if(dt(I,C[J+6])){for(x=0,J=2*(H=dt(I,C[J+8]))+(C=dt(I,C[J+9+H])),H=0,C=_u[J];C[x];++x)H+=H+dt(I,C[x]);H+=3+(8<(I=r).b&&rt(I);var J,C=I.b,W=(J=I.Ca>>1)-(I.I>>C)>>31;--I.b,I.Ca+=W,I.Ca|=1,I.I-=(J+1&W)<>3),r[s+u+32*g]=-256&v?0>v?0:255:v}function Zr(r,s,u,g,v,w){Tn(r,s,0,u,g+v),Tn(r,s,1,u,g+w),Tn(r,s,2,u,g-w),Tn(r,s,3,u,g-v)}function Ei(r){return(20091*r>>16)+r}function ln(r,s,u,g){var v,w=0,_=o(16);for(v=0;4>v;++v){var x=r[s+0]+r[s+8],S=r[s+0]-r[s+8],I=(35468*r[s+4]>>16)-Ei(r[s+12]),H=Ei(r[s+4])+(35468*r[s+12]>>16);_[w+0]=x+H,_[w+1]=S+I,_[w+2]=S-I,_[w+3]=x-H,w+=4,s++}for(v=w=0;4>v;++v)x=(r=_[w+0]+4)+_[w+8],S=r-_[w+8],I=(35468*_[w+4]>>16)-Ei(_[w+12]),Tn(u,g,0,0,x+(H=Ei(_[w+4])+(35468*_[w+12]>>16))),Tn(u,g,1,0,S+I),Tn(u,g,2,0,S-I),Tn(u,g,3,0,x-H),w++,g+=32}function ko(r,s,u,g){var v=r[s+0]+4,w=35468*r[s+4]>>16,_=Ei(r[s+4]),x=35468*r[s+1]>>16;Zr(u,g,0,v+_,r=Ei(r[s+1]),x),Zr(u,g,1,v+w,r,x),Zr(u,g,2,v-w,r,x),Zr(u,g,3,v-_,r,x)}function Rs(r,s,u,g,v){ln(r,s,u,g),v&&ln(r,s+16,u,g+4)}function Bs(r,s,u,g){Ri(r,s+0,u,g,1),Ri(r,s+32,u,g+128,1)}function js(r,s,u,g){var v;for(r=r[s+0]+4,v=0;4>v;++v)for(s=0;4>s;++s)Tn(u,g,s,v,r)}function di(r,s,u,g){r[s+0]&&mn(r,s+0,u,g),r[s+16]&&mn(r,s+16,u,g+4),r[s+32]&&mn(r,s+32,u,g+128),r[s+48]&&mn(r,s+48,u,g+128+4)}function Po(r,s,u,g){var v,w=o(16);for(v=0;4>v;++v){var _=r[s+0+v]+r[s+12+v],x=r[s+4+v]+r[s+8+v],S=r[s+4+v]-r[s+8+v],I=r[s+0+v]-r[s+12+v];w[0+v]=_+x,w[8+v]=_-x,w[4+v]=I+S,w[12+v]=I-S}for(v=0;4>v;++v)_=(r=w[0+4*v]+3)+w[3+4*v],x=w[1+4*v]+w[2+4*v],S=w[1+4*v]-w[2+4*v],I=r-w[3+4*v],u[g+0]=_+x>>3,u[g+16]=I+S>>3,u[g+32]=_-x>>3,u[g+48]=I-S>>3,g+=64}function $r(r,s,u){var g,v=s-32,w=Rn,_=255-r[v-1];for(g=0;gu;++u)i(r,s+32*u,r,s-32,16)}function Us(r,s){var u;for(u=16;0g;++g)a(s,u+32*g,r,16)}function Eo(r,s){var u,g=16;for(u=0;16>u;++u)g+=r[s-1+32*u]+r[s+u-32];Hi(g>>5,r,s)}function Wi(r,s){var u,g=8;for(u=0;16>u;++u)g+=r[s-1+32*u];Hi(g>>4,r,s)}function qs(r,s){var u,g=8;for(u=0;16>u;++u)g+=r[s+u-32];Hi(g>>4,r,s)}function pr(r,s){Hi(128,r,s)}function $t(r,s,u){return r+2*s+u+2>>2}function zs(r,s){var u,g=s-32;for(g=new Uint8Array([$t(r[g-1],r[g+0],r[g+1]),$t(r[g+0],r[g+1],r[g+2]),$t(r[g+1],r[g+2],r[g+3]),$t(r[g+2],r[g+3],r[g+4])]),u=0;4>u;++u)i(r,s+32*u,g,0,g.length)}function Hs(r,s){var u=r[s-1],g=r[s-1+32],v=r[s-1+64],w=r[s-1+96];xt(r,s+0,16843009*$t(r[s-1-32],u,g)),xt(r,s+32,16843009*$t(u,g,v)),xt(r,s+64,16843009*$t(g,v,w)),xt(r,s+96,16843009*$t(v,w,w))}function Ws(r,s){var u,g=4;for(u=0;4>u;++u)g+=r[s+u-32]+r[s-1+32*u];for(g>>=3,u=0;4>u;++u)a(r,s+32*u,g,4)}function Gs(r,s){var u=r[s-1+0],g=r[s-1+32],v=r[s-1+64],w=r[s-1-32],_=r[s+0-32],x=r[s+1-32],S=r[s+2-32],I=r[s+3-32];r[s+0+96]=$t(g,v,r[s-1+96]),r[s+1+96]=r[s+0+64]=$t(u,g,v),r[s+2+96]=r[s+1+64]=r[s+0+32]=$t(w,u,g),r[s+3+96]=r[s+2+64]=r[s+1+32]=r[s+0+0]=$t(_,w,u),r[s+3+64]=r[s+2+32]=r[s+1+0]=$t(x,_,w),r[s+3+32]=r[s+2+0]=$t(S,x,_),r[s+3+0]=$t(I,S,x)}function Vs(r,s){var u=r[s+1-32],g=r[s+2-32],v=r[s+3-32],w=r[s+4-32],_=r[s+5-32],x=r[s+6-32],S=r[s+7-32];r[s+0+0]=$t(r[s+0-32],u,g),r[s+1+0]=r[s+0+32]=$t(u,g,v),r[s+2+0]=r[s+1+32]=r[s+0+64]=$t(g,v,w),r[s+3+0]=r[s+2+32]=r[s+1+64]=r[s+0+96]=$t(v,w,_),r[s+3+32]=r[s+2+64]=r[s+1+96]=$t(w,_,x),r[s+3+64]=r[s+2+96]=$t(_,x,S),r[s+3+96]=$t(x,S,S)}function Ii(r,s){var u=r[s-1+0],g=r[s-1+32],v=r[s-1+64],w=r[s-1-32],_=r[s+0-32],x=r[s+1-32],S=r[s+2-32],I=r[s+3-32];r[s+0+0]=r[s+1+64]=w+_+1>>1,r[s+1+0]=r[s+2+64]=_+x+1>>1,r[s+2+0]=r[s+3+64]=x+S+1>>1,r[s+3+0]=S+I+1>>1,r[s+0+96]=$t(v,g,u),r[s+0+64]=$t(g,u,w),r[s+0+32]=r[s+1+96]=$t(u,w,_),r[s+1+32]=r[s+2+96]=$t(w,_,x),r[s+2+32]=r[s+3+96]=$t(_,x,S),r[s+3+32]=$t(x,S,I)}function Ci(r,s){var u=r[s+0-32],g=r[s+1-32],v=r[s+2-32],w=r[s+3-32],_=r[s+4-32],x=r[s+5-32],S=r[s+6-32],I=r[s+7-32];r[s+0+0]=u+g+1>>1,r[s+1+0]=r[s+0+64]=g+v+1>>1,r[s+2+0]=r[s+1+64]=v+w+1>>1,r[s+3+0]=r[s+2+64]=w+_+1>>1,r[s+0+32]=$t(u,g,v),r[s+1+32]=r[s+0+96]=$t(g,v,w),r[s+2+32]=r[s+1+96]=$t(v,w,_),r[s+3+32]=r[s+2+96]=$t(w,_,x),r[s+3+64]=$t(_,x,S),r[s+3+96]=$t(x,S,I)}function Zs(r,s){var u=r[s-1+0],g=r[s-1+32],v=r[s-1+64],w=r[s-1+96];r[s+0+0]=u+g+1>>1,r[s+2+0]=r[s+0+32]=g+v+1>>1,r[s+2+32]=r[s+0+64]=v+w+1>>1,r[s+1+0]=$t(u,g,v),r[s+3+0]=r[s+1+32]=$t(g,v,w),r[s+3+32]=r[s+1+64]=$t(v,w,w),r[s+3+64]=r[s+2+64]=r[s+0+96]=r[s+1+96]=r[s+2+96]=r[s+3+96]=w}function $s(r,s){var u=r[s-1+0],g=r[s-1+32],v=r[s-1+64],w=r[s-1+96],_=r[s-1-32],x=r[s+0-32],S=r[s+1-32],I=r[s+2-32];r[s+0+0]=r[s+2+32]=u+_+1>>1,r[s+0+32]=r[s+2+64]=g+u+1>>1,r[s+0+64]=r[s+2+96]=v+g+1>>1,r[s+0+96]=w+v+1>>1,r[s+3+0]=$t(x,S,I),r[s+2+0]=$t(_,x,S),r[s+1+0]=r[s+3+32]=$t(u,_,x),r[s+1+32]=r[s+3+64]=$t(g,u,_),r[s+1+64]=r[s+3+96]=$t(v,g,u),r[s+1+96]=$t(w,v,g)}function Kr(r,s){var u;for(u=0;8>u;++u)i(r,s+32*u,r,s-32,8)}function Ta(r,s){var u;for(u=0;8>u;++u)a(r,s,r[s-1],8),s+=32}function pi(r,s,u){var g;for(g=0;8>g;++g)a(s,u+32*g,r,8)}function Ys(r,s){var u,g=8;for(u=0;8>u;++u)g+=r[s+u-32]+r[s-1+32*u];pi(g>>4,r,s)}function Xr(r,s){var u,g=4;for(u=0;8>u;++u)g+=r[s+u-32];pi(g>>3,r,s)}function Ks(r,s){var u,g=4;for(u=0;8>u;++u)g+=r[s-1+32*u];pi(g>>3,r,s)}function Ra(r,s){pi(128,r,s)}function Gi(r,s,u){var g=r[s-u],v=r[s+0],w=3*(v-g)+Js[1020+r[s-2*u]-r[s+u]],_=Mo[112+(w+4>>3)];r[s-u]=Rn[255+g+Mo[112+(w+3>>3)]],r[s+0]=Rn[255+v-_]}function Ba(r,s,u,g){var v=r[s+0],w=r[s+u];return $n[255+r[s-2*u]-r[s-u]]>g||$n[255+w-v]>g}function gr(r,s,u,g){return 4*$n[255+r[s-u]-r[s+0]]+$n[255+r[s-2*u]-r[s+u]]<=g}function ja(r,s,u,g,v){var w=r[s-3*u],_=r[s-2*u],x=r[s-u],S=r[s+0],I=r[s+u],H=r[s+2*u],J=r[s+3*u];return 4*$n[255+x-S]+$n[255+_-I]>g?0:$n[255+r[s-4*u]-w]<=v&&$n[255+w-_]<=v&&$n[255+_-x]<=v&&$n[255+J-H]<=v&&$n[255+H-I]<=v&&$n[255+I-S]<=v}function Jr(r,s,u,g){var v=2*g+1;for(g=0;16>g;++g)gr(r,s+g,u,v)&&Gi(r,s+g,u)}function Ma(r,s,u,g){var v=2*g+1;for(g=0;16>g;++g)gr(r,s+g*u,1,v)&&Gi(r,s+g*u,1)}function Qr(r,s,u,g){var v;for(v=3;0>7,ht=18*ct+63>>7,ct=9*ct+63>>7;S[I-3*H]=Rn[255+S[I-3*H]+ct],S[I-2*H]=Rn[255+J+ht],S[I-H]=Rn[255+C+X],S[I+0]=Rn[255+W-X],S[I+H]=Rn[255+K-ht],S[I+2*H]=Rn[255+st-ct]}s+=g}}function Oi(r,s,u,g,v,w,_,x){for(w=2*w+1;0>3)],st=Mo[112+(st+3>>3)],X=K+1>>1;S[I-2*H]=Rn[255+S[I-2*H]+X],S[I-H]=Rn[255+J+st],S[I+0]=Rn[255+C-K],S[I+H]=Rn[255+W-X]}s+=g}}function Co(r,s,u,g,v,w){Fi(r,s,u,1,16,g,v,w)}function Fo(r,s,u,g,v,w){Fi(r,s,1,u,16,g,v,w)}function Oo(r,s,u,g,v,w){var _;for(_=3;0<_;--_)Oi(r,s+=4*u,u,1,16,g,v,w)}function mr(r,s,u,g,v,w){var _;for(_=3;0<_;--_)Oi(r,s+=4,1,u,16,g,v,w)}function To(r,s,u,g,v,w,_,x){Fi(r,s,v,1,8,w,_,x),Fi(u,g,v,1,8,w,_,x)}function h(r,s,u,g,v,w,_,x){Fi(r,s,1,v,8,w,_,x),Fi(u,g,1,v,8,w,_,x)}function b(r,s,u,g,v,w,_,x){Oi(r,s+4*v,v,1,8,w,_,x),Oi(u,g+4*v,v,1,8,w,_,x)}function E(r,s,u,g,v,w,_,x){Oi(r,s+4,1,v,8,w,_,x),Oi(u,g+4,1,v,8,w,_,x)}function M(){this.ba=new le,this.ec=[],this.cc=[],this.Mc=[],this.Dc=this.Nc=this.dc=this.fc=0,this.Oa=new _e,this.memory=0,this.Ib=`OutputFunc`,this.Jb=`OutputAlphaFunc`,this.Nd=`OutputRowFunc`}function V(){this.data=[],this.offset=this.kd=this.ha=this.w=0,this.na=[],this.xa=this.gb=this.Ja=this.Sa=this.P=0}function ot(){this.nc=this.Ea=this.b=this.hc=0,this.K=[],this.w=0}function gt(){this.ua=0,this.Wa=new ae,this.vb=new ae,this.md=this.xc=this.wc=0,this.vc=[],this.Wb=0,this.Ya=new it,this.yc=new U}function Ft(){this.xb=this.a=0,this.l=new Gr,this.ca=new le,this.V=[],this.Ba=0,this.Ta=[],this.Ua=0,this.m=new R,this.Pb=0,this.wd=new R,this.Ma=this.$=this.C=this.i=this.c=this.xd=0,this.s=new gt,this.ab=0,this.gc=f(4,ot),this.Oc=0}function Ct(){this.Lc=this.Z=this.$a=this.i=this.c=0,this.l=new Gr,this.ic=0,this.ca=[],this.tb=0,this.qd=null,this.rd=0}function Kt(r,s,u,g,v,w,_){for(r=r==null?0:r[s+0],s=0;s<_;++s)v[w+s]=r+u[g+s]&255,r=v[w+s]}function te(r,s,u,g,v,w,_){var x;if(r==null)Kt(null,null,u,g,v,w,_);else for(x=0;x<_;++x)v[w+x]=r[s+x]+u[g+x]&255}function de(r,s,u,g,v,w,_){if(r==null)Kt(null,null,u,g,v,w,_);else{var x,S=r[s+0],I=S,H=S;for(x=0;x<_;++x)I=H+(S=r[s+x])-I,H=u[g+x]+(-256&I?0>I?0:255:I)&255,I=S,v[w+x]=H}}function Xe(r,s,u,g){var v=s.width,w=s.o;if(n(r!=null&&s!=null),0>u||0>=g||u+g>w)return null;if(!r.Cc){if(r.ga==null){var _;if(r.ga=new Ct,(_=r.ga==null)||(_=s.width*s.o,n(r.Gb.length==0),r.Gb=o(_),r.Uc=0,r.Gb==null?_=0:(r.mb=r.Gb,r.nb=r.Uc,r.rc=null,_=1),_=!_),!_){_=r.ga;var x=r.Fa,S=r.P,I=r.qc,H=r.mb,J=r.nb,C=S+1,W=I-1,K=_.l;if(n(x!=null&&H!=null&&s!=null),Ji[0]=null,Ji[1]=Kt,Ji[2]=te,Ji[3]=de,_.ca=H,_.tb=J,_.c=s.width,_.i=s.height,n(0<_.c&&0<_.i),1>=I)s=0;else if(_.$a=3&x[S+0],_.Z=x[S+0]>>2&3,_.Lc=x[S+0]>>4&3,S=x[S+0]>>6&3,0>_.$a||1<_.$a||4<=_.Z||1<_.Lc||S)s=0;else if(K.put=Vt,K.ac=li,K.bc=ki,K.ma=_,K.width=s.width,K.height=s.height,K.Da=s.Da,K.v=s.v,K.va=s.va,K.j=s.j,K.o=s.o,_.$a)t:{n(_.$a==1),s=ur();e:for(;;){if(s==null){s=0;break t}if(n(_!=null),_.mc=s,s.c=_.c,s.i=_.i,s.l=_.l,s.l.ma=_,s.l.width=_.c,s.l.height=_.i,s.a=0,ut(s.m,x,C,W),!ci(_.c,_.i,1,s,null)||(s.ab==1&&s.gc[0].hc==3&&Jn(s.s)?(_.ic=1,x=s.c*s.i,s.Ta=null,s.Ua=0,s.V=o(x),s.Ba=0,s.V==null?(s.a=1,s=0):s=1):(_.ic=0,s=dr(s,_.c)),!s))break e;s=1;break t}_.mc=null,s=0}else s=W>=_.c*_.i;_=!s}if(_)return null;r.ga.Lc!=1?r.Ga=0:g=w-u}n(r.ga!=null),n(u+g<=w);t:{if(s=(x=r.ga).c,w=x.l.o,x.$a==0){if(C=r.rc,W=r.Vc,K=r.Fa,S=r.P+1+u*s,I=r.mb,H=r.nb+u*s,n(S<=r.P+r.qc),x.Z!=0)for(n(Ji[x.Z]!=null),_=0;_=s)s=1;else if(x.ic||Me(),x.ic){x=_.V,C=_.Ba,W=_.c;var st=_.i,X=(K=1,S=_.$/W,I=_.$%W,H=_.m,J=_.s,_.$),ht=W*st,ct=W*s,wt=J.wc,bt=X(st=De(bt.G[0],bt.H[0],H)))x[C+X]=st,++X,++I>=W&&(I=0,++S<=s&&!(S%16)&&Qn(_,S));else{if(!(280>st)){K=0;break e}st=Hn(st-256,H);var Bt,Pt=De(bt.G[4],bt.H[4],H);if(Q(H),!(X>=(Pt=Wn(W,Pt=Hn(Pt,H)))&&ht-X>=st)){K=0;break e}for(Bt=0;Bt=W;)I-=W,++S<=s&&!(S%16)&&Qn(_,S);Xs?s:S);break e}!K||H.h&&X=w&&(r.Cc=1),g=1}if(!g)return null;if(r.Cc&&((g=r.ga)!=null&&(g.mc=null),r.ga=null,0>23,x[S+4*_+1]=x[S+4*_+1]*J>>23,x[S+4*_+2]=x[S+4*_+2]*J>>23)}s+=w}}function Ne(r,s,u,g,v){for(;0>4)*S>>16;r[s+2*w+0]=(240&_|_>>4)*S>>16&240|(15&_|_<<4)*S>>16>>4&15,r[s+2*w+1]=240&I|x}s+=v}}function Fe(r,s,u,g,v,w,_,x){var S,I,H=255;for(I=0;I>8}function Me(){Va=Le,bh=Ne,vh=Fe,wh=je}function pn(r,s,u){z[r]=function(g,v,w,_,x,S,I,H,J,C,W,K,st,X,ht,ct,wt){var bt,Bt=wt-1>>1,Pt=x[S+0]|I[H+0]<<16,ie=J[C+0]|W[K+0]<<16;n(g!=null);var Ot=3*Pt+ie+131074>>2;for(s(g[v+0],255&Ot,Ot>>16,st,X),w!=null&&(Ot=3*ie+Pt+131074>>2,s(w[_+0],255&Ot,Ot>>16,ht,ct)),bt=1;bt<=Bt;++bt){var ue=x[S+bt]|I[H+bt]<<16,tn=J[C+bt]|W[K+bt]<<16,re=Pt+ue+ie+tn+524296,Tt=re+2*(ue+ie)>>3;Ot=Tt+Pt>>1,Pt=(re=re+2*(Pt+tn)>>3)+ue>>1,s(g[v+2*bt-1],255&Ot,Ot>>16,st,X+(2*bt-1)*u),s(g[v+2*bt-0],255&Pt,Pt>>16,st,X+(2*bt-0)*u),w!=null&&(Ot=re+ie>>1,Pt=Tt+tn>>1,s(w[_+2*bt-1],255&Ot,Ot>>16,ht,ct+(2*bt-1)*u),s(w[_+2*bt+0],255&Pt,Pt>>16,ht,ct+(2*bt+0)*u)),Pt=ue,ie=tn}1&wt||(Ot=3*Pt+ie+131074>>2,s(g[v+wt-1],255&Ot,Ot>>16,st,X+(wt-1)*u),w!=null&&(Ot=3*ie+Pt+131074>>2,s(w[_+wt-1],255&Ot,Ot>>16,ht,ct+(wt-1)*u)))}}function Ti(){Yn[Do]=ku,Yn[Uo]=Ih,Yn[Lh]=Pu,Yn[qo]=Ch,Yn[zo]=Fh,Yn[Qs]=Oh,Yn[Sh]=Eu,Yn[tl]=Ih,Yn[el]=Ch,Yn[Ho]=Fh,Yn[nl]=Oh}function Da(r){return r&~Iu?0>r?0:255:r>>Th}function br(r,s){return Da((19077*r>>8)+(26149*s>>8)-14234)}function vr(r,s,u){return Da((19077*r>>8)-(6419*s>>8)-(13320*u>>8)+8708)}function Vi(r,s){return Da((19077*r>>8)+(33050*s>>8)-17685)}function wr(r,s,u,g,v){g[v+0]=br(r,u),g[v+1]=vr(r,s,u),g[v+2]=Vi(r,s)}function ta(r,s,u,g,v){g[v+0]=Vi(r,s),g[v+1]=vr(r,s,u),g[v+2]=br(r,u)}function ea(r,s,u,g,v){var w=vr(r,s,u);s=w<<3&224|Vi(r,s)>>3,g[v+0]=248&br(r,u)|w>>5,g[v+1]=s}function gn(r,s,u,g,v){var w=240&Vi(r,s)|15;g[v+0]=240&br(r,u)|vr(r,s,u)>>4,g[v+1]=w}function _r(r,s,u,g,v){g[v+0]=255,wr(r,s,u,g,v+1)}function yr(r,s,u,g,v){ta(r,s,u,g,v),g[v+3]=255}function Ua(r,s,u,g,v){wr(r,s,u,g,v),g[v+3]=255}function gi(r,s,u){z[r]=function(g,v,w,_,x,S,I,H,J){for(var C=H+(-2&J)*u;H!=C;)s(g[v+0],w[_+0],x[S+0],I,H),s(g[v+1],w[_+0],x[S+0],I,H+u),v+=2,++_,++S,H+=2*u;1&J&&s(g[v+0],w[_+0],x[S+0],I,H)}}function xn(r,s,u){return u==0?r==0?s==0?6:5:s==0?4:0:u}function Ro(r,s,u,g,v){switch(r>>>30){case 3:Ri(s,u,g,v,0);break;case 2:Ki(s,u,g,v);break;case 1:mn(s,u,g,v)}}function na(r,s){var u,g,v=s.M,w=s.Nb,_=r.oc,x=r.pc+40,S=r.oc,I=r.pc+584,H=r.oc,J=r.pc+600;for(u=0;16>u;++u)_[x+32*u-1]=129;for(u=0;8>u;++u)S[I+32*u-1]=129,H[J+32*u-1]=129;for(0u;++u)i(_,x+32*u-4,_,x+32*u+12,4);for(u=-1;8>u;++u)i(S,I+32*u-4,S,I+32*u+4,4),i(H,J+32*u-4,H,J+32*u+4,4)}var W=r.Gd,K=r.Hd+g,st=C.ad,X=C.Hc;if(0=r.za-1?a(ht,ct,W[K].y[15],4):i(ht,ct,W[K+1].y,0,4)),u=0;4>u;u++)ht[ct+128+u]=ht[ct+256+u]=ht[ct+384+u]=ht[ct+0+u];for(u=0;16>u;++u,X<<=2)ht=_,ct=x+Bh[u],ni[C.Ob[u]](ht,ct),Ro(X,st,16*+u,ht,ct)}else if(ht=xn(g,v,C.Ob[0]),Xi[ht](_,x),X!=0)for(u=0;16>u;++u,X<<=2)Ro(X,st,16*+u,_,x+Bh[u]);for(u=C.Gc,ht=xn(g,v,C.Dd),ji[ht](S,I),ji[ht](H,J),X=st,ht=S,ct=I,255&(C=0|u)&&(170&C?sa(X,256,ht,ct):bi(X,256,ht,ct)),C=H,X=J,255&(u>>=8)&&(170&u?sa(st,320,C,X):bi(st,320,C,X)),vu;++u)i(W,K+u*r.R,_,x+32*u,16);for(u=0;8>u;++u)i(st,C+u*r.B,S,I+32*u,8),i(X,ht+u*r.B,H,J+32*u,8)}}function Bo(r,s,u,g,v,w,_,x,S){var I=[0],H=[0],J=0,C=S!=null?S.kd:0,W=S??new V;if(r==null||12>u)return 7;W.data=r,W.w=s,W.ha=u,s=[s],u=[u],W.gb=[W.gb];t:{var K=s,st=u,X=W.gb;if(n(r!=null),n(st!=null),n(X!=null),X[0]=0,12<=st[0]&&!e(r,K[0],`RIFF`)){if(e(r,K[0]+8,`WEBP`)){X=3;break t}var ht=zt(r,K[0]+4);if(12>ht||4294967286st[0]-8){X=7;break t}X[0]=ht,K[0]+=12,st[0]-=12}X=0}if(X!=0)return X;for(ht=0X[0])X=7;else{if(!e(ct,st[0],`VP8X`)){if(zt(ct,st[0]+4)!=10){X=3;break t}if(18>X[0]){X=7;break t}var Pt=zt(ct,st[0]+8),ie=1+kt(ct,st[0]+12);if(2147483648<=ie*(ct=1+kt(ct,st[0]+15))){X=3;break t}Bt!=null&&(Bt[0]=Pt),wt!=null&&(wt[0]=ie),bt!=null&&(bt[0]=ct),st[0]+=18,X[0]-=18,Ot[0]=1}X=0}}if(J=J[0],K=K[0],X!=0)return X;if(st=!!(2&K),!ht&&J)return 3;if(w!=null&&(w[0]=!!(16&K)),_!=null&&(_[0]=st),x!=null&&(x[0]=0),_=I[0],K=H[0],J&&st&&S==null){X=0;break}if(4>u){X=7;break}if(ht&&J||!ht&&!J&&!e(r,s[0],`ALPH`)){u=[u],W.na=[W.na],W.P=[W.P],W.Sa=[W.Sa];t:{Pt=r,X=s,ht=u;var Ot=W.gb;wt=W.na,bt=W.P,Bt=W.Sa,ie=22,n(Pt!=null),n(ht!=null),ct=X[0];var ue=ht[0];for(n(wt!=null),n(Bt!=null),wt[0]=null,bt[0]=null,Bt[0]=0;;){if(X[0]=ct,ht[0]=ue,8>ue){X=7;break t}var tn=zt(Pt,ct+4);if(4294967286Ot){X=3;break t}if(!e(Pt,ct,`VP8 `)||!e(Pt,ct,`VP8L`)){X=0;break t}if(ue[0]ht[0])X=7;else{if(ct||ie){if(Ot=zt(Ot,Pt+4),12<=wt&&Ot>wt-12){X=3;break t}if(C&&Ot>ht[0]-8){X=7;break t}bt[0]=Ot,X[0]+=8,ht[0]-=8,Bt[0]=ie}else Bt[0]=5<=ht[0]&&Ot[Pt+0]==47&&!(Ot[Pt+4]>>5),bt[0]=ht[0];X=0}if(u=u[0],W.Ja=W.Ja[0],W.xa=W.xa[0],s=s[0],X!=0)break;if(4294967286u){X=7;break}x=_,C=K,st=w,r==null||5>u?r=0:5<=u&&r[s+0]==47&&!(r[s+4]>>5)?(ht=[0],Ot=[0],wt=[0],ut(bt=new R,r,s,u),Pi(bt,ht,Ot,wt)?(x!=null&&(x[0]=ht[0]),C!=null&&(C[0]=Ot[0]),st!=null&&(st[0]=wt[0]),r=1):r=0):r=0}else{if(10>u){X=7;break}x=K,r==null||10>u||!So(r,s+3,u-3)?r=0:(C=r[s+0]|r[s+1]<<8|r[s+2]<<16,st=16383&(r[s+7]<<8|r[s+6]),r=16383&(r[s+9]<<8|r[s+8]),1&C||3<(C>>1&7)||!(C>>4&1)||C>>5>=W.Ja||!st||!r?r=0:(_&&(_[0]=st),x&&(x[0]=r),r=1))}if(!r||(_=_[0],K=K[0],J&&(I[0]!=_||H[0]!=K)))return 3;S!=null&&(S[0]=W,S.offset=s-S.w,n(4294967286>s-S.w),n(S.offset==S.ha-u));break}return X==0||X==7&&J&&S==null?(w!=null&&(w[0]|=W.na!=null&&0u||(w&=-2,_&=-2),0>w||0>_||0>=x||0>=S||w+x>g||_+S>v))return 0;if(s.v=w,s.j=_,s.va=w+x,s.o=_+S,s.U=x,s.T=S,s.da=r!=null&&0r.S){var s=r.f.RGBA;s.fb+=(r.height-1)*s.A,s.A=-s.A}else s=r.f.kb,r=r.height,s.O+=(r-1)*s.fa,s.fa=-s.fa,s.N+=(r-1>>1)*s.Ab,s.Ab=-s.Ab,s.W+=(r-1>>1)*s.Db,s.Db=-s.Db,s.F!=null&&(s.J+=(r-1)*s.lb,s.lb=-s.lb);return 0}function qa(r,s,u,g){if(g==null||0>=r||0>=s)return 2;if(u!=null){if(u.Da){var v=u.cd,w=u.bd,_=-2&u.v,x=-2&u.j;if(0>_||0>x||0>=v||0>=w||_+v>r||x+w>s)return 2;r=v,s=w}if(u.da){if(!Ht(r,s,v=[u.ib],w=[u.hb]))return 2;r=v[0],s=w[0]}}g.width=r,g.height=s;t:{var S=g.width,I=g.height;if(r=g.S,0>=S||0>=I||!(r>=Do&&13>r))r=2;else{if(0>=g.Rd&&g.sd==null){_=w=v=s=0;var H=(x=S*jh[r])*I;if(11>r||(w=(I+1)/2*(s=(S+1)/2),r==12&&(_=(v=S)*I)),(I=o(H+2*w+_))==null){r=1;break t}g.sd=I,11>r?((S=g.f.RGBA).eb=I,S.fb=0,S.A=x,S.size=H):((S=g.f.kb).y=I,S.O=0,S.fa=x,S.Fd=H,S.f=I,S.N=0+H,S.Ab=s,S.Cd=w,S.ea=I,S.W=0+H+w,S.Db=s,S.Ed=w,r==12&&(S.F=I,S.J=0+H+2*w),S.Tc=_,S.lb=v)}if(s=1,v=g.S,w=g.width,_=g.height,v>=Do&&13>v)if(11>v)r=g.f.RGBA,s&=(x=Math.abs(r.A))*(_-1)+w<=r.size,s&=x>=w*jh[v],s&=r.eb!=null;else{r=g.f.kb,x=(w+1)/2,H=(_+1)/2,S=Math.abs(r.fa),I=Math.abs(r.Ab);var J=Math.abs(r.Db),C=Math.abs(r.lb),W=C*(_-1)+w;s&=S*(_-1)+w<=r.Fd,s&=I*(H-1)+x<=r.Cd,s=(s&=J*(H-1)+x<=r.Ed)&S>=w&I>=x&J>=x,s&=r.y!=null,s&=r.f!=null,s&=r.ea!=null,v==12&&(s&=C>=w,s&=W<=r.Tc,s&=r.F!=null)}else s=0;r=s?0:2}}return r!=0||u!=null&&u.fd&&(r=xr(g)),r}var ia=64,Ar=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215],za=24,An=32,En=8,ra=[0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7];Et(`Predictor0`,`PredictorAdd0`),z.Predictor0=function(){return 4278190080},z.Predictor1=function(r){return r},z.Predictor2=function(r,s,u){return s[u+0]},z.Predictor3=function(r,s,u){return s[u+1]},z.Predictor4=function(r,s,u){return s[u-1]},z.Predictor5=function(r,s,u){return Dt(Dt(r,s[u+1]),s[u+0])},z.Predictor6=function(r,s,u){return Dt(r,s[u-1])},z.Predictor7=function(r,s,u){return Dt(r,s[u+0])},z.Predictor8=function(r,s,u){return Dt(s[u-1],s[u+0])},z.Predictor9=function(r,s,u){return Dt(s[u+0],s[u+1])},z.Predictor10=function(r,s,u){return Dt(Dt(r,s[u-1]),Dt(s[u+0],s[u+1]))},z.Predictor11=function(r,s,u){var g=s[u+0];return 0>=Jt(g>>24&255,r>>24&255,(s=s[u-1])>>24&255)+Jt(g>>16&255,r>>16&255,s>>16&255)+Jt(g>>8&255,r>>8&255,s>>8&255)+Jt(255&g,255&r,255&s)?g:r},z.Predictor12=function(r,s,u){var g=s[u+0];return(we((r>>24&255)+(g>>24&255)-((s=s[u-1])>>24&255))<<24|we((r>>16&255)+(g>>16&255)-(s>>16&255))<<16|we((r>>8&255)+(g>>8&255)-(s>>8&255))<<8|we((255&r)+(255&g)-(255&s)))>>>0},z.Predictor13=function(r,s,u){var g=s[u-1];return(he((r=Dt(r,s[u+0]))>>24&255,g>>24&255)<<24|he(r>>16&255,g>>16&255)<<16|he(r>>8&255,g>>8&255)<<8|he(255&r,255&g))>>>0};var Zi=z.PredictorAdd0;z.PredictorAdd1=fe,Et(`Predictor2`,`PredictorAdd2`),Et(`Predictor3`,`PredictorAdd3`),Et(`Predictor4`,`PredictorAdd4`),Et(`Predictor5`,`PredictorAdd5`),Et(`Predictor6`,`PredictorAdd6`),Et(`Predictor7`,`PredictorAdd7`),Et(`Predictor8`,`PredictorAdd8`),Et(`Predictor9`,`PredictorAdd9`),Et(`Predictor10`,`PredictorAdd10`),Et(`Predictor11`,`PredictorAdd11`),Et(`Predictor12`,`PredictorAdd12`),Et(`Predictor13`,`PredictorAdd13`);var $i=z.PredictorAdd2;jt(`ColorIndexInverseTransform`,`MapARGB`,`32b`,function(r){return r>>8&255},function(r){return r}),jt(`VP8LColorIndexInverseTransformAlpha`,`MapAlpha`,`8b`,function(r){return r},function(r){return r>>8&255});var aa,Nr=z.ColorIndexInverseTransform,Je=z.MapARGB,Xs=z.VP8LColorIndexInverseTransformAlpha,mi=z.MapAlpha,ei=z.VP8LPredictorsAdd=[];ei.length=16,(z.VP8LPredictors=[]).length=16,(z.VP8LPredictorsAdd_C=[]).length=16,(z.VP8LPredictors_C=[]).length=16;var Lr,Ha,Wa,oa,Sr,kr,Yi,Ri,Ki,sa,mn,bi,Ee,Ie,We,Qe,Bi,Ga,la,jo,dh,ph,gh,mh,Va,bh,vh,wh,_h=o(511),yh=o(2041),xh=o(225),Ah=o(767),Nh=0,Js=yh,Mo=xh,Rn=Ah,$n=_h,Do=0,Uo=1,Lh=2,qo=3,zo=4,Qs=5,Sh=6,tl=7,el=8,Ho=9,nl=10,du=[2,3,7],pu=[3,3,11],kh=[280,256,256,256,40],gu=[0,1,1,1,0],mu=[17,18,0,1,2,3,4,5,16,6,7,8,9,10,11,12,13,14,15],bu=[24,7,23,25,40,6,39,41,22,26,38,42,56,5,55,57,21,27,54,58,37,43,72,4,71,73,20,28,53,59,70,74,36,44,88,69,75,52,60,3,87,89,19,29,86,90,35,45,68,76,85,91,51,61,104,2,103,105,18,30,102,106,34,46,84,92,67,77,101,107,50,62,120,1,119,121,83,93,17,31,100,108,66,78,118,122,33,47,117,123,49,63,99,109,82,94,0,116,124,65,79,16,32,98,110,48,115,125,81,95,64,114,126,97,111,80,113,127,96,112],vu=[2954,2956,2958,2962,2970,2986,3018,3082,3212,3468,3980,5004],wu=8,il=[4,5,6,7,8,9,10,10,11,12,13,14,15,16,17,17,18,19,20,20,21,21,22,22,23,23,24,25,25,26,27,28,29,30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,93,95,96,98,100,101,102,104,106,108,110,112,114,116,118,122,124,126,128,130,132,134,136,138,140,143,145,148,151,154,157],rl=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,234,239,245,249,254,259,264,269,274,279,284],Za=null,_u=[[173,148,140,0],[176,155,140,135,0],[180,157,141,134,130,0],[254,254,243,230,196,177,153,140,133,130,129,0]],yu=[0,1,4,8,5,2,3,6,9,12,13,10,7,11,14,15],Ph=[-0,1,-1,2,-2,3,4,6,-3,5,-4,-5,-6,7,-7,8,-8,-9],xu=[[[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]],[[253,136,254,255,228,219,128,128,128,128,128],[189,129,242,255,227,213,255,219,128,128,128],[106,126,227,252,214,209,255,255,128,128,128]],[[1,98,248,255,236,226,255,255,128,128,128],[181,133,238,254,221,234,255,154,128,128,128],[78,134,202,247,198,180,255,219,128,128,128]],[[1,185,249,255,243,255,128,128,128,128,128],[184,150,247,255,236,224,128,128,128,128,128],[77,110,216,255,236,230,128,128,128,128,128]],[[1,101,251,255,241,255,128,128,128,128,128],[170,139,241,252,236,209,255,255,128,128,128],[37,116,196,243,228,255,255,255,128,128,128]],[[1,204,254,255,245,255,128,128,128,128,128],[207,160,250,255,238,128,128,128,128,128,128],[102,103,231,255,211,171,128,128,128,128,128]],[[1,152,252,255,240,255,128,128,128,128,128],[177,135,243,255,234,225,128,128,128,128,128],[80,129,211,255,194,224,128,128,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[246,1,255,128,128,128,128,128,128,128,128],[255,128,128,128,128,128,128,128,128,128,128]]],[[[198,35,237,223,193,187,162,160,145,155,62],[131,45,198,221,172,176,220,157,252,221,1],[68,47,146,208,149,167,221,162,255,223,128]],[[1,149,241,255,221,224,255,255,128,128,128],[184,141,234,253,222,220,255,199,128,128,128],[81,99,181,242,176,190,249,202,255,255,128]],[[1,129,232,253,214,197,242,196,255,255,128],[99,121,210,250,201,198,255,202,128,128,128],[23,91,163,242,170,187,247,210,255,255,128]],[[1,200,246,255,234,255,128,128,128,128,128],[109,178,241,255,231,245,255,255,128,128,128],[44,130,201,253,205,192,255,255,128,128,128]],[[1,132,239,251,219,209,255,165,128,128,128],[94,136,225,251,218,190,255,255,128,128,128],[22,100,174,245,186,161,255,199,128,128,128]],[[1,182,249,255,232,235,128,128,128,128,128],[124,143,241,255,227,234,128,128,128,128,128],[35,77,181,251,193,211,255,205,128,128,128]],[[1,157,247,255,236,231,255,255,128,128,128],[121,141,235,255,225,227,255,255,128,128,128],[45,99,188,251,195,217,255,224,128,128,128]],[[1,1,251,255,213,255,128,128,128,128,128],[203,1,248,255,255,128,128,128,128,128,128],[137,1,177,255,224,255,128,128,128,128,128]]],[[[253,9,248,251,207,208,255,192,128,128,128],[175,13,224,243,193,185,249,198,255,255,128],[73,17,171,221,161,179,236,167,255,234,128]],[[1,95,247,253,212,183,255,255,128,128,128],[239,90,244,250,211,209,255,255,128,128,128],[155,77,195,248,188,195,255,255,128,128,128]],[[1,24,239,251,218,219,255,205,128,128,128],[201,51,219,255,196,186,128,128,128,128,128],[69,46,190,239,201,218,255,228,128,128,128]],[[1,191,251,255,255,128,128,128,128,128,128],[223,165,249,255,213,255,128,128,128,128,128],[141,124,248,255,255,128,128,128,128,128,128]],[[1,16,248,255,255,128,128,128,128,128,128],[190,36,230,255,236,255,128,128,128,128,128],[149,1,255,128,128,128,128,128,128,128,128]],[[1,226,255,128,128,128,128,128,128,128,128],[247,192,255,128,128,128,128,128,128,128,128],[240,128,255,128,128,128,128,128,128,128,128]],[[1,134,252,255,255,128,128,128,128,128,128],[213,62,250,255,255,128,128,128,128,128,128],[55,93,255,128,128,128,128,128,128,128,128]],[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]]],[[[202,24,213,235,186,191,220,160,240,175,255],[126,38,182,232,169,184,228,174,255,187,128],[61,46,138,219,151,178,240,170,255,216,128]],[[1,112,230,250,199,191,247,159,255,255,128],[166,109,228,252,211,215,255,174,128,128,128],[39,77,162,232,172,180,245,178,255,255,128]],[[1,52,220,246,198,199,249,220,255,255,128],[124,74,191,243,183,193,250,221,255,255,128],[24,71,130,219,154,170,243,182,255,255,128]],[[1,182,225,249,219,240,255,224,128,128,128],[149,150,226,252,216,205,255,171,128,128,128],[28,108,170,242,183,194,254,223,255,255,128]],[[1,81,230,252,204,203,255,192,128,128,128],[123,102,209,247,188,196,255,233,128,128,128],[20,95,153,243,164,173,255,203,128,128,128]],[[1,222,248,255,216,213,128,128,128,128,128],[168,175,246,252,235,205,255,255,128,128,128],[47,116,215,255,211,212,255,255,128,128,128]],[[1,121,236,253,212,214,255,255,128,128,128],[141,84,213,252,201,202,255,219,128,128,128],[42,80,160,240,162,185,255,205,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[244,1,255,128,128,128,128,128,128,128,128],[238,1,255,128,128,128,128,128,128,128,128]]]],Au=[[[231,120,48,89,115,113,120,152,112],[152,179,64,126,170,118,46,70,95],[175,69,143,80,85,82,72,155,103],[56,58,10,171,218,189,17,13,152],[114,26,17,163,44,195,21,10,173],[121,24,80,195,26,62,44,64,85],[144,71,10,38,171,213,144,34,26],[170,46,55,19,136,160,33,206,71],[63,20,8,114,114,208,12,9,226],[81,40,11,96,182,84,29,16,36]],[[134,183,89,137,98,101,106,165,148],[72,187,100,130,157,111,32,75,80],[66,102,167,99,74,62,40,234,128],[41,53,9,178,241,141,26,8,107],[74,43,26,146,73,166,49,23,157],[65,38,105,160,51,52,31,115,128],[104,79,12,27,217,255,87,17,7],[87,68,71,44,114,51,15,186,23],[47,41,14,110,182,183,21,17,194],[66,45,25,102,197,189,23,18,22]],[[88,88,147,150,42,46,45,196,205],[43,97,183,117,85,38,35,179,61],[39,53,200,87,26,21,43,232,171],[56,34,51,104,114,102,29,93,77],[39,28,85,171,58,165,90,98,64],[34,22,116,206,23,34,43,166,73],[107,54,32,26,51,1,81,43,31],[68,25,106,22,64,171,36,225,114],[34,19,21,102,132,188,16,76,124],[62,18,78,95,85,57,50,48,51]],[[193,101,35,159,215,111,89,46,111],[60,148,31,172,219,228,21,18,111],[112,113,77,85,179,255,38,120,114],[40,42,1,196,245,209,10,25,109],[88,43,29,140,166,213,37,43,154],[61,63,30,155,67,45,68,1,209],[100,80,8,43,154,1,51,26,71],[142,78,78,16,255,128,34,197,171],[41,40,5,102,211,183,4,1,221],[51,50,17,168,209,192,23,25,82]],[[138,31,36,171,27,166,38,44,229],[67,87,58,169,82,115,26,59,179],[63,59,90,180,59,166,93,73,154],[40,40,21,116,143,209,34,39,175],[47,15,16,183,34,223,49,45,183],[46,17,33,183,6,98,15,32,183],[57,46,22,24,128,1,54,17,37],[65,32,73,115,28,128,23,128,205],[40,3,9,115,51,192,18,6,223],[87,37,9,115,59,77,64,21,47]],[[104,55,44,218,9,54,53,130,226],[64,90,70,205,40,41,23,26,57],[54,57,112,184,5,41,38,166,213],[30,34,26,133,152,116,10,32,134],[39,19,53,221,26,114,32,73,255],[31,9,65,234,2,15,1,118,73],[75,32,12,51,192,255,160,43,51],[88,31,35,67,102,85,55,186,85],[56,21,23,111,59,205,45,37,192],[55,38,70,124,73,102,1,34,98]],[[125,98,42,88,104,85,117,175,82],[95,84,53,89,128,100,113,101,45],[75,79,123,47,51,128,81,171,1],[57,17,5,71,102,57,53,41,49],[38,33,13,121,57,73,26,1,85],[41,10,67,138,77,110,90,47,114],[115,21,2,10,102,255,166,23,6],[101,29,16,10,85,128,101,196,26],[57,18,10,102,102,213,34,20,43],[117,20,15,36,163,128,68,1,26]],[[102,61,71,37,34,53,31,243,192],[69,60,71,38,73,119,28,222,37],[68,45,128,34,1,47,11,245,171],[62,17,19,70,146,85,55,62,70],[37,43,37,154,100,163,85,160,1],[63,9,92,136,28,64,32,201,85],[75,15,9,9,64,255,184,119,16],[86,6,28,5,64,255,25,248,1],[56,8,17,132,137,255,55,116,128],[58,15,20,82,135,57,26,121,40]],[[164,50,31,137,154,133,25,35,218],[51,103,44,131,131,123,31,6,158],[86,40,64,135,148,224,45,183,128],[22,26,17,131,240,154,14,1,209],[45,16,21,91,64,222,7,1,197],[56,21,39,155,60,138,23,102,213],[83,12,13,54,192,255,68,47,28],[85,26,85,85,128,128,32,146,171],[18,11,7,63,144,171,4,4,246],[35,27,10,146,174,171,12,26,128]],[[190,80,35,99,180,80,126,54,45],[85,126,47,87,176,51,41,20,32],[101,75,128,139,118,146,116,128,85],[56,41,15,176,236,85,37,9,62],[71,30,17,119,118,255,17,18,138],[101,38,60,138,55,70,43,26,142],[146,36,19,30,171,255,97,27,20],[138,45,61,62,219,1,81,188,64],[32,41,20,117,151,142,20,21,163],[112,19,12,61,195,128,48,4,24]]],Nu=[[[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[176,246,255,255,255,255,255,255,255,255,255],[223,241,252,255,255,255,255,255,255,255,255],[249,253,253,255,255,255,255,255,255,255,255]],[[255,244,252,255,255,255,255,255,255,255,255],[234,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255]],[[255,246,254,255,255,255,255,255,255,255,255],[239,253,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[251,255,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[251,254,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,254,253,255,254,255,255,255,255,255,255],[250,255,254,255,254,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[217,255,255,255,255,255,255,255,255,255,255],[225,252,241,253,255,255,254,255,255,255,255],[234,250,241,250,253,255,253,254,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[223,254,254,255,255,255,255,255,255,255,255],[238,253,254,254,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[249,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,255,255,255,255,255,255,255,255,255],[247,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[252,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[186,251,250,255,255,255,255,255,255,255,255],[234,251,244,254,255,255,255,255,255,255,255],[251,251,243,253,254,255,254,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[236,253,254,255,255,255,255,255,255,255,255],[251,253,253,254,254,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[254,254,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[254,254,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[248,255,255,255,255,255,255,255,255,255,255],[250,254,252,254,255,255,255,255,255,255,255],[248,254,249,253,255,255,255,255,255,255,255]],[[255,253,253,255,255,255,255,255,255,255,255],[246,253,253,255,255,255,255,255,255,255,255],[252,254,251,254,254,255,255,255,255,255,255]],[[255,254,252,255,255,255,255,255,255,255,255],[248,254,253,255,255,255,255,255,255,255,255],[253,255,254,254,255,255,255,255,255,255,255]],[[255,251,254,255,255,255,255,255,255,255,255],[245,251,254,255,255,255,255,255,255,255,255],[253,253,254,255,255,255,255,255,255,255,255]],[[255,251,253,255,255,255,255,255,255,255,255],[252,253,254,255,255,255,255,255,255,255,255],[255,254,255,255,255,255,255,255,255,255,255]],[[255,252,255,255,255,255,255,255,255,255,255],[249,255,254,255,255,255,255,255,255,255,255],[255,255,254,255,255,255,255,255,255,255,255]],[[255,255,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]]],Lu=[0,1,2,3,6,4,5,6,6,6,6,6,6,6,6,7,0],Xi=[],ni=[],ji=[],Su=1,Eh=2,Ji=[],Yn=[];pn(`UpsampleRgbLinePair`,wr,3),pn(`UpsampleBgrLinePair`,ta,3),pn(`UpsampleRgbaLinePair`,Ua,4),pn(`UpsampleBgraLinePair`,yr,4),pn(`UpsampleArgbLinePair`,_r,4),pn(`UpsampleRgba4444LinePair`,gn,2),pn(`UpsampleRgb565LinePair`,ea,2);var ku=z.UpsampleRgbLinePair,Pu=z.UpsampleBgrLinePair,Ih=z.UpsampleRgbaLinePair,Ch=z.UpsampleBgraLinePair,Fh=z.UpsampleArgbLinePair,Oh=z.UpsampleRgba4444LinePair,Eu=z.UpsampleRgb565LinePair,Wo=16,Go=1<g.ca.S||(alert(`todo:WebPInitConvertARGBToYUV`),g.ca.f.kb.F!=null&&Me()),g.Pb&&0(S=u.Md)?0:100I;++I)12>(J=v.pb[I]).lc&&(J.ia=S*ju[0>J.lc?0:J.lc]>>3),H|=J.ia;H&&(alert(`todo:VP8InitRandom`),v.ia=1)}v.Ga=u.Id,100v.Ga&&(v.Ga=0)}(function(C,W){if(C==null)return 0;if(W==null)return Ke(C,2,`NULL VP8Io parameter in VP8Decode().`);if(!C.cb&&!ui(C,W))return 0;if(n(C.cb),W.ac==null||W.ac(W)){W.ob&&(C.L=0);var K=Vo[C.L];if(C.L==2?(C.yb=0,C.zb=0):(C.yb=W.v-K>>4,C.zb=W.j-K>>4,0>C.yb&&(C.yb=0),0>C.zb&&(C.zb=0)),C.Va=W.o+15+K>>4,C.Hb=W.va+15+K>>4,C.Hb>C.za&&(C.Hb=C.za),C.Va>C.Ub&&(C.Va=C.Ub),0K;++K){var X;if(C.Qa.Cb){var ht=C.Qa.Lb[K];C.Qa.Fb||(ht+=st.Tb)}else ht=st.Tb;for(X=0;1>=X;++X){var ct=C.gd[K][X],wt=ht;if(st.Pc&&(wt+=st.vd[0],X&&(wt+=st.od[0])),0<(wt=0>wt?0:63>2:bt>>1)>9-st.wb&&(bt=9-st.wb),1>bt&&(bt=1),ct.dd=bt,ct.tc=2*wt+bt,ct.ld=40<=wt?2:15<=wt?1:0}else ct.tc=0;ct.La=X}}}K=0}else Ke(C,6,`Frame setup failed`),K=C.a;if(K=K==0){if(K){C.$c=0,0C.Vb){if(C.Vb=0,C.Ec=o(ct),C.Fc=0,C.Ec==null){K=Ke(C,1,`no memory during frame initialization.`);break e}C.Vb=ct}ct=C.Ec,wt=C.Fc,C.Ac=ct,C.Bc=wt,wt+=st,C.Gd=f(Bt,No),C.Hd=0,C.rb=f(Pt+1,Ia),C.sb=1,C.wa=ie?f(ie,Vn):null,C.Y=0,C.D.Nb=0,C.D.wa=C.wa,C.D.Y=C.Y,0=K;++K)_h[255+K]=0>K?-K:K;for(K=-1020;1020>=K;++K)yh[1020+K]=-128>K?-128:127=K;++K)xh[112+K]=-16>K?-16:15=K;++K)Ah[255+K]=0>K?0:255pe;++pe){var en,me=Nn[0+pe];for(en=0;4>en;++en){me=Au[Oe[hn+en]][me];for(var xe=Ph[dt(ee,me[0])];0>3;for(xe=0;256>xe;xe+=16)pe[bn+xe]=In}cn=1,ii=hn[0]}var Se=15&ee.la,nn=15&Ln.la;for(xe=0;4>xe;++xe){var Bn=1&nn;for(In=Ae=0;4>In;++In)Se=Se>>1|(Bn=(Ve=Za(Oe,ii,Ve=Bn+(1&Se),Ue.Sc,cn,pe,bn))>cn)<<7,Ae=Ae<<2|(3>=4,nn=nn>>1|Bn<<7,en=(en<<8|Ae)>>>0}for(ii=Se,cn=nn>>4,qe=0;4>qe;qe+=2){for(Ae=0,Se=ee.la>>4+qe,nn=Ln.la>>4+qe,xe=0;2>xe;++xe){for(Bn=1&nn,In=0;2>In;++In)Ve=Bn+(1&Se),Se=Se>>1|(Bn=0<(Ve=Za(Oe,hn[2],Ve,Ue.Qc,0,pe,bn)))<<3,Ae=Ae<<2|(3>=2,nn=nn>>1|Bn<<5}me|=Ae<<4*qe,ii|=Se<<4<=Tt.zb&&Tt.M<=Tt.Va,Tt.Aa==0)e:{if(re.M=Tt.M,re.uc=ee,na(Tt,re),Ge=1,re=(Ae=Tt.D).Nb,ee=(me=Vo[Tt.L])*Tt.R,Oe=me/2*Tt.B,xe=16*re*Tt.R,In=8*re*Tt.B,hn=Tt.sa,Nn=Tt.ta-ee+xe,Ue=Tt.qa,pe=Tt.ra-Oe+In,bn=Tt.Ha,Ln=Tt.Ia-Oe+In,nn=(Se=Ae.M)==0,en=Se>=Tt.Va-1,Tt.Aa==2&&na(Tt,Ae),Ae.uc)for(Bn=(Ve=Tt).D.M,n(Ve.D.uc),Ae=Ve.yb;AeNt.o&&(Se=Nt.o),Nt.F=null,Nt.J=null,Tt.Fa!=null&&0>1),Nt.W+=Tt.B*(me>>1),Nt.F!=null&&(Nt.J+=Nt.width*me)),Ae>1,Nt.W+=Nt.v>>1,Nt.F!=null&&(Nt.J+=Nt.v),Nt.ka=Ae-Nt.j,Nt.U=Nt.va-Nt.v,Nt.T=Se-Ae,Ge=Nt.put(Nt))}re+1!=Tt.Ic||en||(i(Tt.sa,Tt.ta-ee,hn,Nn+16*Tt.R,ee),i(Tt.qa,Tt.ra-Oe,Ue,pe+8*Tt.B,Oe),i(Tt.Ha,Tt.Ia-Oe,bn,Ln+8*Tt.B,Oe))}if(!Ge)return Ke(ue,6,`Output aborted.`)}return 1})(C,W)),W.bc!=null&&W.bc(W),K&=1}return K?(C.cb=0,K):0})(r,g)||(s=r.a)}}else s=r.a}s==0&&_.Oa!=null&&_.Oa.fd&&(s=xr(_.ba))}_=s}w=_!=0?null:11>w?x.f.RGBA.eb:x.f.kb.y}else w=null;return w};var jh=[3,4,3,4,4,2,2,4,4,4,2,1,1]};function d(z,et){for(var N=``,F=0;F<4;F++)N+=String.fromCharCode(z[et++]);return N}function m(z,et){return z[et+0]|z[et+1]<<8}function A(z,et){return(z[et+0]|z[et+1]<<8|z[et+2]<<16)>>>0}function L(z,et){return(z[et+0]|z[et+1]<<8|z[et+2]<<16|z[et+3]<<24)>>>0}new c;var p=[0],T=[0],O=[],B=new c,k=t,Z=(function(z,et){var N={},F=0,U=!1,q=0,it=0;if(N.frames=[],!(function(y,R){for(var j=0;j<4;j++)if(y[R+j]!=`RIFF`.charCodeAt(j))return!0;return!1})(z,et)){for(L(z,et+=4),et+=8;et>1&1}ft!=`ANMF`&&(et+=nt)}return N}})(k,0);Z.response=k,Z.rgbaoutput=!0,Z.dataurl=!1;var $=Z.header?Z.header:null,D=Z.frames?Z.frames:null;if($){$.loop_counter=$.loop_count,p=[$.canvas_height],T=[$.canvas_width];for(var lt=0;lt`+e.replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)+``,this.internal.__metadata__.metadataObjectNumber=this.internal.newObject(),this.internal.write(`<< /Type /Metadata /Subtype /XML /Length `+t.length+` >>`),this.internal.write(`stream`),this.internal.write(t),this.internal.write(`endstream`),this.internal.write(`endobj`)}function _5(){this.internal.__metadata__.metadataObjectNumber&&this.internal.write(`/Metadata `+this.internal.__metadata__.metadataObjectNumber+` 0 R`)}var Ku,Xu,Ju,bl,Ja,Qu,Uc,t1,e1,n1,ql,uo,ao,ua,zl,qc,Er,vl,i1,Hl,zc,Hc,Wc,Fl,os,r1,Gc,a1,qi,no,oo,so,Wl,ss,Vc,Zc,$c,Yc,lo,Fn,_i,Kc,o1,s1,Xc,l1,Jc,Qc,tc,yl,ec,Ol,nc,ic,h1,c1,f1,rc,u1,tf,d1,p1,g1,y1,x1,ho,A1,N1,L1,an,Fr,ba,S1,Tl,k1,ar,P1,or,E1,I1,Kn,ac,un,oc,yi,C1,xl,F1,O1,es,T1,R1,B1,j1,cs,M1,D1,U1,Rl,H1,W1,G1,V1,be,rr,xi,Z1,pa,Gl,Bl,jl,Ml,Dl,Ir,to,kn,va,Or,wa,$1,Cr,sc,ir,Y1,Vl,Tr,qn,zn,ve,Qa,Ul,ef,ga,nf,Al,ca,K1,X1,eo,J1,po,rf,af,t2,of,e2,n2,i2,r2,io,p2,g2,m2,fs,sf,co,b2,v2,w2,_2,fo,lf,hf,x2,A2,N2,L2,ls,S2,k2,P2,E2,I2,M2,ns,D2,U2,fa,lc,hc,cc,Nl,fc,q2,z2,H2,W2,G2,ro,V2,cf,ff,uc,Z2,is,Rr,$2,Y2,Xn,uf,df,K2,dc,us,pc,gc,mc,bc,vc,wc,_c,yc,xc,hs,Ui,Ll,Ac,Sl,Nc,Lc,Sc,kc,rs,as,Pc,Ec,Ic,Cc,Fc,kl,Oc,Tc,Be,pf,gf,X2,J2,t0,Rc,Br,mf,bf,vf,wf,n0,Bc,Pl,El,i0,_f,r0,a0,o0,s0,wi,w0,yf,_0,jc,da,Il,Cl,y0,Mc,x0,Dc,A0,I0,X5,J5,Q5,td,C0,F0,ed,nd,Yl,xf,Nf,Af,B0,M0,U0,z0,H0,vs,Pf,V0,Ef,$0,Pn,bo,ws,vo,wo,_s,ys,Yt,ke,jr,Ls,Of,Tf,e5,Rf,ze,uh,qr,_a,Ur,Xt,sr,On,jf,Ai,n5,i5,r5,Ze,$e,Ye,a5,o5,ch,As,s5,l5,h5,iu,ih,Ni,ru,au,oi,La,Sa,ka,Ss,on,ks,Pa,Cs,Ps,Dr,Es,It,c5,Xd,su,lu,fh,hu,f5,u5,Df,ya,Ns,zf,Hf,Wf,ah,si,hr,y5,x5,Li,A5,Qf,fu,N5,L5,S5,k5,P5,E5,I5,uu,C5,F5,O5,T5,R5;var init_chunk_APIPPBUG=__esmMin((()=>{init_chunk_CHEWUVT5();Ku=new TextEncoder;Xu=1024*8;Ju=(()=>{let t=new Uint8Array(4),n=new Uint32Array(t.buffer);return!((n[0]=1)&t[0])})();bl={int8:globalThis.Int8Array,uint8:globalThis.Uint8Array,int16:globalThis.Int16Array,uint16:globalThis.Uint16Array,int32:globalThis.Int32Array,uint32:globalThis.Uint32Array,uint64:globalThis.BigUint64Array,int64:globalThis.BigInt64Array,float32:globalThis.Float32Array,float64:globalThis.Float64Array};Ja=class t{buffer;byteLength;byteOffset;length;offset;lastWrittenByte;littleEndian;_data;_mark;_marks;constructor(n=Xu,e={}){let i=!1;typeof n==`number`?n=new ArrayBuffer(n):(i=!0,this.lastWrittenByte=n.byteLength);let a=e.offset?e.offset>>>0:0,o=n.byteLength-a,f=a;(ArrayBuffer.isView(n)||n instanceof t)&&(n.byteLength!==n.buffer.byteLength&&(f=n.byteOffset+a),n=n.buffer),i?this.lastWrittenByte=o:this.lastWrittenByte=0,this.buffer=n,this.length=o,this.byteLength=o,this.byteOffset=f,this.offset=0,this.littleEndian=!0,this._data=new DataView(this.buffer,f,o),this._mark=0,this._marks=[]}available(n=1){return this.offset+n<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(n=1){return this.offset+=n,this}back(n=1){return this.offset-=n,this}seek(n){return this.offset=n,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){let n=this._marks.pop();if(n===void 0)throw new Error(`Mark stack empty`);return this.seek(n),this}rewind(){return this.offset=0,this}ensureAvailable(n=1){if(!this.available(n)){let i=(this.offset+n)*2,a=new Uint8Array(i);a.set(new Uint8Array(this.buffer)),this.buffer=a.buffer,this.length=i,this.byteLength=i,this._data=new DataView(this.buffer)}return this}readBoolean(){return this.readUint8()!==0}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(n=1){return this.readArray(n,`uint8`)}readArray(n,e){let i=bl[e].BYTES_PER_ELEMENT*n,a=this.byteOffset+this.offset,o=this.buffer.slice(a,a+i);if(this.littleEndian===Ju&&e!==`uint8`&&e!==`int8`){let l=new Uint8Array(this.buffer.slice(a,a+i));l.reverse();let c=new bl[e](l.buffer);return this.offset+=i,c.reverse(),c}let f=new bl[e](o);return this.offset+=i,f}readInt16(){let n=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,n}readUint16(){let n=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,n}readInt32(){let n=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,n}readUint32(){let n=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,n}readFloat32(){let n=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,n}readFloat64(){let n=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,n}readBigInt64(){let n=this._data.getBigInt64(this.offset,this.littleEndian);return this.offset+=8,n}readBigUint64(){let n=this._data.getBigUint64(this.offset,this.littleEndian);return this.offset+=8,n}readChar(){return String.fromCharCode(this.readInt8())}readChars(n=1){let e=``;for(let i=0;ithis.lastWrittenByte&&(this.lastWrittenByte=this.offset)}};Qu=0;Uc=1;t1=2;e1=3;n1=258;ql=29;uo=256;ao=uo+1+ql;ua=30;zl=19;qc=2*ao+1;Er=15;vl=16;i1=7;Hl=256;zc=16;Hc=17;Wc=18;Fl=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);os=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);r1=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);Gc=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);a1=512;qi=new Array((ao+2)*2);ma(qi);no=new Array(ua*2);ma(no);oo=new Array(a1);ma(oo);so=new Array(n1-e1+1);ma(so);Wl=new Array(ql);ma(Wl);ss=new Array(ua);ma(ss);;;;Yc=t=>t<256?oo[t]:oo[256+(t>>>7)],lo=(t,n)=>{t.pending_buf[t.pending++]=n&255,t.pending_buf[t.pending++]=n>>>8&255},Fn=(t,n,e)=>{t.bi_valid>vl-e?(t.bi_buf|=n<>vl-t.bi_valid,t.bi_valid+=e-vl):(t.bi_buf|=n<{Fn(t,e[n*2],e[n*2+1])},Kc=(t,n)=>{let e=0;do e|=t&1,t>>>=1,e<<=1;while(--n>0);return e>>>1},o1=t=>{t.bi_valid===16?(lo(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=t.bi_buf&255,t.bi_buf>>=8,t.bi_valid-=8)},s1=(t,n)=>{let e=n.dyn_tree,i=n.max_code,a=n.stat_desc.static_tree,o=n.stat_desc.has_stree,f=n.stat_desc.extra_bits,l=n.stat_desc.extra_base,c=n.stat_desc.max_length,d,m,A,L,p,T,O=0;for(L=0;L<=Er;L++)t.bl_count[L]=0;for(e[t.heap[t.heap_max]*2+1]=0,d=t.heap_max+1;dc&&(L=c,O++),e[m*2+1]=L,!(m>i)&&(t.bl_count[L]++,p=0,m>=l&&(p=f[m-l]),T=e[m*2],t.opt_len+=T*(L+p),o&&(t.static_len+=T*(a[m*2+1]+p)));if(O!==0){do{for(L=c-1;t.bl_count[L]===0;)L--;t.bl_count[L]--,t.bl_count[L+1]+=2,t.bl_count[c]--,O-=2}while(O>0);for(L=c;L!==0;L--)for(m=t.bl_count[L];m!==0;)A=t.heap[--d],!(A>i)&&(e[A*2+1]!==L&&(t.opt_len+=(L-e[A*2+1])*e[A*2],e[A*2+1]=L),m--)}},Xc=(t,n,e)=>{let i=new Array(Er+1),a=0,o,f;for(o=1;o<=Er;o++)a=a+e[o-1]<<1,i[o]=a;for(f=0;f<=n;f++){let l=t[f*2+1];l!==0&&(t[f*2]=Kc(i[l]++,l))}},l1=()=>{let t,n,e,i,a,o=new Array(Er+1);for(e=0,i=0;i>=7;i{let n;for(n=0;n{t.bi_valid>8?lo(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},tc=(t,n,e,i)=>{let a=n*2,o=e*2;return t[a]{let i=t.heap[e],a=e<<1;for(;a<=t.heap_len&&(a{let i,a,o=0,f,l;if(t.sym_next!==0)do i=t.pending_buf[t.sym_buf+o++]&255,i+=(t.pending_buf[t.sym_buf+o++]&255)<<8,a=t.pending_buf[t.sym_buf+o++],i===0?_i(t,a,n):(f=so[a],_i(t,f+uo+1,n),l=Fl[f],l!==0&&(a-=Wl[f],Fn(t,a,l)),i--,f=Yc(i),_i(t,f,e),l=os[f],l!==0&&(i-=ss[f],Fn(t,i,l)));while(o{let e=n.dyn_tree,i=n.stat_desc.static_tree,a=n.stat_desc.has_stree,o=n.stat_desc.elems,f,l,c=-1,d;for(t.heap_len=0,t.heap_max=qc,f=0;f>1;f>=1;f--)yl(t,e,f);d=o;do f=t.heap[1],t.heap[1]=t.heap[t.heap_len--],yl(t,e,1),l=t.heap[1],t.heap[--t.heap_max]=f,t.heap[--t.heap_max]=l,e[d*2]=e[f*2]+e[l*2],t.depth[d]=(t.depth[f]>=t.depth[l]?t.depth[f]:t.depth[l])+1,e[f*2+1]=e[l*2+1]=d,t.heap[1]=d++,yl(t,e,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],s1(t,n),Xc(e,c,t.bl_count)},nc=(t,n,e)=>{let i,a=-1,o,f=n[1],l=0,c=7,d=4;for(f===0&&(c=138,d=3),n[(e+1)*2+1]=65535,i=0;i<=e;i++)o=f,f=n[(i+1)*2+1],!(++l{let i,a=-1,o,f=n[1],l=0,c=7,d=4;for(f===0&&(c=138,d=3),i=0;i<=e;i++)if(o=f,f=n[(i+1)*2+1],!(++l{let n;for(nc(t,t.dyn_ltree,t.l_desc.max_code),nc(t,t.dyn_dtree,t.d_desc.max_code),Ol(t,t.bl_desc),n=zl-1;n>=3&&t.bl_tree[Gc[n]*2+1]===0;n--);return t.opt_len+=3*(n+1)+5+5+4,n},c1=(t,n,e,i)=>{let a;for(Fn(t,n-257,5),Fn(t,e-1,5),Fn(t,i-4,4),a=0;a{let n=4093624447,e;for(e=0;e<=31;e++,n>>>=1)if(n&1&&t.dyn_ltree[e*2]!==0)return 0;if(t.dyn_ltree[18]!==0||t.dyn_ltree[20]!==0||t.dyn_ltree[26]!==0)return 1;for(e=32;e{rc||(l1(),rc=!0),t.l_desc=new _l(t.dyn_ltree,Vc),t.d_desc=new _l(t.dyn_dtree,Zc),t.bl_desc=new _l(t.bl_tree,$c),t.bi_buf=0,t.bi_valid=0,Jc(t)},tf=(t,n,e,i)=>{Fn(t,(Qu<<1)+(i?1:0),3),Qc(t),lo(t,e),lo(t,~e),e&&t.pending_buf.set(t.window.subarray(n,n+e),t.pending),t.pending+=e},d1=t=>{Fn(t,Uc<<1,3),_i(t,Hl,qi),o1(t)},p1=(t,n,e,i)=>{let a,o,f=0;t.level>0?(t.strm.data_type===2&&(t.strm.data_type=f1(t)),Ol(t,t.l_desc),Ol(t,t.d_desc),f=h1(t),a=t.opt_len+3+7>>>3,o=t.static_len+3+7>>>3,o<=a&&(a=o)):a=o=e+5,e+4<=a&&n!==-1?tf(t,n,e,i):t.strategy===4||o===a?(Fn(t,(Uc<<1)+(i?1:0),3),ec(t,qi,no)):(Fn(t,(t1<<1)+(i?1:0),3),c1(t,t.l_desc.max_code+1,t.d_desc.max_code+1,f+1),ec(t,t.dyn_ltree,t.dyn_dtree)),Jc(t),i&&Qc(t)},g1=(t,n,e)=>(t.pending_buf[t.sym_buf+t.sym_next++]=n,t.pending_buf[t.sym_buf+t.sym_next++]=n>>8,t.pending_buf[t.sym_buf+t.sym_next++]=e,n===0?t.dyn_ltree[e*2]++:(t.matches++,n--,t.dyn_ltree[(so[e]+uo+1)*2]++,t.dyn_dtree[Yc(n)*2]++),t.sym_next===t.sym_end),y1={_tr_init:u1,_tr_stored_block:tf,_tr_flush_block:p1,_tr_tally:g1,_tr_align:d1},x1=(t,n,e,i)=>{let a=t&65535|0,o=t>>>16&65535|0,f=0;for(;e!==0;){f=e>2e3?2e3:e,e-=f;do a=a+n[i++]|0,o=o+a|0;while(--f);a%=65521,o%=65521}return a|o<<16|0},ho=x1,A1=()=>{let t,n=[];for(var e=0;e<256;e++){t=e;for(var i=0;i<8;i++)t=t&1?3988292384^t>>>1:t>>>1;n[e]=t}return n},N1=new Uint32Array(A1()),L1=(t,n,e,i)=>{let a=N1,o=i+e;t^=-1;for(let f=i;f>>8^a[(t^n[f])&255];return t^-1},an=L1,Fr={2:`need dictionary`,1:`stream end`,0:``,"-1":`file error`,"-2":`stream error`,"-3":`data error`,"-4":`insufficient memory`,"-5":`buffer error`,"-6":`incompatible version`},ba={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},{_tr_init:S1,_tr_stored_block:Tl,_tr_flush_block:k1,_tr_tally:ar,_tr_align:P1}=y1,{Z_NO_FLUSH:or,Z_PARTIAL_FLUSH:E1,Z_FULL_FLUSH:I1,Z_FINISH:Kn,Z_BLOCK:ac,Z_OK:un,Z_STREAM_END:oc,Z_STREAM_ERROR:yi,Z_DATA_ERROR:C1,Z_BUF_ERROR:xl,Z_DEFAULT_COMPRESSION:F1,Z_FILTERED:O1,Z_HUFFMAN_ONLY:es,Z_RLE:T1,Z_FIXED:R1,Z_DEFAULT_STRATEGY:B1,Z_UNKNOWN:j1,Z_DEFLATED:cs}=ba,M1=9,D1=15,U1=8,Rl=286,H1=30,W1=19,G1=2*Rl+1,V1=15,be=3,rr=258,xi=rr+be+1,Z1=32,pa=42,Gl=57,Bl=69,jl=73,Ml=91,Dl=103,Ir=113,to=666,kn=1,va=2,Or=3,wa=4,$1=3,Cr=(t,n)=>(t.msg=Fr[n],n),sc=t=>t*2-(t>4?9:0),ir=t=>{let n=t.length;for(;--n>=0;)t[n]=0},Y1=t=>{let n,e,i,a=t.w_size;n=t.hash_size,i=n;do e=t.head[--i],t.head[i]=e>=a?e-a:0;while(--n);n=a,i=n;do e=t.prev[--i],t.prev[i]=e>=a?e-a:0;while(--n)},Vl=(t,n,e)=>(n<{let e;if(t.legacy_hash)e=t.ins_h=Vl(t,t.ins_h,t.window[n+be-1]);else{let a=t.window,o=a[n]|a[n+1]<<8|a[n+2]<<16|a[n+3]<<24;e=t.ins_h=Math.imul(o,66521)+66521>>>16&t.hash_mask}let i=t.prev[n&t.w_mask]=t.head[e];return t.head[e]=n,i},qn=t=>{let n=t.state,e=n.pending;e>t.avail_out&&(e=t.avail_out),e!==0&&(t.output.set(n.pending_buf.subarray(n.pending_out,n.pending_out+e),t.next_out),t.next_out+=e,n.pending_out+=e,t.total_out+=e,t.avail_out-=e,n.pending-=e,n.pending===0&&(n.pending_out=0))},zn=(t,n)=>{k1(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,n),t.block_start=t.strstart,qn(t.strm)},ve=(t,n)=>{t.pending_buf[t.pending++]=n},Qa=(t,n)=>{t.pending_buf[t.pending++]=n>>>8&255,t.pending_buf[t.pending++]=n&255},Ul=(t,n,e,i)=>{let a=t.avail_in;return a>i&&(a=i),a===0?0:(t.avail_in-=a,n.set(t.input.subarray(t.next_in,t.next_in+a),e),t.state.wrap===1?t.adler=ho(t.adler,n,a,e):t.state.wrap===2&&(t.adler=an(t.adler,n,a,e)),t.next_in+=a,t.total_in+=a,a)},ef=(t,n)=>{let e=t.max_chain_length,i=t.strstart,a,o,f=t.prev_length,l=t.nice_match,c=t.strstart>t.w_size-xi?t.strstart-(t.w_size-xi):0,d=t.window,m=t.w_mask,A=t.prev,L=t.strstart+rr,p=d[i+f-1],T=d[i+f];t.prev_length>=t.good_match&&(e>>=2),l>t.lookahead&&(l=t.lookahead);do if(a=n,!(d[a+f]!==T||d[a+f-1]!==p||d[a]!==d[i]||d[++a]!==d[i+1])){i+=2,a++;do;while(d[++i]===d[++a]&&d[++i]===d[++a]&&d[++i]===d[++a]&&d[++i]===d[++a]&&d[++i]===d[++a]&&d[++i]===d[++a]&&d[++i]===d[++a]&&d[++i]===d[++a]&&if){if(t.match_start=n,f=o,o>=l)break;p=d[i+f-1],T=d[i+f]}}while((n=A[n&m])>c&&--e!==0);return f<=t.lookahead?f:t.lookahead},ga=t=>{let n=t.w_size,e,i,a;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=n+(n-xi)&&(t.window.set(t.window.subarray(n,n+n-i),0),t.match_start-=n,t.strstart-=n,t.block_start-=n,t.insert>t.strstart&&(t.insert=t.strstart),Y1(t),i+=n),t.strm.avail_in===0)break;if(e=Ul(t.strm,t.window,t.strstart+t.lookahead,i),t.lookahead+=e,t.legacy_hash){if(t.lookahead+t.insert>=be)for(a=t.strstart-t.insert,t.ins_h=t.window[a],t.ins_h=Vl(t,t.ins_h,t.window[a+1]);t.insert&&(Tr(t,a),a++,t.insert--,!(t.lookahead+t.insertbe)for(a=t.strstart-t.insert;t.insert&&(Tr(t,a),a++,t.insert--,!(t.lookahead+t.insert<=be)););}while(t.lookahead{let e=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,i,a,o,f=0,l=t.strm.avail_in;do{if(i=65535,o=t.bi_valid+42>>3,t.strm.avail_outa+t.strm.avail_in&&(i=a+t.strm.avail_in),i>o&&(i=o),i>8,t.pending_buf[t.pending-2]=~i,t.pending_buf[t.pending-1]=~i>>8,qn(t.strm),a&&(a>i&&(a=i),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+a),t.strm.next_out),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a,t.block_start+=a,i-=a),i&&(Ul(t.strm,t.strm.output,t.strm.next_out,i),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i)}while(f===0);return l-=t.strm.avail_in,l&&(l>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=l&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-l,t.strm.next_in),t.strstart),t.strstart+=l,t.insert+=l>t.w_size-t.insert?t.w_size-t.insert:l),t.block_start=t.strstart),t.high_watero&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,o+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),o>t.strm.avail_in&&(o=t.strm.avail_in),o&&(Ul(t.strm,t.window,t.strstart,o),t.strstart+=o,t.insert+=o>t.w_size-t.insert?t.w_size-t.insert:o),t.high_water>3,o=t.pending_buf_size-o>65535?65535:t.pending_buf_size-o,e=o>t.w_size?t.w_size:o,a=t.strstart-t.block_start,(a>=e||(a||n===Kn)&&n!==or&&t.strm.avail_in===0&&a<=o)&&(i=a>o?o:a,f=n===Kn&&t.strm.avail_in===0&&i===a?1:0,Tl(t,t.block_start,i,f),t.block_start+=i,qn(t.strm)),f?Or:kn)},Al=(t,n)=>{let e,i;for(;;){if(t.lookahead=be&&(e=Tr(t,t.strstart)),e!==0&&t.strstart-e<=t.w_size-xi&&(t.match_length=ef(t,e)),t.match_length>=be)if(i=ar(t,t.strstart-t.match_start,t.match_length-be),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=be){t.match_length--;do t.strstart++,e=Tr(t,t.strstart);while(--t.match_length!==0);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.legacy_hash&&(t.ins_h=t.window[t.strstart],t.ins_h=Vl(t,t.ins_h,t.window[t.strstart+1]));else i=ar(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(zn(t,!1),t.strm.avail_out===0))return kn}return t.insert=t.strstart{let e,i,a;for(;;){if(t.lookahead=be&&(e=Tr(t,t.strstart)),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=be-1,e!==0&&t.prev_length4096)&&(t.match_length=be-1)),t.prev_length>=be&&t.match_length<=t.prev_length){a=t.strstart+t.lookahead-be,i=ar(t,t.strstart-1-t.prev_match,t.prev_length-be),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=a&&(e=Tr(t,t.strstart));while(--t.prev_length!==0);if(t.match_available=0,t.match_length=be-1,t.strstart++,i&&(zn(t,!1),t.strm.avail_out===0))return kn}else if(t.match_available){if(i=ar(t,0,t.window[t.strstart-1]),i&&zn(t,!1),t.strstart++,t.lookahead--,t.strm.avail_out===0)return kn}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=ar(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart{let e,i,a,o,f=t.window;for(;;){if(t.lookahead<=rr){if(ga(t),t.lookahead<=rr&&n===or)return kn;if(t.lookahead===0)break}if(t.match_length=0,t.lookahead>=be&&t.strstart>0&&(a=t.strstart-1,i=f[a],i===f[++a]&&i===f[++a]&&i===f[++a])){o=t.strstart+rr;do;while(i===f[++a]&&i===f[++a]&&i===f[++a]&&i===f[++a]&&i===f[++a]&&i===f[++a]&&i===f[++a]&&i===f[++a]&&at.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=be?(e=ar(t,1,t.match_length-be),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(e=ar(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),e&&(zn(t,!1),t.strm.avail_out===0))return kn}return t.insert=0,n===Kn?(zn(t,!0),t.strm.avail_out===0?Or:wa):t.sym_next&&(zn(t,!1),t.strm.avail_out===0)?kn:va},X1=(t,n)=>{let e;for(;;){if(t.lookahead===0&&(ga(t),t.lookahead===0)){if(n===or)return kn;break}if(t.match_length=0,e=ar(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,e&&(zn(t,!1),t.strm.avail_out===0))return kn}return t.insert=0,n===Kn?(zn(t,!0),t.strm.avail_out===0?Or:wa):t.sym_next&&(zn(t,!1),t.strm.avail_out===0)?kn:va};eo=[new vi(0,0,0,0,nf),new vi(4,4,8,4,Al),new vi(4,5,16,8,Al),new vi(4,6,32,32,Al),new vi(4,4,16,16,ca),new vi(8,16,32,32,ca),new vi(8,16,128,128,ca),new vi(8,32,128,256,ca),new vi(32,128,258,1024,ca),new vi(32,258,258,4096,ca)];J1=t=>{t.window_size=2*t.w_size,ir(t.head),t.max_lazy_match=eo[t.level].max_lazy,t.good_match=eo[t.level].good_length,t.nice_match=eo[t.level].nice_length,t.max_chain_length=eo[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=be-1,t.match_available=0,t.ins_h=0};po=t=>{if(!t)return 1;let n=t.state;return!n||n.strm!==t||n.status!==pa&&n.status!==Gl&&n.status!==Bl&&n.status!==jl&&n.status!==Ml&&n.status!==Dl&&n.status!==Ir&&n.status!==to?1:0};rf=t=>{if(po(t))return Cr(t,yi);t.total_in=t.total_out=0,t.data_type=j1;let n=t.state;return n.pending=0,n.pending_out=0,n.wrap<0&&(n.wrap=-n.wrap),n.status=n.wrap===2?Gl:n.wrap?pa:Ir,t.adler=n.wrap===2?0:1,n.last_flush=-2,S1(n),un};af=t=>{let n=rf(t);return n===un&&J1(t.state),n};t2=(t,n)=>po(t)||t.state.wrap!==2?yi:(t.state.gzhead=n,un);of=(t,n,e,i,a,o,f)=>{if(!t)return yi;let l=1;if(n===F1&&(n=6),i<0?(l=0,i=-i):i>15&&(l=2,i-=16),a<1||a>M1||e!==cs||i<8||i>15||n<0||n>9||o<0||o>R1||i===8&&l!==1)return Cr(t,yi);i===8&&(i=9);let c=new Q1;return t.state=c,c.strm=t,c.status=pa,c.wrap=l,c.gzhead=null,c.w_bits=i,c.w_size=1<of(t,n,cs,D1,U1,B1);n2=(t,n)=>{if(po(t)||n>ac||n<0)return t?Cr(t,yi):yi;let e=t.state;if(!t.output||t.avail_in!==0&&!t.input||e.status===to&&n!==Kn)return Cr(t,t.avail_out===0?xl:yi);let i=e.last_flush;if(e.last_flush=n,e.pending!==0){if(qn(t),t.avail_out===0)return e.last_flush=-1,un}else if(t.avail_in===0&&sc(n)<=sc(i)&&n!==Kn)return Cr(t,xl);if(e.status===to&&t.avail_in!==0)return Cr(t,xl);if(e.status===pa&&e.wrap===0&&(e.status=Ir),e.status===pa){let a=cs+(e.w_bits-8<<4)<<8,o=-1;if(e.strategy>=es||e.level<2?o=0:e.level<6?o=1:e.level===6?o=2:o=3,a|=o<<6,e.strstart!==0&&(a|=Z1),a+=31-a%31,Qa(e,a),e.strstart!==0&&(Qa(e,t.adler>>>16),Qa(e,t.adler&65535)),t.adler=1,e.status=Ir,qn(t),e.pending!==0)return e.last_flush=-1,un}if(e.status===Gl){if(t.adler=0,ve(e,31),ve(e,139),ve(e,8),e.gzhead)ve(e,(e.gzhead.text?1:0)+(e.gzhead.hcrc?2:0)+(e.gzhead.extra?4:0)+(e.gzhead.name?8:0)+(e.gzhead.comment?16:0)),ve(e,e.gzhead.time&255),ve(e,e.gzhead.time>>8&255),ve(e,e.gzhead.time>>16&255),ve(e,e.gzhead.time>>24&255),ve(e,e.level===9?2:e.strategy>=es||e.level<2?4:0),ve(e,e.gzhead.os&255),e.gzhead.extra&&e.gzhead.extra.length&&(ve(e,e.gzhead.extra.length&255),ve(e,e.gzhead.extra.length>>8&255)),e.gzhead.hcrc&&(t.adler=an(t.adler,e.pending_buf,e.pending,0)),e.gzindex=0,e.status=Bl;else if(ve(e,0),ve(e,0),ve(e,0),ve(e,0),ve(e,0),ve(e,e.level===9?2:e.strategy>=es||e.level<2?4:0),ve(e,$1),e.status=Ir,qn(t),e.pending!==0)return e.last_flush=-1,un}if(e.status===Bl){if(e.gzhead.extra){let a=e.pending,o=(e.gzhead.extra.length&65535)-e.gzindex;for(;e.pending+o>e.pending_buf_size;){let l=e.pending_buf_size-e.pending;if(e.pending_buf.set(e.gzhead.extra.subarray(e.gzindex,e.gzindex+l),e.pending),e.pending=e.pending_buf_size,e.gzhead.hcrc&&e.pending>a&&(t.adler=an(t.adler,e.pending_buf,e.pending-a,a)),e.gzindex+=l,qn(t),e.pending!==0)return e.last_flush=-1,un;a=0,o-=l}let f=new Uint8Array(e.gzhead.extra);e.pending_buf.set(f.subarray(e.gzindex,e.gzindex+o),e.pending),e.pending+=o,e.gzhead.hcrc&&e.pending>a&&(t.adler=an(t.adler,e.pending_buf,e.pending-a,a)),e.gzindex=0}e.status=jl}if(e.status===jl){if(e.gzhead.name){let a=e.pending,o;do{if(e.pending===e.pending_buf_size){if(e.gzhead.hcrc&&e.pending>a&&(t.adler=an(t.adler,e.pending_buf,e.pending-a,a)),qn(t),e.pending!==0)return e.last_flush=-1,un;a=0}e.gzindexa&&(t.adler=an(t.adler,e.pending_buf,e.pending-a,a)),e.gzindex=0}e.status=Ml}if(e.status===Ml){if(e.gzhead.comment){let a=e.pending,o;do{if(e.pending===e.pending_buf_size){if(e.gzhead.hcrc&&e.pending>a&&(t.adler=an(t.adler,e.pending_buf,e.pending-a,a)),qn(t),e.pending!==0)return e.last_flush=-1,un;a=0}e.gzindexa&&(t.adler=an(t.adler,e.pending_buf,e.pending-a,a))}e.status=Dl}if(e.status===Dl){if(e.gzhead.hcrc){if(e.pending+2>e.pending_buf_size&&(qn(t),e.pending!==0))return e.last_flush=-1,un;ve(e,t.adler&255),ve(e,t.adler>>8&255),t.adler=0}if(e.status=Ir,qn(t),e.pending!==0)return e.last_flush=-1,un}if(t.avail_in!==0||e.lookahead!==0||n!==or&&e.status!==to){let a=e.level===0?nf(e,n):e.strategy===es?X1(e,n):e.strategy===T1?K1(e,n):eo[e.level].func(e,n);if((a===Or||a===wa)&&(e.status=to),a===kn||a===Or)return t.avail_out===0&&(e.last_flush=-1),un;if(a===va&&(n===E1?P1(e):n!==ac&&(Tl(e,0,0,!1),n===I1&&(ir(e.head),e.lookahead===0&&(e.strstart=0,e.block_start=0,e.insert=0))),qn(t),t.avail_out===0))return e.last_flush=-1,un}return n!==Kn?un:e.wrap<=0?oc:(e.wrap===2?(ve(e,t.adler&255),ve(e,t.adler>>8&255),ve(e,t.adler>>16&255),ve(e,t.adler>>24&255),ve(e,t.total_in&255),ve(e,t.total_in>>8&255),ve(e,t.total_in>>16&255),ve(e,t.total_in>>24&255)):(Qa(e,t.adler>>>16),Qa(e,t.adler&65535)),qn(t),e.wrap>0&&(e.wrap=-e.wrap),e.pending!==0?un:oc)};i2=t=>{if(po(t))return yi;let n=t.state.status;return t.state=null,n===Ir?Cr(t,C1):un};r2=(t,n)=>{let e=n.length;if(po(t))return yi;let i=t.state,a=i.wrap;if(a===2||a===1&&i.status!==pa||i.lookahead)return yi;if(a===1&&(t.adler=ho(t.adler,n,e,0)),i.wrap=0,e>=i.w_size){a===0&&(ir(i.head),i.strstart=0,i.block_start=0,i.insert=0);let c=new Uint8Array(i.w_size);c.set(n.subarray(e-i.w_size,e),0),n=c,e=i.w_size}let o=t.avail_in,f=t.next_in,l=t.input;for(t.avail_in=e,t.next_in=0,t.input=n,ga(i);i.lookahead>=be;){let c=i.strstart,d=i.lookahead-(be-1);do Tr(i,c),c++;while(--d);i.strstart=c,i.lookahead=be-1,ga(i)}return i.strstart+=i.lookahead,i.block_start=i.strstart,i.insert=i.lookahead,i.lookahead=0,i.match_length=i.prev_length=be-1,i.match_available=0,t.next_in=f,t.input=l,t.avail_in=o,i.wrap=a,un};io={deflateInit:e2,deflateInit2:of,deflateReset:af,deflateResetKeep:rf,deflateSetHeader:t2,deflate:n2,deflateEnd:i2,deflateSetDictionary:r2,deflateInfo:`pako deflate (from Nodeca project)`};p2=(t,n)=>Object.prototype.hasOwnProperty.call(t,n);g2=function(t){let n=Array.prototype.slice.call(arguments,1);for(;n.length;){let e=n.shift();if(e){if(typeof e!=`object`)throw new TypeError(e+`must be non-object`);for(let i in e)p2(e,i)&&(t[i]=e[i])}}return t};m2=t=>{let n=0;for(let i=0,a=t.length;i=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;co[254]=co[255]=1;b2=t=>{if(typeof TextEncoder==`function`&&TextEncoder.prototype.encode)return new TextEncoder().encode(t);let n,e,i,a,o,f=t.length,l=0;for(a=0;a>>6,n[o++]=128|e&63):e<65536?(n[o++]=224|e>>>12,n[o++]=128|e>>>6&63,n[o++]=128|e&63):(n[o++]=240|e>>>18,n[o++]=128|e>>>12&63,n[o++]=128|e>>>6&63,n[o++]=128|e&63);return n};v2=(t,n)=>{if(n<65534&&t.subarray&&sf)return String.fromCharCode.apply(null,t.length===n?t:t.subarray(0,n));let e=``;for(let i=0;i{let e=n||t.length;if(typeof TextDecoder==`function`&&TextDecoder.prototype.decode)return new TextDecoder().decode(t.subarray(0,n));let i,a,o=new Array(e*2);for(a=0,i=0;i4){o[a++]=65533,i+=l-1;continue}for(f&=l===2?31:l===3?15:7;l>1&&i1){o[a++]=65533;continue}f<65536?o[a++]=f:(f-=65536,o[a++]=55296|f>>10&1023,o[a++]=56320|f&1023)}return v2(o,a)};_2=(t,n)=>{n=n||t.length,n>t.length&&(n=t.length);let e=n-1;for(;e>=0&&(t[e]&192)===128;)e--;return e<0||e===0?n:e+co[t[e]]>n?e:n};fo={string2buf:b2,buf2string:w2,utf8border:_2};lf=y2,hf=Object.prototype.toString,{Z_NO_FLUSH:x2,Z_SYNC_FLUSH:A2,Z_FULL_FLUSH:N2,Z_FINISH:L2,Z_OK:ls,Z_STREAM_END:S2,Z_DEFAULT_COMPRESSION:k2,Z_DEFAULT_STRATEGY:P2,Z_DEFLATED:E2}=ba,I2={level:k2,method:E2,chunkSize:16384,windowBits:15,memLevel:8,strategy:P2,legacyHash:!0};go.prototype.push=function(t,n){let e=this.strm,i=this.options.chunkSize,a,o;if(this.ended)return!1;for(n===~~n?o=n:o=n===!0?L2:x2,typeof t==`string`?e.input=fo.string2buf(t):hf.call(t)===`[object ArrayBuffer]`?e.input=new Uint8Array(t):e.input=t,e.next_in=0,e.avail_in=e.input.length;;){if(e.avail_out===0&&(e.output=new Uint8Array(i),e.next_out=0,e.avail_out=i),(o===A2||o===N2)&&e.avail_out<=6){this.onData(e.output.subarray(0,e.next_out)),e.avail_out=0;continue}if(a=io.deflate(e,o),a===S2)return e.next_out>0&&this.onData(e.output.subarray(0,e.next_out)),a=io.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===ls;if(e.avail_out===0){this.onData(e.output);continue}if(o>0&&e.next_out>0){this.onData(e.output.subarray(0,e.next_out)),e.avail_out=0;continue}if(e.avail_in===0)break}return!0};go.prototype.onData=function(t){this.chunks.push(t)};go.prototype.onEnd=function(t){t===ls&&(this.result=fs.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};M2={Deflate:go,deflate:Zl,deflateRaw:C2,gzip:F2,constants:ba},ns=16209,D2=16191,U2=function(n,e){let i,a,o,f,l,c,d,m,A,L,p,T,O,B,k,Z,$,D,lt,_t,mt,tt,z,et,N=n.state;i=n.next_in,z=n.input,a=i+(n.avail_in-5),o=n.next_out,et=n.output,f=o-(e-n.avail_out),l=o+(n.avail_out-257),c=N.dmax,d=N.wsize,m=N.whave,A=N.wnext,L=N.window,p=N.hold,T=N.bits,O=N.lencode,B=N.distcode,k=(1<>>24,p>>>=D,T-=D,D=$>>>16&255,D===0)et[o++]=$&65535;else if(D&16){lt=$&65535,D&=15,D&&(T>>=D,T-=D),T<15&&(p+=z[i++]<>>24,p>>>=D,T-=D,D=$>>>16&255,D&16){if(_t=$&65535,D&=15,Tc){n.msg=`invalid distance too far back`,N.mode=ns;break t}if(p>>>=D,T-=D,D=o-f,_t>D){if(D=_t-D,D>m&&N.sane){n.msg=`invalid distance too far back`,N.mode=ns;break t}if(mt=0,tt=L,A===0){if(mt+=d-D,D2;)et[o++]=tt[mt++],et[o++]=tt[mt++],et[o++]=tt[mt++],lt-=3;lt&&(et[o++]=tt[mt++],lt>1&&(et[o++]=tt[mt++]))}else{mt=o-_t;do et[o++]=et[mt++],et[o++]=et[mt++],et[o++]=et[mt++],lt-=3;while(lt>2);lt&&(et[o++]=et[mt++],lt>1&&(et[o++]=et[mt++]))}}else if((D&64)===0){$=B[($&65535)+(p&(1<>3,i-=lt,T-=lt<<3,p&=(1<{let c=l.bits,d=0,m=0,A=0,L=0,p=0,T=0,O=0,B=0,k=0,Z=0,$,D,lt,_t,mt,tt=null,z,et=new Uint16Array(fa+1),N=new Uint16Array(fa+1),F=null,U,q,it;for(d=0;d<=fa;d++)et[d]=0;for(m=0;m=1&&et[L]===0;L--);if(p>L&&(p=L),L===0)return a[o++]=20971520,a[o++]=20971520,l.bits=1,0;for(A=1;A0&&(t===cc||L!==1))return-1;for(N[1]=0,d=1;dlc||t===fc&&k>hc)return 1;for(;;){U=d-O,f[m]+1=z?(q=F[f[m]-z],it=tt[f[m]-z]):(q=96,it=0),$=1<>O)+D]=U<<24|q<<16|it|0;while(D!==0);for($=1<>=1;if($!==0?(Z&=$-1,Z+=$):Z=0,m++,--et[d]===0){if(d===L)break;d=n[e+f[m]]}if(d>p&&(Z&_t)!==lt){for(O===0&&(O=p),mt+=A,T=d-O,B=1<lc||t===fc&&k>hc)return 1;lt=Z&_t,a[lt]=p<<24|T<<16|mt-o|0}}return Z!==0&&(a[mt+Z]=d-O<<24|4194304),l.bits=p,0},ro=G2,V2=0,cf=1,ff=2,{Z_FINISH:uc,Z_BLOCK:Z2,Z_TREES:is,Z_OK:Rr,Z_STREAM_END:$2,Z_NEED_DICT:Y2,Z_STREAM_ERROR:Xn,Z_DATA_ERROR:uf,Z_MEM_ERROR:df,Z_BUF_ERROR:K2,Z_DEFLATED:dc}=ba,us=16180,pc=16181,gc=16182,mc=16183,bc=16184,vc=16185,wc=16186,_c=16187,yc=16188,xc=16189,hs=16190,Ui=16191,Ll=16192,Ac=16193,Sl=16194,Nc=16195,Lc=16196,Sc=16197,kc=16198,rs=16199,as=16200,Pc=16201,Ec=16202,Ic=16203,Cc=16204,Fc=16205,kl=16206,Oc=16207,Tc=16208,Be=16209,pf=16210,gf=16211,X2=852,J2=592,t0=15,Rc=t=>(t>>>24&255)+(t>>>8&65280)+((t&65280)<<8)+((t&255)<<24);Br=t=>{if(!t)return 1;let n=t.state;return!n||n.strm!==t||n.modegf?1:0};mf=t=>{if(Br(t))return Xn;let n=t.state;return t.total_in=t.total_out=n.total=0,t.msg=``,n.wrap&&(t.adler=n.wrap&1),n.mode=us,n.last=0,n.havedict=0,n.flags=-1,n.dmax=32768,n.head=null,n.hold=0,n.bits=0,n.lencode=n.lendyn=new Int32Array(X2),n.distcode=n.distdyn=new Int32Array(J2),n.sane=1,n.back=-1,Rr};bf=t=>{if(Br(t))return Xn;let n=t.state;return n.wsize=0,n.whave=0,n.wnext=0,mf(t)};vf=(t,n)=>{let e;if(Br(t))return Xn;let i=t.state;return n<0?(e=0,n=-n):(e=(n>>4)+5,n<48&&(n&=15)),n&&(n<8||n>15)?Xn:(i.window!==null&&i.wbits!==n&&(i.window=null),i.wrap=e,i.wbits=n,bf(t))};wf=(t,n)=>{if(!t)return Xn;let e=new e0;t.state=e,e.strm=t,e.window=null,e.mode=us;let i=vf(t,n);return i!==Rr&&(t.state=null),i};n0=t=>wf(t,t0);Bc=!0;;;i0=t=>{if(Bc){Pl=new Int32Array(512),El=new Int32Array(32);let n=0;for(;n<144;)t.lens[n++]=8;for(;n<256;)t.lens[n++]=9;for(;n<280;)t.lens[n++]=7;for(;n<288;)t.lens[n++]=8;for(ro(cf,t.lens,0,288,Pl,0,t.work,{bits:9}),n=0;n<32;)t.lens[n++]=5;ro(ff,t.lens,0,32,El,0,t.work,{bits:5}),Bc=!1}t.lencode=Pl,t.lenbits=9,t.distcode=El,t.distbits=5};_f=(t,n,e,i)=>{let a,o=t.state;return o.window===null&&(o.window=new Uint8Array(1<=o.wsize?(o.window.set(n.subarray(e-o.wsize,e),0),o.wnext=0,o.whave=o.wsize):(a=o.wsize-o.wnext,a>i&&(a=i),o.window.set(n.subarray(e-i,e-i+a),o.wnext),i-=a,i?(o.window.set(n.subarray(e-i,e),0),o.wnext=i,o.whave=o.wsize):(o.wnext+=a,o.wnext===o.wsize&&(o.wnext=0),o.whave{let e,i,a,o,f,l,c,d,m,A,L,p,T,O,B=0,k,Z,$,D,lt,_t,mt,tt,z=new Uint8Array(4),et,N,F=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Br(t)||!t.output||!t.input&&t.avail_in!==0)return Xn;e=t.state,e.mode===Ui&&(e.mode=Ll),f=t.next_out,a=t.output,c=t.avail_out,o=t.next_in,i=t.input,l=t.avail_in,d=e.hold,m=e.bits,A=l,L=c,tt=Rr;t:for(;;)switch(e.mode){case us:if(e.wrap===0){e.mode=Ll;break}for(;m<16;){if(l===0)break t;l--,d+=i[o++]<>>8&255,e.check=an(e.check,z,2,0),d=0,m=0,e.mode=pc;break}if(e.head&&(e.head.done=!1),!(e.wrap&1)||(((d&255)<<8)+(d>>8))%31){t.msg=`incorrect header check`,e.mode=Be;break}if((d&15)!==dc){t.msg=`unknown compression method`,e.mode=Be;break}if(d>>>=4,m-=4,mt=(d&15)+8,e.wbits===0&&(e.wbits=mt),mt>15||mt>e.wbits){t.msg=`invalid window size`,e.mode=Be;break}e.dmax=1<>8&1),e.flags&512&&e.wrap&4&&(z[0]=d&255,z[1]=d>>>8&255,e.check=an(e.check,z,2,0)),d=0,m=0,e.mode=gc;case gc:for(;m<32;){if(l===0)break t;l--,d+=i[o++]<>>8&255,z[2]=d>>>16&255,z[3]=d>>>24&255,e.check=an(e.check,z,4,0)),d=0,m=0,e.mode=mc;case mc:for(;m<16;){if(l===0)break t;l--,d+=i[o++]<>8),e.flags&512&&e.wrap&4&&(z[0]=d&255,z[1]=d>>>8&255,e.check=an(e.check,z,2,0)),d=0,m=0,e.mode=bc;case bc:if(e.flags&1024){for(;m<16;){if(l===0)break t;l--,d+=i[o++]<>>8&255,e.check=an(e.check,z,2,0)),d=0,m=0}else e.head&&(e.head.extra=null);e.mode=vc;case vc:if(e.flags&1024&&(p=e.length,p>l&&(p=l),p&&(e.head&&(mt=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Uint8Array(e.head.extra_len)),e.head.extra.set(i.subarray(o,o+p),mt)),e.flags&512&&e.wrap&4&&(e.check=an(e.check,i,p,o)),l-=p,o+=p,e.length-=p),e.length))break t;e.length=0,e.mode=wc;case wc:if(e.flags&2048){if(l===0)break t;p=0;do mt=i[o+p++],e.head&&mt&&e.length<65536&&(e.head.name+=String.fromCharCode(mt));while(mt&&p>9&1,e.head.done=!0),t.adler=e.check=0,e.mode=Ui;break;case xc:for(;m<32;){if(l===0)break t;l--,d+=i[o++]<>>=m&7,m-=m&7,e.mode=kl;break}for(;m<3;){if(l===0)break t;l--,d+=i[o++]<>>=1,m-=1,d&3){case 0:e.mode=Ac;break;case 1:if(i0(e),e.mode=rs,n===is){d>>>=2,m-=2;break t}break;case 2:e.mode=Lc;break;case 3:t.msg=`invalid block type`,e.mode=Be}d>>>=2,m-=2;break;case Ac:for(d>>>=m&7,m-=m&7;m<32;){if(l===0)break t;l--,d+=i[o++]<>>16^65535)){t.msg=`invalid stored block lengths`,e.mode=Be;break}if(e.length=d&65535,d=0,m=0,e.mode=Sl,n===is)break t;case Sl:e.mode=Nc;case Nc:if(p=e.length,p){if(p>l&&(p=l),p>c&&(p=c),p===0)break t;a.set(i.subarray(o,o+p),f),l-=p,o+=p,c-=p,f+=p,e.length-=p;break}e.mode=Ui;break;case Lc:for(;m<14;){if(l===0)break t;l--,d+=i[o++]<>>=5,m-=5,e.ndist=(d&31)+1,d>>>=5,m-=5,e.ncode=(d&15)+4,d>>>=4,m-=4,e.nlen>286||e.ndist>30){t.msg=`too many length or distance symbols`,e.mode=Be;break}e.have=0,e.mode=Sc;case Sc:for(;e.have>>=3,m-=3}for(;e.have<19;)e.lens[F[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,et={bits:e.lenbits},tt=ro(V2,e.lens,0,19,e.lencode,0,e.work,et),e.lenbits=et.bits,tt){t.msg=`invalid code lengths set`,e.mode=Be;break}e.have=0,e.mode=kc;case kc:for(;e.have>>24,Z=B>>>16&255,$=B&65535,!(k<=m);){if(l===0)break t;l--,d+=i[o++]<>>=k,m-=k,e.lens[e.have++]=$;else{if($===16){for(N=k+2;m>>=k,m-=k,e.have===0){t.msg=`invalid bit length repeat`,e.mode=Be;break}mt=e.lens[e.have-1],p=3+(d&3),d>>>=2,m-=2}else if($===17){for(N=k+3;m>>=k,m-=k,mt=0,p=3+(d&7),d>>>=3,m-=3}else{for(N=k+7;m>>=k,m-=k,mt=0,p=11+(d&127),d>>>=7,m-=7}if(e.have+p>e.nlen+e.ndist){t.msg=`invalid bit length repeat`,e.mode=Be;break}for(;p--;)e.lens[e.have++]=mt}}if(e.mode===Be)break;if(e.lens[256]===0){t.msg=`invalid code -- missing end-of-block`,e.mode=Be;break}if(e.lenbits=9,et={bits:e.lenbits},tt=ro(cf,e.lens,0,e.nlen,e.lencode,0,e.work,et),e.lenbits=et.bits,tt){t.msg=`invalid literal/lengths set`,e.mode=Be;break}if(e.distbits=6,e.distcode=e.distdyn,et={bits:e.distbits},tt=ro(ff,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,et),e.distbits=et.bits,tt){t.msg=`invalid distances set`,e.mode=Be;break}if(e.mode=rs,n===is)break t;case rs:e.mode=as;case as:if(l>=6&&c>=258){t.next_out=f,t.avail_out=c,t.next_in=o,t.avail_in=l,e.hold=d,e.bits=m,U2(t,L),f=t.next_out,a=t.output,c=t.avail_out,o=t.next_in,i=t.input,l=t.avail_in,d=e.hold,m=e.bits,e.mode===Ui&&(e.back=-1);break}for(e.back=0;B=e.lencode[d&(1<>>24,Z=B>>>16&255,$=B&65535,!(k<=m);){if(l===0)break t;l--,d+=i[o++]<>D)],k=B>>>24,Z=B>>>16&255,$=B&65535,!(D+k<=m);){if(l===0)break t;l--,d+=i[o++]<>>=D,m-=D,e.back+=D}if(d>>>=k,m-=k,e.back+=k,e.length=$,Z===0){e.mode=Fc;break}if(Z&32){e.back=-1,e.mode=Ui;break}if(Z&64){t.msg=`invalid literal/length code`,e.mode=Be;break}e.extra=Z&15,e.mode=Pc;case Pc:if(e.extra){for(N=e.extra;m>>=e.extra,m-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=Ec;case Ec:for(;B=e.distcode[d&(1<>>24,Z=B>>>16&255,$=B&65535,!(k<=m);){if(l===0)break t;l--,d+=i[o++]<>D)],k=B>>>24,Z=B>>>16&255,$=B&65535,!(D+k<=m);){if(l===0)break t;l--,d+=i[o++]<>>=D,m-=D,e.back+=D}if(d>>>=k,m-=k,e.back+=k,Z&64){t.msg=`invalid distance code`,e.mode=Be;break}e.offset=$,e.extra=Z&15,e.mode=Ic;case Ic:if(e.extra){for(N=e.extra;m>>=e.extra,m-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){t.msg=`invalid distance too far back`,e.mode=Be;break}e.mode=Cc;case Cc:if(c===0)break t;if(p=L-c,e.offset>p){if(p=e.offset-p,p>e.whave&&e.sane){t.msg=`invalid distance too far back`,e.mode=Be;break}p>e.wnext?(p-=e.wnext,T=e.wsize-p):T=e.wnext-p,p>e.length&&(p=e.length),O=e.window}else O=a,T=f-e.offset,p=e.length;p>c&&(p=c),c-=p,e.length-=p;do a[f++]=O[T++];while(--p);e.length===0&&(e.mode=as);break;case Fc:if(c===0)break t;a[f++]=e.length,c--,e.mode=as;break;case kl:if(e.wrap){for(;m<32;){if(l===0)break t;l--,d|=i[o++]<{if(Br(t))return Xn;let n=t.state;return n.window&&(n.window=null),t.state=null,Rr};o0=(t,n)=>{if(Br(t))return Xn;let e=t.state;return(e.wrap&2)===0?Xn:(e.head=n,n.done=!1,Rr)};s0=(t,n)=>{let e=n.length,i,a,o;return Br(t)||(i=t.state,i.wrap!==0&&i.mode!==hs)?Xn:i.mode===hs&&(a=1,a=ho(a,n,e,0),a!==i.check)?uf:(o=_f(t,n,e,e),o?(i.mode=pf,df):(i.havedict=1,Rr))};wi={inflateReset:bf,inflateReset2:vf,inflateResetKeep:mf,inflateInit:n0,inflateInit2:wf,inflate:r0,inflateEnd:a0,inflateGetHeader:o0,inflateSetDictionary:s0,inflateInfo:`pako inflate (from Nodeca project)`};w0=v0,yf=Object.prototype.toString,{Z_NO_FLUSH:_0,Z_FINISH:jc,Z_OK:da,Z_STREAM_END:Il,Z_NEED_DICT:Cl,Z_STREAM_ERROR:y0,Z_DATA_ERROR:Mc,Z_MEM_ERROR:x0,Z_BUF_ERROR:Dc}=ba,A0={chunkSize:1024*64,windowBits:15,to:``};mo.prototype.push=function(t,n){let e=this.strm,i=this.options.chunkSize,a=this.options.dictionary,o,f,l;if(this.ended)return!1;for(n===~~n?f=n:f=n===!0?jc:_0,yf.call(t)===`[object ArrayBuffer]`?e.input=new Uint8Array(t):e.input=t,e.next_in=0,e.avail_in=e.input.length;;){for(e.avail_out===0&&(e.output=new Uint8Array(i),e.next_out=0,e.avail_out=i),o=wi.inflate(e,f),o===Cl&&a&&(o=wi.inflateSetDictionary(e,a),o===da?o=wi.inflate(e,f):o===Mc&&(o=Cl));e.avail_in>0&&o===Il&&e.state.wrap&2&&e.state.flags!==0&&e.input[e.next_in]!==0;)wi.inflateReset(e),o=wi.inflate(e,f);switch(o){case y0:case Mc:case Cl:case x0:return this.onEnd(o),this.ended=!0,!1}if(l=e.avail_out,e.next_out&&(e.avail_out===0||o===Il||f>0))if(this.options.to===`string`){let c=fo.utf8border(e.output,e.next_out),d=e.next_out-c,m=fo.buf2string(e.output,c);e.next_out=d,e.avail_out=i-d,d&&e.output.set(e.output.subarray(c,c+d),0),this.onData(m)}else this.onData(e.output.length===e.next_out?e.output:e.output.subarray(0,e.next_out)),e.avail_out=0,e.next_out=0;if(!((o===da||o===Dc)&&l===0)){if(o===Il)return o=wi.inflateEnd(this.strm),this.onEnd(o),this.ended=!0,!0;if(e.avail_in===0){if(f===jc)return o=wi.inflateEnd(this.strm),this.onEnd(o===da?Dc:o),this.ended=!0,!1;break}}}return!0};mo.prototype.onData=function(t){this.chunks.push(t)};mo.prototype.onEnd=function(t){t===da&&(this.options.to===`string`?this.result=this.chunks.join(``):this.result=fs.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};I0={Inflate:mo,inflate:$l,inflateRaw:N0,ungzip:$l,constants:ba},{Deflate:X5,deflate:J5,deflateRaw:Q5,gzip:td}=M2,{Inflate:C0,inflate:F0,inflateRaw:ed,ungzip:nd}=I0;Yl=C0;xf=F0;Nf=[];for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)n&1?n=3988292384^n>>>1:n=n>>>1;Nf[t]=n}Af=4294967295;B0=new Uint16Array([255]);M0=new Uint8Array(B0.buffer)[0]===255;U0=new Uint16Array([255]);z0=new Uint8Array(U0.buffer)[0]===255;H0=new Uint8Array(0);vs=Uint8Array.of(137,80,78,71,13,10,26,10);Pf=`tEXt`;V0=0;Ef=new TextDecoder(`latin1`);$0=/^[\u0000-\u00FF]*$/;Pn={UNKNOWN:-1,GREYSCALE:0,TRUECOLOUR:2,INDEXED_COLOUR:3,GREYSCALE_ALPHA:4,TRUECOLOUR_ALPHA:6};bo={UNKNOWN:-1,DEFLATE:0};ws={UNKNOWN:-1,ADAPTIVE:0};vo={UNKNOWN:-1,NO_INTERLACE:0,ADAM7:1};wo={NONE:0,BACKGROUND:1,PREVIOUS:2};_s={SOURCE:0,OVER:1};ys=class extends Ja{_checkCrc;_inflator;_png;_apng;_end;_hasPalette;_palette;_hasTransparency;_transparency;_compressionMethod;_filterMethod;_interlaceMethod;_colorType;_isAnimated;_numberOfFrames;_numberOfPlays;_frames;_writingDataChunks;constructor(n,e={}){super(n);let{checkCrc:i=!1}=e;this._checkCrc=i,this._inflator=new Yl,this._png={width:-1,height:-1,channels:-1,data:new Uint8Array(0),depth:1,text:{}},this._apng={width:-1,height:-1,channels:-1,depth:1,numberOfFrames:1,numberOfPlays:0,text:{},frames:[]},this._end=!1,this._hasPalette=!1,this._palette=[],this._hasTransparency=!1,this._transparency=new Uint16Array(0),this._compressionMethod=bo.UNKNOWN,this._filterMethod=ws.UNKNOWN,this._interlaceMethod=vo.UNKNOWN,this._colorType=Pn.UNKNOWN,this._isAnimated=!1,this._numberOfFrames=1,this._numberOfPlays=0,this._frames=[],this._writingDataChunks=!1,this.setBigEndian()}decode(){for(Jl(this);!this._end;){let n=this.readUint32(),e=this.readChars(4);this.decodeChunk(n,e)}return this.decodeImage(),this._png}decodeApng(){for(Jl(this);!this._end;){let n=this.readUint32(),e=this.readChars(4);this.decodeApngChunk(n,e)}return this.decodeApngImage(),this._apng}decodeChunk(n,e){let i=this.offset;switch(e){case`IHDR`:this.decodeIHDR();break;case`PLTE`:this.decodePLTE(n);break;case`IDAT`:this.decodeIDAT(n);break;case`IEND`:this._end=!0;break;case`tRNS`:this.decodetRNS(n);break;case`iCCP`:this.decodeiCCP(n);break;case Pf:If(this._png.text,this,n);break;case`pHYs`:this.decodepHYs();break;default:this.skip(n);break}if(this.offset-i!==n)throw new Error(`Length mismatch while decoding chunk ${e}`);this._checkCrc?Kl(this,n+4,e):this.skip(4)}decodeApngChunk(n,e){let i=this.offset;switch(e!==`fdAT`&&e!==`IDAT`&&this._writingDataChunks&&this.pushDataToFrame(),e){case`acTL`:this.decodeACTL();break;case`fcTL`:this.decodeFCTL();break;case`fdAT`:this.decodeFDAT(n);break;default:this.decodeChunk(n,e),this.offset=i+n;break}if(this.offset-i!==n)throw new Error(`Length mismatch while decoding chunk ${e}`);this._checkCrc?Kl(this,n+4,e):this.skip(4)}decodeIHDR(){let n=this._png;n.width=this.readUint32(),n.height=this.readUint32(),n.depth=X0(this.readUint8());let e=this.readUint8();this._colorType=e;let i;switch(e){case Pn.GREYSCALE:i=1;break;case Pn.TRUECOLOUR:i=3;break;case Pn.INDEXED_COLOUR:i=1;break;case Pn.GREYSCALE_ALPHA:i=2;break;case Pn.TRUECOLOUR_ALPHA:i=4;break;case Pn.UNKNOWN:default:throw new Error(`Unknown color type: ${e}`)}if(this._png.channels=i,this._compressionMethod=this.readUint8(),this._compressionMethod!==bo.DEFLATE)throw new Error(`Unsupported compression method: ${this._compressionMethod}`);this._filterMethod=this.readUint8(),this._interlaceMethod=this.readUint8()}decodeACTL(){this._numberOfFrames=this.readUint32(),this._numberOfPlays=this.readUint32(),this._isAnimated=!0}decodeFCTL(){let n={sequenceNumber:this.readUint32(),width:this.readUint32(),height:this.readUint32(),xOffset:this.readUint32(),yOffset:this.readUint32(),delayNumber:this.readUint16(),delayDenominator:this.readUint16(),disposeOp:this.readUint8(),blendOp:this.readUint8(),data:new Uint8Array(0)};this._frames.push(n)}decodePLTE(n){if(n%3!==0)throw new RangeError(`PLTE field length must be a multiple of 3. Got ${n}`);let e=n/3;this._hasPalette=!0;let i=[];this._palette=i;for(let a=0;athis._png.width*this._png.height)throw new Error(`tRNS chunk contains more alpha values than there are pixels (${n/2} vs ${this._png.width*this._png.height})`);this._hasTransparency=!0,this._transparency=new Uint16Array(n/2);for(let e=0;ethis._palette.length)throw new Error(`tRNS chunk contains more alpha values than there are palette colors (${n} vs ${this._palette.length})`);let e=0;for(;e{return{index:((o+e.yOffset)*this._png.width+e.xOffset+f)*this._png.channels,frameIndex:(o*e.width+f)*this._png.channels}};switch(e.blendOp){case _s.SOURCE:for(let o=0;o`u`?`undefined`:ye(window))!==`object`||window!==Yt?function(){}:typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype?function(t,n,e){var i=Yt.URL||Yt.webkitURL,a=document.createElement(`a`);n=n||t.name||`download`,a.download=n,a.rel=`noopener`,typeof t==`string`?(a.href=t,a.origin!==location.origin?Ff(a.href)?eh(t,n,e):xs(a,a.target=`_blank`):xs(a)):(a.href=i.createObjectURL(t),setTimeout(function(){i.revokeObjectURL(a.href)},4e4),setTimeout(function(){xs(a)},0))}:`msSaveOrOpenBlob`in navigator?function(t,n,e){if(n=n||t.name||`download`,typeof t==`string`)if(Ff(t))eh(t,n,e);else{var i=document.createElement(`a`);i.href=t,i.target=`_blank`,setTimeout(function(){xs(i)})}else navigator.msSaveOrOpenBlob((function(a,o){return o===void 0?o={autoBom:!1}:ye(o)!==`object`&&(ke.warn(`Deprecated: Expected third argument to be a object`),o={autoBom:!o}),o.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob([``,a],{type:a.type}):a})(t,e),n)}:function(t,n,e,i){if((i=i||open(``,`_blank`))&&(i.document.title=i.document.body.innerText=`downloading...`),typeof t==`string`)return eh(t,n,e);var a=t.type===`application/octet-stream`,o=/constructor/i.test(Yt.HTMLElement)||Yt.safari,f=/CriOS\/[\d]+/.test(navigator.userAgent);if((f||a&&o)&&(typeof FileReader>`u`?`undefined`:ye(FileReader))===`object`){var l=new FileReader;l.onloadend=function(){var m=l.result;m=f?m:m.replace(/^data:[^;]*;/,`data:attachment/file;`),i?i.location.href=m:location=m,i=null},l.readAsDataURL(t)}else{var c=Yt.URL||Yt.webkitURL,d=c.createObjectURL(t);i?i.location=d:location.href=d,i=null,setTimeout(function(){c.revokeObjectURL(d)},4e4)}});Ls=Yt.atob.bind(Yt);Of=Yt.btoa.bind(Yt);Tf=`0123456789abcdef`.split(``);e5=(function(t){for(var n=0;n>8&255,t>>16&255,t>>24&255)},xa.prototype.toHexString=function(t){return t.split(``).map(function(n){return(`0`+(255&n.charCodeAt(0)).toString(16)).slice(-2)}).join(``)},xa.prototype.hexToBytes=function(t){for(var n=[],e=0;e>8&255,t>>16&255,255&n,n>>8&255)).substr(0,10);return function(i){return hh(e,i)}},Is.prototype.equals=function(t){var n,e=`id,objectNumber,equals`;if(!t||ye(t)!==ye(this))return!1;var i=0;for(n in this)if(!(e.indexOf(n)>=0)){if(this.hasOwnProperty(n)&&!t.hasOwnProperty(n)||this[n]!==t[n])return!1;i++}for(n in t)t.hasOwnProperty(n)&&e.indexOf(n)<0&&i--;return i===0},Mt.API={events:[]},Mt.version=`4.2.1`;ze=Mt.API;uh=1;qr=function(t){return t.replace(/\\/g,`\\\\`).replace(/\(/g,`\\(`).replace(/\)/g,`\\)`)};_a=function(t){return t.replace(/\\\\/g,`\\`).replace(/\\\(/g,`(`).replace(/\\\)/g,`)`)};Ur=function(t){return t.toString().replace(/#/g,`#23`).replace(/[\s\n\r()<>[\]{}\/%]/g,function(n){var e=n.charCodeAt(0).toString(16).toUpperCase();return`#`+(e.length===1?`0`+e:e)})};Xt=function(t){return t.toFixed(2)};sr=function(t){return t.toFixed(5)};ze.__acroform__={};On=function(t,n){t.prototype=Object.create(n.prototype),t.prototype.constructor=t};jf=function(t){return t*uh};Ai=function(t){var n=new ru,e=It.internal.getHeight(t)||0,i=It.internal.getWidth(t)||0;return n.BBox=[0,0,Number(Xt(i)),Number(Xt(e))],n};n5=ze.__acroform__.setBit=function(t,n){if(t=t||0,n=n||0,isNaN(t)||isNaN(n))throw new Error(`Invalid arguments passed to jsPDF.API.__acroform__.setBit`);return t|1<0;){n=``,o--;var d,m,A=As(`3`,t,o).height,L=t.multiline?f-o:(f-A)/2,p=L+=2,T=0,O=0,B=0;if(o<=0){n=`(...) Tj +`,n+=`% Width of Text: `+As(n,t,o=12).width+`, FieldWidth:`+l+` +`;break}for(var k=``,Z=0,$=0;$f)continue t;k+=a[$][B],D=!0,O=$,$--}else{k=(k+=a[$][B]+` `).substr(k.length-1)==` `?k.substr(0,k.length-1):k;var lt=parseInt($),_t=c(lt,k,o),mt=$>=a.length-1;if(_t&&!mt){k+=` `,B=0;continue}if(_t||mt){if(mt)O=lt;else if(t.multiline&&(A+2)*(Z+2)+2>f)continue t}else{if(!t.multiline||(A+2)*(Z+2)+2>f)continue t;O=lt}}for(var tt=``,z=T;z<=O;z++){var et=a[z];if(t.multiline){if(z===O){tt+=et[B]+` `,B=(B+1)%et.length;continue}if(z===T){tt+=et[et.length-1]+` `;continue}}tt+=et[0]+` `}switch(tt=tt.substr(tt.length-1)==` `?tt.substr(0,tt.length-1):tt,m=As(tt,t,o).width,t.textAlign){case`right`:d=l-m-2;break;case`center`:d=(l-m)/2;break;default:d=2}n+=Xt(d)+` `+Xt(p)+` Td +`,n+=`(`+qr(tt)+`) Tj +`,n+=-Xt(d)+` 0 Td +`,p=-(o+2),m=0,T=D?O:O+1,Z++,k=``}break}return i.text=n,i.fontSize=o,i};As=function(t,n,e){var i=n.scope.internal.getFont(n.fontName,n.fontStyle),a=n.scope.getStringUnitWidth(t,{font:i,fontSize:parseFloat(e),charSpace:0})*parseFloat(e);return{height:n.scope.getStringUnitWidth(`3`,{font:i,fontSize:parseFloat(e),charSpace:0})*parseFloat(e)*1.5,width:a}};s5={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1};l5=function(t,n){var e={type:`reference`,object:t};n.internal.getPageInfo(t.page).pageContext.annotations.find(function(i){return i.type===e.type&&i.object===e.object})===void 0&&n.internal.getPageInfo(t.page).pageContext.annotations.push(e)};h5=function(t,n){if(n.scope=t,t.internal!==void 0&&(t.internal.acroformPlugin===void 0||t.internal.acroformPlugin.isInitialized===!1)){if(oi.FieldNum=0,t.internal.acroformPlugin=JSON.parse(JSON.stringify(s5)),t.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(`Exception while creating AcroformDictionary`);uh=t.internal.scaleFactor,t.internal.acroformPlugin.acroFormDictionaryRoot=new au,t.internal.acroformPlugin.acroFormDictionaryRoot.scope=t,t.internal.acroformPlugin.acroFormDictionaryRoot._eventID=t.internal.events.subscribe(`postPutResources`,function(){(function(e){e.internal.events.unsubscribe(e.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete e.internal.acroformPlugin.acroFormDictionaryRoot._eventID,e.internal.acroformPlugin.printedOut=!0})(t)}),t.internal.events.subscribe(`buildDocument`,function(){(function(e){e.internal.acroformPlugin.acroFormDictionaryRoot.objId=void 0;var i=e.internal.acroformPlugin.acroFormDictionaryRoot.Fields;for(var a in i)if(i.hasOwnProperty(a)){var o=i[a];o.objId=void 0,o.hasAnnotation&&l5(o,e)}})(t)}),t.internal.events.subscribe(`putCatalog`,function(){(function(e){if(e.internal.acroformPlugin.acroFormDictionaryRoot===void 0)throw new Error(`putCatalogCallback: Root missing.`);e.internal.write(`/AcroForm `+e.internal.acroformPlugin.acroFormDictionaryRoot.objId+` 0 R`)})(t)}),t.internal.events.subscribe(`postPutPages`,function(e){(function(i,a){var o=!i;for(var f in i||(a.internal.newObjectDeferredBegin(a.internal.acroformPlugin.acroFormDictionaryRoot.objId,!0),a.internal.acroformPlugin.acroFormDictionaryRoot.putStream()),i=i||a.internal.acroformPlugin.acroFormDictionaryRoot.Kids)if(i.hasOwnProperty(f)){var l=i[f],c=[],d=l.Rect;if(l.Rect&&(l.Rect=a5(l.Rect,a)),a.internal.newObjectDeferredBegin(l.objId,!0),l.DA=It.createDefaultAppearanceStream(l),ye(l)===`object`&&typeof l.getKeyValueListForStream==`function`&&(c=l.getKeyValueListForStream()),l.Rect=d,l.hasAppearanceStream&&!l.appearanceStreamContent){var m=o5(l);c.push({key:`AP`,value:`<>`}),a.internal.acroformPlugin.xForms.push(m)}if(l.appearanceStreamContent){var A=``;for(var L in l.appearanceStreamContent)if(l.appearanceStreamContent.hasOwnProperty(L)){var p=l.appearanceStreamContent[L];if(A+=`/`+L+` `,A+=`<<`,Object.keys(p).length>=1||Array.isArray(p)){for(var f in p)if(p.hasOwnProperty(f)){var T=p[f];typeof T==`function`&&(T=T.call(a,l)),A+=`/`+f+` `+T+` `,a.internal.acroformPlugin.xForms.indexOf(T)>=0||a.internal.acroformPlugin.xForms.push(T)}}else typeof(T=p)==`function`&&(T=T.call(a,l)),A+=`/`+f+` `+T,a.internal.acroformPlugin.xForms.indexOf(T)>=0||a.internal.acroformPlugin.xForms.push(T);A+=`>>`}c.push({key:`AP`,value:`<< +`+A+`>>`})}a.internal.putStream({additionalKeyValues:c,objectId:l.objId}),a.internal.out(`endobj`)}o&&(function(O,B){for(var k in O)if(O.hasOwnProperty(k)){var Z=k,$=O[k];B.internal.newObjectDeferredBegin($.objId,!0),ye($)===`object`&&typeof $.putStream==`function`&&$.putStream(),delete O[Z]}})(a.internal.acroformPlugin.xForms,a)})(e,t)}),t.internal.acroformPlugin.isInitialized=!0}};iu=ze.__acroform__.arrayToPdfArray=function(t,n,e){var i=function(f){return f};if(Array.isArray(t)){for(var a=`[`,o=0;o0?n:void 0}}),Object.defineProperty(this,"Fields",{enumerable:!1,configurable:!1,get:function(){return n}}),Object.defineProperty(this,"DA",{enumerable:!1,configurable:!1,get:function(){if(t){var e=function(i){return i};return this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),`(`+qr(e(t))+`)`}},set:function(e){t=e}})};On(au,Ni);oi=function t(){Ni.call(this);var n=4;Object.defineProperty(this,"F",{enumerable:!1,configurable:!1,get:function(){return n},set:function(k){if(isNaN(k))throw new Error(`Invalid value "`+k+`" for attribute F supplied.`);n=k}}),Object.defineProperty(this,"showWhenPrinted",{enumerable:!0,configurable:!0,get:function(){return!!Ze(n,3)},set:function(k){k?this.F=$e(n,3):this.F=Ye(n,3)}});var e=0;Object.defineProperty(this,"Ff",{enumerable:!1,configurable:!1,get:function(){return e},set:function(k){if(isNaN(k))throw new Error(`Invalid value "`+k+`" for attribute Ff supplied.`);e=k}});var i=[];Object.defineProperty(this,"Rect",{enumerable:!1,configurable:!1,get:function(){if(i.length!==0)return i},set:function(k){i=k!==void 0?k:[]}}),Object.defineProperty(this,"x",{enumerable:!0,configurable:!0,get:function(){return!i||isNaN(i[0])?0:i[0]},set:function(k){i[0]=k}}),Object.defineProperty(this,"y",{enumerable:!0,configurable:!0,get:function(){return!i||isNaN(i[1])?0:i[1]},set:function(k){i[1]=k}}),Object.defineProperty(this,"width",{enumerable:!0,configurable:!0,get:function(){return!i||isNaN(i[2])?0:i[2]},set:function(k){i[2]=k}}),Object.defineProperty(this,"height",{enumerable:!0,configurable:!0,get:function(){return!i||isNaN(i[3])?0:i[3]},set:function(k){i[3]=k}});var a=``;Object.defineProperty(this,"FT",{enumerable:!0,configurable:!1,get:function(){return a},set:function(k){switch(k){case`/Btn`:case`/Tx`:case`/Ch`:case`/Sig`:a=k;break;default:throw new Error(`Invalid value "`+k+`" for attribute FT supplied.`)}}});var o=null;Object.defineProperty(this,"T",{enumerable:!0,configurable:!1,get:function(){if(!o||o.length<1){if(this instanceof Cs)return;o=`FieldObject`+t.FieldNum++}var k=function(Z){return Z};return this.scope&&(k=this.scope.internal.getEncryptor(this.objId)),`(`+qr(k(o))+`)`},set:function(k){o=k.toString()}}),Object.defineProperty(this,"fieldName",{configurable:!0,enumerable:!0,get:function(){return o},set:function(k){o=k}});var f=`helvetica`;Object.defineProperty(this,"fontName",{enumerable:!0,configurable:!0,get:function(){return f},set:function(k){f=k}});var l=`normal`;Object.defineProperty(this,"fontStyle",{enumerable:!0,configurable:!0,get:function(){return l},set:function(k){l=k}});var c=0;Object.defineProperty(this,"fontSize",{enumerable:!0,configurable:!0,get:function(){return c},set:function(k){c=k}});var d=void 0;Object.defineProperty(this,"maxFontSize",{enumerable:!0,configurable:!0,get:function(){return d===void 0?50/uh:d},set:function(k){d=k}});var m=`black`;Object.defineProperty(this,"color",{enumerable:!0,configurable:!0,get:function(){return m},set:function(k){m=k}});var A=`/F1 0 Tf 0 g`;Object.defineProperty(this,"DA",{enumerable:!0,configurable:!1,get:function(){if(!(!A||this instanceof Cs||this instanceof Dr))return ih(A,this.objId,this.scope)},set:function(k){k=k.toString(),A=k}});var L=null;Object.defineProperty(this,"DV",{enumerable:!1,configurable:!1,get:function(){if(L)return this instanceof on==0?ih(L,this.objId,this.scope):L},set:function(k){k=k.toString(),L=this instanceof on==0?k.substr(0,1)===`(`?_a(k.substr(1,k.length-2)):_a(k):k}}),Object.defineProperty(this,"defaultValue",{enumerable:!0,configurable:!0,get:function(){return this instanceof on==1?_a(L.substr(1,L.length-1)):L},set:function(k){k=k.toString(),L=this instanceof on==1?`/`+Ur(k):k}});var p=null;Object.defineProperty(this,"_V",{enumerable:!1,configurable:!1,get:function(){if(p)return p},set:function(k){this.V=k}}),Object.defineProperty(this,"V",{enumerable:!1,configurable:!1,get:function(){if(p)return this instanceof on==0?ih(p,this.objId,this.scope):p},set:function(k){k=k.toString(),p=this instanceof on==0?k.substr(0,1)===`(`?_a(k.substr(1,k.length-2)):_a(k):k}}),Object.defineProperty(this,"value",{enumerable:!0,configurable:!0,get:function(){return this instanceof on==1?_a(p.substr(1,p.length-1)):p},set:function(k){k=k.toString(),p=this instanceof on==1?`/`+Ur(k):k}}),Object.defineProperty(this,"hasAnnotation",{enumerable:!0,configurable:!0,get:function(){return this.Rect}}),Object.defineProperty(this,"Type",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?`/Annot`:null}}),Object.defineProperty(this,"Subtype",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?`/Widget`:null}});var T,O=!1;Object.defineProperty(this,"hasAppearanceStream",{enumerable:!0,configurable:!0,get:function(){return O},set:function(k){k=!!k,O=k}}),Object.defineProperty(this,"page",{enumerable:!0,configurable:!0,get:function(){if(T)return T},set:function(k){T=k}}),Object.defineProperty(this,"readOnly",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,1)},set:function(k){k?this.Ff=$e(this.Ff,1):this.Ff=Ye(this.Ff,1)}}),Object.defineProperty(this,"required",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,2)},set:function(k){k?this.Ff=$e(this.Ff,2):this.Ff=Ye(this.Ff,2)}}),Object.defineProperty(this,"noExport",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,3)},set:function(k){k?this.Ff=$e(this.Ff,3):this.Ff=Ye(this.Ff,3)}});var B=null;Object.defineProperty(this,"Q",{enumerable:!0,configurable:!1,get:function(){if(B!==null)return B},set:function(k){if([0,1,2].indexOf(k)===-1)throw new Error(`Invalid value "`+k+`" for attribute Q supplied.`);B=k}}),Object.defineProperty(this,"textAlign",{get:function(){var k;switch(B){case 0:default:k=`left`;break;case 1:k=`center`;break;case 2:k=`right`}return k},configurable:!0,enumerable:!0,set:function(k){switch(k){case`right`:case 2:B=2;break;case`center`:case 1:B=1;break;default:B=0}}})};On(oi,Ni);La=function(){oi.call(this),this.FT=`/Ch`,this.V=`()`,this.fontName=`zapfdingbats`;var t=0;Object.defineProperty(this,"TI",{enumerable:!0,configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,"topIndex",{enumerable:!0,configurable:!0,get:function(){return t},set:function(e){t=e}});var n=[];Object.defineProperty(this,"Opt",{enumerable:!0,configurable:!1,get:function(){return iu(n,this.objId,this.scope)},set:function(e){var i,a=[];typeof(i=e)==`string`&&(a=(function(o,f,l){l||(l=1);for(var c,d=[];c=f.exec(o);)d.push(c[l]);return d})(i,/\((.*?)\)/g)),n=a}}),this.getOptions=function(){return n},this.setOptions=function(e){n=e,this.sort&&n.sort()},this.addOption=function(e){e=(e=e||``).toString(),n.push(e),this.sort&&n.sort()},this.removeOption=function(e,i){for(i=i||!1,e=(e=e||``).toString();n.indexOf(e)!==-1&&(n.splice(n.indexOf(e),1),i!==!1););},Object.defineProperty(this,"combo",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,18)},set:function(e){e?this.Ff=$e(this.Ff,18):this.Ff=Ye(this.Ff,18)}}),Object.defineProperty(this,"edit",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,19)},set:function(e){this.combo===!0&&(e?this.Ff=$e(this.Ff,19):this.Ff=Ye(this.Ff,19))}}),Object.defineProperty(this,"sort",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,20)},set:function(e){e?(this.Ff=$e(this.Ff,20),n.sort()):this.Ff=Ye(this.Ff,20)}}),Object.defineProperty(this,"multiSelect",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,22)},set:function(e){e?this.Ff=$e(this.Ff,22):this.Ff=Ye(this.Ff,22)}}),Object.defineProperty(this,"doNotSpellCheck",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,23)},set:function(e){e?this.Ff=$e(this.Ff,23):this.Ff=Ye(this.Ff,23)}}),Object.defineProperty(this,"commitOnSelChange",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,27)},set:function(e){e?this.Ff=$e(this.Ff,27):this.Ff=Ye(this.Ff,27)}}),this.hasAppearanceStream=!1};On(La,oi);Sa=function(){La.call(this),this.fontName=`helvetica`,this.combo=!1};On(Sa,La);ka=function(){Sa.call(this),this.combo=!0};On(ka,Sa);Ss=function(){ka.call(this),this.edit=!0};On(Ss,ka);on=function(){oi.call(this),this.FT=`/Btn`,Object.defineProperty(this,"noToggleToOff",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,15)},set:function(e){e?this.Ff=$e(this.Ff,15):this.Ff=Ye(this.Ff,15)}}),Object.defineProperty(this,"radio",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,16)},set:function(e){e?this.Ff=$e(this.Ff,16):this.Ff=Ye(this.Ff,16)}}),Object.defineProperty(this,"pushButton",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,17)},set:function(e){e?this.Ff=$e(this.Ff,17):this.Ff=Ye(this.Ff,17)}}),Object.defineProperty(this,"radioIsUnison",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,26)},set:function(e){e?this.Ff=$e(this.Ff,26):this.Ff=Ye(this.Ff,26)}});var t,n={};Object.defineProperty(this,"MK",{enumerable:!1,configurable:!1,get:function(){var e=function(o){return o};if(this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),Object.keys(n).length!==0){var i,a=[];for(i in a.push(`<<`),n)a.push(`/`+i+` (`+qr(e(n[i]))+`)`);return a.push(`>>`),a.join(` +`)}},set:function(e){ye(e)===`object`&&(n=e)}}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,get:function(){return n.CA||``},set:function(e){typeof e==`string`&&(n.CA=e)}}),Object.defineProperty(this,"AS",{enumerable:!1,configurable:!1,get:function(){return t},set:function(e){var i=e==null?``:e.toString();i.substr(0,1)===`/`&&(i=i.substr(1)),t=`/`+Ur(i)}}),Object.defineProperty(this,"appearanceState",{enumerable:!0,configurable:!0,get:function(){return t.substr(1,t.length-1)},set:function(e){t=`/`+Ur(e)}})};On(on,oi);ks=function(){on.call(this),this.pushButton=!0};On(ks,on);Pa=function(){on.call(this),this.radio=!0,this.pushButton=!1;var t=[];Object.defineProperty(this,"Kids",{enumerable:!0,configurable:!1,get:function(){return t},set:function(n){t=n!==void 0?n:[]}})};On(Pa,on);Cs=function(){var t,n;oi.call(this),Object.defineProperty(this,"Parent",{enumerable:!1,configurable:!1,get:function(){return t},set:function(a){t=a}}),Object.defineProperty(this,"optionName",{enumerable:!1,configurable:!0,get:function(){return n},set:function(a){n=a}});var e,i={};Object.defineProperty(this,"MK",{enumerable:!1,configurable:!1,get:function(){var a=function(l){return l};this.scope&&(a=this.scope.internal.getEncryptor(this.objId));var o,f=[];for(o in f.push(`<<`),i)f.push(`/`+o+` (`+qr(a(i[o]))+`)`);return f.push(`>>`),f.join(` +`)},set:function(a){ye(a)===`object`&&(i=a)}}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,get:function(){return i.CA||``},set:function(a){typeof a==`string`&&(i.CA=a)}}),Object.defineProperty(this,"AS",{enumerable:!1,configurable:!1,get:function(){return e},set:function(a){var o=a==null?``:a.toString();o.substr(0,1)===`/`&&(o=o.substr(1)),e=`/`+Ur(o)}}),Object.defineProperty(this,"appearanceState",{enumerable:!0,configurable:!0,get:function(){return e.substr(1,e.length-1)},set:function(a){var o=a==null?``:a.toString();o.substr(0,1)===`/`&&(o=o.substr(1)),e=`/`+Ur(o)}}),this.caption=`l`,this.appearanceState=`Off`,this._AppearanceType=It.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(this.optionName)};On(Cs,oi),Pa.prototype.setAppearance=function(t){if(!(`createAppearanceStream`in t)||!(`getCA`in t))throw new Error(`Couldn't assign Appearance to RadioButton. Appearance was Invalid!`);for(var n in this.Kids)if(this.Kids.hasOwnProperty(n)){var e=this.Kids[n];e.appearanceStreamContent=t.createAppearanceStream(e.optionName),e.caption=t.getCA()}},Pa.prototype.createOption=function(t){var n=new Cs;return n.Parent=this,n.optionName=t,this.Kids.push(n),c5.call(this.scope,n),n};Ps=function(){on.call(this),this.fontName=`zapfdingbats`,this.caption=`3`,this.appearanceState=`On`,this.value=`On`,this.textAlign=`center`,this.appearanceStreamContent=It.CheckBox.createAppearanceStream()};On(Ps,on);Dr=function(){oi.call(this),this.FT=`/Tx`,Object.defineProperty(this,"multiline",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,13)},set:function(n){n?this.Ff=$e(this.Ff,13):this.Ff=Ye(this.Ff,13)}}),Object.defineProperty(this,"fileSelect",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,21)},set:function(n){n?this.Ff=$e(this.Ff,21):this.Ff=Ye(this.Ff,21)}}),Object.defineProperty(this,"doNotSpellCheck",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,23)},set:function(n){n?this.Ff=$e(this.Ff,23):this.Ff=Ye(this.Ff,23)}}),Object.defineProperty(this,"doNotScroll",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,24)},set:function(n){n?this.Ff=$e(this.Ff,24):this.Ff=Ye(this.Ff,24)}}),Object.defineProperty(this,"comb",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,25)},set:function(n){n?this.Ff=$e(this.Ff,25):this.Ff=Ye(this.Ff,25)}}),Object.defineProperty(this,"richText",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,26)},set:function(n){n?this.Ff=$e(this.Ff,26):this.Ff=Ye(this.Ff,26)}});var t=null;Object.defineProperty(this,"MaxLen",{enumerable:!0,configurable:!1,get:function(){return t},set:function(n){t=n}}),Object.defineProperty(this,"maxLength",{enumerable:!0,configurable:!0,get:function(){return t},set:function(n){Number.isInteger(n)&&(t=n)}}),Object.defineProperty(this,"hasAppearanceStream",{enumerable:!0,configurable:!0,get:function(){return this.V||this.DV}})};On(Dr,oi);Es=function(){Dr.call(this),Object.defineProperty(this,"password",{enumerable:!0,configurable:!0,get:function(){return!!Ze(this.Ff,14)},set:function(t){t?this.Ff=$e(this.Ff,14):this.Ff=Ye(this.Ff,14)}}),this.password=!0};On(Es,Dr);It={CheckBox:{createAppearanceStream:function(){return{N:{On:It.CheckBox.YesNormal},D:{On:It.CheckBox.YesPushDown,Off:It.CheckBox.OffPushDown}}},YesPushDown:function(t){var n=Ai(t);n.scope=t.scope;var e=[],i=t.scope.internal.getFont(t.fontName,t.fontStyle).id,a=t.scope.__private__.encodeColorString(t.color),o=ch(t,t.caption);return e.push(`0.749023 g`),e.push(`0 0 `+Xt(It.internal.getWidth(t))+` `+Xt(It.internal.getHeight(t))+` re`),e.push(`f`),e.push(`BMC`),e.push(`q`),e.push(`0 0 1 rg`),e.push(`/`+i+` `+Xt(o.fontSize)+` Tf `+a),e.push(`BT`),e.push(o.text),e.push(`ET`),e.push(`Q`),e.push(`EMC`),n.stream=e.join(` +`),n},YesNormal:function(t){var n=Ai(t);n.scope=t.scope;var e=t.scope.internal.getFont(t.fontName,t.fontStyle).id,i=t.scope.__private__.encodeColorString(t.color),a=[],o=It.internal.getHeight(t),f=It.internal.getWidth(t),l=ch(t,t.caption);return a.push(`1 g`),a.push(`0 0 `+Xt(f)+` `+Xt(o)+` re`),a.push(`f`),a.push(`q`),a.push(`0 0 1 rg`),a.push(`0 0 `+Xt(f-1)+` `+Xt(o-1)+` re`),a.push(`W`),a.push(`n`),a.push(`0 g`),a.push(`BT`),a.push(`/`+e+` `+Xt(l.fontSize)+` Tf `+i),a.push(l.text),a.push(`ET`),a.push(`Q`),n.stream=a.join(` +`),n},OffPushDown:function(t){var n=Ai(t);n.scope=t.scope;var e=[];return e.push(`0.749023 g`),e.push(`0 0 `+Xt(It.internal.getWidth(t))+` `+Xt(It.internal.getHeight(t))+` re`),e.push(`f`),n.stream=e.join(` +`),n}},RadioButton:{Circle:{createAppearanceStream:function(t){var n={D:{Off:It.RadioButton.Circle.OffPushDown},N:{}};return n.N[t]=It.RadioButton.Circle.YesNormal,n.D[t]=It.RadioButton.Circle.YesPushDown,n},getCA:function(){return`l`},YesNormal:function(t){var n=Ai(t);n.scope=t.scope;var e=[],i=It.internal.getWidth(t)<=It.internal.getHeight(t)?It.internal.getWidth(t)/4:It.internal.getHeight(t)/4;i=Number((.9*i).toFixed(5));var a=It.internal.Bezier_C,o=Number((i*a).toFixed(5));return e.push(`q`),e.push(`1 0 0 1 `+sr(It.internal.getWidth(t)/2)+` `+sr(It.internal.getHeight(t)/2)+` cm`),e.push(i+` 0 m`),e.push(i+` `+o+` `+o+` `+i+` 0 `+i+` c`),e.push(`-`+o+` `+i+` -`+i+` `+o+` -`+i+` 0 c`),e.push(`-`+i+` -`+o+` -`+o+` -`+i+` 0 -`+i+` c`),e.push(o+` -`+i+` `+i+` -`+o+` `+i+` 0 c`),e.push(`f`),e.push(`Q`),n.stream=e.join(` +`),n},YesPushDown:function(t){var n=Ai(t);n.scope=t.scope;var e=[],i=It.internal.getWidth(t)<=It.internal.getHeight(t)?It.internal.getWidth(t)/4:It.internal.getHeight(t)/4;i=Number((.9*i).toFixed(5));var a=Number((2*i).toFixed(5)),o=Number((a*It.internal.Bezier_C).toFixed(5)),f=Number((i*It.internal.Bezier_C).toFixed(5));return e.push(`0.749023 g`),e.push(`q`),e.push(`1 0 0 1 `+sr(It.internal.getWidth(t)/2)+` `+sr(It.internal.getHeight(t)/2)+` cm`),e.push(a+` 0 m`),e.push(a+` `+o+` `+o+` `+a+` 0 `+a+` c`),e.push(`-`+o+` `+a+` -`+a+` `+o+` -`+a+` 0 c`),e.push(`-`+a+` -`+o+` -`+o+` -`+a+` 0 -`+a+` c`),e.push(o+` -`+a+` `+a+` -`+o+` `+a+` 0 c`),e.push(`f`),e.push(`Q`),e.push(`0 g`),e.push(`q`),e.push(`1 0 0 1 `+sr(It.internal.getWidth(t)/2)+` `+sr(It.internal.getHeight(t)/2)+` cm`),e.push(i+` 0 m`),e.push(i+` `+f+` `+f+` `+i+` 0 `+i+` c`),e.push(`-`+f+` `+i+` -`+i+` `+f+` -`+i+` 0 c`),e.push(`-`+i+` -`+f+` -`+f+` -`+i+` 0 -`+i+` c`),e.push(f+` -`+i+` `+i+` -`+f+` `+i+` 0 c`),e.push(`f`),e.push(`Q`),n.stream=e.join(` +`),n},OffPushDown:function(t){var n=Ai(t);n.scope=t.scope;var e=[],i=It.internal.getWidth(t)<=It.internal.getHeight(t)?It.internal.getWidth(t)/4:It.internal.getHeight(t)/4;i=Number((.9*i).toFixed(5));var a=Number((2*i).toFixed(5)),o=Number((a*It.internal.Bezier_C).toFixed(5));return e.push(`0.749023 g`),e.push(`q`),e.push(`1 0 0 1 `+sr(It.internal.getWidth(t)/2)+` `+sr(It.internal.getHeight(t)/2)+` cm`),e.push(a+` 0 m`),e.push(a+` `+o+` `+o+` `+a+` 0 `+a+` c`),e.push(`-`+o+` `+a+` -`+a+` `+o+` -`+a+` 0 c`),e.push(`-`+a+` -`+o+` -`+o+` -`+a+` 0 -`+a+` c`),e.push(o+` -`+a+` `+a+` -`+o+` `+a+` 0 c`),e.push(`f`),e.push(`Q`),n.stream=e.join(` +`),n}},Cross:{createAppearanceStream:function(t){var n={D:{Off:It.RadioButton.Cross.OffPushDown},N:{}};return n.N[t]=It.RadioButton.Cross.YesNormal,n.D[t]=It.RadioButton.Cross.YesPushDown,n},getCA:function(){return`8`},YesNormal:function(t){var n=Ai(t);n.scope=t.scope;var e=[],i=It.internal.calculateCross(t);return e.push(`q`),e.push(`1 1 `+Xt(It.internal.getWidth(t)-2)+` `+Xt(It.internal.getHeight(t)-2)+` re`),e.push(`W`),e.push(`n`),e.push(Xt(i.x1.x)+` `+Xt(i.x1.y)+` m`),e.push(Xt(i.x2.x)+` `+Xt(i.x2.y)+` l`),e.push(Xt(i.x4.x)+` `+Xt(i.x4.y)+` m`),e.push(Xt(i.x3.x)+` `+Xt(i.x3.y)+` l`),e.push(`s`),e.push(`Q`),n.stream=e.join(` +`),n},YesPushDown:function(t){var n=Ai(t);n.scope=t.scope;var e=It.internal.calculateCross(t),i=[];return i.push(`0.749023 g`),i.push(`0 0 `+Xt(It.internal.getWidth(t))+` `+Xt(It.internal.getHeight(t))+` re`),i.push(`f`),i.push(`q`),i.push(`1 1 `+Xt(It.internal.getWidth(t)-2)+` `+Xt(It.internal.getHeight(t)-2)+` re`),i.push(`W`),i.push(`n`),i.push(Xt(e.x1.x)+` `+Xt(e.x1.y)+` m`),i.push(Xt(e.x2.x)+` `+Xt(e.x2.y)+` l`),i.push(Xt(e.x4.x)+` `+Xt(e.x4.y)+` m`),i.push(Xt(e.x3.x)+` `+Xt(e.x3.y)+` l`),i.push(`s`),i.push(`Q`),n.stream=i.join(` +`),n},OffPushDown:function(t){var n=Ai(t);n.scope=t.scope;var e=[];return e.push(`0.749023 g`),e.push(`0 0 `+Xt(It.internal.getWidth(t))+` `+Xt(It.internal.getHeight(t))+` re`),e.push(`f`),n.stream=e.join(` +`),n}}},createDefaultAppearanceStream:function(t){var n=t.scope.internal.getFont(t.fontName,t.fontStyle).id,e=t.scope.__private__.encodeColorString(t.color);return`/`+n+` `+t.fontSize+` Tf `+e}};It.internal={Bezier_C:.551915024494,calculateCross:function(t){var n=It.internal.getWidth(t),e=It.internal.getHeight(t),i=Math.min(n,e);return{x1:{x:(n-i)/2,y:(e-i)/2+i},x2:{x:(n-i)/2+i,y:(e-i)/2},x3:{x:(n-i)/2,y:(e-i)/2},x4:{x:(n-i)/2+i,y:(e-i)/2+i}}}},It.internal.getWidth=function(t){var n=0;return ye(t)===`object`&&(n=jf(t.Rect[2])),n},It.internal.getHeight=function(t){var n=0;return ye(t)===`object`&&(n=jf(t.Rect[3])),n};c5=ze.addField=function(t){if(h5(this,t),!(t instanceof oi))throw new Error(`Invalid argument passed to jsPDF.addField.`);var n;return(n=t).scope.internal.acroformPlugin.printedOut&&(n.scope.internal.acroformPlugin.printedOut=!1,n.scope.internal.acroformPlugin.acroFormDictionaryRoot=null),n.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(n),t.page=t.scope.internal.getCurrentPageInfo().pageNumber,this};ze.AcroFormChoiceField=La,ze.AcroFormListBox=Sa,ze.AcroFormComboBox=ka,ze.AcroFormEditBox=Ss,ze.AcroFormButton=on,ze.AcroFormPushButton=ks,ze.AcroFormRadioButton=Pa,ze.AcroFormCheckBox=Ps,ze.AcroFormTextField=Dr,ze.AcroFormPasswordField=Es,ze.AcroFormAppearance=It,ze.AcroForm={ChoiceField:La,ListBox:Sa,ComboBox:ka,EditBox:Ss,Button:on,PushButton:ks,RadioButton:Pa,CheckBox:Ps,TextField:Dr,PasswordField:Es,Appearance:It},Mt.AcroForm={ChoiceField:La,ListBox:Sa,ComboBox:ka,EditBox:Ss,Button:on,PushButton:ks,RadioButton:Pa,CheckBox:Ps,TextField:Dr,PasswordField:Es,Appearance:It};Xd=Mt.AcroForm;(function(t){t.__addimage__={};var e=`UNKNOWN`,i={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0],[255,216,255,219],[255,216,255,238]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],WEBP:[[82,73,70,70,void 0,void 0,void 0,void 0,87,69,66,80]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},a=t.__addimage__.getImageFileTypeByImageData=function(N,F){var U,q,it,ft,pt,nt=e;if((F=F||e)===`RGBA`||N.data!==void 0&&N.data instanceof Uint8ClampedArray&&`height`in N&&`width`in N)return`RGBA`;if(_t(N))for(pt in i)for(it=i[pt],U=0;U>`}),`transparency`in F&&Array.isArray(F.transparency)&&F.transparency.length>0){for(var pt=``,nt=0,ut=F.transparency.length;nt>`,O.content=o;var $=O.objId+` 0 R`;o=`<>`,B.content=o,this.internal.write(O.objId,`0 R`,B.objId,`0 R`);break;case`freetext`:a=`/Rect [`+f(i.bounds.x)+` `+l(i.bounds.y)+` `+f(i.bounds.x+i.bounds.w)+` `+l(i.bounds.y+i.bounds.h)+`] `;var D=`font: Helvetica,sans-serif 12.0pt; text-align:left; color:#`+(i.color||`#000000`);o=`<>`,this.internal.write(o);break;case`link`:if(i.options.name){var lt=this.annotations._nameMap[i.options.name];i.options.pageNumber=lt.page,i.options.top=lt.y}else i.options.top||(i.options.top=0);if(a=`/Rect [`+i.finalBounds.x+` `+i.finalBounds.y+` `+i.finalBounds.w+` `+i.finalBounds.h+`] `,o=``,i.options.url)o=`<>`;else if(i.options.pageNumber)switch(o=`<>`,this.internal.write(o))}}this.internal.write(`]`)}}]),t.createAnnotation=function(e){var i=this.internal.getCurrentPageInfo();switch(e.type){case`link`:this.link(e.bounds.x,e.bounds.y,e.bounds.w,e.bounds.h,e);break;case`text`:case`freetext`:i.pageContext.annotations.push(e)}},t.link=function(e,i,a,o,f){var l=this.internal.getCurrentPageInfo(),c=this.internal.getCoordinateString,d=this.internal.getVerticalCoordinateString;l.pageContext.annotations.push({finalBounds:{x:c(e),y:d(i),w:c(e+a),h:d(i+o)},options:f,type:`link`})},t.textWithLink=function(e,i,a,o){var f,l,c=this.getTextWidth(e),d=this.internal.getLineHeight()/this.internal.scaleFactor;if(o.maxWidth!==void 0){l=o.maxWidth;var m=this.splitTextToSize(e,l).length;f=Math.ceil(d*m)}else l=c,f=d;return this.text(e,i,a,o),a+=.2*d,o.align===`center`&&(i-=c/2),o.align===`right`&&(i-=c),this.link(i,a-d,l,f,o),c},t.getTextWidth=function(e){var i=this.internal.getFontSize();return this.getStringUnitWidth(e)*i/this.internal.scaleFactor}})(Mt.API),(function(t){var n={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},e={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},i={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},a=[1570,1571,1573,1575];t.__arabicParser__={};var o=t.__arabicParser__.isInArabicSubstitutionA=function(O){return n[O.charCodeAt(0)]!==void 0},f=t.__arabicParser__.isArabicLetter=function(O){return typeof O==`string`&&/^[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]+$/.test(O)},l=t.__arabicParser__.isArabicEndLetter=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length<=2},c=t.__arabicParser__.isArabicAlfLetter=function(O){return f(O)&&a.indexOf(O.charCodeAt(0))>=0};t.__arabicParser__.arabicLetterHasIsolatedForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length>=1};var d=t.__arabicParser__.arabicLetterHasFinalForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length>=2};t.__arabicParser__.arabicLetterHasInitialForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length>=3};var m=t.__arabicParser__.arabicLetterHasMedialForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length==4},A=t.__arabicParser__.resolveLigatures=function(O){var B=0,k=e,Z=``,$=0;for(B=0;B>`),this.internal.out(`endobj`)}),this.internal.events.subscribe(`putCatalog`,function(){this.internal.out(`/OpenAction `+n+` 0 R`)})),this},(function(t){var n=function(){var e=void 0;Object.defineProperty(this,"pdf",{get:function(){return e},set:function(l){e=l}});var i=150;Object.defineProperty(this,"width",{get:function(){return i},set:function(l){i=isNaN(l)||Number.isInteger(l)===!1||l<0?150:l,this.getContext(`2d`).pageWrapXEnabled&&(this.getContext(`2d`).pageWrapX=i+1)}});var a=300;Object.defineProperty(this,"height",{get:function(){return a},set:function(l){a=isNaN(l)||Number.isInteger(l)===!1||l<0?300:l,this.getContext(`2d`).pageWrapYEnabled&&(this.getContext(`2d`).pageWrapY=a+1)}});var o=[];Object.defineProperty(this,"childNodes",{get:function(){return o},set:function(l){o=l}});var f={};Object.defineProperty(this,"style",{get:function(){return f},set:function(l){f=l}}),Object.defineProperty(this,"parentNode",{})};n.prototype.getContext=function(e,i){var a;if((e=e||`2d`)!==`2d`)return null;for(a in i)this.pdf.context2d.hasOwnProperty(a)&&(this.pdf.context2d[a]=i[a]);return this.pdf.context2d._canvas=this,this.pdf.context2d},n.prototype.toDataURL=function(){throw new Error(`toDataURL is not implemented.`)},t.events.push([`initialized`,function(){this.canvas=new n,this.canvas.pdf=this}])})(Mt.API),(function(t){var n={left:0,top:0,bottom:0,right:0},e=!1,i=function(){this.internal.__cell__===void 0&&(this.internal.__cell__={},this.internal.__cell__.padding=3,this.internal.__cell__.headerFunction=void 0,this.internal.__cell__.margins=Object.assign({},n),this.internal.__cell__.margins.width=this.getPageWidth(),a.call(this))},a=function(){this.internal.__cell__.lastCell=new o,this.internal.__cell__.pages=1},o=function(){var c=arguments[0];Object.defineProperty(this,"x",{enumerable:!0,get:function(){return c},set:function(O){c=O}});var d=arguments[1];Object.defineProperty(this,"y",{enumerable:!0,get:function(){return d},set:function(O){d=O}});var m=arguments[2];Object.defineProperty(this,"width",{enumerable:!0,get:function(){return m},set:function(O){m=O}});var A=arguments[3];Object.defineProperty(this,"height",{enumerable:!0,get:function(){return A},set:function(O){A=O}});var L=arguments[4];Object.defineProperty(this,"text",{enumerable:!0,get:function(){return L},set:function(O){L=O}});var p=arguments[5];Object.defineProperty(this,"lineNumber",{enumerable:!0,get:function(){return p},set:function(O){p=O}});var T=arguments[6];return Object.defineProperty(this,"align",{enumerable:!0,get:function(){return T},set:function(O){T=O}}),this};o.prototype.clone=function(){return new o(this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align)},o.prototype.toArray=function(){return[this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align]},t.setHeaderFunction=function(c){return i.call(this),this.internal.__cell__.headerFunction=typeof c==`function`?c:void 0,this},t.getTextDimensions=function(c,d){i.call(this);var m=(d=d||{}).fontSize||this.getFontSize(),A=d.font||this.getFont(),L=d.scaleFactor||this.internal.scaleFactor,p=0,T=0,O=0,B=this;if(!Array.isArray(c)&&typeof c!=`string`){if(typeof c!=`number`)throw new Error(`getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.`);c=String(c)}var k=d.maxWidth;k>0?typeof c==`string`?c=this.splitTextToSize(c,k):Object.prototype.toString.call(c)===`[object Array]`&&(c=c.reduce(function($,D){return $.concat(B.splitTextToSize(D,k))},[])):c=Array.isArray(c)?c:[c];for(var Z=0;Zthis.getPageHeight()?(this.cellAddPage(),c.y=A.top,p&&L&&(this.printHeaderRow(c.lineNumber,!0),c.y+=L[0].height)):c.y=d.y+d.height||c.y),c.text[0]!==void 0&&(this.rect(c.x,c.y,c.width,c.height,e===!0?`FD`:void 0),c.align===`right`?this.text(c.text,c.x+c.width-m,c.y+m,{align:`right`,baseline:`top`}):c.align===`center`?this.text(c.text,c.x+c.width/2,c.y+m,{align:`center`,baseline:`top`,maxWidth:c.width-m-m}):this.text(c.text,c.x+m,c.y+m,{align:`left`,baseline:`top`,maxWidth:c.width-m-m})),this.internal.__cell__.lastCell=c,this};t.table=function(c,d,m,A,L){if(i.call(this),!m)throw new Error(`No data for PDF table.`);var p,T,O,B,k=[],Z=[],$=[],D={},lt={},_t=[],mt=[],tt=(L=L||{}).autoSize||!1,z=L.printHeaders!==!1,et=L.css&&L.css[`font-size`]!==void 0?16*L.css[`font-size`]:L.fontSize||12,N=L.margins||Object.assign({width:this.getPageWidth()},n),F=typeof L.padding==`number`?L.padding:3,U=L.headerBackgroundColor||`#c8c8c8`,q=L.headerTextColor||`#000`;if(a.call(this),this.internal.__cell__.printHeaders=z,this.internal.__cell__.margins=N,this.internal.__cell__.table_font_size=et,this.internal.__cell__.padding=F,this.internal.__cell__.headerBackgroundColor=U,this.internal.__cell__.headerTextColor=q,this.setFontSize(et),A==null)Z=k=Object.keys(m[0]),$=k.map(function(){return`left`});else if(Array.isArray(A)&&ye(A[0])===`object`)for(k=A.map(function(At){return At.name}),Z=A.map(function(At){return At.prompt||At.name||``}),$=A.map(function(At){return At.align||`left`}),p=0;p0&&this.setTableHeaderRow(L),this.setFont(void 0,`normal`),e=!1}})(Mt.API);su={italic:[`italic`,`oblique`,`normal`],oblique:[`oblique`,`italic`,`normal`],normal:[`normal`,`oblique`,`italic`]};lu=[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`];fh=ou(lu);hu=[100,200,300,400,500,600,700,800,900];f5=ou(hu);u5={"sans-serif":`helvetica`,fixed:`courier`,monospace:`courier`,terminal:`courier`,cursive:`times`,fantasy:`times`,serif:`times`};Df={caption:`times`,icon:`times`,menu:`times`,"message-box":`times`,"small-caption":`times`,"status-bar":`times`};;;;;;ah=[`times`];(function(t){var n,e,i,a,o,f,l,c,d,m=function(y){return y=y||{},this.isStrokeTransparent=y.isStrokeTransparent||!1,this.strokeOpacity=y.strokeOpacity||1,this.strokeStyle=y.strokeStyle||`#000000`,this.fillStyle=y.fillStyle||`#000000`,this.isFillTransparent=y.isFillTransparent||!1,this.fillOpacity=y.fillOpacity||1,this.font=y.font||`10px sans-serif`,this.textBaseline=y.textBaseline||`alphabetic`,this.textAlign=y.textAlign||`left`,this.lineWidth=y.lineWidth||1,this.lineJoin=y.lineJoin||`miter`,this.lineCap=y.lineCap||`butt`,this.path=y.path||[],this.transform=y.transform!==void 0?y.transform.clone():new c,this.globalCompositeOperation=y.globalCompositeOperation||`normal`,this.globalAlpha=y.globalAlpha||1,this.clip_path=y.clip_path||[],this.currentPoint=y.currentPoint||new f,this.miterLimit=y.miterLimit||10,this.lastPoint=y.lastPoint||new f,this.lineDashOffset=y.lineDashOffset||0,this.lineDash=y.lineDash||[],this.margin=y.margin||[0,0,0,0],this.prevPageLastElemOffset=y.prevPageLastElemOffset||0,this.ignoreClearRect=typeof y.ignoreClearRect!=`boolean`||y.ignoreClearRect,this};t.events.push([`initialized`,function(){this.context2d=new A(this),n=this.internal.f2,e=this.internal.getCoordinateString,i=this.internal.getVerticalCoordinateString,a=this.internal.getHorizontalCoordinate,o=this.internal.getVerticalCoordinate,f=this.internal.Point,l=this.internal.Rectangle,c=this.internal.Matrix,d=new m}]);var A=function(y){Object.defineProperty(this,"canvas",{get:function(){return{parentNode:!1,style:!1}}});var R=y;Object.defineProperty(this,"pdf",{get:function(){return R}});var j=!1;Object.defineProperty(this,"pageWrapXEnabled",{get:function(){return j},set:function(P){j=!!P}});var G=!1;Object.defineProperty(this,"pageWrapYEnabled",{get:function(){return G},set:function(P){G=!!P}});var Y=0;Object.defineProperty(this,"posX",{get:function(){return Y},set:function(P){isNaN(P)||(Y=P)}});var Q=0;Object.defineProperty(this,"posY",{get:function(){return Q},set:function(P){isNaN(P)||(Q=P)}}),Object.defineProperty(this,"margin",{get:function(){return d.margin},set:function(P){var Lt;typeof P==`number`?Lt=[P,P,P,P]:((Lt=new Array(4))[0]=P[0],Lt[1]=P.length>=2?P[1]:Lt[0],Lt[2]=P.length>=3?P[2]:Lt[0],Lt[3]=P.length>=4?P[3]:Lt[1]),d.margin=Lt}});var rt=!1;Object.defineProperty(this,"autoPaging",{get:function(){return rt},set:function(P){rt=P}});var at=0;Object.defineProperty(this,"lastBreak",{get:function(){return at},set:function(P){at=P}});var dt=[];Object.defineProperty(this,"pageBreaks",{get:function(){return dt},set:function(P){dt=P}}),Object.defineProperty(this,"ctx",{get:function(){return d},set:function(P){P instanceof m&&(d=P)}}),Object.defineProperty(this,"path",{get:function(){return d.path},set:function(P){d.path=P}});var xt=[];Object.defineProperty(this,"ctxStack",{get:function(){return xt},set:function(P){xt=P}}),Object.defineProperty(this,"fillStyle",{get:function(){return this.ctx.fillStyle},set:function(P){var Lt=L(P);this.ctx.fillStyle=Lt.style,this.ctx.isFillTransparent=Lt.a===0,this.ctx.fillOpacity=Lt.a,this.pdf.setFillColor(Lt.r,Lt.g,Lt.b,{a:Lt.a}),this.pdf.setTextColor(Lt.r,Lt.g,Lt.b,{a:Lt.a})}}),Object.defineProperty(this,"strokeStyle",{get:function(){return this.ctx.strokeStyle},set:function(P){var Lt=L(P);this.ctx.strokeStyle=Lt.style,this.ctx.isStrokeTransparent=Lt.a===0,this.ctx.strokeOpacity=Lt.a,Lt.a===0?this.pdf.setDrawColor(255,255,255):(Lt.a,this.pdf.setDrawColor(Lt.r,Lt.g,Lt.b))}}),Object.defineProperty(this,"lineCap",{get:function(){return this.ctx.lineCap},set:function(P){[`butt`,`round`,`square`].indexOf(P)!==-1&&(this.ctx.lineCap=P,this.pdf.setLineCap(P))}}),Object.defineProperty(this,"lineWidth",{get:function(){return this.ctx.lineWidth},set:function(P){isNaN(P)||(this.ctx.lineWidth=P,this.pdf.setLineWidth(P))}}),Object.defineProperty(this,"lineJoin",{get:function(){return this.ctx.lineJoin},set:function(P){[`bevel`,`round`,`miter`].indexOf(P)!==-1&&(this.ctx.lineJoin=P,this.pdf.setLineJoin(P))}}),Object.defineProperty(this,"miterLimit",{get:function(){return this.ctx.miterLimit},set:function(P){isNaN(P)||(this.ctx.miterLimit=P,this.pdf.setMiterLimit(P))}}),Object.defineProperty(this,"textBaseline",{get:function(){return this.ctx.textBaseline},set:function(P){this.ctx.textBaseline=P}}),Object.defineProperty(this,"textAlign",{get:function(){return this.ctx.textAlign},set:function(P){[`right`,`end`,`center`,`left`,`start`].indexOf(P)!==-1&&(this.ctx.textAlign=P)}});var St=null,kt=null,zt=null;Object.defineProperty(this,"fontFaces",{get:function(){return zt},set:function(P){St=null,kt=null,zt=P}}),Object.defineProperty(this,"font",{get:function(){return this.ctx.font},set:function(P){var Lt;if(this.ctx.font=P,(Lt=/^\s*(?=(?:(?:[-a-z]+\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\1|\2|\3)\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\d]+(?:\%|in|[cem]m|ex|p[ctx]))(?:\s*\/\s*(normal|[.\d]+(?:\%|in|[cem]m|ex|p[ctx])))?\s*([-_,\"\'\sa-z0-9]+?)\s*$/i.exec(P))!==null){var ae=Lt[1];Lt[2];var Ht=Lt[3],vt=Lt[4];Lt[5];var Wt=Lt[6],Et=/^([.\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i.exec(vt)[2];vt=Math.floor(Et===`px`?parseFloat(vt)*this.pdf.internal.scaleFactor:Et===`em`?parseFloat(vt)*this.pdf.getFontSize():parseFloat(vt)*this.pdf.internal.scaleFactor),this.pdf.setFontSize(vt);var qt=(function(jt){var He,ge,oe=[],se=jt.trim();if(se===``)return ah;if(se in Df)return[Df[se]];for(;se!==``;){switch(ge=null,He=(se=qf(se)).charAt(0)){case`"`:case`'`:ge=d5(se.substring(1),He);break;default:ge=p5(se)}if(ge===null||(oe.push(ge[0]),(se=qf(ge[1]))!==``&&se.charAt(0)!==`,`))return ah;se=se.replace(/^,/,``)}return oe})(Wt);if(this.fontFaces){var he=(function(jt,He,ge){for(var oe=(ge=ge||{}).defaultFontFamily||`times`,se=Object.assign({},u5,ge.genericFontFamilies||{}),Te=null,Ut=null,Pe=0;Pe=700||ae===`bold`)&&(Jt=`bold`),ae===`italic`&&(Jt+=`italic`),Jt.length===0&&(Jt=`normal`);for(var fe=``,ce={arial:`Helvetica`,Arial:`Helvetica`,verdana:`Helvetica`,Verdana:`Helvetica`,helvetica:`Helvetica`,Helvetica:`Helvetica`,"sans-serif":`Helvetica`,fixed:`Courier`,monospace:`Courier`,terminal:`Courier`,cursive:`Times`,fantasy:`Times`,serif:`Times`},Rt=0;Rt=2*Math.PI&&(G=0,Y=2*Math.PI),this.path.push({type:`arc`,x:y,y:R,radius:j,startAngle:G,endAngle:Y,counterclockwise:Q})},A.prototype.arcTo=function(y,R,j,G,Y){throw new Error(`arcTo not implemented.`)},A.prototype.rect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.rect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.rect`);this.moveTo(y,R),this.lineTo(y+j,R),this.lineTo(y+j,R+G),this.lineTo(y,R+G),this.lineTo(y,R),this.lineTo(y+j,R),this.lineTo(y,R)},A.prototype.fillRect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.fillRect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.fillRect`);if(!p.call(this)){var Y={};this.lineCap!==`butt`&&(Y.lineCap=this.lineCap,this.lineCap=`butt`),this.lineJoin!==`miter`&&(Y.lineJoin=this.lineJoin,this.lineJoin=`miter`),this.beginPath(),this.rect(y,R,j,G),this.fill(),Y.hasOwnProperty(`lineCap`)&&(this.lineCap=Y.lineCap),Y.hasOwnProperty(`lineJoin`)&&(this.lineJoin=Y.lineJoin)}},A.prototype.strokeRect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.strokeRect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.strokeRect`);T.call(this)||(this.beginPath(),this.rect(y,R,j,G),this.stroke())},A.prototype.clearRect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.clearRect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.clearRect`);this.ignoreClearRect||(this.fillStyle=`#ffffff`,this.fillRect(y,R,j,G))},A.prototype.save=function(y){y=typeof y!=`boolean`||y;for(var R=this.pdf.internal.getCurrentPageInfo().pageNumber,j=0;j0||this.margin[1]>0||this.margin[2]>0||this.margin[3]>0};A.prototype.drawImage=function(y,R,j,G,Y,Q,rt,at,dt){var xt=this.pdf.getImageProperties(y),St=1,kt=1,zt=1,P=1;G!==void 0&&at!==void 0&&(zt=at/G,P=dt/Y,St=xt.width/G*at/G,kt=xt.height/Y*dt/Y),Q===void 0&&(Q=R,rt=j,R=0,j=0),G!==void 0&&at===void 0&&(at=G,dt=Y),G===void 0&&at===void 0&&(at=xt.width,dt=xt.height);var Lt=this.ctx.transform.decompose(),ae=nt(Lt.rotate.shx),Ht=new c,vt=(Ht=(Ht=(Ht=Ht.multiply(Lt.translate)).multiply(Lt.skew)).multiply(Lt.scale)).applyToRectangle(new l(Q-R*zt,rt-j*P,G*St,Y*kt));if(this.autoPaging){for(var Wt,Et=B.call(this,vt),qt=[],Dt=0;Dtwe||Jtvt||Et0)){for(;dt>=0;dt--)if(Y[dt-1].close!==!0&&Y[dt-1].begin!==!0){Y[dt-1].deltas.push(j),Y[dt-1].abs.push(at);break}}break;case`bct`:j=[at.x1-Q[rt-1].x,at.y1-Q[rt-1].y,at.x2-Q[rt-1].x,at.y2-Q[rt-1].y,at.x-Q[rt-1].x,at.y-Q[rt-1].y],Y[Y.length-1].deltas.push(j);break;case`qct`:var xt=Q[rt-1].x+2/3*(at.x1-Q[rt-1].x),St=Q[rt-1].y+2/3*(at.y1-Q[rt-1].y),kt=at.x+2/3*(at.x1-at.x),zt=at.y+2/3*(at.y1-at.y),P=at.x,Lt=at.y;j=[xt-Q[rt-1].x,St-Q[rt-1].y,kt-Q[rt-1].x,zt-Q[rt-1].y,P-Q[rt-1].x,Lt-Q[rt-1].y],Y[Y.length-1].deltas.push(j);break;case`arc`:Y.push({deltas:[],abs:[],arc:!0}),Array.isArray(Y[Y.length-1].abs)&&Y[Y.length-1].abs.push(at)}}G=R?null:y===`stroke`?`stroke`:`fill`;for(var ae=!1,Ht=0;Ht=.01&&(G=this.pdf.internal.getFontSize(),this.pdf.setFontSize(G*y.scale),Y=this.lineWidth,this.lineWidth=Y*y.scale);var ne=this.autoPaging!==`text`;if(ne||Rt.y+Rt.h<=Dt){if(ne||Rt.y>=Et&&Rt.x<=he){var jt=ne?y.text:this.pdf.splitTextToSize(y.text,y.maxWidth||he-Rt.x)[0],He=Z([JSON.parse(JSON.stringify(kt))],this.posX+this.margin[3],-fe+Et+this.ctx.prevPageLastElemOffset)[0],ge=ne&&(Wt>Ht||Wt=.01&&(this.pdf.setFontSize(G),this.lineWidth=Y)}}else y.scale>=.01&&(G=this.pdf.internal.getFontSize(),this.pdf.setFontSize(G*y.scale),Y=this.lineWidth,this.lineWidth=Y*y.scale),this.pdf.text(y.text,dt.x+this.posX,dt.y+this.posY,{angle:y.angle,align:R,renderingMode:y.renderingMode,maxWidth:y.maxWidth}),y.scale>=.01&&(this.pdf.setFontSize(G),this.lineWidth=Y)},U=function(y,R,j,G){j=j||0,G=G||0,this.pdf.internal.out(e(y+j)+` `+i(R+G)+` l`)},q=function(y,R,j){return this.pdf.lines(y,R,j,null,null)},it=function(y,R,j,G,Y,Q,rt,at){this.pdf.internal.out([n(a(j+y)),n(o(G+R)),n(a(Y+y)),n(o(Q+R)),n(a(rt+y)),n(o(at+R)),`c`].join(` `))},ft=function(y,R,j,G){for(var Y=2*Math.PI,Q=Math.PI/2;R>j;)R-=Y;var rt=Math.abs(j-R);rt1e-5;){var St=xt+dt*Math.min(rt,Q);at.push(pt.call(this,y,xt,St)),rt-=Math.abs(St-xt),xt=St}return at},pt=function(y,R,j){var G=(j-R)/2,Y=y*Math.cos(G),Q=y*Math.sin(G),rt=Y,at=-Q,dt=rt*rt+at*at,xt=dt+rt*Y+at*Q,St=4/3*(Math.sqrt(2*dt*xt)-xt)/(rt*Q-at*Y),kt=rt-St*at,zt=at+St*rt,P=kt,Lt=-zt,ae=G+R,Ht=Math.cos(ae),vt=Math.sin(ae);return{x1:y*Math.cos(R),y1:y*Math.sin(R),x2:kt*Ht-zt*vt,y2:kt*vt+zt*Ht,x3:P*Ht-Lt*vt,y3:P*vt+Lt*Ht,x4:y*Math.cos(j),y4:y*Math.sin(j)}},nt=function(y){return 180*y/Math.PI},ut=function(y,R,j,G,Y,Q){var rt=y+.5*(j-y),at=R+.5*(G-R),dt=Y+.5*(j-Y),xt=Q+.5*(G-Q),St=Math.min(y,Y,rt,dt),kt=Math.max(y,Y,rt,dt),zt=Math.min(R,Q,at,xt),P=Math.max(R,Q,at,xt);return new l(St,zt,kt-St,P-zt)},At=function(y,R,j,G,Y,Q,rt,at){var dt,xt,St,kt,zt,P,Lt,ae,Ht,vt,Wt,Et,qt,Dt,we=j-y,he=G-R,Jt=Y-j,fe=Q-G,ce=rt-Y,Rt=at-Q;for(xt=0;xt<41;xt++)Ht=(Lt=(St=y+(dt=xt/40)*we)+dt*((zt=j+dt*Jt)-St))+dt*(zt+dt*(Y+dt*ce-zt)-Lt),vt=(ae=(kt=R+dt*he)+dt*((P=G+dt*fe)-kt))+dt*(P+dt*(Q+dt*Rt-P)-ae),xt==0?(Wt=Ht,Et=vt,qt=Ht,Dt=vt):(Wt=Math.min(Wt,Ht),Et=Math.min(Et,vt),qt=Math.max(qt,Ht),Dt=Math.max(Dt,vt));return new l(Math.round(Wt),Math.round(Et),Math.round(qt-Wt),Math.round(Dt-Et))},yt=function(){if(this.prevLineDash||this.ctx.lineDash.length||this.ctx.lineDashOffset){var y,R,j=(y=this.ctx.lineDash,R=this.ctx.lineDashOffset,JSON.stringify({lineDash:y,lineDashOffset:R}));this.prevLineDash!==j&&(this.pdf.setLineDash(this.ctx.lineDash,this.ctx.lineDashOffset),this.prevLineDash=j)}}})(Mt.API),(function(t){var n=function(f){var l,c,d,m,A,L,p,T,O,B;for(/[^\x00-\xFF]/.test(f),c=[],d=0,m=(f+=l=`\0\0\0\0`.slice(f.length%4||4)).length;m>d;d+=4)(A=(f.charCodeAt(d)<<24)+(f.charCodeAt(d+1)<<16)+(f.charCodeAt(d+2)<<8)+f.charCodeAt(d+3))!==0?(L=(A=((A=((A=((A=(A-(B=A%85))/85)-(O=A%85))/85)-(T=A%85))/85)-(p=A%85))/85)%85,c.push(L+33,p+33,T+33,O+33,B+33)):c.push(122);return(function(k,Z){for(var $=Z;$>0;$--)k.pop()})(c,l.length),String.fromCharCode.apply(String,c)+`~>`},e=function(f){var l,c,d,m,A,L=String,p=`length`,T=255,O=`charCodeAt`,B=`slice`,k=`replace`;for(f[B](-2),f=f[B](0,-2)[k](/\s/g,``)[k](`z`,`!!!!!`),d=[],m=0,A=(f+=l=`uuuuu`[B](f[p]%5||5))[p];A>m;m+=5)c=52200625*(f[O](m)-33)+614125*(f[O](m+1)-33)+7225*(f[O](m+2)-33)+85*(f[O](m+3)-33)+(f[O](m+4)-33),d.push(T&c>>24,T&c>>16,T&c>>8,T&c);return(function(Z,$){for(var D=$;D>0;D--)Z.pop()})(d,l[p]),L.fromCharCode.apply(L,d)},i=function(f){return f.split(``).map(function(l){return(`0`+l.charCodeAt().toString(16)).slice(-2)}).join(``)+`>`},a=function(f){var l=new RegExp(/^([0-9A-Fa-f]{2})+$/);if((f=f.replace(/\s/g,``)).indexOf(`>`)!==-1&&(f=f.substr(0,f.indexOf(`>`))),f.length%2&&(f+=`0`),l.test(f)===!1)return``;for(var c=``,d=0;dO&&(T=B,B=O,O=T);else{if(l!==`l`&&l!==`landscape`)throw`Invalid orientation: `+l;l=`l`,O>B&&(T=B,B=O,O=T)}return{width:B,height:O,unit:c,k:A,orientation:l}},t.html=function(l,c){(c=c||{}).callback=c.callback||function(){},c.html2canvas=c.html2canvas||{},c.html2canvas.canvas=c.html2canvas.canvas||this.canvas,c.jsPDF=c.jsPDF||this,c.fontFaces=c.fontFaces?c.fontFaces.map(rh):null;var d=new f(c);return c.worker?d:d.from(l).doCallback()}})(Mt.API),Mt.API.addJS=function(t){var n,e,i=(function(a){for(var o=``,f=0;f=0&&a[d]===`\\`;d--)c++;o+=c%2==0?`\\`+l:l}else o+=l}return o})(t);return this.internal.events.subscribe(`postPutResources`,function(){n=this.internal.newObject(),this.internal.out(`<<`),this.internal.out(`/Names [(EmbeddedJS) `+(n+1)+` 0 R]`),this.internal.out(`>>`),this.internal.out(`endobj`),e=this.internal.newObject(),this.internal.out(`<<`),this.internal.out(`/S /JavaScript`),this.internal.out(`/JS (`+i+`)`),this.internal.out(`>>`),this.internal.out(`endobj`)}),this.internal.events.subscribe(`putCatalog`,function(){n!==void 0&&e!==void 0&&this.internal.out(`/Names <>`)}),this},(function(t){var n;t.events.push([`postPutResources`,function(){var e=this,i=/^(\d+) 0 obj$/;if(this.outline.root.children.length>0)for(var a=e.outline.render().split(/\r\n/),o=0;o> endobj`)}var p=e.internal.newObject();for(e.internal.write(`<< /Names [ `),o=0;o>`,`endobj`),n=e.internal.newObject(),e.internal.write(`<< /Dests `+p+` 0 R`),e.internal.write(`>>`,`endobj`)}}]),t.events.push([`putCatalog`,function(){var e=this;e.outline.root.children.length>0&&(e.internal.write(`/Outlines`,this.outline.makeRef(this.outline.root)),this.outline.createNamedDestinations&&e.internal.write(`/Names `+n+` 0 R`))}]),t.events.push([`initialized`,function(){var e=this;e.outline={createNamedDestinations:!1,root:{children:[]}},e.outline.add=function(i,a,o){var f={title:a,options:o,children:[]};return i??=this.root,i.children.push(f),f},e.outline.render=function(){return this.ctx={},this.ctx.val=``,this.ctx.pdf=e,this.genIds_r(this.root),this.renderRoot(this.root),this.renderItems(this.root),this.ctx.val},e.outline.genIds_r=function(i){i.id=e.internal.newObjectDeferred();for(var a=0;a0&&(this.line(`/First `+this.makeRef(i.children[0])),this.line(`/Last `+this.makeRef(i.children[i.children.length-1]))),this.line(`/Count `+this.count_r({count:0},i)),this.objEnd()},e.outline.renderItems=function(i){for(var a=this.ctx.pdf.internal.getVerticalCoordinateString,o=0;o0&&this.line(`/Prev `+this.makeRef(i.children[o-1])),o0&&(this.line(`/First `+this.makeRef(f.children[0])),this.line(`/Last `+this.makeRef(f.children[f.children.length-1])));var l=this.count=this.count_r({count:0},f);if(l>0&&this.line(`/Count `+l),f.options&&f.options.pageNumber){var c=e.internal.getPageInfo(f.options.pageNumber);this.line(`/Dest [`+c.objId+` 0 R /XYZ 0 `+a(0)+` 0]`)}this.objEnd()}for(var d=0;d> \r +endobj\r +`},e.outline.count_r=function(i,a){for(var o=0;o1){q=!0,ft=void 0;var Y=z*et;pt=new Uint8Array(Y);for(var Q=new DataView(N.buffer),rt=0;rt536870912)throw new Error(`Image dimensions exceed 512MB, which is too large.`);this.data=new Uint8Array(n);try{this[t]()}catch(e){ke.log(`bit decode error:`+e)}},ai.prototype.bit1=function(){var t,n=Math.ceil(this.width/8),e=n%4;for(t=this.height-1;t>=0;t--){for(var i=this.bottom_up?t:this.height-1-t,a=0;a>7-l&1];this.data[f+4*l]=c.blue,this.data[f+4*l+1]=c.green,this.data[f+4*l+2]=c.red,this.data[f+4*l+3]=255}e!==0&&(this.pos+=4-e)}},ai.prototype.bit4=function(){for(var t=Math.ceil(this.width/2),n=t%4,e=this.height-1;e>=0;e--){for(var i=this.bottom_up?e:this.height-1-e,a=0;a>4,c=15&o,d=this.palette[l];if(this.data[f]=d.blue,this.data[f+1]=d.green,this.data[f+2]=d.red,this.data[f+3]=255,2*a+1>=this.width)break;d=this.palette[c],this.data[f+4]=d.blue,this.data[f+4+1]=d.green,this.data[f+4+2]=d.red,this.data[f+4+3]=255}n!==0&&(this.pos+=4-n)}},ai.prototype.bit8=function(){for(var t=this.width%4,n=this.height-1;n>=0;n--){for(var e=this.bottom_up?n:this.height-1-n,i=0;i=0;e--){for(var i=this.bottom_up?e:this.height-1-e,a=0;a>5&n)/n*255|0,c=(o>>10&n)/n*255|0,d=o>>15?255:0,m=i*this.width*4+4*a;this.data[m]=c,this.data[m+1]=l,this.data[m+2]=f,this.data[m+3]=d}this.pos+=t}},ai.prototype.bit16=function(){for(var t=this.width%3,n=parseInt(`11111`,2),e=parseInt(`111111`,2),i=this.height-1;i>=0;i--){for(var a=this.bottom_up?i:this.height-1-i,o=0;o>5&e)/e*255|0,d=(f>>11)/n*255|0,m=a*this.width*4+4*o;this.data[m]=d,this.data[m+1]=c,this.data[m+2]=l,this.data[m+3]=255}this.pos+=t}},ai.prototype.bit24=function(){for(var t=this.height-1;t>=0;t--){for(var n=this.bottom_up?t:this.height-1-t,e=0;e=0;t--)for(var n=this.bottom_up?t:this.height-1-t,e=0;ei&&(a.push(t.slice(c,o)),l=0,c=o),l+=n[o],o++;return c!==o&&a.push(t.slice(c,o)),a},Wf=function(t,n,e){e||(e={});var i,a,o,f,l,c,d,m=[],A=[m],L=e.textIndent||0,p=0,T=0,O=t.split(` `),B=Ns.apply(this,[` `,e])[0];if(c=e.lineIndent===-1?O[0].length+2:e.lineIndent||0){var k=Array(c).join(` `),Z=[];O.map(function(D){(D=D.split(/\s*\n/)).length>1?Z=Z.concat(D.map(function(lt,_t){return(_t&<.length?` +`:``)+lt})):Z.push(D[0])}),O=Z,c=zf.apply(this,[k,e])}for(o=0,f=O.length;on||$){if(T>n){for(l=Hf.apply(this,[i,a,n-(L+p),n]),m.push(l.shift()),m=[l.pop()];l.length;)A.push([l.shift()]);T=a.slice(i.length-(m[0]?m[0].length:0)).reduce(function(D,lt){return D+lt},0)}else m=[i];A.push(m),L=T+c,p=B}else m.push(i),L+=p+T,p=B}return d=c?function(D,lt){return(lt?k:``)+D.join(` `)}:function(D){return D.join(` `)},A.map(d)},ya.splitTextToSize=function(t,n,e){var i,a=(e=e||{}).fontSize||this.internal.getFontSize(),o=function(m){if(m.widths&&m.kerning)return{widths:m.widths,kerning:m.kerning};var A=this.internal.getFont(m.fontName,m.fontStyle),L=`Unicode`;return A.metadata[L]?{widths:A.metadata[L].widths||{0:1},kerning:A.metadata[L].kerning||{}}:{font:A.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}.call(this,e);i=Array.isArray(t)?t:String(t).split(/\r?\n/);var f=1*this.internal.scaleFactor*n/a;o.textIndent=e.textIndent?1*e.textIndent*this.internal.scaleFactor/a:0,o.lineIndent=e.lineIndent;var l,c,d=[];for(l=0,c=i.length;l1){for(m=0;m>`)}),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=e,this},Mt.API.addMetadata=function(t,n){return this.internal.__metadata__===void 0&&(this.internal.__metadata__={metadata:t,namespaceUri:n??`http://jspdf.default.namespaceuri/`,rawXml:typeof n==`boolean`&&n},this.internal.events.subscribe(`putCatalog`,_5),this.internal.events.subscribe(`postPutResources`,w5)),this},(function(t){var n=t.API,e=n.pdfEscape16=function(o,f){for(var l,c=f.metadata.Unicode.widths,d=[``,`0`,`00`,`000`,`0000`],m=[``],A=0,L=o.length;A> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> +endcodespacerange`,c=[],A=0,L=(l=Object.keys(o).sort(function(p,T){return p-T})).length;A=100&&(m+=` +`+c.length+` beginbfchar +`+c.join(` +`)+` +endbfchar`,c=[]),o[f]!==void 0&&o[f]!==null&&typeof o[f].toString==`function`&&(d=(`0000`+o[f].toString(16)).slice(-4),f=(`0000`+(+f).toString(16)).slice(-4),c.push(`<`+f+`><`+d+`>`));return c.length&&(m+=` +`+c.length+` beginbfchar +`+c.join(` +`)+` +endbfchar +`),m+`endcmap +CMapName currentdict /CMap defineresource pop +end +end`};n.events.push([`putFont`,function(o){(function(f){var l=f.font,c=f.out,d=f.newObject,m=f.putStream;if(l.metadata instanceof t.API.TTFFont&&l.encoding===`Identity-H`){for(var A=l.metadata.Unicode.widths,L=l.metadata.subset.encode(l.metadata.glyIdsUsed,1),p=``,T=0;T>`),c(`endobj`);var Z=d();c(`<<`),c(`/Type /Font`),c(`/BaseFont /`+Aa(l.fontName)),c(`/FontDescriptor `+k+` 0 R`),c(`/W `+t.API.PDFObject.convert(A)),c(`/CIDToGIDMap /Identity`),c(`/DW 1000`),c(`/Subtype /CIDFontType2`),c(`/CIDSystemInfo`),c(`<<`),c(`/Supplement 0`),c(`/Registry (Adobe)`),c(`/Ordering (`+l.encoding+`)`),c(`>>`),c(`>>`),c(`endobj`),l.objectNumber=d(),c(`<<`),c(`/Type /Font`),c(`/Subtype /Type0`),c(`/ToUnicode `+B+` 0 R`),c(`/BaseFont /`+Aa(l.fontName)),c(`/Encoding /`+l.encoding),c(`/DescendantFonts [`+Z+` 0 R]`),c(`>>`),c(`endobj`),l.isAlreadyPutted=!0}})(o)}]),n.events.push([`putFont`,function(o){(function(f){var l=f.font,c=f.out,d=f.newObject,m=f.putStream;if(l.metadata instanceof t.API.TTFFont&&l.encoding===`WinAnsiEncoding`){for(var A=l.metadata.rawData,L=``,p=0;p>`),c(`endobj`),l.objectNumber=d();for(var k=0;k>`),c(`endobj`),l.isAlreadyPutted=!0}})(o)}]);var a=function(o){var f,l=o.text||``,c=o.x,d=o.y,m=o.options||{},A=o.mutex||{},L=A.pdfEscape,p=A.activeFontKey,T=A.fonts,O=p,B=``,k=0,Z=``,$=T[O].encoding;if(T[O].encoding!==`Identity-H`)return{text:l,x:c,y:d,options:m,mutex:A};for(Z=l,O=p,Array.isArray(l)&&(Z=l[0]),k=0;k`,`<`,`[`,`]`,`[`,`{`,`}`,`{`,`«`,`»`,`«`,`‹`,`›`,`‹`,`⁅`,`⁆`,`⁅`,`⁽`,`⁾`,`⁽`,`₍`,`₎`,`₍`,`≤`,`≥`,`≤`,`〈`,`〉`,`〈`,`﹙`,`﹚`,`﹙`,`﹛`,`﹜`,`﹛`,`﹝`,`﹞`,`﹝`,`﹤`,`﹥`,`﹤`],k=new RegExp(/^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/),Z=!1,$=0;this.__bidiEngine__={};var D=function(N){var F=N.charCodeAt(),U=F>>8,q=O[U];return q!==void 0?A[256*q+(255&F)]:U===252||U===253?`AL`:k.test(U)?`L`:U===8?`R`:`N`},lt=function(N){for(var F,U=0;U=F.length||(it=U[q-1])!==`EN`&&it!==`AN`||(ft=F[q+1])!==`EN`&&ft!==`AN`?ut=`N`:Z&&(ft=`AN`),ut=ft===it?ft:`N`;break;case`ES`:ut=(it=q>0?U[q-1]:`B`)===`EN`&&q+10&&U[q-1]===`EN`){ut=`EN`;break}if(Z){ut=`N`;break}for(pt=q+1,nt=F.length;pt=1425&&At<=2303||At===64286;if(it=F[pt],yt&&(it===`R`||it===`AL`)){ut=`R`;break}}}ut=q<1||(it=F[q-1])===`B`?`N`:U[q-1];break;case`B`:Z=!1,a=!0,ut=$;break;case`S`:o=!0,ut=`N`}return ut},mt=function(N,F,U){var q=N.split(``);return U&&tt(q,U,{hiLevel:$}),q.reverse(),F&&F.reverse(),q.join(``)},tt=function(N,F,U){var q,it,ft,pt,nt,ut=-1,At=N.length,yt=0,y=[],R=$?p:L,j=[];for(Z=!1,a=!1,o=!1,it=0;it0)if(q===16){for(it=ut;it-1){for(it=ut;it=0&&G[at]===`WS`;at--)Y[at]=$}})(j,F,At)},z=function(N,F,U,q,it){if(!(it.hiLevel=N){for(nt=yt+1;nt=N;)nt++;for(ut=yt,pt=nt-1;ut=0&&(ft[At]=B[ut+1])})(q,U,it),z(2,q,F,U,it),z(1,q,F,U,it),q.join(``)};return this.__bidiEngine__.doBidiReorder=function(N,F,U){if((function(it,ft){if(ft)for(var pt=0;pt>16)&&(e=-(1+(65535^e))),this.italicAngle=+(e+`.`+i)):this.italicAngle=0,this.ascender=Math.round(this.ascender*this.scaleFactor),this.decender=Math.round(this.decender*this.scaleFactor),this.lineGap=Math.round(this.lineGap*this.scaleFactor),this.capHeight=this.os2.exists&&this.os2.capHeight||this.ascender,this.xHeight=this.os2.exists&&this.os2.xHeight||0,this.familyClass=(this.os2.exists&&this.os2.familyClass||0)>>8,this.isSerif=(o=this.familyClass)===1||o===2||o===3||o===4||o===5||o===7,this.isScript=this.familyClass===10,this.flags=0,this.post.isFixedPitch&&(this.flags|=1),this.isSerif&&(this.flags|=2),this.isScript&&(this.flags|=8),this.italicAngle!==0&&(this.flags|=64),this.flags|=32,!this.cmap.unicode)throw new Error(`No unicode cmap for font`)},t.prototype.characterToGlyph=function(n){var e;return((e=this.cmap.unicode)!=null?e.codeMap[n]:void 0)||0},t.prototype.widthOfGlyph=function(n){var e;return e=1e3/this.head.unitsPerEm,this.hmtx.forGlyph(n).advance*e},t.prototype.widthOfString=function(n,e,i){var a,o,f,l;for(f=0,o=0,l=(n=``+n).length;0<=l?ol;o=0<=l?++o:--o)a=n.charCodeAt(o),f+=this.widthOfGlyph(this.characterToGlyph(a))+i*(1e3/e)||0;return f*(e/1e3)},t.prototype.lineHeight=function(n,e){var i;return e??=!1,i=e?this.lineGap:0,(this.ascender+i-this.decender)/1e3*n},t})();;hr=(function(){function t(n){this.data=n??[],this.pos=0,this.length=this.data.length}return t.prototype.readByte=function(){return this.data[this.pos++]},t.prototype.writeByte=function(n){return this.data[this.pos++]=n},t.prototype.readUInt32=function(){return 16777216*this.readByte()+(this.readByte()<<16)+(this.readByte()<<8)+this.readByte()},t.prototype.writeUInt32=function(n){return this.writeByte(n>>>24&255),this.writeByte(n>>16&255),this.writeByte(n>>8&255),this.writeByte(255&n)},t.prototype.readInt32=function(){var n;return(n=this.readUInt32())>=2147483648?n-4294967296:n},t.prototype.writeInt32=function(n){return n<0&&(n+=4294967296),this.writeUInt32(n)},t.prototype.readUInt16=function(){return this.readByte()<<8|this.readByte()},t.prototype.writeUInt16=function(n){return this.writeByte(n>>8&255),this.writeByte(255&n)},t.prototype.readInt16=function(){var n;return(n=this.readUInt16())>=32768?n-65536:n},t.prototype.writeInt16=function(n){return n<0&&(n+=65536),this.writeUInt16(n)},t.prototype.readString=function(n){var e,i;for(i=[],e=0;0<=n?en;e=0<=n?++e:--e)i[e]=String.fromCharCode(this.readByte());return i.join(``)},t.prototype.writeString=function(n){var e,i,a;for(a=[],e=0,i=n.length;0<=i?ei;e=0<=i?++e:--e)a.push(this.writeByte(n.charCodeAt(e)));return a},t.prototype.readShort=function(){return this.readInt16()},t.prototype.writeShort=function(n){return this.writeInt16(n)},t.prototype.readLongLong=function(){var n,e,i,a,o,f,l,c;return n=this.readByte(),e=this.readByte(),i=this.readByte(),a=this.readByte(),o=this.readByte(),f=this.readByte(),l=this.readByte(),c=this.readByte(),128&n?-1*(72057594037927940*(255^n)+281474976710656*(255^e)+1099511627776*(255^i)+4294967296*(255^a)+16777216*(255^o)+65536*(255^f)+256*(255^l)+(255^c)+1):72057594037927940*n+281474976710656*e+1099511627776*i+4294967296*a+16777216*o+65536*f+256*l+c},t.prototype.writeLongLong=function(n){var e,i;return e=Math.floor(n/4294967296),i=4294967295&n,this.writeByte(e>>24&255),this.writeByte(e>>16&255),this.writeByte(e>>8&255),this.writeByte(255&e),this.writeByte(i>>24&255),this.writeByte(i>>16&255),this.writeByte(i>>8&255),this.writeByte(255&i)},t.prototype.readInt=function(){return this.readInt32()},t.prototype.writeInt=function(n){return this.writeInt32(n)},t.prototype.read=function(n){var e,i;for(e=[],i=0;0<=n?in;i=0<=n?++i:--i)e.push(this.readByte());return e},t.prototype.write=function(n){var e,i,a,o;for(o=[],i=0,a=n.length;io;a=0<=o?++a:--a)i={tag:e.readString(4),checksum:e.readInt(),offset:e.readInt(),length:e.readInt()},this.tables[i.tag]=i}return n.prototype.encode=function(e){var i,a,o,f,l,c,d,m,A,L,p,T,O;for(O in p=Object.keys(e).length,c=Math.log(2),A=16*Math.floor(Math.log(p)/c),f=Math.floor(A/c),m=16*p-A,(a=new hr).writeInt(this.scalarType),a.writeShort(p),a.writeShort(A),a.writeShort(f),a.writeShort(m),o=16*p,d=a.pos+o,l=null,T=[],e)for(L=e[O],a.writeString(O),a.writeInt(t(L)),a.writeInt(d),a.writeInt(L.length),T=T.concat(L),O===`head`&&(l=d),d+=L.length;d%4;)T.push(0),d++;return a.write(T),i=2981146554-t(a.data),a.pos=l+8,a.writeUInt32(i),a.data},t=function(e){var i,a,o,f;for(e=uu.call(e);e.length%4;)e.push(0);for(o=new hr(e),a=0,i=0,f=e.length;iL;c=0<=L?++D:--D)lt.push(n.readUInt16());return lt})(),n.pos+=2,O=(function(){var D,lt;for(lt=[],c=D=0;0<=L?DL;c=0<=L?++D:--D)lt.push(n.readUInt16());return lt})(),d=(function(){var D,lt;for(lt=[],c=D=0;0<=L?DL;c=0<=L?++D:--D)lt.push(n.readUInt16());return lt})(),m=(function(){var D,lt;for(lt=[],c=D=0;0<=L?DL;c=0<=L?++D:--D)lt.push(n.readUInt16());return lt})(),a=(this.length-n.pos+this.offset)/2,l=(function(){var D,lt;for(lt=[],c=D=0;0<=a?Da;c=0<=a?++D:--D)lt.push(n.readUInt16());return lt})(),c=k=0,$=o.length;k<$;c=++k)for(B=o[c],i=Z=T=O[c];T<=B?Z<=B:Z>=B;i=T<=B?++Z:--Z)m[c]===0?f=i+d[c]:(f=l[m[c]/2+(i-T)-(L-c)]||0)!==0&&(f+=d[c]),this.codeMap[i]=65535&f}n.pos=A}return t.encode=function(n,e){var i,a,o,f,l,c,d,m,A,L,p,T,O,B,k,Z,$,D,lt,_t,mt,tt,z,et,N,F,U,q,it,ft,pt,nt,ut,At,yt,y,R,j,G,Y,Q,rt,at,dt,xt,St;switch(q=new hr,f=Object.keys(n).sort(function(kt,zt){return kt-zt}),e){case`macroman`:for(O=0,B=(function(){var kt=[];for(T=0;T<256;++T)kt.push(0);return kt})(),Z={0:0},o={},it=0,ut=f.length;it=32768)for(c.push(0),_t.push(2*(p.length+z-T)),a=nt=N;N<=m?nt<=m:nt>=m;a=N<=m?++nt:--nt)p.push(i[a].new);else c.push(U-N),_t.push(0)}for(q.writeUInt16(3),q.writeUInt16(1),q.writeUInt32(12),q.writeUInt16(4),q.writeUInt16(16+8*z+2*p.length),q.writeUInt16(0),q.writeUInt16(et),q.writeUInt16(tt),q.writeUInt16(L),q.writeUInt16(mt),Q=0,y=A.length;Qa;i=0<=a?++i:--i)e=new Qf(n,this.offset),this.tables.push(e),e.isUnicode&&this.unicode==null&&(this.unicode=e);return!0},t.encode=function(n,e){var i,a;return e??=`macroman`,i=Qf.encode(n,e),(a=new hr).writeUInt16(0),a.writeUInt16(1),i.table=a.data.concat(i.subtable),i},t})();N5=(function(){function t(){return t.__super__.constructor.apply(this,arguments)}return Li(t,si),t.prototype.tag=`hhea`,t.prototype.parse=function(n){return n.pos=this.offset,this.version=n.readInt(),this.ascender=n.readShort(),this.decender=n.readShort(),this.lineGap=n.readShort(),this.advanceWidthMax=n.readShort(),this.minLeftSideBearing=n.readShort(),this.minRightSideBearing=n.readShort(),this.xMaxExtent=n.readShort(),this.caretSlopeRise=n.readShort(),this.caretSlopeRun=n.readShort(),this.caretOffset=n.readShort(),n.pos+=8,this.metricDataFormat=n.readShort(),this.numberOfMetrics=n.readUInt16()},t})();L5=(function(){function t(){return t.__super__.constructor.apply(this,arguments)}return Li(t,si),t.prototype.tag=`OS/2`,t.prototype.parse=function(n){if(n.pos=this.offset,this.version=n.readUInt16(),this.averageCharWidth=n.readShort(),this.weightClass=n.readUInt16(),this.widthClass=n.readUInt16(),this.type=n.readShort(),this.ySubscriptXSize=n.readShort(),this.ySubscriptYSize=n.readShort(),this.ySubscriptXOffset=n.readShort(),this.ySubscriptYOffset=n.readShort(),this.ySuperscriptXSize=n.readShort(),this.ySuperscriptYSize=n.readShort(),this.ySuperscriptXOffset=n.readShort(),this.ySuperscriptYOffset=n.readShort(),this.yStrikeoutSize=n.readShort(),this.yStrikeoutPosition=n.readShort(),this.familyClass=n.readShort(),this.panose=(function(){var e,i;for(i=[],e=0;e<10;++e)i.push(n.readByte());return i})(),this.charRange=(function(){var e,i;for(i=[],e=0;e<4;++e)i.push(n.readInt());return i})(),this.vendorID=n.readString(4),this.selection=n.readShort(),this.firstCharIndex=n.readShort(),this.lastCharIndex=n.readShort(),this.version>0&&(this.ascent=n.readShort(),this.descent=n.readShort(),this.lineGap=n.readShort(),this.winAscent=n.readShort(),this.winDescent=n.readShort(),this.codePageRange=(function(){var e,i;for(i=[],e=0;e<2;e=++e)i.push(n.readInt());return i})(),this.version>1))return this.xHeight=n.readShort(),this.capHeight=n.readShort(),this.defaultChar=n.readShort(),this.breakChar=n.readShort(),this.maxContext=n.readShort()},t})();S5=(function(){function t(){return t.__super__.constructor.apply(this,arguments)}return Li(t,si),t.prototype.tag=`post`,t.prototype.parse=function(n){var e,i,a;switch(n.pos=this.offset,this.format=n.readInt(),this.italicAngle=n.readInt(),this.underlinePosition=n.readShort(),this.underlineThickness=n.readShort(),this.isFixedPitch=n.readInt(),this.minMemType42=n.readInt(),this.maxMemType42=n.readInt(),this.minMemType1=n.readInt(),this.maxMemType1=n.readInt(),this.format){case 65536:case 196608:break;case 131072:var o;for(i=n.readUInt16(),this.glyphNameIndex=[],o=0;0<=i?oi;o=0<=i?++o:--o)this.glyphNameIndex.push(n.readUInt16());for(this.names=[],a=[];n.posl;o=0<=l?++f:--f)c.push(n.readUInt32());return c}.call(this)}},t})();k5=function(t,n){this.raw=t,this.length=t.length,this.platformID=n.platformID,this.encodingID=n.encodingID,this.languageID=n.languageID};P5=(function(){function t(){return t.__super__.constructor.apply(this,arguments)}return Li(t,si),t.prototype.tag=`name`,t.prototype.parse=function(n){var e,i,a,o,f,l,c,d,m,A,L;for(n.pos=this.offset,n.readShort(),e=n.readShort(),l=n.readShort(),i=[],o=0;0<=e?oe;o=0<=e?++o:--o)i.push({platformID:n.readShort(),encodingID:n.readShort(),languageID:n.readShort(),nameID:n.readShort(),length:n.readShort(),offset:this.offset+l+n.readShort()});for(c={},o=m=0,A=i.length;ml;e=0<=l?++e:--e)this.metrics.push({advance:n.readUInt16(),lsb:n.readInt16()});for(a=this.file.maxp.numGlyphs-this.file.hhea.numberOfMetrics,this.leftSideBearings=(function(){var d,m;for(m=[],e=d=0;0<=a?da;e=0<=a?++d:--d)m.push(n.readInt16());return m})(),this.widths=function(){var d,m,A,L;for(L=[],d=0,m=(A=this.metrics).length;da;e=0<=a?++f:--f)c.push(this.widths.push(i));return c},t.prototype.forGlyph=function(n){return n in this.metrics?this.metrics[n]:{advance:this.metrics[this.metrics.length-1].advance,lsb:this.leftSideBearings[n-this.metrics.length]}},t})();uu=[].slice;C5=(function(){function t(){return t.__super__.constructor.apply(this,arguments)}return Li(t,si),t.prototype.tag=`glyf`,t.prototype.parse=function(){return this.cache={}},t.prototype.glyphFor=function(n){var e,i,a,o,f,l,c,d,m,A;return n in this.cache?this.cache[n]:(o=this.file.loca,e=this.file.contents,i=o.indexOf(n),(a=o.lengthOf(n))===0?this.cache[n]=null:(e.pos=this.offset+i,f=(l=new hr(e.read(a))).readShort(),d=l.readShort(),A=l.readShort(),c=l.readShort(),m=l.readShort(),this.cache[n]=f===-1?new O5(l,d,A,c,m):new F5(l,f,d,A,c,m),this.cache[n]))},t.prototype.encode=function(n,e,i){var a,o,f,l,c;for(f=[],o=[],l=0,c=e.length;l0&&(a+=c)}for(var d=new Array(4*i.length),m=0;m>8,d[4*m+1]=(16711680&i[m])>>16,d[4*m]=(4278190080&i[m])>>24;return d},t})();R5=(function(){function t(n){this.font=n,this.subset={},this.unicodes={},this.next=33}return t.prototype.generateCmap=function(){var n,e,i,a,o;for(e in a=this.font.cmap.tables[0].codeMap,n={},o=this.subset)i=o[e],n[e]=a[i];return n},t.prototype.glyphsFor=function(n){var e,i,a,o,f,l,c;for(a={},f=0,l=n.length;f0)for(o in c=this.glyphsFor(e))i=c[o],a[o]=i;return a},t.prototype.encode=function(n,e){var i,a,o,f,l,c,d,m,A,L,p,T,O,B,k;for(a in i=fu.encode(this.generateCmap(),`unicode`),f=this.glyphsFor(n),p={0:0},k=i.charMap)p[(c=k[a]).old]=c.new;for(T in L=i.maxGlyphID,f)T in p||(p[T]=L++);return m=(function(Z){var $,D;for($ in D={},Z)D[Z[$]]=$;return D})(p),A=Object.keys(m).sort(function(Z,$){return Z-$}),O=(function(){var Z,$,D;for(D=[],Z=0,$=A.length;Z<$;Z++)l=A[Z],D.push(m[l]);return D})(),o=this.font.glyf.encode(f,O,p),d=this.font.loca.encode(o.offsets,O),B={cmap:this.font.cmap.raw(),glyf:o.table,loca:d,hmtx:this.font.hmtx.raw(),hhea:this.font.hhea.raw(),maxp:this.font.maxp.raw(),post:this.font.post.raw(),name:this.font.name.raw(),head:this.font.head.encode(e)},this.font.os2.exists&&(B[`OS/2`]=this.font.os2.raw()),this.font.directory.encode(B)},t})();Mt.API.PDFObject=(function(){var t;function n(){}return t=function(e,i){return(Array(i+1).join(`0`)+e).slice(-i)},n.convert=function(e){var i,a,o,f;if(Array.isArray(e))return`[`+(function(){var l,c,d;for(d=[],l=0,c=e.length;l>`),o.join(` +`)}return``+e},n})()}));init_chunk_APIPPBUG();export{Mt as default,Mt as jsPDF}; \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 59badf4..bcc0561 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,17 +1,17 @@ - + TaskPlanner by Ignite UI for Angular - + - - - + + + - + diff --git a/docs/main-ZSOIWSXQ.js b/docs/main-ZSOIWSXQ.js new file mode 100644 index 0000000..ea3bd2f --- /dev/null +++ b/docs/main-ZSOIWSXQ.js @@ -0,0 +1,2097 @@ +var __esmMin=(fn,res,err)=>()=>{if(err)throw err[0];try{return fn&&(res=fn(fn=0)),res}catch(e){throw err=[e],e}};var __commonJSMin=(cb,mod)=>()=>(mod||(cb((mod={exports:{}}).exports,mod),cb=null),mod.exports);function nn(r,n,t){return t||(t=n,n={}),typeof t!=`function`&&d(7),_r(r,n,[br],function(e){return Vr(Sr(e.data[0],e.data[1]))},0,t)}function Sr(r,n){return Ar(r,n||{},0,0)}function sn(r,n){n||(n={});var t=Rr();t.p(r);var e=Ar(r,n,n.dictionary?6:2,4);return rn(e,n),S(e,e.length-4,t.d()),e}function Zr(r,n){if(n){for(var t=new C(r.length),e=0;e>1)),o=0,s=function(f){i[o++]=f},e=0;ei.length){var u=new C(o+8+(a-e<<1));u.set(i),i=u}var h=r.charCodeAt(e);h<128||n?s(h):h<2048?(s(192|h>>6),s(128|h&63)):h>55295&&h<57344?(h=65536+(h&1047552)|r.charCodeAt(++e)&1023,s(240|h>>18),s(128|h>>12&63),s(128|h>>6&63),s(128|h&63)):(s(224|h>>12),s(128|h>>6&63),s(128|h&63))}return mr(i,0,o)}function fn(r,n,t){t||(t=n,n={}),typeof t!=`function`&&d(7);var e={};Wr(r,``,e,n);var a=Object.keys(e),i=a.length,o=0,s=0,u=i,h=new Array(i),f=[],y=function(){for(var g=0;g65535&&T(d(11,0,1),null),!V)T(null,F);else if(D<16e4)try{T(null,Sr(F,c))}catch(Z){T(Z,null)}else f.push(nn(F,c,T))},m=0;m{Cr={};jr=(function(r,n,t,e,a){var i=new Worker(Cr[n]||(Cr[n]=URL.createObjectURL(new Blob([r+`;addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})`],{type:`text/javascript`}))));return i.onmessage=function(o){var s=o.data,u=s.$e$;if(u){var h=new Error(u[0]);h.code=u[1],h.stack=u[2],a(h,null)}else a(null,s)},i.postMessage(t,e),i});C=Uint8Array;q$1=Uint16Array;ar=Int32Array;or=new C([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);sr=new C([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);vr=new C([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);Or=function(r,n){for(var t=new q$1(31),e=0;e<31;++e)t[e]=n+=1<>1|(p$1&21845)<<1,W=(W&52428)>>2|(W&13107)<<2,W=(W&61680)>>4|(W&3855)<<4,er[p$1]=((W&65280)>>8|(W&255)<<8)>>1;;;k$1=(function(r,n,t){for(var e=r.length,a=0,i=new q$1(n);a>u]=h}else for(s=new q$1(e),a=0;a>15-r[a]);return s});j$1=new C(288);for(p$1=0;p$1<144;++p$1)j$1[p$1]=8;;for(p$1=144;p$1<256;++p$1)j$1[p$1]=9;;for(p$1=256;p$1<280;++p$1)j$1[p$1]=7;;for(p$1=280;p$1<288;++p$1)j$1[p$1]=8;;_=new C(32);for(p$1=0;p$1<32;++p$1)_[p$1]=5;;Pr=k$1(j$1,9,0);$r=k$1(_,5,0);wr=function(r){return(r+7)/8|0};mr=function(r,n,t){return(n==null||n<0)&&(n=0),(t==null||t>r.length)&&(t=r.length),new C(r.subarray(n,t))};Kr=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`];d=function(r,n,t){var e=new Error(n||Kr[r]);if(e.code=r,Error.captureStackTrace&&Error.captureStackTrace(e,d),!t)throw e;return e};N=function(r,n,t){t<<=n&7;var e=n/8|0;r[e]|=t,r[e+1]|=t>>8};Q=function(r,n,t){t<<=n&7;var e=n/8|0;r[e]|=t,r[e+1]|=t>>8,r[e+2]|=t>>16};nr=function(r,n){for(var t=[],e=0;ew&&(w=i[e].s);var x=new q$1(w+1),I=ir(t[f-1],x,0);if(I>n){var e=0,m=0,g=I-n,G=1<n)m+=G-(1<>=g;m>0;){var F=i[e].s;x[F]=0&&m;--e){var c=i[e].s;x[c]==n&&(--x[c],++m)}I=n}return{t:new C(x),l:I}};ir=function(r,n,t){return r.s==-1?Math.max(ir(r.l,n,t+1),ir(r.r,n,t+1)):n[r.s]=t};pr=function(r){for(var n=r.length;n&&!r[--n];);for(var t=new q$1(++n),e=0,a=r[0],i=1,o=function(u){t[e++]=u},s=1;s<=n;++s)if(r[s]==a&&s!=n)++i;else{if(!a&&i>2){for(;i>138;i-=138)o(32754);i>2&&(o(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(o(a),--i;i>6;i-=6)o(8304);i>2&&(o(i-3<<5|8208),i=0)}for(;i--;)o(a);i=1,a=r[s]}return{c:t.subarray(0,e),n}};X=function(r,n){for(var t=0,e=0;e>8,r[a+2]=r[a]^255,r[a+3]=r[a+1]^255;for(var i=0;i4&&!U[vr[B-1]];--B);var V=h+5<<3,T=X(a,j$1)+X(i,_)+o,Z=X(a,w)+X(i,m)+o+14+3*B+X(z,U)+2*z[16]+3*z[17]+7*z[18];if(u>=0&&V<=T&&V<=Z)return xr(n,f,r.subarray(u,u+h));var L,A,P,Y;if(N(n,f,1+(Z15&&(N(n,f,J[v]>>5&127),f+=J[v]>>12)}}else L=Pr,A=j$1,P=$r,Y=_;for(var v=0;v255){var H=E>>18&31;Q(n,f,L[H+257]),f+=A[H+257],H>7&&(N(n,f,E>>23&31),f+=or[H]);var K=E&31;Q(n,f,P[K]),f+=Y[K],K>3&&(Q(n,f,E>>5&8191),f+=sr[K])}else Q(n,f,L[E]),f+=A[E]}return Q(n,f,L[256]),f+A[256]};Hr=new ar([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]);zr=new C(0);Nr=function(r,n,t,e,a,i){var o=i.z||r.length,s=new C(e+o+5*(1+Math.ceil(o/7e3))+a),u=s.subarray(e,s.length-a),h=i.l,f=(i.r||0)&7;if(n){f&&(u[0]=i.r>>3);for(var y=Hr[n-1],w=y>>13,x=y&8191,I=(1<7e3||U>24576)&&(L>423||!h)){f=gr(r,u,0,c,M,D,v,U,B,l-B,f),U=z=v=0,B=l;for(var A=0;A<286;++A)M[A]=0;for(var A=0;A<30;++A)D[A]=0}var P=2,Y=0,fr=x,$=T-Z&32767;if(L>2&&V==F(l-$))for(var b=Math.min(w,L)-1,J=Math.min(32767,l),H=Math.min(258,L);$<=J&&--fr&&T!=Z;){if(r[l+P]==r[l+P-$]){for(var E=0;EP){if(P=E,Y=$,E>b)break;for(var K=Math.min($,E-2),Ur=0,A=0;AUr&&(Ur=Fr,Z=hr)}}}T=Z,Z=m[T],$+=T-Z&32767}if(Y){c[U++]=268435456|tr[P]<<18|cr[Y];var Dr=tr[P]&31,Tr=cr[Y]&31;v+=or[Dr]+sr[Tr],++M[257+Dr],++D[Tr],R=l+P,++z}else c[U++]=r[l],++M[r[l]]}}for(l=Math.max(l,R);l=o&&(u[f/8|0]=h,ur=o),f=xr(u,f+1,r.subarray(l,ur))}i.i=o}return mr(s,0,e+wr(f)+a)};Qr=(function(){for(var r=new Int32Array(256),n=0;n<256;++n){for(var t=n,e=9;--e;)t=(t&1&&-306674912)^t>>>1;r[n]=t}return r})();Xr=function(){var r=-1;return{p:function(n){for(var t=r,e=0;e>>8;r=t},d:function(){return~r}}};Rr=function(){var r=1,n=0;return{p:function(t){for(var e=r,a=n,i=t.length|0,o=0;o!=i;){for(var s=Math.min(o+2655,i);o>16),a=(a&65535)+15*(a>>16)}r=e,n=a},d:function(){return r%=65521,n%=65521,(r&255)<<24|(r&65280)<<8|(n&255)<<8|n>>8}}};Ar=function(r,n,t,e,a){if(!a&&(a={l:1},n.dictionary)){var i=n.dictionary.subarray(-32768),o=new C(i.length+r.length);o.set(i),o.set(r,i.length),r=o,a.w=i.length}return Nr(r,n.level==null?6:n.level,n.mem==null?a.l?Math.ceil(Math.max(8,Math.min(13,Math.log(r.length)))*1.5):20:12+n.mem,t,e,a)};Mr=function(r,n){var t={};for(var e in r)t[e]=r[e];for(var e in n)t[e]=n[e];return t};Ir=function(r,n,t){for(var e=r(),a=r.toString(),i=a.slice(a.indexOf(`[`)+1,a.lastIndexOf(`]`)).replace(/\s+/g,``).split(`,`),o=0;o>>=8};rn=function(r,n){var t=n.level,e=t==0?0:t<6?1:t==9?3:2;if(r[0]=120,r[1]=e<<6|(n.dictionary&&32),r[1]|=31-(r[0]<<8|r[1])%31,n.dictionary){var a=Rr();a.p(n.dictionary),S(r,2,a.d())}};Wr=function(r,n,t,e){for(var a in r){var i=r[a],o=n+a,s=e;Array.isArray(i)&&(s=Mr(e,i[1]),i=i[0]),ArrayBuffer.isView(i)?t[o]=[i,s]:(t[o+=`/`]=[new C(0),s],Wr(i,o,t,e))}};Br=typeof TextEncoder<`u`&&new TextEncoder;tn=typeof TextDecoder<`u`&&new TextDecoder;try{tn.decode(zr,{stream:!0})}catch{}yr=function(r){var n=0;if(r)for(var t in r){var e=r[t].length;e>65535&&d(9),n+=e+4}return n};Er=function(r,n,t,e,a,i,o,s){var u=e.length,h=t.extra,f=s&&s.length,y=yr(h);S(r,n,o!=null?33639248:67324752),n+=4,o!=null&&(r[n++]=20,r[n++]=t.os),r[n]=20,n+=2,r[n++]=t.flag<<1|(i<0&&8),r[n++]=a&&8,r[n++]=t.compression&255,r[n++]=t.compression>>8;var w=new Date(t.mtime==null?Date.now():t.mtime),x=w.getFullYear()-1980;if((x<0||x>119)&&d(10),S(r,n,x<<25|w.getMonth()+1<<21|w.getDate()<<16|w.getHours()<<11|w.getMinutes()<<5|w.getSeconds()>>1),n+=4,i!=-1&&(S(r,n,t.crc),S(r,n+4,i<0?-i-2:i),S(r,n+8,t.size)),S(r,n+12,u),S(r,n+14,y),n+=16,o!=null&&(S(r,n,f),S(r,n+6,t.attrs),S(r,n+10,o),n+=14),r.set(e,n),n+=u,y)for(var I in h){var m=h[I],g=m.length;S(r,n,+I),S(r,n+2,g),r.set(m,n+4),n+=4+g}return f&&(r.set(s,n),n+=f),n};an=function(r,n,t,e,a){S(r,n,101010256),S(r,n+8,t),S(r,n+10,t),S(r,n+12,e),S(r,n+16,a)};Gr=typeof queueMicrotask==`function`?queueMicrotask:typeof setTimeout==`function`?setTimeout:function(r){r()}}));var k,g,l,m,n,o,f,p,h,j,i,r,s,t,u,q,v;var init_chunk_IFGU66OU=__esmMin((()=>{k=Object.create;g=Object.defineProperty;l=Object.defineProperties;m=Object.getOwnPropertyDescriptor;n=Object.getOwnPropertyDescriptors;o=Object.getOwnPropertyNames;f=Object.getOwnPropertySymbols;p=Object.getPrototypeOf;h=Object.prototype.hasOwnProperty;j=Object.prototype.propertyIsEnumerable;i=(a,b,c)=>b in a?g(a,b,{enumerable:!0,configurable:!0,writable:!0,value:c}):a[b]=c;r=(a,b)=>{for(var c in b||={})h.call(b,c)&&i(a,c,b[c]);if(f)for(var c of f(b))j.call(b,c)&&i(a,c,b[c]);return a};s=(a,b)=>l(a,n(b));t=(a,b)=>{var c={};for(var d in a)h.call(a,d)&&b.indexOf(d)<0&&(c[d]=a[d]);if(a!=null&&f)for(var d of f(a))b.indexOf(d)<0&&j.call(a,d)&&(c[d]=a[d]);return c};u=(a,b)=>()=>{try{return b||a((b={exports:{}}).exports,b),b.exports}catch(c){throw b=0,c}};q=(a,b,c,d)=>{if(b&&typeof b==`object`||typeof b==`function`)for(let e of o(b))!h.call(a,e)&&e!==c&&g(a,e,{get:()=>b[e],enumerable:!(d=m(b,e))||d.enumerable});return a};v=(a,b,c)=>(c=a!=null?k(p(a)):{},q(b||!a||!a.__esModule?g(c,`default`,{value:a,enumerable:!0}):c,a))}));var require_main_ZSOIWSXQ=__commonJSMin(((exports,module)=>{init_chunk_CHEWUVT5();init_chunk_IFGU66OU();var er=null;var bm=!1;var wl=1;var H7=null;var $i=Symbol(`SIGNAL`);function We(i){let r=er;return er=i,r}function Sm(){return er}var Ds={version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:`unknown`,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function Nl(i){if(bm)throw new Error(``);if(er===null)return;er.consumerOnSignalRead(i);let r=er.producersTail;if(r!==void 0&&r.producer===i)return;let e,t=er.recomputing;if(t&&(e=r!==void 0?r.nextProducer:er.producers,e!==void 0&&e.producer===i)){er.producersTail=e,e.lastReadVersion=i.version,e.knownValidAtEpoch=wl;return}let n=i.consumersTail;if(n!==void 0&&n.consumer===er&&(!t||n.knownValidAtEpoch===wl))return;let o=Xc(er),a={producer:i,consumer:er,nextProducer:e,prevConsumer:void 0,knownValidAtEpoch:wl,lastReadVersion:i.version,nextConsumer:void 0};er.producersTail=a,r!==void 0?r.nextProducer=a:er.producers=a,o&&gT(i,a)}function cT(){wl++}function Dl(i){if(!(Xc(i)&&!i.dirty)&&!(!i.dirty&&i.lastCleanEpoch===wl)){if(!i.producerMustRecompute(i)&&!rg(i)){Zc(i);return}i.producerRecomputeValue(i),Zc(i)}}function Ry(i){if(i.consumers===void 0)return;let r=bm;bm=!0;try{for(let e=i.consumers;e!==void 0;e=e.nextConsumer){let t=e.consumer;t.dirty||G7(t)}}finally{bm=r}}function Ay(){return er?.consumerAllowSignalWrites!==!1}function G7(i){i.dirty=!0,Ry(i),i.consumerMarkedDirty?.(i)}function Zc(i){i.dirty=!1,i.lastCleanEpoch=wl}function Ts(i){return i&&dT(i),We(i)}function dT(i){if(i.producersTail?.knownValidAtEpoch===wl){let r=i.producers;for(;r!==void 0;)r.knownValidAtEpoch=null,r=r.nextProducer}i.producersTail=void 0,i.recomputing=!0}function Tl(i,r){We(r),i&&uT(i)}function uT(i){i.recomputing=!1;let r=i.producersTail,e=r!==void 0?r.nextProducer:i.producers;if(e!==void 0){if(Xc(i))do e=Fy(e);while(e!==void 0);r!==void 0?r.nextProducer=void 0:i.producers=void 0}}function rg(i){for(let r=i.producers;r!==void 0;r=r.nextProducer){let e=r.producer,t=r.lastReadVersion;if(t!==e.version||(Dl(e),t!==e.version))return!0}return!1}function El(i){if(Xc(i)){let r=i.producers;for(;r!==void 0;)r=Fy(r)}i.producers=void 0,i.producersTail=void 0,i.consumers=void 0,i.consumersTail=void 0}function gT(i,r){let e=i.consumersTail,t=Xc(i);if(e!==void 0?(r.nextConsumer=e.nextConsumer,e.nextConsumer=r):(r.nextConsumer=void 0,i.consumers=r),r.prevConsumer=e,i.consumersTail=r,!t)for(let n=i.producers;n!==void 0;n=n.nextProducer)gT(n.producer,n)}function Fy(i){let r=i.producer,e=i.nextProducer,t=i.nextConsumer,n=i.prevConsumer;if(i.nextConsumer=void 0,i.prevConsumer=void 0,t!==void 0?t.prevConsumer=n:r.consumersTail=n,n!==void 0)n.nextConsumer=t;else if(r.consumers=t,!Xc(r)){let o=r.producers;for(;o!==void 0;)o=Fy(o)}return e}function Xc(i){return i.consumerIsAlwaysLive||i.consumers!==void 0}function og(i){H7?.(i)}function ag(i,r){return Object.is(i,r)}function sg(i,r){let e=Object.create(U7);e.computation=i,r!==void 0&&(e.equal=r);let t=()=>{if(Dl(e),Nl(e),e.value===qo)throw e.error;return e.value};return t[$i]=e,og(e),t}var Cl=Symbol(`UNSET`);var Il=Symbol(`COMPUTING`);var qo=Symbol(`ERRORED`);var U7=s(r({},Ds),{value:Cl,dirty:!0,error:null,equal:ag,kind:`computed`,producerMustRecompute(i){return i.value===Cl||i.value===Il},producerRecomputeValue(i){if(i.value===Il)throw new Error(``);let r=i.value;i.value=Il;let e=Ts(i),t,n=!1;try{t=i.computation(),We(null),n=r!==Cl&&r!==qo&&t!==qo&&i.equal(r,t)}catch(o){t=qo,i.error=o}finally{Tl(i,e)}if(n){i.value=r;return}i.value=t,i.version++}});function j7(){throw new Error}var pT=j7;function hT(i){pT(i)}function Py(i){pT=i}var W7=null;function Oy(i,r){let e=Object.create(Cm);e.value=i,r!==void 0&&(e.equal=r);let t=()=>mT(e);return t[$i]=e,og(e),[t,a=>kl(e,a),a=>wm(e,a)]}function mT(i){return Nl(i),i.value}function kl(i,r){Ay()||hT(i),i.equal(i.value,r)||(i.value=r,$7(i))}function wm(i,r){Ay()||hT(i),kl(i,r(i.value))}var Cm=s(r({},Ds),{equal:ag,value:void 0,kind:`signal`});function $7(i){i.version++,cT(),Ry(i),W7?.(i)}var Vy=s(r({},Ds),{consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:`effect`});function Ly(i){if(i.dirty=!1,i.version>0&&!rg(i))return;i.version++;let r=Ts(i);try{i.cleanup(),i.fn()}finally{Tl(i,r)}}var zy;function Im(){return zy}function Qo(i){let r=zy;return zy=i,r}var fT=Symbol(`NotFound`);function Jc(i){return i===fT||i?.name===`ɵNotFound`}function By(i,r,e){let t=Object.create(q7);t.source=i,t.computation=r,e!=null&&(t.equal=e);let o=()=>{if(Dl(t),Nl(t),t.value===qo)throw t.error;return t.value};return o[$i]=t,og(t),o}function Hy(i,r){Dl(i),kl(i,r),Zc(i)}function _T(i,r){if(Dl(i),i.value===qo)throw i.error;wm(i,r),Zc(i)}var q7=s(r({},Ds),{value:Cl,dirty:!0,error:null,equal:ag,kind:`linkedSignal`,producerMustRecompute(i){return i.value===Cl||i.value===Il},producerRecomputeValue(i){if(i.value===Il)throw new Error(``);let r=i.value;i.value=Il;let e=Ts(i),t,n=!1;try{let o=i.source(),a=r!==Cl&&r!==qo,s=a?{source:i.sourceValue,value:r}:void 0;t=i.computation(o,s),i.sourceValue=o,We(null),n=a&&t!==qo&&i.equal(r,t)}catch(o){t=qo,i.error=o}finally{Tl(i,e)}if(n){i.value=r;return}i.value=t,i.version++}});function xT(i){let r=We(null);try{return i()}finally{We(r)}}function Ze(i){return typeof i==`function`}function ed(i){let e=i(t=>{Error.call(t),t.stack=new Error().stack});return e.prototype=Object.create(Error.prototype),e.prototype.constructor=e,e}var Nm=ed(i=>function(e){i(this),this.message=e?`${e.length} errors occurred during unsubscription: +${e.map((t,n)=>`${n+1}) ${t.toString()}`).join(` + `)}`:``,this.name=`UnsubscriptionError`,this.errors=e});function Ml(i,r){if(i){let e=i.indexOf(r);0<=e&&i.splice(e,1)}}var yi=class i{constructor(r){this.initialTeardown=r,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let r;if(!this.closed){this.closed=!0;let{_parentage:e}=this;if(e)if(this._parentage=null,Array.isArray(e))for(let o of e)o.remove(this);else e.remove(this);let{initialTeardown:t}=this;if(Ze(t))try{t()}catch(o){r=o instanceof Nm?o.errors:[o]}let{_finalizers:n}=this;if(n){this._finalizers=null;for(let o of n)try{vT(o)}catch(a){r=r??[],a instanceof Nm?r=[...r,...a.errors]:r.push(a)}}if(r)throw new Nm(r)}}add(r){var e;if(r&&r!==this)if(this.closed)vT(r);else{if(r instanceof i){if(r.closed||r._hasParent(this))return;r._addParent(this)}(this._finalizers=(e=this._finalizers)!==null&&e!==void 0?e:[]).push(r)}}_hasParent(r){let{_parentage:e}=this;return e===r||Array.isArray(e)&&e.includes(r)}_addParent(r){let{_parentage:e}=this;this._parentage=Array.isArray(e)?(e.push(r),e):e?[e,r]:r}_removeParent(r){let{_parentage:e}=this;e===r?this._parentage=null:Array.isArray(e)&&Ml(e,r)}remove(r){let{_finalizers:e}=this;e&&Ml(e,r),r instanceof i&&r._removeParent(this)}};yi.EMPTY=(()=>{let i=new yi;return i.closed=!0,i})();var Gy=yi.EMPTY;function Dm(i){return i instanceof yi||i&&`closed`in i&&Ze(i.remove)&&Ze(i.add)&&Ze(i.unsubscribe)}function vT(i){Ze(i)?i():i.unsubscribe()}var po={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var td={setTimeout(i,r,...e){let{delegate:t}=td;return t?.setTimeout?t.setTimeout(i,r,...e):setTimeout(i,r,...e)},clearTimeout(i){let{delegate:r}=td;return(r?.clearTimeout||clearTimeout)(i)},delegate:void 0};function Tm(i){td.setTimeout(()=>{let{onUnhandledError:r}=po;if(r)r(i);else throw i})}function wt(){}var yT=Uy(`C`,void 0,void 0);function bT(i){return Uy(`E`,void 0,i)}function ST(i){return Uy(`N`,i,void 0)}function Uy(i,r,e){return{kind:i,value:r,error:e}}var Rl=null;function id(i){if(po.useDeprecatedSynchronousErrorHandling){let r=!Rl;if(r&&(Rl={errorThrown:!1,error:null}),i(),r){let{errorThrown:e,error:t}=Rl;if(Rl=null,e)throw t}}else i()}function wT(i){po.useDeprecatedSynchronousErrorHandling&&Rl&&(Rl.errorThrown=!0,Rl.error=i)}var Al=class extends yi{constructor(r){super(),this.isStopped=!1,r?(this.destination=r,Dm(r)&&r.add(this)):this.destination=Y7}static create(r,e,t){return new Ma(r,e,t)}next(r){this.isStopped?Wy(ST(r),this):this._next(r)}error(r){this.isStopped?Wy(bT(r),this):(this.isStopped=!0,this._error(r))}complete(){this.isStopped?Wy(yT,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(r){this.destination.next(r)}_error(r){try{this.destination.error(r)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}};var Q7=Function.prototype.bind;function jy(i,r){return Q7.call(i,r)}var $y=class{constructor(r){this.partialObserver=r}next(r){let{partialObserver:e}=this;if(e.next)try{e.next(r)}catch(t){Em(t)}}error(r){let{partialObserver:e}=this;if(e.error)try{e.error(r)}catch(t){Em(t)}else Em(r)}complete(){let{partialObserver:r}=this;if(r.complete)try{r.complete()}catch(e){Em(e)}}};var Ma=class extends Al{constructor(r,e,t){super();let n;if(Ze(r)||!r)n={next:r??void 0,error:e??void 0,complete:t??void 0};else{let o;this&&po.useDeprecatedNextContext?(o=Object.create(r),o.unsubscribe=()=>this.unsubscribe(),n={next:r.next&&jy(r.next,o),error:r.error&&jy(r.error,o),complete:r.complete&&jy(r.complete,o)}):n=r}this.destination=new $y(n)}};function Em(i){po.useDeprecatedSynchronousErrorHandling?wT(i):Tm(i)}function K7(i){throw i}function Wy(i,r){let{onStoppedNotification:e}=po;e&&td.setTimeout(()=>e(i,r))}var Y7={closed:!0,next:wt,error:K7,complete:wt};var nd=typeof Symbol==`function`&&Symbol.observable||`@@observable`;function Ir(i){return i}function rd(...i){return qy(i)}function qy(i){return i.length===0?Ir:i.length===1?i[0]:function(e){return i.reduce((t,n)=>n(t),e)}}var qe=class i{constructor(r){r&&(this._subscribe=r)}lift(r){let e=new i;return e.source=this,e.operator=r,e}subscribe(r,e,t){let n=X7(r)?r:new Ma(r,e,t);return id(()=>{let{operator:o,source:a}=this;n.add(o?o.call(n,a):a?this._subscribe(n):this._trySubscribe(n))}),n}_trySubscribe(r){try{return this._subscribe(r)}catch(e){r.error(e)}}forEach(r,e){return e=CT(e),new e((t,n)=>{let o=new Ma({next:a=>{try{r(a)}catch(s){n(s),o.unsubscribe()}},error:n,complete:t});this.subscribe(o)})}_subscribe(r){var e;return(e=this.source)===null||e===void 0?void 0:e.subscribe(r)}[nd](){return this}pipe(...r){return qy(r)(this)}toPromise(r){return r=CT(r),new r((e,t)=>{let n;this.subscribe(o=>n=o,o=>t(o),()=>e(n))})}};qe.create=i=>new qe(i);function CT(i){var r;return(r=i??po.Promise)!==null&&r!==void 0?r:Promise}function Z7(i){return i&&Ze(i.next)&&Ze(i.error)&&Ze(i.complete)}function X7(i){return i&&i instanceof Al||Z7(i)&&Dm(i)}function J7(i){return Ze(i?.lift)}function ht(i){return r=>{if(J7(r))return r.lift(function(e){try{return i(e,this)}catch(t){this.error(t)}});throw new TypeError(`Unable to lift unknown Observable type`)}}function ut(i,r,e,t,n){return new Qy(i,r,e,t,n)}var Qy=class extends Al{constructor(r,e,t,n,o,a){super(r),this.onFinalize=o,this.shouldUnsubscribe=a,this._next=e?function(s){try{e(s)}catch(l){r.error(l)}}:super._next,this._error=n?function(s){try{n(s)}catch(l){r.error(l)}finally{this.unsubscribe()}}:super._error,this._complete=t?function(){try{t()}catch(s){r.error(s)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var r;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){let{closed:e}=this;super.unsubscribe(),!e&&((r=this.onFinalize)===null||r===void 0||r.call(this))}}};var od={schedule(i){let r=requestAnimationFrame,e=cancelAnimationFrame,{delegate:t}=od;t&&(r=t.requestAnimationFrame,e=t.cancelAnimationFrame);let n=r(o=>{e=void 0,i(o)});return new yi(()=>e?.(n))},requestAnimationFrame(...i){let{delegate:r}=od;return(r?.requestAnimationFrame||requestAnimationFrame)(...i)},cancelAnimationFrame(...i){let{delegate:r}=od;return(r?.cancelAnimationFrame||cancelAnimationFrame)(...i)},delegate:void 0};var IT=ed(i=>function(){i(this),this.name=`ObjectUnsubscribedError`,this.message=`object unsubscribed`});var ce=class extends qe{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(r){let e=new km(this,this);return e.operator=r,e}_throwIfClosed(){if(this.closed)throw new IT}next(r){id(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(let e of this.currentObservers)e.next(r)}})}error(r){id(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=r;let{observers:e}=this;for(;e.length;)e.shift().error(r)}})}complete(){id(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;let{observers:r}=this;for(;r.length;)r.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var r;return((r=this.observers)===null||r===void 0?void 0:r.length)>0}_trySubscribe(r){return this._throwIfClosed(),super._trySubscribe(r)}_subscribe(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)}_innerSubscribe(r){let{hasError:e,isStopped:t,observers:n}=this;return e||t?Gy:(this.currentObservers=null,n.push(r),new yi(()=>{this.currentObservers=null,Ml(n,r)}))}_checkFinalizedStatuses(r){let{hasError:e,thrownError:t,isStopped:n}=this;e?r.error(t):n&&r.complete()}asObservable(){let r=new qe;return r.source=this,r}};ce.create=(i,r)=>new km(i,r);var km=class extends ce{constructor(r,e){super(),this.destination=r,this.source=e}next(r){var e,t;(t=(e=this.destination)===null||e===void 0?void 0:e.next)===null||t===void 0||t.call(e,r)}error(r){var e,t;(t=(e=this.destination)===null||e===void 0?void 0:e.error)===null||t===void 0||t.call(e,r)}complete(){var r,e;(e=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||e===void 0||e.call(r)}_subscribe(r){var e,t;return(t=(e=this.source)===null||e===void 0?void 0:e.subscribe(r))!==null&&t!==void 0?t:Gy}};var Gi=class extends ce{constructor(r){super(),this._value=r}get value(){return this.getValue()}_subscribe(r){let e=super._subscribe(r);return!e.closed&&r.next(this._value),e}getValue(){let{hasError:r,thrownError:e,_value:t}=this;if(r)throw e;return this._throwIfClosed(),t}next(r){super.next(this._value=r)}};var lg={now(){return(lg.delegate||Date).now()},delegate:void 0};var cg=class extends ce{constructor(r=Infinity,e=Infinity,t=lg){super(),this._bufferSize=r,this._windowTime=e,this._timestampProvider=t,this._buffer=[],this._infiniteTimeWindow=!0,this._infiniteTimeWindow=e===Infinity,this._bufferSize=Math.max(1,r),this._windowTime=Math.max(1,e)}next(r){let{isStopped:e,_buffer:t,_infiniteTimeWindow:n,_timestampProvider:o,_windowTime:a}=this;e||(t.push(r),!n&&t.push(o.now()+a)),this._trimBuffer(),super.next(r)}_subscribe(r){this._throwIfClosed(),this._trimBuffer();let e=this._innerSubscribe(r),{_infiniteTimeWindow:t,_buffer:n}=this,o=n.slice();for(let a=0;a{class i{constructor(e,t=i.now){this.schedulerActionCtor=e,this.now=t}schedule(e,t=0,n){return new this.schedulerActionCtor(this,e).schedule(n,t)}}return i.now=lg.now,i})();var sd=class extends Ky{constructor(r,e=Ky.now){super(r,e),this.actions=[],this._active=!1}flush(r){let{actions:e}=this;if(this._active){e.push(r);return}let t;this._active=!0;do if(t=r.execute(r.state,r.delay))break;while(r=e.shift());if(this._active=!1,t){for(;r=e.shift();)r.unsubscribe();throw t}}};var Ra=new sd(ad);var NT=Ra;var Rm=class extends ad{constructor(r,e){super(r,e),this.scheduler=r,this.work=e}requestAsyncId(r,e,t=0){return t!==null&&t>0?super.requestAsyncId(r,e,t):(r.actions.push(this),r._scheduled||(r._scheduled=od.requestAnimationFrame(()=>r.flush(void 0))))}recycleAsyncId(r,e,t=0){var n;if(t!=null?t>0:this.delay>0)return super.recycleAsyncId(r,e,t);let{actions:o}=r;e!=null&&e===r._scheduled&&((n=o[o.length-1])===null||n===void 0?void 0:n.id)!==e&&(od.cancelAnimationFrame(e),r._scheduled=void 0)}};var Am=class extends sd{flush(r){this._active=!0;let e;r?e=r.id:(e=this._scheduled,this._scheduled=void 0);let{actions:t}=this,n;r=r||t.shift();do if(n=r.execute(r.state,r.delay))break;while((r=t[0])&&r.id===e&&t.shift());if(this._active=!1,n){for(;(r=t[0])&&r.id===e&&t.shift();)r.unsubscribe();throw n}}};var zn=new Am(Rm);var Ji=new qe(i=>i.complete());function Fm(i){return i&&Ze(i.schedule)}function Yy(i){return i[i.length-1]}function Pm(i){return Ze(Yy(i))?i.pop():void 0}function Ko(i){return Fm(Yy(i))?i.pop():void 0}function DT(i,r){return typeof Yy(i)==`number`?i.pop():r}function Be(i,r,e,t){var n=arguments.length,o=n<3?r:t===null?t=Object.getOwnPropertyDescriptor(r,e):t,a;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(i,r,e,t);else for(var s=i.length-1;s>=0;s--)(a=i[s])&&(o=(n<3?a(o):n>3?a(r,e,o):a(r,e))||o);return n>3&&o&&Object.defineProperty(r,e,o),o}function ET(i,r,e,t){function n(o){return o instanceof e?o:new e(function(a){a(o)})}return new(e||(e=Promise))(function(o,a){function s(d){try{c(t.next(d))}catch(p){a(p)}}function l(d){try{c(t.throw(d))}catch(p){a(p)}}function c(d){d.done?o(d.value):n(d.value).then(s,l)}c((t=t.apply(i,r||[])).next())})}function TT(i){var r=typeof Symbol==`function`&&Symbol.iterator,e=r&&i[r],t=0;if(e)return e.call(i);if(i&&typeof i.length==`number`)return{next:function(){return i&&t>=i.length&&(i=void 0),{value:i&&i[t++],done:!i}}};throw new TypeError(r?`Object is not iterable.`:`Symbol.iterator is not defined.`)}function Fl(i){return this instanceof Fl?(this.v=i,this):new Fl(i)}function kT(i,r,e){if(!Symbol.asyncIterator)throw new TypeError(`Symbol.asyncIterator is not defined.`);var t=e.apply(i,r||[]),n,o=[];return n=Object.create((typeof AsyncIterator==`function`?AsyncIterator:Object).prototype),s(`next`),s(`throw`),s(`return`,a),n[Symbol.asyncIterator]=function(){return this},n;function a(v){return function(y){return Promise.resolve(y).then(v,p)}}function s(v,y){t[v]&&(n[v]=function(T){return new Promise(function(M,F){o.push([v,T,M,F])>1||l(v,T)})},y&&(n[v]=y(n[v])))}function l(v,y){try{c(t[v](y))}catch(T){f(o[0][3],T)}}function c(v){v.value instanceof Fl?Promise.resolve(v.value.v).then(d,p):f(o[0][2],v)}function d(v){l(`next`,v)}function p(v){l(`throw`,v)}function f(v,y){v(y),o.shift(),o.length&&l(o[0][0],o[0][1])}}function MT(i){if(!Symbol.asyncIterator)throw new TypeError(`Symbol.asyncIterator is not defined.`);var r=i[Symbol.asyncIterator],e;return r?r.call(i):(i=typeof TT==`function`?TT(i):i[Symbol.iterator](),e={},t(`next`),t(`throw`),t(`return`),e[Symbol.asyncIterator]=function(){return this},e);function t(o){e[o]=i[o]&&function(a){return new Promise(function(s,l){a=i[o](a),n(s,l,a.done,a.value)})}}function n(o,a,s,l){Promise.resolve(l).then(function(c){o({value:c,done:s})},a)}}var ld=(i=>i&&typeof i.length==`number`&&typeof i!=`function`);function Om(i){return Ze(i?.then)}function Vm(i){return Ze(i[nd])}function Lm(i){return Symbol.asyncIterator&&Ze(i?.[Symbol.asyncIterator])}function zm(i){return new TypeError(`You provided ${i!==null&&typeof i==`object`?`an invalid object`:`'${i}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}function ez(){return typeof Symbol!=`function`||!Symbol.iterator?`@@iterator`:Symbol.iterator}var Bm=ez();function Hm(i){return Ze(i?.[Bm])}function Gm(i){return kT(this,arguments,function*(){let e=i.getReader();try{for(;;){let{value:t,done:n}=yield Fl(e.read());if(n)return yield Fl(void 0);yield yield Fl(t)}}finally{e.releaseLock()}})}function Um(i){return Ze(i?.getReader)}function Ht(i){if(i instanceof qe)return i;if(i!=null){if(Vm(i))return tz(i);if(ld(i))return iz(i);if(Om(i))return nz(i);if(Lm(i))return RT(i);if(Hm(i))return rz(i);if(Um(i))return oz(i)}throw zm(i)}function tz(i){return new qe(r=>{let e=i[nd]();if(Ze(e.subscribe))return e.subscribe(r);throw new TypeError(`Provided object does not correctly implement Symbol.observable`)})}function iz(i){return new qe(r=>{for(let e=0;e{i.then(e=>{r.closed||(r.next(e),r.complete())},e=>r.error(e)).then(null,Tm)})}function rz(i){return new qe(r=>{for(let e of i)if(r.next(e),r.closed)return;r.complete()})}function RT(i){return new qe(r=>{az(i,r).catch(e=>r.error(e))})}function oz(i){return RT(Gm(i))}function az(i,r){var e,t,n,o;return ET(this,void 0,void 0,function*(){try{for(e=MT(i);t=yield e.next(),!t.done;){let a=t.value;if(r.next(a),r.closed)return}}catch(a){n={error:a}}finally{try{t&&!t.done&&(o=e.return)&&(yield o.call(e))}finally{if(n)throw n.error}}r.complete()})}function dr(i,r,e,t=0,n=!1){let o=r.schedule(function(){e(),n?i.add(this.schedule(null,t)):this.unsubscribe()},t);if(i.add(o),!n)return o}function jm(i,r=0){return ht((e,t)=>{e.subscribe(ut(t,n=>dr(t,i,()=>t.next(n),r),()=>dr(t,i,()=>t.complete(),r),n=>dr(t,i,()=>t.error(n),r)))})}function Wm(i,r=0){return ht((e,t)=>{t.add(i.schedule(()=>e.subscribe(t),r))})}function AT(i,r){return Ht(i).pipe(Wm(r),jm(r))}function FT(i,r){return Ht(i).pipe(Wm(r),jm(r))}function PT(i,r){return new qe(e=>{let t=0;return r.schedule(function(){t===i.length?e.complete():(e.next(i[t++]),e.closed||this.schedule())})})}function OT(i,r){return new qe(e=>{let t;return dr(e,r,()=>{t=i[Bm](),dr(e,r,()=>{let n,o;try{({value:n,done:o}=t.next())}catch(a){e.error(a);return}o?e.complete():e.next(n)},0,!0)}),()=>Ze(t?.return)&&t.return()})}function $m(i,r){if(!i)throw new Error(`Iterable cannot be null`);return new qe(e=>{dr(e,r,()=>{let t=i[Symbol.asyncIterator]();dr(e,r,()=>{t.next().then(n=>{n.done?e.complete():e.next(n.value)})},0,!0)})})}function VT(i,r){return $m(Gm(i),r)}function LT(i,r){if(i!=null){if(Vm(i))return AT(i,r);if(ld(i))return PT(i,r);if(Om(i))return FT(i,r);if(Lm(i))return $m(i,r);if(Hm(i))return OT(i,r);if(Um(i))return VT(i,r)}throw zm(i)}function ui(i,r){return r?LT(i,r):Ht(i)}function lt(...i){return ui(i,Ko(i))}function Zy(i,r){let e=Ze(i)?i:()=>i,t=n=>n.error(e());return new qe(r?n=>r.schedule(t,0,n):t)}function qm(i){return!!i&&(i instanceof qe||Ze(i.lift)&&Ze(i.subscribe))}var Pl=ed(i=>function(){i(this),this.name=`EmptyError`,this.message=`no elements in sequence`});function zT(i){return i instanceof Date&&!isNaN(i)}function Pt(i,r){return ht((e,t)=>{let n=0;e.subscribe(ut(t,o=>{t.next(i.call(r,o,n++))}))})}var{isArray:sz}=Array;function lz(i,r){return sz(r)?i(...r):i(r)}function cd(i){return Pt(r=>lz(i,r))}var{isArray:cz}=Array,{getPrototypeOf:dz,prototype:uz,keys:gz}=Object;function Qm(i){if(i.length===1){let r=i[0];if(cz(r))return{args:r,keys:null};if(pz(r)){let e=gz(r);return{args:e.map(t=>r[t]),keys:e}}}return{args:i,keys:null}}function pz(i){return i&&typeof i==`object`&&dz(i)===uz}function Km(i,r){return i.reduce((e,t,n)=>(e[t]=r[n],e),{})}function Ym(...i){let r=Ko(i),e=Pm(i),{args:t,keys:n}=Qm(i);if(t.length===0)return ui([],r);let o=new qe(hz(t,r,n?a=>Km(n,a):Ir));return e?o.pipe(cd(e)):o}function hz(i,r,e=Ir){return t=>{BT(r,()=>{let{length:n}=i,o=new Array(n),a=n,s=n;for(let l=0;l{let c=ui(i[l],r),d=!1;c.subscribe(ut(t,p=>{o[l]=p,d||(d=!0,s--),s||t.next(e(o.slice()))},()=>{--a||t.complete()}))},t)},t)}}function BT(i,r,e){i?dr(e,i,r):r()}function HT(i,r,e,t,n,o,a,s){let l=[],c=0,d=0,p=!1,f=()=>{p&&!l.length&&!c&&r.complete()},v=T=>c{o&&r.next(T),c++;let M=!1;Ht(e(T,d++)).subscribe(ut(r,F=>{n?.(F),o?v(F):r.next(F)},()=>{M=!0},void 0,()=>{if(M)try{for(c--;l.length&&cy(F)):y(F)}f()}catch(F){r.error(F)}}))};return i.subscribe(ut(r,v,()=>{p=!0,f()})),()=>{s?.()}}function en(i,r,e=Infinity){return Ze(r)?en((t,n)=>Pt((o,a)=>r(t,o,n,a))(Ht(i(t,n))),e):(typeof r==`number`&&(e=r),ht((t,n)=>HT(t,n,i,e)))}function Es(i=Infinity){return en(Ir,i)}function GT(){return Es(1)}function dd(...i){return GT()(ui(i,Ko(i)))}function ug(i){return new qe(r=>{Ht(i()).subscribe(r)})}function Xy(...i){let r=Pm(i),{args:e,keys:t}=Qm(i),n=new qe(o=>{let{length:a}=e;if(!a){o.complete();return}let s=new Array(a),l=a,c=a;for(let d=0;d{p||(p=!0,c--),s[d]=f},()=>l--,void 0,()=>{(!l||!p)&&(c||o.next(t?Km(t,s):s),o.complete())}))}});return r?n.pipe(cd(r)):n}var mz=[`addListener`,`removeListener`];var fz=[`addEventListener`,`removeEventListener`];var _z=[`on`,`off`];function Ct(i,r,e,t){if(Ze(e)&&(t=e,e=void 0),t)return Ct(i,r,e).pipe(cd(t));let[n,o]=yz(i)?fz.map(a=>s=>i[a](r,s,e)):xz(i)?mz.map(UT(i,r)):vz(i)?_z.map(UT(i,r)):[];if(!n&&ld(i))return en(a=>Ct(a,r,e))(Ht(i));if(!n)throw new TypeError(`Invalid event target`);return new qe(a=>{let s=(...l)=>a.next(1o(s)})}function UT(i,r){return e=>t=>i[e](r,t)}function xz(i){return Ze(i.addListener)&&Ze(i.removeListener)}function vz(i){return Ze(i.on)&&Ze(i.off)}function yz(i){return Ze(i.addEventListener)&&Ze(i.removeEventListener)}function Aa(i=0,r,e=NT){let t=-1;return r!=null&&(Fm(r)?e=r:t=r),new qe(n=>{let o=zT(i)?+i-e.now():i;o<0&&(o=0);let a=0;return e.schedule(function(){n.closed||(n.next(a++),0<=t?this.schedule(void 0,t):n.complete())},o)})}function tr(i=0,r=Ra){return i<0&&(i=0),Aa(i,i,r)}function gg(...i){let r=Ko(i),e=DT(i,Infinity),t=i;return t.length?t.length===1?Ht(t[0]):Es(e)(ui(t,r)):Ji}var Jy=new qe(wt);function gt(i,r){return ht((e,t)=>{let n=0;e.subscribe(ut(t,o=>i.call(r,o,n++)&&t.next(o)))})}function ud(i){return ht((r,e)=>{let t=null,n=!1,o;t=r.subscribe(ut(e,void 0,void 0,a=>{o=Ht(i(a,ud(i)(r))),t?(t.unsubscribe(),t=null,o.subscribe(e)):n=!0})),n&&(t.unsubscribe(),t=null,o.subscribe(e))})}function ks(i,r){return Ze(r)?en(i,r,1):en(i,1)}function pg(i){return ht((r,e)=>{let t=!1,n=null,o=null,a=()=>{if(o?.unsubscribe(),o=null,t){t=!1;let s=n;n=null,e.next(s)}};r.subscribe(ut(e,s=>{o?.unsubscribe(),t=!0,n=s,o=ut(e,a,wt),Ht(i(s)).subscribe(o)},()=>{a(),e.complete()},void 0,()=>{n=o=null}))})}function hg(i,r=Ra){return ht((e,t)=>{let n=null,o=null,a=null,s=()=>{if(n){n.unsubscribe(),n=null;let c=o;o=null,t.next(c)}};function l(){let c=a+i,d=r.now();if(d{o=c,a=r.now(),n||(n=r.schedule(l,i),t.add(n))},()=>{s(),t.complete()},void 0,()=>{o=n=null}))})}function jT(i){return ht((r,e)=>{let t=!1;r.subscribe(ut(e,n=>{t=!0,e.next(n)},()=>{t||e.next(i),e.complete()}))})}function ur(i){return i<=0?()=>Ji:ht((r,e)=>{let t=0;r.subscribe(ut(e,n=>{++t<=i&&(e.next(n),i<=t&&e.complete())}))})}function WT(i=bz){return ht((r,e)=>{let t=!1;r.subscribe(ut(e,n=>{t=!0,e.next(n)},()=>t?e.complete():e.error(i())))})}function bz(){return new Pl}function gd(i){return ht((r,e)=>{try{r.subscribe(e)}finally{e.add(i)}})}function zt(i,r){let e=arguments.length>=2;return t=>t.pipe(i?gt((n,o)=>i(n,o,t)):Ir,ur(1),e?jT(r):WT(()=>new Pl))}function Zm(i){return i<=0?()=>Ji:ht((r,e)=>{let t=[];r.subscribe(ut(e,n=>{t.push(n),i{for(let n of t)e.next(n);e.complete()},void 0,()=>{t=null}))})}function $T(i){return ht((r,e)=>{let t=!1,n=null;r.subscribe(ut(e,o=>{t=!0,n=o})),Ht(i).subscribe(ut(e,()=>{if(t){t=!1;let o=n;n=null,e.next(o)}},wt))})}function eb(i,r=Ra){return $T(tr(i,r))}function qT(i={}){let{connector:r=()=>new ce,resetOnError:e=!0,resetOnComplete:t=!0,resetOnRefCountZero:n=!0}=i;return o=>{let a,s,l,c=0,d=!1,p=!1,f=()=>{s?.unsubscribe(),s=void 0},v=()=>{f(),a=l=void 0,d=p=!1},y=()=>{let T=a;v(),T?.unsubscribe()};return ht((T,M)=>{c++,!p&&!d&&f();let F=l=l??r();M.add(()=>{c--,c===0&&!p&&!d&&(s=tb(y,n))}),F.subscribe(M),!a&&c>0&&(a=new Ma({next:A=>F.next(A),error:A=>{p=!0,f(),s=tb(v,e,A),F.error(A)},complete:()=>{d=!0,f(),s=tb(v,t),F.complete()}}),Ht(T).subscribe(a))})(o)}}function tb(i,r,...e){if(r===!0){i();return}if(r===!1)return;let t=new Ma({next:()=>{t.unsubscribe(),i()}});return Ht(r(...e)).subscribe(t)}function ib(i,r,e){let t,n=!1;return i&&typeof i==`object`?{bufferSize:t=Infinity,windowTime:r=Infinity,refCount:n=!1,scheduler:e}=i:t=i??Infinity,qT({connector:()=>new cg(t,r,e),resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:n})}function nb(i){return i<=0?Ir:ht((r,e)=>{let t=new Array(i),n=0;return r.subscribe(ut(e,o=>{let a=n++;if(a{t=null}})}function rb(...i){let r=Ko(i);return ht((e,t)=>{(r?dd(i,e,r):dd(i,e)).subscribe(t)})}function Ui(i,r){return ht((e,t)=>{let n=null,o=0,a=!1,s=()=>a&&!n&&t.complete();e.subscribe(ut(t,l=>{n?.unsubscribe();let c=0,d=o++;Ht(i(l,d)).subscribe(n=ut(t,p=>t.next(r?r(l,p,d,c++):p),()=>{n=null,s()}))},()=>{a=!0,s()}))})}function U(i){return ht((r,e)=>{Ht(i).subscribe(ut(e,()=>e.complete(),wt)),!e.closed&&r.subscribe(e)})}function Ol(i,r=!1){return ht((e,t)=>{let n=0;e.subscribe(ut(t,o=>{let a=i(o,n++);(a||r)&&t.next(o),!a&&t.complete()}))})}function gr(i,r,e){let t=Ze(i)||r||e?{next:i,error:r,complete:e}:i;return t?ht((n,o)=>{var a;(a=t.subscribe)===null||a===void 0||a.call(t);let s=!0;n.subscribe(ut(o,l=>{var c;(c=t.next)===null||c===void 0||c.call(t,l),o.next(l)},()=>{var l;s=!1,(l=t.complete)===null||l===void 0||l.call(t),o.complete()},l=>{var c;s=!1,(c=t.error)===null||c===void 0||c.call(t,l),o.error(l)},()=>{var l,c;s&&((l=t.unsubscribe)===null||l===void 0||l.call(t)),(c=t.finalize)===null||c===void 0||c.call(t)}))}):Ir}function ho(i,r){return ht((e,t)=>{let{leading:n=!0,trailing:o=!1}=r??{},a=!1,s=null,l=null,c=!1,d=()=>{l?.unsubscribe(),l=null,o&&(v(),c&&t.complete())},p=()=>{l=null,c&&t.complete()},f=y=>l=Ht(i(y)).subscribe(ut(t,d,p)),v=()=>{if(a){a=!1;let y=s;s=null,t.next(y),!c&&f(y)}};e.subscribe(ut(t,y=>{a=!0,s=y,!(l&&!l.closed)&&(n?v():f(y))},()=>{c=!0,!(o&&a&&l&&!l.closed)&&t.complete()}))})}function Nr(i,r=Ra,e){let t=Aa(i,r);return ho(()=>t,e)}var of=`https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss`;var X=class extends Error{code;constructor(r,e){super(Dr(r,e)),this.code=r}};function Sz(i){return`NG0${Math.abs(i)}`}function Dr(i,r){return`${Sz(i)}${r?`: `+r:``}`}function Kt(i){for(let r in i)if(i[r]===Kt)return r;throw Error(``)}function JT(i,r){for(let e in r)Object.hasOwn(r,e)&&!Object.hasOwn(i,e)&&(i[e]=r[e])}function bg(i){if(typeof i==`string`)return i;if(Array.isArray(i))return`[${i.map(bg).join(`, `)}]`;if(i==null)return``+i;let r=i.overriddenName||i.name;if(r)return`${r}`;let e=i.toString();if(e==null)return``+e;let t=e.indexOf(` +`);return t>=0?e.slice(0,t):e}function af(i,r){return i?r?`${i} ${r}`:i:r||``}var wz=Kt({__forward_ref__:Kt});function rn(i){return i.__forward_ref__=rn,i}function tn(i){return xb(i)?i():i}function xb(i){return typeof i==`function`&&Object.hasOwn(i,wz)&&i.__forward_ref__===rn}function de(i){return{token:i.token,providedIn:i.providedIn||null,factory:i.factory,value:void 0}}function Ee(i){return{providers:i.providers||[],imports:i.imports||[]}}function Sg(i){return Cz(i,sf)}function vb(i){return Sg(i)!==null}function Cz(i,r){return Object.hasOwn(i,r)&&i[r]||null}function Iz(i){return(i?.[sf]??null)||null}function ab(i){return i&&Object.hasOwn(i,Jm)?i[Jm]:null}var sf=Kt({ɵprov:Kt});var Jm=Kt({ɵinj:Kt});var le=class{_desc;ngMetadataName=`InjectionToken`;ɵprov;constructor(r,e){this._desc=r,this.ɵprov=void 0,typeof e==`number`?this.__NG_ELEMENT_ID__=e:e!==void 0&&(this.ɵprov=de({token:this,providedIn:e.providedIn||`root`,factory:e.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function yb(i){return i&&!!i.ɵproviders}var wg=Kt({ɵcmp:Kt});var Cg=Kt({ɵdir:Kt});var bb=Kt({ɵpipe:Kt});var Sb=Kt({ɵmod:Kt});var _g=Kt({ɵfac:Kt});var Bl=Kt({__NG_ELEMENT_ID__:Kt});var QT=Kt({__NG_ENV_ID__:Kt});function eE(i){return cf(i,`@NgModule`),i[Sb]||null}function za(i){return cf(i,`@Component`),i[wg]||null}function lf(i){return cf(i,`@Directive`),i[Cg]||null}function tE(i){return cf(i,`@Pipe`),i[bb]||null}function cf(i,r){if(i==null)throw new X(-919,!1)}function As(i){return typeof i==`string`?i:i==null?``:String(i)}var iE=Kt({ngErrorCode:Kt});var Nz=Kt({ngErrorMessage:Kt});var Dz=Kt({ngTokenPath:Kt});function wb(i,r){return nE(``,-200,r)}function df(i,r){throw new X(-201,!1)}function nE(i,r,e){let t=new X(r,i);return t[iE]=r,t[Nz]=i,e&&(t[Dz]=e),t}function Tz(i){return i[iE]}var sb;function rE(){return sb}function ir(i){let r=sb;return sb=i,r}function Cb(i,r,e){let t=Sg(i);if(t&&t.providedIn==`root`)return t.value===void 0?t.value=t.factory():t.value;if(e&8)return null;if(r!==void 0)return r;df(i,``)}var on=globalThis;var Vl={};var kz=`__NG_DI_FLAG__`;var lb=class{injector;constructor(r){this.injector=r}retrieve(r,e){let t=Ll(e)||0;try{return this.injector.get(r,t&8?null:Vl,t)}catch(n){if(Jc(n))return n;throw n}}};function Mz(i,r=0){let e=Im();if(e===void 0)throw new X(-203,!1);if(e===null)return Cb(i,void 0,r);{let t=Rz(r),n=e.retrieve(i,t);if(Jc(n)){if(t.optional)return null;throw n}return n}}function Te(i,r=0){return(rE()||Mz)(tn(i),r)}function _(i,r){return Te(i,Ll(r))}function Ll(i){return typeof i>`u`||typeof i==`number`?i:0|(i.optional&&8)|(i.host&&1)|(i.self&&2)|(i.skipSelf&&4)}function Rz(i){return{optional:!!(i&8),host:!!(i&1),self:!!(i&2),skipSelf:!!(i&4)}}function cb(i){let r=[];for(let e=0;eArray.isArray(e)?uf(e,r):r(e))}function Ib(i,r,e){r>=i.length?i.push(e):i.splice(r,0,e)}function Ig(i,r){return r>=i.length-1?i.pop():i.splice(r,1)[0]}function sE(i,r){let e=[];for(let t=0;tr;)i[n]=i[n-2],n--;i[r]=e,i[r+1]=t}}function gf(i,r,e){let t=fd(i,r);return t>=0?i[t|1]=e:(t=~t,lE(i,t,r,e)),t}function pf(i,r){let e=fd(i,r);if(e>=0)return i[e|1]}function fd(i,r){return Fz(i,r,1)}function Fz(i,r,e){let t=0,n=i.length>>e;for(;n!==t;){let o=t+(n-t>>1),a=i[o<r?n=o:t=o+1}return~(n<{e.push(a)};return uf(r,a=>{let s=a;ef(s,o,[],t)&&(n||=[],n.push(s))}),n!==void 0&&cE(n,o),e}function cE(i,r){for(let e=0;e{r(o,t)})}}function ef(i,r,e,t){if(i=tn(i),!i)return!1;let n=null,o=ab(i),a=!o&&za(i);if(!o&&!a){let l=i.ngModule;if(o=ab(l),o)n=l;else return!1}else{if(a&&!a.standalone)return!1;n=i}let s=t.has(n);if(a){if(s)return!1;if(t.add(n),a.dependencies){let l=typeof a.dependencies==`function`?a.dependencies():a.dependencies;for(let c of l)ef(c,r,e,t)}}else if(o){if(o.imports!=null&&!s){t.add(n);let c;uf(o.imports,d=>{ef(d,r,e,t)&&(c||=[],c.push(d))}),c!==void 0&&cE(c,r)}if(!s){let c=Rs(n)||(()=>new n);r({provide:n,useFactory:c,deps:Bn},n),r({provide:Nb,useValue:n,multi:!0},n),r({provide:_d,useValue:()=>Te(n),multi:!0},n)}let l=o.providers;if(l!=null&&!s){let c=i;Tb(l,d=>{r(d,c)})}}else return!1;return n!==i&&i.providers!==void 0}function Tb(i,r){for(let e of i)yb(e)&&(e=e.ɵproviders),Array.isArray(e)?Tb(e,r):r(e)}var Pz=Kt({provide:String,useValue:Kt});function dE(i){return i!==null&&typeof i==`object`&&Pz in i}function Oz(i){return!!(i&&i.useExisting)}function Vz(i){return!!(i&&i.useFactory)}function zl(i){return typeof i==`function`}function uE(i){return!!i.useClass}var Dg=new le(``);var Xm={};var KT={};var ob;function xd(){return ob===void 0&&(ob=new hd),ob}var Yt=class{};var Pa=class extends Yt{parent;source;scopes;records=new Map;_ngOnDestroyHooks=new Set;_onDestroyHooks=[];get destroyed(){return this._destroyed}_destroyed=!1;injectorDefTypes;constructor(r,e,t,n){super(),this.parent=e,this.source=t,this.scopes=n,ub(r,a=>this.processProvider(a)),this.records.set(Ng,pd(void 0,this)),n.has(`environment`)&&this.records.set(Yt,pd(void 0,this));let o=this.records.get(Dg);o!=null&&typeof o.value==`string`&&this.scopes.add(o.value),this.injectorDefTypes=new Set(this.get(Nb,Bn,{self:!0}))}retrieve(r,e){let t=Ll(e)||0;try{return this.get(r,Vl,t)}catch(n){if(Jc(n))return n;throw n}}destroy(){mg(this),this._destroyed=!0;let r=We(null);try{for(let t of this._ngOnDestroyHooks)t.ngOnDestroy();let e=this._onDestroyHooks;this._onDestroyHooks=[];for(let t of e)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),We(r)}}onDestroy(r){return mg(this),this._onDestroyHooks.push(r),()=>this.removeOnDestroy(r)}runInContext(r){mg(this);let e=Qo(this),t=ir(void 0);try{return r()}finally{Qo(e),ir(t)}}get(r,e=Vl,t){if(mg(this),Object.hasOwn(r,QT))return r[QT](this);let n=Ll(t),a=Qo(this),s=ir(void 0);try{if(!(n&4)){let c=this.records.get(r);if(c===void 0){let d=Gz(r)&&Sg(r);d&&this.injectableDefInScope(d)?c=pd(db(r),Xm):c=null,this.records.set(r,c)}if(c!=null)return this.hydrate(r,c,n)}let l=n&2?xd():this.parent;return e=n&8&&e===Vl?null:e,l.get(r,e)}catch(l){let c=Tz(l);throw c===-200||c===-201?new X(c,null):l}finally{ir(s),Qo(a)}}resolveInjectorInitializers(){let r=We(null),e=Qo(this),t=ir(void 0);try{let o=this.get(_d,Bn,{self:!0});for(let a of o)a()}finally{Qo(e),ir(t),We(r)}}toString(){return`R3Injector[...]`}processProvider(r){r=tn(r);let e=zl(r)?r:tn(r&&r.provide),t=zz(r);if(!zl(r)&&r.multi===!0){let n=this.records.get(e);n||(n=pd(void 0,Xm,!0),n.factory=()=>cb(n.multi),this.records.set(e,n)),e=r,n.multi.push(r)}this.records.set(e,t)}hydrate(r,e,t){let n=We(null);try{if(e.value===KT)throw wb(``);return e.value===Xm&&(e.value=KT,e.value=e.factory(void 0,t)),typeof e.value==`object`&&e.value&&Hz(e.value)&&this._ngOnDestroyHooks.add(e.value),e.value}finally{We(n)}}injectableDefInScope(r){if(!r.providedIn)return!1;let e=tn(r.providedIn);return typeof e==`string`?e===`any`||this.scopes.has(e):this.injectorDefTypes.has(e)}removeOnDestroy(r){let e=this._onDestroyHooks.indexOf(r);e!==-1&&this._onDestroyHooks.splice(e,1)}};function db(i){let r=Sg(i),e=r!==null?r.factory:Rs(i);if(e!==null)return e;if(i instanceof le)throw new X(-204,!1);if(i instanceof Function)return Lz(i);throw new X(-204,!1)}function Lz(i){if(i.length>0)throw new X(-204,!1);let e=Iz(i);return e!==null?()=>e.factory(i):()=>new i}function zz(i){if(dE(i))return pd(void 0,i.useValue);return pd(Eb(i),Xm)}function Eb(i,r,e){let t;if(zl(i)){let n=tn(i);return Rs(n)||db(n)}else if(dE(i))t=()=>tn(i.useValue);else if(Vz(i))t=()=>i.useFactory(...cb(i.deps||[]));else if(Oz(i))t=(n,o)=>Te(tn(i.useExisting),o!==void 0&&o&8?8:void 0);else{let n=tn(i&&(i.useClass||i.provide));if(Bz(i))t=()=>new n(...cb(i.deps));else return Rs(n)||db(n)}return t}function mg(i){if(i.destroyed)throw new X(-205,!1)}function pd(i,r,e=!1){return{factory:i,value:r,multi:e?[]:void 0}}function Bz(i){return!!i.deps}function Hz(i){return i!==null&&typeof i==`object`&&typeof i.ngOnDestroy==`function`}function Gz(i){return typeof i==`function`||typeof i==`object`&&i.ngMetadataName===`InjectionToken`}function ub(i,r){for(let e of i)Array.isArray(e)?ub(e,r):e&&yb(e)?ub(e.ɵproviders,r):r(e)}function qi(i,r){let e;i instanceof Pa?(mg(i),e=i):e=new lb(i);let n=Qo(e),o=ir(void 0);try{return r()}finally{Qo(n),ir(o)}}function kb(){return rE()!==void 0||Im()!=null}var mo=0;var je=1;var nt=2;var nn=3;var qr=4;var Hn=5;var Hl=6;var vd=7;var Pi=8;var Yo=9;var fo=10;var Zt=11;var yd=12;var Mb=13;var Ps=14;var Gn=15;var Os=16;var Gl=17;var Zo=18;var Xo=19;var Rb=20;var Fa=21;var mf=22;var Oa=23;var Tr=24;var Ul=25;var Jo=26;var Xt=27;var gE=1;var Ab=6;var jl=7;var Tg=8;var Wl=9;var Ei=10;function Ha(i){return Array.isArray(i)&&typeof i[gE]==`object`}function Qr(i){return Array.isArray(i)&&i[gE]===!0}function Fb(i){return(i.flags&4)!==0}function ea(i){return i.componentOffset>-1}function bd(i){return(i.flags&1)===1}function _o(i){return!!i.template}function Sd(i){return(i[nt]&512)!==0}function $l(i){return(i[nt]&256)===256}var bi=(function(i){return i[i.NONE=0]=`NONE`,i[i.HTML=1]=`HTML`,i[i.STYLE=2]=`STYLE`,i[i.SCRIPT=3]=`SCRIPT`,i[i.URL=4]=`URL`,i[i.RESOURCE_URL=5]=`RESOURCE_URL`,i[i.ATTRIBUTE_NO_BINDING=6]=`ATTRIBUTE_NO_BINDING`,i})(bi||{});var fg;var md=`svg`;var ff=`math`;var pE=``;var YT=`*`;var gb=()=>Object.create(null);function Uz(){return fg||(fg=gb(),Ms(bi.HTML,void 0,[[`iframe`,[`srcdoc`]],[`*`,[`innerHTML`,`outerHTML`]]]),Ms(bi.STYLE,void 0,[[`*`,[`style`]]]),Ms(bi.URL,void 0,[[`*`,[`formAction`]],[`area`,[`href`]],[`a`,[`href`,`xlink:href`]],[`form`,[`action`]],[`img`,[`src`]],[`video`,[`src`]]]),Ms(bi.URL,ff,[[`*`,[`href`,`xlink:href`]]]),Ms(bi.RESOURCE_URL,void 0,[[`base`,[`href`]],[`embed`,[`src`]],[`frame`,[`src`]],[`iframe`,[`src`]],[`link`,[`href`]],[`object`,[`codebase`,`data`]]]),Ms(bi.URL,md,[[`a`,[`href`,`xlink:href`]]]),Ms(bi.ATTRIBUTE_NO_BINDING,md,[[`animate`,[`attributeName`,`values`,`to`,`from`]],[`set`,[`to`,`attributeName`]],[`animateMotion`,[`attributeName`]],[`animateTransform`,[`attributeName`]]]),Ms(bi.ATTRIBUTE_NO_BINDING,void 0,[[`unknown`,[`attributeName`,`values`,`to`,`from`,`sandbox`,`allow`,`allowFullscreen`,`referrerPolicy`,`csp`,`fetchPriority`,`credentialless`]],[`iframe`,[`sandbox`,`allow`,`allowFullscreen`,`referrerPolicy`,`csp`,`fetchPriority`,`credentialless`]]]),fg)}function Ms(i,r,e){let t=r??pE;for(let[n,o]of e){let a=n.toLowerCase();for(let s of o){let l=s.toLowerCase(),c=fg[l]??=gb(),d=c[t]??=gb();d[a]=i}}}function hE(i,r,e){let n=Uz()[r.toLowerCase()];if(!n)return bi.NONE;let o=i.toLowerCase(),a;if(e){let s=n[e];s&&(a=s[o]??s[YT])}if(a===void 0){let s=n[pE];s&&(a=s[o]??s[YT])}return a??bi.NONE}function En(i){for(;Array.isArray(i);)i=i[mo];return i}function Pb(i,r){return En(r[i])}function pr(i,r){return En(r[i.index])}function _f(i,r){return i.data[r]}function Vs(i,r){return i[r]}function Eg(i,r,e,t){e>=i.data.length&&(i.data[e]=null,i.blueprint[e]=null),r[e]=t}function Kr(i,r){let e=r[i];return Ha(e)?e:e[mo]}function mE(i){return(i[nt]&4)===4}function xf(i){return(i[nt]&128)===128}function fE(i){return Qr(i[nn])}function Yr(i,r){return r==null?null:i[r]}function Ob(i){i[Gl]=0}function Vb(i){i[nt]&1024||(i[nt]|=1024,xf(i)&&ql(i))}function _E(i,r){for(;i>0;)r=r[Ps],i--;return r}function kg(i){return!!(i[nt]&9216||i[Tr]?.dirty)}function vf(i){i[fo].changeDetectionScheduler?.notify(8),i[nt]&64&&(i[nt]|=1024),kg(i)&&ql(i)}function ql(i){i[fo].changeDetectionScheduler?.notify(0);let r=Va(i);for(;r!==null&&!(r[nt]&8192||(r[nt]|=8192,!xf(r)));)r=Va(r)}function yf(i,r){if($l(i))throw new X(911,!1);i[Fa]===null&&(i[Fa]=[]),i[Fa].push(r)}function xE(i,r){if(i[Fa]===null)return;let e=i[Fa].indexOf(r);e!==-1&&i[Fa].splice(e,1)}function Va(i){let r=i[nn];return Qr(r)?r[nn]:r}function Lb(i){return i[vd]??=[]}function zb(i){return i.cleanup??=[]}function vE(i,r,e,t){let n=Lb(r);n.push(e),i.firstCreatePass&&zb(i).push(t,n.length-1)}var vt={lFrame:kE(null),bindingsEnabled:!0,skipHydrationRootTNode:null};var pb=!1;function yE(){return vt.lFrame.elementDepthCount}function bE(){vt.lFrame.elementDepthCount++}function Bb(){vt.lFrame.elementDepthCount--}function bf(){return vt.bindingsEnabled}function Hb(){return vt.skipHydrationRootTNode!==null}function Gb(i){return vt.skipHydrationRootTNode===i}function Ub(){vt.skipHydrationRootTNode=null}function Ie(){return vt.lFrame.lView}function Jt(){return vt.lFrame.tView}function I(i){return vt.lFrame.contextLView=i,i[Pi]}function N(i){return vt.lFrame.contextLView=null,i}function an(){let i=jb();for(;i!==null&&i.type===64;)i=i.parent;return i}function jb(){return vt.lFrame.currentTNode}function SE(){let i=vt.lFrame,r=i.currentTNode;return i.isParent?r:r.parent}function Ql(i,r){let e=vt.lFrame;e.currentTNode=i,e.isParent=r}function Wb(){return vt.lFrame.isParent}function $b(){vt.lFrame.isParent=!1}function qb(){return vt.lFrame.contextLView}function Qb(){return pb}function xg(i){let r=pb;return pb=i,r}function Un(){let i=vt.lFrame,r=i.bindingRootIndex;return r===-1&&(r=i.bindingRootIndex=i.tView.bindingStartIndex),r}function wE(){return vt.lFrame.bindingIndex}function CE(i){return vt.lFrame.bindingIndex=i}function ta(){return vt.lFrame.bindingIndex++}function Sf(i){let r=vt.lFrame,e=r.bindingIndex;return r.bindingIndex=r.bindingIndex+i,e}function IE(){return vt.lFrame.inI18n}function NE(i,r){let e=vt.lFrame;e.bindingIndex=e.bindingRootIndex=i,wf(r)}function DE(){return vt.lFrame.currentDirectiveIndex}function wf(i){vt.lFrame.currentDirectiveIndex=i}function TE(i){let r=vt.lFrame.currentDirectiveIndex;return r===-1?null:i[r]}function Cf(){return vt.lFrame.currentQueryIndex}function Mg(i){vt.lFrame.currentQueryIndex=i}function jz(i){let r=i[je];return r.type===2?r.declTNode:r.type===1?i[Hn]:null}function Kb(i,r,e){if(e&4){let n=r,o=i;for(;n=n.parent,n===null&&!(e&1);)if(n=jz(o),n===null||(o=o[Ps],n.type&10))break;if(n===null)return!1;r=n,i=o}let t=vt.lFrame=EE();return t.currentTNode=r,t.lView=i,!0}function If(i){let r=EE(),e=i[je];vt.lFrame=r,r.currentTNode=e.firstChild,r.lView=i,r.tView=e,r.contextLView=i,r.bindingIndex=e.bindingStartIndex,r.inI18n=!1}function EE(){let i=vt.lFrame,r=i===null?null:i.child;return r===null?kE(i):r}function kE(i){let r={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:i,child:null,inI18n:!1};return i!==null&&(i.child=r),r}function ME(){let i=vt.lFrame;return vt.lFrame=i.parent,i.currentTNode=null,i.lView=null,i}var Yb=ME;function Nf(){let i=ME();i.isParent=!0,i.tView=null,i.selectedIndex=-1,i.contextLView=null,i.elementDepthCount=0,i.currentDirectiveIndex=-1,i.currentNamespace=null,i.bindingRootIndex=-1,i.bindingIndex=-1,i.currentQueryIndex=0}function RE(i){return(vt.lFrame.contextLView=_E(i,vt.lFrame.contextLView))[Pi]}function Zr$1(){return vt.lFrame.selectedIndex}function Ls(i){vt.lFrame.selectedIndex=i}function zs(){let i=vt.lFrame;return _f(i.tView,i.selectedIndex)}function xo(){vt.lFrame.currentNamespace=md}function Df(){Wz()}function Wz(){vt.lFrame.currentNamespace=null}function Zb(){return vt.lFrame.currentNamespace}var AE=!0;function Tf(){return AE}function Rg(i){AE=i}function hb(i,r=null,e=null,t){let n=Xb(i,r,e,t);return n.resolveInjectorInitializers(),n}function Xb(i,r=null,e=null,t,n=new Set){return new Pa([e||Bn,hf(i)],r||xd(),null,n)}var qt=class i{static THROW_IF_NOT_FOUND=Vl;static NULL=new hd;static create(r,e){if(Array.isArray(r))return hb({name:``},e,r,``);{let t=r.name??``;return hb({name:t},r.parent,r.providers,t)}}static ɵprov=de({token:i,providedIn:`any`,factory:()=>Te(Ng)});static __NG_ELEMENT_ID__=-1};var $e=new le(``);var Mt=class{static __NG_ELEMENT_ID__=$z;static __NG_ENV_ID__=r=>r};var tf=class extends Mt{_lView;constructor(r){super(),this._lView=r}get destroyed(){return $l(this._lView)}onDestroy(r){let e=this._lView;return yf(e,r),()=>xE(e,r)}};function $z(){return new tf(Ie())}var FE=!1;var PE=new le(``);var ia=(()=>{class i{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Gi(!1);debugTaskTracker=_(PE,{optional:!0});get hasPendingTasks(){return this.destroyed?!1:this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new qe(e=>{e.next(!1),e.complete()}):this.pendingTask}add(){!this.hasPendingTasks&&!this.destroyed&&this.pendingTask.next(!0);let e=this.taskId++;return this.pendingTasks.add(e),this.debugTaskTracker?.add(e),e}has(e){return this.pendingTasks.has(e)}remove(e){this.pendingTasks.delete(e),this.debugTaskTracker?.remove(e),this.pendingTasks.size===0&&this.hasPendingTasks&&this.pendingTask.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks&&this.pendingTask.next(!1),this.destroyed=!0,this.pendingTask.unsubscribe()}static ɵprov=de({token:i,providedIn:`root`,factory:()=>new i})}return i})();var mb=class extends ce{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(r=!1){super(),this.__isAsync=r,kb()&&(this.destroyRef=_(Mt,{optional:!0})??void 0,this.pendingTasks=_(ia,{optional:!0})??void 0)}emit(r){let e=We(null);try{super.next(r)}finally{We(e)}}subscribe(r,e,t){let n=r,o=e||(()=>null),a=t;if(r&&typeof r==`object`){let l=r;n=l.next?.bind(l),o=l.error?.bind(l),a=l.complete?.bind(l)}this.__isAsync&&(o=this.wrapInTimeout(o),n&&(n=this.wrapInTimeout(n)),a&&(a=this.wrapInTimeout(a)));let s=super.subscribe({next:n,error:o,complete:a});return r instanceof yi&&r.add(s),s}wrapInTimeout(r){return e=>{let t=this.pendingTasks?.add();setTimeout(()=>{try{r(e)}finally{t!==void 0&&this.pendingTasks?.remove(t)}})}}};var k=mb;function nf(...i){}function Jb(i){let r,e;function t(){i=nf;try{e!==void 0&&typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(e),r!==void 0&&clearTimeout(r)}catch{}}return r=setTimeout(()=>{i(),t()}),typeof requestAnimationFrame==`function`&&(e=requestAnimationFrame(()=>{i(),t()})),()=>t()}function OE(i){return queueMicrotask(()=>i()),()=>{i=nf}}var e1=`isAngularZone`;var vg=e1+`_ID`;var qz=0;var Qe=class i{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new k(!1);onMicrotaskEmpty=new k(!1);onStable=new k(!1);onError=new k(!1);constructor(r){let{enableLongStackTrace:e=!1,shouldCoalesceEventChangeDetection:t=!1,shouldCoalesceRunChangeDetection:n=!1,scheduleInRootZone:o=FE}=r;if(typeof Zone>`u`)throw new X(908,!1);Zone.assertZonePatched();let a=this;a._nesting=0,a._outer=a._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(a._inner=a._inner.fork(new Zone.TaskTrackingZoneSpec)),e&&Zone.longStackTraceZoneSpec&&(a._inner=a._inner.fork(Zone.longStackTraceZoneSpec)),a.shouldCoalesceEventChangeDetection=!n&&t,a.shouldCoalesceRunChangeDetection=n,a.callbackScheduled=!1,a.scheduleInRootZone=o,Yz(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(e1)===!0}static assertInAngularZone(){if(!i.isInAngularZone())throw new X(909,!1)}static assertNotInAngularZone(){if(i.isInAngularZone())throw new X(909,!1)}run(r,e,t){return this._inner.run(r,e,t)}runTask(r,e,t,n){let o=this._inner,a=o.scheduleEventTask(`NgZoneEvent: `+n,r,Qz,nf,nf);try{return o.runTask(a,e,t)}finally{o.cancelTask(a)}}runGuarded(r,e,t){return this._inner.runGuarded(r,e,t)}runOutsideAngular(r){return this._outer.run(r)}};var Qz={};function t1(i){if(i._nesting==0&&!i.hasPendingMicrotasks&&!i.isStable)try{i._nesting++,i.onMicrotaskEmpty.emit(null)}finally{if(i._nesting--,!i.hasPendingMicrotasks)try{i.runOutsideAngular(()=>i.onStable.emit(null))}finally{i.isStable=!0}}}function Kz(i){if(i.isCheckStableRunning||i.callbackScheduled)return;i.callbackScheduled=!0;function r(){Jb(()=>{i.callbackScheduled=!1,fb(i),i.isCheckStableRunning=!0,t1(i),i.isCheckStableRunning=!1})}i.scheduleInRootZone?Zone.root.run(()=>{r()}):i._outer.run(()=>{r()}),fb(i)}function Yz(i){let r=()=>{Kz(i)},e=qz++;i._inner=i._inner.fork({name:`angular`,properties:{[e1]:!0,[vg]:e,[vg+e]:!0},onInvokeTask:(t,n,o,a,s,l)=>{if(Zz(l))return t.invokeTask(o,a,s,l);try{return ZT(i),t.invokeTask(o,a,s,l)}finally{(i.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||i.shouldCoalesceRunChangeDetection)&&r(),XT(i)}},onInvoke:(t,n,o,a,s,l,c)=>{try{return ZT(i),t.invoke(o,a,s,l,c)}finally{i.shouldCoalesceRunChangeDetection&&!i.callbackScheduled&&!Xz(l)&&r(),XT(i)}},onHasTask:(t,n,o,a)=>{t.hasTask(o,a),n===o&&(a.change==`microTask`?(i._hasPendingMicrotasks=a.microTask,fb(i),t1(i)):a.change==`macroTask`&&(i.hasPendingMacrotasks=a.macroTask))},onHandleError:(t,n,o,a)=>(t.handleError(o,a),i.runOutsideAngular(()=>i.onError.emit(a)),!1)})}function fb(i){i._hasPendingMicrotasks||(i.shouldCoalesceEventChangeDetection||i.shouldCoalesceRunChangeDetection)&&i.callbackScheduled===!0?i.hasPendingMicrotasks=!0:i.hasPendingMicrotasks=!1}function ZT(i){i._nesting++,i.isStable&&(i.isStable=!1,i.onUnstable.emit(null))}function XT(i){i._nesting--,t1(i)}var yg=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new k;onMicrotaskEmpty=new k;onStable=new k;onError=new k;run(r,e,t){return r.apply(e,t)}runGuarded(r,e,t){return r.apply(e,t)}runOutsideAngular(r){return r()}runTask(r,e,t,n){return r.apply(e,t)}};function Zz(i){return VE(i,`__ignore_ng_zone__`)}function Xz(i){return VE(i,`__scheduler_tick__`)}function VE(i,r){return!Array.isArray(i)||i.length!==1?!1:i[0]?.data?.[r]===!0}var $r=class{_console=console;handleError(r){this._console.error(`ERROR`,r)}};var Xr=new le(``,{factory:()=>{let i=_(Qe),r=_(Yt),e;return t=>{i.runOutsideAngular(()=>{r.destroyed&&!e?setTimeout(()=>{throw t}):(e??=r.get($r),e.handleError(t))})}}});var LE={provide:_d,useValue:()=>{_($r,{optional:!0})},multi:!0};function gi(i,r){let[e,t,n]=Oy(i,r?.equal),o=e;o[$i];return o.set=t,o.update=n,o.asReadonly=Ef.bind(o),o}function Ef(){let i=this[$i];if(i.readonlyFn===void 0){let r=()=>this();r[$i]=i,i.readonlyFn=r}return i.readonlyFn}var Ag=new le(``,{factory:()=>Jz});var Jz=`ng`;var kf=new le(``);var Ga=new le(``,{providedIn:`platform`,factory:()=>`unknown`});var wd=new le(``);var Fg=new le(``,{factory:()=>_($e).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null});var Pg=(()=>{class i{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=e9}return i})();function e9(){return new Pg(Ie(),an())}var La=class{};var Og=new le(``,{factory:()=>!0});var i1=new le(``);var Mf=(()=>{class i{static ɵprov=de({token:i,providedIn:`root`,factory:()=>new _b})}return i})();var _b=class{dirtyEffectCount=0;queues=new Map;add(r){this.enqueue(r),this.schedule(r)}schedule(r){r.dirty&&this.dirtyEffectCount++}remove(r){let e=r.zone,t=this.queues.get(e);t.has(r)&&(t.delete(r),r.dirty&&this.dirtyEffectCount--)}enqueue(r){let e=r.zone;this.queues.has(e)||this.queues.set(e,new Set);let t=this.queues.get(e);t.has(r)||t.add(r)}flush(){for(;this.dirtyEffectCount>0;){let r=!1;for(let[e,t]of this.queues)e===null?r||=this.flushQueue(t):r||=e.run(()=>this.flushQueue(t));r||(this.dirtyEffectCount=0)}}flushQueue(r){let e=!1;for(let t of r)t.dirty&&(this.dirtyEffectCount--,e=!0,t.run());return e}};var rf=class{[$i];constructor(r){this[$i]=r}destroy(){this[$i].destroy()}};function Bs(i,r){let e=r?.injector??_(qt),t=r?.manualCleanup!==!0?e.get(Mt):null,n,o=e.get(Pg,null,{optional:!0}),a=e.get(La);return o!==null?(n=n9(o.view,a,i),t instanceof tf&&t._lView===o.view&&(t=null)):n=r9(i,e.get(Mf),a),n.injector=e,t!==null&&(n.onDestroyFns=[t.onDestroy(()=>n.destroy())]),new rf(n)}var zE=s(r({},Vy),{cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let i=xg(!1);try{Ly(this)}finally{xg(i)}},cleanup(){if(!this.cleanupFns?.length)return;let i=We(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],We(i)}}});var t9=s(r({},zE),{consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(El(this),this.onDestroyFns!==null)for(let i of this.onDestroyFns)i();this.cleanup(),this.scheduler.remove(this)}});var i9=s(r({},zE),{consumerMarkedDirty(){this.view[nt]|=8192,ql(this.view),this.notifier.notify(13)},destroy(){if(El(this),this.onDestroyFns!==null)for(let i of this.onDestroyFns)i();this.cleanup(),this.view[Oa]?.delete(this)}});function n9(i,r,e){let t=Object.create(i9);return t.view=i,t.zone=typeof Zone<`u`?Zone.current:null,t.notifier=r,t.fn=BE(t,e),i[Oa]??=new Set,i[Oa].add(t),t.consumerMarkedDirty(t),t}function r9(i,r,e){let t=Object.create(t9);return t.fn=BE(t,i),t.scheduler=r,t.notifier=e,t.zone=typeof Zone<`u`?Zone.current:null,t.scheduler.add(t),t.notifier.notify(12),t}function BE(i,r){return()=>{r(e=>(i.cleanupFns??=[]).push(e))}}function Vg(i){return typeof i==`function`&&i[$i]!==void 0}function Rf(i){return Vg(i)&&typeof i.set==`function`}var Kl=(()=>{class i{internalPendingTasks=_(ia);scheduler=_(La);errorHandler=_(Xr);add(){let e=this.internalPendingTasks.add();return()=>{this.internalPendingTasks.has(e)&&(this.scheduler.notify(11),this.internalPendingTasks.remove(e))}}run(e){let t=this.add();try{e().catch(this.errorHandler).finally(t)}catch(n){this.errorHandler(n),t()}}static ɵprov=de({token:i,providedIn:`root`,factory:()=>new i})}return i})();function Qg(i){return{toString:i}.toString()}var Gt=(function(i){return i[i.TemplateCreateStart=0]=`TemplateCreateStart`,i[i.TemplateCreateEnd=1]=`TemplateCreateEnd`,i[i.TemplateUpdateStart=2]=`TemplateUpdateStart`,i[i.TemplateUpdateEnd=3]=`TemplateUpdateEnd`,i[i.LifecycleHookStart=4]=`LifecycleHookStart`,i[i.LifecycleHookEnd=5]=`LifecycleHookEnd`,i[i.OutputStart=6]=`OutputStart`,i[i.OutputEnd=7]=`OutputEnd`,i[i.BootstrapApplicationStart=8]=`BootstrapApplicationStart`,i[i.BootstrapApplicationEnd=9]=`BootstrapApplicationEnd`,i[i.BootstrapComponentStart=10]=`BootstrapComponentStart`,i[i.BootstrapComponentEnd=11]=`BootstrapComponentEnd`,i[i.ChangeDetectionStart=12]=`ChangeDetectionStart`,i[i.ChangeDetectionEnd=13]=`ChangeDetectionEnd`,i[i.ChangeDetectionSyncStart=14]=`ChangeDetectionSyncStart`,i[i.ChangeDetectionSyncEnd=15]=`ChangeDetectionSyncEnd`,i[i.AfterRenderHooksStart=16]=`AfterRenderHooksStart`,i[i.AfterRenderHooksEnd=17]=`AfterRenderHooksEnd`,i[i.ComponentStart=18]=`ComponentStart`,i[i.ComponentEnd=19]=`ComponentEnd`,i[i.DeferBlockStateStart=20]=`DeferBlockStateStart`,i[i.DeferBlockStateEnd=21]=`DeferBlockStateEnd`,i[i.DynamicComponentStart=22]=`DynamicComponentStart`,i[i.DynamicComponentEnd=23]=`DynamicComponentEnd`,i[i.HostBindingsUpdateStart=24]=`HostBindingsUpdateStart`,i[i.HostBindingsUpdateEnd=25]=`HostBindingsUpdateEnd`,i})(Gt||{});var Nd=class{previousValue;currentValue;firstChange;constructor(r,e,t){this.previousValue=r,this.currentValue=e,this.firstChange=t}isFirstChange(){return this.firstChange}};function Tk(i,r,e,t){r!==null?r.applyValueToInputSignal(r,t):i[e]=t}var Ek=null;var Si=(()=>{Ek=HE;let i=()=>HE;return i.ngInherit=!0,i})();function p9(){return Ek}function HE(i){return i.type.prototype.ngOnChanges&&(i.setInput=m9),h9}function h9(){let i=kk(this),r=i?.current;if(r){let e=i.previous;if(e===Fs)i.previous=r;else for(let t in r)e[t]=r[t];i.current=null,this.ngOnChanges(r)}}function m9(i,r,e,t,n){let o=this.declaredInputs[t],a=kk(i)||f9(i,{previous:Fs,current:null}),s=a.current||(a.current={}),l=a.previous,c=l[o];s[o]=new Nd(c&&c.currentValue,e,l===Fs),Tk(i,r,n,e)}var h1=`__ngSimpleChanges__`;function kk(i){return Object.hasOwn(i,h1)&&i[h1]||null}function f9(i,r){return i[h1]=r}var GE=[];var ei=function(i,r=null,e){for(let t=0;t=t)break}else r[l]<0&&(i[Gl]+=65536),(s>14>16&&(i[nt]&3)===r&&(i[nt]+=16384,UE(s,o)):UE(s,o)}var Id=-1;var Xl=class{factory;name;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(r,e,t,n){this.factory=r,this.name=n,this.canSeeViewProviders=e,this.injectImpl=t}};function v9(i){return(i.flags&8)!==0}function y9(i){return(i.flags&16)!==0}function b9(i,r,e){let t=0;for(;tr){a=o-1;break}}}for(;o>16}function Gf(i,r){let e=C9(i),t=r;for(;e>0;)t=t[Ps],e--;return t}var m1=!0;function Uf(i){let r=m1;return m1=i,r}var Fk=255;var Pk=5;var N9=0;var na={};function D9(i,r,e){let t;typeof e==`string`?t=e.charCodeAt(0)||0:Object.hasOwn(e,Bl)&&(t=e[Bl]),t??=e[Bl]=N9++;let n=t&Fk,o=1<>Pk)]|=o}function jf(i,r){let e=Ok(i,r);if(e!==-1)return e;let t=r[je];t.firstCreatePass&&(i.injectorIndex=r.length,r1(t.data,i),r1(r,null),r1(t.blueprint,null));let n=Z1(i,r),o=i.injectorIndex;if(Ak(n)){let a=Hf(n),s=Gf(n,r),l=s[je].data;for(let c=0;c<8;c++)r[o+c]=s[a+c]|l[a+c]}return r[o+8]=n,o}function r1(i,r){i.push(0,0,0,0,0,0,0,0,r)}function Ok(i,r){return i.injectorIndex===-1||i.parent&&i.parent.injectorIndex===i.injectorIndex||r[i.injectorIndex+8]===null?-1:i.injectorIndex}function Z1(i,r){if(i.parent&&i.parent.injectorIndex!==-1)return i.parent.injectorIndex;let e=0,t=null,n=r;for(;n!==null;){if(t=Hk(n),t===null)return Id;if(e++,n=n[Ps],t.injectorIndex!==-1)return t.injectorIndex|e<<16}return Id}function f1(i,r,e){D9(i,r,e)}function Vk(i,r,e){if(e&8||i!==void 0)return i;df(r,`NodeInjector`)}function Lk(i,r,e,t){if(e&8&&t===void 0&&(t=null),(e&3)===0){let n=i[Yo],o=ir(void 0);try{return n?n.get(r,t,e&8):Cb(r,t,e&8)}finally{ir(o)}}return Vk(t,r,e)}function zk(i,r,e,t=0,n){if(i!==null){if(r[nt]&2048&&!(t&2)){let a=M9(i,r,e,t,na);if(a!==na)return a}let o=Bk(i,r,e,t,na);if(o!==na)return o}return Lk(r,e,t,n)}function Bk(i,r,e,t,n){let o=E9(e);if(typeof o==`function`){if(!Kb(r,i,t))return t&1?Vk(n,e,t):Lk(r,e,t,n);try{let a;if(a=o(t),a==null&&!(t&8))df(e);else return a}finally{Yb()}}else if(typeof o==`number`){let a=null,s=Ok(i,r),l=Id,c=t&1?r[Gn][Hn]:null;for((s===-1||t&4)&&(l=s===-1?Z1(i,r):r[s+8],l===Id||!$E(t,!1)?s=-1:(a=r[je],s=Hf(l),r=Gf(l,r)));s!==-1;){let d=r[je];if(WE(o,s,d.data)){let p=T9(s,r,e,a,t,c);if(p!==na)return p}l=r[s+8],l!==Id&&$E(t,r[je].data[s+8]===c)&&WE(o,s,r)?(a=d,s=Hf(l),r=Gf(l,r)):s=-1}}return n}function T9(i,r,e,t,n,o){let a=r[je],s=a.data[i+8],d=zf(s,a,e,t==null?ea(s)&&m1:t!=a&&(s.type&3)!==0,n&1&&o===s);return d!==null?Gg(r,a,d,s,n):na}function zf(i,r,e,t,n){let o=i.providerIndexes,a=r.data,s=o&1048575,l=i.directiveStart,c=i.directiveEnd,d=o>>20,p=t?s:s+d,f=n?s+d:c;for(let v=p;v=l&&y.type===e)return v}if(n){let v=a[l];if(v&&_o(v)&&v.type===e)return l}return null}function Gg(i,r,e,t,n){let o=i[e],a=r.data;if(o instanceof Xl){let s=o;if(s.resolving)throw wb(``);let l=Uf(s.canSeeViewProviders);s.resolving=!0;a[e].type||a[e];let p=s.injectImpl?ir(s.injectImpl):null;Kb(i,t,0);try{o=i[e]=s.factory(void 0,n,a,i,t),r.firstCreatePass&&e>=t.directiveStart&&_9(e,a[e],r)}finally{p!==null&&ir(p),Uf(l),s.resolving=!1,Yb()}}return o}function E9(i){if(typeof i==`string`)return i.charCodeAt(0)||0;let r=Object.hasOwn(i,Bl)?i[Bl]:void 0;return typeof r==`number`?r>=0?r&Fk:k9:r}function WE(i,r,e){let t=1<>Pk)]&t)}function $E(i,r){return!(i&2)&&!(i&1&&r)}var Hs=class{_tNode;_lView;constructor(r,e){this._tNode=r,this._lView=e}get(r,e,t){return zk(this._tNode,this._lView,r,Ll(t),e)}};function k9(){return new Hs(an(),Ie())}function be(i){return Qg(()=>{let r=i.prototype.constructor,e=r[_g]||_1(r),t=Object.prototype,n=Object.getPrototypeOf(i.prototype).constructor;for(;n&&n!==t;){let o=n[_g]||_1(n);if(o&&o!==e)return o;n=Object.getPrototypeOf(n)}return o=>new o})}function _1(i){return xb(i)?()=>{let r=_1(tn(i));return r&&r()}:Rs(i)}function M9(i,r,e,t,n){let o=i,a=r;for(;o!==null&&a!==null&&a[nt]&2048&&!Sd(a);){let s=Bk(o,a,e,t|2,na);if(s!==na)return s;let l=o.parent;if(!l){let c=a[Rb];if(c){let d=c.get(e,na,t&-5);if(d!==na)return d}l=Hk(a),a=a[Ps]}o=l}return n}function Hk(i){let r=i[je],e=r.type;return e===2?r.declTNode:e===1?i[Hn]:null}function ai(i){return{token:i.token,providedIn:i.autoProvided===!1?null:`root`,factory:i.factory,value:void 0}}function R9(){return Ad(an(),Ie())}function Ad(i,r){return new ne(pr(i,r))}var ne=(()=>{class i{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=R9}return i})();function Gk(i){return i instanceof ne?i.nativeElement:i}function A9(){return this._results[Symbol.iterator]()}var sn=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new ce}constructor(r=!1){this._emitDistinctChangesOnly=r}get(r){return this._results[r]}map(r){return this._results.map(r)}filter(r){return this._results.filter(r)}find(r){return this._results.find(r)}reduce(r,e){return this._results.reduce(r,e)}forEach(r){this._results.forEach(r)}some(r){return this._results.some(r)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(r,e){this.dirty=!1;let t=aE(r);(this._changesDetected=!oE(this._results,t,e))&&(this._results=t,this.length=t.length,this.last=t[this.length-1],this.first=t[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(r){this._onDirty=r}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=A9};function Uk(i){return(i.flags&128)===128}var X1=(function(i){return i[i.OnPush=0]=`OnPush`,i[i.Eager=1]=`Eager`,i[i.Default=1]=`Default`,i})(X1||{});var jk=new Map;var F9=0;function P9(){return F9++}function O9(i){jk.set(i[Xo],i)}function x1(i){jk.delete(i[Xo])}var qE=`__ngContext__`;function Td(i,r){Ha(r)?(i[qE]=r[Xo],O9(r)):i[qE]=r}function Wk(i){return qk(i[yd])}function $k(i){return qk(i[qr])}function qk(i){for(;i!==null&&!Qr(i);)i=i[qr];return i}var v1;function J1(i){v1=i}function eS(){if(v1!==void 0)return v1;if(typeof document<`u`)return document;throw new X(210,!1)}var Qk=`r`;var Kk=`di`;var tS=new le(``);var Yk=!1;var Zk=new le(``,{factory:()=>Yk});var r_=new le(``);var QE=new WeakMap;function V9(i,r){if(i==null||typeof i!=`object`)return;let e=QE.get(i);e||(e=new WeakSet,QE.set(i,e)),e.add(r)}function o_(i){return(i.flags&32)===32}var B9=()=>null;function Xk(i,r,e=!1){return B9(i,r,e)}function Jk(i,r){let e=i.contentQueries;if(e!==null){let t=We(null);try{for(let n=0;ni,createScript:i=>i,createScriptURL:i=>i})}catch{}return Af}function a_(i){return G9()?.createHTML(i)||i}var Ff;function U9(){if(Ff===void 0&&(Ff=null,on.trustedTypes))try{Ff=on.trustedTypes.createPolicy(`angular#unsafe-bypass`,{createHTML:i=>i,createScript:i=>i,createScriptURL:i=>i})}catch{}return Ff}function KE(i){return U9()?.createHTML(i)||i}var Ua=class{changingThisBreaksApplicationSecurity;constructor(r){this.changingThisBreaksApplicationSecurity=r}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${of})`}};var b1=class extends Ua{getTypeName(){return`HTML`}};var S1=class extends Ua{getTypeName(){return`Style`}};var w1=class extends Ua{getTypeName(){return`Script`}};var C1=class extends Ua{getTypeName(){return`URL`}};var I1=class extends Ua{getTypeName(){return`ResourceURL`}};function kr(i){return i instanceof Ua?i.changingThisBreaksApplicationSecurity:i}function ja(i,r){let e=eM(i);if(e!=null&&e!==r){if(e===`ResourceURL`&&r===`URL`)return!0;throw new Error(`Required a safe ${r}, got a ${e} (see ${of})`)}return e===r}function eM(i){return i instanceof Ua&&i.getTypeName()||null}function nS(i){return new b1(i)}function rS(i){return new S1(i)}function oS(i){return new w1(i)}function aS(i){return new C1(i)}function sS(i){return new I1(i)}function j9(i){let r=new D1(i);return W9()?new N1(r):r}var N1=class{inertDocumentHelper;constructor(r){this.inertDocumentHelper=r}getInertBodyElement(r){r=``+r;try{let e=new window.DOMParser().parseFromString(a_(r),`text/html`).body;return e===null?this.inertDocumentHelper.getInertBodyElement(r):(e.firstChild?.remove(),e)}catch{return null}}};var D1=class{defaultDoc;inertDocument;constructor(r){this.defaultDoc=r,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument(`sanitization-inert`)}getInertBodyElement(r){let e=this.inertDocument.createElement(`template`);return e.innerHTML=a_(r),e}};function W9(){try{return!!new window.DOMParser().parseFromString(a_(``),`text/html`)}catch{return!1}}var $9=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function Kg(i){return i=String(i),i.match($9)?i:`unsafe:`+i}function Wa(i){let r={};for(let e of i.split(`,`))r[e]=!0;return r}function Yg(...i){let r={};for(let e of i)for(let t in e)Object.hasOwn(e,t)&&(r[t]=!0);return r}var tM=Wa(`area,br,col,hr,img,wbr`);var iM=Wa(`colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr`);var nM=Wa(`rp,rt`);var q9=Yg(nM,iM);var YE=Yg(tM,Yg(iM,Wa(`address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul`)),Yg(nM,Wa(`a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video`)),q9);var rM=Wa(`background,cite,href,itemtype,longdesc,poster,src,xlink:href`);var X9=Yg(rM,Wa(`abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width`),Wa(`aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext`));var J9=Wa(`script,style,template`);var T1=class{sanitizedSomething=!1;buf=[];sanitizeChildren(r){let e=r.firstChild,t=!0,n=[];for(;e;){if(e.nodeType===Node.ELEMENT_NODE?t=this.startElement(e):e.nodeType===Node.TEXT_NODE?this.chars(e.nodeValue):this.sanitizedSomething=!0,t&&e.firstChild){n.push(e),e=iB(e);continue}for(;e;){e.nodeType===Node.ELEMENT_NODE&&this.endElement(e);let o=tB(e);if(o){e=o;break}e=n.pop()}}return this.buf.join(``)}startElement(r){let e=ZE(r).toLowerCase();if(!Object.hasOwn(YE,e))return this.sanitizedSomething=!0,!Object.hasOwn(J9,e);this.buf.push(`<`),this.buf.push(e);let t=r.attributes;for(let n=0;n`),!0}endElement(r){let e=ZE(r).toLowerCase();Object.hasOwn(YE,e)&&!Object.hasOwn(tM,e)&&(this.buf.push(``))}chars(r){this.buf.push(XE(r))}};function eB(i,r){return(i.compareDocumentPosition(r)&Node.DOCUMENT_POSITION_CONTAINED_BY)!==Node.DOCUMENT_POSITION_CONTAINED_BY}function tB(i){let r=i.nextSibling;if(r&&i!==r.previousSibling)throw oM(r);return r}function iB(i){let r=i.firstChild;if(r&&eB(i,r))throw oM(r);return r}function ZE(i){let r=i.nodeName;return typeof r==`string`?r:`FORM`}function oM(i){return new Error(`Failed to sanitize html because the element is clobbered: ${i.outerHTML}`)}var nB=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;var rB=/([^\#-~ |!])/g;function XE(i){return i.replace(/&/g,`&`).replace(nB,function(r){let e=r.charCodeAt(0),t=r.charCodeAt(1);return`&#`+((e-55296)*1024+(t-56320)+65536)+`;`}).replace(rB,function(r){return`&#`+r.charCodeAt(0)+`;`}).replace(//g,`>`)}var Pf;function s_(i,r){let e=null;try{Pf=Pf||j9(i);let t=r?String(r):``;e=Pf.getInertBodyElement(t);let n=5,o=t;do{if(n===0)throw new Error(`Failed to sanitize html because the input is unstable`);n--,t=o,o=e.innerHTML,e=Pf.getInertBodyElement(t)}while(t!==o);return a_(new T1().sanitizeChildren(JE(e)||e))}finally{if(e){let t=JE(e)||e;for(;t.firstChild;)t.firstChild.remove()}}}function JE(i){return`content`in i&&oB(i)?i.content:null}function oB(i){return i.nodeType===Node.ELEMENT_NODE&&i.nodeName===`TEMPLATE`}var aB=/^>|^->||--!>|)/g;var lB=`​$1​`;function cB(i){return i.replace(aB,r=>r.replace(sB,lB))}function dB(i,r){return i.createText(r)}function uB(i,r,e){i.setValue(r,e)}function gB(i,r){return i.createComment(cB(r))}function aM(i,r,e){return i.createElement(r,e)}function Yl(i,r,e,t,n){i.insertBefore(r,e,t,n)}function sM(i,r,e){i.appendChild(r,e)}function ek(i,r,e,t,n){t!==null?Yl(i,r,e,t,n):sM(i,r,e)}function lM(i,r,e,t){i.removeChild(null,r,e,t)}function pB(i,r,e){i.setAttribute(r,`style`,e)}function hB(i,r,e){e===``?i.removeAttribute(r,`class`):i.setAttribute(r,`class`,e)}function cM(i,r,e){let{mergedAttrs:t,classes:n,styles:o}=e;t!==null&&b9(i,r,t),n!==null&&hB(i,r,n),o!==null&&pB(i,r,o)}function mB(i,r=!0){if(i[0]!=`:`)return[null,i];let e=i.indexOf(`:`,1);if(e===-1){if(r)throw new Error(`Unsupported format "${i}" expecting ":namespace:name"`);return[null,i]}return[i.slice(1,e),i.slice(e+1)]}function lS(i,r,e){if(r!==void 0&&e!==void 0&&fB(r,e)!==bi.HTML)return i;let t=dM();return t?KE(t.sanitize(bi.HTML,i)||``):ja(i,`HTML`)?KE(kr(i)):s_(eS(),As(i))}function Zg(i){let r=dM();return r?r.sanitize(bi.URL,i)||``:ja(i,`URL`)?kr(i):Kg(As(i))}function dM(){let i=Ie();return i&&i[fo].sanitizer}function fB(i,r){let[e,t]=_B(i);return hE(t,r,e)}function _B(i){i=i.toLowerCase();let r=mB(i,!1);if(r[0])return r;let t=Zr$1()===-1?null:zs(),n=t?.namespace;if(i===`#host`&&t?.type===2){let o=pr(t,Ie());if(o.tagName&&(i=o.tagName.toLowerCase()),n==null){let a=o.namespaceURI;n=a&&H9[a]}}return[n,i]}function xB(i){return i instanceof Function?i():i}function vB(i,r,e){let t=i.length;for(;;){let n=i.indexOf(r,e);if(n===-1)return n;if(n===0||i.charCodeAt(n-1)<=32){let o=r.length;if(n+o===t||i.charCodeAt(n+o)<=32)return n}e=n+1}}var uM=`ng-template`;function yB(i,r,e,t){let n=0;if(t){for(;n-1){let o;for(;++no?p=``:p=n[d+1].toLowerCase(),t&2&&c!==p){if(vo(t))return!1;a=!0}}}}return vo(t)||a}function vo(i){return(i&1)===0}function wB(i,r,e,t){if(r===null)return-1;let n=0;if(t||!e){let o=!1;for(;n-1)for(e++;e0?`="`+s+`"`:``)+`]`}else t&8?n+=`.`+a:t&4&&(n+=` `+a);else n!==``&&!vo(a)&&(r+=tk(o,n),n=``),t=a,o=o||!vo(t);e++}return n!==``&&(r+=tk(o,n)),r}function EB(i){return i.map(TB).join(`,`)}function kB(i){let r=[],e=[],t=1,n=2;for(;t=0;s--){let{el:l,declarationView:c}=t[s],d=l.parentNode;l===r?(t.splice(s,1),zg.add(l),l.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}}))):o&&l===o?(t.splice(s,1),l.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}})),l.parentNode?.removeChild(l)):d&&n&&d!==n&&(a===null||c===null||a===c)&&(t.splice(s,1),l.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}})),l.parentNode?.removeChild(l))}}function AB(i,r,e){let t=pM(e),n=E1.get(i);n?n.some(o=>o.el===r)||n.push({el:r,declarationView:t}):E1.set(i,[{el:r,declarationView:t}])}var l_=(function(i){return i[i.CHANGE_DETECTION=0]=`CHANGE_DETECTION`,i[i.AFTER_NEXT_RENDER=1]=`AFTER_NEXT_RENDER`,i})(l_||{});var ra=new le(``);var ik=new Set;function nr(i){ik.has(i)||(ik.add(i),performance?.mark?.(`mark_feature_usage`,{detail:{feature:i}}))}var uS=(()=>{class i{impl=null;execute(){this.impl?.execute()}static ɵprov=de({token:i,providedIn:`root`,factory:()=>new i})}return i})();var hM=[0,1,2,3];var mM=(()=>{class i{ngZone=_(Qe);scheduler=_(La);errorHandler=_($r,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){_(ra,{optional:!0})}execute(){let e=this.sequences.size>0;e&&ei(Gt.AfterRenderHooksStart),this.executing=!0;for(let t of hM)for(let n of this.sequences)if(!(n.erroredOrDestroyed||!n.hooks[t]))try{n.pipelinedValue=this.ngZone.runOutsideAngular(()=>this.maybeTrace(()=>{let o=n.hooks[t];return o(n.pipelinedValue)},n.snapshot))}catch(o){n.erroredOrDestroyed=!0,this.errorHandler?.handleError(o)}this.executing=!1;for(let t of this.sequences)t.afterRun(),t.once&&(this.sequences.delete(t),t.destroy());for(let t of this.deferredRegistrations)this.sequences.add(t);this.deferredRegistrations.size>0&&this.scheduler.notify(7),this.deferredRegistrations.clear(),e&&ei(Gt.AfterRenderHooksEnd)}register(e){let{view:t}=e;t!==void 0?((t[Ul]??=[]).push(e),ql(t),t[nt]|=8192):this.executing?this.deferredRegistrations.add(e):this.addSequence(e)}addSequence(e){this.sequences.add(e),this.scheduler.notify(7)}unregister(e){this.executing&&this.sequences.has(e)?(e.erroredOrDestroyed=!0,e.pipelinedValue=void 0,e.once=!0):(this.sequences.delete(e),this.deferredRegistrations.delete(e))}maybeTrace(e,t){return t?t.run(l_.AFTER_NEXT_RENDER,e):e()}static ɵprov=de({token:i,providedIn:`root`,factory:()=>new i})}return i})();var Wf=class{impl;hooks;view;once;snapshot;erroredOrDestroyed=!1;pipelinedValue=void 0;unregisterOnDestroy;constructor(r,e,t,n,o,a=null){this.impl=r,this.hooks=e,this.view=t,this.once=n,this.snapshot=a,this.unregisterOnDestroy=o?.onDestroy(()=>this.destroy())}afterRun(){this.erroredOrDestroyed=!1,this.pipelinedValue=void 0,this.snapshot?.dispose(),this.snapshot=null}destroy(){this.impl.unregister(this),this.unregisterOnDestroy?.();let r=this.view?.[Ul];r&&(this.view[Ul]=r.filter(e=>e!==this))}};function $a(i,r){let e=r?.injector??_(qt);return nr(`NgAfterNextRender`),PB(i,e,r,!0)}function FB(i){return i instanceof Function?[void 0,void 0,i,void 0]:[i.earlyRead,i.write,i.mixedReadWrite,i.read]}function PB(i,r,e,t){let n=r.get(uS);n.impl??=r.get(mM);let o=r.get(ra,null,{optional:!0}),a=e?.manualCleanup!==!0?r.get(Mt):null,s=r.get(Pg,null,{optional:!0}),l=new Wf(n.impl,FB(i),s?.view,t,a,o?.snapshot(null));return n.impl.register(l),l}var gS=new le(``,{factory:()=>{let i=_(Yt),r=new Set;return i.onDestroy(()=>r.clear()),{queue:r,isScheduled:!1,scheduler:null,injector:i}}});function fM(i,r,e){let t=i.get(gS);if(Array.isArray(r))for(let n of r)t.queue.add(n),e?.detachedLeaveAnimationFns?.push(n);else t.queue.add(r),e?.detachedLeaveAnimationFns?.push(r);t.scheduler&&t.scheduler(i)}function OB(i,r){let e=i.get(gS);if(Array.isArray(r))for(let t of r)e.queue.delete(t);else e.queue.delete(r)}function VB(i,r){let e=i.get(gS);if(r.detachedLeaveAnimationFns){for(let t of r.detachedLeaveAnimationFns)e.queue.delete(t);r.detachedLeaveAnimationFns=void 0}}function LB(i,r){for(let[e,t]of r)fM(i,t.animateFns)}function nk(i,r,e,t){let n=i?.[Jo]?.enter;r!==null&&n&&n.has(e.index)&&LB(t,n)}function rk(i,r,e,t){try{e.get(Ng)}catch{return t(!1)}let n=i?.[Jo];n?.enter?.has(r.index)&&OB(e,n.enter.get(r.index).animateFns);let o=zB(i,r,n);if(o.size===0){let a=!1;if(i){let s=[];c_(i,r,s),a=s.length>0}if(!a)return t(!1)}i&&Gs.add(i[Xo]),fM(e,()=>BB(i,r,n||void 0,o,t),n||void 0)}function zB(i,r,e){let t=new Map,n=e?.leave;if(n&&n.has(r.index)&&t.set(r.index,n.get(r.index)),i&&n)for(let[o,a]of n){if(t.has(o))continue;let l=i[je].data[o].parent;for(;l;){if(l===r){t.set(o,a);break}l=l.parent}}return t}function BB(i,r,e,t,n){let o=[];if(e&&e.leave)for(let[a]of t){if(!e.leave.has(a))continue;let s=e.leave.get(a);for(let l of s.animateFns){let{promise:c}=l();o.push(c)}e.detachedLeaveAnimationFns=void 0}if(i&&c_(i,r,o),o.length>0){let a=e||i?.[Jo];if(a){let s=a.running;s&&o.push(s),a.running=Promise.allSettled(o),GB(i,a.running,n)}else Promise.allSettled(o).then(()=>{i&&Gs.delete(i[Xo]),n(!0)})}else i&&Gs.delete(i[Xo]),n(!1)}function c_(i,r,e){if(r.type&12){let n=i[r.index];if(Qr(n))for(let o=Ei;o{i[Jo]?.running===r&&(i[Jo].running=void 0,Gs.delete(i[Xo])),e(!0)})}function Cd(i,r,e,t,n,o,a,s){if(n!=null){let l,c=!1;Qr(n)?l=n:Ha(n)&&(c=!0,n=n[mo]);let d=En(n);i===0&&t!==null?(nk(s,t,o,e),a==null?sM(r,t,d):Yl(r,t,d,a||null,!0)):i===1&&t!==null?(nk(s,t,o,e),Yl(r,t,d,a||null,!0),RB(o,d,s)):i===2?(s?.[Jo]?.leave?.has(o.index)&&AB(o,d,s),zg.delete(d),rk(s,o,e,p=>{if(zg.has(d)){zg.delete(d);return}lM(r,d,c,p)})):i===3&&(zg.delete(d),rk(s,o,e,()=>{r.destroyNode(d)})),l!=null&&JB(r,i,e,l,o,t,a)}}function UB(i,r){_M(i,r),r[mo]=null,r[Hn]=null}function jB(i,r,e,t,n,o){t[mo]=n,t[Hn]=r,u_(i,t,e,1,n,o)}function _M(i,r){r[fo].changeDetectionScheduler?.notify(9),u_(i,r,r[Zt],2,null,null)}function WB(i){let r=i[yd];if(!r)return o1(i[je],i);for(;r;){let e=null;if(Ha(r))e=r[yd];else{let t=r[Ei];t&&(e=t)}if(!e){for(;r&&!r[qr]&&r!==i;)Ha(r)&&o1(r[je],r),r=r[nn];r===null&&(r=i),Ha(r)&&o1(r[je],r),e=r&&r[qr]}r=e}}function pS(i,r){let e=i[Wl],t=e.indexOf(r);e.splice(t,1)}function d_(i,r){if($l(r))return;let e=r[Zt];e.destroyNode&&u_(i,r,e,3,null,null),WB(r)}function o1(i,r){if($l(r))return;let e=We(null);try{r[nt]&=-129,r[nt]|=256,r[Tr]&&El(r[Tr]),qB(i,r),$B(i,r),r[je].type===1&&r[Zt].destroy();let t=r[Os];if(t!==null&&Qr(r[nn])){t!==r[nn]&&pS(t,r);let n=r[Zo];n!==null&&n.detachView(i)}x1(r)}finally{We(e)}}function $B(i,r){let e=i.cleanup,t=r[vd];if(e!==null)for(let a=0;a=0?t[s]():t[-s].unsubscribe(),a+=2}else{let s=t[e[a+1]];e[a].call(s)}t!==null&&(r[vd]=null);let n=r[Fa];if(n!==null){r[Fa]=null;for(let a=0;aXt&&CM(i,r,Xt,!1);ei(a?Gt.TemplateUpdateStart:Gt.TemplateCreateStart,n,e),e(t,n)}finally{Ls(o);ei(a?Gt.TemplateUpdateEnd:Gt.TemplateCreateEnd,n,e)}}function p_(i,r,e){lH(i,r,e),(e.flags&64)===64&&cH(i,r,e)}function Xg(i,r,e=pr){let t=r.localNames;if(t!==null){let n=r.index+1;for(let o=0;o=s&&v<=l){let y=r.data[v],T=p[f+1];Jl(y,e[v],T,o),c=!0}else if(v>l)break}}return a!==null&&Object.hasOwn(t.inputs,n)&&(Jl(t,e[a],n,o),c=!0),c}function mH(i,r){let e=Kr(r,i),t=e[je];fH(t,e);let n=e[mo];n!==null&&e[Hl]===null&&(e[Hl]=Xk(n,e[Yo])),ei(Gt.ComponentStart);try{SS(t,e,e[Pi])}finally{ei(Gt.ComponentEnd,e[Pi])}}function fH(i,r){for(let e=r.length;e{ql(i.lView)},consumerOnSignalRead(){this.lView[Tr]=this}});function SH(i){let r=i[Tr]??Object.create(wH);return r.lView=i,r}var wH=s(r({},Ds),{consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:i=>{let r=Va(i.lView);for(;r&&!AM(r[je]);)r=Va(r);r&&Vb(r)},consumerOnSignalRead(){this.lView[Tr]=this}});function AM(i){return i.type!==2}function FM(i){if(i[Oa]===null)return;let r=!0;for(;r;){let e=!1;for(let t of i[Oa])if(t.dirty&&(e=!0,t.zone===null||Zone.current===t.zone?t.run():t.zone.run(()=>t.run()),i[Oa]===null))return;r=e&&!!(i[nt]&8192)}}var CH=100;function PM(i,r=0){let t=i[fo].rendererFactory;t.begin?.();try{IH(i,r)}finally{t.end?.()}}function IH(i,r){let e=Qb();try{xg(!0),M1(i,r);let t=0;for(;kg(i);){if(t===CH)throw new X(103,!1);t++,M1(i,1)}}finally{xg(e)}}function NH(i,r,e,t){if($l(r))return;let n=r[nt];If(r);let s=!0,l=null,c=null;AM(i)?(c=xH(r),l=Ts(c)):Sm()===null?(s=!1,c=SH(r),l=Ts(c)):r[Tr]&&(El(r[Tr]),r[Tr]=null);try{Ob(r),CE(i.bindingStartIndex),e!==null&&IM(i,r,e,2,t);let d=(n&3)===3;if(d){let v=i.preOrderCheckHooks;v!==null&&Vf(r,v,null)}else{let v=i.preOrderHooks;v!==null&&Lf(r,v,0,null),n1(r,0)}if(DH(r),FM(r),OM(r,0),i.contentQueries!==null&&Jk(i,r),true)if(d){let v=i.contentCheckHooks;v!==null&&Vf(r,v)}else{let v=i.contentHooks;v!==null&&Lf(r,v,1),n1(r,1)}EH(i,r);let p=i.components;p!==null&&LM(r,p,0);let f=i.viewQuery;if(f!==null&&y1(2,f,t),true)if(d){let v=i.viewCheckHooks;v!==null&&Vf(r,v)}else{let v=i.viewHooks;v!==null&&Lf(r,v,2),n1(r,2)}if(i.firstUpdatePass===!0&&(i.firstUpdatePass=!1),r[mf]){for(let v of r[mf])v();r[mf]=null}MM(r),r[nt]&=-73}catch(d){throw ql(r),d}finally{c!==null&&(Tl(c,l),s&&yH(c)),Nf()}}function OM(i,r){for(let e=Wk(i);e!==null;e=$k(e))for(let t=Ei;t0&&(i[e-1][qr]=t[qr]);let o=Ig(i,Ei+r);UB(t[je],t);let a=o[Zo];a!==null&&a.detachView(o[je]),t[nn]=null,t[qr]=null,t[nt]&=-129}return t}function kH(i,r,e,t){let n=Ei+t,o=e.length;t>0&&(e[n-1][qr]=r),t-1&&(jg(r,t),Ig(e,t))}this._attachedToViewContainer=!1}d_(this._lView[je],this._lView)}onDestroy(r){yf(this._lView,r)}markForCheck(){wS(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[nt]&=-129}reattach(){vf(this._lView),this._lView[nt]|=128}detectChanges(){this._lView[nt]|=1024,PM(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new X(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let r=Sd(this._lView),e=this._lView[Os];e!==null&&!r&&pS(e,this._lView),_M(this._lView[je],this._lView)}attachToAppRef(r){if(this._attachedToViewContainer)throw new X(902,!1);this._appRef=r;let e=Sd(this._lView),t=this._lView[Os];t!==null&&!e&&GM(t,this._lView),vf(this._lView)}};var te=(()=>{class i{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=MH;constructor(e,t,n){this._declarationLView=e,this._declarationTContainer=t,this.elementRef=n}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(e,t){return this.createEmbeddedViewImpl(e,t)}createEmbeddedViewImpl(e,t,n){return new Us(Jg(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:n}))}}return i})();function MH(){return m_(an(),Ie())}function m_(i,r){return i.type&4?new te(r,i,Ad(i,r)):null}function nc(i,r,e,t,n){let o=i.data[r];if(o===null)o=RH(i,r,e,t,n),IE()&&(o.flags|=32);else if(o.type&64){o.type=e,o.value=t,o.attrs=n;let a=SE();o.injectorIndex=a===null?-1:a.injectorIndex}return Ql(o,!0),o}function RH(i,r,e,t,n){let o=jb(),a=Wb(),s=a?o:o&&o.parent,l=i.data[r]=FH(i,s,e,r,t,n);return AH(i,l,o,a),l}function AH(i,r,e,t){i.firstChild===null&&(i.firstChild=r),e!==null&&(t?e.child==null&&r.parent!==null&&(e.child=r):e.next===null&&(e.next=r,r.prev=e))}function FH(i,r,e,t,n,o){let a=r?r.injectorIndex:-1,s=0;return Hb()&&(s|=128),{type:e,index:t,insertBeforeIndex:null,injectorIndex:a,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,controlDirectiveIndex:-1,customControlIndex:-1,propertyBindings:null,flags:s,providerIndexes:0,value:n,namespace:Zb(),attrs:o,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:r,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}function PH(i){let r=i[Ab]??[],t=i[nn][Zt],n=[];for(let o of r)o.data[Kk]!==void 0?n.push(o):OH(o,t);i[Ab]=n}function OH(i,r){let e=0,t=i.firstChild;if(t){let n=i.data[Qk];for(;enull;var LH=()=>null;function $f(i,r){return VH(i,r)}function UM(i,r,e){return LH(i,r,e)}var jM=class{};var bo=class{};var Ot=class{destroyNode=null;static __NG_ELEMENT_ID__=()=>zH()};function zH(){let i=Ie(),e=Kr(an().index,i);return(Ha(e)?e:i)[Zt]}var WM=(()=>{class i{static ɵprov=de({token:i,providedIn:`root`,factory:()=>null})}return i})();function $M(i){return i.debugInfo?.className||i.type.name||null}var Bf={};var qf=class{injector;parentInjector;constructor(r,e){this.injector=r,this.parentInjector=e}get(r,e,t){let n=this.injector.get(r,Bf,t);return n!==Bf||e===Bf?n:this.parentInjector.get(r,e,t)}};function CS(i){return f_(i)?Array.isArray(i)||!(i instanceof Map)&&Symbol.iterator in i:!1}function qM(i,r){if(Array.isArray(i))for(let e=0;et(En(T[i.index])):i.index,r,e,o,s,v,!1)}return c}function BH(i){return i.startsWith(`animation`)||i.startsWith(`transition`)}function HH(i,r,e,t){let n=i.cleanup;if(n!=null)for(let o=0;ol?s[l]:null}typeof a==`string`&&(o+=2)}return null}function KM(i,r,e,t,n,o,a){let s=r.firstCreatePass?zb(r):null,l=Lb(e),c=l.length;l.push(n,o),s&&s.push(t,i,c,(c+1)*(a?-1:1))}function sk(i,r,e,t,n){let o=null,a=null,s=null,l=!1,c=i.directiveToIndex.get(e.type);if(typeof c==`number`?o=c:[o,a,s]=c,a!==null&&s!==null&&i.hostDirectiveOutputs&&Object.hasOwn(i.hostDirectiveOutputs,t)){let d=i.hostDirectiveOutputs[t];for(let p=0;p=a&&f<=s)l=!0,Qf(i,r,f,d[p+1],t,n);else if(f>s)break}}return Object.hasOwn(e.outputs,t)&&(l=!0,Qf(i,r,o,t,t,n)),l}function Qf(i,r,e,t,n,o){let a=r[e],s=r[je],p=a[s.data[e].outputs[t]].subscribe(o);KM(i.index,s,r,n,o,p,!0)}function He(){GH()}function GH(){let i=Ie(),r=Jt(),e=an();if(r.firstCreatePass&&jH(r,e),e.controlDirectiveIndex===-1)return;nr(`NgSignalForms`);let t=i[e.controlDirectiveIndex];r.data[e.controlDirectiveIndex].controlDef.create(t,new Kf(i,r,e))}function Ge(){UH()}function UH(){let i=Ie(),r=Jt(),e=zs();if(e.controlDirectiveIndex===-1)return;let t=r.data[e.controlDirectiveIndex].controlDef,n=i[e.controlDirectiveIndex];t.update(n,new Kf(i,r,e))}var Kf=class{lView;tView;tNode;hasPassThrough;constructor(r,e,t){this.lView=r,this.tView=e,this.tNode=t,this.hasPassThrough=!!(t.flags&4096)}get customControl(){return this.tNode.customControlIndex!==-1?this.lView[this.tNode.customControlIndex]:void 0}get nativeElement(){return pr(this.tNode,this.lView)}get descriptor(){return`<${this.tNode.value}>`}listenToCustomControlOutput(r,e){let t=this.tView.data[this.tNode.customControlIndex];sk(this.tNode,this.lView,t,r,Zl(this.tNode,this.lView,e))}listenToCustomControlModel(r){let e=this.tNode.flags&1024?`valueChange`:`checkedChange`,t=this.tView.data[this.tNode.customControlIndex];sk(this.tNode,this.lView,t,e,Zl(this.tNode,this.lView,r))}listenToDom(r,e){IS(this.tNode,this.tView,this.lView,void 0,this.lView[Zt],r,e,Zl(this.tNode,this.lView,e))}setInputOnDirectives(r,e){let t=this.tNode.inputs?.[r],n=this.tNode.hostDirectiveInputs?.[r];if(!t&&!n)return!1;let o=!1;if(t)for(let a of t){if(a===this.tNode.controlDirectiveIndex)continue;let s=this.tView.data[a],l=this.lView[a];Jl(s,l,r,e),o=!0}if(n)for(let a=0;a0;){let n=t.shift();if(typeof n!=`function`){for(let a in n.inputs)e[n.inputs[a]]=!0;let o=lk(n.directive);o!==null&&t.push(...o);continue}for(let o of n()){if(typeof o==`function`)continue;if(o.inputs)for(let s=0;s1){r.flags|=4096;return}WH(i,r)}function WH(i,r){for(let e=r.directiveStart;e{let o=r.hostDirectiveInputs[t],a=r.hostDirectiveOutputs[t+`Change`];if(!o||!a)return!1;for(let s=0;s=v&&l<=y)return r.flags|=n,r.customControlIndex=f,!0}}return!1};if(e(`value`,1024)||e(`checked`,2048))return}}function ck(i,r){return $H(i,r)&&qH(i,r+`Change`)}function $H(i,r){return r in i.inputs}function qH(i,r){return r in i.outputs}var R1=Symbol(`BINDING`);var rc=new le(``);function Yf(i,r,e){let t=e?i.styles:null,n=e?i.classes:null,o=0;if(r!==null)for(let a=0;a0&&(e.directiveToIndex=new Map);for(let f=0;f0;){let e=i[--r];if(typeof e==`number`&&e<0)return e}return 0}function tG(i,r,e){if(e){if(r.exportAs)for(let t=0;t{let[e,t,n]=i[r],o={propName:e,templateName:r,isSignal:(t&g_.SignalBased)!==0};return n&&(o.transform=n),o})}function aG(i){return Object.keys(i).map(r=>({propName:i[r],templateName:r}))}function sG(i,r,e){let t=r instanceof Yt?r:r?.injector;return t&&i.getStandaloneInjector!==null&&(t=i.getStandaloneInjector(t)||t),t?new qf(e,t):e}function lG(i){let r=i.get(bo,null);if(r===null)throw new X(407,!1);return{rendererFactory:r,sanitizer:i.get(WM,null),changeDetectionScheduler:i.get(La,null),ngReflect:!1,tracingService:i.get(ra,null,{optional:!0})}}function cG(i,r){let e=JM(i);return aM(r,e,e===`svg`?md:e===`math`?ff:null)}function dG(i){if((i&&`localName`in i&&typeof i.localName==`string`?i.localName:i?.tagName)?.toLowerCase()===`script`)throw new X(905,!1)}function JM(i){return(i.selectors[0][0]||`div`).toLowerCase()}var ec=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=oG(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=aG(this.componentDef.outputs),this.cachedOutputs}constructor(r,e){this.componentDef=r,this.ngModule=e,this.componentType=r.type,this.selector=EB(r.selectors),this.ngContentSelectors=r.ngContentSelectors??[],this.isBoundToModule=!!e}create(r,e,t,n,o,a){ei(Gt.DynamicComponentStart);let s=We(null);try{let l=this.componentDef,c=sG(l,n||this.ngModule,r),d=lG(c),p=d.tracingService;return p&&p.componentCreate?p.componentCreate($M(l),()=>this.createComponentRef(d,c,e,t,o,a)):this.createComponentRef(d,c,e,t,o,a)}finally{We(s)}}createComponentRef(r,e,t,n,o,a){let s=this.componentDef,l=uG(n,s,a,o),c=r.rendererFactory.createRenderer(null,s),d=n?rH(c,n,s.encapsulation,e):cG(s,c);dG(d);let p=e.get(rc,null),f=gG(d,()=>e.get($e,null)??eS());p&&p.addHost(f);let v=a?.some(pk)||o?.some(M=>typeof M!=`function`&&M.bindings.some(pk)),y=_S(null,l,null,512|SM(s),null,null,r,c,e,null,Xk(d,e,!0));p&&XM&&f instanceof ShadowRoot&&yf(y,()=>{p.removeHost(f)}),y[Xt]=d,If(y);let T=null;try{let M=NS(Xt,y,2,`#host`,()=>l.directiveRegistry,!0,0);cM(c,d,M),Td(d,y),p_(l,y,M),iS(l,M,y),DS(l,M),t!==void 0&&hG(M,this.ngContentSelectors,t),T=Kr(M.index,y),y[Pi]=T[Pi],SS(l,y,null)}catch(M){throw T!==null&&x1(T),x1(y),M}finally{ei(Gt.DynamicComponentEnd),Nf()}return new Zf(this.componentType,y,!!v)}};function uG(i,r,e,t){let n=i?[`ng-version`,`22.1.3`]:kB(r.selectors[0]),o=null,a=null,s=0;if(e)for(let d of e)s+=d[R1].requiredVars,d.create&&(d.targetIdx=0,(o??=[]).push(d)),d.update&&(d.targetIdx=0,(a??=[]).push(d));if(t)for(let d=0;d{if(e&1&&i)for(let t of i)t.create();if(e&2&&r)for(let t of r)t.update()}}function pk(i){let r=i[R1].kind;return r===`input`||r===`twoWay`}var Zf=class extends jM{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(r,e,t){super(),this._rootLView=e,this._hasInputBindings=t,this._tNode=_f(e[je],Xt),this.location=Ad(this._tNode,e),this.instance=Kr(this._tNode.index,e)[Pi],this.hostView=this.changeDetectorRef=new Us(e,void 0),this.componentType=r}setInput(r,e){this._hasInputBindings;let t=this._tNode;if(this.previousInputValues??=new Map,this.previousInputValues.has(r)&&Object.is(this.previousInputValues.get(r),e))return;let n=this._rootLView;h_(t,n[je],n,r,e);this.previousInputValues.set(r,e);wS(Kr(t.index,n),1)}get injector(){return new Hs(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(r){this.hostView.onDestroy(r)}};function hG(i,r,e){let t=i.projection=[];for(let n=0;n{class i{static __NG_ELEMENT_ID__=mG}return i})();function mG(){return e5(an(),Ie())}var A1=class i extends hi{_lContainer;_hostTNode;_hostLView;constructor(r,e,t){super(),this._lContainer=r,this._hostTNode=e,this._hostLView=t}get element(){return Ad(this._hostTNode,this._hostLView)}get injector(){return new Hs(this._hostTNode,this._hostLView)}get parentInjector(){let r=Z1(this._hostTNode,this._hostLView);if(Ak(r)){let e=Gf(r,this._hostLView),t=Hf(r),n=e[je].data[t+8];return new Hs(n,e)}else return new Hs(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(r){let e=hk(this._lContainer);return e!==null&&e[r]||null}get length(){return this._lContainer.length-Ei}createEmbeddedView(r,e,t){let n,o;typeof t==`number`?n=t:t!=null&&(n=t.index,o=t.injector);let a=$f(this._lContainer,r.ssrId),s=r.createEmbeddedViewImpl(e||{},o,a);return this.insertImpl(s,n,Ed(this._hostTNode,a)),s}createComponent(r,e,t,n,o,a,s){let l,c=e||{};l=c.index,t=c.injector,n=c.projectableNodes,o=c.environmentInjector||c.ngModuleRef,a=c.directives,s=c.bindings;let d=new ec(za(r)),p=t||this.parentInjector;if(!o&&d.ngModule==null){let F=this.parentInjector.get(Yt,null);F&&(o=F)}let f=za(d.componentType??{}),v=$f(this._lContainer,f?.id??null),y=v?.firstChild??null,T=d.create(p,n,y,o,a,s);return this.insertImpl(T.hostView,l,Ed(this._hostTNode,v)),T}insert(r,e){return this.insertImpl(r,e,!0)}insertImpl(r,e,t){let n=r._lView;if(fE(n)){let s=this.indexOf(r);if(s!==-1)this.detach(s);else{let l=n[nn],c=new i(l,l[Hn],l[nn]);c.detach(c.indexOf(r))}}let o=this._adjustIndex(e),a=this._lContainer;return ep(a,n,o,t),r.attachToViewContainerRef(),Ib(a1(a),o,r),r}move(r,e){return this.insert(r,e)}indexOf(r){let e=hk(this._lContainer);return e!==null?e.indexOf(r):-1}remove(r){let e=this._adjustIndex(r,-1),t=jg(this._lContainer,e);t&&(Ig(a1(this._lContainer),e),d_(t[je],t))}detach(r){let e=this._adjustIndex(r,-1),t=jg(this._lContainer,e);return t&&Ig(a1(this._lContainer),e)!=null?new Us(t):null}_adjustIndex(r,e=0){return r??this.length+e}};function hk(i){return i[Tg]}function a1(i){return i[Tg]||(i[Tg]=[])}function e5(i,r){let e,t=r[i.index];return Qr(t)?e=t:(e=zM(t,r,null,i),r[i.index]=e,xS(r,e)),_G(e,r,i,t),new A1(e,i,r)}function fG(i,r){let e=i[Zt],t=e.createComment(``),n=pr(r,i);return Yl(e,e.parentNode(n),t,e.nextSibling(n),!1),t}var _G=yG;var xG=()=>!1;function vG(i,r,e){return xG(i,r,e)}function yG(i,r,e,t){if(i[jl])return;let n;e.type&8?n=En(t):n=fG(r,e),i[jl]=n}var F1=class i{queryList;matches=null;constructor(r){this.queryList=r}clone(){return new i(this.queryList)}setDirty(){this.queryList.setDirty()}};var P1=class i{queries;constructor(r=[]){this.queries=r}createEmbeddedView(r){let e=r.queries;if(e!==null){let t=r.contentQueries!==null?r.contentQueries[0]:e.length,n=[];for(let o=0;o0)t.push(a[s/2]);else{let c=o[s+1],d=r[-l];for(let p=Ei;pr.trim())}function r5(i,r,e){i.queries===null&&(i.queries=new O1),i.queries.track(new V1(r,e))}function DG(i,r){let e=i.contentQueries||(i.contentQueries=[]);r!==(e.length?e[e.length-1]:-1)&&e.push(i.queries.length-1,r)}function ES(i,r){return i.queries.getByIndex(r)}function o5(i,r){let e=i[je],t=ES(e,r);return t.crossesNgTemplate?L1(e,i,r,[]):t5(e,i,t,r)}function a5(i,r,e){let t,n=sg(()=>{t._dirtyCounter();let o=EG(t,i);if(r&&o===void 0)throw new X(-951,!1);return o});return t=n[$i],t._dirtyCounter=gi(0),t._flatValue=void 0,n}function s5(i){return a5(!0,!1,i)}function l5(i){return a5(!0,!0,i)}function TG(i,r){let e=i[$i];e._lView=Ie(),e._queryIndex=r,e._queryList=TS(e._lView,r),e._queryList.onDirty(()=>e._dirtyCounter.update(t=>t+1))}function EG(i,r){let e=i._lView,t=i._queryIndex;if(e===void 0||t===void 0||e[nt]&4)return r?void 0:Bn;let n=TS(e,t),o=o5(e,t);return n.reset(o,Gk),r?n.first:n._changesDetected||i._flatValue===void 0?i._flatValue=n.toArray():i._flatValue}function qa(i){return!!i&&typeof i.then==`function`}function __(i){return!!i&&typeof i.subscribe==`function`}var tc=class{};var x_=class{};var Jf=class extends tc{ngModuleType;_parent;_bootstrapComponents=[];_r3Injector;instance;destroyCbs=[];constructor(r,e,t,n=!0){super(),this.ngModuleType=r,this._parent=e;let o=eE(r);this._bootstrapComponents=xB(o.bootstrap),this._r3Injector=Xb(r,e,[{provide:tc,useValue:this},...t],bg(r),new Set([`environment`])),n&&this.resolveInjectorInitializers()}resolveInjectorInitializers(){this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(this.ngModuleType)}get injector(){return this._r3Injector}destroy(){let r=this._r3Injector;!r.destroyed&&r.destroy(),this.destroyCbs.forEach(e=>e()),this.destroyCbs=null}onDestroy(r){this.destroyCbs.push(r)}};var e_=class extends x_{moduleType;constructor(r){super(),this.moduleType=r}create(r){return new Jf(this.moduleType,r,[])}};var Wg=class extends tc{injector;instance=null;constructor(r){super();let e=new Pa([...r.providers,{provide:tc,useValue:this}],r.parent||xd(),r.debugName,new Set([`environment`]));this.injector=e,r.runEnvironmentInitializers&&e.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(r){this.injector.onDestroy(r)}};function Fd(i,r,e=null){return new Wg({providers:i,parent:r,debugName:e,runEnvironmentInitializers:!0}).injector}var kG=(()=>{class i{_injector;cachedInjectors=new Map;constructor(e){this._injector=e}getOrCreateStandaloneInjector(e){if(!e.standalone)return null;if(!this.cachedInjectors.has(e)){let t=Db(!1,e.type),n=t.length>0?Fd([t],this._injector,``):null;this.cachedInjectors.set(e,n)}return this.cachedInjectors.get(e)}ngOnDestroy(){try{for(let e of this.cachedInjectors.values())e!==null&&e.destroy()}finally{this.cachedInjectors.clear()}}static ɵprov=de({token:i,providedIn:`environment`,factory:()=>new i(Te(Yt))})}return i})();function Z(i){return Qg(()=>{let r$1=c5(i),e=s(r({},r$1),{decls:i.decls,vars:i.vars,template:i.template,consts:i.consts||null,ngContentSelectors:i.ngContentSelectors,onPush:i.changeDetection!==X1.Eager,directiveDefs:null,pipeDefs:null,dependencies:r$1.standalone&&i.dependencies||null,getStandaloneInjector:r$1.standalone?n=>n.get(kG).getOrCreateStandaloneInjector(e):null,getExternalStyles:null,signals:i.signals??!1,data:i.data||{},encapsulation:i.encapsulation||Er.Emulated,styles:i.styles||Bn,_:null,schemas:i.schemas||null,tView:null,id:``});r$1.standalone&&nr(`NgStandalone`),d5(e);let t=i.dependencies;return e.directiveDefs=mk(t,MG),e.pipeDefs=mk(t,tE),e.id=FG(e),e})}function MG(i){return za(i)||lf(i)}function Me(i){return Qg(()=>({type:i.type,bootstrap:i.bootstrap||Bn,declarations:i.declarations||Bn,imports:i.imports||Bn,exports:i.exports||Bn,transitiveCompileScopes:null,schemas:i.schemas||null,id:i.id||null}))}function RG(i,r){if(i==null)return Fs;let e={};for(let t in i)if(Object.hasOwn(i,t)){let n=i[t],o,a,s,l;Array.isArray(n)?(s=n[0],o=n[1],a=n[2]??o,l=n[3]||null):(o=n,a=n,s=g_.None,l=null),e[o]=[t,s,l],r[o]=a}return e}function AG(i){if(i==null)return Fs;let r={};for(let e in i)Object.hasOwn(i,e)&&(r[i[e]]=e);return r}function L(i){return Qg(()=>{let r=c5(i);return d5(r),r})}function Oe(i){return{type:i.type,name:i.name,factory:null,pure:i.pure!==!1,standalone:i.standalone??!0,onDestroy:i.type.prototype.ngOnDestroy||null}}function c5(i){let r={};return{type:i.type,providersResolver:null,viewProvidersResolver:null,factory:null,hostBindings:i.hostBindings||null,hostVars:i.hostVars||0,hostAttrs:i.hostAttrs||null,contentQueries:i.contentQueries||null,declaredInputs:r,inputConfig:i.inputs||Fs,exportAs:i.exportAs||null,standalone:i.standalone??!0,signals:i.signals===!0,selectors:i.selectors||Bn,viewQuery:i.viewQuery||null,features:i.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,signalFormsInputPresence:null,inputs:RG(i.inputs,r),outputs:AG(i.outputs),debugInfo:null}}function d5(i){i.features?.forEach(r=>r(i))}function mk(i,r){return i?()=>{let e=typeof i==`function`?i():i,t=[];for(let n of e){let o=r(n);o!==null&&t.push(o)}return t}:null}function FG(i){let r=0,e=typeof i.consts==`function`?``:i.consts,t=[i.selectors,i.ngContentSelectors,i.hostVars,i.hostAttrs,e,i.vars,i.decls,i.encapsulation,i.standalone,i.signals,i.exportAs,JSON.stringify(i.inputs),JSON.stringify(i.outputs),Object.getOwnPropertyNames(i.type.prototype),!!i.contentQueries,!!i.viewQuery];for(let o of t.join(`|`))r=Math.imul(31,r)+o.charCodeAt(0)<<0;return r+=2147483648,`c`+r}var kS=new le(``);function v_(i){return Ba([{provide:kS,multi:!0,useValue:i}])}var MS=(()=>{class i{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=_(kS,{optional:!0})??[];injector=_(qt);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let n of this.appInits){let o=qi(this.injector,n);if(qa(o))e.push(o);else if(__(o)){let a=new Promise((s,l)=>{o.subscribe({complete:s,error:l})});e.push(a)}}let t=()=>{this.done=!0,this.resolve()};Promise.all(e).then(()=>{t()}).catch(n=>{this.reject(n)}),e.length===0&&t(),this.initialized=!0}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();function y_(i){return r=>{r.controlDef={create:(e,t)=>{e?.ɵngControlCreate(t)},update:(e,t)=>{e?.ɵngControlUpdate?.(t)},passThroughInput:i}}}function Mn(i){let r=e=>{let t=Array.isArray(i);e.hostDirectives===null?(e.resolveHostDirectives=PG,e.hostDirectives=t?i.map(z1):[i]):t?e.hostDirectives.unshift(...i.map(z1)):e.hostDirectives.unshift(i)};return r.ngInherit=!0,r}function PG(i){let r=[],e=!1,t=null,n=null;for(let o=0;o{OG(a.declaredInputs,o.inputs)}),[r,t,n]}function u5(i,r,e,t){if(i.hostDirectives!==null)for(let n of i.hostDirectives)if(typeof n==`function`){let o=n();for(let a of o)fk(z1(a),r,e,t)}else fk(n,r,e,t)}function fk(i,r,e,t){let n=lf(i.directive);if(u5(n,r,e,t),e.has(n)){let o=e.get(n);_k(o,i.inputs,`input`),_k(o,i.outputs,`output`)}else t.includes(n)||(e.set(n,i),r.push(n))}function _k(i,r,e){let t=e===`input`?i.inputs:i.outputs;Object.keys(r).forEach(n=>{let o=r[n];(!Object.hasOwn(t,n)||t[n]===o)&&(t[n]=o)})}function z1(i){return typeof i==`function`?{directive:tn(i),inputs:{},outputs:{}}:{directive:tn(i.directive),inputs:xk(i.inputs),outputs:xk(i.outputs)}}function xk(i){let r={};if(i!==void 0&&i.length>0)for(let e=0;e=0;t--){let n=i[t];n.hostVars=r+=n.hostVars,n.hostAttrs=Dd(n.hostAttrs,e=Dd(e,n.hostAttrs))}}function s1(i){return i===Fs?{}:i===Bn?[]:i}function BG(i,r){let e=i.viewQuery;e?i.viewQuery=(t,n)=>{r(t,n),e(t,n)}:i.viewQuery=r}function HG(i,r){let e=i.contentQueries;e?i.contentQueries=(t,n,o)=>{r(t,n,o),e(t,n,o)}:i.contentQueries=r}function GG(i,r){let e=i.hostBindings;e?i.hostBindings=(t,n)=>{r(t,n),e(t,n)}:i.hostBindings=r}function g5(i,r,e,t,n,o,a,s){if(e.firstCreatePass){i.mergedAttrs=Dd(i.mergedAttrs,i.attrs);let d=i.tView=fS(2,i,n,o,a,e.directiveRegistry,e.pipeRegistry,null,e.schemas,e.consts,null);e.queries!==null&&(e.queries.template(e,i),d.queries=e.queries.embeddedTView(i))}s&&(i.flags|=s),Ql(i,!1);let l=jG(e,r,i,t);Tf()&&hS(e,r,l,i),Td(l,r);let c=zM(l,r,l,i);r[t+Xt]=c,xS(r,c),vG(c,i,r)}function UG(i,r,e,t,n,o,a,s,l,c,d){let p=e+Xt,f;return r.firstCreatePass?(f=nc(r,p,4,a||null,s||null),bf()&&YM(r,i,f,Yr(r.consts,c),vS),Mk(r,f)):f=r.data[p],g5(f,i,r,e,t,n,o,l),bd(f)&&p_(r,i,f),c!=null&&Xg(i,f,d),f}function $g(i,r,e,t,n,o,a,s,l,c,d){let p=e+Xt,f;if(r.firstCreatePass){if(f=nc(r,p,4,a||null,s||null),c!=null){let v=Yr(r.consts,c);f.localNames=[];for(let y=0;y{class i{log(e){console.log(e)}warn(e){console.warn(e)}static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:i.ɵfac,providedIn:`platform`})}return i})();var S_=new le(``);var Pd=new le(``);var RS=new le(`USE_PENDING_TASKS`,{providedIn:`root`,factory:()=>typeof Zone>`u`});var np=(()=>{class i{_ngZone;registry;_isZoneStable=!0;_callbacks=[];_taskTrackingZone=null;_destroyRef;pendingTasksInternal=_(ia);_usePendingTasks=_(RS);constructor(e,t,n){this._ngZone=e,this.registry=t,kb()&&(this._destroyRef=_(Mt,{optional:!0})??void 0),AS||(p5(n),n.addToWindow(t)),this._watchAngularEvents(),e.run(()=>{this._taskTrackingZone=typeof Zone>`u`?null:Zone.current.get(`TaskTrackingZone`)})}_watchAngularEvents(){let e=this._ngZone.onUnstable.subscribe({next:()=>{this._isZoneStable=!1}}),t,n;this._ngZone.runOutsideAngular(()=>{this._usePendingTasks&&(t=this.pendingTasksInternal.hasPendingTasksObservable.subscribe(()=>{this.isStable()&&this._ngZone.runOutsideAngular(()=>{this._runCallbacksIfReady()})})),n=this._ngZone.onStable.subscribe({next:()=>{Qe.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})}),this._destroyRef?.onDestroy(()=>{e.unsubscribe(),t?.unsubscribe(),n.unsubscribe()})}isStable(){return this._isZoneStable&&!this._ngZone.hasPendingMacrotasks&&(!this._usePendingTasks||!this.pendingTasksInternal.hasPendingTasks)}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;this._callbacks.length!==0;){let e=this._callbacks.pop();clearTimeout(e.timeoutId),e.doneCb()}});else{let e=this.getPendingTasks();this._callbacks=this._callbacks.filter(t=>t.updateCb&&t.updateCb(e)?(clearTimeout(t.timeoutId),!1):!0)}}getPendingTasks(){return this._taskTrackingZone?this._taskTrackingZone.macroTasks.map(e=>({source:e.source,creationLocation:e.creationLocation,data:e.data})):[]}addCallback(e,t,n){let o=-1;t&&t>0&&(o=setTimeout(()=>{this._callbacks=this._callbacks.filter(a=>a.timeoutId!==o),e()},t)),this._callbacks.push({doneCb:e,timeoutId:o,updateCb:n})}whenStable(e,t,n){if(n&&!this._taskTrackingZone)throw new Error(`Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?`);this.addCallback(e,t,n),this._runCallbacksIfReady()}registerApplication(e){this.registry.registerApplication(e,this)}unregisterApplication(e){this.registry.unregisterApplication(e)}findProviders(e,t,n){return[]}static ɵfac=function(t){return new(t||i)(Te(Qe),Te(rp),Te(Pd))};static ɵprov=de({token:i,factory:i.ɵfac})}return i})();var rp=(()=>{class i{_applications=new Map;registerApplication(e,t){this._applications.set(e,t)}unregisterApplication(e){this._applications.delete(e)}unregisterAllApplications(){this._applications.clear()}getTestability(e){return this._applications.get(e)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(e,t=!0){return AS?.findTestabilityInTree(this,e,t)??null}static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:i.ɵfac,providedIn:`platform`})}return i})();function p5(i){AS=i}var AS;var op=new le(``);function h5(){Py(()=>{throw new X(600,``)})}var $G=10;var Jr=(()=>{class i{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=_(Xr);afterRenderManager=_(uS);zonelessEnabled=_(Og);rootEffectScheduler=_(Mf);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new ce;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=_(ia);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(Pt(e=>!e))}constructor(){_(ra,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:n=>{n&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=_(Yt);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=qt.NULL){return this._injector.get(Qe).run(()=>{if(ei(Gt.BootstrapComponentStart),!this._injector.get(MS).done)throw new X(405,``);let s=za(e),l=this._injector.get(tc),c=new ec(s,l);this.componentTypes.push(e);let{hostElement:d,directives:p,bindings:f}=qG(t),v=d||c.selector,y=c.create(n,[],v,l.injector,p,f),T=y.location.nativeElement,M=y.injector.get(S_,null);return M?.registerApplication(T),y.onDestroy(()=>{this.detachView(y.hostView),Hg(this.components,y),M?.unregisterApplication(T)}),this._loadComponent(y),ei(Gt.BootstrapComponentEnd,y),y})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){ei(Gt.ChangeDetectionStart),this.tracingSnapshot!==null?this.tracingSnapshot.run(l_.CHANGE_DETECTION,this.tickImpl):this.tickImpl()}tickImpl=()=>{if(this._runningTick)throw ei(Gt.ChangeDetectionEnd),new X(101,!1);let e=We(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,We(e),this.afterTick.next(),ei(Gt.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(bo,null,{optional:!0}));let e=0;for(;this.dirtyFlags!==0&&e++<$G;){ei(Gt.ChangeDetectionSyncStart);try{this.synchronizeOnce()}finally{ei(Gt.ChangeDetectionSyncEnd)}}}synchronizeOnce(){this.dirtyFlags&16&&(this.dirtyFlags&=-17,this.rootEffectScheduler.flush());let e=!1;if(this.dirtyFlags&7){let t=!!(this.dirtyFlags&1);this.dirtyFlags&=-8,this.dirtyFlags|=8;for(let{_lView:n}of this.allViews){if(!t&&!kg(n))continue;PM(n,t&&!this.zonelessEnabled?0:1),e=!0}if(this.dirtyFlags&=-5,this.syncDirtyFlagsWithViews(),this.dirtyFlags&23)return}e||(this._rendererFactory?.begin?.(),this._rendererFactory?.end?.()),this.dirtyFlags&8&&(this.dirtyFlags&=-9,this.afterRenderManager.execute()),this.syncDirtyFlagsWithViews()}syncDirtyFlagsWithViews(){if(this.allViews.some(({_lView:e})=>kg(e))){this.dirtyFlags|=2;return}else this.dirtyFlags&=-8}attachView(e){let t=e;this._views.push(t),t.attachToAppRef(this)}detachView(e){let t=e;Hg(this._views,t),t.detachFromAppRef()}_loadComponent(e){this.attachView(e.hostView);try{this.tick()}catch(n){this.internalErrorHandler(n)}this.components.push(e),this._injector.get(op,[]).forEach(n=>n(e))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(e=>e()),this._views.slice().forEach(e=>e.destroy())}finally{this._destroyed=!0,this._views=[],this._destroyListeners=[]}}onDestroy(e){return this._destroyListeners.push(e),()=>Hg(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new X(406,!1);let e=this._injector;e.destroy&&!e.destroyed&&e.destroy()}get viewCount(){return this._views.length}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();function qG(i){return i===void 0||typeof i==`string`||i instanceof Element?{hostElement:i}:i}function Hg(i,r){let e=i.indexOf(r);e>-1&&i.splice(e,1)}function oc(i,r){let e=Ie();if(kn(e,ta(),r)){let n=Jt(),o=zs();if(h_(o,n,e,i,r))ea(o)&&TM(e,o.index);else{let s=pr(o,e);EM(e[Zt],s,null,o.value,i,r,null)}}return oc}function B(i,r,e,t){let n=Ie();if(kn(n,ta(),r)){Jt();uH(zs(),n,i,r,e,t)}return B}function FS(){return Ie()[Gn][Pi]}var B1=class{destroy(r){}updateValue(r,e){}swap(r,e){let t=Math.min(r,e),n=Math.max(r,e),o=this.detach(n);if(n-t>1){let a=this.detach(t);this.attach(t,o),this.attach(n,a)}else this.attach(t,o)}move(r,e){this.attach(e,this.detach(r))}};function l1(i,r,e,t,n){return i===e&&Object.is(r,t)?1:Object.is(n(i,r),n(e,t))?-1:0}function QG(i,r,e,t){let n,o,a=0,s=i.length-1;if(Array.isArray(r)){We(t);let c=r.length-1;for(We(null);a<=s&&a<=c;){let d=i.at(a),p=r[a],f=l1(a,d,a,p,e);if(f!==0){f<0&&i.updateValue(a,p),a++;continue}let v=i.at(s),y=r[c],T=l1(s,v,c,y,e);if(T!==0){T<0&&i.updateValue(s,y),s--,c--;continue}let M=e(a,d),F=e(s,v),A=e(a,p);if(Object.is(A,F)){let W=e(c,y);Object.is(W,M)?(i.swap(a,s),i.updateValue(s,y),c--,s--):i.move(s,a),i.updateValue(a,p),a++;continue}if(n??=new t_,o??=yk(i,a,s,e),H1(i,n,a,A))i.updateValue(a,p),a++,s++;else if(o.has(A))n.set(M,i.detach(a)),s--;else{let W=i.create(a,r[a]);i.attach(a,W),a++,s++}}for(;a<=c;)vk(i,n,e,a,r[a]),a++}else if(r!=null){We(t);let c=r[Symbol.iterator]();We(null);let d=c.next();for(;!d.done&&a<=s;){let p=i.at(a),f=d.value,v=l1(a,p,a,f,e);if(v!==0)v<0&&i.updateValue(a,f),a++,d=c.next();else{n??=new t_,o??=yk(i,a,s,e);let y=e(a,f);if(H1(i,n,a,y))i.updateValue(a,f),a++,s++,d=c.next();else if(!o.has(y))i.attach(a,i.create(a,f)),a++,s++,d=c.next();else{let T=e(a,p);n.set(T,i.detach(a)),s--}}}for(;!d.done;)vk(i,n,e,i.length,d.value),d=c.next()}for(;a<=s;)i.destroy(i.detach(s--));n?.forEach(c=>{i.destroy(c)})}function H1(i,r,e,t){return r!==void 0&&r.has(t)?(i.attach(e,r.get(t)),r.delete(t),!0):!1}function vk(i,r,e,t,n){if(H1(i,r,t,e(t,n)))i.updateValue(t,n);else{let o=i.create(t,n);i.attach(t,o)}}function yk(i,r,e,t){let n=new Set;for(let o=r;o<=e;o++)n.add(t(o,i.at(o)));return n}var t_=class{kvMap=new Map;_vMap=void 0;has(r){return this.kvMap.has(r)}delete(r){if(!this.has(r))return!1;let e=this.kvMap.get(r);return this._vMap!==void 0&&this._vMap.has(e)?(this.kvMap.set(r,this._vMap.get(e)),this._vMap.delete(e)):this.kvMap.delete(r),!0}get(r){return this.kvMap.get(r)}set(r,e){if(this.kvMap.has(r)){let t=this.kvMap.get(r);this._vMap===void 0&&(this._vMap=new Map);let n=this._vMap;for(;n.has(t);)t=n.get(t);n.set(t,e)}else this.kvMap.set(r,e)}forEach(r){for(let[e,t]of this.kvMap)if(r(t,e),this._vMap!==void 0){let n=this._vMap;for(;n.has(t);)t=n.get(t),r(t,e)}}};function b(i,r,e,t,n,o,a,s){nr(`NgControlFlow`);let l=Ie(),c=Jt();return $g(l,c,i,r,e,t,n,Yr(c.consts,o),256,a,s),PS}function PS(i,r,e,t,n,o,a,s){nr(`NgControlFlow`);let l=Ie(),c=Jt();return $g(l,c,i,r,e,t,n,Yr(c.consts,o),512,a,s),PS}function S(i,r){nr(`NgControlFlow`);let e=Ie(),t=ta(),n=e[t]!==jn?e[t]:-1,o=n!==-1?i_(e,Xt+n):void 0,a=0;if(kn(e,t,i)){let s=We(null);try{if(o!==void 0&&HM(o,a),i!==-1){let l=Xt+i,c=i_(e,l),d=W1(e[je],l),p=UM(c,d,e);ep(c,Jg(e,d,r,{dehydratedView:p}),a,Ed(d,p))}}finally{We(s)}}else if(o!==void 0){let s=BM(o,a);s!==void 0&&(s[Pi]=r)}}var G1=class{lContainer;$implicit;$index;constructor(r,e,t){this.lContainer=r,this.$implicit=e,this.$index=t}get $count(){return this.lContainer.length-Ei}};function ac(i){return i}function At(i,r){return r}var U1=class{hasEmptyBlock;trackByFn;liveCollection;constructor(r,e,t){this.hasEmptyBlock=r,this.trackByFn=e,this.liveCollection=t}};function _e(i,r,e,t,n,o,a,s,l,c,d,p,f){nr(`NgControlFlow`);let v=Ie(),y=Jt(),T=l!==void 0,M=Ie(),A=new U1(T,s?a.bind(M[Gn][Pi]):a);M[Xt+i]=A,$g(v,y,i+1,r,e,t,n,Yr(y.consts,o),256),T&&$g(v,y,i+2,l,c,d,p,Yr(y.consts,f),512)}var j1=class extends B1{lContainer;hostLView;templateTNode;operationsCounter=void 0;needsIndexUpdate=!1;constructor(r,e,t){super(),this.lContainer=r,this.hostLView=e,this.templateTNode=t}get length(){return this.lContainer.length-Ei}at(r){return this.getLView(r)[Pi].$implicit}attach(r,e){let t=e[Hl];this.needsIndexUpdate||=r!==this.length,ep(this.lContainer,e,r,Ed(this.templateTNode,t)),KG(this.lContainer,r)}detach(r){return this.needsIndexUpdate||=r!==this.length-1,YG(this.lContainer,r),ZG(this.lContainer,r)}create(r,e){let t=$f(this.lContainer,this.templateTNode.tView.ssrId);return Jg(this.hostLView,this.templateTNode,new G1(this.lContainer,e,r),{dehydratedView:t})}destroy(r){d_(r[je],r)}updateValue(r,e){this.getLView(r)[Pi].$implicit=e}reset(){this.needsIndexUpdate=!1}updateIndexes(){if(this.needsIndexUpdate)for(let r=0;r0){let o=t[Yo];VB(o,n),Gs.delete(t[Xo]),n.detachedLeaveAnimationFns=void 0}}function YG(i,r){if(i.length<=Ei)return;let t=i[Ei+r],n=t?t[Jo]:void 0;n&&n.leave&&n.leave.size>0&&(n.detachedLeaveAnimationFns=[])}function ZG(i,r){return jg(i,r)}function XG(i,r){return BM(i,r)}function W1(i,r){return _f(i,r)}function x(i,r,e){let t=Ie();if(kn(t,ta(),r)){Jt();NM(zs(),t,i,r,t[Zt],e)}return x}function $1(i,r,e,t,n){h_(r,i,e,n?`class`:`style`,t)}function h(i,r,e,t){let n=Ie(),o=n[je],a=i+Xt,s=o.firstCreatePass?NS(a,n,2,r,vS,bf(),e,t):o.data[a];if(ea(s)){let l=n[fo].tracingService;if(l&&l.componentCreate){let c=o.data[s.directiveStart+s.componentOffset];return l.componentCreate($M(c),()=>(bk(i,r,n,s,t),h))}}return bk(i,r,n,s,t),h}function bk(i,r,e,t,n){if(yS(t,e,i,r,m5),bd(t)){let o=e[je];p_(o,e,t),iS(o,t,e)}n!=null&&Xg(e,t)}function m(){let i=Jt(),e=bS(an());return i.firstCreatePass&&DS(i,e),Gb(e)&&Ub(),Bb(),e.classesWithoutHost!=null&&v9(e)&&$1(i,e,Ie(),e.classesWithoutHost,!0),e.stylesWithoutHost!=null&&y9(e)&&$1(i,e,Ie(),e.stylesWithoutHost,!1),m}function R(i,r,e,t){return h(i,r,e,t),m(),R}function Oi(i,r,e,t){let n=Ie(),o=n[je],a=i+Xt,s=o.firstCreatePass?nG(a,o,2,r,e,t):o.data[a];return yS(s,n,i,r,m5),t!=null&&Xg(n,s),Oi}function Vi(){return Gb(bS(an()))&&Ub(),Bb(),Vi}function sc(i,r,e,t){return Oi(i,r,e,t),Vi(),sc}var m5=(i,r,e,t,n)=>(Rg(!0),aM(r[Zt],t,Zb()));function It(i,r,e){let t=Ie(),n=t[je],o=i+Xt,a=n.firstCreatePass?NS(o,t,8,`ng-container`,vS,bf(),r,e):n.data[o];if(yS(a,t,i,`ng-container`,JG),bd(a)){let s=t[je];p_(s,t,a),iS(s,a,t)}return e!=null&&Xg(t,a),It}function Nt(){let i=Jt(),e=bS(an());return i.firstCreatePass&&DS(i,e),Nt}function J(i,r,e){return It(i,r,e),Nt(),J}var JG=(i,r,e,t,n)=>(Rg(!0),gB(r[Zt],``));function j(){return Ie()}function So(i,r,e){let t=Ie();if(kn(t,ta(),r)){Jt();DM(zs(),t,i,r,t[Zt],e)}return So}var Lg=void 0;function eU(i){let r=Math.floor(Math.abs(i)),e=i.toString().replace(/^[^.]*\.?/,``).length;return r===1&&e===0?1:5}var tU=[`en`,[[`a`,`p`],[`AM`,`PM`]],[[`AM`,`PM`]],[[`S`,`M`,`T`,`W`,`T`,`F`,`S`],[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`],[`Su`,`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`]],Lg,[[`J`,`F`,`M`,`A`,`M`,`J`,`J`,`A`,`S`,`O`,`N`,`D`],[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`]],Lg,[[`B`,`A`],[`BC`,`AD`],[`Before Christ`,`Anno Domini`]],0,[6,0],[`M/d/yy`,`MMM d, y`,`MMMM d, y`,`EEEE, MMMM d, y`],[`h:mm a`,`h:mm:ss a`,`h:mm:ss a z`,`h:mm:ss a zzzz`],[`{1}, {0}`,Lg,Lg,Lg],[`.`,`,`,`;`,`%`,`+`,`-`,`E`,`×`,`‰`,`∞`,`NaN`,`:`],[`#,##0.###`,`#,##0%`,`¤#,##0.00`,`#E0`],`USD`,`$`,`US Dollar`,{},`ltr`,eU];var c1=Object.create(null);function Rn(i){let r=iU(i),e=Sk(r);if(e)return e;let t=r.split(`-`)[0];if(e=Sk(t),e)return e;if(t===`en`)return tU;throw new X(701,!1)}function OS(i){return Rn(i)[Di.CurrencyCode]||null}function Sk(i){if(!(i in c1)){let r=on.ng&&on.ng.common&&on.ng.common.locales&&on.ng.common.locales[i];return r!==void 0&&(c1[i]=r),r}return c1[i]}var Di={LocaleId:0,DayPeriodsFormat:1,DayPeriodsStandalone:2,DaysFormat:3,DaysStandalone:4,MonthsFormat:5,MonthsStandalone:6,Eras:7,FirstDayOfWeek:8,WeekendRange:9,DateFormat:10,TimeFormat:11,DateTimeFormat:12,NumberSymbols:13,NumberFormats:14,CurrencyCode:15,CurrencySymbol:16,CurrencyName:17,Currencies:18,Directionality:19,PluralCase:20,ExtraData:21};function iU(i){return i.toLowerCase().replace(/_/g,`-`)}var ap=`en-US`;var nU=`USD`;function f5(i){typeof i==`string`&&i.toLowerCase().replace(/_/g,`-`)}function E(i,r,e){let t=Ie(),n=Jt(),o=an();return _5(n,t,t[Zt],o,i,r,e),E}function Od(i,r,e){let t=Ie(),n=Jt(),o=an();return(o.type&3||e)&&IS(o,n,t,e,t[Zt],i,r,Zl(o,t,r)),Od}function _5(i,r,e,t,n,o,a){let s=!0,l=null;if((t.type&3||a)&&(l??=Zl(t,r,o),IS(t,i,r,a,e,n,o,l)&&(s=!1)),s){let c=t.outputs?.[n],d=t.hostDirectiveOutputs?.[n];if(d&&d.length)for(let p=0;p>17&32767}function sU(i){return(i&2)==2}function lU(i,r){return i&131071|r<<17}function q1(i){return i|2}function Rd(i){return(i&131068)>>2}function d1(i,r){return i&-131069|r<<2}function cU(i){return(i&1)===1}function Q1(i){return i|1}function dU(i,r,e,t,n,o){let a=o?r.classBindings:r.styleBindings,s=ic(a),l=Rd(a);i[t]=e;let c=!1,d;if(Array.isArray(e)){let p=e;d=p[1],(d===null||fd(p,d)>0)&&(c=!0)}else d=e;if(n)if(l!==0){let f=ic(i[s+1]);i[t+1]=Of(f,s),f!==0&&(i[f+1]=d1(i[f+1],t)),i[s+1]=lU(i[s+1],t)}else i[t+1]=Of(s,0),s!==0&&(i[s+1]=d1(i[s+1],t)),s=t;else i[t+1]=Of(l,0),s===0?s=t:i[l+1]=d1(i[l+1],t),l=t;c&&(i[t+1]=q1(i[t+1])),wk(i,d,t,!0),wk(i,d,t,!1),uU(r,d,i,t,o),a=Of(s,l),o?r.classBindings=a:r.styleBindings=a}function uU(i,r,e,t,n){let o=n?i.residualClasses:i.residualStyles;o!=null&&typeof r==`string`&&fd(o,r)>=0&&(e[t+1]=Q1(e[t+1]))}function wk(i,r,e,t){let n=i[e+1],o=r===null,a=t?ic(n):Rd(n),s=!1;for(;a!==0&&(s===!1||o);){let l=i[a],c=i[a+1];gU(l,r)&&(s=!0,i[a+1]=t?Q1(c):q1(c)),a=t?ic(c):Rd(c)}s&&(i[e+1]=t?q1(n):Q1(n))}function gU(i,r){return i===null||r==null||(Array.isArray(i)?i[1]:i)===r?!0:Array.isArray(i)&&typeof r==`string`?fd(i,r)>=0:!1}var yo={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function pU(i){return i.substring(yo.key,yo.keyEnd)}function hU(i){return mU(i),x5(i,v5(i,0,yo.textEnd))}function x5(i,r){let e=yo.textEnd;return e===r?-1:(r=yo.keyEnd=fU(i,yo.key=r,e),v5(i,r,e))}function mU(i){yo.key=0,yo.keyEnd=0,yo.value=0,yo.valueEnd=0,yo.textEnd=i.length}function v5(i,r,e){for(;r32;)r++;return r}function re(i,r,e){return y5(i,r,e,!1),re}function ee(i,r){return y5(i,r,null,!0),ee}function jt(i){xU(CU,_U,i,!0)}function _U(i,r){for(let e=hU(r);e>=0;e=x5(r,e))gf(i,pU(r),!0)}function y5(i,r,e,t){let n=Ie(),o=Jt(),a=Sf(2);if(o.firstUpdatePass&&S5(o,i,a,t),r!==jn&&kn(n,a,r)){let s=o.data[Zr$1()];w5(o,s,n,n[Zt],i,n[a+1]=NU(r,e),t,a)}}function xU(i,r,e,t){let n=Jt(),o=Sf(2);n.firstUpdatePass&&S5(n,null,o,t);let a=Ie();if(e!==jn&&kn(a,o,e)){let s=n.data[Zr$1()];if(C5(s,t)&&!b5(n,o)){let l=t?s.classesWithoutHost:s.stylesWithoutHost;l!==null&&(e=af(l,e||``)),$1(n,s,a,e,t)}else IU(n,s,a,a[Zt],a[o+1],a[o+1]=wU(i,r,e),t,o)}}function b5(i,r){return r>=i.expandoStartIndex}function S5(i,r,e,t){let n=i.data;if(n[e+1]===null){let o=n[Zr$1()],a=b5(i,e);C5(o,t)&&r===null&&!a&&(r=!1),r=vU(n,o,r,t),dU(n,o,r,e,a,t)}}function vU(i,r,e,t){let n=TE(i),o=t?r.residualClasses:r.residualStyles;if(n===null)(t?r.classBindings:r.styleBindings)===0&&(e=u1(null,i,r,e,t),e=qg(e,r.attrs,t),o=null);else{let a=r.directiveStylingLast;if(a===-1||i[a]!==n)if(e=u1(n,i,r,e,t),o===null){let l=yU(i,r,t);l!==void 0&&Array.isArray(l)&&(l=u1(null,i,r,l[1],t),l=qg(l,r.attrs,t),bU(i,r,t,l))}else o=SU(i,r,t)}return o!==void 0&&(t?r.residualClasses=o:r.residualStyles=o),e}function yU(i,r,e){let t=e?r.classBindings:r.styleBindings;if(Rd(t)!==0)return i[ic(t)]}function bU(i,r,e,t){let n=e?r.classBindings:r.styleBindings;i[ic(n)]=t}function SU(i,r,e){let t,n=r.directiveEnd;for(let o=1+r.directiveStylingLast;o0;){let l=i[n],c=Array.isArray(l),d=c?l[1]:l,p=d===null,f=e[n+1];f===jn&&(f=p?Bn:void 0);let v=p?pf(f,t):d===t?f:void 0;if(c&&!n_(v)&&(v=pf(l,t)),n_(v)&&(s=v,a))return s;let y=i[n+1];n=a?ic(y):Rd(y)}if(r!==null){let l=o?r.residualClasses:r.residualStyles;l!=null&&(s=pf(l,t))}return s}function n_(i){return i!==void 0}function NU(i,r){return i==null||i===``||(typeof r==`string`?i=kr(i)+r:typeof i==`object`&&(i=bg(kr(i)))),i}function C5(i,r){return(i.flags&(r?8:16))!==0}function D(i,r=``){let e=Ie(),t=Jt(),n=i+Xt,o=t.firstCreatePass?nc(t,n,1,r,null):t.data[n],a=DU(t,e,o,r);e[n]=a,Tf()&&hS(t,e,a,o),Ql(o,!1)}var DU=(i,r,e,t)=>(Rg(!0),dB(r[Zt],t));function I5(i,r,e,t=``){return kn(i,ta(),e)?r+As(e)+t:jn}function N5(i,r,e,t,n,o=``){let s=kd(i,wE(),e,n);return Sf(2),s?r+As(e)+t+As(n)+o:jn}function Q(i){return q(``,i),Q}function q(i,r,e){let t=Ie(),n=I5(t,i,r,e);return n!==jn&&D5(t,Zr$1(),n),q}function Vd(i,r,e,t,n){let o=Ie(),a=N5(o,i,r,e,t,n);return a!==jn&&D5(o,Zr$1(),a),Vd}function D5(i,r,e){let t=Pb(r,i);uB(i[Zt],t,e)}function Ke(i,r,e){Rf(r)&&(r=r());let t=Ie();if(kn(t,ta(),r)){Jt();NM(zs(),t,i,r,t[Zt],e)}return Ke}function Ye(i,r){let e=Rf(i);return e&&i.set(r),e}function Je(i,r){let e=Ie(),t=Jt(),n=an();return _5(t,e,e[Zt],n,i,r),Je}var T5={};function C_(i){nr(`NgLet`);let r=Jt(),e=Ie(),t=i+Xt;return Ql(nc(r,t,128,null,null),!1),Eg(r,e,t,T5),C_}function LS(i){return Eg(Jt(),Ie(),Zr$1(),i),i}function Ld(i){let e=Vs(qb(),Xt+i);if(e===T5)throw new X(314,!1);return e}function wo(i){return kn(Ie(),ta(),i)?As(i):jn}function zd(i,r,e=``){return I5(Ie(),i,r,e)}function zS(i,r,e,t,n=``){return N5(Ie(),i,r,e,t,n)}function Ik(i,r,e){let t=Jt();t.firstCreatePass&&E5(r,t.data,t.blueprint,_o(i),e)}function E5(i,r,e,t,n){if(i=tn(i),Array.isArray(i))for(let o=0;o>20;if(zl(i)||!i.multi){let v=new Xl(c,n,ct,null),y=p1(l,r,n?d:d+f,p);y===-1?(f1(jf(s,a),o,l),g1(o,i,r.length),r.push(l),s.directiveStart++,s.directiveEnd++,n&&(s.providerIndexes+=1048576),e.push(v),a.push(v)):(e[y]=v,a[y]=v)}else{let v=p1(l,r,d+f,p),y=p1(l,r,d,d+f),T=v>=0&&e[v],M=y>=0&&e[y];if(n&&!M||!n&&!T){f1(jf(s,a),o,l);let F=kU(n?EU:TU,e.length,n,t,c,i);!n&&M&&(e[y].providerFactory=F),g1(o,i,r.length,0),r.push(l),s.directiveStart++,s.directiveEnd++,n&&(s.providerIndexes+=1048576),e.push(F),a.push(F)}else{let F=k5(e[n?y:v],c,!n&&t);g1(o,i,v>-1?v:y,F)}!n&&t&&M&&e[y].componentProviders++}}}function g1(i,r,e,t){let n=zl(r),o=uE(r);if(n||o){let l=(o?tn(r.useClass):r).prototype.ngOnDestroy;if(l){let c=i.destroyHooks||(i.destroyHooks=[]);if(!n&&r.multi){let d=c.indexOf(e);d===-1?c.push(e,[t,l]):c[d+1].push(t,l)}else c.push(e,l)}}}function k5(i,r,e){return e&&i.componentProviders++,i.multi.push(r)-1}function p1(i,r,e,t){for(let n=e;n{e.providersResolver=(t,n)=>Ik(t,n?n(i):i,!1),r&&(e.viewProvidersResolver=(t,n)=>Ik(t,n?n(r):r,!0))}}function aa(i,r){let e=Un()+i,t=Ie();return t[e]===jn?oa(t,e,r()):tp(t,e)}function rt(i,r,e){return M5(Ie(),Un(),i,r,e)}function Wn(i,r,e,t){return R5(Ie(),Un(),i,r,e,t)}function sa(i,r,e,t,n){return A5(Ie(),Un(),i,r,e,t,n)}function hr(i,r,e,t,n,o,a){return F5(Ie(),Un(),i,r,e,t,n,o)}function Qi(i,r,e,t,n,o,a){let s=Un()+i,l=Ie(),c=Md(l,s,e,t,n,o);return kn(l,s+4,a)||c?oa(l,s+5,r(e,t,n,o,a)):tp(l,s+5)}function pn(i,r,e,t,n,o,a,s){let l=Un()+i,c=Ie(),d=Md(c,l,e,t,n,o);return kd(c,l+4,a,s)||d?oa(c,l+6,r(e,t,n,o,a,s)):tp(c,l+6)}function js(i,r,e,t,n,o,a,s,l){let c=Un()+i,d=Ie(),p=Md(d,c,e,t,n,o);return QM(d,c+4,a,s,l)||p?oa(d,c+7,r(e,t,n,o,a,s,l)):tp(d,c+7)}function I_(i,r,e,t,n,o,a,s,l,c){let d=Un()+i,p=Ie(),f=Md(p,d,e,t,n,o);return Md(p,d+4,a,s,l,c)||f?oa(p,d+8,r(e,t,n,o,a,s,l,c)):tp(p,d+8)}function sp(i,r,e){return P5(Ie(),Un(),i,r,e)}function lp(i,r){let e=i[r];return e===jn?void 0:e}function M5(i,r,e,t,n,o){let a=r+e;return kn(i,a,n)?oa(i,a+1,o?t.call(o,n):t(n)):lp(i,a+1)}function R5(i,r,e,t,n,o,a){let s=r+e;return kd(i,s,n,o)?oa(i,s+2,a?t.call(a,n,o):t(n,o)):lp(i,s+2)}function A5(i,r,e,t,n,o,a,s){let l=r+e;return QM(i,l,n,o,a)?oa(i,l+3,s?t.call(s,n,o,a):t(n,o,a)):lp(i,l+3)}function F5(i,r,e,t,n,o,a,s,l){let c=r+e;return Md(i,c,n,o,a,s)?oa(i,c+4,l?t.call(l,n,o,a,s):t(n,o,a,s)):lp(i,c+4)}function P5(i,r,e,t,n,o){let a=r+e,s=!1;for(let l=0;l=0;e--){let t=r[e];if(i===t.name)return t}}function yt(i,r,e){let t=i+Xt,n=Ie(),o=Vs(n,t);return cp(n,t)?M5(n,Un(),r,o.transform,e,o):o.transform(e)}function ki(i,r,e,t){let n=i+Xt,o=Ie(),a=Vs(o,n);return cp(o,n)?R5(o,Un(),r,a.transform,e,t,a):a.transform(e,t)}function Ue(i,r,e,t,n){let o=i+Xt,a=Ie(),s=Vs(a,o);return cp(a,o)?A5(a,Un(),r,s.transform,e,t,n,s):s.transform(e,t,n)}function Li(i,r,e,t,n,o){let a=i+Xt,s=Ie(),l=Vs(s,a);return cp(s,a)?F5(s,Un(),r,l.transform,e,t,n,o,l):l.transform(e,t,n,o)}function ot(i,r,e){let t=i+Xt,n=Ie(),o=Vs(n,t);return cp(n,t)?P5(n,Un(),r,o.transform,e,o):o.transform.apply(o,e)}function cp(i,r){return i[je].data[r].pure}function Y(i,r){return m_(i,r)}var O5=(()=>{class i{applicationErrorHandler=_(Xr);appRef=_(Jr);taskService=_(ia);ngZone=_(Qe);zonelessEnabled=_(Og);tracing=_(ra,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new yi;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(vg):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(_(i1,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{let e=this.taskService.add();if(!this.runningTick&&(this.cleanup(),!this.zonelessEnabled||this.appRef.includeAllTestViews)){this.taskService.remove(e);return}this.switchToMicrotaskScheduler(),this.taskService.remove(e)})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()}))}switchToMicrotaskScheduler(){this.ngZone.runOutsideAngular(()=>{let e=this.taskService.add();this.useMicrotaskScheduler=!0,queueMicrotask(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(e)})})}notify(e){if(!this.zonelessEnabled&&e===5)return;switch(e){case 0:case 2:this.appRef.dirtyFlags|=2;break;case 3:case 4:case 5:case 1:this.appRef.dirtyFlags|=4;break;case 6:this.appRef.dirtyFlags|=2;break;case 12:this.appRef.dirtyFlags|=16;break;case 13:this.appRef.dirtyFlags|=2;break;case 11:break;default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick())return;let t=this.useMicrotaskScheduler?OE:Jb;this.pendingRenderTaskId=this.taskService.add(),this.scheduleInRootZone?this.cancelScheduledCallback=Zone.root.run(()=>t(()=>this.tick())):this.cancelScheduledCallback=this.ngZone.runOutsideAngular(()=>t(()=>this.tick()))}shouldScheduleTick(){return!(this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(vg+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let e=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(t){this.applicationErrorHandler(t)}finally{this.taskService.remove(e),this.cleanup()}}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let e=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(e)}}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();function BS(){return nr(`NgZoneless`),Ba([...HS(),[]])}function HS(){return[{provide:La,useExisting:O5},{provide:Qe,useClass:yg},{provide:Og,useValue:!0}]}var GS=(()=>{class i{compileModuleSync(e){return new e_(e)}compileModuleAsync(e){return Promise.resolve(this.compileModuleSync(e))}clearCache(){}clearCacheFor(e){}getModuleId(e){}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();function RU(){return typeof $localize<`u`&&$localize.locale||ap}var ln=new le(``,{factory:()=>_(ln,{optional:!0,skipSelf:!0})||RU()});var US=new le(``,{factory:()=>nU});var N_=class{destroyed=!1;listeners=null;errorHandler=_($r,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=_(Mt);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(r){if(this.destroyed)throw new X(953,!1);return(this.listeners??=[]).push(r),{unsubscribe:()=>{let e=this.listeners?this.listeners.indexOf(r):-1;e>-1&&(this.isEmitting?(this.hasNullListeners=!0,this.listeners[e]=null):this.listeners.splice(e,1))}}}emit(r){if(this.destroyed){console.warn(Dr(953,!1));return}if(this.listeners===null)return;this.isEmitting=!0;let e=We(null);try{for(let t of this.listeners)try{t!==null&&t(r)}catch(n){this.errorHandler?.handleError(n)}}finally{this.hasNullListeners&&(this.hasNullListeners=!1,this.listeners&&AU(this.listeners)),We(e),this.isEmitting=!1}}};function AU(i){let r=i.length-1;for(;r>-1;)i[r]===null&&i.splice(r,1),r--}function Co(i,r){return sg(i,r?.equal)}function pi(i){return xT(i)}(class i extends Error{_brand;constructor(r){super(r)}static IDLE=new i(`IDLE`);static LOADING=new i(`LOADING`)});var FU=i=>i;function D_(i,r){if(typeof i==`function`)return L5(By(i,FU,r?.equal),r?.debugName,r?.set);else return L5(By(i.source,i.computation,i.equal),i.debugName,i.set)}function L5(i,r,e){let t=i[$i],n=i;if(e!==void 0){let o=a=>Hy(t,a);n.set=a=>e(a,o),n.update=a=>e(a(pi(i)),o)}else n.set=o=>Hy(t,o),n.update=o=>_T(t,o);return n.asReadonly=Ef.bind(i),n}var $5=Symbol(`InputSignalNode#UNSET`);var UU=s(r({},Cm),{transformFn:void 0,applyValueToInputSignal(i,r){kl(i,r)}});function q5(i,r){let e=Object.create(UU);e.value=i,e.transformFn=r?.transform;function t(){if(Nl(e),e.value===$5)throw new X(-950,null);return e.value}return t[$i]=e,t}function JS(i){return jU(i)?i.default:i}function jU(i){return i&&typeof i==`object`&&`default`in i}function up(i){return new N_}function z5(i,r){return q5(i,r)}function WU(i){return q5($5,i)}var lc=(z5.required=WU,z5);function B5(i,r){return s5(r)}function $U(i,r){return l5(r)}var Io=(B5.required=$U,B5);var Q5=(()=>{class i{constructor(e){}static ɵfac=function(t){return new(t||i)(Te(Jr))};static ɵmod=Me({type:i});static ɵinj=Ee({})}return i})();var jS=class{supports(r){return CS(r)}create(r){return new WS(r)}};var QU=(i,r)=>r;var WS=class{length=0;collection;_linkedRecords=null;_unlinkedRecords=null;_previousItHead=null;_itHead=null;_itTail=null;_additionsHead=null;_additionsTail=null;_movesHead=null;_movesTail=null;_removalsHead=null;_removalsTail=null;_identityChangesHead=null;_identityChangesTail=null;_trackByFn;constructor(r){this._trackByFn=r||QU}forEachItem(r){let e;for(e=this._itHead;e!==null;e=e._next)r(e)}forEachOperation(r){let e=this._itHead,t=this._removalsHead,n=0,o=null;for(;e||t;){let a=!t||e&&e.currentIndex{a=this._trackByFn(n,s),e===null||!Object.is(e.trackById,a)?(e=this._mismatch(e,s,a,n),t=!0):(t&&(e=this._verifyReinsertion(e,s,a,n)),Object.is(e.item,s)||this._addIdentityChange(e,s)),e=e._next,n++}),this.length=n;return this._truncate(e),this.collection=r,this.isDirty}get isDirty(){return this._additionsHead!==null||this._movesHead!==null||this._removalsHead!==null||this._identityChangesHead!==null}_reset(){if(this.isDirty){let r;for(r=this._previousItHead=this._itHead;r!==null;r=r._next)r._nextPrevious=r._next;for(r=this._additionsHead;r!==null;r=r._nextAdded)r.previousIndex=r.currentIndex;for(this._additionsHead=this._additionsTail=null,r=this._movesHead;r!==null;r=r._nextMoved)r.previousIndex=r.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(r,e,t,n){let o;return r===null?o=this._itTail:(o=r._prev,this._remove(r)),r=this._unlinkedRecords===null?null:this._unlinkedRecords.get(t,null),r!==null?(Object.is(r.item,e)||this._addIdentityChange(r,e),this._reinsertAfter(r,o,n)):(r=this._linkedRecords===null?null:this._linkedRecords.get(t,n),r!==null?(Object.is(r.item,e)||this._addIdentityChange(r,e),this._moveAfter(r,o,n)):r=this._addAfter(new $S(e,t),o,n)),r}_verifyReinsertion(r,e,t,n){let o=this._unlinkedRecords===null?null:this._unlinkedRecords.get(t,null);return o!==null?r=this._reinsertAfter(o,r._prev,n):r.currentIndex!=n&&(r.currentIndex=n,this._addToMoves(r,n)),r}_truncate(r){for(;r!==null;){let e=r._next;this._addToRemovals(this._unlink(r)),r=e}this._unlinkedRecords!==null&&this._unlinkedRecords.clear(),this._additionsTail!==null&&(this._additionsTail._nextAdded=null),this._movesTail!==null&&(this._movesTail._nextMoved=null),this._itTail!==null&&(this._itTail._next=null),this._removalsTail!==null&&(this._removalsTail._nextRemoved=null),this._identityChangesTail!==null&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(r,e,t){this._unlinkedRecords!==null&&this._unlinkedRecords.remove(r);let n=r._prevRemoved,o=r._nextRemoved;return n===null?this._removalsHead=o:n._nextRemoved=o,o===null?this._removalsTail=n:o._prevRemoved=n,this._insertAfter(r,e,t),this._addToMoves(r,t),r}_moveAfter(r,e,t){return this._unlink(r),this._insertAfter(r,e,t),this._addToMoves(r,t),r}_addAfter(r,e,t){return this._insertAfter(r,e,t),this._additionsTail===null?this._additionsTail=this._additionsHead=r:this._additionsTail=this._additionsTail._nextAdded=r,r}_insertAfter(r,e,t){let n=e===null?this._itHead:e._next;return r._next=n,r._prev=e,n===null?this._itTail=r:n._prev=r,e===null?this._itHead=r:e._next=r,this._linkedRecords===null&&(this._linkedRecords=new E_),this._linkedRecords.put(r),r.currentIndex=t,r}_remove(r){return this._addToRemovals(this._unlink(r))}_unlink(r){this._linkedRecords!==null&&this._linkedRecords.remove(r);let e=r._prev,t=r._next;return e===null?this._itHead=t:e._next=t,t===null?this._itTail=e:t._prev=e,r}_addToMoves(r,e){return r.previousIndex===e||(this._movesTail===null?this._movesTail=this._movesHead=r:this._movesTail=this._movesTail._nextMoved=r),r}_addToRemovals(r){return this._unlinkedRecords===null&&(this._unlinkedRecords=new E_),this._unlinkedRecords.put(r),r.currentIndex=null,r._nextRemoved=null,this._removalsTail===null?(this._removalsTail=this._removalsHead=r,r._prevRemoved=null):(r._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=r),r}_addIdentityChange(r,e){return r.item=e,this._identityChangesTail===null?this._identityChangesTail=this._identityChangesHead=r:this._identityChangesTail=this._identityChangesTail._nextIdentityChange=r,r}};var $S=class{item;trackById;currentIndex=null;previousIndex=null;_nextPrevious=null;_prev=null;_next=null;_prevDup=null;_nextDup=null;_prevRemoved=null;_nextRemoved=null;_nextAdded=null;_nextMoved=null;_nextIdentityChange=null;constructor(r,e){this.item=r,this.trackById=e}};var qS=class{_head=null;_tail=null;add(r){this._head===null?(this._head=this._tail=r,r._nextDup=null,r._prevDup=null):(this._tail._nextDup=r,r._prevDup=this._tail,r._nextDup=null,this._tail=r)}get(r,e){let t;for(t=this._head;t!==null;t=t._nextDup)if((e===null||e<=t.currentIndex)&&Object.is(t.trackById,r))return t;return null}remove(r){let e=r._prevDup,t=r._nextDup;return e===null?this._head=t:e._nextDup=t,t===null?this._tail=e:t._prevDup=e,this._head===null}};var E_=class{map=new Map;put(r){let e=r.trackById,t=this.map.get(e);t||(t=new qS,this.map.set(e,t)),t.add(r)}get(r,e){let t=r,n=this.map.get(t);return n?n.get(r,e):null}remove(r){let e=r.trackById;return this.map.get(e).remove(r)&&this.map.delete(e),r}get isEmpty(){return this.map.size===0}clear(){this.map.clear()}};function H5(i,r,e){let t=i.previousIndex;if(t===null)return t;let n=0;return e&&t{if(e&&e.key===n)this._maybeAddToChanges(e,t),this._appendAfter=e,e=e._next;else{let o=this._getOrCreateRecordForKey(n,t);e=this._insertBeforeOrAppend(e,o)}}),e){e._prev&&(e._prev._next=null),this._removalsHead=e;for(let t=e;t!==null;t=t._nextRemoved)t===this._mapHead&&(this._mapHead=null),this._records.delete(t.key),t._nextRemoved=t._next,t.previousValue=t.currentValue,t.currentValue=null,t._prev=null,t._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(r,e){if(r){let t=r._prev;return e._next=r,e._prev=t,r._prev=e,t&&(t._next=e),r===this._mapHead&&(this._mapHead=e),this._appendAfter=r,r}return this._appendAfter?(this._appendAfter._next=e,e._prev=this._appendAfter):this._mapHead=e,this._appendAfter=e,null}_getOrCreateRecordForKey(r,e){if(this._records.has(r)){let n=this._records.get(r);this._maybeAddToChanges(n,e);let o=n._prev,a=n._next;return o&&(o._next=a),a&&(a._prev=o),n._next=null,n._prev=null,n}let t=new YS(r);return this._records.set(r,t),t.currentValue=e,this._addToAdditions(t),t}_reset(){if(this.isDirty){let r;for(this._previousMapHead=this._mapHead,r=this._previousMapHead;r!==null;r=r._next)r._nextPrevious=r._next;for(r=this._changesHead;r!==null;r=r._nextChanged)r.previousValue=r.currentValue;for(r=this._additionsHead;r!=null;r=r._nextAdded)r.previousValue=r.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(r,e){Object.is(e,r.currentValue)||(r.previousValue=r.currentValue,r.currentValue=e,this._addToChanges(r))}_addToAdditions(r){this._additionsHead===null?this._additionsHead=this._additionsTail=r:(this._additionsTail._nextAdded=r,this._additionsTail=r)}_addToChanges(r){this._changesHead===null?this._changesHead=this._changesTail=r:(this._changesTail._nextChanged=r,this._changesTail=r)}_forEach(r,e){r instanceof Map?r.forEach(e):Object.keys(r).forEach(t=>e(r[t],t))}};var YS=class{key;previousValue=null;currentValue=null;_nextPrevious=null;_next=null;_prev=null;_nextAdded=null;_nextRemoved=null;_nextChanged=null;constructor(r){this.key=r}};function G5(){return new eo([new jS])}var eo=(()=>{class i{factories;static ɵprov=de({token:i,providedIn:`root`,factory:G5});constructor(e){this.factories=e}static create(e,t){if(t!=null){let n=t.factories.slice();e=e.concat(n)}return new i(e)}static extend(e){return{provide:i,useFactory:()=>{let t=_(i,{optional:!0,skipSelf:!0});return i.create(e,t||G5())}}}find(e){let t=this.factories.find(n=>n.supports(e));if(t!=null)return t;throw new X(901,!1)}}return i})();function U5(){return new ew([new QS])}var ew=(()=>{class i{static ɵprov=de({token:i,providedIn:`root`,factory:U5});factories;constructor(e){this.factories=e}static create(e,t){if(t){let n=t.factories.slice();e=e.concat(n)}return new i(e)}static extend(e){return{provide:i,useFactory:()=>{let t=_(i,{optional:!0,skipSelf:!0});return i.create(e,t||U5())}}}find(e){let t=this.factories.find(n=>n.supports(e));if(t)return t;throw new X(901,!1)}}return i})();var Ne=(()=>{class i{static __NG_ELEMENT_ID__=KU}return i})();function KU(i){return YU(an(),Ie(),(i&16)===16)}function YU(i,r,e){if(ea(i)&&!e){let t=Kr(i.index,r);return new Us(t,t)}else if(i.type&175){let t=r[Gn];return new Us(t,r)}return null}var ZS=new le(``);var ZU=new le(``);function dp(i){return!i.moduleRef}function XU(i){let r=dp(i)?i.r3Injector:i.moduleRef.injector,e=r.get(Qe);return e.run(()=>{dp(i)?i.r3Injector.resolveInjectorInitializers():i.moduleRef.resolveInjectorInitializers();let t=r.get(Xr),n;if(e.runOutsideAngular(()=>{n=e.onError.subscribe({next:t})}),dp(i)){let o=()=>r.destroy(),a=i.platformInjector.get(ZS);a.add(o),r.onDestroy(()=>{n.unsubscribe(),a.delete(o)})}else{let o=()=>i.moduleRef.destroy(),a=i.platformInjector.get(ZS);a.add(o),i.moduleRef.onDestroy(()=>{Hg(i.allPlatformModules,i.moduleRef),n.unsubscribe(),a.delete(o)})}return ej(t,e,()=>{let o=r.get(ia),a=o.add(),s=r.get(MS);return s.runInitializers(),s.donePromise.then(()=>{if(f5(r.get(ln,ap)||ap),!r.get(ZU,!0))return dp(i)?r.get(Jr):(i.allPlatformModules.push(i.moduleRef),i.moduleRef);if(dp(i)){let d=r.get(Jr);return i.rootComponent!==void 0&&d.bootstrap(i.rootComponent),d}else return JU?.(i.moduleRef,i.allPlatformModules),i.moduleRef}).finally(()=>{o.remove(a)})})})}var JU;function ej(i,r,e){try{let t=e();return qa(t)?t.catch(n=>{throw r.runOutsideAngular(()=>i(n)),n}):t}catch(t){throw r.runOutsideAngular(()=>i(t)),t}}var T_=null;function tj(i=[],r){return qt.create({name:r,providers:[{provide:Dg,useValue:`platform`},{provide:ZS,useValue:new Set([()=>T_=null])},...i]})}function ij(i=[]){if(T_)return T_;let r=tj(i);return T_=r,h5(),nj(r),r}function nj(i){let r=i.get(kf,null);qi(i,()=>{r?.forEach(e=>e())})}function K5(i){let{rootComponent:r,appProviders:e,platformProviders:t,platformRef:n}=i;ei(Gt.BootstrapApplicationStart);try{let o=n?.injector??ij(t);return XU({r3Injector:new Wg({providers:[HS(),LE,...e||[]],parent:o,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:o,rootComponent:r})}catch(o){return Promise.reject(o)}finally{ei(Gt.BootstrapApplicationEnd)}}function O(i){return typeof i==`boolean`?i:i!=null&&i!==`false`}function cc(i,r){let e=za(i),t=r.elementInjector||xd();return new ec(e).create(t,r.projectableNodes,r.hostElement,r.environmentInjector,r.directives,r.bindings)}function Y5(i){let r=za(i);if(!r)return null;let e=new ec(r);return{get selector(){return e.selector},get type(){return e.componentType},get inputs(){return e.inputs},get outputs(){return e.outputs},get ngContentSelectors(){return e.ngContentSelectors},get isStandalone(){return r.standalone},get isSignal(){return r.signals}}}function Z5(){return!1}var X5={production:!0};var J5=null;function Rr(){return J5}function tw(i){J5??=i}var gp=class{};var Qa=(()=>{class i{historyGo(e){throw new Error(``)}static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:()=>_(eR),providedIn:`platform`})}return i})();var iw=new le(``);var eR=(()=>{class i extends Qa{_location;_history;_doc=_($e);constructor(){super(),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return Rr().getBaseHref(this._doc)}onPopState(e){let t=Rr().getGlobalEventTarget(this._doc,`window`);return t.addEventListener(`popstate`,e,!1),()=>t.removeEventListener(`popstate`,e)}onHashChange(e){let t=Rr().getGlobalEventTarget(this._doc,`window`);return t.addEventListener(`hashchange`,e,!1),()=>t.removeEventListener(`hashchange`,e)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(e){this._location.pathname=e}pushState(e,t,n){this._history.pushState(e,t,n)}replaceState(e,t,n){this._history.replaceState(e,t,n)}forward(){this._history.forward()}back(){this._history.back()}historyGo(e=0){this._history.go(e)}getState(){return this._history.state}static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:()=>new i,providedIn:`platform`})}return i})();function k_(i,r){return i?r?i.endsWith(`/`)?r.startsWith(`/`)?i+r.slice(1):i+r:r.startsWith(`/`)?i+r:`${i}/${r}`:i:r}function tR(i){let r=i.search(/#|\?|$/);return i[r-1]===`/`?i.slice(0,r-1)+i.slice(r):i}function No(i){return i&&i[0]!==`?`?`?${i}`:i}var Ka=(()=>{class i{historyGo(e){throw new Error(``)}static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:()=>_(R_),providedIn:`root`})}return i})();var M_=new le(``);var R_=(()=>{class i extends Ka{_platformLocation;_baseHref;_removeListenerFns=[];constructor(e,t){super(),this._platformLocation=e,this._baseHref=t??this._platformLocation.getBaseHrefFromDOM()??_($e).location?.origin??``}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(e){this._removeListenerFns.push(this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e))}getBaseHref(){return this._baseHref}prepareExternalUrl(e){return k_(this._baseHref,e)}path(e=!1){let t=this._platformLocation.pathname+No(this._platformLocation.search),n=this._platformLocation.hash;return n&&e?`${t}${n}`:t}pushState(e,t,n,o){let a=this.prepareExternalUrl(n+No(o));this._platformLocation.pushState(e,t,a)}replaceState(e,t,n,o){let a=this.prepareExternalUrl(n+No(o));this._platformLocation.replaceState(e,t,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(e=0){this._platformLocation.historyGo?.(e)}static ɵfac=function(t){return new(t||i)(Te(Qa),Te(M_,8))};static ɵprov=de({token:i,factory:i.ɵfac,providedIn:`root`})}return i})();var Ws=(()=>{class i{_subject=new ce;_basePath;_locationStrategy;_urlChangeListeners=[];_urlChangeSubscription=null;constructor(e){this._locationStrategy=e;let t=this._locationStrategy.getBaseHref();this._basePath=aj(tR(iR(t))),this._locationStrategy.onPopState(n=>{this._subject.next({url:this.path(!0),pop:!0,state:n.state,type:n.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(e=!1){return this.normalize(this._locationStrategy.path(e))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(e,t=``){return this.path()==this.normalize(e+No(t))}normalize(e){return i.stripTrailingSlash(oj(this._basePath,iR(e)))}prepareExternalUrl(e){return e&&e[0]!==`/`&&(e=`/`+e),this._locationStrategy.prepareExternalUrl(e)}go(e,t=``,n=null){this._locationStrategy.pushState(n,``,e,t),this._notifyUrlChangeListeners(this.prepareExternalUrl(e+No(t)),n)}replaceState(e,t=``,n=null){this._locationStrategy.replaceState(n,``,e,t),this._notifyUrlChangeListeners(this.prepareExternalUrl(e+No(t)),n)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(e=0){this._locationStrategy.historyGo?.(e)}onUrlChange(e){return this._urlChangeListeners.push(e),this._urlChangeSubscription??=this.subscribe(t=>{this._notifyUrlChangeListeners(t.url,t.state)}),()=>{let t=this._urlChangeListeners.indexOf(e);this._urlChangeListeners.splice(t,1),this._urlChangeListeners.length===0&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(e=``,t){this._urlChangeListeners.forEach(n=>n(e,t))}subscribe(e,t,n){return this._subject.subscribe({next:e,error:t??void 0,complete:n??void 0})}static normalizeQueryParams=No;static joinWithSlash=k_;static stripTrailingSlash=tR;static ɵfac=function(t){return new(t||i)(Te(Ka))};static ɵprov=de({token:i,factory:()=>rj(),providedIn:`root`})}return i})();function rj(){return new Ws(Te(Ka))}function oj(i,r){if(!i||!r.startsWith(i))return r;let e=r.substring(i.length);return e===``||[`/`,`;`,`?`,`#`].includes(e[0])?e:r}function iR(i){return i.replace(/\/index\.html$/,``)}function aj(i){if(new RegExp(`^(https?:)?//`).test(i)){let[,e]=i.split(/\/\/[^\/]+/);return e}return i}var uw=(()=>{class i extends Ka{_platformLocation;_baseHref=``;_removeListenerFns=[];constructor(e,t){super(),this._platformLocation=e,t!=null&&(this._baseHref=t)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(e){this._removeListenerFns.push(this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e))}getBaseHref(){return this._baseHref}path(e=!1){let t=this._platformLocation.hash??`#`;return t.length>0?t.substring(1):t}prepareExternalUrl(e){let t=k_(this._baseHref,e);return t.length>0?`#`+t:t}pushState(e,t,n,o){let a=this.prepareExternalUrl(n+No(o))||this._platformLocation.pathname;this._platformLocation.pushState(e,t,a)}replaceState(e,t,n,o){let a=this.prepareExternalUrl(n+No(o))||this._platformLocation.pathname;this._platformLocation.replaceState(e,t,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(e=0){this._platformLocation.historyGo?.(e)}static ɵfac=function(t){return new(t||i)(Te(Qa),Te(M_,8))};static ɵprov=de({token:i,factory:i.ɵfac})}return i})();var sR={ADP:[void 0,void 0,0],AFN:[void 0,`؋`,0],ALL:[void 0,void 0,0],AMD:[void 0,`֏`,2],AOA:[void 0,`Kz`],ARS:[void 0,`$`],AUD:[`A$`,`$`],AZN:[void 0,`₼`],BAM:[void 0,`KM`],BBD:[void 0,`$`],BDT:[void 0,`৳`],BHD:[void 0,void 0,3],BIF:[void 0,void 0,0],BMD:[void 0,`$`],BND:[void 0,`$`],BOB:[void 0,`Bs`],BRL:[`R$`],BSD:[void 0,`$`],BWP:[void 0,`P`],BYN:[void 0,void 0,2],BYR:[void 0,void 0,0],BZD:[void 0,`$`],CAD:[`CA$`,`$`,2],CHF:[void 0,void 0,2],CLF:[void 0,void 0,4],CLP:[void 0,`$`,0],CNY:[`CN¥`,`¥`],COP:[void 0,`$`,2],CRC:[void 0,`₡`,2],CUC:[void 0,`$`],CUP:[void 0,`$`],CZK:[void 0,`Kč`,2],DJF:[void 0,void 0,0],DKK:[void 0,`kr`,2],DOP:[void 0,`$`],EGP:[void 0,`E£`],ESP:[void 0,`₧`,0],EUR:[`€`],FJD:[void 0,`$`],FKP:[void 0,`£`],GBP:[`£`],GEL:[void 0,`₾`],GHS:[void 0,`GH₵`],GIP:[void 0,`£`],GNF:[void 0,`FG`,0],GTQ:[void 0,`Q`],GYD:[void 0,`$`,2],HKD:[`HK$`,`$`],HNL:[void 0,`L`],HRK:[void 0,`kn`],HUF:[void 0,`Ft`,2],IDR:[void 0,`Rp`,2],ILS:[`₪`],INR:[`₹`],IQD:[void 0,void 0,0],IRR:[void 0,void 0,0],ISK:[void 0,`kr`,0],ITL:[void 0,void 0,0],JMD:[void 0,`$`],JOD:[void 0,void 0,3],JPY:[`¥`,void 0,0],KGS:[void 0,`⃀`],KHR:[void 0,`៛`],KMF:[void 0,`CF`,0],KPW:[void 0,`₩`,0],KRW:[`₩`,void 0,0],KWD:[void 0,void 0,3],KYD:[void 0,`$`],KZT:[void 0,`₸`],LAK:[void 0,`₭`,0],LBP:[void 0,`L£`,0],LKR:[void 0,`Rs`],LRD:[void 0,`$`],LTL:[void 0,`Lt`],LUF:[void 0,void 0,0],LVL:[void 0,`Ls`],LYD:[void 0,void 0,3],MGA:[void 0,`Ar`,0],MGF:[void 0,void 0,0],MMK:[void 0,`K`,0],MNT:[void 0,`₮`,2],MRO:[void 0,void 0,0],MUR:[void 0,`Rs`,2],MXN:[`MX$`,`$`],MYR:[void 0,`RM`],NAD:[void 0,`$`],NGN:[void 0,`₦`],NIO:[void 0,`C$`],NOK:[void 0,`kr`,2],NPR:[void 0,`Rs`],NZD:[`NZ$`,`$`],OMR:[void 0,void 0,3],PHP:[`₱`],PKR:[void 0,`Rs`,2],PLN:[void 0,`zł`],PYG:[void 0,`₲`,0],RON:[void 0,`lei`],RSD:[void 0,void 0,0],RUB:[void 0,`₽`],RWF:[void 0,`RF`,0],SBD:[void 0,`$`],SEK:[void 0,`kr`,2],SGD:[void 0,`$`],SHP:[void 0,`£`],SLE:[void 0,void 0,2],SLL:[void 0,void 0,0],SOS:[void 0,void 0,0],SRD:[void 0,`$`],SSP:[void 0,`£`],STD:[void 0,void 0,0],STN:[void 0,`Db`],SYP:[void 0,`£`,0],THB:[void 0,`฿`],TMM:[void 0,void 0,0],TND:[void 0,void 0,3],TOP:[void 0,`T$`],TRL:[void 0,void 0,0],TRY:[void 0,`₺`],TTD:[void 0,`$`],TWD:[`NT$`,`$`,2],TZS:[void 0,void 0,2],UAH:[void 0,`₴`],UGX:[void 0,void 0,0],USD:[`$`],UYI:[void 0,void 0,0],UYU:[void 0,`$`],UYW:[void 0,void 0,4],UZS:[void 0,void 0,2],VEF:[void 0,`Bs`,2],VND:[`₫`,void 0,0],VUV:[void 0,void 0,0],XAF:[`FCFA`,void 0,0],XCD:[`EC$`,`$`],XCG:[`Cg.`],XOF:[`F CFA`,void 0,0],XPF:[`CFPF`,void 0,0],XXX:[`¤`],YER:[void 0,void 0,0],ZAR:[void 0,`R`],ZMK:[void 0,void 0,0],ZMW:[void 0,`ZK`],ZWD:[void 0,void 0,0]};var _p=(function(i){return i[i.Decimal=0]=`Decimal`,i[i.Percent=1]=`Percent`,i[i.Currency=2]=`Currency`,i[i.Scientific=3]=`Scientific`,i})(_p||{});var $n=(function(i){return i[i.Format=0]=`Format`,i[i.Standalone=1]=`Standalone`,i})($n||{});var ci=(function(i){return i[i.Narrow=0]=`Narrow`,i[i.Abbreviated=1]=`Abbreviated`,i[i.Wide=2]=`Wide`,i[i.Short=3]=`Short`,i})(ci||{});var mr=(function(i){return i[i.Short=0]=`Short`,i[i.Medium=1]=`Medium`,i[i.Long=2]=`Long`,i[i.Full=3]=`Full`,i})(mr||{});var ji={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};function lR(i){return Rn(i)[Di.LocaleId]}function cR(i,r,e){let t=Rn(i);return to(to([t[Di.DayPeriodsFormat],t[Di.DayPeriodsStandalone]],r),e)}function dR(i,r,e){let t=Rn(i);return to(to([t[Di.DaysFormat],t[Di.DaysStandalone]],r),e)}function uR(i,r,e){let t=Rn(i);return to(to([t[Di.MonthsFormat],t[Di.MonthsStandalone]],r),e)}function gR(i,r){let t=Rn(i)[Di.Eras];return to(t,r)}function B_(i){return Rn(i)[Di.FirstDayOfWeek]}function pp(i,r){return to(Rn(i)[Di.DateFormat],r)}function hp(i,r){return to(Rn(i)[Di.TimeFormat],r)}function mp(i,r){let t=Rn(i)[Di.DateTimeFormat];return to(t,r)}function Ar(i,r){let e=Rn(i),t=e[Di.NumberSymbols][r];if(typeof t>`u`){if(r===ji.CurrencyDecimal)return e[Di.NumberSymbols][ji.Decimal];if(r===ji.CurrencyGroup)return e[Di.NumberSymbols][ji.Group]}return t}function H_(i,r){return Rn(i)[Di.NumberFormats][r]}function gw(i){return OS(i)}function sj(i){return Rn(i)[Di.Currencies]}function pR(i){if(!i[Di.ExtraData])throw new X(2303,!1)}function hR(i){let r=Rn(i);return pR(r),(r[Di.ExtraData][2]||[]).map(t=>typeof t==`string`?nw(t):[nw(t[0]),nw(t[1])])}function mR(i,r,e){let t=Rn(i);pR(t);return to(to([t[Di.ExtraData][0],t[Di.ExtraData][1]],r)||[],e)||[]}function to(i,r){for(let e=r;e>-1;e--)if(typeof i[e]<`u`)return i[e];throw new X(2304,!1)}function nw(i){let[r,e]=i.split(`:`);return{hours:+r,minutes:+e}}function G_(i,r,e=`en`){let t=sj(e)[i]||sR[i]||[],n=t[1];return r===`narrow`&&typeof n==`string`?n:t[0]||i}var lj=2;function fR(i){let r,e=sR[i];return e&&(r=e[2]),typeof r==`number`?r:lj}var cj=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;var A_=Object.create(null);var dj=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var uj=256;function U_(i,r,e,t){let n=bj(i);gj(r),r=Ya(e,r)||r;let a=[],s;for(;r;)if(s=dj.exec(r),s){a=a.concat(s.slice(1));let d=a.pop();if(!d)break;r=d}else{a.push(r);break}let l=n.getTimezoneOffset();t&&(l=xR(t,l),n=yj(n,t));let c=``;return a.forEach(d=>{let p=xj(d);c+=p?p(n,e,l):d===`''`?`'`:d.replace(/(^'|'$)/g,``).replace(/''/g,`'`)}),c}function gj(i){if(i.length>uj)throw new X(2300,!1)}function L_(i,r,e){let t=new Date(0);return t.setFullYear(i,r,e),t.setHours(0,0,0),t}function Ya(i,r){let e=lR(i);if(A_[e]??=Object.create(null),A_[e][r])return A_[e][r];let t=``;switch(r){case`shortDate`:t=pp(i,mr.Short);break;case`mediumDate`:t=pp(i,mr.Medium);break;case`longDate`:t=pp(i,mr.Long);break;case`fullDate`:t=pp(i,mr.Full);break;case`shortTime`:t=hp(i,mr.Short);break;case`mediumTime`:t=hp(i,mr.Medium);break;case`longTime`:t=hp(i,mr.Long);break;case`fullTime`:t=hp(i,mr.Full);break;case`short`:let n=Ya(i,`shortTime`),o=Ya(i,`shortDate`);t=F_(mp(i,mr.Short),[n,o]);break;case`medium`:let a=Ya(i,`mediumTime`),s=Ya(i,`mediumDate`);t=F_(mp(i,mr.Medium),[a,s]);break;case`long`:let l=Ya(i,`longTime`),c=Ya(i,`longDate`);t=F_(mp(i,mr.Long),[l,c]);break;case`full`:let d=Ya(i,`fullTime`),p=Ya(i,`fullDate`);t=F_(mp(i,mr.Full),[d,p]);break}return t&&(A_[e][r]=t),t}function F_(i,r){return r&&(i=i.replace(/\{([^}]+)}/g,function(e,t){return Object.hasOwn(r,t)?r[t]:e})),i}function Do(i,r,e=`-`,t,n){let o=``;(i<0||n&&i<=0)&&(n?i=-i+1:(i=-i,o=e));let a=String(i);for(;a.length0||s>-e)&&(s+=e),i===3)s===0&&e===-12&&(s=12);else if(i===6)return pj(s,r);let l=Ar(a,ji.MinusSign);return Do(s,r,l,t,n)}}function hj(i,r){switch(i){case 0:return r.getFullYear();case 1:return r.getMonth();case 2:return r.getDate();case 3:return r.getHours();case 4:return r.getMinutes();case 5:return r.getSeconds();case 6:return r.getMilliseconds();case 7:return r.getDay();default:throw new X(2301,!1)}}function mi(i,r,e=$n.Format,t=!1){return function(n,o){return mj(n,o,i,r,e,t)}}function mj(i,r,e,t,n,o){switch(e){case 2:return uR(r,n,t)[i.getMonth()];case 1:return dR(r,n,t)[i.getDay()];case 0:let a=i.getHours(),s=i.getMinutes();if(o){let c=hR(r),d=mR(r,n,t),p=c.findIndex(f=>{if(Array.isArray(f)){let[v,y]=f,T=a>=v.hours&&s>=v.minutes,M=a0?Math.floor(n/60):Math.ceil(n/60);switch(i){case 0:return(n>=0?`+`:``)+Do(a,2,o)+Do(Math.abs(n%60),2,o);case 1:return`GMT`+(n>=0?`+`:``)+Do(a,1,o);case 2:return`GMT`+(n>=0?`+`:``)+Do(a,2,o)+`:`+Do(Math.abs(n%60),2,o);case 3:return t===0?`Z`:(n>=0?`+`:``)+Do(a,2,o)+`:`+Do(Math.abs(n%60),2,o);default:throw new X(2310,!1)}}}var fj=0;var V_=4;function _j(i){let r=L_(i,fj,1).getDay();return L_(i,0,1+(r<=V_?V_:V_+7)-r)}function _R(i){let r=i.getDay(),e=r===0?-3:V_-r;return L_(i.getFullYear(),i.getMonth(),i.getDate()+e)}function rw(i,r=!1){return function(e,t){let n;if(r){let o=new Date(e.getFullYear(),e.getMonth(),1).getDay()-1,a=e.getDate();n=1+Math.floor((a+o)/7)}else{let o=_R(e),a=_j(o.getFullYear()),s=o.getTime()-a.getTime();n=1+Math.round(s/6048e5)}return Do(n,i,Ar(t,ji.MinusSign))}}function O_(i,r=!1){return function(e,t){return Do(_R(e).getFullYear(),i,Ar(t,ji.MinusSign),r)}}var ow=Object.create(null);function xj(i){if(ow[i])return ow[i];let r;switch(i){case`G`:case`GG`:case`GGG`:r=mi(3,ci.Abbreviated);break;case`GGGG`:r=mi(3,ci.Wide);break;case`GGGGG`:r=mi(3,ci.Narrow);break;case`y`:r=Ki(0,1,0,!1,!0);break;case`yy`:r=Ki(0,2,0,!0,!0);break;case`yyy`:r=Ki(0,3,0,!1,!0);break;case`yyyy`:r=Ki(0,4,0,!1,!0);break;case`Y`:r=O_(1);break;case`YY`:r=O_(2,!0);break;case`YYY`:r=O_(3);break;case`YYYY`:r=O_(4);break;case`M`:case`L`:r=Ki(1,1,1);break;case`MM`:case`LL`:r=Ki(1,2,1);break;case`MMM`:r=mi(2,ci.Abbreviated);break;case`MMMM`:r=mi(2,ci.Wide);break;case`MMMMM`:r=mi(2,ci.Narrow);break;case`LLL`:r=mi(2,ci.Abbreviated,$n.Standalone);break;case`LLLL`:r=mi(2,ci.Wide,$n.Standalone);break;case`LLLLL`:r=mi(2,ci.Narrow,$n.Standalone);break;case`w`:r=rw(1);break;case`ww`:r=rw(2);break;case`W`:r=rw(1,!0);break;case`d`:r=Ki(2,1);break;case`dd`:r=Ki(2,2);break;case`c`:case`cc`:r=Ki(7,1);break;case`ccc`:r=mi(1,ci.Abbreviated,$n.Standalone);break;case`cccc`:r=mi(1,ci.Wide,$n.Standalone);break;case`ccccc`:r=mi(1,ci.Narrow,$n.Standalone);break;case`cccccc`:r=mi(1,ci.Short,$n.Standalone);break;case`E`:case`EE`:case`EEE`:r=mi(1,ci.Abbreviated);break;case`EEEE`:r=mi(1,ci.Wide);break;case`EEEEE`:r=mi(1,ci.Narrow);break;case`EEEEEE`:r=mi(1,ci.Short);break;case`a`:case`aa`:case`aaa`:r=mi(0,ci.Abbreviated);break;case`aaaa`:r=mi(0,ci.Wide);break;case`aaaaa`:r=mi(0,ci.Narrow);break;case`b`:case`bb`:case`bbb`:r=mi(0,ci.Abbreviated,$n.Standalone,!0);break;case`bbbb`:r=mi(0,ci.Wide,$n.Standalone,!0);break;case`bbbbb`:r=mi(0,ci.Narrow,$n.Standalone,!0);break;case`B`:case`BB`:case`BBB`:r=mi(0,ci.Abbreviated,$n.Format,!0);break;case`BBBB`:r=mi(0,ci.Wide,$n.Format,!0);break;case`BBBBB`:r=mi(0,ci.Narrow,$n.Format,!0);break;case`h`:r=Ki(3,1,-12);break;case`hh`:r=Ki(3,2,-12);break;case`H`:r=Ki(3,1);break;case`HH`:r=Ki(3,2);break;case`m`:r=Ki(4,1);break;case`mm`:r=Ki(4,2);break;case`s`:r=Ki(5,1);break;case`ss`:r=Ki(5,2);break;case`S`:r=Ki(6,1);break;case`SS`:r=Ki(6,2);break;case`SSS`:r=Ki(6,3);break;case`Z`:case`ZZ`:case`ZZZ`:r=P_(0);break;case`ZZZZZ`:r=P_(3);break;case`O`:case`OO`:case`OOO`:case`z`:case`zz`:case`zzz`:r=P_(1);break;case`OOOO`:case`ZZZZ`:case`zzzz`:r=P_(2);break;default:return null}return ow[i]=r,r}function xR(i,r){i=i.replace(/:/g,``);let e=Date.parse(`Jan 01, 1970 00:00:00 `+i)/6e4;return isNaN(e)?r:e}function vj(i,r){return i=new Date(i.getTime()),i.setMinutes(i.getMinutes()+r),i}function yj(i,r,e){let n=i.getTimezoneOffset();return vj(i,-1*(xR(r,n)-n))}function bj(i){if(nR(i))return i;if(typeof i==`number`&&!isNaN(i))return new Date(i);if(typeof i==`string`){if(i=i.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(i)){let[n,o=1,a=1]=i.split(`-`).map(s=>+s);return L_(n,o-1,a)}let e=parseFloat(i);if(!isNaN(i-e))return new Date(e);let t;if(t=i.match(cj))return Sj(t)}let r=new Date(i);if(!nR(r))throw new X(2311,!1);return r}function Sj(i){let r=new Date(0),e=0,t=0,n=i[8]?r.setUTCFullYear:r.setFullYear,o=i[8]?r.setUTCHours:r.setHours;i[9]&&(e=Number(i[9]+i[10]),t=Number(i[9]+i[11])),n.call(r,Number(i[1]),Number(i[2])-1,Number(i[3]));let a=Number(i[4]||0)-e,s=Number(i[5]||0)-t,l=Number(i[6]||0),c=Math.floor(parseFloat(`0.`+(i[7]||0))*1e3);return o.call(r,a,s,l,c),r}function nR(i){return i instanceof Date&&!isNaN(i.valueOf())}var wj=/^(\d+)?\.((\d+)(-(\d+))?)?$/;var rR=22;var z_=`.`;var fp=`0`;var Cj=`;`;var Ij=`,`;var aw=`#`;var oR=`¤`;var Nj=`%`;function pw(i,r,e,t,n,o,a=!1){let s=``,l=!1;if(!isFinite(i))s=Ar(e,ji.Infinity);else{let c=Tj(i);a&&(c=Dj(c));let d=r.minInt,p=r.minFrac,f=r.maxFrac;if(o){let A=o.match(wj);if(A===null)throw new X(2306,!1);let W=A[1],ie=A[3],oe=A[5];W!=null&&(d=sw(W)),ie!=null&&(p=sw(ie)),oe!=null?f=sw(oe):ie!=null&&p>f&&(f=p);let H=100;if(d>H||p>H||f>H)throw new X(2306,!1)}Ej(c,p,f);let v=c.digits,y=c.integerLen,T=c.exponent,M=[];for(l=v.every(A=>!A);y0?M=v.splice(y,v.length):(M=v,v=[0]);let F=[];for(v.length>=r.lgSize&&F.unshift(v.splice(-r.lgSize,v.length).join(``));v.length>r.gSize;)F.unshift(v.splice(-r.gSize,v.length).join(``));v.length&&F.unshift(v.join(``)),s=F.join(Ar(e,t)),M.length&&(s+=Ar(e,n)+M.join(``)),T&&(s+=Ar(e,ji.Exponential)+`+`+T)}return i<0&&!l?s=r.negPre+s+r.negSuf:s=r.posPre+s+r.posSuf,s}function vR(i,r,e,t,n){let a=mw(H_(r,_p.Currency),Ar(r,ji.MinusSign));return a.minFrac=fR(t),a.maxFrac=a.minFrac,pw(i,a,r,ji.CurrencyGroup,ji.CurrencyDecimal,n).replace(oR,e).replace(oR,``).trim()}function j_(i,r,e){return pw(i,mw(H_(r,_p.Percent),Ar(r,ji.MinusSign)),r,ji.Group,ji.Decimal,e,!0).replace(new RegExp(Nj,`g`),Ar(r,ji.PercentSign))}function hw(i,r,e){return pw(i,mw(H_(r,_p.Decimal),Ar(r,ji.MinusSign)),r,ji.Group,ji.Decimal,e)}function mw(i,r=`-`){let e={minInt:1,minFrac:0,maxFrac:0,posPre:``,posSuf:``,negPre:``,negSuf:``,gSize:0,lgSize:0},t=i.split(Cj),n=t[0],o=t[1],a=n.indexOf(z_)!==-1?n.split(z_):[n.substring(0,n.lastIndexOf(fp)+1),n.substring(n.lastIndexOf(fp)+1)],s=a[0],l=a[1]||``;e.posPre=s.substring(0,s.indexOf(aw));for(let d=0;d-1&&(r=r.replace(z_,``)),(o=r.search(/e/i))>0?(n<0&&(n=o),n+=+r.slice(o+1),r=r.substring(0,o)):n<0&&(n=r.length),o=0;r.charAt(o)===fp;o++);if(o===(s=r.length))t=[0],n=1;else{for(s--;r.charAt(s)===fp;)s--;for(n-=o,t=[],a=0;o<=s;o++,a++)t[a]=Number(r.charAt(o))}return n>rR&&(t=t.splice(0,rR-1),e=n-1,n=1),{digits:t,exponent:e,integerLen:n}}function Ej(i,r,e){if(r>e)throw new X(2307,!1);let t=i.digits,n=t.length-i.integerLen,o=Math.min(Math.max(r,n),e),a=o+i.integerLen,s=t[a];if(a>0){t.splice(Math.max(i.integerLen,a));for(let p=a;p=5)if(a-1<0){for(let p=0;p>a;p--)t.unshift(0),i.integerLen++;t.unshift(1),i.integerLen++}else t[a-1]++;for(;n=c?y.pop():l=!1),f>=10?1:0},0);d&&(t.unshift(d),i.integerLen++)}function sw(i){let r=parseInt(i);if(isNaN(r))throw new X(2305,!1);return r}var lw=/\s+/;var aR=[];var Vt=(()=>{class i{_ngEl;_renderer;initialClasses=aR;rawClass;stateMap=new Map;constructor(e,t){this._ngEl=e,this._renderer=t}set klass(e){this.initialClasses=e!=null?e.trim().split(lw):aR}set ngClass(e){this.rawClass=typeof e==`string`?e.trim().split(lw):e}ngDoCheck(){for(let t of this.initialClasses)this._updateState(t,!0);let e=this.rawClass;if(Array.isArray(e)||e instanceof Set)for(let t of e)this._updateState(t,!0);else if(e!=null)for(let t of Object.keys(e))this._updateState(t,!!e[t]);this._applyStateDiff()}_updateState(e,t){let n=this.stateMap.get(e);n!==void 0?(n.enabled!==t&&(n.changed=!0,n.enabled=t),n.touched=!0):this.stateMap.set(e,{enabled:t,changed:!0,touched:!0})}_applyStateDiff(){for(let e of this.stateMap){let t=e[0],n=e[1];n.changed?(this._toggleClass(t,n.enabled),n.changed=!1):n.touched||(n.enabled&&this._toggleClass(t,!1),this.stateMap.delete(t)),n.touched=!1}}_toggleClass(e,t){e=e.trim(),e.length>0&&e.split(lw).forEach(n=>{t?this._renderer.addClass(this._ngEl.nativeElement,n):this._renderer.removeClass(this._ngEl.nativeElement,n)})}static ɵfac=function(t){return new(t||i)(ct(ne),ct(Ot))};static ɵdir=L({type:i,selectors:[[``,`ngClass`,``]],inputs:{klass:[0,`class`,`klass`],ngClass:`ngClass`}})}return i})();var dc=(()=>{class i{_ngEl;_differs;_renderer;_ngStyle=null;_differ=null;constructor(e,t,n){this._ngEl=e,this._differs=t,this._renderer=n}set ngStyle(e){this._ngStyle=e,!this._differ&&e&&(this._differ=this._differs.find(e).create())}ngDoCheck(){if(this._differ){let e=this._differ.diff(this._ngStyle);e&&this._applyChanges(e)}}_setStyle(e,t){let[n,o]=e.split(`.`),a=n.indexOf(`-`)===-1?void 0:Mr.DashCase;t!=null?this._renderer.setStyle(this._ngEl.nativeElement,n,o?`${t}${o}`:t,a):this._renderer.removeStyle(this._ngEl.nativeElement,n,a)}_applyChanges(e){e.forEachRemovedItem(t=>this._setStyle(t.key,null)),e.forEachAddedItem(t=>this._setStyle(t.key,t.currentValue)),e.forEachChangedItem(t=>this._setStyle(t.key,t.currentValue))}static ɵfac=function(t){return new(t||i)(ct(ne),ct(ew),ct(Ot))};static ɵdir=L({type:i,selectors:[[``,`ngStyle`,``]],inputs:{ngStyle:`ngStyle`}})}return i})();var st=(()=>{class i{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=_(qt);constructor(e){this._viewContainerRef=e}ngOnChanges(e){if(this._shouldRecreateView(e)){let t=this._viewContainerRef;if(this._viewRef&&t.remove(t.indexOf(this._viewRef)),!this.ngTemplateOutlet){this._viewRef=null;return}let n=this._createContextForwardProxy();this._viewRef=t.createEmbeddedView(this.ngTemplateOutlet,n,{injector:this._getInjector()})}}_getInjector(){return this.ngTemplateOutletInjector===`outlet`?this.injector:this.ngTemplateOutletInjector??void 0}_shouldRecreateView(e){return!!e.ngTemplateOutlet||!!e.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(e,t,n)=>this.ngTemplateOutletContext?Reflect.set(this.ngTemplateOutletContext,t,n):!1,get:(e,t,n)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,t,n)}})}static ɵfac=function(t){return new(t||i)(ct(hi))};static ɵdir=L({type:i,selectors:[[``,`ngTemplateOutlet`,``]],inputs:{ngTemplateOutletContext:`ngTemplateOutletContext`,ngTemplateOutlet:`ngTemplateOutlet`,ngTemplateOutletInjector:`ngTemplateOutletInjector`},features:[Si]})}return i})();function xp(i,r){return new X(2100,!1)}var cw=class{createSubscription(r,e,t){return pi(()=>r.subscribe({next:e,error:t}))}dispose(r){pi(()=>r.unsubscribe())}};var dw=class{createSubscription(r,e,t){return r.then(n=>e?.(n),n=>t?.(n)),{unsubscribe:()=>{e=null,t=null}}}dispose(r){r.unsubscribe()}};var kj=new dw;var Mj=new cw;var W_=(()=>{class i{_ref;_latestValue=null;markForCheckOnValueUpdate=!0;_subscription=null;_obj=null;_strategy=null;applicationErrorHandler=_(Xr);constructor(e){this._ref=e}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(e){if(!this._obj){if(e)try{this.markForCheckOnValueUpdate=!1,this._subscribe(e)}finally{this.markForCheckOnValueUpdate=!0}return this._latestValue}return e!==this._obj?(this._dispose(),this.transform(e)):this._latestValue}_subscribe(e){this._obj=e,this._strategy=this._selectStrategy(e),this._subscription=this._strategy.createSubscription(e,t=>this._updateLatestValue(e,t),t=>this.applicationErrorHandler(t))}_selectStrategy(e){if(qa(e))return kj;if(__(e))return Mj;throw xp(i,e)}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(e,t){e===this._obj&&(this._latestValue=t,this.markForCheckOnValueUpdate&&this._ref?.markForCheck())}static ɵfac=function(t){return new(t||i)(ct(Ne,16))};static ɵpipe=Oe({name:`async`,type:i,pure:!1})}return i})();var Rj=/(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g;var $_=(()=>{class i{transform(e){return e==null?null:(Aj(i,e),e.replace(Rj,t=>t[0].toUpperCase()+t.slice(1).toLowerCase()))}static ɵfac=function(t){return new(t||i)};static ɵpipe=Oe({name:`titlecase`,type:i,pure:!0})}return i})();function Aj(i,r){if(typeof r!=`string`)throw xp(i,r)}var Fj=`mediumDate`;var yR=new le(``);var bR=new le(``);var Za=(()=>{class i{locale;defaultTimezone;defaultOptions;constructor(e,t,n){this.locale=e,this.defaultTimezone=t,this.defaultOptions=n}transform(e,t,n,o){if(e==null||e===``||e!==e)return null;try{let a=t??this.defaultOptions?.dateFormat??Fj,s=n??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return U_(e,a,o||this.locale,s)}catch(a){throw xp(i,a.message)}}static ɵfac=function(t){return new(t||i)(ct(ln,16),ct(yR,24),ct(bR,24))};static ɵpipe=Oe({name:`date`,type:i,pure:!0})}return i})();var fw=(()=>{class i{_locale;constructor(e){this._locale=e}transform(e,t,n){if(!SR(e))return null;n||=this._locale;try{return j_(wR(e),n,t)}catch(o){throw xp(i,o.message)}}static ɵfac=function(t){return new(t||i)(ct(ln,16))};static ɵpipe=Oe({name:`percent`,type:i,pure:!0})}return i})();var _w=(()=>{class i{_locale;_defaultCurrencyCode;constructor(e,t=`USD`){this._locale=e,this._defaultCurrencyCode=t}transform(e,t=this._defaultCurrencyCode,n=`symbol`,o,a){if(!SR(e))return null;a||=this._locale,typeof n==`boolean`&&(n=n?`symbol`:`code`);let s=t||this._defaultCurrencyCode;n!==`code`&&(n===`symbol`||n===`symbol-narrow`?s=G_(s,n===`symbol`?`wide`:`narrow`,a):s=n);try{return vR(wR(e),a,s,t,o)}catch(l){throw xp(i,l.message)}}static ɵfac=function(t){return new(t||i)(ct(ln,16),ct(US,16))};static ɵpipe=Oe({name:`currency`,type:i,pure:!0})}return i})();function SR(i){return!(i==null||i===``||i!==i)}function wR(i){if(typeof i==`string`&&!isNaN(Number(i)-parseFloat(i)))return Number(i);if(typeof i!=`number`)throw new X(2309,!1);return i}var vp=(()=>{class i{static ɵfac=function(t){return new(t||i)};static ɵmod=Me({type:i});static ɵinj=Ee({})}return i})();function yp(i,r){r=encodeURIComponent(r);for(let e of i.split(`;`)){let t=e.indexOf(`=`),[n,o]=t==-1?[e,``]:[e.slice(0,t),e.slice(t+1)];if(n.trim()!==r)continue;let a=o;try{a=decodeURIComponent(o)}catch{}return a.length>1&&a[0]===`"`&&a[a.length-1]===`"`&&(a=a.slice(1,-1)),a}return null}var Pj=(()=>{class i{build(){return new XMLHttpRequest}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();var xw=(()=>{class i{static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:function(t){let n=null;return t?n=new(t||i):n=Te(Pj),n},providedIn:`root`})}return i})();var yw=`browser`;function q_(i){return i===yw}var bw=(()=>{class i{static ɵprov=de({token:i,providedIn:`root`,factory:()=>new vw(_($e),window)})}return i})();var vw=class{document;window;offset=()=>[0,0];constructor(r,e){this.document=r,this.window=e}setOffset(r){Array.isArray(r)?this.offset=()=>r:this.offset=r}getScrollPosition(){return[this.window.scrollX,this.window.scrollY]}scrollToPosition(r$2,e){this.window.scrollTo(s(r({},e),{left:r$2[0],top:r$2[1]}))}scrollToAnchor(r,e){let t=Vj(this.document,r);t&&(this.scrollToElement(t,e),t.focus({preventScroll:!0}))}setHistoryScrollRestoration(r){try{this.window.history.scrollRestoration=r}catch{console.warn(Dr(2400,!1))}}scrollToElement(r$3,e){let t=r$3.getBoundingClientRect(),n=t.left+this.window.pageXOffset,o=t.top+this.window.pageYOffset,a=this.offset();this.window.scrollTo(s(r({},e),{left:n-a[0],top:o-a[1]}))}};function Vj(i,r){let e=i.getElementById(r)||i.getElementsByName(r)[0];if(e)return e;if(typeof i.createTreeWalker==`function`&&i.body&&typeof i.body.attachShadow==`function`){let t=i.createTreeWalker(i.body,NodeFilter.SHOW_ELEMENT),n=t.currentNode;for(;n;){let o=n.shadowRoot;if(o){let a=o.getElementById(r)||o.querySelector(`[name="${CSS.escape(r)}"]`);if(a)return a}n=t.nextNode()}}return null}var kR=(()=>{class i{_renderer;_elementRef;onChange=e=>{};onTouched=()=>{};constructor(e,t){this._renderer=e,this._elementRef=t}setProperty(e,t){this._renderer.setProperty(this._elementRef.nativeElement,e,t)}registerOnTouched(e){this.onTouched=e}registerOnChange(e){this.onChange=e}setDisabledState(e){this.setProperty(`disabled`,e)}static ɵfac=function(t){return new(t||i)(ct(Ot),ct(ne))};static ɵdir=L({type:i})}return i})();var MR=(()=>{class i extends kR{static ɵfac=(()=>{let e;return function(n){return(e||(e=be(i)))(n||i)}})();static ɵdir=L({type:i,features:[pe]})}return i})();var zi=new le(``);var zj={provide:zi,useExisting:rn(()=>hn),multi:!0};function Bj(){let i=Rr()?Rr().getUserAgent():``;return/android (\d+)/.test(i.toLowerCase())}var Hj=new le(``);var hn=(()=>{class i extends kR{_compositionMode;_composing=!1;constructor(e,t,n){super(e,t),this._compositionMode=n,this._compositionMode??=!Bj()}writeValue(e){let t=e??``;this.setProperty(`value`,t)}_handleInput(e){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(e)}_compositionStart(){this._composing=!0}_compositionEnd(e){this._composing=!1,this._compositionMode&&this.onChange(e)}static ɵfac=function(t){return new(t||i)(ct(Ot),ct(ne),ct(Hj,8))};static ɵdir=L({type:i,selectors:[[`input`,`formControlName`,``,3,`type`,`checkbox`,3,`ngNoCva`,``],[`textarea`,`formControlName`,``,3,`ngNoCva`,``],[`input`,`formControl`,``,3,`type`,`checkbox`,3,`ngNoCva`,``],[`textarea`,`formControl`,``,3,`ngNoCva`,``],[`input`,`ngModel`,``,3,`type`,`checkbox`,3,`ngNoCva`,``],[`textarea`,`ngModel`,``,3,`ngNoCva`,``],[``,`ngDefaultControl`,``]],hostBindings:function(t,n){t&1&&E(`input`,function(a){return n._handleInput(a.target.value)})(`blur`,function(){return n.onTouched()})(`compositionstart`,function(){return n._compositionStart()})(`compositionend`,function(a){return n._compositionEnd(a.target.value)})},standalone:!1,features:[Ae([zj]),pe]})}return i})();function Nw(i){return i==null||Dw(i)===0}function Dw(i){return i==null?null:Array.isArray(i)||typeof i==`string`?i.length:i instanceof Set?i.size:null}var rr=new le(``);var Tw=new le(``);var Gj=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;var Cp=class{static min(r){return Uj(r)}static max(r){return jj(r)}static required(r){return RR(r)}static requiredTrue(r){return Wj(r)}static email(r){return $j(r)}static minLength(r){return AR(r)}static maxLength(r){return qj(r)}static pattern(r){return Qj(r)}static nullValidator(r){return K_()}static compose(r){return zR(r)}static composeAsync(r){return HR(r)}};function Uj(i){return r=>{if(r.value==null||i==null)return null;let e=parseFloat(r.value);return!isNaN(e)&&e{if(r.value==null||i==null)return null;let e=parseFloat(r.value);return!isNaN(e)&&e>i?{max:{max:i,actual:r.value}}:null}}function RR(i){return Nw(i.value)?{required:!0}:null}function Wj(i){return i.value===!0?null:{required:!0}}function $j(i){return Nw(i.value)||Gj.test(i.value)?null:{email:!0}}function AR(i){return r=>{let e=r.value?.length??Dw(r.value);return e===null||e===0?null:e{let e=r.value?.length??Dw(r.value);return e!==null&&e>i?{maxlength:{requiredLength:i,actualLength:e}}:null}}function Qj(i){if(!i)return K_;let r,e;return typeof i==`string`?(e=``,i.charAt(0)!==`^`&&(e+=`^`),e+=i,i.charAt(i.length-1)!==`$`&&(e+=`$`),r=new RegExp(e)):(e=i.toString(),r=i),t=>{if(Nw(t.value))return null;let n=t.value;return r.test(n)?null:{pattern:{requiredPattern:e,actualValue:n}}}}function K_(i){return null}function FR(i){return i!=null}function PR(i){return qa(i)?ui(i):i}function OR(i){let r$4={};return i.forEach(e=>{r$4=e!=null?r(r({},r$4),e):r$4}),Object.keys(r$4).length===0?null:r$4}function VR(i,r){return r.map(e=>e(i))}function Kj(i){return!i.validate}function LR(i){return i.map(r=>Kj(r)?r:e=>r.validate(e))}function zR(i){if(!i)return null;let r=i.filter(FR);return r.length==0?null:function(e){return OR(VR(e,r))}}function BR(i){return i!=null?zR(LR(i)):null}function HR(i){if(!i)return null;let r=i.filter(FR);return r.length==0?null:function(e){return Xy(VR(e,r).map(PR)).pipe(Pt(OR))}}function GR(i){return i!=null?HR(LR(i)):null}function CR(i,r){return i===null?[r]:Array.isArray(i)?[...i,r]:[i,r]}function UR(i){return i._rawValidators}function jR(i){return i._rawAsyncValidators}function Sw(i){return i?Array.isArray(i)?i:[i]:[]}function Y_(i,r){return Array.isArray(i)?i.includes(r):i===r}function IR(i,r){let e=Sw(r);return Sw(i).forEach(n=>{Y_(e,n)||e.push(n)}),e}function NR(i,r){return Sw(r).filter(e=>!Y_(i,e))}var Z_=class{get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators=[];_rawAsyncValidators=[];_setValidators(r){this._rawValidators=r||[],this._composedValidatorFn=BR(this._rawValidators)}_setAsyncValidators(r){this._rawAsyncValidators=r||[],this._composedAsyncValidatorFn=GR(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_onDestroyCallbacks=[];_registerOnDestroy(r){this._onDestroyCallbacks.push(r)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(r=>r()),this._onDestroyCallbacks=[]}reset(r=void 0){this.control?.reset(r)}hasError(r,e){return this.control?this.control.hasError(r,e):!1}getError(r,e){return this.control?this.control.getError(r,e):null}};var Gd=class extends Z_{name;get formDirective(){return null}get path(){return null}};var bp=`VALID`;var Q_=`INVALID`;var Bd=`PENDING`;var Sp=`DISABLED`;var $s=class{};var X_=class extends $s{value;source;constructor(r,e){super(),this.value=r,this.source=e}};var wp=class extends $s{pristine;source;constructor(r,e){super(),this.pristine=r,this.source=e}};var uc=class extends $s{touched;source;constructor(r,e){super(),this.touched=r,this.source=e}};var Hd=class extends $s{status;source;constructor(r,e){super(),this.status=r,this.source=e}};var ww=class extends $s{source;constructor(r){super(),this.source=r}};var Ud=class extends $s{source;constructor(r){super(),this.source=r}};function WR(i){return(rx(i)?i.validators:i)||null}function Yj(i){return Array.isArray(i)?BR(i):i||null}function $R(i,r){return(rx(r)?r.asyncValidators:i)||null}function Zj(i){return Array.isArray(i)?GR(i):i||null}function rx(i){return i!=null&&!Array.isArray(i)&&typeof i==`object`}function Xj(i,r,e){let t=i.controls;if(!(r?Object.keys(t):t).length)throw new X(1e3,``);if(!qR(t,e))throw new X(1001,``)}function Jj(i,r,e){i._forEachChild((t,n)=>{if(e[n]===void 0)throw new X(-1002,``)})}var J_=class{_pendingDirty=!1;_hasOwnPendingAsyncValidator=null;_pendingTouched=!1;_onCollectionChange=()=>{};_updateOn;_hasRequired=gi(!1);_parent=null;_asyncValidationSubscription;_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators;_rawAsyncValidators;value;constructor(r,e){this._assignValidators(r),this._assignAsyncValidators(e)}get validator(){return this._composedValidatorFn}set validator(r){this._rawValidators=this._composedValidatorFn=r,this._updateHasRequiredValidator()}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(r){this._rawAsyncValidators=this._composedAsyncValidatorFn=r}get parent(){return this._parent}get status(){return pi(this.statusReactive)}set status(r){pi(()=>this.statusReactive.set(r))}_status=Co(()=>this.statusReactive());statusReactive=gi(void 0);get valid(){return this.status===bp}get invalid(){return this.status===Q_}get pending(){return this.status===Bd}get disabled(){return this.status===Sp}get enabled(){return this.status!==Sp}errors;get pristine(){return pi(this.pristineReactive)}set pristine(r){pi(()=>this.pristineReactive.set(r))}_pristine=Co(()=>this.pristineReactive());pristineReactive=gi(!0);get dirty(){return!this.pristine}get touched(){return pi(this.touchedReactive)}set touched(r){pi(()=>this.touchedReactive.set(r))}_touched=Co(()=>this.touchedReactive());touchedReactive=gi(!1);get untouched(){return!this.touched}_events=new ce;events=this._events.asObservable();valueChanges;statusChanges;get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:`change`}setValidators(r){this._assignValidators(r)}setAsyncValidators(r){this._assignAsyncValidators(r)}addValidators(r){this.setValidators(IR(r,this._rawValidators))}addAsyncValidators(r){this.setAsyncValidators(IR(r,this._rawAsyncValidators))}removeValidators(r){this.setValidators(NR(r,this._rawValidators))}removeAsyncValidators(r){this.setAsyncValidators(NR(r,this._rawAsyncValidators))}hasValidator(r){return Y_(this._rawValidators,r)}hasAsyncValidator(r){return Y_(this._rawAsyncValidators,r)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(r$5={}){let e=this.touched===!1;this.touched=!0;let t=r$5.sourceControl??this;r$5.onlySelf||this._parent?.markAsTouched(s(r({},r$5),{sourceControl:t})),e&&r$5.emitEvent!==!1&&this._events.next(new uc(!0,t))}markAllAsDirty(r={}){this.markAsDirty({onlySelf:!0,emitEvent:r.emitEvent,sourceControl:this}),this._forEachChild(e=>e.markAllAsDirty(r))}markAllAsTouched(r={}){this.markAsTouched({onlySelf:!0,emitEvent:r.emitEvent,sourceControl:this}),this._forEachChild(e=>e.markAllAsTouched(r))}markAsUntouched(r={}){let e=this.touched===!0;this.touched=!1,this._pendingTouched=!1;let t=r.sourceControl??this;this._forEachChild(n=>{n.markAsUntouched({onlySelf:!0,emitEvent:r.emitEvent,sourceControl:t})}),r.onlySelf||this._parent?._updateTouched(r,t),e&&r.emitEvent!==!1&&this._events.next(new uc(!1,t))}markAsDirty(r$6={}){let e=this.pristine===!0;this.pristine=!1;let t=r$6.sourceControl??this;r$6.onlySelf||this._parent?.markAsDirty(s(r({},r$6),{sourceControl:t})),e&&r$6.emitEvent!==!1&&this._events.next(new wp(!1,t))}markAsPristine(r={}){let e=this.pristine===!1;this.pristine=!0,this._pendingDirty=!1;let t=r.sourceControl??this;this._forEachChild(n=>{n.markAsPristine({onlySelf:!0,emitEvent:r.emitEvent})}),r.onlySelf||this._parent?._updatePristine(r,t),e&&r.emitEvent!==!1&&this._events.next(new wp(!0,t))}markAsPending(r$7={}){this.status=Bd;let e=r$7.sourceControl??this;r$7.emitEvent!==!1&&(this._events.next(new Hd(this.status,e)),this.statusChanges.emit(this.status)),r$7.onlySelf||this._parent?.markAsPending(s(r({},r$7),{sourceControl:e}))}disable(r$8={}){let e=this._parentMarkedDirty(r$8.onlySelf);this.status=Sp,this.errors=null,this._forEachChild(n=>{n.disable(s(r({},r$8),{onlySelf:!0}))}),this._updateValue();let t=r$8.sourceControl??this;r$8.emitEvent!==!1&&(this._events.next(new X_(this.value,t)),this._events.next(new Hd(this.status,t)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(s(r({},r$8),{skipPristineCheck:e}),this),this._onDisabledChange.forEach(n=>n(!0))}enable(r$9={}){let e=this._parentMarkedDirty(r$9.onlySelf);this.status=bp,this._forEachChild(t=>{t.enable(s(r({},r$9),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:r$9.emitEvent}),this._updateAncestors(s(r({},r$9),{skipPristineCheck:e}),this),this._onDisabledChange.forEach(t=>t(!1))}_updateAncestors(r,e){r.onlySelf||(this._parent?.updateValueAndValidity(r),r.skipPristineCheck||this._parent?._updatePristine({},e),this._parent?._updateTouched({},e))}setParent(r){this._parent=r}getRawValue(){return this.value}updateValueAndValidity(r$10={}){if(this._setInitialStatus(),this._updateValue(),this.enabled){let t=this._cancelExistingSubscription();this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===bp||this.status===Bd)&&this._runAsyncValidator(t,r$10.emitEvent)}let e=r$10.sourceControl??this;r$10.emitEvent!==!1&&(this._events.next(new X_(this.value,e)),this._events.next(new Hd(this.status,e)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),r$10.onlySelf||this._parent?.updateValueAndValidity(s(r({},r$10),{sourceControl:e}))}_updateTreeValidity(r={emitEvent:!0}){this._forEachChild(e=>e._updateTreeValidity(r)),this.updateValueAndValidity({onlySelf:!0,emitEvent:r.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?Sp:bp}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(r,e){if(this.asyncValidator){this.status=Bd,this._hasOwnPendingAsyncValidator={emitEvent:e!==!1,shouldHaveEmitted:r!==!1};let t=PR(this.asyncValidator(this));this._asyncValidationSubscription=t.subscribe(n=>{this._hasOwnPendingAsyncValidator=null,this.setErrors(n,{emitEvent:e,shouldHaveEmitted:r})})}}_cancelExistingSubscription(){if(this._asyncValidationSubscription){this._asyncValidationSubscription.unsubscribe();let r=(this._hasOwnPendingAsyncValidator?.emitEvent||this._hasOwnPendingAsyncValidator?.shouldHaveEmitted)??!1;return this._hasOwnPendingAsyncValidator=null,r}return!1}setErrors(r,e={}){this.errors=r,this._updateControlsErrors(e.emitEvent!==!1,this,e.shouldHaveEmitted)}get(r){let e=r;return e==null||(Array.isArray(e)||(e=e.split(`.`)),e.length===0)?null:e.reduce((t,n)=>t&&t._find(n),this)}getError(r,e){let t=e?this.get(e):this;return t?.errors?t.errors[r]:null}hasError(r,e){return!!this.getError(r,e)}get root(){let r=this;for(;r._parent;)r=r._parent;return r}_updateControlsErrors(r,e,t){this.status=this._calculateStatus(),r&&this.statusChanges.emit(this.status),(r||t)&&this._events.next(new Hd(this.status,e)),this._parent&&this._parent._updateControlsErrors(r,e,t)}_initObservables(){this.valueChanges=new k,this.statusChanges=new k}_calculateStatus(){return this._allControlsDisabled()?Sp:this.errors?Q_:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Bd)?Bd:this._anyControlsHaveStatus(Q_)?Q_:bp}_anyControlsHaveStatus(r){return this._anyControls(e=>e.status===r)}_anyControlsDirty(){return this._anyControls(r=>r.dirty)}_anyControlsTouched(){return this._anyControls(r=>r.touched)}_updatePristine(r,e){let t=!this._anyControlsDirty(),n=this.pristine!==t;this.pristine=t,r.onlySelf||this._parent?._updatePristine(r,e),n&&this._events.next(new wp(this.pristine,e))}_updateTouched(r={},e){this.touched=this._anyControlsTouched(),this._events.next(new uc(this.touched,e)),r.onlySelf||this._parent?._updateTouched(r,e)}_onDisabledChange=[];_registerOnCollectionChange(r){this._onCollectionChange=r}_setUpdateStrategy(r){rx(r)&&r.updateOn!=null&&(this._updateOn=r.updateOn)}_parentMarkedDirty(r){return!r&&!!this._parent?.dirty&&!this._parent._anyControlsDirty()}_find(r){return null}_assignValidators(r){this._rawValidators=Array.isArray(r)?r.slice():r,this._composedValidatorFn=Yj(this._rawValidators),this._updateHasRequiredValidator()}_assignAsyncValidators(r){this._rawAsyncValidators=Array.isArray(r)?r.slice():r,this._composedAsyncValidatorFn=Zj(this._rawAsyncValidators)}_updateHasRequiredValidator(){pi(()=>this._hasRequired.set(this.hasValidator(Cp.required)))}};function qR(i,r){return Object.hasOwn(i,r)}function eW(i){return i.tagName===`INPUT`||i.tagName===`SELECT`||i.tagName===`TEXTAREA`}function tW(i,r,e,t){switch(e){case`name`:i.setAttribute(r,e,t);break;case`disabled`:case`readonly`:case`required`:t?i.setAttribute(r,e,``):i.removeAttribute(r,e);break;case`max`:case`min`:case`minLength`:case`maxLength`:t!==void 0?i.setAttribute(r,e,t.toString()):i.removeAttribute(r,e);break}}var Cw=class{kind;context;control;message;constructor({kind:r,context:e,control:t}){this.kind=r,this.context=e,this.control=t}};function iW(i){return typeof i==`number`?i:parseInt(i,10)}var QR=(()=>{class i{_validator=K_;_onChange;_enabled;ngOnChanges(e){if(this.inputName in e){let t=this.normalizeInput(e[this.inputName].currentValue);this._enabled=this.enabled(t),this._validator=this._enabled?this.createValidator(t):K_,this._onChange?.()}}validate(e){return this._validator(e)}registerOnValidatorChange(e){this._onChange=e}enabled(e){return e!=null}static ɵfac=function(t){return new(t||i)};static ɵdir=L({type:i,features:[Si]})}return i})();var nW={provide:rr,useExisting:rn(()=>jd),multi:!0};var jd=(()=>{class i extends QR{required;inputName=`required`;normalizeInput=O;createValidator=e=>RR;enabled(e){return e}static ɵfac=(()=>{let e;return function(n){return(e||(e=be(i)))(n||i)}})();static ɵdir=L({type:i,selectors:[[``,`required`,``,`formControlName`,``,3,`type`,`checkbox`],[``,`required`,``,`formControl`,``,3,`type`,`checkbox`],[``,`required`,``,`ngModel`,``,3,`type`,`checkbox`]],hostVars:1,hostBindings:function(t,n){t&2&&B(`required`,n._enabled?``:null)},inputs:{required:`required`},standalone:!1,features:[Ae([nW]),pe]})}return i})();var rW={provide:rr,useExisting:rn(()=>Ew),multi:!0};var Ew=(()=>{class i extends QR{minlength;inputName=`minlength`;normalizeInput=e=>iW(e);createValidator=e=>AR(e);static ɵfac=(()=>{let e;return function(n){return(e||(e=be(i)))(n||i)}})();static ɵdir=L({type:i,selectors:[[``,`minlength`,``,`formControlName`,``],[``,`minlength`,``,`formControl`,``],[``,`minlength`,``,`ngModel`,``]],hostVars:1,hostBindings:function(t,n){t&2&&B(`minlength`,n._enabled?n.minlength:null)},inputs:{minlength:`minlength`},standalone:!1,features:[Ae([rW]),pe]})}return i})();var oW=new le(``);var Np=new le(``,{factory:()=>ox});var ox=`always`;function aW(i,r){return[...r.path,i]}function Iw(i,r,e=ox){kw(i,r),r.valueAccessor.writeValue(i.value),(i.disabled||e===`always`)&&r.valueAccessor.setDisabledState?.(i.disabled),lW(i,r),dW(i,r),cW(i,r),sW(i,r)}function ex(i,r,e=!0){let t=()=>{};r?.valueAccessor?.registerOnChange(t),r?.valueAccessor?.registerOnTouched(t),ix(i,r),i&&(r._invokeOnDestroyCallbacks(),i._registerOnCollectionChange(()=>{}))}function tx(i,r){i.forEach(e=>{e.registerOnValidatorChange&&e.registerOnValidatorChange(r)})}function sW(i,r){if(r.valueAccessor.setDisabledState){let e=t=>{r.valueAccessor.setDisabledState(t)};i.registerOnDisabledChange(e),r._registerOnDestroy(()=>{i._unregisterOnDisabledChange(e)})}}function kw(i,r){let e=UR(i);r.validator!==null?i.setValidators(CR(e,r.validator)):typeof e==`function`&&i.setValidators([e]);let t=jR(i);r.asyncValidator!==null?i.setAsyncValidators(CR(t,r.asyncValidator)):typeof t==`function`&&i.setAsyncValidators([t]);let n=()=>i.updateValueAndValidity();tx(r._rawValidators,n),tx(r._rawAsyncValidators,n)}function ix(i,r){let e=!1;if(i!==null){if(r.validator!==null){let n=UR(i);if(Array.isArray(n)&&n.length>0){let o=n.filter(a=>a!==r.validator);o.length!==n.length&&(e=!0,i.setValidators(o))}}if(r.asyncValidator!==null){let n=jR(i);if(Array.isArray(n)&&n.length>0){let o=n.filter(a=>a!==r.asyncValidator);o.length!==n.length&&(e=!0,i.setAsyncValidators(o))}}}let t=()=>{};return tx(r._rawValidators,t),tx(r._rawAsyncValidators,t),e}function lW(i,r){r.valueAccessor.registerOnChange(e=>{i._pendingValue=e,i._pendingChange=!0,i._pendingDirty=!0,i.updateOn===`change`&&KR(i,r)})}function cW(i,r){r.valueAccessor.registerOnTouched(()=>{i._pendingTouched=!0,i.updateOn===`blur`&&i._pendingChange&&KR(i,r),i.updateOn!==`submit`&&i.markAsTouched()})}function KR(i,r){i._pendingDirty&&i.markAsDirty(),i.setValue(i._pendingValue,{emitModelToViewChange:!1}),r.viewToModelUpdate(i._pendingValue),i._pendingChange=!1}function dW(i,r){let e=(t,n)=>{r.valueAccessor.writeValue(t),n&&r.viewToModelUpdate(t)};i.registerOnChange(e),r._registerOnDestroy(()=>{i._unregisterOnChange(e)})}function uW(i,r){kw(i,r)}function gW(i,r){return ix(i,r)}function YR(i,r){if(!Object.hasOwn(i,`model`))return!1;let e=i.model;return e.isFirstChange()?!0:!Object.is(r,e.currentValue)}function pW(i){return Object.getPrototypeOf(i.constructor)===MR}function hW(i,r){i._syncPendingControls(),r.forEach(e=>{let t=e.control;t.updateOn===`submit`&&t._pendingChange&&(e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1)})}function mW(i,r){if(!r)return null;let e,t,n;return r.forEach(o=>{o.constructor===hn?e=o:pW(o)?t=o:n=o}),n||t||e||null}function fW(i,r){let e=i.indexOf(r);e>-1&&i.splice(e,1)}var ZR={provide:oW,useFactory:()=>{let i=_(Yi,{self:!0});return{setParseErrors:r=>{i.setParseErrorSource(r)},set onReset(r){i.onReset=r}}}};var Yi=class extends Z_{_parent=null;name=null;valueAccessor=null;isCustomControlBased=!1;userOnReset;resetSubscription;set onReset(r){this.userOnReset=r,this.resetSubscription?.unsubscribe(),this.resetSubscription=void 0,this.control&&(this.resetSubscription=this.control.events.subscribe(e=>{e instanceof Ud&&this.control&&this.userOnReset?.(this.control.value)}),this.subscription?.add(this.resetSubscription))}isNativeFormElement=!1;rawValueAccessors;_selectedValueAccessor=null;get selectedValueAccessor(){return this._selectedValueAccessor??=mW(this,this.rawValueAccessors)}parseErrorsValidator=null;renderer;injector;requiredValidatorViaDi;subscription;customControlBindings=null;constructor(r,e,t){super(),this.injector=r,this.renderer=e,this.rawValueAccessors=t,this.injector?.get(Mt)?.onDestroy(()=>{this.removeParseErrorsValidator(this.control),this.subscription?.unsubscribe()})}setupCustomControl(){this.subscription?.unsubscribe();let r=this.injector?.get(Ne);if(!this.control||!r)return;let e=r.markForCheck.bind(r);this.subscription=new yi,this.subscription.add(this.control.valueChanges.subscribe(e)),this.subscription.add(this.control.statusChanges.subscribe(e)),this.resetSubscription?.unsubscribe(),this.resetSubscription=void 0,this.userOnReset&&(this.resetSubscription=this.control.events.subscribe(t=>{t instanceof Ud&&this.control&&this.userOnReset?.(this.control.value)}),this.subscription.add(this.resetSubscription)),this.parseErrorsValidator&&this.control.addValidators(this.parseErrorsValidator)}ngControlCreate(r){!r.nativeElement.hasAttribute?.(`ngNoCva`)&&(this.rawValueAccessors&&this.rawValueAccessors.length>0||this.valueAccessor!==null)||!r.customControl||(this.isCustomControlBased=!0,r.listenToCustomControlModel(n=>{this.control?.setValue(n,{emitModelToViewChange:!1}),this.control?.markAsDirty(),this.viewToModelUpdate(n)}),r.listenToCustomControlOutput(`touch`,()=>{this.control?.markAsTouched()}),this.customControlBindings={},this.isNativeFormElement=eW(r.nativeElement),this.requiredValidatorViaDi=this._rawValidators.find(n=>n instanceof jd))}ngControlUpdate(r,e){if(!this.isCustomControlBased)return;let t=this.control,n=this.customControlBindings;Object.is(n.value,t.value)||(n.value=t.value,r.setCustomControlModelInput(t.value)),this.bindControlProperty(r,n,`touched`,t.touched),this.bindControlProperty(r,n,`dirty`,t.dirty),this.bindControlProperty(r,n,`valid`,t.valid),this.bindControlProperty(r,n,`invalid`,t.invalid),this.bindControlProperty(r,n,`pending`,t.pending),this.bindControlProperty(r,n,`disabled`,t.disabled),this.shouldBindRequired&&this.bindControlProperty(r,n,`required`,this.isRequired);let o=t.errors;if(n.errors!==o){n.errors=o;let a=this._convertErrors(o);r.setInputOnDirectives(`errors`,a)}}get isRequired(){return(this.requiredValidatorViaDi?._enabled||this.control?._hasRequired())??!1}get shouldBindRequired(){return!0}bindControlProperty(r,e,t,n){if(e[t]===n)return;e[t]=n;let o=r.setInputOnDirectives(t,n);this.isNativeFormElement&&!o&&(t===`disabled`||t===`required`)&&this.renderer&&tW(this.renderer,r.nativeElement,t,n)}_convertErrors(r){if(r===null)return[];let e=this.control;return Object.entries(r).map(([t,n])=>new Cw({context:n,kind:t,control:e}))}setParseErrorSource(r){if(r===void 0)return;let e=null,t=Co(()=>{let n=r();return n.length===0?null:n.reduce((o,a)=>(o[a.kind]=a,o),{})});this.parseErrorsValidator=(()=>e).bind(this),Bs(()=>{e=t(),this.control?.updateValueAndValidity({emitEvent:!1})},{injector:this.injector})}removeParseErrorsValidator(r){this.parseErrorsValidator&&(r?.removeValidators(this.parseErrorsValidator),r?.updateValueAndValidity({emitEvent:!1}))}};var nx=class{_cd;constructor(r){this._cd=r}get isTouched(){return this._cd?.control?._touched?.(),!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return this._cd?.control?._pristine?.(),!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return this._cd?.control?._status?.(),!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return this._cd?._submitted?.(),!!this._cd?.submitted}};var mn=(()=>{class i extends nx{constructor(e){super(e)}static ɵfac=function(t){return new(t||i)(ct(Yi,2))};static ɵdir=L({type:i,selectors:[[``,`formControlName`,``],[``,`ngModel`,``],[``,`formControl`,``]],hostVars:14,hostBindings:function(t,n){t&2&&ee(`ng-untouched`,n.isUntouched)(`ng-touched`,n.isTouched)(`ng-pristine`,n.isPristine)(`ng-dirty`,n.isDirty)(`ng-valid`,n.isValid)(`ng-invalid`,n.isInvalid)(`ng-pending`,n.isPending)},standalone:!1,features:[pe]})}return i})();var ax=(()=>{class i extends nx{constructor(e){super(e)}static ɵfac=function(t){return new(t||i)(ct(Gd,10))};static ɵdir=L({type:i,selectors:[[``,`formGroupName`,``],[``,`formArrayName`,``],[``,`ngModelGroup`,``],[``,`formGroup`,``],[``,`formArray`,``],[`form`,3,`ngNoForm`,``],[``,`ngForm`,``]],hostVars:16,hostBindings:function(t,n){t&2&&ee(`ng-untouched`,n.isUntouched)(`ng-touched`,n.isTouched)(`ng-pristine`,n.isPristine)(`ng-dirty`,n.isDirty)(`ng-valid`,n.isValid)(`ng-invalid`,n.isInvalid)(`ng-pending`,n.isPending)(`ng-submitted`,n.isSubmitted)},standalone:!1,features:[pe]})}return i})();var Ip=class extends J_{constructor(r,e,t){super(WR(e),$R(t,e)),this.controls=r,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}controls;registerControl(r,e){return this._find(r)||(this.controls[r]=e,e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange),e)}addControl(r,e,t={}){this.registerControl(r,e),this.updateValueAndValidity({emitEvent:t.emitEvent}),this._onCollectionChange()}removeControl(r,e={}){let t=this._find(r);t&&t._registerOnCollectionChange(()=>{}),delete this.controls[r],this.updateValueAndValidity({emitEvent:e.emitEvent}),this._onCollectionChange()}setControl(r,e,t={}){let n=this._find(r);n&&n._registerOnCollectionChange(()=>{}),delete this.controls[r],e&&this.registerControl(r,e),this.updateValueAndValidity({emitEvent:t.emitEvent}),this._onCollectionChange()}contains(r){return this._find(r)?.enabled===!0}setValue(r,e={}){pi(()=>{Jj(this,!0,r),Object.keys(r).forEach(t=>{Xj(this,!0,t),this.controls[t].setValue(r[t],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)})}patchValue(r,e={}){r!=null&&(Object.keys(r).forEach(t=>{let n=this._find(t);n&&n.patchValue(r[t],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e))}reset(r$11={},e={}){this._forEachChild((t,n)=>{t.reset(r$11?r$11[n]:null,s(r({},e),{onlySelf:!0}))}),this._updatePristine(e,this),this._updateTouched(e,this),this.updateValueAndValidity(e),e?.emitEvent!==!1&&this._events.next(new Ud(this))}getRawValue(){return this._reduceChildren({},(r,e,t)=>(r[t]=e.getRawValue(),r))}_syncPendingControls(){let r=this._reduceChildren(!1,(e,t)=>t._syncPendingControls()?!0:e);return r&&this.updateValueAndValidity({onlySelf:!0}),r}_forEachChild(r){Object.keys(this.controls).forEach(e=>{let t=this.controls[e];t&&r(t,e)})}_setUpControls(){this._forEachChild(r=>{r.setParent(this),r._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(r){for(let[e,t]of Object.entries(this.controls))if(this.contains(e)&&r(t))return!0;return!1}_reduceValue(){return this._reduceChildren({},(e,t,n)=>((t.enabled||this.disabled)&&(e[n]=t.value),e))}_reduceChildren(r,e){let t=r;return this._forEachChild((n,o)=>{t=e(t,n,o)}),t}_allControlsDisabled(){for(let r of Object.keys(this.controls))if(this.controls[r].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(r){return qR(this.controls,r)?this.controls[r]:null}};function DR(i,r){let e=i.indexOf(r);e>-1&&i.splice(e,1)}function TR(i){return typeof i==`object`&&i!==null&&Object.keys(i).length===2&&`value`in i&&`disabled`in i}var sx=class extends J_{defaultValue=null;_onChange=[];_pendingValue;_pendingChange=!1;constructor(r=null,e,t){super(WR(e),$R(t,e)),this._applyFormState(r),this._setUpdateStrategy(e),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),rx(e)&&(e.nonNullable||e.initialValueIsDefault)&&(TR(r)?this.defaultValue=r.value:this.defaultValue=r)}setValue(r,e={}){pi(()=>{this.value=this._pendingValue=r,this._onChange.length&&e.emitModelToViewChange!==!1&&this._onChange.forEach(t=>t(this.value,e.emitViewToModelChange!==!1)),this.updateValueAndValidity(e)})}patchValue(r,e={}){this.setValue(r,e)}reset(r=this.defaultValue,e={}){this._applyFormState(r),this.markAsPristine(e),this.markAsUntouched(e),this.setValue(this.value,e),e.overwriteDefaultValue&&(this.defaultValue=this.value),this._pendingChange=!1,e?.emitEvent!==!1&&this._events.next(new Ud(this))}_updateValue(){}_anyControls(r){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(r){this._onChange.push(r)}_unregisterOnChange(r){DR(this._onChange,r)}registerOnDisabledChange(r){this._onDisabledChange.push(r)}_unregisterOnDisabledChange(r){DR(this._onDisabledChange,r)}_forEachChild(r){}_syncPendingControls(){return this.updateOn===`submit`&&(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),this._pendingChange)?(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),!0):!1}_applyFormState(r){TR(r)?(this.value=this._pendingValue=r.value,r.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=r}};var _W=i=>i instanceof sx;var xW=(()=>{class i extends Gd{callSetDisabledState;get submitted(){return pi(this._submittedReactive)}set submitted(e){this._submittedReactive.set(e)}_submitted=Co(()=>this._submittedReactive());_submittedReactive=gi(!1);_oldForm;_onCollectionChange=()=>this._updateDomValue();directives=[];constructor(e,t,n){super(),this.callSetDisabledState=n,this._setValidators(e),this._setAsyncValidators(t)}ngOnChanges(e){this.onChanges(e)}ngOnDestroy(){this.onDestroy()}onChanges(e){this._checkFormPresent(),Object.hasOwn(e,`form`)&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}onDestroy(){this.form&&(ix(this.form,this),this.form._onCollectionChange===this._onCollectionChange&&this.form._registerOnCollectionChange(()=>{}))}get formDirective(){return this}get path(){return[]}addControl(e){let t=this.form.get(e.path);return e._setupWithForm(t,this.callSetDisabledState),t.updateValueAndValidity({emitEvent:!1}),this.directives.push(e),t}getControl(e){return this.form.get(e.path)}removeControl(e){ex(e.control||null,e,!1),fW(this.directives,e)}addFormGroup(e){this._setUpFormContainer(e)}removeFormGroup(e){this._cleanUpFormContainer(e)}getFormGroup(e){return this.form.get(e.path)}getFormArray(e){return this.form.get(e.path)}addFormArray(e){this._setUpFormContainer(e)}removeFormArray(e){this._cleanUpFormContainer(e)}updateModel(e,t){this.form.get(e.path).setValue(t)}onReset(){this.resetForm()}resetForm(e=void 0,t={}){this.form.reset(e,t),this._submittedReactive.set(!1)}onSubmit(e){return this.submitted=!0,hW(this.form,this.directives),this.ngSubmit.emit(e),this.form._events.next(new ww(this.control)),e?.target?.method===`dialog`}_updateDomValue(){this.directives.forEach(e=>{let t=e.control,n=this.form.get(e.path);t!==n&&(ex(t||null,e),_W(n)&&e._setupWithForm(n,this.callSetDisabledState))}),this.form._updateTreeValidity({emitEvent:!1})}_setUpFormContainer(e){let t=this.form.get(e.path);uW(t,e),t.updateValueAndValidity({emitEvent:!1})}_cleanUpFormContainer(e){let t=this.form?.get(e.path);t&&gW(t,e)&&t.updateValueAndValidity({emitEvent:!1})}_updateRegistrations(){this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm?._registerOnCollectionChange(()=>{})}_updateValidators(){kw(this.form,this),this._oldForm&&ix(this._oldForm,this)}_checkFormPresent(){this.form}static ɵfac=function(t){return new(t||i)(ct(rr,10),ct(Tw,10),ct(Np,8))};static ɵdir=L({type:i,features:[pe,Si]})}return i})();var vW={provide:Gd,useExisting:rn(()=>Dp)};var Dp=(()=>{class i extends xW{form=null;ngSubmit=new k;get control(){return this.form}static ɵfac=(()=>{let e;return function(n){return(e||(e=be(i)))(n||i)}})();static ɵdir=L({type:i,selectors:[[``,`formGroup`,``]],hostBindings:function(t,n){t&1&&E(`submit`,function(a){return n.onSubmit(a)})(`reset`,function(){return n.onReset()})},inputs:{form:[0,`formGroup`,`form`]},outputs:{ngSubmit:`ngSubmit`},exportAs:[`ngForm`],standalone:!1,features:[Ae([vW]),pe]})}return i})();var yW={provide:Yi,useExisting:rn(()=>fn$1)};var ER=Promise.resolve();var fn$1=(()=>{class i extends Yi{_changeDetectorRef;callSetDisabledState;control=new sx;static ngAcceptInputType_isDisabled;_registered=!1;_ngModelInjector;viewModel;name=``;isDisabled;model;options;update=new k;constructor(e,t,n,o,a,s,l,c){super(l,c,o),this._changeDetectorRef=a,this.callSetDisabledState=s,this._parent=e,this._setValidators(t),this._setAsyncValidators(n)}ngOnChanges(e){if(this._registered,this._checkForErrors(),!this._registered||`name`in e){if(this._registered&&(this._checkName(),this.formDirective)){let t=e.name.previousValue;this.formDirective.removeControl({name:t,path:this._getPath(t)})}this._setUpControl()}`isDisabled`in e&&this._updateDisabled(e),YR(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective?.removeControl(this)}ɵngControlCreate(e){super.ngControlCreate(e)}ɵngControlUpdate(e){super.ngControlUpdate(e,!1)}get shouldBindRequired(){return!1}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(e){this.viewModel=e,this.update.emit(e)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!!(this.options&&this.options.standalone)}_setUpStandalone(){this.isCustomControlBased?this.setupCustomControl():(this.valueAccessor??=this.selectedValueAccessor,Iw(this.control,this,this.callSetDisabledState)),this.control.updateValueAndValidity({emitEvent:!1})}_setupWithForm(e){this.isCustomControlBased?this.setupCustomControl():(this.valueAccessor??=this.selectedValueAccessor,Iw(this.control,this,e))}_checkForErrors(){this._checkName()}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),!this._isStandalone()&&this.name}_updateValue(e){ER.then(()=>{this.control.setValue(e,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(e){let t=e.isDisabled.currentValue,n=t!==0&&O(t);ER.then(()=>{n&&!this.control.disabled?this.control.disable():!n&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(e){return this._parent?aW(e,this._parent):[e]}static ɵfac=function(t){return new(t||i)(ct(Gd,9),ct(rr,10),ct(Tw,10),ct(zi,10),ct(Ne,8),ct(Np,8),ct(qt,8),ct(Ot,8))};static ɵdir=L({type:i,selectors:[[``,`ngModel`,``,3,`formControlName`,``,3,`formControl`,``]],inputs:{name:`name`,isDisabled:[0,`disabled`,`isDisabled`],model:[0,`ngModel`,`model`],options:[0,`ngModelOptions`,`options`]},outputs:{update:`ngModelChange`},exportAs:[`ngModel`],standalone:!1,features:[Ae([yW,ZR]),pe,Si,y_(null)]})}return i})();var bW={provide:zi,useExisting:rn(()=>Tp),multi:!0};var Tp=(()=>{class i extends MR{writeValue(e){let t=e??``;this.setProperty(`value`,t)}registerOnChange(e){this.onChange=t=>{e(t==``?null:parseFloat(t))}}static ɵfac=(()=>{let e;return function(n){return(e||(e=be(i)))(n||i)}})();static ɵdir=L({type:i,selectors:[[`input`,`type`,`number`,`formControlName`,``,3,`ngNoCva`,``],[`input`,`type`,`number`,`formControl`,``,3,`ngNoCva`,``],[`input`,`type`,`number`,`ngModel`,``,3,`ngNoCva`,``]],hostBindings:function(t,n){t&1&&E(`input`,function(a){return n.onChange(a.target.value)})(`blur`,function(){return n.onTouched()})},standalone:!1,features:[Ae([bW]),pe]})}return i})();var XR=new le(``);var SW={provide:Yi,useExisting:rn(()=>Ep)};var Ep=(()=>{class i extends Yi{_ngModelWarningConfig;callSetDisabledState;viewModel;form;set isDisabled(e){}model;update=new k;static _ngModelWarningSentOnce=!1;_ngModelWarningSent=!1;constructor(e,t,n,o,a,s,l){super(l,s,n),this._ngModelWarningConfig=o,this.callSetDisabledState=a,this._setValidators(e),this._setAsyncValidators(t)}ngOnChanges(e){if(this._isControlChanged(e)){let t=e.form.previousValue;t&&(ex(t,this,!1),this.removeParseErrorsValidator(t)),this.isCustomControlBased?this.setupCustomControl():(this.valueAccessor??=this.selectedValueAccessor,Iw(this.form,this,this.callSetDisabledState)),this.form.updateValueAndValidity({emitEvent:!1})}YR(e,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.form&&ex(this.form,this,!1)}get path(){return[]}get control(){return this.form}viewToModelUpdate(e){this.viewModel=e,this.update.emit(e)}_isControlChanged(e){return Object.hasOwn(e,`form`)}ɵngControlCreate(e){super.ngControlCreate(e)}ɵngControlUpdate(e){super.ngControlUpdate(e,!0)}static ɵfac=function(t){return new(t||i)(ct(rr,10),ct(Tw,10),ct(zi,10),ct(XR,8),ct(Np,8),ct(Ot,8),ct(qt,8))};static ɵdir=L({type:i,selectors:[[``,`formControl`,``]],inputs:{form:[0,`formControl`,`form`],isDisabled:[0,`disabled`,`isDisabled`],model:[0,`ngModel`,`model`]},outputs:{update:`ngModelChange`},exportAs:[`ngForm`],standalone:!1,features:[Ae([SW,ZR]),pe,Si,y_(null)]})}return i})();var JR=(()=>{class i{static ɵfac=function(t){return new(t||i)};static ɵmod=Me({type:i});static ɵinj=Ee({})}return i})();var cn=(()=>{class i{static withConfig(e){return{ngModule:i,providers:[{provide:Np,useValue:e.callSetDisabledState??ox}]}}static ɵfac=function(t){return new(t||i)};static ɵmod=Me({type:i});static ɵinj=Ee({imports:[JR]})}return i})();var lx=(()=>{class i{static withConfig(e){return{ngModule:i,providers:[{provide:XR,useValue:e.warnOnNgModelWithFormControl??`always`},{provide:Np,useValue:e.callSetDisabledState??ox}]}}static ɵfac=function(t){return new(t||i)};static ɵmod=Me({type:i});static ɵinj=Ee({imports:[JR]})}return i})();var cx=typeof global==`object`&&global&&global.Object===Object&&global;var CW=typeof self==`object`&&self&&self.Object===Object&&self;var Zi=cx||CW||Function(`return this`)();var Xa=Zi.Symbol;var eA=Object.prototype;var DW=eA.hasOwnProperty;var TW=eA.toString;var kp=Xa?Xa.toStringTag:void 0;function EW(i){var r=DW.call(i,kp),e=i[kp];try{i[kp]=void 0;var t=!0}catch{}var n=TW.call(i);return t&&(r?i[kp]=e:delete i[kp]),n}var tA=EW;var MW=Object.prototype.toString;function RW(i){return MW.call(i)}var iA=RW;var AW=`[object Null]`;var FW=`[object Undefined]`;var nA=Xa?Xa.toStringTag:void 0;function PW(i){return i==null?i===void 0?FW:AW:nA&&nA in Object(i)?tA(i):iA(i)}var To=PW;function OW(i){return i!=null&&typeof i==`object`}var Fr=OW;var la=Array.isArray;function LW(i){var r=typeof i;return i!=null&&(r==`object`||r==`function`)}var fr=LW;function zW(i){return i}var dx=zW;var BW=`[object AsyncFunction]`;var HW=`[object Function]`;var GW=`[object GeneratorFunction]`;var UW=`[object Proxy]`;function jW(i){if(!fr(i))return!1;var r=To(i);return r==HW||r==GW||r==BW||r==UW}var Wd=jW;var ux=Zi[`__core-js_shared__`];var rA=(function(){var i=/[^.]+$/.exec(ux&&ux.keys&&ux.keys.IE_PROTO||``);return i?`Symbol(src)_1.`+i:``})();function $W(i){return!!rA&&rA in i}var oA=$W;var QW=Function.prototype.toString;function KW(i){if(i!=null){try{return QW.call(i)}catch{}try{return i+``}catch{}}return``}var Ja=KW;var YW=/[\\^$.*+?()[\]{}|]/g;var ZW=/^\[object .+?Constructor\]$/;var XW=Function.prototype;var JW=Object.prototype;var e$=XW.toString;var t$=JW.hasOwnProperty;var i$=RegExp(`^`+e$.call(t$).replace(YW,`\\$&`).replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,`$1.*?`)+`$`);function n$(i){if(!fr(i)||oA(i))return!1;return(Wd(i)?i$:ZW).test(Ja(i))}var aA=n$;function r$(i,r){return i?.[r]}var sA=r$;function o$(i,r){var e=sA(i,r);return aA(e)?e:void 0}var _r=o$;var gx=_r(Zi,`WeakMap`);var lA=Object.create;var cA=(function(){function i(){}return function(r){if(!fr(r))return{};if(lA)return lA(r);i.prototype=r;var e=new i;return i.prototype=void 0,e}})();function l$(i,r,e){switch(e.length){case 0:return i.call(r);case 1:return i.call(r,e[0]);case 2:return i.call(r,e[0],e[1]);case 3:return i.call(r,e[0],e[1],e[2])}return i.apply(r,e)}var dA=l$;function c$(i,r){var e=-1,t=i.length;for(r||(r=Array(t));++e0){if(++r>=d$)return arguments[0]}else r=0;return i.apply(void 0,arguments)}}var gA=p$;function h$(i){return function(){return i}}var pA=h$;var $d=(function(){try{var i=_r(Object,`defineProperty`);return i({},``,{}),i}catch{}})();var mA=gA($d?function(i,r){return $d(i,`toString`,{configurable:!0,enumerable:!1,value:pA(r),writable:!0})}:dx);var x$=9007199254740991;var v$=/^(?:0|[1-9]\d*)$/;function y$(i,r){var e=typeof i;return r=r??x$,!!r&&(e==`number`||e!=`symbol`&&v$.test(i))&&i>-1&&i%1==0&&i-1&&i%1==0&&i<=E$}var hx=k$;function M$(i){return i!=null&&hx(i.length)&&!Wd(i)}var qs=M$;function R$(i,r,e){if(!fr(e))return!1;var t=typeof r;return(t==`number`?qs(e)&&px(r,e.length):t==`string`&&r in e)?ca(e[r],i):!1}var bA=R$;function A$(i){return yA(function(r,e){var t=-1,n=e.length,o=n>1?e[n-1]:void 0,a=n>2?e[2]:void 0;for(o=i.length>3&&typeof o==`function`?(n--,o):void 0,a&&bA(e[0],e[1],a)&&(o=n<3?void 0:o,n=1),r=Object(r);++t-1}var $A=Jq;function eQ(i,r){var e=this.__data__,t=Qs(e,i);return t<0?(++this.size,e.push([i,r])):e[t][1]=r,this}var qA=eQ;function Zd(i){var r=-1,e=i==null?0:i.length;for(this.clear();++rs))return!1;var c=o.get(i),d=o.get(r);if(c&&d)return c==r&&d==i;var p=-1,f=!0,v=e&ZQ?new T3:void 0;for(o.set(i,r),o.set(r,i);++p\d{4})-(?\d{1,2})(?:-(?\d{1,2}))?(?Cookies and You\r + \r + \r +\r +\`\`\`\r +\r +## Result \r +![image](https://user-images.githubusercontent.com/1472513/215043215-a60897a2-82d7-47ad-94d2-4c726f597eff.png)\r +\r +## Expected result \r +![image](https://user-images.githubusercontent.com/1472513/215043345-5b16cdd9-9886-45b4-8eb5-f9e561b71fda.png)\r +\r +\r +\r +`,title:`igx-banner-actions no longer align vertically`,number:12594,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12594`,id:1559371382,pullRequest:null},{createdAt:`2023-01-26T14:07:00Z`,assignee:{id:4118303,avatarUrl:`https://avatars.githubusercontent.com/u/4118303?v=4`,login:`simeonoff`,email:null,url:`https://api.github.com/users/simeonoff`},labels:[{id:324654935,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:question:%20question`,name:`:question: question`,color:`cc317c`,default:!1,description:``},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +Hi, I've got some issues with the ignite package when trying to upgrade out package from 14 to 15. Not sure if this is a bug or something related to my configuration, but I belive ive done the updates as per the documentation, and I'm not really sure whats wrong.\r +\r +I've run ng update igniteui-angular without any issues. \r +In my theme file, I've replaced our previous import:\r +![image](https://user-images.githubusercontent.com/12936286/214850731-64cdf55c-b015-4f1a-9e71-7d3ae8c24087.png)\r +\r +and replaced it with use mentioned in the upgrade guide and theming guide:\r +![image](https://user-images.githubusercontent.com/12936286/214850895-d3911288-ac95-4b77-8f2c-91fab35cedee.png)\r +\r +Still I'm getting the errors below. Oddly enough, the old import seems to work on the dev server, but when building the application for production, this fails as well. \r +\r + * igniteui-angular version: 15.0.8\r + * browser: Chrome\r +\r +\r +## Result \r +![image](https://user-images.githubusercontent.com/12936286/214850081-e8ad9fcc-7710-4192-a9d9-ac175bcc27e0.png)\r +\r +\r +\r +\r +`,title:`Theme issues in igx 15 upgrade`,number:12590,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12590`,id:1558195166,pullRequest:null},{createdAt:`2023-01-26T08:42:48Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:438360283,nodeId:`MDU6TGFiZWw0MzgzNjAyODM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/checkbox`,name:`checkbox`,color:`fef200`,default:!1,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +If inputs are invalid they get a red border.\r +If checkboxes are invalid they get no special styling.\r +\r + * igniteui-angular version: 15.0.8\r +\r +## Expected result \r +Checkboxes should have an invalid styling so you can see that they are invalid.\r +`,title:`Checkbox: missing validation styling`,number:12585,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12585`,id:1557789089,pullRequest:null},{createdAt:`2023-01-26T07:33:26Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:1284891436,nodeId:`MDU6TGFiZWwxMjg0ODkxNDM2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20multi-row-layout`,name:`grid: multi-row-layout`,color:`7fefd3`,default:!1,description:``}],body:`## Description \r +Currently the columns are initialized async are not aware of setting the filteringMode option on ContentInit hook.\r +\r + * igniteui-angular version: 15.0.x\r + * browser: N/A\r +\r +## Steps to reproduce \r +\r +1. [Go to following sample](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/grids/grid/multi-row-layout) \r +\r +## Result \r +Header of the grid is misaligned.\r +Note: The simple filtering mode is not supported for MRL scenarios.\r +\r +## Expected result \r +MRL headers should render normally and excelStyle filtering should be applied in this cases\r +\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/1182001/214780607-5678553c-1ae9-457f-bbc0-4250617110dd.png)\r +\r +`,title:`Grid should infer excelStyle filtering for MRL in different way`,number:12584,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12584`,id:1557728793,pullRequest:null},{createdAt:`2023-01-25T14:23:38Z`,assignee:{id:49060557,avatarUrl:`https://avatars.githubusercontent.com/u/49060557?v=4`,login:`igdmdimitrov`,email:null,url:`https://api.github.com/users/igdmdimitrov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:897946909,nodeId:`MDU6TGFiZWw4OTc5NDY5MDk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/excel-exporter`,name:`excel-exporter`,color:`49d156`,default:!1,description:``},{id:3982407566,nodeId:`MDU6TGFiZWwzOTgyNDA3NTY2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid`,name:`grid`,color:`95f9d5`,default:!1,description:null}],body:`## Description \r +\`Time\` and \`DateTime\` columns are exported in excel as \`m/d/yy\`. Excel exporter should export \`Time\` and \`DateTime\` columns in the corresponding formats \`h:mm:ss\` and \`m/d/yy h:mm:ss\`\r +\r + * igniteui-angular version: \r + * browser: \r +\r +## Steps to reproduce \r +\r +1. Open [Stackblitz sample](https://stackblitz.com/edit/angular-xwwb75-u1abib?file=src%2Fapp%2Fservices%2Fexcel-export-sample-1%2Fexcel-export-sample-1.component.ts)\r +2. Click \`Export\`\r +\r +## Result \r +![image](https://user-images.githubusercontent.com/49060557/214588025-1e3ea89a-ed47-4525-855e-7fffde7d87d9.png)\r +\r +## Expected result \r +![image](https://user-images.githubusercontent.com/49060557/214586809-81fbb875-820f-4f84-8104-ea7796cc4eee.png)\r +\r +\r +`,title:`Export Time and DateTime columns in the corresponding formats`,number:12581,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12581`,id:1556743911,pullRequest:null},{createdAt:`2023-01-25T07:54:29Z`,assignee:{id:52001020,avatarUrl:`https://avatars.githubusercontent.com/u/52001020?v=4`,login:`radomirchev`,email:null,url:`https://api.github.com/users/radomirchev`},labels:[{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +As discussed in https://github.com/IgniteUI/igniteui-angular/discussions/12500 it would be a nice feature be able to easily choose which field to focus when row adding or row editing starts. Our use case was that we have a column at index 0 determining if the entity is considered active or not. The column at index 1 is the name of this entity. In 99% of cases, when adding a new entity, the user would want that entity to be active, hence it makes a lot more sense to just start the edit at the name column.\r +\r +## Describe the solution you'd like\r +An input providing the field of the column in which to focus when adding or editing starts. I'm unsure if there is a use case for differentiating (having two inputs) between add and edit, but my guess is that its not.\r +\r +## Describe alternatives you've considered\r +An alternative is outlined in the linked discussion, and does work, but locking and unlocking edit of a column feels a bit "hackish" to me.\r +`,title:`Choose column to focus when starting add/edit of row in igx grids.`,number:12579,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12579`,id:1556204633,pullRequest:null},{createdAt:`2023-01-24T00:59:29Z`,assignee:{id:49060557,avatarUrl:`https://avatars.githubusercontent.com/u/49060557?v=4`,login:`igdmdimitrov`,email:null,url:`https://api.github.com/users/igdmdimitrov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +Changing condition by clicking condition border, it doesn't work.\r +\r + * igniteui-angular version: 15.0.0\r + * browser: Chrome\r +\r +## Steps to reproduce \r +\r +There are the steps that can be reproduced.\r +It can be reproduced in this sample.\r +https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/advanced-filtering\r +\r +1) Open the Advanced Filtering dialog and set some "AND" condition logic, then apply.\r +2) Open the dialog again, then change condition to "OR" by clicking blue border, then apply.\r +3) Changed logic does not reflected, if I open the dialog, it shows as "AND" condition\r +\r +## Attachments \r +![f7042176ea49a2b2823087af3a8fd6d8](https://user-images.githubusercontent.com/5829221/214191061-f07ff7e8-92ca-49ea-b118-a38c81366449.gif)\r +`,title:`IgxGrid - Condition Changing doesn't work in Advanced Filtering Dialog`,number:12570,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12570`,id:1554086182,pullRequest:null},{createdAt:`2023-01-23T22:21:17Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +Editing the primary key in a pinned row unpins the row\r +\r +## Steps to reproduce \r +in the following sample edit the ID column in one of the pinned rows\r +https://stackblitz.com/edit/angular-ujej8f?file=src/app/grid/grid-row-pinning/grid-row-pinning.component.html\r +\r +\r +## Result \r +After the edit is complete the row is no longer pinned\r +\r +## Expected result \r +The row remains pinned after editing the primary key\r +\r +\r +`,title:`Grid - Editing the primary key in a pinned row unpins the row`,number:12569,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12569`,id:1553925367,pullRequest:null},{createdAt:`2023-01-23T14:40:59Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531441843,nodeId:`MDU6TGFiZWw1MzE0NDE4NDM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:fire:%20severity:%20high`,name:`:fire: severity: high`,color:`d93f0b`,default:!1,description:``},{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`},{id:651042855,nodeId:`MDU6TGFiZWw2NTEwNDI4NTU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:date:%20date-picker`,name:`:date: date-picker`,color:`afea6b`,default:!1,description:``},{id:858962961,nodeId:`MDU6TGFiZWw4NTg5NjI5NjE=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:chart_with_downwards_trend:%20regression`,name:`:chart_with_downwards_trend: regression`,color:`041791`,default:!1,description:``}],body:`## Description \r +When the IgxDatePicker is clicked or tab over, that is, when the focus event fires, the IgxDatePicker is not selected. For example the\r +IgxTimePicker is selected as expected.\r +\r + * igniteui-angular version: 14.2.x 15.0.x\r +\r +## Steps to reproduce \r +\r +Open [this sample](https://stackblitz.com/edit/angular-agmzk2?file=src/app/datepicker-sample/datepicker-sample.component.html).\r +\r +1. Click or tab navigate to the igx-date-picker.\r +\r +## Result \r +IgxDatePicker is not selected on focus.\r +\r +## Expected result \r +IgxDatePicker should be selected on focus.\r +\r +## Attachments \r +![issue](https://user-images.githubusercontent.com/48180072/214029250-b7c27a65-2ffb-4bf5-88cc-c325432fbe78.gif)\r +\r +`,title:`IgxDatePicker is not selected on focus`,number:12566,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12566`,id:1553217761,pullRequest:null},{createdAt:`2023-01-20T18:53:26Z`,assignee:{id:4118303,avatarUrl:`https://avatars.githubusercontent.com/u/4118303?v=4`,login:`simeonoff`,email:null,url:`https://api.github.com/users/simeonoff`},labels:[{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +In the current version, the height of the card is determined by its content. This by itself is fine, but also creates a problem when multiple cards are added to a flex container (\`flex-direction: row\`) and bound to data. You end up with cards with different heights and no way to give them the same height. Moreover, setting \`align-items:stretch\` will have no effect.\r +\r +image\r +\r +Even if we manually add a height via CSS, the card content area does not look right.\r +image\r +\r +## Describe the solution you'd like\r +Card should support height, and when resizing, position content as expected. That is, card-actions remain anchored to the bottom, and the rest stay put. \r +\r +## Describe alternatives you've considered\r +My solution may not be accurate as I'm not that experienced with web-layouts. So any alternate suggestions are welcome.\r +\r +## Additional context\r +Add any other context or screenshots about the feature request here.\r +`,title:`Support height for card component`,number:12555,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12555`,id:1551304578,pullRequest:null},{createdAt:`2023-01-19T16:14:06Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:3535663847,nodeId:`LA_kwDOAxIT487SvfLn`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/simple-combo`,name:`simple-combo`,color:`D5F8FB`,default:!1,description:``}],body:`## Describe the solution you'd like\r +I would like to be able to jump to the next item in the list after it has been filtered instead of going over the first active item.\r +\r +This is the solution I'm looking for:\r +\r +\r +https://user-images.githubusercontent.com/4118303/213494468-d45c3ebd-2cce-469e-a38b-d1e7d1c49118.mov\r +\r +`,title:`[Simple Combo] - Improve item navigation using keyboard after filtering`,number:12547,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12547`,id:1549480931,pullRequest:null},{createdAt:`2023-01-19T16:06:19Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`},{id:3535663847,nodeId:`LA_kwDOAxIT487SvfLn`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/simple-combo`,name:`simple-combo`,color:`D5F8FB`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +I would like to have the simple combo's dropdown menu stay open even after the filtering input is focused using keyboard navigation, similar to how it works in the standard \`igx-combo\` component.\r +\r +To be specific, this is the behavior I'm looking for:\r +\r +https://user-images.githubusercontent.com/4118303/213492493-ad66191e-23b2-4b61-bda6-ecafeef1572a.mov\r +\r +`,title:`[Simple Combo] - Consistent keyboard navigation`,number:12546,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12546`,id:1549465665,pullRequest:null},{createdAt:`2023-01-19T15:52:35Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:531438875,nodeId:`MDU6TGFiZWw1MzE0Mzg4NzU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development`,name:`:hammer_and_wrench: status: in-development`,color:`0052cc`,default:!1,description:`Issues and PRs with active development on them`},{id:3535663847,nodeId:`LA_kwDOAxIT487SvfLn`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/simple-combo`,name:`simple-combo`,color:`D5F8FB`,default:!1,description:``}],body:`## Describe the solution you'd like\r +I would like to have the simple combo dropdown open when I click the input so that I can quickly scan the available options before I start typing.\r +\r +\r +https://user-images.githubusercontent.com/4118303/213488652-f08c9820-98a6-48ef-831f-b9def3158ffc.mov\r +\r +`,title:`[Simple Combo] - Open dropdown on input click`,number:12544,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12544`,id:1549439170,pullRequest:null},{createdAt:`2023-01-19T12:29:32Z`,assignee:{id:59446295,avatarUrl:`https://avatars.githubusercontent.com/u/59446295?v=4`,login:`SisIvanova`,email:null,url:`https://api.github.com/users/SisIvanova`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:438338013,nodeId:`MDU6TGFiZWw0MzgzMzgwMTM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/radio-button`,name:`radio-button`,color:`0052cc`,default:!1,description:null},{id:531438875,nodeId:`MDU6TGFiZWw1MzE0Mzg4NzU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development`,name:`:hammer_and_wrench: status: in-development`,color:`0052cc`,default:!1,description:`Issues and PRs with active development on them`}],body:`## Description \r +\r +Use the attachment as a reference for the missing error state.\r +\r +## Attachments \r +\r +\r +![Reference](https://user-images.githubusercontent.com/91875400/214243404-c56acf55-871b-4244-b853-f1b768bd9eeb.png)\r +\r +`,title:`Fluent Radio Button missing error state`,number:12543,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12543`,id:1549062181,pullRequest:null},{createdAt:`2023-01-19T09:16:06Z`,assignee:{id:59446295,avatarUrl:`https://avatars.githubusercontent.com/u/59446295?v=4`,login:`SisIvanova`,email:null,url:`https://api.github.com/users/SisIvanova`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:438338013,nodeId:`MDU6TGFiZWw0MzgzMzgwMTM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/radio-button`,name:`radio-button`,color:`0052cc`,default:!1,description:null},{id:531438875,nodeId:`MDU6TGFiZWw1MzE0Mzg4NzU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development`,name:`:hammer_and_wrench: status: in-development`,color:`0052cc`,default:!1,description:`Issues and PRs with active development on them`},{id:1290006335,nodeId:`MDU6TGFiZWwxMjkwMDA2MzM1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/radio-group`,name:`radio-group`,color:`e87971`,default:!1,description:``}],body:`## Description \r +The space between the Radio Button and the label should be 2px. and the space between each Radio Button should be 16px for horizontal orientation and 0px for vertical orientation\r +\r +-The hover state background should be grays.600 with 6% opacity for the light theme and 12% opacity for the dark one.\r +-The focus state background should be grays.600 with 12% opacity for the light theme and 24% opacity for the dark one.\r +\r +**Missing error state:**\r +\r +-The hover state background should be error.500 with 6% opacity for the light theme and 12% opacity for the dark one.\r +-The focus state background should be error.500 with 12% opacity for the light theme and 24% opacity for the dark one. \r +-Labels are error.500 color always\r +\r +## Attachments \r +212893146-65c5b648-c9cd-41ea-89f8-1b268a946b7a\r +\r +\r +`,title:`Design amendments in Radio Button / Radio Button Group for Material Design`,number:12541,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12541`,id:1548774972,pullRequest:null},{createdAt:`2023-01-18T14:47:42Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`}],body:`## Description \r +\r +Add a custom cell template.\r +\r +Try to use anything from "cell" context:\r +![image](https://user-images.githubusercontent.com/12942794/213201992-25d32e7b-66e7-4008-be4e-3335e25d1f79.png)\r +\r + * igniteui-angular version: 15.0.6\r + * browser: N/A\r +\r +## Steps to reproduce \r +\r +1. Add a grid with custom cell template:\r + \`\`\`html\r + \r + \r + \r + \r + {{ cell.value | titlecase }}\r + \r + \r + \r + \r + \r + \r + \r + \r + \`\`\`\r +2. Try to use anything from \`let-cell\`\r +\r +## Result \r +\r +> Object is possibly 'undefined'.ngtsc(2532)\r +![image](https://user-images.githubusercontent.com/12942794/213201971-dfa24aaa-5fe1-4070-b181-a84014e095c2.png)\r +\r +## Expected result \r +Since this is a cell template, my understanding is that "cell" should always be defined.\r +`,title:`igxCell template directive exposes "cell" as possibly undefined`,number:12538,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12538`,id:1538126308,pullRequest:null},{createdAt:`2023-01-18T09:24:54Z`,assignee:{id:48180072,avatarUrl:`https://avatars.githubusercontent.com/u/48180072?v=4`,login:`georgianastasov`,email:null,url:`https://api.github.com/users/georgianastasov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438875,nodeId:`MDU6TGFiZWw1MzE0Mzg4NzU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development`,name:`:hammer_and_wrench: status: in-development`,color:`0052cc`,default:!1,description:`Issues and PRs with active development on them`}],body:`## Description \r +Whenever a dialog is already opened, the close behavior cannot be changed anymore.\r +"closeOnEscape" and "closeOnOutsideSelect" are ignoring new incoming values.\r +\r + * igniteui-angular version: "@infragistics/igniteui-angular": "14.1.1",\r + * browser: Version 109.0.5414.74 (64-Bit)\r +\r +## Steps to reproduce \r +\r +1. Click the button to open the dialog\r +2. In the dialog, click the button to disable the close behavior\r +3. Press ESC-Key or click besides the dialog\r +\r +## Result \r +The dialog closes\r +\r +## Expected result \r +The dialog shouldn't close\r +\r +\r +## Attachments \r +Code sample of the template part (html)\r +\`\`\`\r +\r +\r +\r + \r +\r +\`\`\`\r +\r +in the .ts part you just need to declare the var\r +\`\`\`\r +...\r +export class MyComponent {\r + disableActions: boolean = false;\r + ...\r +}\r +\`\`\`\r +\r +`,title:`Dialog: Change close configuration after opening is not working`,number:12537,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12537`,id:1537666495,pullRequest:null},{createdAt:`2023-01-18T07:53:04Z`,assignee:{id:54146583,avatarUrl:`https://avatars.githubusercontent.com/u/54146583?v=4`,login:`randriova`,email:null,url:`https://api.github.com/users/randriova`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:531439920,nodeId:`MDU6TGFiZWw1MzE0Mzk5MjA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20pending-localization`,name:`status: pending-localization`,color:`fbca44`,default:!1,description:null}],body:`## Description \r +In a support case it was suggested by a native French speaker that the \`igx_grid_filter_row_close\` string is not correctly translated in French as "Fermer" and could be replaced by "\xC9teindre".\r +This is the current French translation of the \`igx_grid_filter_row_reset\` string, though, which means it also has to be reconsidered.\r +We currently do not have a suggestion from them on this, however it could probably be "R\xE9initialiser"\r +\r + * igniteui-angular version: any\r + * browser: -\r +\r +## Steps to reproduce \r +\r +1. [Sample](https://stackblitz.com/edit/igx-grid-filter-fr?file=src/app/grid/grid-filtering-sample/grid-filtering-sample.component.ts) with French i18n\r +\r +## Result \r +\r +\r +## Expected result \r +\r +\r +\r +## Attachments \r +![1](https://user-images.githubusercontent.com/35433937/213114102-c28c06cd-cd2e-48d4-90f9-95dd364aa57c.png)\r +\r +\r +`,title:`i18n: Filter row strings in French reported as incorrect`,number:12536,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12536`,id:1537549029,pullRequest:null},{createdAt:`2023-01-13T09:50:04Z`,assignee:{id:59446295,avatarUrl:`https://avatars.githubusercontent.com/u/59446295?v=4`,login:`SisIvanova`,email:null,url:`https://api.github.com/users/SisIvanova`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:1040274972,nodeId:`MDU6TGFiZWwxMDQwMjc0OTcy`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20tree-grid`,name:`grid: tree-grid`,color:`d4c5f9`,default:!1,description:``},{id:1221520389,nodeId:`MDU6TGFiZWwxMjIxNTIwMzg5`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20excel-style-filtering`,name:`grid: excel-style-filtering`,color:`fef2c0`,default:!1,description:``}],body:`## Description \r +A redundant scrollbar is displayed when you expand a tree node inside the filtering dialog\r +\r + * igniteui-angular version: 15\r + * browser: \r +\r +## Steps to reproduce \r +\r +1. Create a project with the attached files or run the samples browser and navigate to \`samples/tree-grid/treegrid-excel-style-filtering-sample-1\`\r +2. Open the filtering dialog for column \`Product Name\`\r +3. Expand the \`Food\` node\r +\r +## Result \r +Two scrollbars are visible\r +![screenshot](https://user-images.githubusercontent.com/2778393/212288296-51d06bed-5982-4f8a-a5e1-fecd0a51a489.png)\r +\r +## Expected result \r +No second scrollbar should be visible\r +\r +\r +## Attachments \r +[tree-grid-excel-style-filtering-sample-1.zip](https://github.com/IgniteUI/igniteui-angular/files/10410285/tree-grid-excel-style-filtering-sample-1.zip)\r +\r +`,title:`Redundant scrollbar is displayed in filtering dialog`,number:12526,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12526`,id:1532014276,pullRequest:null},{createdAt:`2023-01-12T22:03:21Z`,assignee:{id:47036441,avatarUrl:`https://avatars.githubusercontent.com/u/47036441?v=4`,login:`MonikaKirkova`,email:null,url:`https://api.github.com/users/MonikaKirkova`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +After selecting a bunch of cells in the grid there is no easy way to deselect one cell while leaving the other cells selected\r +\r +## Describe the solution you'd like\r +After selecting multiple cells using CNTL / click should be able to deselect an individual cell using CNTL / click\r +\r +\r +`,title:`IgxGrid: after selecting multiple cells using CNTL / click should be able to deselect an individual cell using CNTL / click`,number:12522,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12522`,id:1531425768,pullRequest:null},{createdAt:`2023-01-12T09:27:48Z`,assignee:{id:49060557,avatarUrl:`https://avatars.githubusercontent.com/u/49060557?v=4`,login:`igdmdimitrov`,email:null,url:`https://api.github.com/users/igdmdimitrov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +When you filter a date column by selecting a date and then change the filter to a unary filter like today then the filter disappears.\r +\r + * igniteui-angular version: 15.0.6\r +\r +## Steps to reproduce \r +https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/filtering\r +1. filter the date column with equals some date\r +2. change the filter to today\r +\r +## Result \r +The filter disappears.\r +\r +## Expected result \r +The today filter should be set.\r +\r +## Attachments \r +![2023-01-12_10h24_30](https://user-images.githubusercontent.com/46870283/212028750-cb122c54-6394-42f8-ad5e-b3688b90b52c.gif)\r +`,title:`IgxGid: date filter disappears when changing to unary filter`,number:12519,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12519`,id:1530383145,pullRequest:null},{createdAt:`2023-01-11T16:06:11Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +The IgxDatePicker converts the selected date in a javascript \`Date\` object.\r +When you serialize this for a http request the time and timezone is included and converted to UTC.\r +For example if you are in the timezone UTC+1 and you select the date 2023-01-01 it gets serialized to '2022-12-31T23:00:00.000Z'.\r +This is a problem when the backend only expects a iso date string (YYYY-MM-DD).\r +\r +## Describe the solution you'd like\r +It would be nice if there was a input like \`[useIsoString]="true"\` so that the date picker uses an iso date string (YYYY-MM-DD) as model instead of a \`Date\` object.\r +`,title:`IgxDatePicker: ability to use an iso date string as model`,number:12512,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12512`,id:1529306486,pullRequest:null},{createdAt:`2023-01-10T15:31:45Z`,assignee:{id:49060557,avatarUrl:`https://avatars.githubusercontent.com/u/49060557?v=4`,login:`igdmdimitrov`,email:null,url:`https://api.github.com/users/igdmdimitrov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +When using special character (ie &) as header text the excel export will produce an invalid file. The user will then be prompted by a warning if the excel content should be recovered.\r +\r + * igniteui-angular version: v15\r + * browser: Chrome 108\r +\r +## Steps to reproduce \r +1. See Stackblitz Example https://stackblitz.com/edit/angular-qvznmb\r +2. Export grid data to excel\r +3. Open exported file\r +\r +## Result \r +Excel will prompt a warning regarding issue with the content. A deep dive will narrow it down to the special character & in the column header\r +![image](https://user-images.githubusercontent.com/264579/211591444-974afba6-45db-402b-8b77-f8d7ce52dc00.png)\r +\r +When removing the char & from the grid column header the warning will disappear.\r +\r +## Expected result \r +The exported content should produce a valid file.\r +\r +`,title:`Grid excel export produce invalid content when using special char`,number:12510,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12510`,id:1527596364,pullRequest:null},{createdAt:`2023-01-09T12:33:21Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:531438875,nodeId:`MDU6TGFiZWw1MzE0Mzg4NzU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development`,name:`:hammer_and_wrench: status: in-development`,color:`0052cc`,default:!1,description:`Issues and PRs with active development on them`},{id:970329408,nodeId:`MDU6TGFiZWw5NzAzMjk0MDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20cell-editing`,name:`grid: cell-editing`,color:`70e5df`,default:!1,description:``},{id:1102774151,nodeId:`MDU6TGFiZWwxMTAyNzc0MTUx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-editing`,name:`grid: row-editing`,color:`77d86a`,default:!1,description:``},{id:1105153503,nodeId:`MDU6TGFiZWwxMTA1MTUzNTAz`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/batch-editing`,name:`batch-editing`,color:`73eea4`,default:!1,description:``},{id:3982407566,nodeId:`MDU6TGFiZWwzOTgyNDA3NTY2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid`,name:`grid`,color:`95f9d5`,default:!1,description:null}],body:`## Description \r +Row transactions and grid validation service are not sync when using transaction clear method to clear multiple invalid cells\r +\r + * igniteui-angular version: \r + * browser: \r +\r +## Steps to reproduce \r +\r +1. Open editing dev sample\r +2. In the second sample add additional action button at the end\r +\`\`\`\r + \r +\`\`\`\r +3. Create the handler\r +\r +\`\`\`\r + public clear(gridID) {\r + const currentGrid: IgxGridComponent = this.getGridById(gridID);\r + currentGrid.transactions.clear();\r + }\r +\`\`\`\r +4. Make multiple rows to be invalid (ProductName column is required)\r +5. Clear all transactions\r +6. Observe\r +\r +## Result \r +The values in the cells are cleared as the last value but the cell is still invalid.\r +\r +## Expected result \r +They should be synced correctly.\r +\r +\r +## Attachments \r +Attach a sample if available, and screenshots, if applicable. \r +\r +`,title:`Row transactions and grid validation service are not sync when using transaction clear method to clear multiple invalid cells`,number:12505,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12505`,id:1525513722,pullRequest:null},{createdAt:`2023-01-08T18:42:40Z`,assignee:{id:34240583,avatarUrl:`https://avatars.githubusercontent.com/u/34240583?v=4`,login:`ddincheva`,email:null,url:`https://api.github.com/users/ddincheva`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438875,nodeId:`MDU6TGFiZWw1MzE0Mzg4NzU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development`,name:`:hammer_and_wrench: status: in-development`,color:`0052cc`,default:!1,description:`Issues and PRs with active development on them`},{id:531441843,nodeId:`MDU6TGFiZWw1MzE0NDE4NDM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:fire:%20severity:%20high`,name:`:fire: severity: high`,color:`d93f0b`,default:!1,description:``},{id:906940495,nodeId:`MDU6TGFiZWw5MDY5NDA0OTU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-selection`,name:`grid: row-selection`,color:`d4c5f9`,default:!1,description:``},{id:987998812,nodeId:`MDU6TGFiZWw5ODc5OTg4MTI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20selection`,name:`grid: selection`,color:`2f52bc`,default:!1,description:``},{id:4540898149,nodeId:`LA_kwDOAxIT488AAAABDqibZQ`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x`,name:`version: 15.0.x`,color:`FA5965`,default:!1,description:``}],body:`## Description \r +When handling grid's \`rowSelectionChanging\` event the owner of the event arguments is always undefined.\r +\r + * igniteui-angular version: 15.0.0\r + * browser: all\r +\r +## Steps to reproduce \r +In [this](https://stackblitz.com/edit/angular-5qggu6?file=package.json) demo I am logging the owner in \`rowSelectionChanging\` like this:\r +\`\`\` typescript\r + public handleRowSelection(event: IRowSelectionEventArgs) {\r + console.log(event.owner);\r + this.selectedRowsCount = event.newSelection.length;\r + this.selectedRowIndex = event.newSelection[0];\r + this.snackbarRowCount.open();\r + this.snackbar.close();\r + }\r +\`\`\`\r +Open the demo, change the selection of any row, and observe the console. It is always logs \`undefinde\`.\r +\r +## Result \r +\`owner\` is \`undefined\`.\r +\r +## Expected result \r +\`owner\` should point to the grid component.\r +`,title:`owner of rowSelectionChanging is always undefined`,number:12502,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12502`,id:1524629810,pullRequest:null},{createdAt:`2023-01-03T11:12:29Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:963379072,nodeId:`MDU6TGFiZWw5NjMzNzkwNzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/overlay`,name:`overlay`,color:`a9fcf2`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +In the IgxOverlayService there are -ing and -ed events for open and close actions, but for contentAppend is currently provided only an -ed event. Please expose contentAppend -ing event, which should be emitted before the content is moved to the overlay. \r +For example: In this way, it will allow us to make some modifications to the element which will be transferred to the overlay, and apply some additional classes and attributes based on its current position in the DOM, for example, its parent element and so on.\r +\r +\r +\r +`,title:`Introduce contentAppending event in the IgxOverlayService`,number:12480,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12480`,id:1517245039,pullRequest:null},{createdAt:`2023-01-03T10:57:57Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:3113485838,nodeId:`MDU6TGFiZWwzMTEzNDg1ODM4`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot`,name:`grid: pivot`,color:`177099`,default:!1,description:``}],body:`## Description \r +The issue is related to this https://github.com/IgniteUI/igniteui-angular/issues/12413 but only reproducible when zoomed in or zoomed out.\r +\r + * igniteui-angular version: all supported\r + * browser: \r +\r +## Steps to reproduce \r +\r +1. Use the sample from the above mentioned issue\r +2. Zoom in or Zoom out the page to 90% or 110%\r +3. Observe\r +\r +## Result \r +Observe that when zoomed out to 90% the grid columns keep growing.\r +Observe that when zoomed in to 110% the grid columns keep shrinking.\r +\r +## Expected result \r +The grid should not resize even when the zoomed percentage is changed.\r +\r +\r +## Attachments \r +Attach a sample if available, and screenshots, if applicable. \r +\r +`,title:`Pivot grid columns keep resizing themselves when zoomed in or zoomed out`,number:12479,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12479`,id:1517228531,pullRequest:null},{createdAt:`2022-12-20T14:24:05Z`,assignee:{id:35433937,avatarUrl:`https://avatars.githubusercontent.com/u/35433937?v=4`,login:`ddaribo`,email:null,url:`https://api.github.com/users/ddaribo`},labels:[{id:858884153,nodeId:`MDU6TGFiZWw4NTg4ODQxNTM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20not-a-bug`,name:`status: not-a-bug`,color:`ea85ce`,default:!1,description:``}],body:`## Description \r +For some reason, the excel style filter doesn't seem to use the regular igx-overlay, and this causes issues when we render two grids next to each other, as the filter will render below the other grid:\r +![image](https://user-images.githubusercontent.com/12936286/208688553-1ad828e6-3512-4c73-ae07-7eaae76a492e.png)\r +\r +\r + * igniteui-angular version: 14\r + * browser: Chrome\r +\r +## Steps to reproduce \r +\r +1. Go to https://stackblitz.com/edit/angular-gp1fk2?file=src%2Fapp%2Fgrid%2Fgrid-excel-style-filtering-sample-1%2Fgrid-excel-style-filtering-sample-1.component.html\r +2. Open the excel style filter on the left grid\r +## Result \r +The filter is partially rendered below the right grid.\r +\r +## Expected result \r +The filter should not be blocked by the right grid.\r +\r +\r +`,title:`Excel filter rendering below neighboring grid`,number:12473,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12473`,id:1504644715,pullRequest:null},{createdAt:`2022-12-15T15:38:37Z`,assignee:{id:4118303,avatarUrl:`https://avatars.githubusercontent.com/u/4118303?v=4`,login:`simeonoff`,email:null,url:`https://api.github.com/users/simeonoff`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:877031119,nodeId:`MDU6TGFiZWw4NzcwMzExMTk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/input-group`,name:`input-group`,color:`f79bb1`,default:!1,description:``},{id:1411516510,nodeId:`MDU6TGFiZWwxNDExNTE2NTEw`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:runner:%20priority:%20high`,name:`:runner: priority: high`,color:`ce2f51`,default:!1,description:``}],body:`## Description \r +The input group does not inherit the correct density class from its parent, for example, when the grid is set to compact the input stays comfortable. This is happening only if the input-group is inside another form component, for example, date-picker or select.\r +\r +There is [an old issue in the sample repo](https://github.com/IgniteUI/igniteui-angular-samples/issues/3006)\r +\r + * igniteui-angular version: \r + * browser: all\r +\r +## Steps to reproduce \r +1. Open this [gridCellEditing](http://localhost:4200/gridCellEditing) sample in dev demos\r +2. Select compact density\r +3. Edit any of the date-picker inputs and compare with one that is pure input-group\r +\r +## Result\r +The input-group does not inherit the correct density\r +\r +## Expected result\r +The input-group should inherit the correct density\r +\r +`,title:`Input group not inheriting the correct density`,number:12467,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12467`,id:1498654777,pullRequest:null},{createdAt:`2022-12-14T11:05:58Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:1605262456,nodeId:`MDU6TGFiZWwxNjA1MjYyNDU2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-adding`,name:`grid: row-adding`,color:`f9c5c0`,default:!1,description:``},{id:3982407566,nodeId:`MDU6TGFiZWwzOTgyNDA3NTY2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid`,name:`grid`,color:`95f9d5`,default:!1,description:null}],body:`## Description \r +When a new row is added from the action strip of the bottom pinned row in pinning position set to bottom in igxGrid, if we cancel the addition of the row by pressing the 'Cancel' button, the grid content is cut.\r +\r + * igniteui-angular version: 14.2 15.0\r + * browser: all\r +\r +## Steps to reproduce \r +\r +Open the following [sample](https://stackblitz.com/edit/angular-n9b1f1?file=src/app/grid/grid-add-row-sample/grid-add-row-sample.component.html)\r +1. Pin just one row or pin multiple rows. \r +2. Go to last bottom pinned row and click Add icon from the action strip.\r +3. When the overlay for adding a row opens, press the 'Cancel' button to cancel the addition of the row.\r +\r +## Result \r +Grid content is cut off.\r +\r +## Expected result \r +Correctly rerender the grid without cutting the content.\r +\r +\r +## Attachments \r +![content cut off](https://user-images.githubusercontent.com/48180072/207577992-d2c8087d-8363-4f37-b247-0068f7ba1b5c.gif)\r +\r +\r +`,title:`Grid content cut off`,number:12454,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12454`,id:1496363326,pullRequest:null},{createdAt:`2022-12-13T11:23:41Z`,assignee:{id:16020256,avatarUrl:`https://avatars.githubusercontent.com/u/16020256?v=4`,login:`jackofdiamond5`,email:null,url:`https://api.github.com/users/jackofdiamond5`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +If you manually set errors on a form control that has no validators then the css class \`igx-input-group--invalid\` is not set and the input doesn't turn red.\r +\r + * igniteui-angular version: 15.0.2\r + * browser: Chrome\r +\r +## Steps to reproduce \r +https://stackblitz.com/edit/angular-wqcpu7\r +\r +1. Open example\r +2. Click on 'set invalid' button\r +\r +## Result \r +The first input turns red because it has a validator.\r +The second input does not turn red because is has no validator.\r +\r +## Expected result \r +The second input should turn red because it is invalid.\r +\r +`,title:`IgxInputGroup doesn't turn red when invalid`,number:12452,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12452`,id:1494033741,pullRequest:null},{createdAt:`2022-12-12T19:53:40Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:651042855,nodeId:`MDU6TGFiZWw2NTEwNDI4NTU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:date:%20date-picker`,name:`:date: date-picker`,color:`afea6b`,default:!1,description:``},{id:1221520389,nodeId:`MDU6TGFiZWwxMjIxNTIwMzg5`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20excel-style-filtering`,name:`grid: excel-style-filtering`,color:`fef2c0`,default:!1,description:``},{id:1659256343,nodeId:`MDU6TGFiZWwxNjU5MjU2MzQz`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-range-picker`,name:`date-range-picker`,color:`3ec9c4`,default:!1,description:``}],body:`## Description \r +\r +Some Ignite components use module injector instead of current injector to instantiate components, ignoring any custom providers that the developer might have set.\r +\r + * igniteui-angular version: 14.1.1\r + * browser: any\r +\r +## Steps to reproduce \r +\r +Provide my custom overlay Service:\r +\`{ providers: IgxOverlayService, useClass: IgxOverlayService }\`\r +\r +Then instantiate a grid with excel style filters\r +\`\`\`\r + \r + \r +\`\`\`\r +\r +then try to set a custom text filter:\r +![image](https://user-images.githubusercontent.com/12942794/207116964-a710ba56-1cdf-4f55-801f-95c88c5469fe.png)\r +\r +## Result \r +The custom text dialog doesn't open.\r +See line where Grid is using moduleRef injector over current one:\r +https://github.com/IgniteUI/igniteui-angular/blob/9861f2c87bcfecbb3ede9e1ef9e49b44223d4176/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts#L3833-L3838\r +\r +## Expected result \r +The custom text dialog should open.\r +\r +## Attachments \r +[Stackblitz example](https://stackblitz.com/edit/angular-hws9fs?file=src%2Fapp%2Fgrid%2Fgrid-excel-style-filtering-sample-1%2Fgrid-excel-style-filtering-sample-1.component.ts)\r +\r +`,title:`Ignite favors module injector over current injector `,number:12450,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12450`,id:1492637692,pullRequest:null},{createdAt:`2022-12-07T15:38:21Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`}],body:`## Description \r +After putting the date picker in edit mode the cursor is jumping to the end of the text when I perform a select all and then try to type a value.\r +\r +![datepicker-select-issue](https://user-images.githubusercontent.com/18489991/206222785-69bc7f58-bfd2-4f81-a0d4-402f0a14a4d1.gif)\r +\r + * igniteui-angular version: 15.0.2\r + * browser: Chrome 108.0.5359.94\r +\r +## Steps to reproduce \r +\r +1. Go to (https://www.infragistics.com/products/ignite-ui-angular/angular/components/date-picker#angular-datepicker-example)\r +2. Click inside date picker to go into edit mode\r +3. Press Ctrl + A keys to select all text\r +4. Start typing a number\r +\r +## Result \r +The typed number is placed at the start of the date and the cursor immediately moves to the end making it impossible to finish typing the date. The user has to manually position the cursor with the mouse or arrow keys in order to complete the date.\r +\r +## Expected result \r +The cursor should remain next to the typed number so users can finish typing the date.\r +\r +\r +`,title:`Date picker cursor jumps to end`,number:12438,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12438`,id:1482214403,pullRequest:null},{createdAt:`2022-12-05T14:45:54Z`,assignee:{id:21260963,avatarUrl:`https://avatars.githubusercontent.com/u/21260963?v=4`,login:`desig9stein`,email:null,url:`https://api.github.com/users/desig9stein`},labels:[{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`The UI needs to be updated to reflect the latest design changes\r +\r +[Prototype](https://www.figma.com/proto/kJxlQPb78W2C4S2g0gDjbs/Combo-Design-Handoff?node-id=1%3A3251&scaling=min-zoom&page-id=0%3A1&starting-point-node-id=1%3A3209&show-proto-sidebar=1)\r +[Design handoff](https://www.figma.com/file/kJxlQPb78W2C4S2g0gDjbs/Combo-Design-Handoff?node-id=97%3A2157&t=zpAKFmnHJYXT9Fh7-0)\r +`,title:`Refactor(Combo) Update the UI according to the new design.`,number:12421,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12421`,id:1476731382,pullRequest:null},{createdAt:`2022-12-05T12:12:01Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`},{id:749009988,nodeId:`MDU6TGFiZWw3NDkwMDk5ODg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/refactoring`,name:`refactoring`,color:`bcd8f4`,default:!1,description:null},{id:3113485838,nodeId:`MDU6TGFiZWwzMTEzNDg1ODM4`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot`,name:`grid: pivot`,color:`177099`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +Currently the \`IgxPivotDateDimension\` has constructor parameters that are also exposed as public props:\r +https://github.com/IgniteUI/igniteui-angular/blob/9861f2c87bcfecbb3ede9e1ef9e49b44223d4176/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid-dimensions.ts#L95\r +\r +This might be a leftover of some sort, but it does make a suggestion such options are possible:\r +\`\`\`ts\r +const base = dateDimension.inBaseDimension;\r +dateDimension.inBaseDimension = { ... };\r +dateDimension.inOptions= { ... };\r +\`\`\`\r +Which might actually be of use to us, except those do not work as far as I can tell due to the way the dimension initializes. There's actually a adaptation made for this in the Elements branch https://github.com/IgniteUI/igniteui-angular/pull/12125/files#diff-f9012319362951afa13f4dc681a642a6957f2f08cf3a89250f2461315ffb9f45 that moved the initialize logic into a separate method so it can be called when setting those props.\r +\r +## Describe the solution you'd like\r +At the very least, drop the \`in-\` prefix, consider the approach linked above - if it makes sense to be adopted. Oh, and keep the old names as deprecated proxies to the new ones so there would be no breaking.\r +\r +`,title:`Pivot Date Dimension constructor args`,number:12417,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12417`,id:1476423588,pullRequest:null},{createdAt:`2022-11-30T08:17:39Z`,assignee:{id:59446295,avatarUrl:`https://avatars.githubusercontent.com/u/59446295?v=4`,login:`SisIvanova`,email:null,url:`https://api.github.com/users/SisIvanova`},labels:[{id:531438875,nodeId:`MDU6TGFiZWw1MzE0Mzg4NzU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development`,name:`:hammer_and_wrench: status: in-development`,color:`0052cc`,default:!1,description:`Issues and PRs with active development on them`},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Description \r +If inputs are invalid they get a red border.\r +If RadioButtons are invalid they get no special styling.\r +\r + * igniteui-angular version: 15.0.0\r +\r +## Expected result \r +RadioButtons should have an invalid styling so you can see that they are invalid.\r +`,title:`RadioButtons: missing validation styling`,number:12402,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12402`,id:1469227217,pullRequest:null},{createdAt:`2022-11-25T12:10:24Z`,assignee:{id:14248932,avatarUrl:`https://avatars.githubusercontent.com/u/14248932?v=4`,login:`hanastasov`,email:null,url:`https://api.github.com/users/hanastasov`},labels:[{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:1102774151,nodeId:`MDU6TGFiZWwxMTAyNzc0MTUx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-editing`,name:`grid: row-editing`,color:`77d86a`,default:!1,description:``},{id:1411516510,nodeId:`MDU6TGFiZWwxNDExNTE2NTEw`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:runner:%20priority:%20high`,name:`:runner: priority: high`,color:`ce2f51`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`}],body:`## Is your feature request related to a problem? Please describe.\r +Right now, \`rowDeleted\` emits \`IRowDataEventArgs\`. This argument has no information about the id of the deleted row.\r +\r +## Describe the solution you'd like\r +Extend the \`rowDeleted\` event arguments to include at least the deleted row id.\r +\r +## Describe alternatives you've considered\r +I can search through the grid's data and find the row id, but it is common scenario to send to the backend the id of the item you need to delete. This is why it should present in the event arguments.\r +`,title:`Extend rowDeleted event arguments`,number:12380,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12380`,id:1464461374,pullRequest:null},{createdAt:`2022-11-24T13:18:33Z`,assignee:{id:4118303,avatarUrl:`https://avatars.githubusercontent.com/u/4118303?v=4`,login:`simeonoff`,email:null,url:`https://api.github.com/users/simeonoff`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:2236014987,nodeId:`MDU6TGFiZWwyMjM2MDE0OTg3`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:sparkles:%20themes`,name:`:sparkles: themes`,color:`ceef86`,default:!1,description:``},{id:4540898149,nodeId:`LA_kwDOAxIT488AAAABDqibZQ`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x`,name:`version: 15.0.x`,color:`FA5965`,default:!1,description:``},{id:4861501935,nodeId:`LA_kwDOAxIT488AAAABIcSh7w`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.1.x`,name:`version: 15.1.x`,color:`DC40EA`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +It is the same as #12200 but there are still usages of px in components.\r +\r +For example \`@HostBinding('style.height.px')\` , \`[style.min-height.px]="cellHeight"\``,title:"Use `rem` instead of `px`",number:12377,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12377`,id:1463337840,pullRequest:null},{createdAt:`2022-11-23T13:19:26Z`,assignee:{id:14248932,avatarUrl:`https://avatars.githubusercontent.com/u/14248932?v=4`,login:`hanastasov`,email:null,url:`https://api.github.com/users/hanastasov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:531441949,nodeId:`MDU6TGFiZWw1MzE0NDE5NDk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:boom:%20severity:%20critical`,name:`:boom: severity: critical`,color:`b60205`,default:!1,description:``},{id:625766429,nodeId:`MDU6TGFiZWw2MjU3NjY0Mjk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general`,name:`grid: general`,color:`5319e7`,default:!1,description:``},{id:906940495,nodeId:`MDU6TGFiZWw5MDY5NDA0OTU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-selection`,name:`grid: row-selection`,color:`d4c5f9`,default:!1,description:``},{id:1040274972,nodeId:`MDU6TGFiZWwxMDQwMjc0OTcy`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20tree-grid`,name:`grid: tree-grid`,color:`d4c5f9`,default:!1,description:``},{id:1168801769,nodeId:`MDU6TGFiZWwxMTY4ODAxNzY5`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20hierarchical-grid`,name:`grid: hierarchical-grid`,color:`fc92a5`,default:!1,description:``},{id:3113485838,nodeId:`MDU6TGFiZWwzMTEzNDg1ODM4`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot`,name:`grid: pivot`,color:`177099`,default:!1,description:``},{id:4479155364,nodeId:`LA_kwDOAxIT488AAAABCvp8pA`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2014.2.x`,name:`version: 14.2.x`,color:`D32276`,default:!1,description:``},{id:4540898149,nodeId:`LA_kwDOAxIT488AAAABDqibZQ`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x`,name:`version: 15.0.x`,color:`FA5965`,default:!1,description:``},{id:4697147300,nodeId:`LA_kwDOAxIT488AAAABF_jHpA`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:diamond_shape_with_a_dot_inside:%20grid:%20elements`,name:`:diamond_shape_with_a_dot_inside: grid: elements`,color:`C5297B`,default:!1,description:``}],body:"## Description \r\nSelection API returns different types of data depending on whether `primaryKey` is set to `igx-grid`, `igx-tree-grid`, `igx-hierarchical-grid`, etc. In the case of `primaryKey` set, I get an array of primitive values. In the case of `primaryKey` not being set, I get an array of data objects behind the grid.\r\n\r\n * igniteui-angular version: 15.0.0\r\n * browser: all\r\n\r\n## Steps to reproduce \r\n\r\n1. Create an app with any grid\r\n2. Turn row selection on\r\n3. Log `args.newSelection` on selection changing\r\n4. Set a `primaryKey`\r\n5. Log `args.newSelection` on selection changing\r\n\r\n## Result \r\nInconsistent results between `primaryKey` and no `primaryKey`.\r\n\r\n## Expected result \r\nConsistent results. Data members should be provided in both cases.\r\n\r\n\r\n",title:`Grid row selection is inconsistent with and without primaryKey`,number:12371,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12371`,id:1461753481,pullRequest:null},{createdAt:`2022-11-22T15:14:47Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3113485838,nodeId:`MDU6TGFiZWwzMTEzNDg1ODM4`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot`,name:`grid: pivot`,color:`177099`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +Type checking of the fields when autogenerated dimensions and values and a proper indication for the users in pivot data selector\r +\r +## Describe the solution you'd like\r +Indicate if the values in a dimensions/value are strings, numbers, dates, etc. So the users can better understand what can be used as a value or as a dimension(row/column/filter)\r +\r +## Describe alternatives you've considered\r +A clear and concise description of any alternative solutions or features you've considered.\r +\r +## Additional context\r +Add any other context or screenshots about the feature request here.\r +\r +related to #12366\r +`,title:`type checking of the fields when autogenerated dimensions and values and a proper indication for the users in pivot data selector`,number:12367,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12367`,id:1460065181,pullRequest:null},{createdAt:`2022-11-22T15:10:51Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:3113485838,nodeId:`MDU6TGFiZWwzMTEzNDg1ODM4`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot`,name:`grid: pivot`,color:`177099`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +Pivot configuration can be difficult to be defined. Autogenerating simple non-hierarchical dimensions and values from fields of the data when no pivot configuration is defined would be a great benefit for the users. \r +\r +## Describe the solution you'd like\r +Additional field or a place in the data selector where those fields can be populated along side with an empty pivot grid and allow the users to pivot with the data using those autogenerated dimensions/values.\r +\r +## Describe alternatives you've considered\r +A clear and concise description of any alternative solutions or features you've considered.\r +\r +## Additional context\r +Add any other context or screenshots about the feature request here.\r +`,title:`Autogenerate dimensions and values from the data when no pivot configuration is defined`,number:12366,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12366`,id:1460059081,pullRequest:null},{createdAt:`2022-11-21T08:46:49Z`,assignee:{id:21260963,avatarUrl:`https://avatars.githubusercontent.com/u/21260963?v=4`,login:`desig9stein`,email:null,url:`https://api.github.com/users/desig9stein`},labels:[{id:531438875,nodeId:`MDU6TGFiZWw1MzE0Mzg4NzU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development`,name:`:hammer_and_wrench: status: in-development`,color:`0052cc`,default:!1,description:`Issues and PRs with active development on them`},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:2236014987,nodeId:`MDU6TGFiZWwyMjM2MDE0OTg3`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:sparkles:%20themes`,name:`:sparkles: themes`,color:`ceef86`,default:!1,description:``}],body:`Use the theming package when sizing components in place of the current approach.`,title:`[Themes] - Use the sizable mixins and functions to size components`,number:12347,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12347`,id:1457546036,pullRequest:null},{createdAt:`2022-11-18T16:30:12Z`,assignee:{id:2188411,avatarUrl:`https://avatars.githubusercontent.com/u/2188411?v=4`,login:`ChronosSF`,email:null,url:`https://api.github.com/users/ChronosSF`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:625766429,nodeId:`MDU6TGFiZWw2MjU3NjY0Mjk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general`,name:`grid: general`,color:`5319e7`,default:!1,description:``},{id:749009988,nodeId:`MDU6TGFiZWw3NDkwMDk5ODg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/refactoring`,name:`refactoring`,color:`bcd8f4`,default:!1,description:null},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3982407566,nodeId:`MDU6TGFiZWwzOTgyNDA3NTY2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid`,name:`grid`,color:`95f9d5`,default:!1,description:null}],body:`Logging this as a starting point, might need to break down into separate tasks as we iron out details.\r +Also see https://github.com/IgniteUI/igniteui-angular/pull/12275#discussion_r1023700303\r +\r +AFAIK, the initial version of \`GridType\` was probably intended as an internal interface to allow dependent components/pipes/etc to reference grids without resulting in circular dependency issues. As such it probably contained some internal/internal props even from the get go.\r +At some point the interface became part of public API shared across grids, like the \`RowType\` /\`CellType\` grid property, some base event arguments and so on. As such it also includes optional props for specific grid types. But then the interface is still not exposed proper. And the use for circular resolution is ongoing too.\r +\r +So a quick brief of things I think are initially needed:\r +\r +- [ ] Cleanup the internal properties on the interface. This includes evaluating their use first - perhaps some are used in strategies that can be overridden and could make sense as official public props too. Remaining internal props we could move to an internal grid type, would need to consider if implementing it explicitly by the components pollutes the API docs though.\r +- [ ] Consider if want to keep the separate grid-specific types. We can either drop them and maintain the current direction with \`GridType\` having optional props for all grids (Pivot _excluded_) or clean up the base type even further and expose the per-grid types. The only downside to that is to do with all the shared API from base (event/template args, common cell/row types, etc) will require casting.\r +No idea if the properties on the interface currently cover all critical paths even, so not sure how much of a loss that'd be. There's also _some_ chance we could throw some generics in the mix and have some of those self-describe better, but likely not all the bits external to the grid components. So some convenience cost.\r +- [ ] properly export the \`GridType\` itself as public API. Might want to do some doc comments too\r +- [ ] Adjust component interfaces accordingly`,title:`Grid public interface(s) review and cleanup`,number:12342,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12342`,id:1455428747,pullRequest:null},{createdAt:`2022-11-17T14:23:26Z`,assignee:{id:11231206,avatarUrl:`https://avatars.githubusercontent.com/u/11231206?v=4`,login:`mtsvyatkova`,email:null,url:`https://api.github.com/users/mtsvyatkova`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`},{id:967701619,nodeId:`MDU6TGFiZWw5Njc3MDE2MTk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20global-filtering`,name:`grid: global-filtering`,color:`30db30`,default:!1,description:``},{id:3982407566,nodeId:`MDU6TGFiZWwzOTgyNDA3NTY2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid`,name:`grid`,color:`95f9d5`,default:!1,description:null}],body:`## Description \r +Global Filtering doesn't respect column's pipeArgs/formatter and filters by the underlying data source.\r +\r + * igniteui-angular version: 13.2.x, 14.2.x\r + * browser: any\r +\r +## Steps to reproduce \r +\r +1. Open the following [sample](https://stackblitz.com/edit/angular-xf26na-jssnnx?file=src%2Fapp%2Fdata%2Fcustom.data.ts,src%2Fapp%2Fsample%2Figx-sample%2Figx-sample.component.html,src%2Fapp%2Fsample%2Figx-sample%2Figx-sample.component.ts)\r +2. Within the Search field type Nov 9\r +\r +## Result \r +All records are filtered out\r +\r +## Expected result \r +The record with ProductID 1 should remain\r +\r +\r +## Attachments \r +![global_filtering](https://user-images.githubusercontent.com/44684385/202471101-8f050dab-9e91-4a5d-ba70-8f87c3810639.gif)\r +\r +\r +`,title:`Global Filtering doesn't respect column's pipeArgs/formatter`,number:12329,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12329`,id:1453439337,pullRequest:null},{createdAt:`2022-11-07T12:40:28Z`,assignee:{id:49126110,avatarUrl:`https://avatars.githubusercontent.com/u/49126110?v=4`,login:`RivaIvanova`,email:null,url:`https://api.github.com/users/RivaIvanova`},labels:[{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`Hi,\r +If change the value of a cell in edit mode, the dropdown menu tells me i have 1 change like expected. If i then change the value back to the original value before i entered edit mode(still in the same edit mode, same row), it still tells me i have 1 change. \r +\r +If possible it would be nice to have the cell remember the value in the cell from before entering edit mode so that it shows the changes from how it used to be before editing. \r +\r +Regards`,title:`Change detection cell value in cellEditor`,number:12270,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12270`,id:1438301158,pullRequest:null},{createdAt:`2022-11-03T06:18:06Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:1659256343,nodeId:`MDU6TGFiZWwxNjU5MjU2MzQz`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-range-picker`,name:`date-range-picker`,color:`3ec9c4`,default:!1,description:``}],body:"## Is your feature request related to a problem? Please describe.\r\nI am using `igx-date-picker` and `igx-date-range-picker`. I use `igxCalendarSubheader` directive for `igx-date-picker` to customize subheader like photo below:\r\n\r\n![image](https://user-images.githubusercontent.com/29648335/199660287-8f12025d-e713-4a3c-a9d0-2c6d2b97e167.png)\r\n\r\nBut `igx-date-range-picker` don't support. I can not use `igxCalendarSubheader` directive to customize the subheader of this one.\r\n\r\n![image](https://user-images.githubusercontent.com/29648335/199660233-5cd0dce4-1749-45d5-a1f8-4f4fd3ddb8bb.png)\r\n\r\n\r\n## Describe the solution you'd like\r\nI want to use `igxCalendarSubheader` directive for `igx-date-range-picker` as well. Or can you suggest me other way to customize subheader of this one?\r\n",title:`Customizing subheader for igx-date-range-picker`,number:12265,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12265`,id:1434167784,pullRequest:null},{createdAt:`2022-10-31T12:16:23Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:1168801769,nodeId:`MDU6TGFiZWwxMTY4ODAxNzY5`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20hierarchical-grid`,name:`grid: hierarchical-grid`,color:`fc92a5`,default:!1,description:``},{id:2069855364,nodeId:`MDU6TGFiZWwyMDY5ODU1MzY0`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/priority:%20low`,name:`priority: low`,color:`d7e25a`,default:!1,description:``}],body:`## Description \r +If the top level H Grid is loaded with auto-generated columns and row layouts are added with delay, their possible columns trigger the columns list update handling, and since the root list is empty - the empty list gets assigned to the internal grid collection, essentially deleting the generated columns.\r +\r +This is related to #12251 and to do with the same handling block. Still, quite a lot of stars to align for this one, thus the low prio.\r +\r + * igniteui-angular version: 15.0.x\r + * browser: N/A\r +\r +## Steps to reproduce \r +\r +1. Use the sample attached to #12251\r +3. Set \`autoGenerate\` to true on the HGrid so the grid renders all columns initially\r +4. Open the sample\r +5. Hit the Toggle child layouts button\r +\r +## Result \r +After child layouts are enabled the grid ends up empty\r +\r +## Expected result \r +The grid columns and layouts should render correctly\r +\r +`,title:`Hierarchical Grid dynamic row islands can remove auto-generated columns`,number:12252,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12252`,id:1429749890,pullRequest:null},{createdAt:`2022-10-28T13:27:50Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:1168801769,nodeId:`MDU6TGFiZWwxMTY4ODAxNzY5`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20hierarchical-grid`,name:`grid: hierarchical-grid`,color:`fc92a5`,default:!1,description:``}],body:`## Description \r +There's a resizeNotifyHandler in the hierarchical grid that does not seem to be used. \r +https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts#L1052\r +Check if it is needed and if not remove it.`,title:`Check the unused resizeNotifyHandler in the hierarchical grid.`,number:12246,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12246`,id:1427265793,pullRequest:null},{createdAt:`2022-10-24T07:21:49Z`,assignee:{id:21260963,avatarUrl:`https://avatars.githubusercontent.com/u/21260963?v=4`,login:`desig9stein`,email:null,url:`https://api.github.com/users/desig9stein`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`},{id:877031119,nodeId:`MDU6TGFiZWw4NzcwMzExMTk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/input-group`,name:`input-group`,color:`f79bb1`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +The outlined material button doesn't support changing of the label value at runtime as the styles/markup are not well suited for such changes.\r +\r +## Describe the solution you'd like\r +Refactor the markup and styles of the component to more closely match the Ignite UI for Web Components implementation.\r +`,title:`Improve Material Outlined Input markup to allow for runtime label changes`,number:12221,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12221`,id:1420343776,pullRequest:null},{createdAt:`2022-10-20T06:05:02Z`,assignee:{id:4118303,avatarUrl:`https://avatars.githubusercontent.com/u/4118303?v=4`,login:`simeonoff`,email:null,url:`https://api.github.com/users/simeonoff`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531440033,nodeId:`MDU6TGFiZWw1MzE0NDAwMzM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20third-party-issue`,name:`status: third-party-issue`,color:`f9d0c4`,default:!1,description:null}],body:`## Description \r +Slides do not transition properly by pan gesture.\r +\r + * igniteui-angular version: 14.2.2\r + * browser: Safari, iOS 15.7\r +\r +## Steps to reproduce \r +\r +1. Run the attached sample on iPhone.\r +2. Scroll the slides left and right continuously by pan gesture.\r +\r +\r +## Result \r +Scrolling sometime stops in the middle of the slides transition.\r +\r +## Expected result \r +Scrolling do not stop in the middle of the slides transition.\r +\r +\r +## Attachments \r +[carousel.zip](https://github.com/IgniteUI/igniteui-angular/files/9826741/carousel.zip)\r +\r +\r +`,title:`IgxCarousel - Slides do not transition properly by pan gesture.`,number:12208,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12208`,id:1416017152,pullRequest:null},{createdAt:`2022-10-13T14:54:41Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`},{id:1102774151,nodeId:`MDU6TGFiZWwxMTAyNzc0MTUx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-editing`,name:`grid: row-editing`,color:`77d86a`,default:!1,description:``}],body:`## Description \r +When the \`rowEdit\` event is canceled, the row's new data is cleared, however the cells' edit values remain. This is not related to the validation feature and is visible in the ["Event cancelation"](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/editing#event-cancelation) demo in the docs:\r +\r +![rowEdit-cancel-clel-editValues-remain](https://user-images.githubusercontent.com/35433937/195616884-b4bb8b8e-5745-4e67-945b-f28cc4502d53.gif)\r +\r +In a grid validation scenario, it is expected that canceling the \`rowEdit\` event prevents the user from adding/editing an invalid row.\r +However, due to the above behavior, the grid accepts an invalid row.\r +\r +To an extent related to #12127.\r +\r + * igniteui-angular version: latest (& any)\r + * browser: any\r +\r +## Steps to reproduce \r +\r +1. Open [this sample](https://stackblitz.com/edit/igx-grid-validation-cancel-rowedit?file=src/app/sample/igx-sample/igx-sample.component.html)\r +2. Observe that the \`ProductName\` and \`CategoryName\` fields are required\r +3. Click the "Add" button on the action strip to add a new row\r +4. Type something only in the \`ProductName\` field\r +5. Click \`Done\` in attempt to finalize the row edit while the \`CategoryName\` field is left empty\r +6. You will see the error message and the \`ProductName\` cell's value reset. (At this point, if you double click on \`ProductName\` you will see its edit value remains as before clicking \`Done\`)\r +8. Fill a value in \`CategoryName\`\r +9. Click \`Done\`\r +\r +## Result \r +The row is added, however, with an invalid state, event though the \`rowEdit\` event is canceled with the intention not to add/edit an invalid row:\r +\`\`\`\r +public rowEdit(args: IGridEditEventArgs) {\r + if (!args.valid) {\r + args.cancel = true;\r + }\r + }\r +\`\`\`\r +\r +## Expected result \r +Reset the cell edit values to the cells' previous values when row editing is canceled?\r +Properly recalculate the row's validity state.\r +\r +## Attachments `,title:`rowEdit cancel not working as expected with row validation`,number:12189,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12189`,id:1407950910,pullRequest:null},{createdAt:`2022-10-11T22:26:50Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +\r +When using igxForOf my items are inferred as type any.\r +\r +e.g. \`
\`\r +\r +![image](https://user-images.githubusercontent.com/12942794/195209553-b730da14-fece-4a4b-99e6-713c7b5f1a11.png)\r +\r +## Describe the solution you'd like\r +I'd like the directive to take advantage of generics to get proper types in my items.\r +\r +## Describe alternatives you've considered\r +None`,title:`[IgxForOfDirective] use generic types`,number:12182,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12182`,id:1405300143,pullRequest:null},{createdAt:`2022-10-06T20:12:59Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +\r +We are encountering an exception from within the IgxGridForOfDirective._calcMaxChunkSize after loading a datagrid.\r +\r + * igniteui-angular version: 13.2.5\r + * browser: Google Chrome 105.0.5195.127 (Official Build) (64-bit)\r +\r +## Steps to reproduce \r +\r +We created a component with an IGX datagrid and a resize observer that is set in the ngAfterViewInit. The columns and data properties are initially set and then we make an asynchronous call to check if there is additional data, then we update the columns and data accordingly.\r +\r +## Result \r +In IgxGridForOfDirective._calcMaxChunkSize the prevIndex variable on line 10333 (see screenshot) comes up as -1. \r +This makes \`const prevIndex = this.igxForOf[prevIndex];\` come back as undefined. \r +The prevItem[dimension] will throw an exception:\r +\r +\`\`\`\r +core.mjs:6494 ERROR TypeError: Cannot read properties of undefined (reading 'calcPixelWidth')\r + at IgxGridForOfDirective._calcMaxChunkSize (igniteui-angular.mjs:10337:46)\r + at IgxGridForOfDirective._calcMaxChunkSize (igniteui-angular.mjs:10902:30)\r + at IgxGridForOfDirective._calculateChunkSize (igniteui-angular.mjs:10247:30)\r + at IgxGridForOfDirective.applyChunkSizeChange (igniteui-angular.mjs:10467:93)\r + at IgxGridForOfDirective._applyChanges (igniteui-angular.mjs:10892:14)\r + at IgxGridForOfDirective.ngDoCheck (igniteui-angular.mjs:10701:22)\r + at callHook (core.mjs:2561:1)\r + at callHooks (core.mjs:2520:1)\r + at executeCheckHooks (core.mjs:2452:1)\r + at selectIndexInternal (core.mjs:8410:1)\r +\`\`\`\r +\r +## Expected result \r +We expect the code to handle \`prevIndex = -1\` and skip the code block below. \r +\r +E.g. see the \`if (prevIndex > 0) {\` below:\r +\`\`\`typescript\r + while (prevIndex >= 0 && sum <= availableSize) {\r + curItem = dimension === 'height' ? arr[0].value : arr[0];\r + prevIndex = this.igxForOf.indexOf(curItem) - 1;\r + \r + if (prevIndex > 0) { // <== Adding something like this if statement could avoid the exception from occurring\r + const prevItem = this.igxForOf[prevIndex];\r + const prevSize = dimension === 'height' ?\r + this.heightCache[prevIndex] :\r + parseInt(prevItem[dimension], 10);\r + sum = arr.reduce(reducer, prevSize);\r + arr.unshift(prevItem);\r + length = arr.length;\r + }\r + }\r +\`\`\` \r +Refer to https://github.com/IgniteUI/igniteui-angular/blob/e05b38d13ab2bc530dbe81c9b688b9c5b1d123e7/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.ts#L1231-L1241\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/78883698/194409348-7f0d7cc9-e73d-4b01-8249-3d2840c035dc.png)\r +\r +\r +`,title:`Undefined exception from IgxGridForOfDirective._calcMaxChunkSize`,number:12164,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12164`,id:1400244699,pullRequest:null},{createdAt:`2022-09-26T13:39:01Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:749010965,nodeId:`MDU6TGFiZWw3NDkwMTA5NjU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/virtualization`,name:`virtualization`,color:`e85a19`,default:!1,description:null},{id:926278753,nodeId:`MDU6TGFiZWw5MjYyNzg3NTM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/combo`,name:`combo`,color:`152872`,default:!1,description:``},{id:3518092453,nodeId:`LA_kwDOAxIT487RsdSl`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2012.3.x`,name:`version: 12.3.x`,color:`BF8F0D`,default:!1,description:``},{id:3535663847,nodeId:`LA_kwDOAxIT487SvfLn`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/simple-combo`,name:`simple-combo`,color:`D5F8FB`,default:!1,description:``},{id:3893988156,nodeId:`LA_kwDOAxIT487oGYs8`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2013.2.x`,name:`version: 13.2.x`,color:`744395`,default:!1,description:``},{id:4231882952,nodeId:`LA_kwDOAxIT4878PWjI`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2014.1.x`,name:`version: 14.1.x`,color:`DB866C`,default:!1,description:``}],body:`## Description \r +When having an IgxCombo or IgxSimpleCombo with data set to a primitive data array, e.g. arr = [ 1, 2, undefined, 3, 4 ], only the first two items are displayed in the dropdown. If the data is as follows: arr = [ undefined, 1, 2, 3, 4 ], nothing will be displayed in the dropdown. \r +\r + * igniteui-angular version: 14.1.x, 13.2.x, 12.3.x\r + * browser: all\r +\r +## Steps to reproduce \r +\r +1. Open this [demo](https://stackblitz.com/edit/angular-l1sty4-bqrth9?file=src%2Fapp%2Fsample%2Figx-sample%2Figx-sample.component.ts).\r +2. Open the combo and simple-combo dropdowns, only two items are displayed, but the data is arr = [ 1, 2, undefined, 3, 4 ].\r +3. Uncomment \`this.comboData = [undefined, 1, 2, 3, 4];\` and open the combos again - nothing is displayed.\r +\r +This is due to the \`this.igxForOf[i] !== undefined\` check in the for loop of IgxForOfDirective (line 413).\r +\r +![forOf](https://user-images.githubusercontent.com/49126110/192288690-8369c367-e561-4e88-be43-d431a5d02e0a.JPG)\r +\r +\r +## Result \r +The items are not shown in the dropdowns.\r +\r +## Expected result \r +All items except 'undefined' should be shown in the dropdowns. \r +\r +`,title:`[IgxForOfDirective] having undefined in primitive data array removes other items in combo/simple-combo dropdown`,number:12133,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12133`,id:1386103737,pullRequest:null},{createdAt:`2022-09-26T11:53:15Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:438337761,nodeId:`MDU6TGFiZWw0MzgzMzc3NjE=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/input`,name:`input`,color:`a950c4`,default:!1,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:877031119,nodeId:`MDU6TGFiZWw4NzcwMzExMTk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/input-group`,name:`input-group`,color:`f79bb1`,default:!1,description:``},{id:1775129274,nodeId:`MDU6TGFiZWwxNzc1MTI5Mjc0`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-time-editor`,name:`date-time-editor`,color:`47a31a`,default:!1,description:``}],body:"## Is your feature request related to a problem? Please describe.\r\nIf we have a two-way binding used in an `IgxInputGroup` element and if the `igxInput` directive is placed before the `igxDateTimeEditor` directive, an error will pop-up stating that the event and property halves of the binding are bound to different targets. The reason is that the `igxInput` directive has a `value` property which is a `string` and because Angular resolves directives in the order of placement on the element, the `value` of the `igxInput` is taken into account. It seems to me like `Angular` only takes into account the first occurrence of a property and if a property with the same name is later encountered in the template, it is ignored. If you put the `igxDateTimeEditor` before the `igxInput` then the error does not occur for the same reason - Angular takes the `value` property of the date-time directive and later uses it to construct the two way binding. Now because in the second scenario the target for the property and the event is the same - the date-time directive, the error does not occur.\r\n\r\n## Describe the solution you'd like\r\nWe should be able to fix this by making the `IgxDateTimeEditorDirective` usable in the context of an `IgxInputGroup`, without the need of an `igxInput` directive.\r\n\r\n## Describe alternatives you've considered\r\nn/a\r\n\r\n## Additional context\r\n![image](https://user-images.githubusercontent.com/16020256/192269605-25890074-28d1-497a-8fdb-3bd2e844c63f.png)\r\n\r\n",title:`Have igxDateTimeEditor be usable inside of an IgxInputGroup without the need of an igxInput directive`,number:12132,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12132`,id:1385944342,pullRequest:null},{createdAt:`2022-09-23T20:09:02Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:3113485838,nodeId:`MDU6TGFiZWwzMTEzNDg1ODM4`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot`,name:`grid: pivot`,color:`177099`,default:!1,description:``},{id:3982407566,nodeId:`MDU6TGFiZWwzOTgyNDA3NTY2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid`,name:`grid`,color:`95f9d5`,default:!1,description:null}],body:`The problems are not from the samples but rather in the library :)\r +\r +1. If we go the to the samples **gridColumnActions** click **Group by all** in Custom Group Action and error is thrown:\r +\r +![image](https://user-images.githubusercontent.com/41373491/192044287-674dec05-e064-4fc7-8ccb-295980aba4f1.png)\r +\r +2. In samples **gridRowAPI** In the Add Filter value add some number then click the red button ADD ROW and you will get: \r +\r +![image](https://user-images.githubusercontent.com/41373491/192045800-c3e9c2a6-cde1-458a-adf1-b39eb06b9bf4.png)\r +\r +3. In **pivot** grid sample there are soo many bugs there if you just start clicking like crazy. \u{1F92A} One is right when the sample loads, click **newConfig** button then **filterDim** button and you will get \r +![image](https://user-images.githubusercontent.com/41373491/192047586-601b9e4e-a013-45a5-99a7-791944fd33c6.png)\r +\r +Another one is if you unselect right checkboxes and select them again: \r +![image](https://user-images.githubusercontent.com/41373491/192048138-489e1e0e-eee1-4c7c-ad0f-8f6f65eaa539.png)\r +\r +\r +Keep the amazing work you are doing, thanks to your library many devs can code faster and more fluently \u{1F499}\r +`,title:`Grid miscellaneous bugs 🐛`,number:12128,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12128`,id:1384253421,pullRequest:null},{createdAt:`2022-09-16T12:56:40Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:1605262456,nodeId:`MDU6TGFiZWwxNjA1MjYyNDU2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-adding`,name:`grid: row-adding`,color:`f9c5c0`,default:!1,description:``},{id:3518092453,nodeId:`LA_kwDOAxIT487RsdSl`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2012.3.x`,name:`version: 12.3.x`,color:`BF8F0D`,default:!1,description:``},{id:4540898149,nodeId:`LA_kwDOAxIT488AAAABDqibZQ`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x`,name:`version: 15.0.x`,color:`FA5965`,default:!1,description:``}],body:`## Description \r +The most obvious way to support changing the dummy PK is by handling the rowEditStart event (if you don't want for the end-user to see the dummy negative numbers). However, changing the rowData from the event args like this throws an error.\r +\r + * igniteui-angular version: 12.3.x +\r + * browser: n/a\r +\r +## Steps to reproduce \r +\r +1. Open the sample\r +2. Start adding a row\r +3. Observe the console\r +\r +## Expected result \r +The sample should either work or there should be a different mechanism to achieve this such as the generatePK event in jQuery.\r +\r +## Attachments \r +[stoxrz--run.zip](https://github.com/IgniteUI/igniteui-angular/files/9585396/stoxrz--run.zip)\r +\r +\r +\r +`,title:`During row add, the dummy PK cannot be changed to a user-specified one`,number:12091,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12091`,id:1375914130,pullRequest:null},{createdAt:`2022-09-16T12:50:47Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:1605262456,nodeId:`MDU6TGFiZWwxNjA1MjYyNDU2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-adding`,name:`grid: row-adding`,color:`f9c5c0`,default:!1,description:``},{id:4540898149,nodeId:`LA_kwDOAxIT488AAAABDqibZQ`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x`,name:`version: 15.0.x`,color:`FA5965`,default:!1,description:``}],body:`Currently the row adding snackbar has two issues:\r +\r +1. It cannot be disabled\r +2. It shows even when the added row is in view (only its button is hidden)\r +\r +Change the current UX by adding an option to disable the snackbar and also make the whole snackbar not appear when the row is in view`,title:`Make the row adding snackbar optional. `,number:12090,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12090`,id:1375906154,pullRequest:null},{createdAt:`2022-09-16T12:48:30Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:1605262456,nodeId:`MDU6TGFiZWwxNjA1MjYyNDU2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-adding`,name:`grid: row-adding`,color:`f9c5c0`,default:!1,description:``},{id:4540898149,nodeId:`LA_kwDOAxIT488AAAABDqibZQ`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x`,name:`version: 15.0.x`,color:`FA5965`,default:!1,description:``}],body:`Currently row adding transactions include the dummy negative values. Actually attempting to create EF entities with the objects from these transactions throws errors server-side.\r +\r +These dummy values should be omitted from the transactions for users' convenience.\r +`,title:`Row adding transaction should not include the dummy PKs`,number:12089,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12089`,id:1375903530,pullRequest:null},{createdAt:`2022-09-16T12:45:26Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:1605262456,nodeId:`MDU6TGFiZWwxNjA1MjYyNDU2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-adding`,name:`grid: row-adding`,color:`f9c5c0`,default:!1,description:``},{id:4540898149,nodeId:`LA_kwDOAxIT488AAAABDqibZQ`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x`,name:`version: 15.0.x`,color:`FA5965`,default:!1,description:``}],body:`The event sequence for row adding should be reworked as to not include "editing" events which means enhancing the event arguments around adding events so that the same level of extensibility can be achieved.`,title:`Rework row-adding event sequence `,number:12088,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12088`,id:1375900038,pullRequest:null},{createdAt:`2022-09-02T13:52:34Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +Related to this: https://github.com/IgniteUI/igniteui-angular/pull/11923#discussion_r960460313\r +\r +Move tooltip close somewhere else since there it might cause issues in more complex templates.\r +`,title:`Move logic out of focusOut handler on the cell.`,number:12042,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12042`,id:1360227455,pullRequest:null},{createdAt:`2022-09-01T21:05:52Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +Based on Accessibility Insights for Web, the following elements are not compliant.\r +\r +element.\r +igniteui-angular version: 13.2.9\r +browser: any\r +\r + * igniteui-angular version: \r + * browser: \r +\r +## Steps to reproduce \r +\r +1. Install the Accessibility Insights extension for chrome\r +2. Create an example igx-grid table with columns, paginator and toolbar\r +3. Run the FastPass check from the notification Launch Pad\r +\r +## Result \r +What is the actual result after following the steps to reproduce?\r +![image](https://user-images.githubusercontent.com/112661337/188011688-2bae2602-0e4d-44ea-82ac-77ce89055d81.png)\r +\r +\r +## Expected result \r +What is the expected result after following the steps to reproduce?\r +There should not be failed instances\r +\r +\r +## Attachments \r +Example igx-grid\r +![image](https://user-images.githubusercontent.com/112661337/188012868-1b9e73da-7597-4699-8c0d-f6fd3cce38bf.png)\r +\r +\r +`,title:`.igx-grid__tbody-content: aria-activedescendant attribute not allowed for an element's role`,number:12038,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12038`,id:1359409063,pullRequest:null},{createdAt:`2022-08-19T20:37:07Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +I'm frustrated with UX of the Date Range Picker component, some issues with it are the following. They aren't much of an problem when seeing them as individual issues, they are frustrating when seeing as a whole:\r +1. Extra clicks when I mistakenly clicked the wrong start date, as I have to select "end" and then start again\r +2. Extra clicks when I want to modify only the end date, as I have to always select both dates, same goes for start date.\r +3. I'm never sure if the first click I do is going to modify the "start" or "end" value, for some reason I intuitively always expect the wrong date to be modified.\r +\r +## Describe the solution you'd like\r +Please take a look to [this example component from Mui X](https://mui.com/x/react-date-pickers/date-range-picker/) built using fluent guidelines as a base. The issues I listed are addressed as follows:\r +1. There's a rule that the "end" must always be greater than the "start". So, that means that if I click a smaller one is considered as a "start". This rule might be related to language, as english and spanish are read from left to right. So, selection is being done in that same order.\r +2. There's separated fields for "start" and "end". So, the first modified date is the field I clicked\r +3. There's a "preview" of the dates being selected before the click is done. \r +\r +Also, a desired effect would be able to "drag and drop" the already selected dates as It would improve even more the UX of the second issue I mentioned.\r +\r +## Describe alternatives you've considered\r +In some cases I prefer to add two normal separated date pickers and add validations myself.\r +\r +**Edit**: I mistakenly thought fluent had already a definition for date-range components as I saw all fluent based date-range pickers always implemented the set rules I listed. Now I know they don't. [Is a work in progress though](https://github.com/microsoft/fluentui/pull/23313).\r +\r +`,title:`IgxDateRangePicker UX improvement`,number:11994,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11994`,id:1344875555,pullRequest:null},{createdAt:`2022-08-16T04:15:37Z`,assignee:{id:4264873,avatarUrl:`https://avatars.githubusercontent.com/u/4264873?v=4`,login:`gmurray81`,email:null,url:`https://api.github.com/users/gmurray81`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`}],body:`## Description \r +Financial chart - Volumes pane disappears when an item is selected from indicators dropdown.\r +\r + * igniteui-angular version: 14.1.1\r + * browser: Chrome\u3001Edge\r +\r +## Steps to reproduce \r +\r +1. Go to the sample: https://stackblitz.com/edit/angular-8jphuj-albr7f?file=src/app/stock-index-chart/financial-chart-stock-index-chart.component.html\r +2. Click 'Indicators' dropdown and select any item other than ones under 'Volumes'.\r +\r +## Result \r +Volumes pane disappears.\r +\r +## Expected result \r +Volumes pane stays visible.\r +\r +\r +`,title:`Financial chart - Volumes pane disappears when an item is selected from indicators dropdown.`,number:11975,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11975`,id:1339786487,pullRequest:null},{createdAt:`2022-07-16T00:03:17Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:354680432,nodeId:`MDU6TGFiZWwzNTQ2ODA0MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/list`,name:`list`,color:`1d76db`,default:!1,description:null},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing Lists, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +## Expected result \r +37. List item hover color should be a lighter transparency of white. 8% white is better, and it matches the dropdown item hover.\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179325946-69c4c680-c3f5-4666-a354-af94ae0a4a2f.png)\r +`,title:`List Theming Issues`,number:11883,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11883`,id:1306637501,pullRequest:null},{createdAt:`2022-07-16T00:00:41Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:868440495,nodeId:`MDU6TGFiZWw4Njg0NDA0OTU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/tabs`,name:`tabs`,color:`efc377`,default:!1,description:``},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing Tabs, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +\r +## Expected result \r +35. Tab hover color should be a lighter transparency of white. 4% or 5% white can look better.\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179325867-72839417-e22c-41bb-a4a3-98c4289cdd29.png)\r +\r +\r +`,title:`Tabs Theming Issues`,number:11882,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11882`,id:1306636722,pullRequest:null},{createdAt:`2022-07-15T23:54:06Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:402717485,nodeId:`MDU6TGFiZWw0MDI3MTc0ODU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/nav-bar`,name:`nav-bar`,color:`d93f0b`,default:!1,description:null},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing a NavBar with a Nav icon and action icons, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +## Expected result \r +34. Nav and action icons when pressed or focused should not be gray. That does not look good. Maybe they should have a similar style as the focused and pressed state of the raised button, with the primary color.\r +The hover state seems fine, but maybe it's rather dark. I would suggest different opacity for the hover (around 20% black), 38% black for pressed and 28% black for focused. I couldn't find a material ui reference, so this is my personal opinion.\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179325512-8295babd-d096-479e-804c-16f3102d6d00.png)\r +\r +`,title:`NavBar Theming Issues`,number:11881,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11881`,id:1306634892,pullRequest:null},{createdAt:`2022-07-15T23:22:05Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:680707239,nodeId:`MDU6TGFiZWw2ODA3MDcyMzk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/slider`,name:`slider`,color:`d4c5f9`,default:!1,description:null},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing Sliders, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +## Expected result \r +32. Tickmarks & labels should match the same colors applied to the [chart component](https://github.com/IgniteUI/igniteui-angular/issues/11872) in dark mode. \r +33. Disabled State: should look exactly like the default state but with 38% opacity applied to the entire component.\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179323594-66284216-9af4-4c14-8e5e-cb30e70e9b7f.png)\r +\r +\r +`,title:`Slider Theming Issues`,number:11880,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11880`,id:1306621582,pullRequest:null},{createdAt:`2022-07-15T22:47:33Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:354680490,nodeId:`MDU6TGFiZWwzNTQ2ODA0OTA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/nav-drawer`,name:`nav-drawer`,color:`64c599`,default:!1,description:null},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:455636069,nodeId:`MDU6TGFiZWw0NTU2MzYwNjk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dialog`,name:`dialog`,color:`2078bc`,default:!1,description:``},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing a Nav Drawer in Overlay mode, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +## Expected result \r +29. Hover state background be a transparency of white. Around 2-3% white is what Material UI has for theirs.\r +30. **ALL OVERLAYS** background colors should be a transparency of black. Material uses 32% black. But maybe 40% black would look better in our case. This applies to **DIALOG** too.\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179321586-20f94e6d-04d1-4f8a-bc05-7d3c4ff442ae.png)\r +\r +\r +`,title:`Nav Drawer Theming & Overlays Issues`,number:11879,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11879`,id:1306606025,pullRequest:null},{createdAt:`2022-07-15T21:38:40Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:438338013,nodeId:`MDU6TGFiZWw0MzgzMzgwMTM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/radio-button`,name:`radio-button`,color:`0052cc`,default:!1,description:null},{id:1290006335,nodeId:`MDU6TGFiZWwxMjkwMDA2MzM1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/radio-group`,name:`radio-group`,color:`e87971`,default:!1,description:``},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing RadioButton Group, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +\r +## Expected result \r +26. RadioButton CHECKED - Disabled: should look exactly like the default state (which uses the primary color) but with 38% opacity applied to the entire component.\r +27. RadioButton UNCHECKED - Default / Hover: the outline should be 60% white.\r +28. RadioButton UNCHECKED - Disabled: should look exactly like the default state (which uses the primary color) but with 38% opacity applied to the entire component.\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179317320-f75ffec7-7a92-45b7-9035-15f447fee30b.png)\r +\r +`,title:`RadioButton & RadioButton Group Theming Issues`,number:11878,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11878`,id:1306556499,pullRequest:null},{createdAt:`2022-07-15T21:12:36Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:438360283,nodeId:`MDU6TGFiZWw0MzgzNjAyODM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/checkbox`,name:`checkbox`,color:`fef200`,default:!1,description:null},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing Checkboxes, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +## Expected result \r +42. Checkbox **CHECKED** - Disabled: should look exactly like the default state (which uses the primary color) but with 38% opacity applied to the entire component.\r +43. Checkbox **UNCHECKED** - Default / Hover: the outline should be 60% white.\r +44. Checkbox **UNCHECKED** - Disabled: should look exactly like the default state but with 38% opacity applied to the entire component.\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179311225-7b5e2cc2-5068-400b-960f-10e50d80d2bc.png)\r +`,title:`Checkbox Theming Issues`,number:11877,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11877`,id:1306527975,pullRequest:null},{createdAt:`2022-07-15T20:51:48Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:821413899,nodeId:`MDU6TGFiZWw4MjE0MTM4OTk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/toggle`,name:`toggle`,color:`0052cc`,default:!1,description:null},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing Switches, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +All states are inconsistent with Material UI switches. \r +\r +## Expected result \r +38. Switch **ON** - Default / Hover: the track should be 38% primary color.\r +39. Switch **ON** - disabled state: should look exactly like the default state but with 38% opacity applied to the entire component.\r +40. Switch **OFF** - Default / Hover: the track should be 38% white.\r +41. Switch **OFF** - disabled state: should look exactly like the default state but with 38% opacity applied to the entire component.\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179311183-1f01df2e-260b-4dfc-8e08-46f07c505a3a.png)\r +\r +\r +`,title:`Switch Theming Issues`,number:11876,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11876`,id:1306490677,pullRequest:null},{createdAt:`2022-07-15T18:55:43Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:842555014,nodeId:`MDU6TGFiZWw4NDI1NTUwMTQ=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/button-group`,name:`button-group`,color:`db579d`,default:!1,description:null},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing the Button Group component, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +## Expected result \r +25. Button group background color should be the same as the outlined button background. And the outline should be 12% white.\r +As an example i'm showing the expected result (which is missing the elevation).\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179292911-551b270e-20d4-4252-9997-da96f07088e7.png)\r +\r +\r +`,title:`Button Group Theming Issues`,number:11875,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11875`,id:1306383840,pullRequest:null},{createdAt:`2022-07-15T18:42:45Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``},{id:3982407566,nodeId:`MDU6TGFiZWwzOTgyNDA3NTY2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid`,name:`grid`,color:`95f9d5`,default:!1,description:null}],body:`\r +## Description \r +This is an AppBuilder app showing Grid, using a custom dark theme based on material dark, with custom surface background color (blue).\r +The grid component does not look good when used against a custom surface color, different from the default theme surface (#222).\r +\r +## Expected result \r +21. Grid **HEADER** background could look better with 12% white.\r +22. Grid **CELLS** background color should be the same color as the cards and expansion panel's background color.\r +23. Adv. Filtering **Dialog** (and similar ones): header could be like the grid header bg. color, and background like the cells bg. color.\r +24. Should the **dialog** have inner padding so the buttons are not touching the edges?\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179288204-dcc90c5d-d322-4f9d-8566-de5b5c3535dd.png)\r +\r +\r +`,title:`Grid Theming Issues`,number:11874,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11874`,id:1306372758,pullRequest:null},{createdAt:`2022-07-15T18:20:55Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing Input Group, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +\r +## Expected result \r +13. When label is missing, outline looks broken.\r +14. Outline: same [recommendations I made for date picker](https://github.com/IgniteUI/igniteui-angular/issues/11865).\r +15. All text labels: same recommendations I made for date picker.\r +16. Inactive state (background): same recommendations I made for date picker.\r +17. Disabled state (background): same recommendations I made for date picker.\r +18. Dropdown items hover and focused background colors should be a 8% white. \r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179285490-ff67eac1-49d0-4cee-9878-2f54b18dd94e.png)\r +\r +`,title:`Input Group Theming Issues`,number:11873,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11873`,id:1306354290,pullRequest:null},{createdAt:`2022-07-15T18:06:39Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:1437635681,nodeId:`MDU6TGFiZWwxNDM3NjM1Njgx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/fluent-theme`,name:`fluent-theme`,color:`22e864`,default:!1,description:``},{id:1738947086,nodeId:`MDU6TGFiZWwxNzM4OTQ3MDg2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/bootstrap-theme`,name:`bootstrap-theme`,color:`a666e2`,default:!1,description:``},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing Category Charts, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +## Expected result \r +9. Gridlines should be 8% white. Axis and tickmarks should be 38% white (compared to our light theme ui kit).\r +10. Titles should be 87% white, and axis labels 60% white.\r +11. Tooltip should not have white bg, maybe it could match surface and have 12% white stroke.\r +12. CHARTS in all themes (Material, Fluent & Bootstrap) should support dark mode.\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179284506-24160115-acc1-4f4a-ab70-901d1222f248.png)\r +`,title:`Dark Mode for Charts `,number:11872,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11872`,id:1306343058,pullRequest:null},{createdAt:`2022-07-15T14:48:12Z`,assignee:{id:48180072,avatarUrl:`https://avatars.githubusercontent.com/u/48180072?v=4`,login:`georgianastasov`,email:null,url:`https://api.github.com/users/georgianastasov`},labels:[{id:602972382,nodeId:`MDU6TGFiZWw2MDI5NzIzODI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved`,name:`:white_check_mark: status: resolved`,color:`0e8a16`,default:!1,description:`Applies to issues that have pending PRs resolving them, or PRs that have already merged.`},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +When you clear a IgxSimpleCombo then the dropdown opens.\r +When you clear a IgxCombo then the dropdown doesn't open.\r +\r +## Describe the solution you'd like\r +It should be possible to configure the IgxSimpleCombo to not open the dropdown on clear.`,title:`IgxSimpleCombo: possibility to not open dropdown on clear`,number:11871,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11871`,id:1306127607,pullRequest:null},{createdAt:`2022-07-14T22:18:15Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:941968977,nodeId:`MDU6TGFiZWw5NDE5Njg5Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/card`,name:`card`,color:`5df4b0`,default:!1,description:``},{id:1072582019,nodeId:`MDU6TGFiZWwxMDcyNTgyMDE5`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/expansion-panel`,name:`expansion-panel`,color:`d8720d`,default:!1,description:``},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing Cards & expansion panel, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +## Expected result \r +7. Card Subtitle: color should be 60% white and font weight should be regular. \r +8. Card Outline should be 12% white\r +20. Expansion Panel Subtitle: color should be 60% white and font weight should be regular. \r +\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179287319-f2b3d88b-5553-404c-9cea-7376fa5d4cdd.png)\r +![image](https://user-images.githubusercontent.com/86068582/179097850-f54a3456-8a92-4233-bd67-afc828facb87.png)\r +\r +`,title:`Card Theming Issues`,number:11866,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11866`,id:1305343497,pullRequest:null},{createdAt:`2022-07-14T22:08:22Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is an AppBuilder app showing Date Pickers, using a custom dark theme based on material dark, with custom surface background color (blue).\r +\r +**ALL ISSUES** described here in Date Picker also apply to [Input Group](https://github.com/IgniteUI/igniteui-angular/issues/11873), Combo, Select components and Text Area.\r +All my recommendations are based on the colors used in the Material UI kit Dark Theme from Google.\r +\r +## Expected result \r +2. Label should be 60% white\r +3. Outline should be 38% white\r +4. Icon should be 87% white\r +5. Inactive box input: background color should be 4% white \r +6. Disabled box input: should have 4% white background and only the text and prefix / suffix icons look disabled. \r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179097142-55280aec-9339-4ae8-83d8-6926a7d8256e.png)\r +![image](https://user-images.githubusercontent.com/86068582/179097179-d732395d-95d5-4b16-8f25-48829dab14cd.png)\r +`,title:`Date Picker / Input Group / Combo / Select / Text Area: Theming Issues`,number:11865,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11865`,id:1305337422,pullRequest:null},{createdAt:`2022-07-14T22:06:26Z`,assignee:{id:15327632,avatarUrl:`https://avatars.githubusercontent.com/u/15327632?v=4`,login:`sdimchevski`,email:null,url:`https://api.github.com/users/sdimchevski`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:406864577,nodeId:`MDU6TGFiZWw0MDY4NjQ1Nzc=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme`,name:`material-theme`,color:`fef2c0`,default:!1,description:``},{id:674809506,nodeId:`MDU6TGFiZWw2NzQ4MDk1MDY=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:calendar:%20calendar`,name:`:calendar: calendar`,color:`d4c5f9`,default:!1,description:``},{id:1844773161,nodeId:`MDU6TGFiZWwxODQ0NzczMTYx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme`,name:`dark-theme`,color:`0052cc`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:`## Description \r +This is a calendar in AppBuilder, using a custom dark theme based on material dark, with custom surface background color (blue).\r +The hover state circle has incorrect background and size.\r +\r +## Expected result \r +The hover circle size should be the same size as the selected state.\r +The hover background color should be a 8% white or 8% primary color. \r +\r +\r +## Attachments \r +![image](https://user-images.githubusercontent.com/86068582/179096502-98e9e4a4-a499-428b-96dd-23813c9e4b3e.png)\r +\r +\r +`,title:`Calendar Theming Issues - Material Dark`,number:11864,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11864`,id:1305336223,pullRequest:null},{createdAt:`2022-07-08T18:44:06Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +\r +When using an igx-combo or an input field, it's pretty common to want to use autocompletion. However, at least in my case, it's rare that I already have the data. As they type it hits a remote server to pull the next 50ish entries or so that match the text. That's very complicated to setup today.\r +\r +## Describe the solution you'd like\r +\r +Some type of \`(onNeedAutocomplete)="remoteServerLookup($event)\` ability where I then simply do something like:\r +\r +\`\`\`typescript\r +remoteServerLookup(event: AutocompleteEvent): Observable {\r + return this.myService.filteredValues(event.text)\r +}\r +\`\`\`\r +\r +## Describe alternatives you've considered\r +\r +I'm doing it today via a pipe that calls the service, but those pipes then become repetitive and it's confusing later when looking back as to why I need a pipe and how it's actually triggering the lookup. It also then adds complexity because now I'm having to mix reactive and template-based forms. The input/combo suddenly has to use an \`ngModelChange\` for validity and an \`[(ngModel)]\` to drive the pipe, and then tie that back to the reactive form.\r +\r +It's all doable, it's just really messy.\r +\r +## Additional context\r +\r +We have to tie an \`ngModelChange\` to something like this method. When I look at it later I'm wondering what that pipeString is for. That's what triggers the pipe value.\r +\r +\`\`\`typescript\r + onTextFieldChanged(event: string): void {\r + // If they type into the field, then they didn't pick from the drop-down, that means it's just not valid.\r + this.value = null\r + this.onChange?.(null)\r + this.onTouched?.()\r + this.pipeString = event\r + }\r +\`\`\`\r +\r +Then we end up doing some type of pipe, which might be getting a string back if it's data from the server, but if I had a selected thing already, then it's probably an actual object.\r +\r +\`\`\`typescript\r + transform(_collection: Observable, input: string | Employee | undefined): Observable {\r + if (!input)\r + return of([])\r +\r + if (typeof input !== 'string')\r + return of([input])\r +\r + return of(input).pipe(\r + debounceTime(500),\r + distinctUntilChanged(),\r + switchMap(term => this.service.find(term)),\r + catchError((err: unknown) => {\r + console.error(err as HttpErrorResponse)\r + return of([])\r + })\r + )\r + }\r +\`\`\``,title:`Support remote load on IgxAutocompleteModule`,number:11842,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11842`,id:1299338544,pullRequest:null},{createdAt:`2022-07-04T08:21:38Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:926278753,nodeId:`MDU6TGFiZWw5MjYyNzg3NTM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/combo`,name:`combo`,color:`152872`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +At the moment, we do not have a mechanism for clearing the \`IgxCombo\`'s selection through the keyboard. This is because there are two inputs in the component, one of which allows filtering and is editable and the other is only a container for already selected values, it is not editable. By default, once the dropdown is closed with \`ArrowUp\`, the readonly input receives focus and at that point it is not possible to clear all of the values that have been selected. Attempting \`TAB\` navigation will move the focus to the next focusable element on the page, i.e. we cannot use that to target the clear icon and focus it as it is not focusable. As is if you're only using a keyboard, through the component, you can only deselect items while navigating the dropdown menu and manually deselecting each item.\r +\r +## Describe the solution you'd like\r +A mechanism that allows for all items to be deselected simultaneously. This could include making the clear icon focusable or coming up with a keyboard combination that clears the combo, the latter should only work when the readonly input has the focus.\r +\r +## Describe alternatives you've considered\r +A possible alternative for developers is to create a separate element on the page, such as a button and call the \`combo.deselectAllItems\` method in its click handler. This, however, is not ideal since it introduces a possibly redundant element on the page for a functionality that the combo should provide out of the box.\r +`,title:`Consider clearing the selection of the IgxCombo using only the keyboard`,number:11813,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11813`,id:1292807649,pullRequest:null},{createdAt:`2022-06-22T14:36:15Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:3113485838,nodeId:`MDU6TGFiZWwzMTEzNDg1ODM4`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot`,name:`grid: pivot`,color:`177099`,default:!1,description:``},{id:3893988156,nodeId:`LA_kwDOAxIT487oGYs8`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2013.2.x`,name:`version: 13.2.x`,color:`744395`,default:!1,description:``},{id:4169772772,nodeId:`LA_kwDOAxIT4874ia7k`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2014.0.x`,name:`version: 14.0.x`,color:`76BCC6`,default:!1,description:``}],body:`## Description \r +Describe the issue.\r +\r + * igniteui-angular version: \r + * browser: \r +\r +## Steps to reproduce \r +\r +1. Open hierarchical dev pivot sample\r +2. Resize \`All products\` to the right\r +3. Observe\r +\r +## Result \r +The column header row is misplaced\r +\r +## Expected result \r +The column header row should not change\r +\r +\r +## Attachments \r +\r +https://user-images.githubusercontent.com/37667452/175056219-60fba4c8-bc62-4d6b-86a8-96cf8e0fd25d.mov\r +\r +\r +`,title:`[Pivot] Resizing row dimensions causes column dimensions to break its layout`,number:11764,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11764`,id:1280258836,pullRequest:null},{createdAt:`2022-06-09T16:48:52Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Question \r +I am using the igx-grid component.\r +I have set the cellSelection property as 'multiple'.\r +I want to allow cell selection on specific columns.\r +\r +Also, I want to be notified when a cell is selected. \r +I tried to find an event emitter but couldn't.\r + \r + is there a way to achieve these in igx-grid.\r + \r + * igniteui-angular version: \r + * browser: \r +`,title:`Igx Grid allow cell selection on specific columns`,number:11704,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11704`,id:1266406564,pullRequest:null},{createdAt:`2022-06-03T22:21:54Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +I think there is a core element in Ignite, maybe the igxOverlayService, causing all these memory leaks I have been reporting lately.\r +\r +The reason why I think the problem resides in a core element is because it is really easy to replicate serious memory leaks just by placing different ignite controls inside a component and then destroy such component.\r +I started with tooltips, then combos, then overlays, even with Grids like this example below.\r +\r +The grid component causes a memory leak when being consumed from child components that are later destroyed. See below to reproduce the issue:\r +\r + * igniteui-angular version: 13.1.18\r + * browser: Tested in Microsoft Edge, but happens in Chrome as well\r +\r +## Steps to reproduce \r +\r +1. Use Microsoft Edge as its DevTools contain the Detached Elements panel\r +1. Open [this stackblitz](https://stackblitz.com/edit/angular-k7pshd-fmwjey?file=package.json)\r +1. Click the **CREATE NESTED COMPONENT** button\r +1. Click the grid's combo to select how many rows to see\r +1. Click the **DESTROY NESTED COMPONENT** button\r +1. Open the Detached Elements in DevTools\r +1. You will realize that the component cannot be garbage collected \r +\r +## Result \r +Any child components that contain grids, such as the **** component in this example, are not properly disposed.\r +\r +This memory leak only happens when user opens the grid's combo to select how many rows to see.\r +\r +## Expected result \r +Child components should be properly disposed, no Detached Elements should be left behind.\r +\r +\r +## Attachments \r +Take a look at this gif that also demonstrates the issue\r +![MemoryLeakGrid](https://user-images.githubusercontent.com/4580348/171961184-d1f2ace1-9b68-4d02-a298-e6576d7f0233.gif)\r +\r +`,title:`Memory Leak in igx-grid (please test with all controls)`,number:11672,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11672`,id:1260441441,pullRequest:null},{createdAt:`2022-06-03T12:32:31Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438875,nodeId:`MDU6TGFiZWw1MzE0Mzg4NzU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development`,name:`:hammer_and_wrench: status: in-development`,color:`0052cc`,default:!1,description:`Issues and PRs with active development on them`},{id:749009988,nodeId:`MDU6TGFiZWw3NDkwMDk5ODg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/refactoring`,name:`refactoring`,color:`bcd8f4`,default:!1,description:null},{id:963379072,nodeId:`MDU6TGFiZWw5NjMzNzkwNzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/overlay`,name:`overlay`,color:`a9fcf2`,default:!1,description:``},{id:4169772772,nodeId:`LA_kwDOAxIT4874ia7k`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2014.0.x`,name:`version: 14.0.x`,color:`76BCC6`,default:!1,description:``}],body:"Since the `ComponentFactory` is deprecated and the new way of creating dynamic components in Angular is done through the `viewContainerRef` I think we should update our Overlay's `attach` with an overload that accepts a viewContainerRef. The current overload:\r\nhttps://github.com/IgniteUI/igniteui-angular/blob/a7aebb080a8563ad32b0c09aa93ed538c5c65dfc/projects/igniteui-angular/src/lib/services/overlay/overlay.ts#L321-L322\r\nShould be deprecated - the sooner the better, so we can have a transition period before the old API is dropped.",title:`Update overlay attach dynamic component overload `,number:11671,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11671`,id:1259857586,pullRequest:null},{createdAt:`2022-05-31T08:41:48Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +When using the group by feature, you can set the sorting direction to alphabetical asc og desc, but you can sort by the number of occurrences in each group.\r +\r +## Describe the solution you'd like\r +A new sort direction for count, or perhaps this could be default sorting if the sorting direction is set to None?\r +![image](https://user-images.githubusercontent.com/12936286/171131552-52c9abcb-547b-44f8-9e3c-6221a5d1fbc3.png)\r +\r +\r +`,title:`Order by count in igx-grid group by`,number:11642,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11642`,id:1253535526,pullRequest:null},{createdAt:`2022-05-25T13:19:33Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:3982407566,nodeId:`MDU6TGFiZWwzOTgyNDA3NTY2`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid`,name:`grid`,color:`95f9d5`,default:!1,description:null}],body:`### Description \r +Describe the issue.\r +\r +### Steps to reproduce \r +\r +1. Please go to https://staging.infragistics.com/products/ignite-ui-angular/angular/components/pivotGrid/pivot-grid\r +2. Open dev tool and deselect all the checkbox on the left\r +3. Now Select "Country" checkbox and observe\r +\r +### Result \r +![image](https://user-images.githubusercontent.com/41373491/170271556-cf34694e-c53e-4976-b43d-f8875ce7a6bc.png)\r +\r +`,title:`TypeError: Cannot read properties of undefined (reading 'headerGroupClasses') on Pivot Grid`,number:12504,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12504`,id:1525444496,pullRequest:null},{createdAt:`2022-05-20T13:33:38Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:926278753,nodeId:`MDU6TGFiZWw5MjYyNzg3NTM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/combo`,name:`combo`,color:`152872`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +Currently I'm trying to set uppercase to the input value, but without success because of missing template for the input.\r +\r +## Describe the solution you'd like\r +There should be a template for rendering the input so it can be used to modify the value of the input.\r +\r +Right now if the values in the combo are with capital letters, it looks like this:\r +\r +![image](https://user-images.githubusercontent.com/35975071/169539045-795cef50-599c-4c0b-ba3e-85ef2359531c.png)\r +`,title:`IgxComboComponent missing input template`,number:11601,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11601`,id:1243157823,pullRequest:null},{createdAt:`2022-05-20T13:17:51Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:926278753,nodeId:`MDU6TGFiZWw5MjYyNzg3NTM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/combo`,name:`combo`,color:`152872`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +When the combo is used only to display items without the need to search in the list we can't set a readonly property to the input, because there isn't any property in order to set that without disabling the whole input.\r +\r +## Describe the solution you'd like\r +I think we should be able to set a property to disable the search when it isn't needed.\r +\r +## Describe alternatives you've considered\r +So far the solution is to handle **keydown** event when it's emitted and to add prevent the event from triggering.\r +\r +`,title:`Add readonly option to the input in IgxComboComponent `,number:11600,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11600`,id:1243138330,pullRequest:null},{createdAt:`2022-05-11T13:09:11Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:1157969302,nodeId:`MDU6TGFiZWwxMTU3OTY5MzAy`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/transaction`,name:`transaction`,color:`006b75`,default:!1,description:`igxTransactionService`}],body:`### Description \r +In the Hierarchical Grid Batch Editing and Transactions sample in the documentation demo ([here](https://www.infragistics.com/products/ignite-ui-angular/angular/components/hierarchicalgrid/batch-editing#angular-hierarchical-grid-batch-editing-and-transactions-example)), when editing both parent and a child grid rows, the child grid changes are not commited, even though the corresponding transactions are shown in the log - gif below.\r +\r +When editing only a row from the child grid, it seems that the changes are properly committed.\r +\r +### Steps to reproduce \r +\r +1. Open the[ demo ](https://www.infragistics.com/products/ignite-ui-angular/angular/components/hierarchicalgrid/batch-editing#angular-hierarchical-grid-batch-editing-and-transactions-example)from the docs.\r +2. Edit any row from the parent grid.\r +3. Edit any row from the corresponding child grid.\r +4. Exit row editing mode the edited rows to add the transactions to the log.\r +5. Click "Commit" button.\r +6. Observe the transactions log dialog.\r +7. Confirm commit.\r +\r +### Result \r +While the parent grid's edits are reflected, the child grid's are not.\r +\r +An approach that currently seems to solve the issue in the sample is wrapping the \`grid.transactions.commit(grid.data);\` in a requestAnimationFrame callback. Sample [here.](https://stackblitz.com/edit/igx-hierarchical-grid-batch-editing-commit-child-grid-2?file=src/app/hierarchical-grid/hierarchical-grid-batch-editing/hierarchical-grid-batch-editing.component.ts)\r +\r +### Expected result \r +All edits to be committed.\r +\r +### Attachments \r +![hgrid-batch-edit-demo-issue](https://user-images.githubusercontent.com/35433937/167847690-a37d6ef1-7ffe-4df8-81d6-2de410764018.gif)\r +\r +`,title:`HGrid Batch Editing and Transactions sample - child grid transactions are not committed when parent grid also has transactions`,number:12456,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12456`,id:1496593368,pullRequest:null},{createdAt:`2022-04-13T21:15:29Z`,assignee:{id:52001020,avatarUrl:`https://avatars.githubusercontent.com/u/52001020?v=4`,login:`radomirchev`,email:null,url:`https://api.github.com/users/radomirchev`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`I'm constantly finding the need to have single select drop-down, with autocomplete filtering, where I display a grid. Essentially I want the igx-simple-combo that displays a grid. For example, I'm picking some software from a list, but I have multiple versions. So now I'm forced to concatenate the name and version string together to display, which is not ideal. What I really want is something like so:\r +\r +\`\`\`html\r +\r + \r + \r + \r +\r +\`\`\`\r +\r +Now I have a nice clean interface for my customers. Some items I'd want:\r +\r +1. Should be triggered from an igx-input-group's input field. \r +2. Should allow typing text into the input to filter the igx-grid-combo (by the filterKey property, for example)\r +3. When leaving the input field, should clear out the contents if it's not a selection. Prevents them from thinking they have valid data when they didn't actually pick one of the items.\r +4. Should provide a way to specify a template for what is displayed in the input field after something is selected. The selected "value" is the object, and that's what gets assigned to the form control, but in the input field I want something else displayed.\r +5. Should allow an optional "clear" button icon on the input field if there's a value set. Would like it optional because if the field isn't editable at the moment, it really shouldn't show a clear button.`,title:`Single select grid dropdown`,number:11396,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11396`,id:1203798554,pullRequest:null},{createdAt:`2022-03-31T14:06:33Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +The ignite Splitter is showing empty space when there's a grid in the upper pane, happening in v13.1.0, the issue is not present in v12.2.3 though\r +\r + * igniteui-angular version: 13.1.0\r + * browser: Microsoft Edge Version 99.0.1150.55 (Official build) (64-bit)\r +\r +## Steps to reproduce \r +1. Open [this stackblitz](https://stackblitz.com/edit/angular-k7pshd-6qsmdk)\r +1. Since the initial load, you can see that the upper splitter pane is displaying the grid with empty space in the middle, just above the grid\u2019s footer (in blue color)\r +1. Manually change the size of the upper pane by dragging and dropping the pane\u2019s edge, you will see that the empty blue space goes away\r +1. The splitter bar that separates panes has 2 small arrows on the sides to immediately expand/collapse the panes, please click them in the following order: UP arrow, DOWN arrow, DOWN arrow, UP arrow. You will see that the blue space is displayed again in the upper pane\r +\r +These steps are also recorded here:\r +![Issue](https://user-images.githubusercontent.com/4580348/161072900-f444965f-20b8-47f8-b825-159a3a6761f9.gif)\r +\r +This issue doesn\u2019t happen in v12.2.3, you can follow the same steps in [this stackblitz](https://stackblitz.com/edit/github-hwzhn1-kpyka6)\r +\r +## Result \r +The grid shows an empty space just above the grid's footer \r +\r +## Expected result \r +Grid's contents should not be cropped, in other words, there should not be empty space above the grid's footer\r +\r +`,title:`Splitter showing empty space for grid in upper pane`,number:11323,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11323`,id:1188140100,pullRequest:null},{createdAt:`2022-03-11T18:39:36Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``}],body:`## Description \r +When I set the \`[rowDraggable]\` attribute on my igx-grid, the row widths are not correctly calculating unless ALL columns have the width attribute set. There is no way to have a column that "fills" the remaining space in the grid. Since I have the igx-grid within a css grid container, I cannot set the width of the grid statically.\r +\r + * igniteui-angular version: 13.0.11\r + * browser: Chrome 99.0.4844.51\r +\r +## Steps to reproduce \r +\r +1. Create a grid where only 2/3 columns have a width attribute set\r +2. Verify that the column without the width attribute correctly resizes when the parent container resizes based on available space\r +3. Add the \`[rowDraggable]="true"\` attribute to the grid\r +\r +## Result \r +The width of the grid rows is incorrectly calculated (almost as if it doesn't take into account the width of the row drag cell). No horizontal scrollbar is shown neither.\r +\r +## Expected result \r +The grid row widths are correctly calculated and all rows can be seen. The column without the width attribute will correctly resize based on available space\r +\r +\r +## Attachments \r +Before adding the \`[rowDraggable]\` attribute:\r +![image](https://user-images.githubusercontent.com/18708788/157931308-815f61fe-9642-46fe-9957-19a5845fc55c.png)\r +\r +After adding the \`[rowDraggable]\` attribute (the delete column is not shown anymore):\r +![image](https://user-images.githubusercontent.com/18708788/157931421-0c376e68-de23-4080-8b82-3ebad1948dcd.png)\r +\r +\r +`,title:`igx-grid rowDraggable - Row widths not calculating properly`,number:11227,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11227`,id:1166738958,pullRequest:null},{createdAt:`2022-03-11T10:35:53Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +IgxCombo and IgxSimpleCombo are the only components I'm using which doesn't have a possibility to add a tabindex.\r +\r +## Describe the solution you'd like\r +Please add a tabIndex property to the components.\r +`,title:`IgxCombo, IgxSimpleCombo: missing tabIndex property`,number:11226,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11226`,id:1166258645,pullRequest:null},{createdAt:`2022-03-11T10:28:16Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:651042855,nodeId:`MDU6TGFiZWw2NTEwNDI4NTU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:date:%20date-picker`,name:`:date: date-picker`,color:`afea6b`,default:!1,description:``},{id:835103025,nodeId:`MDU6TGFiZWw4MzUxMDMwMjU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/time-picker`,name:`time-picker`,color:`97f4a2`,default:!1,description:null},{id:1659256343,nodeId:`MDU6TGFiZWwxNjU5MjU2MzQz`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-range-picker`,name:`date-range-picker`,color:`3ec9c4`,default:!1,description:``}],body:`## Description \r +Input \`tabIndex\` doesn't work for IgxDatePicker, IgxTimePicker, IgxDateRangePicker\r +\r + * igniteui-angular version: 13.1.4\r + * browser: Chrome\r +\r +## Steps to reproduce \r +https://stackblitz.com/edit/angular-x8zlxx\r +\r +1. Click in first input.\r +2. Press tab.\r +\r +## Result \r +You can tab through all components despite \`[tabIndex]="-1"\`.\r +\r +## Expected result \r +You shouldn't be able to tab through components with tabIndex = -1.`,title:`IgxDatePicker, IgxTimePicker, IgxDateRangePicker: tabIndex not working`,number:11225,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11225`,id:1166250938,pullRequest:null},{createdAt:`2022-03-01T23:33:29Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:3535663847,nodeId:`LA_kwDOAxIT487SvfLn`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/simple-combo`,name:`simple-combo`,color:`D5F8FB`,default:!1,description:``},{id:3893988156,nodeId:`LA_kwDOAxIT487oGYs8`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2013.2.x`,name:`version: 13.2.x`,color:`744395`,default:!1,description:``}],body:`## Description \r +If the user selects the currently selected item from the dropdown, the selection is cleared.\r +I can reproduce this in the demo.\r +\r + * igniteui-angular version: 13.0.11 -> current\r + * browser: Chrome\r +\r +## Steps to reproduce \r +\r +1. Open Ignite [Simple ComboBox demo](https://www.infragistics.com/products/ignite-ui-angular/angular/components/simple-combo#angular-simple-combobox-example)\r +2. Open the control in the first example\r +3. Select the 'CubicFit' item (or whatever is currently selected)\r +\r +## Result \r +Selection is cleared.\r +\r +## Expected result \r +Selection is not cleared.\r +\r +\r +## Attachments \r +[Ignite demo](https://www.infragistics.com/products/ignite-ui-angular/angular/components/simple-combo#angular-simple-combobox-example) \r +\r +## Note\r +The \`(selectionChanging)\` event returns \`undefined\` for the newSelection.\r +\r +`,title:` selection cleared when selecting the currently selected item.`,number:11141,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11141`,id:1155949938,pullRequest:null},{createdAt:`2022-02-28T15:15:27Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:625766429,nodeId:`MDU6TGFiZWw2MjU3NjY0Mjk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general`,name:`grid: general`,color:`5319e7`,default:!1,description:``},{id:749010965,nodeId:`MDU6TGFiZWw3NDkwMTA5NjU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/virtualization`,name:`virtualization`,color:`e85a19`,default:!1,description:null},{id:1665536927,nodeId:`MDU6TGFiZWwxNjY1NTM2OTI3`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20collapsible-column-groups`,name:`grid: collapsible-column-groups`,color:`75cc47`,default:!1,description:``}],body:`## Description \r +Describe the issue.\r +\r + * igniteui-angular version: 3.0.x\r + * browser: any\r +\r +## Steps to reproduce \r +\r +1. Open https://www.infragistics.com/angular-demos/grid/grid-collapsible-groups\r +2. Resize window so there is horizontal scrollbar\r +3. Scroll to the end\r +4. Expand the last collapsible column group\r +\r +## Result \r +Only 3 child header are visible after expanding for \`Product Details\`\r +\r +## Expected result \r +There should be 4 child headers visible\r +\r +\r +`,title:`Expanding a collapsible column group when scrolled to the end does not update scrollbar`,number:11119,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11119`,id:1154212973,pullRequest:null},{createdAt:`2022-02-12T14:55:49Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:749010965,nodeId:`MDU6TGFiZWw3NDkwMTA5NjU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/virtualization`,name:`virtualization`,color:`e85a19`,default:!1,description:null},{id:2636303240,nodeId:`MDU6TGFiZWwyNjM2MzAzMjQw`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20performance`,name:`grid: performance`,color:`296A82`,default:!1,description:``}],body:"Hi! I would like to virtualize one billion records that are lazily created as the user scrolls their grid. Think, a vertical grid with one billion rows that each display their row number.\r\n\r\nHowever, I'm hitting some performance problems around the 2.5 million mark. \r\n\r\nI've pinpointed the bottlenecks to interactions with `heightCache` and `sizeCache` in methods like `initSizesCache`, `_updateSizeCache`, `_calcHeight`, and `recalcUpdateSizes`. All of my rows are the same fixed size (50px the default), and I was wondering if it were possible to optimize the grid implementation to perform well in this use case. Thanks!\r\n\r\n * igniteui-angular version: 12.3.11\r\n * browser: Chrome 94\r\n\r\nPS: As a proof-of-concept, I actually overrode the functions I listed above to calculate row heights with multiplication instead of looking the sizes up, and I was able to see an amazing performance improvement way up to 50 million. Beyond 50 million or so, I get `ERROR RangeError: Invalid array length` on `this.sizesCache.push(totalSize)` in `IgxGridForOfDirective.initSizesCache`, and I was wondering if you could allow me to opt out of per-row storage entirely for massive datasets like this. Thanks! ",title:`Performance issues at massive scale`,number:11002,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11002`,id:1134150212,pullRequest:null},{createdAt:`2022-02-08T09:41:13Z`,assignee:{id:14248932,avatarUrl:`https://avatars.githubusercontent.com/u/14248932?v=4`,login:`hanastasov`,email:null,url:`https://api.github.com/users/hanastasov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:762261742,nodeId:`MDU6TGFiZWw3NjIyNjE3NDI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/circular-progress`,name:`circular-progress`,color:`f9b8c4`,default:!1,description:null},{id:771293723,nodeId:`MDU6TGFiZWw3NzEyOTM3MjM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/progress-bar`,name:`progress-bar`,color:`4ed352`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:1299108257,nodeId:`MDU6TGFiZWwxMjk5MTA4MjU3`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/linear-progress`,name:`linear-progress`,color:`9fb3f2`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +Add UI tests for progressbar animation\r +`,title:`Add UI tests for progressbar animation`,number:10965,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10965`,id:1127011664,pullRequest:null},{createdAt:`2021-11-23T13:54:28Z`,assignee:{id:14248932,avatarUrl:`https://avatars.githubusercontent.com/u/14248932?v=4`,login:`hanastasov`,email:null,url:`https://api.github.com/users/hanastasov`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:625766429,nodeId:`MDU6TGFiZWw2MjU3NjY0Mjk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general`,name:`grid: general`,color:`5319e7`,default:!1,description:``},{id:3520634791,nodeId:`LA_kwDOAxIT487R2J-n`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2013.1.x`,name:`version: 13.1.x`,color:`A2E656`,default:!1,description:``}],body:"Following the removal of `rowID` and `rowData` properties from `IgxRowDirective` and all public classes implementing the `RowType` interface, considering the following:\r\n\r\nDeprecate the old `rowID` and `rowData` from any or all of the following:\r\n\r\n- [x] context object of [`rowSelectorTemplate`](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/grids/grid/grid-row.component.html#L18)\r\n- [ ] [`IGridEditDoneEventArgs`](https://github.com/IgniteUI/igniteui-angular/blob/13d82c111d668dfdc8c0f4ec9e1498d0d3e32667/projects/igniteui-angular/src/lib/grids/common/events.ts#L20)\r\n- [ ] [`IRowToggleEventArgs`](https://github.com/IgniteUI/igniteui-angular/blob/13d82c111d668dfdc8c0f4ec9e1498d0d3e32667/projects/igniteui-angular/src/lib/grids/common/events.ts#L151)\r\n- [ ] [ `IPinRowEventArgs`](https://github.com/IgniteUI/igniteui-angular/blob/13d82c111d668dfdc8c0f4ec9e1498d0d3e32667/projects/igniteui-angular/src/lib/grids/common/events.ts#L165)\r\n- [ ] [`HierarchicalStateRecord`](https://github.com/IgniteUI/igniteui-angular/blob/13d82c111d668dfdc8c0f4ec9e1498d0d3e32667/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts#L48)\r\n- [ ] [`IPathSegment`](https://github.com/IgniteUI/igniteui-angular/blob/13d82c111d668dfdc8c0f4ec9e1498d0d3e32667/projects/igniteui-angular/src/lib/grids/common/grid.interface.ts#L42)\r\n\r\nand introduce the new `key` and `rowData`\r\n",title:`Deprecate rowID and rowData in interfaces`,number:10617,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10617`,id:1061315242,pullRequest:null},{createdAt:`2021-11-23T13:36:18Z`,assignee:{id:16020256,avatarUrl:`https://avatars.githubusercontent.com/u/16020256?v=4`,login:`jackofdiamond5`,email:null,url:`https://api.github.com/users/jackofdiamond5`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +Add custom theme attribute for igx-date-picker theme.\r +\r +## Describe the solution you'd like\r +igx-date-picker has a igx-input-group that allows to customize the theme with a attribute but it is not exposed by the date picker API.\r +\r +## Describe alternatives you've considered\r +The theme is inferred in runtime but it not cached [https://www.infragistics.com/products/ignite-ui-angular/angular/components/input-group#input-group-theme](https://www.infragistics.com/products/ignite-ui-angular/angular/components/input-group#input-group-theme)\r +\r +## Additional context\r +[https://github.com/IgniteUI/igniteui-angular/blob/24f16983758056cea3b30c32bef836153adcff2c/projects/igniteui-angular/src/lib/input-group/input-group.component.ts#L453](https://github.com/IgniteUI/igniteui-angular/blob/24f16983758056cea3b30c32bef836153adcff2c/projects/igniteui-angular/src/lib/input-group/input-group.component.ts#L453)\r +\r +[https://www.infragistics.com/products/ignite-ui-angular/docs/typescript/latest/classes/IgxInputGroupComponent.html#theme](https://www.infragistics.com/products/ignite-ui-angular/docs/typescript/latest/classes/IgxInputGroupComponent.html#theme)\r +`,title:`igx-date-picker - Add custom theme attribute`,number:10614,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10614`,id:1061296512,pullRequest:null},{createdAt:`2021-11-22T13:16:41Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:967825069,nodeId:`MDU6TGFiZWw5Njc4MjUwNjk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/migrations`,name:`migrations`,color:`99e50d`,default:!1,description:``}],body:"## Is your feature request related to a problem? Please describe.\r\nAt the moment we do not support fully migrating union or intersection types. Methods or properties that return such types will not be resolved properly and any migration that attempts to modify such members will be ignored.\r\n\r\n## Describe the solution you'd like\r\nWe should consider extending our existing functionality to allow the migration of union and intersection types. These types can also be a part of a generic declaration, so we need to account for that as well.\r\n\r\n## Additional context\r\nSome variations may include:\r\n```typescript\r\nmethod1(arg1: A, arg2: B, ...args): A | B\r\n\r\nmethod2(predicate: (value: A, ...args) => value is B): B | undefined\r\n\r\nmethod3(...args): B | undefined\r\n\r\n\r\nprop1: A | B | undefined\r\n\r\nprop2: A & B\r\n```\r\n\r\nA common case is the `Array.find` method. One of its overloads is a generic union between `S` and `undefined`. At the moment any member `K` accessed from the type `S` returned by `Array.find` will not be migrated. \r\nFor example - `grid.rowList.toArray().find(r => r.rowID === someRowID).rowID` - `r.rowID` will be migrated successfully (providing everything is strictly typed) while `find(...).rowID` will not be migrated.\r\n",title:`Allow migrating of union and intersection types`,number:10597,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10597`,id:1060145465,pullRequest:null},{createdAt:`2021-11-17T15:40:58Z`,assignee:{id:16817847,avatarUrl:`https://avatars.githubusercontent.com/u/16817847?v=4`,login:`gedinakova`,email:null,url:`https://api.github.com/users/gedinakova`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +I have a toolbar that I want to reuse in a bunch of different \`IgxGrid\` implementations, currently, I have to duplicate that code every time\r +\r +## Describe the solution you'd like\r +I want to reuse the same \`\` code on different \`IgxGrid\` or \`IgxTreeGrid\`, so I don't have to duplicate code on all my implementations, seems to me that the most natural way would be to use Angular [content](https://angular.io/guide/content-projection) or inline [template](https://angular.io/api/core/ng-template). the following example would be ideal:\r +\`\`\`\r + \r + \r + ... \r + ... custom elements\r + \r + \r + \r + \r + \r + \r + ... more custom elements \r + \r + \r +\r + ... and more \r + ... and a lot more \r +\`\`\`\r +\r +## Describe alternatives you've considered\r +The only alternative I currently have seems to duplicate my code, an alternative expected result for this FR could be to print the template directly and receive additional parameters using a directive:\r +\`\`\`\r + \r + \r + ... \r + ... custom elements\r + \r + \r + \r + \r + \r + \r + ... more custom elements \r + \r + \r +\r + \r + \r + ... and more\r +\r +\r + \r + ... and a lot more\r +\r +\`\`\`\r +\r +## Additional context\r +Breaking changes or new features might need to be replicated in a lot of places, this FR might solve version upgrade issues. Also, this issue is related [to this discussion](https://github.com/IgniteUI/igniteui-angular/discussions/10455) where I explain a lot more my use case.\r +`,title:`Add [toolbarTemplate] parameter to IgxGrid and IgxTreeGrid`,number:10537,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10537`,id:1056278477,pullRequest:null},{createdAt:`2021-10-01T05:29:47Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`\r +## Is your feature request related to a problem? Please describe.\r +Currently we are using one option for show and hide the grid columns explicitly for that implementation we used Igx Column Actions .\r +Ignite version: 12.1.5\r +\r +https://stackblitz.com/github/IgniteUI/igniteui-live-editing-samples/tree/master/angular-demos/grid/grid-column-hiding-sample?file=src%2Fapp%2Fgrid%2Fgrid-column-hiding-sample%2Fgrid-column-hiding-sample.component.html\r +\r +## Describe the solution you'd like\r + Need the igx-colum-action column items dragable vertically to change the postion of the items and relatively change the column position of the igx-grid..\r +\r +\r +`,title:`Drag and Drop columns in igx-column-action `,number:10221,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10221`,id:1012915118,pullRequest:null},{createdAt:`2021-09-29T07:06:55Z`,assignee:{id:46093564,avatarUrl:`https://avatars.githubusercontent.com/u/46093564?v=4`,login:`dobromirts`,email:null,url:`https://api.github.com/users/dobromirts`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:625766429,nodeId:`MDU6TGFiZWw2MjU3NjY0Mjk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general`,name:`grid: general`,color:`5319e7`,default:!1,description:``},{id:3399979682,nodeId:`LA_kwDOAxIT487Kp5Ki`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder`,name:`source: appbuilder`,color:`8E48B0`,default:!1,description:``}],body:` * igniteui-angular version: 12.2.0-alpha.3\r +\r +## Steps to reproduce \r +\r +Grid alignment issues - add paging and group by. Do the following actions \u2013 gif below.\r +\r +https://www.screencast.com/t/bH2NBAmkk \r +\r +Make sure to watch the entire video.\r +\r +\r +## Result \r +![4](https://user-images.githubusercontent.com/14248932/135219642-721d0453-8478-4e2b-8607-ccd8b9cb4b87.png)\r +\r +`,title:`Grid alignment issues `,number:10208,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10208`,id:1010575213,pullRequest:null},{createdAt:`2021-09-23T14:21:54Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:1105153503,nodeId:`MDU6TGFiZWwxMTA1MTUzNTAz`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/batch-editing`,name:`batch-editing`,color:`73eea4`,default:!1,description:``}],body:`## Question \r +Hi -- the scenario I'm targeting is, a user makes a bunch of edits to multiple rows in a grid, clicks save, and realizes they made a mistake--so they want to click undo. Currently, my save button calls \`TransactionService.commit()\`, which seems to wipe the undo stack. Is it possible to keep the undos so my user can revert to the state before the save? Thanks!\r +\r + * igniteui-angular version: \r + * browser: `,title:"`TransactionService.commit()` but keep undos? ",number:10181,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10181`,id:1005497498,pullRequest:null},{createdAt:`2021-08-20T15:35:58Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:749010965,nodeId:`MDU6TGFiZWw3NDkwMTA5NjU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/virtualization`,name:`virtualization`,color:`e85a19`,default:!1,description:null}],body:`If the for-of container receives padding, the last item gets cut off with that amount - padding is not taken into account.\r +\r +Reproducing samples - 2nd two from this:\r +\r +[github-kpsvt9-djhsue.zip](https://github.com/IgniteUI/igniteui-angular/files/7022641/github-kpsvt9-djhsue.zip)\r +`,title:`Allow for padded containers with igxForOf (supported with ngFor)`,number:10040,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10040`,id:975717758,pullRequest:null},{createdAt:`2021-08-12T09:46:20Z`,assignee:{id:14248932,avatarUrl:`https://avatars.githubusercontent.com/u/14248932?v=4`,login:`hanastasov`,email:null,url:`https://api.github.com/users/hanastasov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531441726,nodeId:`MDU6TGFiZWw1MzE0NDE3MjY=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:firecracker:%20severity:%20medium`,name:`:firecracker: severity: medium`,color:`fbca04`,default:!1,description:``},{id:983537039,nodeId:`MDU6TGFiZWw5ODM1MzcwMzk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20paging`,name:`grid: paging`,color:`f96398`,default:!1,description:``},{id:3048421571,nodeId:`MDU6TGFiZWwzMDQ4NDIxNTcx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2012.1.x`,name:`version: 12.1.x`,color:`74F034`,default:!1,description:``}],body:`## Description \r +Grid provides incorrect slice of data on last page, when remote data with batch editing \r +\r + * igniteui-angular version: 12.1.x\r +\r +## Steps to reproduce \r +\r +1. Go to https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/remote-data-operations#remote-paging-with-batch-editing\r +2. Go to last page\r +3. Click Add Row several times, until grid pages increment from 8 to 9\r +4. Go to last 9th page\r +\r +## Result:\r +Grid Shows records from page 8 as well\r +\r +## Expect:\r +Grid to display only records for page 9\r +`,title:`Grid provides incorrect slice of data on last page, when remote data with batch editing `,number:9990,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9990`,id:968470941,pullRequest:null},{createdAt:`2021-07-23T10:10:26Z`,assignee:{id:9549439,avatarUrl:`https://avatars.githubusercontent.com/u/9549439?v=4`,login:`valadzhov`,email:null,url:`https://api.github.com/users/valadzhov`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:967825069,nodeId:`MDU6TGFiZWw5Njc4MjUwNjk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/migrations`,name:`migrations`,color:`99e50d`,default:!1,description:``}],body:`Currently, it is not possible to run migration unit tests for .ts files. This leads to problems like this: https://github.com/IgniteUI/igniteui-angular/pull/9910\r +`,title:`Execute migrations tests for .ts files`,number:9912,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9912`,id:951440516,pullRequest:null},{createdAt:`2021-06-14T07:00:24Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:926278753,nodeId:`MDU6TGFiZWw5MjYyNzg3NTM=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/combo`,name:`combo`,color:`152872`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +I have an editable grid, where the data the user can select from is hierarchical. So esentially, I need something like this, only with support for hierarchical data:\r +![image](https://user-images.githubusercontent.com/12936286/121851505-81fc2400-ccee-11eb-873b-3f4485b9fecd.png)\r +\r +I have looked briefly into other solutions, like for instance using the new tree component with a drop down.\r +![image](https://user-images.githubusercontent.com/12936286/121851625-a3f5a680-ccee-11eb-8e1f-20ca25ecf8d8.png)\r +But while this works, there are some issues, like I would prefer that the trigger for the drop down looked like the combo:\r + \r +![image](https://user-images.githubusercontent.com/12936286/121851758-ca1b4680-ccee-11eb-9ed1-11f45d0e1f06.png)\r +\r +Also, I would manually have to implement the filter already present in the combo.\r +\r +\r +\r +\r +`,title:`Support for hierarchical data in igx-combo`,number:9707,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9707`,id:920087416,pullRequest:null},{createdAt:`2021-06-08T15:12:48Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:651042855,nodeId:`MDU6TGFiZWw2NTEwNDI4NTU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:date:%20date-picker`,name:`:date: date-picker`,color:`afea6b`,default:!1,description:``},{id:674809506,nodeId:`MDU6TGFiZWw2NzQ4MDk1MDY=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:calendar:%20calendar`,name:`:calendar: calendar`,color:`d4c5f9`,default:!1,description:``},{id:835103025,nodeId:`MDU6TGFiZWw4MzUxMDMwMjU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/time-picker`,name:`time-picker`,color:`97f4a2`,default:!1,description:null},{id:1775129274,nodeId:`MDU6TGFiZWwxNzc1MTI5Mjc0`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-time-editor`,name:`date-time-editor`,color:`47a31a`,default:!1,description:``}],body:`Some examples of UI experience on desktop and mobile devices that I expected to behave differently. Just for the sake of discussing if this is the right way or another would be better.\r +\r +### Updating the calendar while editing the input\r +![MicrosoftTeams-image (22)](https://user-images.githubusercontent.com/14248932/121205515-6624f800-c880-11eb-91f0-6ec44d0cb431.png)\r +\r +1) Open https://infragistics.com/angular-demos/scheduling/datepicker-sample-1\r +2) Open the calendar to select a date\r +3) Update the input value and press Enter\r +\r +Expectations:\r +The calendar to respect the value in the input\r +\r +Result\r +Calendar view did not change accordingly\r +\r +### Clearing the input value using the \`Delete\` key on the mobile Chrome keyboard for IgxDatePicker and IgxTimePicker\r +1) Open https://www.infragistics.com/angular-demos/data-entries/reactive-forms on mobile\r +2) Select a date in the \`Date\` input\r +3) After selecting the date, the value in the input is selected.\r +4) Press \`Delete\`\r +\r +Expectations:\r +value to be cleared\r +\r +Result:\r +Cursor was moved to first position\r +\r +### Writing in the date picker input\r +1) Focus the IgxDatePicker input on Mobile in order to write in the input\r +\r +Expectation:\r +A mobile keyboard to be brought to the user\r +\r +Result\r +The default keyboard is brought to the user.`,title:`IgxCalendar and IgxDatePicker UX experience on desktop and mobile`,number:9685,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9685`,id:915160557,pullRequest:null},{createdAt:`2021-05-06T14:44:30Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:963379072,nodeId:`MDU6TGFiZWw5NjMzNzkwNzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/overlay`,name:`overlay`,color:`a9fcf2`,default:!1,description:``}],body:`Our designs need to change based on whether a panel has opened above or below the anchor point.\r +\r +Here is what we have:\r +![image](https://user-images.githubusercontent.com/9682964/117309774-bc051b00-ae50-11eb-9fea-914666889d5a.png)\r +\r +We need the top border and bottom border-radius to be swapped when the panel opens to the top like this.\r +\r +Ideally, there could be a class to indicate that the panel is flipping up.\r +`,title:`Classes to indicate position of auto overlay`,number:9481,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9481`,id:877575652,pullRequest:null},{createdAt:`2021-04-29T08:35:31Z`,assignee:{id:14248932,avatarUrl:`https://avatars.githubusercontent.com/u/14248932?v=4`,login:`hanastasov`,email:null,url:`https://api.github.com/users/hanastasov`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:674809506,nodeId:`MDU6TGFiZWw2NzQ4MDk1MDY=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:calendar:%20calendar`,name:`:calendar: calendar`,color:`d4c5f9`,default:!1,description:``},{id:2518122248,nodeId:`MDU6TGFiZWwyNTE4MTIyMjQ4`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2011.1.x`,name:`version: 11.1.x`,color:`e99695`,default:!1,description:``},{id:2685585222,nodeId:`MDU6TGFiZWwyNjg1NTg1MjIy`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2012.0.x`,name:`version: 12.0.x`,color:`08F0E5`,default:!1,description:``}],body:`## Description \r +Multi-view calendar scrolls to next month even if that month is already in the view\r +\r + * igniteui-angular version: all\r + * browser: all\r +\r +## Steps to reproduce \r +\r +1. Run dev demos\r +2. Open this [sample](http://localhost:4200/calendar) and scroll to the multi-view calendar\r +3. Inside for example **April** pick **first** of **May**\r +\r +## Result \r +The multi-view moves **April** outside of the view and sets **May** as a first calendar in the view.\r +\r +## Expected result \r +The multi-view should not move **April** outside of the view and set **May** as the first calendar since **May** is already in the view.`,title:`Multi-view calendar unnecessarily scrolls months`,number:9473,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9473`,id:870760593,pullRequest:null},{createdAt:`2021-03-31T18:38:57Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +When i want to drop a row inside collapsed row, right now there is no option to expand the row on hover after sometime.\r +\r +## Describe the solution you'd like\r +My solution would be introduce a property which will expand the drop row on hover by default if the property is set to true.\r +set the default time to 2secs or 3secs.\r +\r +## Describe alternatives you've considered\r +i tried some alternatives but it is not working as expected.\r +some other row is getting moved instead of drag row.\r +\r +## Additional context\r +Above Description is more than sufficient.\r +`,title:`Expand Target row on hover after 2secs, if the target row is collapsed in Drag and Drop`,number:9236,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9236`,id:847116363,pullRequest:null},{createdAt:`2021-02-26T12:19:12Z`,assignee:{id:14248932,avatarUrl:`https://avatars.githubusercontent.com/u/14248932?v=4`,login:`hanastasov`,email:null,url:`https://api.github.com/users/hanastasov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +When selecting a cell or row, it doesn't seem to be a way deselect the cell or row again with the mouse. \r +\r +## Describe the solution you'd like\r +It would be nice to have a mode for the grid, where clicking the selection removed the selection again.\r +`,title:`Deselect when clicking selection`,number:9086,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9086`,id:817311283,pullRequest:null},{createdAt:`2021-02-25T23:51:04Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``}],body:`## Is your feature request related to a problem? Please describe.\r +This is related to question [9064](https://github.com/IgniteUI/igniteui-angular/issues/9064), If I can't add recursive templates, it would be nice to at least reuse the same columns at each row island level.\r +\r +\r +## Describe the solution you'd like\r +I would like to implement something similar to this:\r + \`\`\`\r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r + \r +\`\`\`\r +\r +## Describe alternatives you've considered\r +Currently I'm being forced to define every level even though they are all the same.\r +\r +## Additional context\r +Any alternative to encapsulate columns definitions would be ok. \r +`,title:`Add [igxColumnTemplate] to and `,number:9080,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9080`,id:816902086,pullRequest:null},{createdAt:`2021-01-12T14:27:07Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:324654932,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement`,name:`enhancement`,color:`84b6eb`,default:!0,description:null},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:963379072,nodeId:`MDU6TGFiZWw5NjMzNzkwNzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/overlay`,name:`overlay`,color:`a9fcf2`,default:!1,description:``},{id:2069855364,nodeId:`MDU6TGFiZWwyMDY5ODU1MzY0`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/priority:%20low`,name:`priority: low`,color:`d7e25a`,default:!1,description:``},{id:2518122248,nodeId:`MDU6TGFiZWwyNTE4MTIyMjQ4`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2011.1.x`,name:`version: 11.1.x`,color:`e99695`,default:!1,description:``}],body:`\`IgxOverlayService\` is using now angular animations package to animate content shown in the overlay. However this package has some limitations, e.g. during animation you cannot take how much of the animation has elapsed, as well as some bugs like #6581 and #8450. Switching to native Web Animations will allow us to fix the issues we have and control better animation flow.\r +\r +Stop using angular animation package in overlay service and animate content via [Web Animations](https://developer.mozilla.org/en-US/docs/Web/API/Animation)\r +\r +For some of the issues we are using work arounds in our code and for other we are waiting for angular to fix their package. However this is not good as we are depending on third party while with Web Animations we can depend on ourselves.\r +\r +- [x] add animation service - #11628 \r +- [ ] implement animation service with Web Animations`,title:`Switch overlay service from angular animations to native Web Animations`,number:8780,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/8780`,id:784285210,pullRequest:null},{createdAt:`2020-11-16T15:15:50Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:963379072,nodeId:`MDU6TGFiZWw5NjMzNzkwNzI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/overlay`,name:`overlay`,color:`a9fcf2`,default:!1,description:``},{id:2273176771,nodeId:`MDU6TGFiZWwyMjczMTc2Nzcx`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2010.2.x`,name:`version: 10.2.x`,color:`b631e2`,default:!1,description:``}],body:`### Description \r +Describe the issue.\r +\r + * igniteui-angular version: 10.2.x\r + * browser: any\r +\r +### Steps to reproduce \r +\r +1. The viewport fit calculation is based on the document instead of the provided outlet thus resulting in strange behavior sometimes:\r +\r +![image](https://user-images.githubusercontent.com/47364572/99269747-196bc800-282f-11eb-87d2-b076a72f7181.png)\r +\r +can be useful in cases like this one:\r +\r +![image](https://user-images.githubusercontent.com/47364572/99270255-3b654a80-282f-11eb-92db-085423a4da4e.png)\r +\r +Provide a way to choose whether to make the calculations based on the outlet or the document.\r +\r +\r +`,title:`Overlay doesn't calculate its position fit based on the outlet but based on the document`,number:8595,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/8595`,id:743919089,pullRequest:null},{createdAt:`2020-10-27T06:34:46Z`,assignee:{id:16817847,avatarUrl:`https://avatars.githubusercontent.com/u/16817847?v=4`,login:`gedinakova`,email:null,url:`https://api.github.com/users/gedinakova`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:850290880,nodeId:`MDU6TGFiZWw4NTAyOTA4ODA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20filter-ui`,name:`grid: filter-ui`,color:`f484f1`,default:!1,description:``},{id:1221520389,nodeId:`MDU6TGFiZWwxMjIxNTIwMzg5`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20excel-style-filtering`,name:`grid: excel-style-filtering`,color:`fef2c0`,default:!1,description:``},{id:2043077405,nodeId:`MDU6TGFiZWwyMDQzMDc3NDA1`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive`,name:`status: inactive`,color:`bdc442`,default:!1,description:`Used to stale issues and pull requests`}],body:`ESF does not respect custom column filters\r +\r + * igniteui-angular version: 9.1.x\r +\r +## Steps to reproduce \r +\r +1. Set an \`IgxStringFilteringOperand\` custom filter to a column of \`number\` data type.\r +\`\`\`typescript\r +public unitFilters = IgxStringFilteringOperand.instance();,\r +\`\`\`\r +\`\`\`html\r +\r +\r +\`\`\`\r +2. Open ESF dialog\r +\r +Note that if quick filtering is used, instead of ESF, custom column filters are respected.\r +\r +## Result \r +Default numeric filters are rendered in the UI, instead of the custom ones\r +\r +## Expected result \r +Custom filters to be rendered in the UI\r +\r +Note:\r +Only the list item that expands the filters is not changed:\r +![Untitled](https://user-images.githubusercontent.com/14248932/97999097-950f5300-1df3-11eb-91c6-c20a08c1ce28.png)\r +\r +\r +`,title:`ESF does not respect custom column filters`,number:8462,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/8462`,id:730157145,pullRequest:null},{createdAt:`2020-08-05T13:35:49Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:455636069,nodeId:`MDU6TGFiZWw0NTU2MzYwNjk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dialog`,name:`dialog`,color:`2078bc`,default:!1,description:``},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:674809506,nodeId:`MDU6TGFiZWw2NzQ4MDk1MDY=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:calendar:%20calendar`,name:`:calendar: calendar`,color:`d4c5f9`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:1659256343,nodeId:`MDU6TGFiZWwxNjU5MjU2MzQz`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-range-picker`,name:`date-range-picker`,color:`3ec9c4`,default:!1,description:``}],body:`I would like to be able to template the range picker's dialog container of the calendar, in order to provide additional actions/elements.\r +\r +Currently the dialog container has only one action button, which applies the range and it will be nice if the user could add more actions (e.g. Undo, Redo, Selected Dates count, etc).\r +\r +`,title:`Support for templating date range picker's calendar dialog container `,number:7939,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/7939`,id:673545914,pullRequest:null},{createdAt:`2020-04-29T08:13:27Z`,assignee:{id:2621802,avatarUrl:`https://avatars.githubusercontent.com/u/2621802?v=4`,login:`Lipata`,email:null,url:`https://api.github.com/users/Lipata`},labels:[{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:1659256343,nodeId:`MDU6TGFiZWwxNjU5MjU2MzQz`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-range-picker`,name:`date-range-picker`,color:`3ec9c4`,default:!1,description:``},{id:1843355790,nodeId:`MDU6TGFiZWwxODQzMzU1Nzkw`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%209.1.x`,name:`version: 9.1.x`,color:`0be554`,default:!1,description:``}],body:"## Is your feature request related to a problem? Please describe.\r\n`IgxDatePicker` allows developer to set `vertical` mode. `IgxDateRangePicker` should has same option\r\n\r\n## Describe the solution you'd like\r\nAdd `vertical` mode to `IgxDateRangePicker`.\r\n\r\n## Describe alternatives you've considered\r\nThere is no way to achieve this in `IgxDateRangePicker` now.\r\n",title:`IgxDateRangePicker should allow vertical mode`,number:7231,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/7231`,id:608863706,pullRequest:null},{createdAt:`2020-04-09T09:18:49Z`,assignee:{id:20106115,avatarUrl:`https://avatars.githubusercontent.com/u/20106115?v=4`,login:`rkaraivanov`,email:null,url:`https://api.github.com/users/rkaraivanov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:839132075,nodeId:`MDU6TGFiZWw4MzkxMzIwNzU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/mask-editor`,name:`mask-editor`,color:`d13bd3`,default:!1,description:null},{id:1628732209,nodeId:`MDU6TGFiZWwxNjI4NzMyMjA5`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/size:%20L`,name:`size: L`,color:`dd3989`,default:!1,description:``},{id:1843355790,nodeId:`MDU6TGFiZWwxODQzMzU1Nzkw`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%209.1.x`,name:`version: 9.1.x`,color:`0be554`,default:!1,description:``}],body:`## Description \r +If the mask is set to "'(966) #### ####'" when you enter into edit mode the symbol '9' is always treated as a fillable spot.\r +\r + * igniteui-angular version: 9.0.1 \r +\r +## Steps to reproduce \r +\r +1. Run the sample\r +2. Click on the input\r +\r +## Result \r +The digit 9 is replaced as fillable spot.\r +\r +## Expected result \r +To be able to set some indication in case you want the symbol '9' to be treated as a digit, not special symbol and after the input is clicked to looks like (966) _ _ _ _ _ _ _ _.\r +\r +\r +## Attachments \r +https://stackblitz.com/edit/angular-9kocto\r +\r +`,title:`igxMask always set the symbol '9' as a fillable spot `,number:7089,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/7089`,id:597143445,pullRequest:null},{createdAt:`2019-12-03T14:20:19Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:1714752892,nodeId:`MDU6TGFiZWwxNzE0NzUyODky`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/resizable`,name:`resizable`,color:`b7f99f`,default:!1,description:``}],body:`## Question \r +Is there a plan to add a resizing functionality to [IgxDrag]?\r +\r +Thank you.`,title:`Resizing [IgxDrag]`,number:6283,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/6283`,id:532019100,pullRequest:null},{createdAt:`2019-08-27T04:48:39Z`,assignee:{id:1472513,avatarUrl:`https://avatars.githubusercontent.com/u/1472513?v=4`,login:`kdinev`,email:null,url:`https://api.github.com/users/kdinev`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:881145265,nodeId:`MDU6TGFiZWw4ODExNDUyNjU=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/exporters`,name:`exporters`,color:`c2e0c6`,default:!1,description:``},{id:2993683250,nodeId:`MDU6TGFiZWwyOTkzNjgzMjUw`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/pdf-exporter`,name:`pdf-exporter`,color:`351F48`,default:!1,description:``}],body:`pdf export is very common requirement from client side. we like Angular grid but missing export to pdf is annoying customers. Please provide export to pdf fetaure along with Excel & csv. \r +\r +**## Describe the solution you'd like**\r +Please provide export to pdf fetaure along with Excel & csv on Angular Grid. \r +\r +`,title:`pdf Export feature on Angular Grid`,number:5696,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/5696`,id:485580657,pullRequest:null},{createdAt:`2019-01-03T12:31:04Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:625766429,nodeId:`MDU6TGFiZWw2MjU3NjY0Mjk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general`,name:`grid: general`,color:`5319e7`,default:!1,description:``},{id:823505669,nodeId:`MDU6TGFiZWw4MjM1MDU2Njk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request`,name:`:toolbox: feature-request`,color:`dd449e`,default:!1,description:``},{id:1628732209,nodeId:`MDU6TGFiZWwxNjI4NzMyMjA5`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/size:%20L`,name:`size: L`,color:`dd3989`,default:!1,description:``}],body:`### Description \r +\r +There is a request from a customer to implement a Cell Merging similar to the igGrid one: https://www.igniteui.com/help/iggrid-cellmerging-overview\r +\r + * igniteui-angular version: 7.x\r + * browser: *\r +\r +\r +`,title:`Grid Cell Merging`,number:3514,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/3514`,id:395556832,pullRequest:null},{createdAt:`2018-04-19T11:18:05Z`,assignee:{id:1182001,avatarUrl:`https://avatars.githubusercontent.com/u/1182001?v=4`,login:`dkamburov`,email:null,url:`https://api.github.com/users/dkamburov`},labels:[{id:324654930,nodeId:`MDU6TGFiZWwzMjQ2NTQ5MzA=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug`,name:`:bug: bug`,color:`fc2929`,default:!1,description:`Any issue that describes a bug`},{id:531438748,nodeId:`MDU6TGFiZWw1MzE0Mzg3NDg=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review`,name:`:eyes: status: in-review`,color:`c5def5`,default:!1,description:``},{id:531441726,nodeId:`MDU6TGFiZWw1MzE0NDE3MjY=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:firecracker:%20severity:%20medium`,name:`:firecracker: severity: medium`,color:`fbca04`,default:!1,description:``},{id:625766429,nodeId:`MDU6TGFiZWw2MjU3NjY0Mjk=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general`,name:`grid: general`,color:`5319e7`,default:!1,description:``},{id:857640642,nodeId:`MDU6TGFiZWw4NTc2NDA2NDI=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%205.3.x`,name:`version: 5.3.x`,color:`77b3d6`,default:!1,description:``},{id:909237881,nodeId:`MDU6TGFiZWw5MDkyMzc4ODE=`,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20resizing`,name:`grid: resizing`,color:`2e2ef7`,default:!1,description:``}],body:`### Description \r +Resizing a column to the rightmost of the igxGrid hides all the columns that are on right of the resized column.\r +\r +**NOTES:**\r +- Performing an operation like **pinning/unpinning** fixes the issue and the columns become visible again.\r +- The issue is **not** reproduced when resizing analogically to the left.\r +\r +### Steps to reproduce \r +\r +1. Run the "Grid Column Resizing" demo app.\r +2. Scroll horizontally to the rightmost of the grid.\r +3. Resize the "Region" column to the rightmost of the grid.\r +\r +### Result \r +The columns that were next to the "Region" column on the right are now **not** visible.\r +\r +### Expected result \r +The columns that were next to the "Region" column on the right are still visible.\r +\r +\r +### Attachments \r +\r +![columnresize](https://user-images.githubusercontent.com/12784974/38988554-43bb7ee6-43dc-11e8-9225-b9769aea314a.gif)\r +\r +`,title:`Resizing a column to the rightmost of the igxGrid hides all the columns that are on right of the resized column`,number:1069,url:`https://api.github.com/repos/IgniteUI/igniteui-angular/issues/1069`,id:315833423,pullRequest:null}];var vfe=[[[`igx-avatar`],[`igx-card-media`],[``,`igxCardThumbnail`,``]],[[``,`igxCardHeaderTitle`,``],[``,`igxCardHeaderSubtitle`,``],[``,8,`igx-card-header__title`],[``,8,`igx-card-header__title--small`],[``,8,`igx-card-header__subtitle`]],`*`];var yfe=[`igx-avatar, igx-card-media, [igxCardThumbnail]`,` + [igxCardHeaderTitle], + [igxCardHeaderSubtitle], + .igx-card-header__title, + .igx-card-header__title--small, + .igx-card-header__subtitle`,`*`];var bfe=[`*`];var Sfe=0;var CV=(()=>{class i{constructor(){this.cssClass=`igx-card-header`,this.vertical=!1}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵcmp=Z({type:i,selectors:[[`igx-card-header`]],hostVars:4,hostBindings:function(t,n){t&2&&ee(`igx-card-header`,n.cssClass)(`igx-card-header--vertical`,n.vertical)},inputs:{vertical:[2,`vertical`,`vertical`,O]},features:[Mn([zr])],ngContentSelectors:yfe,decls:5,vars:0,consts:[[1,`igx-card-header__thumbnail`],[1,`igx-card-header__titles`]],template:function(t,n){t&1&&(we(vfe),Oi(0,`div`,0),ae(1),Vi(),Oi(2,`div`,1),ae(3,1),Vi(),ae(4,2))},encapsulation:2,changeDetection:1})}}return i})();var IV=(()=>{class i{constructor(){this.cssClass=`igx-card__header__title`}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵdir=L({type:i,selectors:[[``,`igxCardHeaderTitle`,``]],hostVars:2,hostBindings:function(t,n){t&2&&ee(`igx-card-header__title`,n.cssClass)},features:[Mn([zr])]})}}return i})();var NV=(()=>{class i{constructor(){this.cssClass=`igx-card-content`}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵdir=L({type:i,selectors:[[`igx-card-content`]],hostVars:2,hostBindings:function(t,n){t&2&&ee(`igx-card-content`,n.cssClass)},features:[Mn([zr])]})}}return i})();var DV=(()=>{class i{constructor(){this.id=`igx-card-${Sfe++}`,this.cssClass=`igx-card`,this.role=`group`,this.elevated=!1,this.horizontal=!1}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵcmp=Z({type:i,selectors:[[`igx-card`]],hostVars:8,hostBindings:function(t,n){t&2&&(B(`id`,n.id)(`role`,n.role),ee(`igx-card`,n.cssClass)(`igx-card--elevated`,n.elevated)(`igx-card--horizontal`,n.horizontal))},inputs:{id:`id`,role:`role`,elevated:[2,`elevated`,`elevated`,O],horizontal:[2,`horizontal`,`horizontal`,O]},ngContentSelectors:bfe,decls:1,vars:0,template:function(t,n){t&1&&(we(),ae(0))},styles:[`@layer ig.base{.igx-card-actions__end,.igx-card-actions__start{display:flex;align-items:center;gap:.5rem;color:var(--%NS%actions-text-color)}.igx-card-actions__end:empty,.igx-card-actions__start:empty{display:none}.igx-card-actions--vertical .igx-card-actions__end,.igx-card-actions--vertical .igx-card-actions__start{flex-direction:column}.igx-card-actions--vertical .igx-card-actions__end [igxButton]~[igxButton],.igx-card-actions--vertical .igx-card-actions__start [igxButton]~[igxButton]{margin-inline-start:0;margin-top:.5rem}.igx-card-actions--justify .igx-card-actions__end,.igx-card-actions--justify .igx-card-actions__start{justify-content:space-around;flex-grow:1}.igx-card-actions--justify .igx-card-actions__end:empty,.igx-card-actions--justify .igx-card-actions__start:empty{display:none}.igx-card{display:flex;flex-direction:column;overflow:hidden;border-radius:var(--%NS%border-radius);background:var(--%NS%background);transition:box-shadow .3s cubic-bezier(.25,.8,.25,1);backface-visibility:hidden;border:.0625rem solid var(--%NS%outline-color)}.igx-card:hover{box-shadow:none}.igx-card igx-avatar{--%NS%ig-size: 1}.igx-card__media{display:block;overflow:hidden;line-height:0}.igx-card__media>*{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.igx-card__media--right{width:auto;margin-inline-start:auto;order:9999}.igx-card--elevated{box-shadow:var(--%NS%resting-elevation);border:.0625rem solid var(--%NS%outline-color)}.igx-card--%NS%elevated:hover{box-shadow:var(--%NS%hover-elevation)}.igx-card--horizontal{flex-direction:row}.igx-card-header{display:flex;flex-flow:row wrap;align-items:center;width:100%;padding:1rem;color:var(--%NS%header-text-color)}.igx-card-header:empty{display:block;padding:0}.igx-card-header__thumbnail{margin-inline-end:1rem}.igx-card-header__thumbnail:empty{display:none}.igx-card-header__titles{display:flex;flex-flow:column nowrap;overflow:hidden;flex:1 1 auto;justify-content:center}.igx-card-header__titles:empty{display:none}.igx-card-header__subtitle{color:var(--%NS%subtitle-text-color)}.igx-card-header--vertical{flex-flow:column nowrap}.igx-card-header--vertical .igx-card-header__titles{text-align:center}.igx-card-header--vertical .igx-card-header__thumbnail{display:flex;justify-content:center;align-self:unset;margin-inline-end:0;margin-bottom:1rem}.igx-card-content{display:block;width:100%;padding:1rem;color:var(--%NS%content-text-color);overflow:auto}.igx-card-actions{display:flex;flex-flow:row wrap;justify-content:space-between;align-items:center;padding:.5rem 1rem}.igx-card-actions:first-child{margin-block-end:auto}.igx-card-actions:last-child{margin-block-start:auto}.igx-card-actions__start{order:0}.igx-card-actions__end{order:1;margin-inline-start:auto;gap:.5rem}.igx-card-actions__end:empty{display:none}.igx-card-actions--vertical{flex-direction:column}.igx-card-actions--%NS%vertical:is(:first-child,:last-child){margin-block:initial}[dir=rtl] .igx-card-actions--vertical{order:-1}.igx-card-actions--vertical .igx-card-actions__end{margin-top:auto;margin-inline-start:0}.igx-card-actions--reverse .igx-card-actions__start{order:1;margin-inline-start:auto}.igx-card-actions--reverse .igx-card-actions__end{order:0;margin-inline-start:0}.igx-card-actions--vertical.igx-card-actions--reverse .igx-card-actions__start{margin:auto 0 0}.igx-card-actions--vertical.igx-card-actions--reverse .igx-card-actions__end{margin:0 0 auto}}@layer ig.material{@container style(--%NS%ig-theme: material){.igx-card-header__title{font-family:var(--%NS%ig-h6-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-h6-font-size);font-weight:var(--%NS%ig-h6-font-weight);font-style:var(--%NS%ig-h6-font-style);line-height:var(--%NS%ig-h6-line-height);letter-spacing:var(--%NS%ig-h6-letter-spacing);text-transform:var(--%NS%ig-h6-text-transform);margin-top:var(--%NS%ig-h6-margin-top);margin-bottom:var(--%NS%ig-h6-margin-bottom);margin:0}.igx-card-header__title--small,.igx-card-header__subtitle{font-family:var(--%NS%ig-subtitle-2-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-subtitle-2-font-size);font-weight:var(--%NS%ig-subtitle-2-font-weight);font-style:var(--%NS%ig-subtitle-2-font-style);line-height:var(--%NS%ig-subtitle-2-line-height);letter-spacing:var(--%NS%ig-subtitle-2-letter-spacing);text-transform:var(--%NS%ig-subtitle-2-text-transform);margin-top:var(--%NS%ig-subtitle-2-margin-top);margin-bottom:var(--%NS%ig-subtitle-2-margin-bottom);margin:0}}}@layer ig.material{@container style(--%NS%ig-theme: material){.igx-card-content>*:not(igx-icon){font-family:var(--%NS%ig-body-2-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-body-2-font-size);font-weight:var(--%NS%ig-body-2-font-weight);font-style:var(--%NS%ig-body-2-font-style);line-height:var(--%NS%ig-body-2-line-height);letter-spacing:var(--%NS%ig-body-2-letter-spacing);text-transform:var(--%NS%ig-body-2-text-transform);margin-top:var(--%NS%ig-body-2-margin-top);margin-bottom:var(--%NS%ig-body-2-margin-bottom);margin:0}}}@layer ig.bootstrap{@container style(--%NS%ig-theme: bootstrap){.igx-card-header__title{font-family:var(--%NS%ig-h5-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-h5-font-size);font-weight:var(--%NS%ig-h5-font-weight);font-style:var(--%NS%ig-h5-font-style);line-height:var(--%NS%ig-h5-line-height);letter-spacing:var(--%NS%ig-h5-letter-spacing);text-transform:var(--%NS%ig-h5-text-transform);margin-top:var(--%NS%ig-h5-margin-top);margin-bottom:var(--%NS%ig-h5-margin-bottom);margin:0}.igx-card-header__title--small{font-family:var(--%NS%ig-subtitle-2-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-subtitle-2-font-size);font-weight:var(--%NS%ig-subtitle-2-font-weight);font-style:var(--%NS%ig-subtitle-2-font-style);line-height:var(--%NS%ig-subtitle-2-line-height);letter-spacing:var(--%NS%ig-subtitle-2-letter-spacing);text-transform:var(--%NS%ig-subtitle-2-text-transform);margin-top:var(--%NS%ig-subtitle-2-margin-top);margin-bottom:var(--%NS%ig-subtitle-2-margin-bottom);margin:0}.igx-card-header__subtitle{font-family:var(--%NS%ig-body-1-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-body-1-font-size);font-weight:var(--%NS%ig-body-1-font-weight);font-style:var(--%NS%ig-body-1-font-style);line-height:var(--%NS%ig-body-1-line-height);letter-spacing:var(--%NS%ig-body-1-letter-spacing);text-transform:var(--%NS%ig-body-1-text-transform);margin-top:var(--%NS%ig-body-1-margin-top);margin-bottom:var(--%NS%ig-body-1-margin-bottom);margin:0}}}@layer ig.bootstrap{@container style(--%NS%ig-theme: bootstrap){.igx-card-content{padding-block:1rem 1.5rem;padding-inline:1rem}.igx-card-content>*:not(igx-icon){font-family:var(--%NS%ig-body-1-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-body-1-font-size);font-weight:var(--%NS%ig-body-1-font-weight);font-style:var(--%NS%ig-body-1-font-style);line-height:var(--%NS%ig-body-1-line-height);letter-spacing:var(--%NS%ig-body-1-letter-spacing);text-transform:var(--%NS%ig-body-1-text-transform);margin-top:var(--%NS%ig-body-1-margin-top);margin-bottom:var(--%NS%ig-body-1-margin-bottom);margin:0}}}@layer ig.bootstrap{@container style(--%NS%ig-theme: bootstrap){.igx-card-actions{padding:1rem}}}@layer ig.fluent{@container style(--%NS%ig-theme: fluent){.igx-card-header__title{font-family:var(--%NS%ig-subtitle-1-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-subtitle-1-font-size);font-weight:var(--%NS%ig-subtitle-1-font-weight);font-style:var(--%NS%ig-subtitle-1-font-style);line-height:var(--%NS%ig-subtitle-1-line-height);letter-spacing:var(--%NS%ig-subtitle-1-letter-spacing);text-transform:var(--%NS%ig-subtitle-1-text-transform);margin-top:var(--%NS%ig-subtitle-1-margin-top);margin-bottom:var(--%NS%ig-subtitle-1-margin-bottom);margin:0}.igx-card-header__title--small{font-family:var(--%NS%ig-subtitle-2-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-subtitle-2-font-size);font-weight:var(--%NS%ig-subtitle-2-font-weight);font-style:var(--%NS%ig-subtitle-2-font-style);line-height:var(--%NS%ig-subtitle-2-line-height);letter-spacing:var(--%NS%ig-subtitle-2-letter-spacing);text-transform:var(--%NS%ig-subtitle-2-text-transform);margin-top:var(--%NS%ig-subtitle-2-margin-top);margin-bottom:var(--%NS%ig-subtitle-2-margin-bottom);margin:0}.igx-card-header__subtitle{font-family:var(--%NS%ig-body-2-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-body-2-font-size);font-weight:var(--%NS%ig-body-2-font-weight);font-style:var(--%NS%ig-body-2-font-style);line-height:var(--%NS%ig-body-2-line-height);letter-spacing:var(--%NS%ig-body-2-letter-spacing);text-transform:var(--%NS%ig-body-2-text-transform);margin-top:var(--%NS%ig-body-2-margin-top);margin-bottom:var(--%NS%ig-body-2-margin-bottom);margin:0}}}@layer ig.fluent{@container style(--%NS%ig-theme: fluent){.igx-card-content>*:not(igx-icon){font-family:var(--%NS%ig-body-2-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-body-2-font-size);font-weight:var(--%NS%ig-body-2-font-weight);font-style:var(--%NS%ig-body-2-font-style);line-height:var(--%NS%ig-body-2-line-height);letter-spacing:var(--%NS%ig-body-2-letter-spacing);text-transform:var(--%NS%ig-body-2-text-transform);margin-top:var(--%NS%ig-body-2-margin-top);margin-bottom:var(--%NS%ig-body-2-margin-bottom);margin:0}}}@layer ig.indigo{@container style(--%NS%ig-theme: indigo){.igx-card igx-avatar{--%NS%ig-size: 3}}}@layer ig.indigo{@container style(--%NS%ig-theme: indigo){.igx-card-header+.igx-card-content{padding-block-start:0}.igx-card-header__thumbnail{margin-inline-end:.5rem;margin-block:auto}.igx-card-header__titles{gap:.125rem}.igx-card-header__titles .igx-card-header__subtitle{margin-block-end:.125rem}.igx-card-header__title{font-family:var(--%NS%ig-h6-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-h6-font-size);font-weight:var(--%NS%ig-h6-font-weight);font-style:var(--%NS%ig-h6-font-style);line-height:var(--%NS%ig-h6-line-height);letter-spacing:var(--%NS%ig-h6-letter-spacing);text-transform:var(--%NS%ig-h6-text-transform);margin-top:var(--%NS%ig-h6-margin-top);margin-bottom:var(--%NS%ig-h6-margin-bottom);margin:0}.igx-card-header__title--small,.igx-card-header__subtitle{font-family:var(--%NS%ig-body-2-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-body-2-font-size);font-weight:var(--%NS%ig-body-2-font-weight);font-style:var(--%NS%ig-body-2-font-style);line-height:var(--%NS%ig-body-2-line-height);letter-spacing:var(--%NS%ig-body-2-letter-spacing);text-transform:var(--%NS%ig-body-2-text-transform);margin-top:var(--%NS%ig-body-2-margin-top);margin-bottom:var(--%NS%ig-body-2-margin-bottom);margin:0}.igx-card-header--vertical .igx-card-header__thumbnail{margin-bottom:.5rem}}}@layer ig.indigo{@container style(--%NS%ig-theme: indigo){.igx-card-content{padding:1rem}.igx-card-content+.igx-card-actions{padding-block-start:.5rem}.igx-card-content>*:not(igx-icon){font-family:var(--%NS%ig-body-2-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-body-2-font-size);font-weight:var(--%NS%ig-body-2-font-weight);font-style:var(--%NS%ig-body-2-font-style);line-height:var(--%NS%ig-body-2-line-height);letter-spacing:var(--%NS%ig-body-2-letter-spacing);text-transform:var(--%NS%ig-body-2-text-transform);margin-top:var(--%NS%ig-body-2-margin-top);margin-bottom:var(--%NS%ig-body-2-margin-bottom);margin:0}}}@layer ig.indigo{@container style(--%NS%ig-theme: indigo){.igx-card-actions{padding:1rem}.igx-card-actions [igxButton],.igx-card-actions [igxIconButton]{--%NS%ig-size: 2}}} +`],encapsulation:2,changeDetection:1})}}return i})();var TV=(()=>{class i{static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵmod=Me({type:i})}static{this.ɵinj=Ee({})}}return i})();var wfe=(i,r)=>r.id;function Cfe(i,r){if(i&1){let e=j();h(0,`igx-suffix`,11),E(`click`,function(){I(e);return N(g().taskSearchString.set(``))}),h(1,`igx-icon`),D(2,`clear`),m()()}}function Ife(i,r){if(i&1){let e=j();h(0,`igx-list-item`)(1,`div`,12)(2,`div`,13,2),E(`ghostCreate`,function(){let n=I(e).$implicit;return N(g().onActionTriggered(`drag`,n))})(`dragEnd`,function(){I(e);return N(g().onActionTriggered(`release`,{}))}),h(4,`igx-icon`,14),D(5,`drag_indicator`),m(),h(6,`div`,15)(7,`h1`,16),D(8),m(),h(9,`h2`,17),D(10),m()(),h(11,`button`,18),E(`click`,function(){let n=I(e).$implicit;return N(g().onActionTriggered(`edit`,n))}),h(12,`igx-icon`),D(13,`edit`),m()(),h(14,`button`,18),E(`click`,function(){let n=I(e),o=n.$implicit,a=n.$index;return N(g().deleteItem(o,a))}),h(15,`igx-icon`),D(16,`delete`),m()()()()()}if(i&2){let e=r.$implicit,t=g(),n=V(21);u(2),x(`ghostHost`,n.nativeElement)(`ghostClass`,`tp-app__backlog-dragged-item`),u(5),x(`title`,e.issue),u(),q(` `,e.title,` `),u(),jt(t.getPriority(e)),u(),q(` `,t.getPriority(e),` `)}}function Nfe(i,r){}function Dfe(i,r){i&1&&D(0,` No tasks found `)}var Lu=(()=>{class i{constructor(){this.data=lc([]),this.listItemAction=up(),this.tasks=D_(()=>this.data()),this.taskSearchString=gi(``),this.filterTasks=Co(()=>{let e=new zv;return e.key=`title`,e.inputValue=this.taskSearchString(),e})}onActionTriggered(e,t){this.listItemAction.emit({action:e,issue:t})}deleteItem(e,t){this.tasks.update(n=>{let o=t??n.findIndex(a=>a.id===e.id);return o<0?n:[...n.slice(0,o),...n.slice(o+1)]})}getPriority(e){let t=(e.labels??[]).filter(n=>n.name.indexOf(`severity:`)===0);return t.length?t[0].name.substring(10).toLowerCase():`low`}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵcmp=Z({type:i,selectors:[[`app-backlog`]],inputs:{data:[1,`data`]},outputs:{listItemAction:`listItemAction`},decls:22,vars:5,consts:[[`taskSearch`,``],[`outlet`,`overlay-outlet`],[`dragRef`,``],[`elevated`,``,1,`tp-app__backlog-card`],[`igxCardHeaderTitle`,``],[`type`,`search`,1,`tp-app__task-search`],[`ngDefaultControl`,``,`name`,`search`,`igxInput`,``,`placeholder`,`Search`,3,`ngModelChange`,`ngModel`],[1,`tp-app__list-scroll`],[`igxDataLoading`,``],[`igxEmptyList`,``],[`igxOverlayOutlet`,``],[3,`click`],[1,`tp-app__backlog-list-template`],[`igxDrag`,``,1,`tp-app__backlog-list-template-row`,3,`ghostCreate`,`dragEnd`,`ghostHost`,`ghostClass`],[`igxDragHandle`,``,1,`tp-app__backlog-list-button`,`tp-app__backlog-list-button--drag`],[1,`tp-app__backlog-list-template-text`],[`igxListLineTitle`,``,3,`title`],[`igxListLineSubTitle`,``],[`igxIconButton`,`flat`,`igxRipple`,``,`igxRippleCentered`,`true`,`draggable`,`false`,1,`tp-app__backlog-list-button`,`tp-app__backlog-list-button--action`,3,`click`]],template:function(t,n){if(t&1&&(h(0,`igx-card`,3)(1,`igx-card-header`)(2,`h1`,4),D(3,`Master Backlog`),m()(),R(4,`igx-divider`),h(5,`igx-card-content`)(6,`igx-input-group`,5)(7,`input`,6,0),E(`ngModelChange`,function(a){return n.taskSearchString.set(a)}),m(),He(),h(9,`igx-prefix`)(10,`igx-icon`),D(11,`search`),m()(),b(12,Cfe,3,0,`igx-suffix`),m(),h(13,`div`,7)(14,`igx-list`),_e(15,Ife,17,7,`igx-list-item`,null,wfe),z(17,`igxFilter`),P(18,Nfe,0,0,`ng-template`,8)(19,Dfe,1,0,`ng-template`,9),m()()()(),R(20,`div`,10,1)),t&2){let o=V(8);u(7),x(`ngModel`,n.taskSearchString()),Ge(),u(5),S(o.value.length>0?12:-1),u(3),xe(ki(17,2,n.tasks(),n.filterTasks()))}},dependencies:[DV,CV,IV,bu,NV,ni,cn,hn,mn,fn$1,Ut,vi,Pe,xi,Mh,kh,ys,xh,q6,Q6,Tu,Du,On,wn,aP],styles:[`.tp-app .igx-list-empty{display:block;text-align:center} .tp-app__task-search{margin:1rem!important;height:3.125rem} .tp-app__backlog-dragged-item{padding:.5rem 1rem;-webkit-box-shadow:0 4px 18px 3px rgba(0,0,0,.078),0 10px 14px 1px rgba(0,0,0,.121),0 6px 6px -3px rgba(0,0,0,.258);-moz-box-shadow:0 4px 18px 3px rgba(0,0,0,.078),0 10px 14px 1px rgba(0,0,0,.121),0 6px 6px -3px rgba(0,0,0,.258);box-shadow:0 4px 18px 3px #00000014,0 10px 14px 1px #0000001f,0 6px 6px -3px #00000042;z-index:10;max-width:250px} .tp-app__backlog-list-template-text{max-width:252px;overflow:hidden} .tp-app__backlog-list-template-text h1, .tp-app__backlog-list-template-text h2{white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .tp-app__backlog-list-template{display:flex;align-items:center;width:100%} .tp-app__backlog-list-template-row{flex:1;display:flex;align-items:center;width:100%;overflow:hidden} .tp-app .igx-list__item-thumbnail{align-self:center} .tp-app .igx-list__item-content{width:100%} .tp-app__backlog-list-button--action{display:none!important;min-width:2.25rem} .tp-app__backlog-list-button--drag{margin-right:1rem} .tp-app__backlog{min-width:100px;width:18.75rem;margin-right:1.5rem} .tp-app__backlog .igx-card-header{min-height:3.5625rem} .tp-app__backlog .igx-tabs__header-menu-item--selected, .tp-app__backlog .igx-tabs__header-menu-item{min-height:3.625rem} .tp-app__backlog-card, .tp-app__backlog .igx-card-content, .tp-app__backlog .igx-tabs>div, .tp-app__backlog .igx-tabs, .tp-app__backlog .igx-tabs__content-fluid, .tp-app__backlog .igx-tabs__group{height:100%;overflow:hidden} .tp-app__backlog .igx-tabs__content-fixed{height:100%} .tp-app__backlog .tp-app__list-scroll{height:calc(100% - 8.7rem);overflow-x:auto} .igx-list__item-base:hover .tp-app__backlog-list-button--action, .igx-list__item-base:focus .tp-app__backlog-list-button--action{display:flex!important;padding:9px} .tp-app-dark-theme .tp-app__backlog-list-button{color:#bdbdbd!important} .tp-app-dark-theme .tp-app__backlog-list-button igx-icon{color:#bdbdbd} .tp-app-dark-theme .tp-app__backlog-list-button:hover, .tp-app-dark-theme .tp-app__backlog-list-button:focus{cursor:pointer;color:#ffb79a!important} .tp-app-dark-theme .tp-app__backlog-list-button:hover igx-icon, .tp-app-dark-theme .tp-app__backlog-list-button:focus igx-icon{cursor:pointer;color:#ffb79a} .tp-app-dark-theme .tp-app__backlog-dragged-item{background:#212533;color:var(--%NS%ig-surface-500-contrast);border-radius:.5rem} .tp-app-light-theme .tp-app__backlog-list-button{color:#9e9e9e!important} .tp-app-light-theme .tp-app__backlog-list-button igx-icon{color:#9e9e9e} .tp-app-light-theme .tp-app__backlog-list-button:hover, .tp-app-light-theme .tp-app__backlog-list-button:focus{cursor:pointer;color:#e41c77!important} .tp-app-light-theme .tp-app__backlog-list-button:hover igx-icon, .tp-app-light-theme .tp-app__backlog-list-button:focus igx-icon{cursor:pointer;color:#e41c77} .tp-app-light-theme .tp-app__backlog-dragged-item{background:#f8f8f8;color:var(--%NS%ig-surface-500-contrast)}`]})}}return i})();var Bc=(()=>{class i{transform(e){if(!e)return``;if(typeof e==`string`)return e;let t=e.filter(n=>n.name.includes(`status:`));if(t.length){let n=t[0].name,o=n.indexOf(`status:`);return n.substring(o+8)}return``}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵpipe=Oe({name:`statusLabel`,type:i,pure:!0})}}return i})();var AD=(()=>{class i{transform(e){let t=e;if(typeof t.value==`string`&&t.value)return t.value;let o=(t.row?.data??e).labels;if(Array.isArray(o)){let a=o.filter(s=>s.name.indexOf(`severity:`)===0);if(a.length>0)return a[0].name.substring(10)}return``}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵpipe=Oe({name:`priorityLabel`,type:i,pure:!0})}}return i})();var EV=(()=>{class i{transform(e){return e?e+`h`:`Enter value...`}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵpipe=Oe({name:`placeholder`,type:i,pure:!0})}}return i})();var kV=(()=>{class i{transform(e,t){let n=new Za(t?.grid.locale??`en-US`),o=t?.column.pipeArgs,a=new Date(e.createdAt??Date.now());return a.setMonth(a.getMonth()+3),n.transform(a,o?.format,o?.timezone)??``}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵpipe=Oe({name:`deadline`,type:i,pure:!0})}}return i})();var MV=(()=>{class i{transform(e){let t=new Date(e.createdAt??Date.now());t.setMonth(t.getMonth()+3);let n=t.getFullYear();return`Q${Math.floor(t.getMonth()/3)+1} ${n}`}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵpipe=Oe({name:`milestone`,type:i,pure:!0})}}return i})();var RV=(()=>{class i{transform(e,t){return e.filter(o=>o.milestone===t).reduce((o,a)=>{let s=new Bc().transform(a.labels),l=s.replace(/\s/g,``).toLowerCase(),c=o.findIndex(d=>d.name===s);return c===-1?(o.push({name:s,items:1,cssClass:l}),o):(o[c].items=o[c].items+1,o)},[])}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵpipe=Oe({name:`filterTasks`,type:i,pure:!0})}}return i})();var Tfe=[`defaultTemplate`];var Efe=[`imageTemplate`];var kfe=[`initialsTemplate`];var Mfe=[`iconTemplate`];var Rfe=[`*`];function Afe(i,r){i&1&&ae(0)}function Ffe(i,r){if(i&1&&R(0,`div`,6,4),i&2)re(`background-image`,g().getSrcUrl())}function Pfe(i,r){if(i&1&&(h(0,`span`),D(1),m()),i&2){let e=g();u(),Q(e.initials.substring(0,2))}}function Ofe(i,r){if(i&1&&(h(0,`igx-icon`),D(1),m()),i&2){let e=g();u(),Q(e.icon)}}function Vfe(i,r){i&1&&J(0)}var Lfe=0;var zfe={SMALL:`small`,MEDIUM:`medium`,LARGE:`large`};var Ur={INITIALS:`initials`,IMAGE:`image`,ICON:`icon`,CUSTOM:`custom`};var FD=(()=>{class i{constructor(){this.elementRef=_(ne),this.ariaLabel=`avatar`,this.role=`img`,this.cssClass=`igx-avatar`,this.id=`igx-avatar-${Lfe++}`,this.shape=`square`}get isRounded(){return this.shape===`rounded`}get isCircle(){return this.shape===`circle`}set src(e){this._src=n4(e)}get src(){return this._src}get size(){return this._size||zfe.SMALL}set size(e){switch(e){case`small`:case`medium`:case`large`:this._size=e;break;default:this._size=`small`}}get type(){return this.src?Ur.IMAGE:this.icon?Ur.ICON:this.initials?Ur.INITIALS:Ur.CUSTOM}get _isImageType(){return this.type===Ur.IMAGE}get _isIconType(){return this.type===Ur.ICON}get _isInitialsType(){return this.type===Ur.INITIALS}get componentSize(){if(this._size)return`var(--ig-size-${this._size})`}get template(){switch(this.type){case Ur.IMAGE:return this.imageTemplate;case Ur.INITIALS:return this.initialsTemplate;case Ur.ICON:return this.iconTemplate;default:return this.defaultTemplate}}getSrcUrl(){return`url("${this.src}")`}ngOnInit(){this.roleDescription=this.getRole()}getRole(){switch(this.type){case Ur.IMAGE:return`image avatar`;case Ur.ICON:return`icon avatar`;case Ur.INITIALS:return`initials avatar`;default:return`custom avatar`}}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵcmp=Z({type:i,selectors:[[`igx-avatar`]],viewQuery:function(t,n){if(t&1&&Se(Tfe,7,te)(Efe,7,te)(kfe,7,te)(Mfe,7,te),t&2){let o;w(o=C())&&(n.defaultTemplate=o.first),w(o=C())&&(n.imageTemplate=o.first),w(o=C())&&(n.initialsTemplate=o.first),w(o=C())&&(n.iconTemplate=o.first)}},hostVars:22,hostBindings:function(t,n){t&2&&(B(`aria-label`,n.ariaLabel)(`role`,n.role)(`aria-roledescription`,n.roleDescription)(`id`,n.id),re(`color`,n.color)(`background`,n.bgColor)(`--%NS%component-size`,n.componentSize),ee(`igx-avatar`,n.cssClass)(`igx-avatar--rounded`,n.isRounded)(`igx-avatar--circle`,n.isCircle)(`igx-avatar--image`,n._isImageType)(`igx-avatar--icon`,n._isIconType)(`igx-avatar--initials`,n._isInitialsType))},inputs:{id:`id`,shape:`shape`,color:`color`,bgColor:`bgColor`,initials:`initials`,icon:`icon`,src:`src`,size:`size`},ngContentSelectors:Rfe,decls:9,vars:1,consts:[[`defaultTemplate`,``],[`imageTemplate`,``],[`initialsTemplate`,``],[`iconTemplate`,``],[`image`,``],[4,`ngTemplateOutlet`],[1,`igx-avatar__image`]],template:function(t,n){t&1&&(we(),P(0,Afe,1,0,`ng-template`,null,0,Y)(2,Ffe,2,2,`ng-template`,null,1,Y)(4,Pfe,2,1,`ng-template`,null,2,Y)(6,Ofe,2,1,`ng-template`,null,3,Y)(8,Vfe,1,0,`ng-container`,5)),t&2&&(u(8),x(`ngTemplateOutlet`,n.template))},dependencies:[Pe,st],styles:[`@layer ig.base{.igx-avatar{--%NS%is-large: clamp(0, (var(--%NS%component-size, 1) + 1) - var(--%NS%ig-size-large, 3), 1);--%NS%is-medium: min( clamp(0, (var(--%NS%component-size, 1) + 1) - var(--%NS%ig-size-medium, 2), 1), clamp(0, var(--%NS%ig-size-large, 3) - var(--%NS%component-size, 1), 1) );--%NS%is-small: clamp(0, var(--%NS%ig-size-medium) - var(--%NS%component-size, 1), 1);--%NS%component-size: var(--%NS%ig-size, var(--%NS%default-size));position:relative;display:inline-flex;justify-content:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:var(--%NS%color);background:var(--%NS%background);vertical-align:middle;outline-style:none;flex-shrink:0;width:var(--%NS%size);height:var(--%NS%size)}.igx-avatar igx-icon{--%NS%ig-size: 3;color:var(--%NS%icon-color)}.igx-avatar:after{box-shadow:none;transition:box-shadow .15s cubic-bezier(.455,.03,.515,.955)}.igx-avatar__image{width:100%;height:100%;border-radius:inherit;background-size:cover;background-repeat:no-repeat;background-position:center}.igx-avatar--circle{border-radius:calc(var(--%NS%size)/2)}.igx-avatar--rounded{border-radius:var(--%NS%border-radius)}.igx-avatar--initials{text-transform:uppercase;font-size:calc(var(--%NS%size)/2);line-height:calc(var(--%NS%size)/2)}}@layer ig.indigo{@container style(--%NS%ig-theme: indigo){.igx-avatar igx-icon{--%NS%ig-size: 1}}} +`],encapsulation:2,changeDetection:1})}}return i})();var AV=(()=>{class i{static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵmod=Me({type:i})}static{this.ɵinj=Ee({imports:[FD]})}}return i})();var Bfe=[[[`igx-navbar-action`],[``,`igxNavbarAction`,``]],[[`igx-navbar-title`],[``,`igxNavbarTitle`,``]],`*`];var Hfe=[`igx-navbar-action, [igxNavbarAction]`,`igx-navbar-title, [igxNavbarTitle]`,`*`];function Gfe(i,r){if(i&1){let e=j();h(0,`igx-icon`,5),E(`click`,function(){I(e);return N(g()._triggerAction())}),D(1),m()}if(i&2){let e=g();u(),q(` `,e.actionButtonIcon,` `)}}function Ufe(i,r){if(i&1&&(h(0,`h1`,3),D(1),m()),i&2){let e=g();B(`id`,e.titleId),u(),q(` `,e.title,` `)}}var G0=(()=>{class i{static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵdir=L({type:i,selectors:[[``,`igxNavbarAction`,``],[`igx-navbar-action`]]})}}return i})();var FV=(()=>{class i{static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵdir=L({type:i,selectors:[[``,`igxNavbarTitle`,``],[`igx-navbar-title`]],features:[Mn([zr])]})}}return i})();var PV=0;var PD=(()=>{class i{constructor(){this.id=`igx-navbar-${PV++}`,this.cssClass=`igx-navbar`,this.action=new k,this.titleId=`igx-navbar-title-${PV++}`,this.isVisible=!0}set isActionButtonVisible(e){this.isVisible=e}get isActionButtonVisible(){return this.actionIconTemplate||!this.actionButtonIcon?!1:this.isVisible}get isTitleContentVisible(){return!!this.titleContent}_triggerAction(){this.action.emit(this)}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵcmp=Z({type:i,selectors:[[`igx-navbar`]],contentQueries:function(t,n,o){if(t&1&&Xe(o,G0,5,G0)(o,FV,5,FV),t&2){let a;w(a=C())&&(n.actionIconTemplate=a.first),w(a=C())&&(n.titleContent=a.first)}},hostVars:3,hostBindings:function(t,n){t&2&&(B(`id`,n.id),ee(`igx-navbar`,n.cssClass))},inputs:{id:`id`,actionButtonIcon:`actionButtonIcon`,title:`title`,titleId:`titleId`,isActionButtonVisible:[2,`isActionButtonVisible`,`isActionButtonVisible`,O]},outputs:{action:`action`},ngContentSelectors:Hfe,decls:9,vars:3,consts:[[`role`,`navigation`],[1,`igx-navbar__left`],[1,`igx-navbar__middle`],[`data-no-typography`,``,1,`igx-navbar__title`],[1,`igx-navbar__right`],[3,`click`]],template:function(t,n){t&1&&(we(Bfe),h(0,`nav`,0)(1,`div`,1),b(2,Gfe,2,1,`igx-icon`),ae(3),m(),h(4,`div`,2),b(5,Ufe,2,2,`h1`,3),ae(6,1),m(),h(7,`div`,4),ae(8,2),m()()),t&2&&(B(`aria-labelledby`,n.titleId),u(2),S(n.isActionButtonVisible?2:-1),u(3),S(n.isTitleContentVisible?-1:5))},dependencies:[Pe],styles:[`@layer ig.base{.igx-navbar__title,igx-navbar-title,[igxNavbarTitle]{font-family:var(--%NS%ig-h6-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-h6-font-size);font-weight:var(--%NS%ig-h6-font-weight);font-style:var(--%NS%ig-h6-font-style);line-height:var(--%NS%ig-h6-line-height);letter-spacing:var(--%NS%ig-h6-letter-spacing);text-transform:var(--%NS%ig-h6-text-transform);margin-top:var(--%NS%ig-h6-margin-top);margin-bottom:var(--%NS%ig-h6-margin-bottom);display:-webkit-inline-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;margin:0;flex-grow:1;-webkit-user-select:text;-moz-user-select:text;user-select:text;display:flex;flex-direction:row}.igx-navbar__right,.igx-navbar__middle,.igx-navbar__left{display:flex;align-items:center}.igx-navbar__right>igx-icon,.igx-navbar__middle>igx-icon,.igx-navbar__left>igx-icon,.igx-navbar__right>igc-icon,.igx-navbar__middle>igc-icon,.igx-navbar__left>igc-icon{--%NS%component-size: var(--%NS%ig-size-large);cursor:pointer}.igx-navbar__right>igx-icon,.igx-navbar__middle>igx-icon,.igx-navbar__left>igx-icon,.igx-navbar__right>igc-icon,.igx-navbar__middle>igc-icon,.igx-navbar__left>igc-icon{transition:color .15s cubic-bezier(.25,.46,.45,.94);color:var(--%NS%idle-icon-color)}.igx-navbar__right>igx-icon:hover,.igx-navbar__middle>igx-icon:hover,.igx-navbar__left>igx-icon:hover,.igx-navbar__right>igc-icon:hover,.igx-navbar__middle>igc-icon:hover,.igx-navbar__left>igc-icon:hover{color:var(--%NS%hover-icon-color)}.igx-navbar__right>igx-icon,.igx-navbar__middle>igx-icon,.igx-navbar__left>igx-icon,.igx-navbar__right>igc-icon,.igx-navbar__middle>igc-icon,.igx-navbar__left>igc-icon{-webkit-user-select:none;-moz-user-select:none;user-select:none}igx-navbar-action,[igxNavbarAction]{display:flex;align-items:center}igx-navbar-title,[igxNavbarTitle]{align-items:center}.igx-navbar{display:block;width:100%}.igx-navbar nav{display:flex;align-items:center;position:relative;flex-flow:row nowrap;gap:1rem;min-height:3.5rem;padding-inline:1rem;max-height:8rem;z-index:4;overflow:hidden;background:var(--%NS%background);color:var(--%NS%text-color);box-shadow:var(--%NS%elevation);border-bottom:.0625rem solid var(--%NS%border-color)}.igx-navbar igx-avatar{--%NS%ig-size: 1}.igx-navbar [igxIconButton],.igx-navbar igc-icon-button{--%NS%ig-size: 2}.igx-navbar__left:not(:empty){margin-inline-end:1rem}.igx-navbar__left:empty{display:none}.igx-navbar__middle{flex-grow:1}.igx-navbar__right{gap:1rem}.igx-navbar__right:empty{display:none}}@layer ig.material{@container style(--%NS%ig-theme: material){.igx-navbar igx-input-group{--%NS%ig-size: 1}}}@layer ig.bootstrap{@container style(--%NS%ig-theme: bootstrap){.igx-navbar__title{font-family:var(--%NS%ig-h5-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-h5-font-size);font-weight:var(--%NS%ig-h5-font-weight);font-style:var(--%NS%ig-h5-font-style);line-height:var(--%NS%ig-h5-line-height);letter-spacing:var(--%NS%ig-h5-letter-spacing);text-transform:var(--%NS%ig-h5-text-transform);margin-top:var(--%NS%ig-h5-margin-top);margin-bottom:var(--%NS%ig-h5-margin-bottom);margin:0}.igx-navbar igx-navbar-title,.igx-navbar [igxNavbarTitle]{font-family:var(--%NS%ig-h5-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-h5-font-size);font-weight:var(--%NS%ig-h5-font-weight);font-style:var(--%NS%ig-h5-font-style);line-height:var(--%NS%ig-h5-line-height);letter-spacing:var(--%NS%ig-h5-letter-spacing);text-transform:var(--%NS%ig-h5-text-transform);margin-top:var(--%NS%ig-h5-margin-top);margin-bottom:var(--%NS%ig-h5-margin-bottom);margin:0}}}@layer ig.fluent{@container style(--%NS%ig-theme: fluent){.igx-navbar__title{font-family:var(--%NS%ig-subtitle-2-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-subtitle-2-font-size);font-weight:var(--%NS%ig-subtitle-2-font-weight);font-style:var(--%NS%ig-subtitle-2-font-style);line-height:var(--%NS%ig-subtitle-2-line-height);letter-spacing:var(--%NS%ig-subtitle-2-letter-spacing);text-transform:var(--%NS%ig-subtitle-2-text-transform);margin-top:var(--%NS%ig-subtitle-2-margin-top);margin-bottom:var(--%NS%ig-subtitle-2-margin-bottom)}.igx-navbar igx-navbar-title,.igx-navbar [igxNavbarTitle]{font-family:var(--%NS%ig-subtitle-2-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-subtitle-2-font-size);font-weight:var(--%NS%ig-subtitle-2-font-weight);font-style:var(--%NS%ig-subtitle-2-font-style);line-height:var(--%NS%ig-subtitle-2-line-height);letter-spacing:var(--%NS%ig-subtitle-2-letter-spacing);text-transform:var(--%NS%ig-subtitle-2-text-transform);margin-top:var(--%NS%ig-subtitle-2-margin-top);margin-bottom:var(--%NS%ig-subtitle-2-margin-bottom)}}}@layer ig.indigo{@container style(--%NS%ig-theme: indigo){.igx-navbar .igx-navbar__left [igxIconButton],.igx-navbar .igx-navbar__right [igxIconButton],.igx-navbar .igx-navbar__title [igxIconButton],.igx-navbar .igx-navbar__left igc-icon-button,.igx-navbar .igx-navbar__right igc-icon-button,.igx-navbar .igx-navbar__title igc-icon-button{padding:.375rem}.igx-navbar .igx-navbar__left>igx-icon,.igx-navbar .igx-navbar__right>igx-icon,.igx-navbar .igx-navbar__title>igx-icon,.igx-navbar .igx-navbar__left>igc-icon,.igx-navbar .igx-navbar__right>igc-icon,.igx-navbar .igx-navbar__title>igc-icon{--%NS%component-size: var(--%NS%ig-size-medium);--%NS%size: auto}.igx-navbar igx-avatar{--%NS%ig-size: 2}.igx-navbar igx-navbar-title,.igx-navbar [igxNavbarTitle]{font-family:var(--%NS%ig-h5-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-h5-font-size);font-weight:var(--%NS%ig-h5-font-weight);font-style:var(--%NS%ig-h5-font-style);line-height:var(--%NS%ig-h5-line-height);letter-spacing:var(--%NS%ig-h5-letter-spacing);text-transform:var(--%NS%ig-h5-text-transform);margin-top:var(--%NS%ig-h5-margin-top);margin-bottom:var(--%NS%ig-h5-margin-bottom)}.igx-navbar__title{font-family:var(--%NS%ig-h5-font-family, var(--%NS%ig-font-family));font-size:var(--%NS%ig-h5-font-size);font-weight:var(--%NS%ig-h5-font-weight);font-style:var(--%NS%ig-h5-font-style);line-height:var(--%NS%ig-h5-line-height);letter-spacing:var(--%NS%ig-h5-letter-spacing);text-transform:var(--%NS%ig-h5-text-transform);margin-top:var(--%NS%ig-h5-margin-top);margin-bottom:var(--%NS%ig-h5-margin-bottom)}.igx-navbar__right{gap:.5rem}.igx-navbar__left:not(:empty){margin-inline-end:unset}}} +`],encapsulation:2,changeDetection:1})}}return i})();var OV=(()=>{class i{static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵmod=Me({type:i})}static{this.ɵinj=Ee({imports:[PD]})}}return i})();var VV=(()=>{class i{constructor(){this.themeChanged=up(),this.createIssueClicked=up(),this.icon=`palette`}onCreateIssueClicked(){this.createIssueClicked.emit()}onToggleTheme(){this.themeChanged.emit()}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵcmp=Z({type:i,selectors:[[`app-header`]],outputs:{themeChanged:`themeChanged`,createIssueClicked:`createIssueClicked`},decls:80,vars:1,consts:[[`title`,`Task planner`],[1,`tp-app__logo-holder`],[`version`,`1.1`,`id`,`Layer_1`,`xmlns`,`http://www.w3.org/2000/svg`,0,`xmlns`,`xlink`,`http://www.w3.org/1999/xlink`,`x`,`0px`,`y`,`0px`,`viewBox`,`0 0 459 132.3`,0,`xml`,`space`,`preserve`,1,`tp-app__logo`,`tp-app__logo--dark`,2,`enable-background`,`new 0 0 459 132.3`],[`type`,`text/css`],[`d`,`M130.3,16.1h9.3V87h-9.3V16.1z`,1,`st1`,`text`],[`d`,`M154.3,96.6c4.6,3,9.9,5,15.3,5c9.2,0,15.4-5.5,15.4-14.6v-3.5l-0.2-0.1c-3.3,2.3-8,3.7-13.1,3.7 + c-13.1,0-23.6-9.9-23.6-24.1c0-13.6,9.3-25.2,25-25.2c5,0,9,1.2,12.2,2.7l8.5-1.5v47.8c0,14.1-9.4,22.8-24.2,22.8 + c-5.9,0-11.3-1.6-15.3-3.6V96.6z M172.9,79.4c4.4,0,9.1-1.6,12-3.9V48.9c-3-1.9-7.7-3.3-12.1-3.3c-9.7,0-15.9,7.4-15.9,16.8 + C156.9,72.1,163.4,79.4,172.9,79.4z`,1,`st1`,`text`],[`d`,`M202.4,38.9h8.8v6.1l0.2,0.1c4.2-4.2,10.1-7.2,16.8-7.2c5.3,0,9.8,1.9,12.8,5.3c2.6,3,4,6.8,4,14.2V87h-8.8 + V58.9c0-5-0.7-7.9-2.3-9.8c-2-2.3-5.1-3.1-7.7-3.1c-5.5,0-11.6,3.4-15.1,8v33h-8.8V38.9z`,1,`st1`,`text`],[`d`,`M258.3,16.1c3.4,0,6.2,2.7,6.2,6.2s-2.7,6.2-6.2,6.2c-3.4,0-6.2-2.7-6.2-6.2S254.9,16.1,258.3,16.1z + M253.9,38.9h8.8V87h-8.8V38.9z`,1,`st1`,`text`],[`d`,`M279.9,70.3V46.8H271v-7.9h8.9V25.7l8.8-1.5v14.6h14.5v7.9h-14.5v21.8c0,6,0.9,11.5,7.2,11.5 + c2.5,0,5.4-0.9,7.2-2.1v8.3c-2,1-5.4,1.8-8.7,1.8c-3.5,0-7.8-0.9-11-4.5C281.2,80.9,279.9,77,279.9,70.3z`,1,`st1`,`text`],[`d`,`M319.8,65.5c1.3,9.5,8.3,14.7,17.8,14.7c6.7,0,12.2-2.6,16.6-6v9.4c-4.3,2.7-11,4.5-17.2,4.5 + c-14.9,0-26-10-26-25.2c0-15.2,11.1-25.2,24-25.2c11.7,0,21.9,8.2,21.9,23.3c0,1.5-0.1,3.2-0.3,4.4H319.8z M320,58.5h28.4 + c-0.8-9.6-7.8-12.8-13.6-12.8C328.5,45.7,321.6,49.6,320,58.5z`,1,`st1`,`text`],[`d`,`M378,53.6V16.1h9.3v36.5c0,8.7,0.6,14.2,2.7,18.3c2.4,4.6,7.5,8.5,16.8,8.5c8.6,0,13.9-3.3,16.6-8.5 + c2.3-4.2,2.6-9.9,2.6-17.9V16.1h9v36.4c0,10.3-0.6,18.2-4.7,24.5c-4.5,6.9-13,11.1-24,11.1c-11.1,0-19.4-4.3-23.8-11.1 + C378.6,70.7,378,62.4,378,53.6z`,1,`st1`,`text`],[`d`,`M443.7,16.1h9.3V87h-9.3V16.1z`,1,`st1`,`text`],[1,`tp-app__logo-graphic`],[`cx`,`56.9`,`cy`,`61.5`,`r`,`52.6`,1,`st10`],[`d`,`M58.8,3.6C58,3.2,57.2,3,56.4,3.2c-2.1,0.5-4.6,4.2-6,5.8c-1.9,2.2-3.5,4.6-4.9,7.1 + c-7.1,12.6-6.8,27.5-3.8,41.3c1.9,8.9,4.9,17.5,8.2,25.8l14,0.1c0.6,0,2.8-7.2,3.1-8c0.9-2.6,1.8-5.2,2.6-7.8 + c1.4-4.6,2.6-9.3,3.5-14c1.4-7.4,1.9-15.1,0.7-22.6c-0.9-5.8-2.9-11.4-6-16.5C66.3,12,62.6,5.3,58.8,3.6z M57,41.9 + c-4.4,0-7.9-3.6-7.9-8c0-4.4,3.6-7.9,8-7.9c4.4,0,7.9,3.6,7.9,8C65,38.4,61.4,41.9,57,41.9z`,1,`st1`],[`d`,`M67.5,84.4C67.5,84.4,67.5,84.4,67.5,84.4c2.6-6.1,4.6-11.9,6.1-17.3c2.2,1.3,5.3,7.5,6.8,11.3 + c0.6,1.6,0.8,4.3,0.6,6c-0.5,3.5-1.7,9.7-4.9,14.1c-0.3,0.4-1,0.2-1-0.3c0.1-1.4,0.1-2.9,0-4.1c-0.1-2.3-1.2-4.5-2.9-6.1 + C70.6,86.4,68.7,84.9,67.5,84.4z`,1,`st1`],[`d`,`M38.7,93.8c-0.1,1.3-0.1,2.7,0,4.1c0,0.5-0.7,0.8-1,0.3c-3.2-4.4-4.4-10.6-4.8-14.1c-0.2-1.7,0-4.4,0.6-5.9 + c1.5-3.7,4.6-9.9,6.9-11.2c1.4,5.4,3.4,11.2,5.9,17.3c0,0,0,0,0,0c-1.3,0.5-3.2,2-4.7,3.4C39.9,89.3,38.8,91.5,38.7,93.8z`,1,`st2`],[`d`,`M55,3.8c0,0-21.5,23,1,79.5h-6.1C49.9,83.3,22,30,55,3.8z`,1,`st2`],[`points`,`57.8,104.2 57.8,104.2 57.8,104.2 `],[`d`,`M44.2,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4 + c0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3 + c-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1 + c0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1 + C43,110.1,43.7,110.9,44.2,111.8z`,1,`st3`],[`id`,`SVGID_27_`,`d`,`M44.2,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4 + c0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3 + c-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1 + c0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1 + C43,110.1,43.7,110.9,44.2,111.8z`],[`id`,`SVGID_2_`],[0,`xlink`,`href`,`#SVGID_27_`,2,`overflow`,`visible`],[`d`,`M52,111.6c0,0,15.5-11.3,6-25.2L77,87.5l-0.2,44.8l-26.5-0.1C50.3,132.2,44.1,115.7,52,111.6z`,1,`st4`],[`id`,`SVGID_29_`,`d`,`M44.2,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4 + c0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3 + c-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1 + c0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1 + C43,110.1,43.7,110.9,44.2,111.8z`],[`id`,`SVGID_4_`],[0,`xlink`,`href`,`#SVGID_29_`,2,`overflow`,`visible`],[`version`,`1.1`,`id`,`Layer_1`,`xmlns`,`http://www.w3.org/2000/svg`,0,`xmlns`,`xlink`,`http://www.w3.org/1999/xlink`,`x`,`0px`,`y`,`0px`,`viewBox`,`0 0 459 132.3`,0,`xml`,`space`,`preserve`,1,`tp-app__logo`,`tp-app__logo--light`,2,`enable-background`,`new 0 0 459 132.3`],[`d`,`M131.1,16.1h9.3V87h-9.3V16.1z`,1,`st0`],[`d`,`M155.1,96.6c4.6,3,9.9,5,15.3,5c9.2,0,15.4-5.5,15.4-14.6v-3.5l-0.2-0.1c-3.3,2.3-8,3.7-13.1,3.7 + c-13.1,0-23.6-9.9-23.6-24.1c0-13.6,9.3-25.2,25-25.2c5,0,9,1.2,12.2,2.7l8.5-1.5v47.8c0,14.1-9.4,22.8-24.2,22.8 + c-5.9,0-11.3-1.6-15.3-3.6V96.6z M173.7,79.4c4.4,0,9.1-1.6,12-3.9V48.9c-3-1.9-7.7-3.3-12.1-3.3c-9.7,0-15.9,7.4-15.9,16.8 + C157.8,72.1,164.2,79.4,173.7,79.4z`,1,`st0`],[`d`,`M203.3,38.9h8.8v6.1l0.2,0.1c4.2-4.2,10.1-7.2,16.8-7.2c5.3,0,9.8,1.9,12.8,5.3c2.6,3,4,6.8,4,14.2V87h-8.8 + V58.9c0-5-0.7-7.9-2.3-9.8c-2-2.3-5.1-3.1-7.7-3.1c-5.5,0-11.6,3.4-15.1,8v33h-8.8V38.9z`,1,`st0`],[`d`,`M259.1,16.1c3.4,0,6.2,2.7,6.2,6.2s-2.7,6.2-6.2,6.2c-3.4,0-6.2-2.7-6.2-6.2S255.7,16.1,259.1,16.1z + M254.7,38.9h8.8V87h-8.8V38.9z`,1,`st0`],[`d`,`M280.8,70.3V46.8h-8.9v-7.9h8.9V25.7l8.8-1.5v14.6h14.5v7.9h-14.5v21.8c0,6,0.9,11.5,7.2,11.5 + c2.5,0,5.4-0.9,7.2-2.1v8.3c-2,1-5.4,1.8-8.7,1.8c-3.5,0-7.8-0.9-11-4.5C282,80.9,280.8,77,280.8,70.3z`,1,`st0`],[`d`,`M320.7,65.5c1.3,9.5,8.3,14.7,17.8,14.7c6.7,0,12.2-2.6,16.6-6v9.4c-4.3,2.7-11,4.5-17.2,4.5 + c-14.9,0-26-10-26-25.2c0-15.2,11.1-25.2,24-25.2c11.7,0,21.9,8.2,21.9,23.3c0,1.5-0.1,3.2-0.3,4.4H320.7z M320.9,58.5h28.4 + c-0.8-9.6-7.8-12.8-13.6-12.8C329.3,45.7,322.5,49.6,320.9,58.5z`,1,`st0`],[`d`,`M378.9,53.6V16.1h9.3v36.5c0,8.7,0.6,14.2,2.7,18.3c2.4,4.6,7.5,8.5,16.8,8.5c8.6,0,13.9-3.3,16.6-8.5 + c2.3-4.2,2.6-9.9,2.6-17.9V16.1h9v36.4c0,10.3-0.6,18.2-4.7,24.5c-4.5,6.9-13,11.1-24,11.1c-11.1,0-19.4-4.3-23.8-11.1 + C379.5,70.7,378.9,62.4,378.9,53.6z`,1,`st0`],[`d`,`M444.6,16.1h9.3V87h-9.3V16.1z`,1,`st0`],[`cx`,`57.8`,`cy`,`61.5`,`r`,`52.6`,1,`st0`],[`d`,`M59.7,3.6C58.9,3.2,58,3,57.2,3.2c-2.1,0.5-4.6,4.2-6,5.8c-1.9,2.2-3.5,4.6-4.9,7.1 + c-7.1,12.6-6.8,27.5-3.8,41.3c1.9,8.9,4.9,17.5,8.2,25.8l14,0.1c0.6,0,2.8-7.2,3.1-8c0.9-2.6,1.8-5.2,2.6-7.8 + c1.4-4.6,2.6-9.3,3.5-14c1.4-7.4,1.9-15.1,0.7-22.6c-0.9-5.8-2.9-11.4-6-16.5C67.1,12,63.4,5.3,59.7,3.6z M57.9,41.9 + c-4.4,0-7.9-3.6-7.9-8c0-4.4,3.6-7.9,8-7.9c4.4,0,7.9,3.6,7.9,8C65.9,38.4,62.3,41.9,57.9,41.9z`,1,`st1`],[`d`,`M68.3,84.4C68.3,84.4,68.3,84.4,68.3,84.4c2.6-6.1,4.6-11.9,6.1-17.3c2.2,1.3,5.3,7.5,6.8,11.3 + c0.6,1.6,0.8,4.3,0.6,6c-0.5,3.5-1.7,9.7-4.9,14.1c-0.3,0.4-1,0.2-1-0.3c0.1-1.4,0.1-2.9,0-4.1c-0.1-2.3-1.2-4.5-2.9-6.1 + C71.5,86.4,69.6,84.9,68.3,84.4z`,1,`st1`],[`d`,`M39.5,93.8c-0.1,1.3-0.1,2.7,0,4.1c0,0.5-0.7,0.8-1,0.3c-3.2-4.4-4.4-10.6-4.8-14.1c-0.2-1.7,0-4.4,0.6-5.9 + c1.5-3.7,4.6-9.9,6.9-11.2c1.4,5.4,3.4,11.2,5.9,17.3c0,0,0,0,0,0c-1.3,0.5-3.2,2-4.7,3.4C40.8,89.3,39.7,91.5,39.5,93.8z`,1,`st2`],[`d`,`M55.9,3.8c0,0-21.5,23,1,79.5h-6.1C50.8,83.3,22.9,30,55.9,3.8z`,1,`st2`],[`points`,`58.6,104.2 58.6,104.2 58.6,104.2 `],[`d`,`M45.1,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4 + c0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3 + c-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1 + c0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1 + C43.9,110.1,44.6,110.9,45.1,111.8z`,1,`st3`],[`id`,`SVGID_15_`,`d`,`M45.1,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4 + c0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3 + c-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1 + c0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1 + C43.9,110.1,44.6,110.9,45.1,111.8z`],[0,`xlink`,`href`,`#SVGID_15_`,2,`overflow`,`visible`],[`d`,`M52.9,111.6c0,0,15.5-11.3,6-25.2l18.9,1.1l-0.2,44.8l-26.5-0.1C51.1,132.2,44.9,115.7,52.9,111.6z`,1,`st4`],[`id`,`SVGID_17_`,`d`,`M45.1,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4 + c0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3 + c-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1 + c0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1 + C43.9,110.1,44.6,110.9,45.1,111.8z`],[0,`xlink`,`href`,`#SVGID_17_`,2,`overflow`,`visible`],[`igxButton`,`contained`,`igxRipple`,``,`igxRippleCentered`,`true`,3,`click`],[`igxIconButton`,`flat`,`aria-label`,`Toggle color theme`,1,`tp-app__theme-toggle`,3,`click`]],template:function(t,n){t&1&&(h(0,`igx-navbar`,0)(1,`igx-navbar-action`)(2,`div`,1),xo(),h(3,`svg`,2)(4,`style`,3),D(5,` .st0{fill:#27265F;} .st1{fill:#FFFFFF;} .st2{fill:#0099FF;} .st3{fill:#F49021;} .st4{clip-path:url(#SVGID_2_);fill:#F05A2B;} .st5{fill:#6E6F71;} .st6{clip-path:url(#SVGID_6_);fill:#6E6F71;} .st7{clip-path:url(#SVGID_6_);fill:#0099FF;} .st8{clip-path:url(#SVGID_6_);fill:#FFFFFF;} .st9{clip-path:url(#SVGID_8_);fill:#F05A2B;} .st10{opacity:0.22;fill:#FFFFFF;} .st11{clip-path:url(#SVGID_12_);fill:#F05A2B;} .st12{clip-path:url(#SVGID_16_);fill:#F05A2B;} .st13{clip-path:url(#SVGID_20_);fill:#F05A2B;} .st14{clip-path:url(#SVGID_24_);fill:#F05A2B;} .st15{clip-path:url(#SVGID_28_);fill:#F05A2B;} .st16{clip-path:url(#SVGID_32_);fill:#F05A2B;} .st17{fill:#CCCBCB;} .st18{clip-path:url(#SVGID_36_);fill:#CCCBCB;} .st19{clip-path:url(#SVGID_36_);fill:#0099FF;} .st20{clip-path:url(#SVGID_36_);fill:#FFFFFF;} +`),m(),h(6,`g`)(7,`g`)(8,`g`),R(9,`path`,4)(10,`path`,5)(11,`path`,6)(12,`path`,7)(13,`path`,8)(14,`path`,9)(15,`path`,10)(16,`path`,11),m()(),h(17,`g`,12),R(18,`circle`,13),h(19,`g`)(20,`g`),R(21,`path`,14)(22,`path`,15)(23,`path`,16)(24,`path`,17),m(),h(25,`g`),R(26,`polygon`,18)(27,`path`,19),h(28,`g`)(29,`defs`),R(30,`path`,20),m(),h(31,`clipPath`,21),R(32,`use`,22),m(),R(33,`path`,23),m(),h(34,`g`)(35,`defs`),R(36,`path`,24),m(),h(37,`clipPath`,25),R(38,`use`,26),m()()()()()()(),h(39,`svg`,27)(40,`style`,3),D(41,` .st0{fill:#222;} .st1{fill:#FFFFFF;} .st2{fill:#0099FF;} .st3{fill:#F49021;} .st4{clip-path:url(#SVGID_2_);fill:#F05A2B;} .st5{fill:#6E6F71;} .st6{clip-path:url(#SVGID_6_);fill:#6E6F71;} .st7{clip-path:url(#SVGID_6_);fill:#0099FF;} .st8{clip-path:url(#SVGID_6_);fill:#FFFFFF;} .st9{clip-path:url(#SVGID_8_);fill:#F05A2B;} .st10{opacity:0.22;fill:#FFFFFF;} .st11{clip-path:url(#SVGID_12_);fill:#F05A2B;} .st12{clip-path:url(#SVGID_16_);fill:#F05A2B;} .st13{clip-path:url(#SVGID_20_);fill:#F05A2B;} .st14{clip-path:url(#SVGID_24_);fill:#F05A2B;} .st15{clip-path:url(#SVGID_28_);fill:#F05A2B;} .st16{clip-path:url(#SVGID_32_);fill:#F05A2B;} .st17{fill:#CCCBCB;} .st18{clip-path:url(#SVGID_36_);fill:#CCCBCB;} .st19{clip-path:url(#SVGID_36_);fill:#0099FF;} .st20{clip-path:url(#SVGID_36_);fill:#FFFFFF;} +`),m(),h(42,`g`)(43,`g`)(44,`g`),R(45,`path`,28)(46,`path`,29)(47,`path`,30)(48,`path`,31)(49,`path`,32)(50,`path`,33)(51,`path`,34)(52,`path`,35),m()(),h(53,`g`,12),R(54,`circle`,36),h(55,`g`)(56,`g`),R(57,`path`,37)(58,`path`,38)(59,`path`,39)(60,`path`,40),m(),h(61,`g`),R(62,`polygon`,41)(63,`path`,42),h(64,`g`)(65,`defs`),R(66,`path`,43),m(),h(67,`clipPath`,21),R(68,`use`,44),m(),R(69,`path`,45),m(),h(70,`g`)(71,`defs`),R(72,`path`,46),m(),h(73,`clipPath`,25),R(74,`use`,47),m()()()()()()()()(),Df(),h(75,`button`,48),E(`click`,function(){return n.onCreateIssueClicked()}),D(76,`CREATE ISSUE`),m(),h(77,`button`,49),E(`click`,function(){return n.onToggleTheme()}),h(78,`igx-icon`),D(79),m()()()),t&2&&(u(79),Q(n.icon))},dependencies:[PD,G0,Dt,Pe,wn],styles:[`.tp-app__logo-holder{position:relative;height:30px;width:100px;margin-top:5px} .tp-app__logo{position:absolute;top:0;left:0;height:30px;width:100px;transition:opacity .24s ease-in-out;opacity:1} .tp-app-light-theme .tp-app__logo--dark{opacity:0} .tp-app-dark-theme .tp-app__logo--light{opacity:0}`]})}}return i})();var jfe=[`tasksGrid`];var Wfe=[`addTaskDialog`];var $fe=[`editTaskDialog`];var qfe=[`transactionsDialog`];var Qfe=[`transactionsGrid`];var Kfe=[`batchEditingGrid`];var Yfe=[`batchEditDialog`];function Zfe(i,r){if(i&1&&(h(0,`igx-drop-down-item`,23),D(1),m()),i&2){let e=r.$implicit,t=r.$index;x(`selected`,g().isEditModeSelected(t)),u(),q(` `,e,` `)}}function Xfe(i,r){if(i&1){let e=j();h(0,`div`,61)(1,`div`,62)(2,`div`,63)(3,`div`,64)(4,`span`,65),D(5,`Task Comments`),m(),h(6,`igx-input-group`,66)(7,`textarea`,67),Je(`ngModelChange`,function(n){let o=I(e).$implicit;return Ye(o.body,n)||(o.body=n),N(n)}),m(),He(),m()()(),h(8,`div`,63)(9,`div`,64)(10,`span`,68),D(11,`Acceptance criteria`),m(),h(12,`igx-checkbox`,69),D(13,`Includes API & Docs`),m(),h(14,`igx-checkbox`,69),D(15,`Includes unit tests`),m(),h(16,`igx-checkbox`,69),D(17,`All checks passed`),m()()()()()}if(i&2){let e=r.$implicit,t=g();u(6),x(`theme`,t.inputTheme()),u(),Ke(`ngModel`,e.body),Ge()}}function Jfe(i,r){if(i&1&&(h(0,`div`,71),R(1,`igx-badge`,35),m()),i&2){let e=r.$implicit;u(),jt(e.cssClass),x(`value`,e.name+` `+e.items)}}function e_e(i,r){if(i&1&&(h(0,`div`,70)(1,`span`),D(2),m(),_e(3,Jfe,2,3,`div`,71,At),z(5,`filterTasks`),m()),i&2){let e=r.$implicit,t=g();u(2),Q(e.value),u(),xe(ki(5,1,t.tasks(),e.value))}}function t_e(i,r){if(i&1&&(D(0),z(1,`statusLabel`)),i&2){let e=r.$implicit;q(` `,yt(1,1,e),` `)}}function i_e(i,r){i&1&&P(0,t_e,2,3,`ng-template`,54)}function n_e(i,r){if(i&1&&(h(0,`igx-select-item`,35),D(1),m()),i&2){let e=r.$implicit;x(`value`,e.value),u(),Q(e.value)}}function r_e(i,r){if(i&1){let e=j();h(0,`igx-select`,74),z(1,`statusLabel`),Je(`ngModelChange`,function(n){let o=I(e).cell;return Ye(o.editValue,n)||(o.editValue=n),N(n)}),_e(2,n_e,2,2,`igx-select-item`,35,At),m(),He()}if(i&2){let e=r.cell,t=r.$implicit,n=g(3);x(`placeholder`,yt(1,3,t)),Ke(`ngModel`,e.editValue),x(`overlaySettings`,n.overlaySettings),Ge(),u(2),xe(n.statuses)}}function o_e(i,r){i&1&&P(0,r_e,4,5,`ng-template`,72)}function a_e(i,r){if(i&1&&(h(0,`div`,75),R(1,`igx-avatar`,76),h(2,`span`)(3,`span`,77),D(4),m()()()),i&2){let e=r.cell,t=g(3);u(),x(`src`,t.setAvatarUrl(e.row.data.assignee)),u(3),Q(t.getValue(e.row.data.assignee))}}function s_e(i,r){i&1&&P(0,a_e,5,2,`ng-template`,54)}function l_e(i,r){if(i&1&&(h(0,`igx-select-item`,35)(1,`div`,79),R(2,`igx-avatar`,76),h(3,`span`)(4,`span`,77),D(5),m()()()()),i&2){let e=r.$implicit;x(`value`,e.login),u(2),x(`src`,e.avatarUrl),u(3),Q(e.login)}}function c_e(i,r){if(i&1){let e=j();h(0,`igx-select`,78),Je(`ngModelChange`,function(n){let o=I(e).cell;return Ye(o.editValue,n)||(o.editValue=n),N(n)}),_e(1,l_e,6,3,`igx-select-item`,35,At),m(),He()}if(i&2){let e=r.cell,t=r.$implicit,n=g(3);x(`placeholder`,t),Ke(`ngModel`,e.editValue),x(`overlaySettings`,n.overlaySettings),Ge(),u(),xe(n.teamMembers())}}function d_e(i,r){i&1&&P(0,c_e,3,3,`ng-template`,72)}function u_e(i,r){if(i&1&&(D(0),z(1,`deadline`)),i&2){let e=r.cell;q(` `,ki(1,1,e.row.data,e),` `)}}function g_e(i,r){i&1&&P(0,u_e,2,4,`ng-template`,54)}function p_e(i,r){if(i&1&&R(0,`igx-linear-bar`,80),i&2){let e=r.cell,t=g(3);x(`max`,100)(`value`,t.calcProgress(e.row.data))(`animate`,!1)}}function h_e(i,r){i&1&&P(0,p_e,1,3,`ng-template`,54)}function m_e(i,r){if(i&1&&(D(0),z(1,`priorityLabel`)),i&2){let e=r.cell;q(` `,yt(1,1,e),` `)}}function f_e(i,r){i&1&&P(0,m_e,2,3,`ng-template`,54)}function __e(i,r){if(i&1&&(h(0,`igx-select-item`,35),D(1),m()),i&2){let e=r.$implicit;x(`value`,e.value),u(),Q(e.value)}}function x_e(i,r){if(i&1){let e=j();h(0,`igx-select`,74),z(1,`priorityLabel`),Je(`ngModelChange`,function(n){let o=I(e).cell;return Ye(o.editValue,n)||(o.editValue=n),N(n)}),_e(2,__e,2,2,`igx-select-item`,35,At),m(),He()}if(i&2){let e=r.cell,t=g(3);x(`placeholder`,yt(1,3,e)),Ke(`ngModel`,e.editValue),x(`overlaySettings`,t.overlaySettings),Ge(),u(2),xe(t.priority)}}function v_e(i,r){i&1&&P(0,x_e,4,5,`ng-template`,72)}function y_e(i,r){if(i&1&&(h(0,`div`,81)(1,`span`)(2,`strong`),D(3),m(),h(4,`span`),D(5),m()(),h(6,`span`)(7,`strong`),D(8),m(),h(9,`span`),D(10),z(11,`date`),m()()()),i&2){let e=r.$implicit;u(3),Q(e[0].label),u(2),Q(e[0].summaryResult),u(3),Q(e[1].label),u(2),Q(ki(11,4,e[1].summaryResult,`mediumDate`))}}function b_e(i,r){i&1&&P(0,y_e,12,7,`ng-template`,73)}function S_e(i,r){if(i&1&&(h(0,`div`,81)(1,`span`)(2,`strong`),D(3),m(),h(4,`span`),D(5),m()(),h(6,`span`)(7,`strong`),D(8),m(),h(9,`span`),D(10),m()(),h(11,`span`)(12,`strong`),D(13),m(),h(14,`span`),D(15),m()()()),i&2){let e=r.$implicit;u(3),Q(e[0].label),u(2),Q(e[0].summaryResult),u(3),Q(e[1].label),u(2),Q(e[1].summaryResult),u(3),Q(e[2].label),u(2),Q(e[2].summaryResult)}}function w_e(i,r){i&1&&P(0,S_e,16,6,`ng-template`,73)}function C_e(i,r){if(i&1&&(D(0),z(1,`placeholder`)),i&2){let e=r.$implicit;q(` `,yt(1,1,e),` `)}}function I_e(i,r){i&1&&P(0,C_e,2,3,`ng-template`,54)}function N_e(i,r){if(i&1&&(h(0,`span`,82),D(1),z(2,`placeholder`),m()),i&2){let e=g().$implicit;u(),q(` `,yt(2,1,e),` `)}}function D_e(i,r){if(i&1&&(D(0),z(1,`placeholder`)),i&2){let e=g().$implicit;q(` `,yt(1,1,e),` `)}}function T_e(i,r){if(i&1&&(b(0,N_e,3,3,`span`,82),b(1,D_e,2,3)),i&2){let e=r.$implicit;S(e?-1:0),u(),S(e?1:-1)}}function E_e(i,r){i&1&&P(0,T_e,2,2,`ng-template`,54)}function k_e(i,r){if(i&1&&(h(0,`span`,82),D(1),z(2,`placeholder`),m()),i&2){let e=g().$implicit;u(),q(` `,yt(2,1,e),` `)}}function M_e(i,r){if(i&1&&(D(0),z(1,`placeholder`)),i&2){let e=g().$implicit;q(` `,yt(1,1,e),` `)}}function R_e(i,r){if(i&1&&(b(0,k_e,3,3,`span`,82),b(1,M_e,2,3)),i&2){let e=r.$implicit;S(e?-1:0),u(),S(e?1:-1)}}function A_e(i,r){i&1&&P(0,R_e,2,2,`ng-template`,54)}function F_e(i,r){if(i&1&&(h(0,`span`,82),D(1),z(2,`placeholder`),m()),i&2){let e=g().$implicit;u(),q(` `,yt(2,1,e),` `)}}function P_e(i,r){if(i&1&&D(0),i&2){let e=g().$implicit;q(` `,e,` `)}}function O_e(i,r){if(i&1&&(b(0,F_e,3,3,`span`,82),b(1,P_e,1,1)),i&2){let e=r.$implicit;S(e?-1:0),u(),S(e?1:-1)}}function V_e(i,r){i&1&&P(0,O_e,2,2,`ng-template`,54)}function L_e(i,r){if(i&1&&(h(0,`igx-column`,27),b(1,i_e,1,0,null,54),b(2,o_e,1,0,null,72),b(3,s_e,1,0,null,54),b(4,d_e,1,0,null,72),b(5,g_e,1,0,null,54),b(6,h_e,1,0,null,54),b(7,f_e,1,0,null,54),b(8,v_e,1,0,null,72),b(9,b_e,1,0,null,73),b(10,w_e,1,0,null,73),b(11,I_e,1,0,null,54),b(12,E_e,1,0,null,54),b(13,A_e,1,0,null,54),b(14,V_e,1,0,null,54),m()),i&2){let e,t,n,o=r.$implicit,a=g();x(`width`,o.width)(`sortable`,o.sortable)(`required`,o.required??!1)(`resizable`,o.resizable)(`minlength`,o.minlength??null)(`editable`,(o.editable??!1)&&a.isEditingEnabled)(`hasSummary`,o.hasSummary)(`filterable`,o.filterable)(`formatter`,o.formatter)(`groupable`,o.groupable)(`sortStrategy`,o.sortStrategy??a.defaultSort)(`cellClasses`,o.cellClasses)(`field`,o.field)(`header`,o.header)(`dataType`,o.dataType)(`pinned`,o.pinned)(`hidden`,o.hidden)(`hasSummary`,o.hasSummary)(`summaries`,o.summaries),u(),S(o.field===`labels`?1:-1),u(),S(o.field===`labels`?2:-1),u(),S(o.field===`assignee.login`?3:-1),u(),S(o.field===`assignee.login`?4:-1),u(),S((e=o.field===`deadline`)?5:-1,e),u(),S(o.field===`progress`?6:-1),u(),S(o.field===`priority`?7:-1),u(),S(o.field===`priority`?8:-1),u(),S((t=o.field===`createdAt`)?9:-1,t),u(),S((n=o.field===`labels`)?10:-1,n),u(),S(o.field===`deadline`?11:-1),u(),S(o.field===`estimation`?12:-1),u(),S(o.field===`hours_spent`?13:-1),u(),S(o.field===`progress`?14:-1)}}function z_e(i,r){i&1&&(h(0,`igx-icon`),D(1,`unfold_more_double`),m())}function B_e(i,r){i&1&&(h(0,`igx-icon`),D(1,`keyboard_double_arrow_up`),m())}function H_e(i,r){i&1&&(h(0,`igx-icon`),D(1,`keyboard_double_arrow_down`),m())}function G_e(i,r){if(i&1&&(h(0,`igx-select-item`,35)(1,`div`,79),R(2,`igx-avatar`,76),h(3,`span`)(4,`span`,77),D(5),m()()()()),i&2){let e=r.$implicit;x(`value`,e.login),u(2),x(`src`,e.avatarUrl),u(3),Q(e.login)}}function U_e(i,r){if(i&1&&(h(0,`igx-select-item`,35),D(1),m()),i&2){let e=r.$implicit;x(`value`,e.value),u(),Q(e.value)}}function j_e(i,r){if(i&1&&(h(0,`igx-select-item`,35)(1,`div`,79),R(2,`igx-avatar`,76),h(3,`span`)(4,`span`,77),D(5),m()()()()),i&2){let e=r.$implicit;x(`value`,e),u(2),x(`src`,e.avatarUrl),u(3),Q(e.login)}}function W_e(i,r){if(i&1&&(h(0,`igx-select-item`,35),D(1),m()),i&2){let e=r.$implicit;x(`value`,e.value),u(),Q(e.value)}}function $_e(i,r){if(i&1&&(h(0,`span`),D(1),m()),i&2){let e=r.$implicit,t=g();jt(t.classFromType(e)),u(),Q(t.typeFormatter(e))}}function q_e(i,r){if(i&1&&(h(0,`span`,83),D(1),m()),i&2){let e=r.$implicit,t=g();u(),Q(t.stateFormatter(e))}}function Q_e(i,r){if(i&1&&(D(0),z(1,`statusLabel`)),i&2){let e=r.$implicit;q(` `,yt(1,1,e),` `)}}function K_e(i,r){i&1&&P(0,Q_e,2,3,`ng-template`,54)}function Y_e(i,r){if(i&1&&(h(0,`igx-select-item`,35),D(1),m()),i&2){let e=r.$implicit;x(`value`,e.value),u(),Q(e.value)}}function Z_e(i,r){if(i&1){let e=j();h(0,`igx-select`,78),z(1,`statusLabel`),Je(`ngModelChange`,function(n){let o=I(e).cell;return Ye(o.editValue,n)||(o.editValue=n),N(n)}),_e(2,Y_e,2,2,`igx-select-item`,35,At),m(),He()}if(i&2){let e=r.cell,t=r.$implicit,n=g(3);x(`placeholder`,yt(1,3,t)),Ke(`ngModel`,e.editValue),x(`overlaySettings`,n.overlaySettings),Ge(),u(2),xe(n.statuses)}}function X_e(i,r){i&1&&P(0,Z_e,4,5,`ng-template`,72)}function J_e(i,r){if(i&1&&(h(0,`div`,75),R(1,`igx-avatar`,76),h(2,`span`)(3,`span`,77),D(4),m()()()),i&2){let e=r.cell,t=r.$implicit;u(),x(`src`,e.value.avatarUrl),u(3),Q(t.login)}}function exe(i,r){i&1&&P(0,J_e,5,2,`ng-template`,54)}function txe(i,r){if(i&1&&(h(0,`igx-select-item`,35)(1,`div`,79),R(2,`igx-avatar`,76),h(3,`span`)(4,`span`,77),D(5),m()()()()),i&2){let e=r.$implicit;x(`value`,e.login),u(2),x(`src`,e.avatarUrl),u(3),Q(e.login)}}function ixe(i,r){if(i&1){let e=j();h(0,`igx-select`,78),Je(`ngModelChange`,function(n){let o=I(e).cell;return Ye(o.editValue,n)||(o.editValue=n),N(n)}),_e(1,txe,6,3,`igx-select-item`,35,At),m(),He()}if(i&2){let e=r.cell,t=r.$implicit,n=g(3);x(`placeholder`,t.login),Ke(`ngModel`,e.editValue),x(`overlaySettings`,n.overlaySettings),Ge(),u(),xe(n.teamMembers())}}function nxe(i,r){i&1&&P(0,ixe,3,3,`ng-template`,72)}function rxe(i,r){if(i&1&&(D(0),z(1,`deadline`)),i&2){let e=r.cell;q(` `,ki(1,1,e.row.data,e),` `)}}function oxe(i,r){i&1&&P(0,rxe,2,4,`ng-template`,54)}function axe(i,r){if(i&1&&(D(0),z(1,`percent`)),i&2){let e=r.cell;q(` `,yt(1,1,g(3).calcProgress(e.row.data)/100),` `)}}function sxe(i,r){i&1&&P(0,axe,2,3,`ng-template`,54)}function lxe(i,r){if(i&1&&(D(0),z(1,`priorityLabel`)),i&2){let e=r.cell;q(` `,yt(1,1,e),` `)}}function cxe(i,r){i&1&&P(0,lxe,2,3,`ng-template`,54)}function dxe(i,r){if(i&1&&(h(0,`igx-select-item`,35),D(1),m()),i&2){let e=r.$implicit;x(`value`,e.value),u(),Q(e.value)}}function uxe(i,r){if(i&1){let e=j();h(0,`igx-select`,78),z(1,`priorityLabel`),Je(`ngModelChange`,function(n){let o=I(e).cell;return Ye(o.editValue,n)||(o.editValue=n),N(n)}),_e(2,dxe,2,2,`igx-select-item`,35,At),m(),He()}if(i&2){let e=r.cell,t=g(3);x(`placeholder`,yt(1,3,e)),Ke(`ngModel`,e.editValue),x(`overlaySettings`,t.overlaySettings),Ge(),u(2),xe(t.priority)}}function gxe(i,r){i&1&&P(0,uxe,4,5,`ng-template`,72)}function pxe(i,r){if(i&1&&(h(0,`igx-column`,60),b(1,K_e,1,0,null,54),b(2,X_e,1,0,null,72),b(3,exe,1,0,null,54),b(4,nxe,1,0,null,72),b(5,oxe,1,0,null,54),b(6,sxe,1,0,null,54),b(7,cxe,1,0,null,54),b(8,gxe,1,0,null,72),m()),i&2){let e,t=r.$implicit,n=g();x(`width`,t.width)(`sortable`,t.sortable)(`resizable`,t.resizable)(`editable`,(t.editable??!1)&&n.isEditingEnabled)(`hasSummary`,t.hasSummary)(`filterable`,t.filterable)(`formatter`,t.formatter)(`groupable`,t.groupable)(`sortStrategy`,t.sortStrategy??n.defaultSort)(`cellClasses`,t.cellClasses)(`field`,t.field)(`header`,t.header)(`dataType`,t.dataType)(`pinned`,t.pinned)(`hidden`,t.hidden),u(),S(t.field===`labels`?1:-1),u(),S(t.field===`labels`?2:-1),u(),S(t.field===`assignee`?3:-1),u(),S(t.field===`assignee`?4:-1),u(),S((e=t.field===`deadline`)?5:-1,e),u(),S(t.field===`progress`?6:-1),u(),S(t.field===`priority`?7:-1),u(),S(t.field===`priority`?8:-1)}}var OD=(function(i){return i[i.cellEditing=0]=`cellEditing`,i[i.rowEditing=1]=`rowEditing`,i[i.none=2]=`none`,i})(OD||{});var U0=(()=>{class i{constructor(){this.datePipe=_(Za),this.grid=Io.required(`tasksGrid`,{read:Vu}),this.toast=Io.required(zc,{read:zc}),this.addTaskDialog=Io.required(`addTaskDialog`),this.editTaskDialog=Io.required(`editTaskDialog`),this.transactionsDialog=Io.required(`transactionsDialog`),this.transactionsGrid=Io.required(`transactionsGrid`),this.batchEditingGrid=Io.required(`batchEditingGrid`),this.batchEditDialog=Io.required(`batchEditDialog`),this.outlet=Io.required(On),this.backlog=Io.required(Lu,{read:Lu}),this.darkTheme=gi(!0),this.tasks=gi([]),this.unassignedTasks=gi([]),this.teamMembers=gi([]),this.editMode=gi(0),this.editModes=[`Cell Editing`,`Row Editing`,`No Editing`],this.addTaskForm={},this.editTaskForm={},this.transactionsData=gi([]),this.batchEditingData=gi([]),this.inputTheme=gi(`material`),this.selectOptions=[5,15,20,50],this.disabledDates=[{dateRange:[new Date],type:vn.Before}],this.gridIsLoading=gi(!0),this.statuses=[{value:`in-review`},{value:`in-development`},{value:`resolved`},{value:`not-a-bug`}],this.priority=[{value:`low`},{value:`medium`},{value:`high`},{value:`critical`}],this.dialogOverlaySettings={modal:!0,closeOnOutsideClick:!0},this.overlaySettings={modal:!1,closeOnOutsideClick:!0},this.sortingOptions={mode:`single`},this.calcProgress=GD,this.dayFormatter=new Intl.DateTimeFormat(`en`,{weekday:`long`}),this.monthFormatter=new Intl.DateTimeFormat(`en`,{month:`long`}),this.isResolved=e=>this.getStatusLabel(e.labels??[])===`resolved`,this.isNew=e=>this.getStatusLabel(e.labels??[])===`in-review`,this.isInDevelopment=e=>this.getStatusLabel(e.labels??[])===`in-development`,this.notABug=e=>this.getStatusLabel(e.labels??[])===`not-a-bug`,this.isCritical=(e,t)=>e[t]===`critical`,this.isLow=(e,t)=>e[t]===`low`,this.isHigh=(e,t)=>e[t]===`high`,this.isDelayed=e=>(e.hours_spent??0)>(e.estimation??0),this.statusClasses={resolved:this.isResolved,inreview:this.isNew,indevelopment:this.isInDevelopment,notabug:this.notABug},this.priorityClasses={critical:this.isCritical,low:this.isLow,high:this.isHigh},this.delayedClasses={delayed:this.isDelayed},this.milestoneSort=VD.instance(),this.progressSort=LD.instance(),this.filterStrategy=BD.instance(),this.statusSort=zD.instance(),this.defaultSort=ma.instance(),this.columns=[{field:`pullRequest`,header:`Type`,width:`120px`,dataType:`string`,filterable:!0,hidden:!0,sortStrategy:this.defaultSort},{field:`number`,header:`ID`,width:`120px`,dataType:`number`,formatter:this.formatID,sortable:!1,sortStrategy:this.defaultSort},{field:`title`,header:`Issue`,width:`380px`,dataType:`string`,filterable:!0,editable:!0,sortStrategy:this.defaultSort,required:!0,minlength:4},{field:`milestone`,header:`Milestone`,width:`120px`,dataType:`string`,editable:!0,sortable:!0,sortStrategy:this.milestoneSort,hidden:!0},{field:`labels`,header:`Status`,width:`200px`,dataType:`string`,sortable:!0,filterable:!0,editable:!0,summaries:HD,cellClasses:this.statusClasses,hasSummary:!0,sortStrategy:this.statusSort},{field:`assignee.login`,header:`Assignee`,width:`180px`,dataType:`string`,editable:!0,filterable:!0,sortable:!0,sortStrategy:this.defaultSort},{field:`createdAt`,header:`Created`,width:`220px`,dataType:`date`,sortable:!0,filterable:!0,editable:!1,sortStrategy:this.defaultSort,hasSummary:!0},{field:`deadline`,header:`Deadline`,width:`130px`,dataType:`date`,sortable:!0,filterable:!0,editable:!0,sortStrategy:this.defaultSort},{field:`estimation`,header:`Estimation`,width:`120px`,dataType:`number`,editable:!0,cellClasses:this.delayedClasses,sortStrategy:this.defaultSort},{field:`hours_spent`,header:`Hours Spent`,width:`120px`,dataType:`number`,editable:!0,cellClasses:this.delayedClasses,sortStrategy:this.defaultSort},{field:`progress`,header:`Progress`,width:`95px`,dataType:`number`,sortable:!0,sortStrategy:this.progressSort},{field:`priority`,header:`Priority`,width:`125px`,dataType:`string`,sortable:!0,filterable:!0,editable:!0,cellClasses:this.priorityClasses,sortStrategy:this.defaultSort}],this._filteringStrategy=new rl,this.formatDate=e=>`${this.dayFormatter.format(e)}, ${e.getDate()} ${this.monthFormatter.format(e)}, ${e.getFullYear()}`,this.columnValuesStrategy=(e,t,n)=>{this.getColumnData(e,t,o=>n(o))}}ngOnInit(){let e=wV.map(t=>{return t.milestone=new MV().transform(t),t});this.populateDataComponents(e),this.teamMembers.set(RD)}ngAfterViewInit(){this.overlaySettings.outlet=this.outlet(),this.dialogOverlaySettings.outlet=this.outlet();let e=this.grid();this.transactionsData.set(e.transactions.getAggregatedChanges(!0)),e.transactions.onStateUpdate?.subscribe(()=>{this.transactionsData.set(e.transactions.getAggregatedChanges(!0))}),e.groupingExpressions=[{dir:St.Desc,fieldName:`milestone`,ignoreCase:!1,strategy:this.milestoneSort}];let t=new Date;e.groupingExpansionState=[{expanded:!0,hierarchy:[{fieldName:`milestone`,value:`Q${Math.floor(t.getMonth()/3)+1} ${t.getFullYear()}`}]}]}formatID(e){return`#`+e}stateFormatter(e){return JSON.stringify(e)}typeFormatter(e){return e.toUpperCase()}classFromType(e){return`transaction--${e.toLowerCase()}`}formatHours(e){return e?e+`h`:``}formatPieLabel(e){return e.item.Value+` `+e.item.Label}formatDateLabel(e){return e.date.toLocaleDateString(void 0,{month:`short`})}undo(){this.grid().transactions.undo()}redo(){this.grid().transactions.redo()}commit(){this.grid().transactions.commit(this.tasks()),this.transactionsDialog().close()}commitBatchEdits(){let e=this.batchEditingGrid().data??[];for(let t of e)this.grid().updateRow(t,t.id);this.batchEditDialog().close()}cancel(){this.transactionsDialog().close()}discard(){this.grid().transactions.clear(),this.transactionsDialog().close()}onEditingModeChanged(e){this.editMode.set(e.newSelection.index)}isEditModeSelected(e){return e===this.editMode()}editStart(e){this.grid().columnList.find(n=>n.index===e.cellID?.columnID)?.field===`started_on`&&e.oldValue&&(e.cancel=!0)}onCellEdit(e){let t=e.cellID;if(!t)return;switch(this.grid().columnList.find(o=>o.index===t.columnID)?.field){case`started_on`:{let o=this.grid().getRowByIndex(t.rowIndex).data.deadline;e.newValue>o&&(e.cancel=!0,this.toast().open(`Started date cannot exceed Deadline date !`));break}case`deadline`:{let o=this.grid().getRowByIndex(t.rowIndex).data.createdAt;e.newValuen.login===t)?.avatarUrl??``}getValue(e){let t;if(e)return typeof e!=`string`?t=e.login:t=e,t}openCommitDialog(){this.transactionsDialog().open(this.dialogOverlaySettings),this.transactionsGrid().reflow()}openAddTaskDialog(){this.addTaskDialog().open(this.dialogOverlaySettings)}openBatchEditDialog(){let e=this.grid().selectedRows,t=this.tasks().filter(n=>e.indexOf(n.id)>-1);this.batchEditingData.set(t),this.batchEditDialog().open(this.dialogOverlaySettings)}populateDataComponents(e){let t=e.filter(n=>n.pullRequest===null).map(n=>this.parseDate(n));this.tasks.set(t.filter(n=>(n.labels??[]).filter(o=>o.name.includes(`status`)).length>0)),this.gridIsLoading.set(!1),this.unassignedTasks.set(t.filter(n=>(n.labels??[]).filter(o=>o.name.includes(`status`)).length===0))}emptyFieldMessage(){this.toast().open(`Please fill out all required fields (Issue and Deadline).`)}toggleTheme(){this.darkTheme.set(!this.darkTheme()),this.inputTheme.set(this.darkTheme()?`material`:`fluent`)}onBacklogItemAction(e){switch(e.action){case`edit`:this.editTaskForm=e.issue,this.editTaskForm.deadline=null,this.editTaskForm.milestone=null,this.editTaskDialog().open(this.dialogOverlaySettings);break;case`drag`:case`release`:this.editTaskForm=e.issue,this.toggleGridBodyHighlight();break}}onDropContainerEnterLeave(){this.toggleGroupRowHighlight()}toggleGroupRowHighlight(){this.grid().tbody.nativeElement.querySelectorAll(`igx-grid-groupby-row`).forEach(t=>{let n=t.querySelector(`.igx-group-label`)?.firstElementChild;n&&n.innerText===this.editTaskForm.milestone&&t.classList.toggle(`tp-app__groupby-row-highlight`)})}toggleGridBodyHighlight(){this.grid().tbody.nativeElement.classList.toggle(`tp-app__drop-area-entered`)}onItemDropped(){Object.keys(this.editTaskForm).length&&(this.toggleGridBodyHighlight(),this.addBacklogItem(this.editTaskForm))}addBacklogItem(e){this.grid().addRow(e),this.backlog().deleteItem(e)}deadlineChanged(e,t){let n=e.getFullYear();t.milestone=`Q${Math.ceil((e.getMonth()+1)/3)} ${n}`}getDeadlineValue(e){let t=e.column.pipeArgs,n=new Date(e.row.data);return n.setMonth(n.getMonth()+3),this.datePipe.transform(n,t.format,t.timezone,e.grid.locale)??``}getStatusLabel(e){return new Bc().transform(e)}getAssignee(e){return e.login}get undoEnabled(){return this.grid().transactions.canUndo}get redoEnabled(){return this.grid().transactions.canRedo}get hasTransactions(){return this.grid().transactions.getAggregatedChanges(!1).length>0}get hasSelection(){return this.grid().selectedRows.length>0}get isRowEditingEnabled(){return this.editMode()===OD.rowEditing}get isEditingEnabled(){return this.editMode()!==OD.none}get selectedEditMode(){return this.editModes[this.editMode()]}getColumnData(e,t,n){setTimeout(()=>{let o;if(e.field===`labels`){o=this.statuses.map(s=>s.value),n(o);return}if(e.field===`assignee.login`){o=this.teamMembers().map(s=>s.login),n(o);return}if(e.field===`priority`){o=this.priority.map(s=>s.value),n(o);return}o=this._filteringStrategy.filter(this.tasks(),t).map(s=>s[e.field]),n(o)},1e3)}parseDate(e){return e.createdAt=e.createdAt?new Date(e.createdAt):void 0,e}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵcmp=Z({type:i,selectors:[[`app-taskplanner`]],viewQuery:function(t,n){t&1&&w_(n.grid,jfe,5,Vu)(n.toast,zc,5,zc)(n.addTaskDialog,Wfe,5)(n.editTaskDialog,$fe,5)(n.transactionsDialog,qfe,5)(n.transactionsGrid,Qfe,5)(n.batchEditingGrid,Kfe,5)(n.batchEditDialog,Yfe,5)(n.outlet,On,5)(n.backlog,Lu,5,Lu),t&2&&VS(10)},hostAttrs:[1,`tp-app`],features:[Ae([SV,Za])],decls:129,vars:84,consts:[[`tasksGrid`,``],[`paginator`,``],[`editModeDropdown`,``],[`sortIcon`,``],[`sortAscIcon`,``],[`sortDescIcon`,``],[`outlet`,`overlay-outlet`],[`addTaskDialog`,``],[`MyInputGroup`,``],[`editTaskDialog`,``],[`transactionsDialog`,``],[`transactionsGrid`,``],[`batchEditDialog`,``],[`batchEditingGrid`,``],[3,`themeChanged`,`createIssueClicked`],[1,`tp-app__inner`],[1,`tp-app__backlog`,3,`listItemAction`,`data`],[`id`,`tasksGrid`,`igxDrop`,``,3,`cellEditEnter`,`cellEdit`,`dropped`,`enter`,`leave`,`isLoading`,`height`,`batchEditing`,`data`,`autoGenerate`,`primaryKey`,`rowEditable`,`groupsExpanded`,`allowFiltering`,`allowAdvancedFiltering`,`filterMode`,`uniqueColumnValuesStrategy`,`filterStrategy`,`cellSelection`,`rowSelection`,`moving`,`sortingOptions`,`sortHeaderIconTemplate`,`sortAscendingHeaderIconTemplate`,`sortDescendingHeaderIconTemplate`],[3,`pageChange`,`perPageChange`,`page`,`totalRecords`,`perPage`,`selectOptions`],[1,`tp-app__grid-heading`],[`igxIconButton`,`flat`,1,`button`,3,`click`,`disabled`],[`igxButton`,`flat`,1,`button`,3,`igxToggleAction`,`igxToggleOutlet`,`igxDropDownItemNavigation`],[3,`selectionChanging`,`width`],[3,`selected`],[`igxButton`,`outlined`,1,`button`,3,`click`,`disabled`],[`igxGridDetail`,``],[`igxGroupByRow`,``],[3,`width`,`sortable`,`required`,`resizable`,`minlength`,`editable`,`hasSummary`,`filterable`,`formatter`,`groupable`,`sortStrategy`,`cellClasses`,`field`,`header`,`dataType`,`pinned`,`hidden`,`summaries`],[`igxOverlayOutlet`,``],[`title`,`Create Issue`,`leftButtonLabel`,`Cancel`,`rightButtonLabel`,`Add task`,3,`leftButtonSelect`,`rightButtonSelect`,`closeOnOutsideSelect`],[1,`tp-app__dialog-content`],[`type`,`border`,3,`theme`],[`igxLabel`,``,`for`,`issue`],[`ngDefaultControl`,``,`igxInput`,``,`id`,`issue`,`type`,`text`,`required`,``,3,`ngModelChange`,`ngModel`],[`type`,`border`,`ngDefaultControl`,``,`placeholder`,`Owner`,3,`ngModelChange`,`ngModel`,`overlaySettings`],[3,`value`],[`igxLabel`,``,`for`,`description`],[`rows`,`4`,`cols`,`50`,`igxInput`,``,`ngDefaultControl`,``,`name`,`desc`,3,`ngModelChange`,`ngModel`],[`type`,`border`,`ngDefaultControl`,``,`placeholder`,`Priority`,3,`ngModelChange`,`ngModel`,`overlaySettings`],[`igxLabel`,``,`for`,`milestone`],[`igxInput`,``,`ngDefaultControl`,``,`id`,`milestone`,`type`,`text`,3,`ngModelChange`,`ngModel`,`igxMask`,`disabled`],[`type`,`line`,`name`,`deadline`,`ngDefaultControl`,``,`aria-required`,`required`,`required`,``,`mode`,`dialog`,3,`ngModelChange`,`valueChange`,`ngModel`,`outlet`,`formatter`,`disabledDates`],[`igxLabel`,``],[`title`,`Edit Issue`,`leftButtonLabel`,`Cancel`,`rightButtonLabel`,`Edit`,3,`leftButtonSelect`,`rightButtonSelect`,`closeOnOutsideSelect`],[`igxLabel`,``,`for`,`newIssue`],[`igxInput`,``,`id`,`newIssue`,`ngDefaultControl`,``,`type`,`text`,`required`,``,3,`ngModelChange`,`ngModel`],[`type`,`border`,`ngDefaultControl`,``,`placeholder`,`Owner`,`required`,``,3,`ngModelChange`,`ngModel`,`overlaySettings`],[`rows`,`4`,`cols`,`50`,`ngDefaultControl`,``,`igxInput`,``,`name`,`desc`,3,`ngModelChange`,`ngModel`],[`igxLabel`,``,`for`,`newMilestone`],[`igxInput`,``,`id`,`newMilestone`,`ngDefaultControl`,``,`type`,`text`,3,`ngModelChange`,`ngModel`,`igxMask`,`disabled`],[`title`,`Submit the following transactions?`],[`id`,`transactionsGrid`,`width`,`600px`,`height`,`300px`,3,`data`,`rowHeight`,`primaryKey`,`emptyGridMessage`],[`field`,`id`,`header`,`ID`,`width`,`100px`,3,`dataType`],[`field`,`type`,`header`,`Type`,`width`,`150px`,3,`sortable`],[`igxCell`,``],[`field`,`newValue`,`header`,`Value`,`width`,`900px`],[1,`tp-app__dialog-buttons-wrapper`],[`igxButton`,``,3,`click`],[`title`,`Batch Row Editing`,`leftButtonLabel`,`Cancel`,`rightButtonLabel`,`Commit`,3,`leftButtonSelect`,`rightButtonSelect`,`closeOnOutsideSelect`],[`id`,`tasksGrid`,3,`height`,`data`,`autoGenerate`,`primaryKey`,`rowEditable`],[3,`width`,`sortable`,`resizable`,`editable`,`hasSummary`,`filterable`,`formatter`,`groupable`,`sortStrategy`,`cellClasses`,`field`,`header`,`dataType`,`pinned`,`hidden`],[1,`tp-app__row-details`],[1,`tp-app__row-details-inner`],[1,`tp-app__row-details-col`],[1,`tp-app__row-details-col-item`],[1,`tp-app__row-details-title`,`tp-app__row-details-title--comments`],[3,`theme`],[`readonly`,``,`name`,`description`,`ngDefaultControl`,``,`igxInput`,``,`rows`,`8`,`cols`,`50`,`placeholder`,`Enter any details here.`,3,`ngModelChange`,`ngModel`],[1,`tp-app__row-details-title`],[1,`tp-app__row-details-checkbox`],[1,`igx-group-label`],[1,`tp-app__row-badges`],[`igxCellEditor`,``],[`igxSummary`,``],[`type`,`line`,`ngDefaultControl`,``,3,`ngModelChange`,`placeholder`,`ngModel`,`overlaySettings`],[1,`tp-app__owner-col`],[`shape`,`circle`,`size`,`small`,1,`tp-app__owner-col-avatar`,3,`src`],[1,`tp-app__owner-col-name`],[`type`,`line`,3,`ngModelChange`,`placeholder`,`ngModel`,`overlaySettings`],[1,`item`],[`type`,`default`,3,`max`,`value`,`animate`],[1,`summary-temp`],[1,`tp-app__estimation-col`],[1,`transaction-log`]],template:function(t,n){if(t&1){let o=j();h(0,`div`)(1,`app-header`,14),E(`themeChanged`,function(){return n.toggleTheme()})(`createIssueClicked`,function(){return n.openAddTaskDialog()}),m(),h(2,`div`,15)(3,`app-backlog`,16),E(`listItemAction`,function(s){return n.onBacklogItemAction(s)}),m(),h(4,`igx-grid`,17,0),E(`cellEditEnter`,function(s){return n.editStart(s)})(`cellEdit`,function(s){return n.onCellEdit(s)})(`dropped`,function(){return n.onItemDropped()})(`enter`,function(){return n.onDropContainerEnterLeave()})(`leave`,function(){return n.onDropContainerEnterLeave()}),h(6,`igx-paginator`,18,1),Je(`pageChange`,function(s){return I(o),Ye(n.grid().page,s)||(n.grid().page=s),N(s)})(`perPageChange`,function(s){return I(o),Ye(n.grid().perPage,s)||(n.grid().perPage=s),N(s)}),m(),h(8,`igx-grid-toolbar`)(9,`igx-grid-toolbar-title`),D(10,`Project Issues`),m(),h(11,`igx-grid-toolbar-actions`),R(12,`igx-grid-toolbar-hiding`)(13,`igx-grid-toolbar-pinning`)(14,`igx-grid-toolbar-exporter`),m(),R(15,`div`,19),h(16,`div`)(17,`button`,20),E(`click`,function(){return n.openCommitDialog()}),h(18,`igx-icon`),D(19,`check`),m()(),h(20,`button`,20),E(`click`,function(){return n.undo()}),h(21,`igx-icon`),D(22,`undo`),m()(),h(23,`button`,20),E(`click`,function(){return n.redo()}),h(24,`igx-icon`),D(25,`redo`),m()()(),h(26,`button`,21),D(27),h(28,`igx-icon`),D(29,`arrow_drop_down`),m()(),h(30,`igx-drop-down`,22,2),E(`selectionChanging`,function(s){return n.onEditingModeChanged(s)}),_e(32,Zfe,2,2,`igx-drop-down-item`,23,At),m(),h(34,`button`,24),E(`click`,function(){return n.openBatchEditDialog()}),D(35,`Batch Edit`),m()(),P(36,Xfe,18,2,`ng-template`,25)(37,e_e,6,4,`ng-template`,26),_e(38,L_e,15,33,`igx-column`,27,At),m()(),P(40,z_e,2,0,`ng-template`,null,3,Y)(42,B_e,2,0,`ng-template`,null,4,Y)(44,H_e,2,0,`ng-template`,null,5,Y),R(46,`igx-toast`),h(47,`div`,28,6)(49,`igx-dialog`,29,7),E(`leftButtonSelect`,function(){I(o);return N(V(50).close())})(`rightButtonSelect`,function(){return n.addTask()}),h(51,`div`,30)(52,`igx-input-group`,31,8)(54,`label`,32),D(55,`Issue Title`),m(),h(56,`input`,33),Je(`ngModelChange`,function(s){return I(o),Ye(n.addTaskForm.title,s)||(n.addTaskForm.title=s),N(s)}),m(),He(),m(),h(57,`igx-select`,34),Je(`ngModelChange`,function(s){return I(o),Ye(n.addTaskForm.assignee,s)||(n.addTaskForm.assignee=s),N(s)}),_e(58,G_e,6,3,`igx-select-item`,35,At),m(),He(),h(60,`igx-input-group`,31)(61,`label`,36),D(62,`Description`),m(),h(63,`textarea`,37),Je(`ngModelChange`,function(s){return I(o),Ye(n.addTaskForm.body,s)||(n.addTaskForm.body=s),N(s)}),m(),He(),m(),h(64,`igx-select`,38),Je(`ngModelChange`,function(s){return I(o),Ye(n.addTaskForm.priority,s)||(n.addTaskForm.priority=s),N(s)}),_e(65,U_e,2,2,`igx-select-item`,35,At),m(),He(),h(67,`igx-input-group`,31)(68,`label`,39),D(69,`Milestone`),m(),h(70,`input`,40),Je(`ngModelChange`,function(s){return I(o),Ye(n.addTaskForm.milestone,s)||(n.addTaskForm.milestone=s),N(s)}),m(),He(),m(),h(71,`igx-date-picker`,41),Je(`ngModelChange`,function(s){return I(o),Ye(n.addTaskForm.deadline,s)||(n.addTaskForm.deadline=s),N(s)}),E(`valueChange`,function(s){return n.deadlineChanged(s,n.addTaskForm)}),h(72,`label`,42),D(73,`Deadline`),m(),h(74,`igx-prefix`)(75,`igx-icon`),D(76,`today`),m()()(),He(),m()(),h(77,`igx-dialog`,43,9),E(`leftButtonSelect`,function(){I(o);return N(V(78).close())})(`rightButtonSelect`,function(){return n.editTask()}),h(79,`div`,30)(80,`igx-input-group`,31,8)(82,`label`,44),D(83,`Issue Title`),m(),h(84,`input`,45),Je(`ngModelChange`,function(s){return I(o),Ye(n.editTaskForm.title,s)||(n.editTaskForm.title=s),N(s)}),m(),He(),m(),h(85,`igx-select`,46),Je(`ngModelChange`,function(s){return I(o),Ye(n.editTaskForm.assignee,s)||(n.editTaskForm.assignee=s),N(s)}),_e(86,j_e,6,3,`igx-select-item`,35,At),m(),He(),h(88,`igx-input-group`,31)(89,`label`,36),D(90,`Description`),m(),h(91,`textarea`,47),Je(`ngModelChange`,function(s){return I(o),Ye(n.editTaskForm.body,s)||(n.editTaskForm.body=s),N(s)}),m(),He(),m(),h(92,`igx-select`,38),Je(`ngModelChange`,function(s){return I(o),Ye(n.editTaskForm.priority,s)||(n.editTaskForm.priority=s),N(s)}),_e(93,W_e,2,2,`igx-select-item`,35,At),m(),He(),h(95,`igx-input-group`,31)(96,`label`,48),D(97,`Milestone`),m(),h(98,`input`,49),Je(`ngModelChange`,function(s){return I(o),Ye(n.editTaskForm.milestone,s)||(n.editTaskForm.milestone=s),N(s)}),m(),He(),m(),h(99,`igx-date-picker`,41),Je(`ngModelChange`,function(s){return I(o),Ye(n.editTaskForm.deadline,s)||(n.editTaskForm.deadline=s),N(s)}),E(`valueChange`,function(s){return n.deadlineChanged(s,n.editTaskForm)}),h(100,`label`,42),D(101,`Deadline`),m(),h(102,`igx-prefix`)(103,`igx-icon`),D(104,`today`),m()()(),He(),m()(),h(105,`igx-dialog`,50,10)(107,`div`,30)(108,`igx-grid`,51,11),R(110,`igx-column`,52),h(111,`igx-column`,53),P(112,$_e,2,3,`ng-template`,54),m(),h(113,`igx-column`,55),P(114,q_e,2,1,`ng-template`,54),m()()(),h(115,`div`,56)(116,`button`,57),E(`click`,function(){return n.commit()}),D(117,`Commit`),m(),h(118,`button`,57),E(`click`,function(){return n.discard()}),D(119,`Discard`),m(),h(120,`button`,57),E(`click`,function(){return n.cancel()}),D(121,`Cancel`),m()()(),h(122,`igx-dialog`,58,12),E(`leftButtonSelect`,function(){I(o);return N(V(123).close())})(`rightButtonSelect`,function(){return n.commitBatchEdits()}),h(124,`div`,30)(125,`igx-grid`,59,13),_e(127,pxe,9,23,`igx-column`,60,At),m()()()()()}if(t&2){let o=V(31),a=V(41),s=V(43),l=V(45),c=V(48);ee(`tp-app-dark-theme`,n.darkTheme())(`tp-app-light-theme`,!n.darkTheme()),u(3),x(`data`,n.unassignedTasks()),u(),x(`isLoading`,n.gridIsLoading())(`height`,`100%`)(`batchEditing`,!0)(`data`,n.tasks())(`autoGenerate`,!1)(`primaryKey`,`id`)(`rowEditable`,n.isRowEditingEnabled)(`groupsExpanded`,!1)(`allowFiltering`,!0)(`allowAdvancedFiltering`,!0)(`filterMode`,`excelStyleFilter`)(`uniqueColumnValuesStrategy`,n.columnValuesStrategy)(`filterStrategy`,n.filterStrategy)(`cellSelection`,`none`)(`rowSelection`,`multiple`)(`moving`,!0)(`sortingOptions`,n.sortingOptions)(`sortHeaderIconTemplate`,a)(`sortAscendingHeaderIconTemplate`,s)(`sortDescendingHeaderIconTemplate`,l),u(2),Ke(`page`,n.grid().page),x(`totalRecords`,n.grid().totalRecords),Ke(`perPage`,n.grid().perPage),x(`selectOptions`,n.selectOptions),u(11),x(`disabled`,!n.hasTransactions),u(3),x(`disabled`,!n.undoEnabled),u(3),x(`disabled`,!n.redoEnabled),u(3),x(`igxToggleAction`,o)(`igxToggleOutlet`,c)(`igxDropDownItemNavigation`,o),u(),q(` `,n.selectedEditMode,` `),u(3),x(`width`,`100px`),u(2),xe(n.editModes),u(2),x(`disabled`,!n.hasSelection||n.editMode()===2),u(4),xe(n.columns),u(11),x(`closeOnOutsideSelect`,!1),u(3),x(`theme`,n.inputTheme()),u(4),Ke(`ngModel`,n.addTaskForm.title),Ge(),u(),Ke(`ngModel`,n.addTaskForm.assignee),x(`overlaySettings`,n.overlaySettings),Ge(),u(),xe(n.teamMembers()),u(2),x(`theme`,n.inputTheme()),u(3),Ke(`ngModel`,n.addTaskForm.body),Ge(),u(),Ke(`ngModel`,n.addTaskForm.priority),x(`overlaySettings`,n.overlaySettings),Ge(),u(),xe(n.priority),u(2),x(`theme`,n.inputTheme()),u(3),Ke(`ngModel`,n.addTaskForm.milestone),x(`igxMask`,`L#?####`)(`disabled`,!0),Ge(),u(),Ke(`ngModel`,n.addTaskForm.deadline),x(`outlet`,c)(`formatter`,n.formatDate)(`disabledDates`,n.disabledDates),Ge(),u(6),x(`closeOnOutsideSelect`,!1),u(3),x(`theme`,n.inputTheme()),u(4),Ke(`ngModel`,n.editTaskForm.title),Ge(),u(),Ke(`ngModel`,n.editTaskForm.assignee),x(`overlaySettings`,n.overlaySettings),Ge(),u(),xe(n.teamMembers()),u(2),x(`theme`,n.inputTheme()),u(3),Ke(`ngModel`,n.editTaskForm.body),Ge(),u(),Ke(`ngModel`,n.editTaskForm.priority),x(`overlaySettings`,n.overlaySettings),Ge(),u(),xe(n.priority),u(2),x(`theme`,n.inputTheme()),u(3),Ke(`ngModel`,n.editTaskForm.milestone),x(`igxMask`,`L#?####`)(`disabled`,!0),Ge(),u(),Ke(`ngModel`,n.editTaskForm.deadline),x(`outlet`,c)(`formatter`,n.formatDate)(`disabledDates`,n.disabledDates),Ge(),u(9),x(`data`,n.transactionsData())(`rowHeight`,64)(`primaryKey`,`id`)(`emptyGridMessage`,`No available transactions`),u(2),x(`dataType`,`string`),u(),x(`sortable`,!0),u(11),x(`closeOnOutsideSelect`,!1),u(3),x(`height`,`100%`)(`data`,n.batchEditingData())(`autoGenerate`,!1)(`primaryKey`,`id`)(`rowEditable`,!0),u(2),xe(n.columns)}},dependencies:[VV,Lu,Vu,Fo,Ou,F0,A0,Au,O0,V0,P0,Dt,Pe,EI,Vo,Xn,Hr,T0,ni,cn,hn,mn,jd,fn$1,Ut,Hi,Wh,Ac,br,YN,ZN,Oh,Vh,sr,Sa,FD,s0,Lh,zc,On,Th,Po,DI,Oo,vi,wn,fw,Za,Bc,AD,EV,kV,RV],styles:[`.tp-app{height:100%;overflow:hidden} .tp-app igx-list{height:auto!important} .tp-app__row-details{width:100%} .tp-app__row-details-inner{display:flex;justify-content:flex-start} .tp-app__row-details-col-item{display:flex;flex-direction:column;margin-bottom:.5rem} .tp-app__row-details-col-item:last-of-type{margin-bottom:0} .tp-app__estimation-col{opacity:.3} .tp-app__inner{display:flex;height:100%;overflow:hidden;padding:1.5rem} .tp-app__row-details-checkbox{margin-bottom:.5rem} .tp-app__row-details-checkbox:last-of-type{margin-bottom:0} .tp-app__row-details-title{margin-bottom:1rem;line-height:normal;font-size:14px} .tp-app__row-details-col{display:flex;flex-grow:1;flex-direction:column;margin-right:2rem;padding:1rem;border-radius:8px} .tp-app__row-details-col:last-of-type{margin-right:0} .tp-app__config{height:4.25rem;padding:1.5rem} .tp-app__config-buttons{display:flex} .tp-app__grid-heading{display:flex;align-items:center;flex:1;font-size:18px} .tp-app__grid{flex:1} .tp-app__dialog-content{padding:0 1.5rem} .tp-app__dialog-content>*{margin-bottom:1rem} .tp-app .igx-dialog__window{max-width:90vw} .tp-app .igx-dialog__window-actions, .tp-app__dialog-buttons-wrapper{padding:.5rem 1.5rem 1.5rem} .tp-app__dialog-buttons-wrapper{display:flex;justify-content:flex-end} .tp-app .igx-grid-toolbar__actions{display:none} .tp-app__owner-col{display:flex;flex:1;align-items:center;justify-content:flex-start;overflow:hidden} .tp-app__owner-col>span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .tp-app__owner-col-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .tp-app__owner-col-avatar.igx-avatar--small{width:1.875rem;height:1.875rem;min-width:1.875rem;margin-right:.5rem} .tp-app__row-badges{margin-left:.5rem} .tp-app__row-badges .igx-badge__circle-value{padding:0 1rem}@media only screen and (max-width:1024px){ .tp-app .content{padding:0}}.summary-temp[_ngcontent-%COMP%]{display:flex;flex-direction:column;margin:0 1px;font-size:14px;line-height:24px;height:100%;overflow-y:auto;overflow-x:hidden}.summary-temp[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:4px;justify-content:space-between;color:hsla(var(--%NS%ig-gray-900))}.summary-temp[_ngcontent-%COMP%] span[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{-webkit-user-select:all;user-select:all;max-width:300px;padding-right:8px}.summary-temp[_ngcontent-%COMP%] span[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:12px;text-transform:uppercase;min-width:70px;justify-self:flex-start;text-align:left;color:var(--%NS%ig-secondary-600);-webkit-user-select:none;user-select:none}.summary-temp[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{padding:8px 0;line-height:18px;border-bottom:1px dashed hsla(var(--%NS%ig-gray-400))}.summary-temp[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:last-child{border-bottom:none}[_ngcontent-%COMP%]::-webkit-scrollbar{width:5px!important;height:5px!important}`]})}}return i})();var VD=class extends ma{compareObjects(r,e,t,n,o,a){let s=String(r[t]??``).split(` `),l=String(e[t]??``).split(` `),c=s[1],d=l[1],p=s[0].slice(-1),f=l[0].slice(-1),v=parseInt(c+p,10),y=parseInt(d+f,10);return n*this.compareValues(v,y)}};var LD=class extends ma{compareObjects(r,e,t,n){let o=GD(r),a=GD(e);return n*this.compareValues(o,a)}};var zD=class extends ma{compareObjects(r,e,t,n){let o=new Bc,a=o.transform(r.labels),s=o.transform(e.labels);return n*this.compareValues(a,s)}};var BD=class extends rl{findMatchByExpression(r,e){let t=e.condition;if(!t)return!1;let n=this.getFieldValue(r,e.fieldName);return e.fieldName===`labels`&&(n=new Bc().transform(n)),!n&&e.fieldName===`priority`&&(n=new AD().transform(r)),!!t.logic?.(n,e.searchVal,e.ignoreCase)}};var HD=class extends ds{constructor(){super()}operate(r=[]){let e=super.operate(r),t=new Bc;return e.push({key:`in-progress`,label:`in-development`,summaryResult:r.filter(n=>t.transform(n)===`in-development`).length}),e.push({key:`resolved`,label:`resolved`,summaryResult:r.filter(n=>t.transform(n)===`resolved`).length}),e}};function GD(i){return(i.hours_spent?i.hours_spent:0)/(i.estimation?i.estimation:0)*100}var j0={none:`none`,slide:`slide`,fade:`fade`};var Qh=(function(i){return i[i.NONE=0]=`NONE`,i[i.NEXT=1]=`NEXT`,i[i.PREV=2]=`PREV`,i})(Qh||{});var LV=(()=>{class i{constructor(){this.animationService=_(rh),this.cdr=_(Ne),this.animationType=j0.slide,this.enterAnimationDone=new k,this.leaveAnimationDone=new k,this.defaultAnimationDuration=320,this.animationPosition=0,this.newDuration=0,this.vertical=!1}ngOnDestroy(){this.enterAnimationPlayer&&(this.enterAnimationPlayer.destroy(),this.enterAnimationPlayer=null),this.leaveAnimationPlayer&&(this.leaveAnimationPlayer.destroy(),this.leaveAnimationPlayer=null)}triggerAnimations(){this.animationType!==j0.none&&(this.animationStarted(this.leaveAnimationPlayer)||this.animationStarted(this.enterAnimationPlayer)?requestAnimationFrame(()=>{this.resetAnimations(),this.playAnimations()}):this.playAnimations())}animationStarted(e){return e&&e.hasStarted()}playAnimations(){this.playLeaveAnimation(),this.playEnterAnimation()}resetAnimations(){this.animationStarted(this.leaveAnimationPlayer)&&(this.leaveAnimationPlayer.reset(),this.leaveAnimationDone.emit()),this.animationStarted(this.enterAnimationPlayer)&&(this.enterAnimationPlayer.reset(),this.enterAnimationDone.emit(),this.cdr.markForCheck())}getAnimation(){let e;this.newDuration?e=this.animationPosition?this.animationPosition*this.newDuration:this.newDuration:e=this.animationPosition?this.animationPosition*this.defaultAnimationDuration:this.defaultAnimationDuration;let t=this.animationPosition?this.animationPosition*100:100;switch(this.animationType){case j0.slide:return{enterAnimation:xn(ru,{params:{delay:`0s`,duration:`${e}ms`,endOpacity:1,startOpacity:1,fromPosition:`${this.vertical?`translateY`:`translateX`}(${this.currentItem.direction===1?t:-t}%)`,toPosition:`${this.vertical?`translateY(0%)`:`translateX(0%)`}`}}),leaveAnimation:xn(ru,{params:{delay:`0s`,duration:`${e}ms`,endOpacity:1,startOpacity:1,fromPosition:`${this.vertical?`translateY(0%)`:`translateX(0%)`}`,toPosition:`${this.vertical?`translateY`:`translateX`}(${this.currentItem.direction===1?-t:t}%)`}})};case j0.fade:return{enterAnimation:xn(An,{params:{duration:`${e}ms`,startOpacity:`${this.animationPosition}`}}),leaveAnimation:null}}return{enterAnimation:null,leaveAnimation:null}}playEnterAnimation(){let e=this.getAnimation().enterAnimation;e&&(this.enterAnimationPlayer=this.animationService.buildAnimation(e,this.getCurrentElement()),this.enterAnimationPlayer.animationEnd.subscribe(()=>{this.enterAnimationPlayer&&(this.enterAnimationPlayer.destroy(),this.enterAnimationPlayer=null),this.animationPosition=0,this.newDuration=0,this.previousItem.previous=!1,this.enterAnimationDone.emit(),this.cdr.markForCheck()}),this.previousItem.previous=!0,this.enterAnimationPlayer.play())}playLeaveAnimation(){let e=this.getAnimation().leaveAnimation;e&&(this.leaveAnimationPlayer=this.animationService.buildAnimation(e,this.getPreviousElement()),this.leaveAnimationPlayer.animationEnd.subscribe(()=>{this.leaveAnimationPlayer&&(this.leaveAnimationPlayer.destroy(),this.leaveAnimationPlayer=null),this.animationPosition=0,this.newDuration=0,this.leaveAnimationDone.emit()}),this.leaveAnimationPlayer.play())}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵdir=L({type:i})}}return i})();var hxe=[`headerTemplate`];var mxe=[`panelTemplate`];var fxe=[`headerContainer`];var _xe=[`viewPort`];var xxe=[`itemsWrapper`];var vxe=[`itemsContainer`];var yxe=[`selectedIndicator`];var bxe=[`scrollPrevButton`];var Sxe=[`scrollNextButton`];function wxe(i,r){i&1&&J(0)}function Cxe(i,r){if(i&1&&P(0,wxe,1,0,`ng-container`,16),i&2){let e=r.$implicit;x(`ngTemplateOutlet`,e.headerTemplate)}}function Ixe(i,r){i&1&&R(0,`div`,13,6)}function Nxe(i,r){i&1&&J(0)}function Dxe(i,r){if(i&1&&P(0,Nxe,1,0,`ng-container`,16),i&2){let e=r.$implicit;x(`ngTemplateOutlet`,e.panelTemplate)}}var W0=class{};var UD=class{};var $0=class{};var Txe=(()=>{class i{constructor(){this.tabs=_(W0),this.selectedChange=new k,this.disabled=!1,this.direction=Qh.NONE,this._selected=!1}get selected(){return this._selected}set selected(e){this._selected!==e&&(this._selected=e,this.tabs.selectTab(this,this._selected),this.selectedChange.emit(this._selected))}static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵdir=L({type:i,contentQueries:function(t,n,o){if(t&1&&Xe(o,UD,5)(o,$0,5),t&2){let a;w(a=C())&&(n.headerComponent=a.first),w(a=C())&&(n.panelComponent=a.first)}},viewQuery:function(t,n){if(t&1&&Se(hxe,7)(mxe,7),t&2){let o;w(o=C())&&(n.headerTemplate=o.first),w(o=C())&&(n.panelTemplate=o.first)}},inputs:{disabled:[2,`disabled`,`disabled`,O],selected:[2,`selected`,`selected`,O]},outputs:{selectedChange:`selectedChange`}})}}return i})();var Exe=(()=>{class i extends LV{constructor(){super(...arguments),this._element=_(ne),this.disableAnimation=!1,this.selectedIndexChange=new k,this.selectedIndexChanging=new k,this.selectedItemChange=new k,this._selectedIndex=-1}get selectedIndex(){return this._selectedIndex}set selectedIndex(e){if(this._selectedIndex!==e){let t=e,n=this._selectedIndex,o={owner:this,cancel:!1,oldIndex:n,newIndex:t};this.selectedIndexChanging.emit(o),o.cancel||(t=o.newIndex,this._selectedIndex=t,this.selectedIndexChange.emit(this._selectedIndex)),this.updateSelectedTabs(n)}}get selectedItem(){return this.items&&this.selectedIndex>=0&&this.selectedIndex(t.selected&&(this._selectedIndex=n),t.selected))&&this.hasPanels&&(this._selectedIndex=0),Promise.resolve().then(()=>{this.updateSelectedTabs(null,!1)}),this._itemChanges$=this.items.changes.subscribe(()=>{this.onItemChanges()}),this.setAttributes()}ngOnDestroy(){super.ngOnDestroy(),this._itemChanges$&&this._itemChanges$.unsubscribe()}selectTab(e,t){if(!this.items)return;let n=this.items.toArray();if(t){let o=n.indexOf(e);o>-1&&(this.selectedIndex=o)}else n.every(o=>!o.selected)&&(this.selectedIndex=-1)}getPreviousElement(){return this.previousItem.panelComponent.nativeElement}getCurrentElement(){return this.currentItem.panelComponent.nativeElement}scrollTabHeaderIntoView(){}onItemChanges(){this.setAttributes();let e=-1;this.items.some((t,n)=>(t.selected&&(e=n),t.selected)),e>=0?Promise.resolve().then(()=>{this.selectedIndex=e}):this.selectedIndex>=0&&this.selectedIndex{this.updateSelectedTabs(null)}):this.selectedIndex>=this.items.length&&Promise.resolve().then(()=>{this.selectedIndex=this.items.length-1})}setAttributes(){this.items.forEach(e=>{if(e.panelComponent&&!e.headerComponent.nativeElement.getAttribute(`id`)){let t=this.getNextTabId(),n=`${this.componentName}-header-${t}`,o=`${this.componentName}-content-${t}`;this.setHeaderAttribute(e,`id`,n),this.setHeaderAttribute(e,`aria-controls`,o),this.setPanelAttribute(e,`id`,o),this.setPanelAttribute(e,`aria-labelledby`,n)}})}setHeaderAttribute(e,t,n){e.headerComponent.nativeElement.setAttribute(t,n)}setPanelAttribute(e,t,n){e.panelComponent.nativeElement.setAttribute(t,n)}get hasPanels(){return this.panels&&this.panels.length}updateSelectedTabs(e,t=!0){if(!this.items)return;let n,o=this.currentItem;this._selectedIndex>=0&&this._selectedIndex{s!==this._selectedIndex&&(a.selected=!1)}),this._selectedIndex!==e&&(this.scrollTabHeaderIntoView(),this.triggerPanelAnimations(e),t&&n!==o&&this.selectedItemChange.emit({owner:this,newItem:n,oldItem:o}))}triggerPanelAnimations(e){let t=this.items.get(this._selectedIndex),n=!Xp(this._element.nativeElement);t&&!this.disableAnimation&&this.hasPanels&&this.currentItem&&!this.currentItem.selected?(t.direction=!n&&this._selectedIndex>e||n&&this._selectedIndex{let e;return function(n){return(e||(e=be(i)))(n||i)}})()}static{this.ɵdir=L({type:i,contentQueries:function(t,n,o){if(t&1&&Xe(o,Txe,4)(o,$0,5),t&2){let a;w(a=C())&&(n.items=a),w(a=C())&&(n.panels=a)}},inputs:{selectedIndex:`selectedIndex`,disableAnimation:[2,`disableAnimation`,`disableAnimation`,O]},outputs:{selectedIndexChange:`selectedIndexChange`,selectedIndexChanging:`selectedIndexChanging`,selectedItemChange:`selectedItemChange`},features:[pe]})}}return i})();var kxe=0;var Mxe=(()=>{class i extends Exe{constructor(){super(...arguments),this.ngZone=_(Qe),this.platform=_(dt),this.activation=`auto`,this.defaultClass=!0,this.offset=0,this.componentName=`igx-tabs`,this._tabAlignment=`start`}get tabAlignment(){return this._tabAlignment}set tabAlignment(e){this._tabAlignment=e,requestAnimationFrame(()=>{this.updateScrollButtons(),this.realignSelectedIndicator()})}ngAfterViewInit(){super.ngAfterViewInit(),this.ngZone.runOutsideAngular(()=>{this.platform.isBrowser&&(this._resizeObserver=new(cu())(()=>{this.updateScrollButtons(),this.realignSelectedIndicator()}),this._resizeObserver.observe(this.headerContainer.nativeElement),this._resizeObserver.observe(this.viewPort.nativeElement))})}ngOnDestroy(){super.ngOnDestroy(),this.ngZone.runOutsideAngular(()=>{this._resizeObserver?.disconnect()})}scrollPrev(){this.scroll(!1)}scrollNext(){this.scroll(!0)}realignSelectedIndicator(){if(this.selectedIndex>=0&&this.selectedIndex=0){let t=this.items.toArray()[this.selectedIndex].headerComponent.nativeElement;this.getElementOffset(t)1&&this.scrollElement(t,!0),this.alignSelectedIndicator(t)}else this.hideSelectedIndicator()}getNextTabId(){return kxe++}onItemChanges(){super.onItemChanges(),Promise.resolve().then(()=>{this.updateScrollButtons()})}alignSelectedIndicator(e,t=.3){this.selectedIndicator&&(this.selectedIndicator.nativeElement.style.visibility=`visible`,this.selectedIndicator.nativeElement.style.transitionDuration=t>0?`${t}s`:`initial`,this.selectedIndicator.nativeElement.style.width=`${e.offsetWidth}px`,this.selectedIndicator.nativeElement.style.transform=`translate(${e.offsetLeft}px)`)}hideSelectedIndicator(){this.selectedIndicator&&(this.selectedIndicator.nativeElement.style.visibility=`hidden`)}scroll(e){let t=this.items.toArray();for(let n=0;nthis.viewPort.nativeElement.offsetWidth+this.offset){this.scrollElement(a,e);break}}else if(this.getElementOffset(a)>=this.offset){this.scrollElement(t[n-1].headerComponent.nativeElement,e);break}}}scrollElement(e,t){let n=this.viewPort.nativeElement.offsetWidth;this.offset=t?e.offsetWidth+this.getElementOffset(e)-n:this.getElementOffset(e),this.viewPort.nativeElement.scrollLeft=this.getOffset(this.offset),this.updateScrollButtons()}updateScrollButtons(){let e=this.getTabItemsContainerWidth(),t=this.resolveLeftScrollButtonStyle(e);this.setScrollButtonStyle(this.scrollPrevButton.nativeElement,t);let n=this.resolveRightScrollButtonStyle(e);this.setScrollButtonStyle(this.scrollNextButton.nativeElement,n)}setScrollButtonStyle(e,t){t===`enabled`?(e.disabled=!1,e.style.display=``):t===`disabled`?(e.disabled=!0,e.style.display=``):t===`not_displayed`&&(e.style.display=`none`)}resolveLeftScrollButtonStyle(e){let t=this.headerContainer.nativeElement.offsetWidth;return this.offset===0?e-t<=1?`not_displayed`:`disabled`:`enabled`}resolveRightScrollButtonStyle(e){let t=this.viewPort.nativeElement.offsetWidth,n=this.headerContainer.nativeElement.offsetWidth,o=this.offset,a=o+t;return e-n<=1&&o===0?`not_displayed`:e>a?`enabled`:`disabled`}getTabItemsContainerWidth(){let e=this.itemsContainer.nativeElement.children.length,t=0;if(e>1){let n=this.itemsContainer.nativeElement.children[e-1];t=this.getElementOffset(n)+n.offsetWidth}return t}getOffset(e){return Xp(this._element.nativeElement)?e:-e}getElementOffset(e){return!Xp(this._element.nativeElement)?this.itemsWrapper.nativeElement.offsetWidth-e.offsetLeft-e.offsetWidth:e.offsetLeft}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=be(i)))(n||i)}})()}static{this.ɵcmp=Z({type:i,selectors:[[`igx-tabs`]],viewQuery:function(t,n){if(t&1&&Se(fxe,7)(_xe,7)(xxe,7)(vxe,7)(yxe,5)(bxe,5)(Sxe,5),t&2){let o;w(o=C())&&(n.headerContainer=o.first),w(o=C())&&(n.viewPort=o.first),w(o=C())&&(n.itemsWrapper=o.first),w(o=C())&&(n.itemsContainer=o.first),w(o=C())&&(n.selectedIndicator=o.first),w(o=C())&&(n.scrollPrevButton=o.first),w(o=C())&&(n.scrollNextButton=o.first)}},hostVars:2,hostBindings:function(t,n){t&2&&ee(`igx-tabs`,n.defaultClass)},inputs:{tabAlignment:`tabAlignment`,activation:`activation`},features:[Ae([{provide:W0,useExisting:i}]),pe],decls:20,vars:2,consts:[[`headerContainer`,``],[`scrollPrevButton`,``],[`viewPort`,``],[`itemsWrapper`,``],[`itemsContainer`,``],[`scrollNextButton`,``],[`selectedIndicator`,``],[1,`igx-tabs-header`],[`type`,`button`,`igxIconButton`,`flat`,`igxRipple`,``,`tabindex`,`-1`,1,`igx-tabs-header-button`,3,`click`],[`family`,`default`,`name`,`prev`],[1,`igx-tabs-header__content`],[`role`,`tablist`,1,`igx-tabs-header__wrapper`],[1,`igx-tabs-header-scroll`,3,`ngClass`],[1,`igx-tabs-header__active-indicator`],[`family`,`default`,`name`,`next`],[1,`igx-tabs-content`],[4,`ngTemplateOutlet`]],template:function(t,n){t&1&&(h(0,`div`,7,0)(2,`button`,8,1),E(`click`,function(){return n.scrollPrev()}),R(4,`igx-icon`,9),m(),h(5,`div`,10,2)(7,`div`,11,3)(9,`div`,12,4),_e(11,Cxe,1,1,`ng-container`,null,At),m(),b(13,Ixe,2,0,`div`,13),m()(),h(14,`button`,8,5),E(`click`,function(){return n.scrollNext()}),R(16,`igx-icon`,14),m()(),h(17,`div`,15),_e(18,Dxe,1,1,`ng-container`,null,At),m()),t&2&&(u(9),x(`ngClass`,n.resolveHeaderScrollClasses()),u(2),xe(n.items),u(2),S(n.items.length>0?13:-1),u(5),xe(n.items))},dependencies:[Bi,Pe,Vt,st,wn],styles:[`@layer ig.base{.igx-tabs{--%NS%nav-btn-border-color: var(--%NS%border-color);display:flex;flex-direction:column;overflow:hidden}} +`],encapsulation:2,changeDetection:1})}}return i})();var zV=(()=>{class i{static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵmod=Me({type:i})}static{this.ɵinj=Ee({imports:[Mxe]})}}return i})();var BV=(()=>{class i{static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵmod=Me({type:i})}static{this.ɵinj=Ee({})}}return i})();function HV(i){return new X(3e3,!1)}function Rxe(){return new X(3100,!1)}function Axe(){return new X(3101,!1)}function Fxe(i){return new X(3001,!1)}function Pxe(i){return new X(3003,!1)}function Oxe(i){return new X(3004,!1)}function UV(i,r){return new X(3005,!1)}function jV(){return new X(3006,!1)}function WV(){return new X(3007,!1)}function $V(i,r){return new X(3008,!1)}function qV(i){return new X(3002,!1)}function QV(i,r,e,t,n){return new X(3010,!1)}function KV(){return new X(3011,!1)}function YV(){return new X(3012,!1)}function ZV(){return new X(3200,!1)}function XV(){return new X(3202,!1)}function JV(){return new X(3013,!1)}function eL(i){return new X(3014,!1)}function tL(i){return new X(3015,!1)}function iL(i){return new X(3016,!1)}function nL(i,r){return new X(3404,!1)}function Vxe(i){return new X(3502,!1)}function rL(i){return new X(3503,!1)}function oL(){return new X(3300,!1)}function aL(i){return new X(3504,!1)}function sL(i){return new X(3301,!1)}function lL(i,r){return new X(3302,!1)}function cL(i){return new X(3303,!1)}function dL(i,r){return new X(3400,!1)}function uL(i){return new X(3401,!1)}function gL(i){return new X(3402,!1)}function pL(i,r){return new X(3505,!1)}function Cs(i){switch(i.length){case 0:return new ga;case 1:return i[0];default:return new mc(i)}}function qD(i,r,e=new Map,t=new Map){let n=[],o=[],a=-1,s=null;if(r.forEach(l=>{let c=l.get(`offset`),d=c==a,p=d&&s||new Map;l.forEach((f,v)=>{let y=v,T=f;if(v!==`offset`)switch(y=i.normalizePropertyName(y,n),T){case nu:T=e.get(v);break;case no:T=t.get(v);break;default:T=i.normalizeStyleValue(v,y,T,n);break}p.set(y,T)}),d||o.push(p),s=p,a=c}),n.length)throw Vxe(n);return o}function q0(i,r,e,t){switch(r){case`start`:i.onStart(()=>t(e&&jD(e,`start`,i)));break;case`done`:i.onDone(()=>t(e&&jD(e,`done`,i)));break;case`destroy`:i.onDestroy(()=>t(e&&jD(e,`destroy`,i)));break}}function jD(i,r,e){let t=e.totalTime,n=!!e.disabled,o=Q0(i.element,i.triggerName,i.fromState,i.toState,r||i.phaseName,t??i.totalTime,n),a=i._data;return a!=null&&(o._data=a),o}function Q0(i,r,e,t,n=``,o=0,a){return{element:i,triggerName:r,fromState:e,toState:t,phaseName:n,totalTime:o,disabled:!!a}}function Sr(i,r,e){let t=i.get(r);return t||i.set(r,t=e),t}function QD(i){let r=i.indexOf(`:`);return[i.substring(1,r),i.slice(r+1)]}var Lxe=typeof document>`u`?null:document.documentElement;function K0(i){let r=i.parentNode||i.host||null;return r===Lxe?null:r}function zxe(i){return i.substring(1,6)==`ebkit`}var Hc=null;var GV=!1;function hL(i){Hc||(Hc=Bxe()||{},GV=Hc.style?`WebkitAppearance`in Hc.style:!1);let r=!0;return Hc.style&&!zxe(i)&&(r=i in Hc.style,!r&&GV&&(r=`Webkit`+i.charAt(0).toUpperCase()+i.slice(1)in Hc.style)),r}function Bxe(){return typeof document<`u`?document.body:null}function KD(i,r){for(;r;){if(r===i)return!0;r=K0(r)}return!1}function YD(i,r,e){if(e)return Array.from(i.querySelectorAll(r));let t=i.querySelector(r);return t?[t]:[]}var Hxe=1e3;var ZD=`{{`;var Gxe=`}}`;var XD=`ng-enter`;var Y0=`ng-leave`;var Kh=`ng-trigger`;var Yh=`.ng-trigger`;var JD=`ng-animating`;var Z0=`.ng-animating`;function Ta(i){if(typeof i==`number`)return i;let r=i.match(/^(-?[\.\d]+)(m?s)/);return!r||r.length<2?0:WD(parseFloat(r[1]),r[2])}function WD(i,r){return r===`s`?i*Hxe:i}function Zh(i,r,e){return typeof i==`object`&&i!==null&&Object.hasOwn(i,`duration`)?i:jxe(i,r,e)}var Uxe=/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;function jxe(i,r,e){let t,n=0,o=``;if(typeof i==`string`){let a=i.match(Uxe);if(a===null)return r.push(HV(i)),{duration:0,delay:0,easing:``};t=WD(parseFloat(a[1]),a[2]);let s=a[3];s!=null&&(n=WD(parseFloat(s),a[4]));let l=a[5];l&&(o=l)}else t=i;if(!e){let a=!1,s=r.length;t<0&&(r.push(Rxe()),a=!0),n<0&&(r.push(Axe()),a=!0),a&&r.splice(s,0,HV(i))}return{duration:t,delay:n,easing:o}}function mL(i){return i.length?i[0]instanceof Map?i:i.map(r=>new Map(Object.entries(r))):[]}function Go(i,r,e){r.forEach((t,n)=>{let o=X0(n);e&&!e.has(n)&&e.set(n,i.style[o]),i.style[o]=t})}function xl(i,r){r.forEach((e,t)=>{let n=X0(t);i.style[n]=``})}function zu(i){return Array.isArray(i)?i.length==1?i[0]:Rx(i):i}function fL(i,r,e){let t=r.params||{},n=e2(i);n.length&&n.forEach(o=>{Object.hasOwn(t,o)||e.push(Fxe(o))})}var $D=new RegExp(`${ZD}\\s*(.+?)\\s*${Gxe}`,`g`);function e2(i){let r=[];if(typeof i==`string`){let e;for(;e=$D.exec(i);)r.push(e[1]);$D.lastIndex=0}return r}function Bu(i,r,e){let t=`${i}`,n=t.replace($D,(o,a)=>{let s=r[a];return s??(e.push(Pxe(a)),s=``),s.toString()});return n==t?i:n}var Wxe=/-+([a-z0-9])/g;function X0(i){return i.replace(Wxe,(...r)=>r[1].toUpperCase())}function _L(i,r){return i===0||r===0}function xL(i,r,e){if(e.size&&r.length){let t=r[0],n=[];if(e.forEach((o,a)=>{t.has(a)||n.push(a),t.set(a,o)}),n.length)for(let o=1;oa.set(s,J0(i,s)))}}return r}function wr(i,r,e){switch(r.type){case mt.Trigger:return i.visitTrigger(r,e);case mt.State:return i.visitState(r,e);case mt.Transition:return i.visitTransition(r,e);case mt.Sequence:return i.visitSequence(r,e);case mt.Group:return i.visitGroup(r,e);case mt.Animate:return i.visitAnimate(r,e);case mt.Keyframes:return i.visitKeyframes(r,e);case mt.Style:return i.visitStyle(r,e);case mt.Reference:return i.visitReference(r,e);case mt.AnimateChild:return i.visitAnimateChild(r,e);case mt.AnimateRef:return i.visitAnimateRef(r,e);case mt.Query:return i.visitQuery(r,e);case mt.Stagger:return i.visitStagger(r,e);default:throw Oxe(r.type)}}function J0(i,r){return window.getComputedStyle(i)[r]}var _2=(()=>{class i{validateStyleProperty(e){return hL(e)}containsElement(e,t){return KD(e,t)}getParentElement(e){return K0(e)}query(e,t,n){return YD(e,t,n)}computeStyle(e,t,n){return n||``}animate(e,t,n,o,a,s=[],l){return new ga(n,o)}static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:i.ɵfac})}return i})();var Uc=class{static NOOP=new _2};var jc=class{};var $xe=new Set([`width`,`height`,`minWidth`,`minHeight`,`maxWidth`,`maxHeight`,`left`,`top`,`bottom`,`right`,`fontSize`,`outlineWidth`,`outlineOffset`,`paddingTop`,`paddingLeft`,`paddingBottom`,`paddingRight`,`marginTop`,`marginLeft`,`marginBottom`,`marginRight`,`borderRadius`,`borderWidth`,`borderTopWidth`,`borderLeftWidth`,`borderRightWidth`,`borderBottomWidth`,`textIndent`,`perspective`]);var ry=class extends jc{normalizePropertyName(r,e){return X0(r)}normalizeStyleValue(r,e,t,n){let o=``,a=t.toString().trim();if($xe.has(e)&&t!==0&&t!==`0`)if(typeof t==`number`)o=`px`;else{let s=t.match(/^[+-]?[\d\.]+([a-z]*)$/);s&&s[1].length==0&&n.push(UV(r,t))}return a+o}};var oy=`*`;function qxe(i,r){let e=[];return typeof i==`string`?i.split(/\s*,\s*/).forEach(t=>Qxe(t,e,r)):e.push(i),e}function Qxe(i,r,e){if(i[0]==`:`){let l=Kxe(i,e);if(typeof l==`function`){r.push(l);return}i=l}let t=i.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/);if(t==null||t.length<4)return e.push(tL(i)),r;let n=t[1],o=t[2],a=t[3];r.push(vL(n,a));let s=n==oy&&a==oy;o[0]==`<`&&!s&&r.push(vL(a,n))}function Kxe(i,r){switch(i){case`:enter`:return`void => *`;case`:leave`:return`* => void`;case`:increment`:return(e,t)=>parseFloat(t)>parseFloat(e);case`:decrement`:return(e,t)=>parseFloat(t) *`}}var ey=new Set([`true`,`1`]);var ty=new Set([`false`,`0`]);function vL(i,r){let e=ey.has(i)||ty.has(i),t=ey.has(r)||ty.has(r);return(n,o)=>{let a=i==oy||i==n,s=r==oy||r==o;return!a&&e&&typeof n==`boolean`&&(a=n?ey.has(i):ty.has(i)),!s&&t&&typeof o==`boolean`&&(s=o?ey.has(r):ty.has(r)),a&&s}}var EL=`:self`;var Yxe=new RegExp(`s*${EL}s*,?`,`g`);function kL(i,r,e,t){return new a2(i).build(r,e,t)}var yL=``;var a2=class{_driver;constructor(r){this._driver=r}build(r,e,t){let n=new s2(e);return this._resetContextStyleTimingState(n),wr(this,zu(r),n)}_resetContextStyleTimingState(r){r.currentQuerySelector=yL,r.collectedStyles=new Map,r.collectedStyles.set(yL,new Map),r.currentTime=0}visitTrigger(r,e){let t=e.queryCount=0,n=e.depCount=0,o=[],a=[];return r.name.charAt(0)==`@`&&e.errors.push(jV()),r.definitions.forEach(s=>{if(this._resetContextStyleTimingState(e),s.type==mt.State){let l=s,c=l.name;c.toString().split(/\s*,\s*/).forEach(d=>{l.name=d,o.push(this.visitState(l,e))}),l.name=c}else if(s.type==mt.Transition){let l=this.visitTransition(s,e);t+=l.queryCount,n+=l.depCount,a.push(l)}else e.errors.push(WV())}),{type:mt.Trigger,name:r.name,states:o,transitions:a,queryCount:t,depCount:n,options:null}}visitState(r,e){let t=this.visitStyle(r.styles,e),n=r.options&&r.options.params||null;if(t.containsDynamicStyles){let o=new Set,a=n||{};t.styles.forEach(s=>{s instanceof Map&&s.forEach(l=>{e2(l).forEach(c=>{Object.hasOwn(a,c)||o.add(c)})})}),o.size&&e.errors.push($V(r.name,[...o.values()]))}return{type:mt.State,name:r.name,style:t,options:n?{params:n}:null}}visitTransition(r,e){e.queryCount=0,e.depCount=0;let t=wr(this,zu(r.animation),e),n=qxe(r.expr,e.errors);return{type:mt.Transition,matchers:n,animation:t,queryCount:e.queryCount,depCount:e.depCount,options:Gc(r.options)}}visitSequence(r,e){return{type:mt.Sequence,steps:r.steps.map(t=>wr(this,t,e)),options:Gc(r.options)}}visitGroup(r,e){let t=e.currentTime,n=0,o=r.steps.map(a=>{e.currentTime=t;let s=wr(this,a,e);return n=Math.max(n,e.currentTime),s});return e.currentTime=n,{type:mt.Group,steps:o,options:Gc(r.options)}}visitAnimate(r,e){let t=eve(r.timings,e.errors);e.currentAnimateTimings=t;let n,o=r.styles?r.styles:bt({});if(o.type==mt.Keyframes)n=this.visitKeyframes(o,e);else{let a=r.styles,s=!1;if(!a){s=!0;let c={};t.easing&&(c.easing=t.easing),a=bt(c)}e.currentTime+=t.duration+t.delay;let l=this.visitStyle(a,e);l.isEmptyStep=s,n=l}return e.currentAnimateTimings=null,{type:mt.Animate,timings:t,style:n,options:null}}visitStyle(r,e){let t=this._makeStyleAst(r,e);return this._validateStyleAst(t,e),t}_makeStyleAst(r,e){let t=[],n=Array.isArray(r.styles)?r.styles:[r.styles];for(let s of n)typeof s==`string`?s===no?t.push(s):e.errors.push(qV(s)):t.push(new Map(Object.entries(s)));let o=!1,a=null;return t.forEach(s=>{if(s instanceof Map&&(s.has(`easing`)&&(a=s.get(`easing`),s.delete(`easing`)),!o)){for(let l of s.values())if(l.toString().indexOf(ZD)>=0){o=!0;break}}}),{type:mt.Style,styles:t,easing:a,offset:r.offset,containsDynamicStyles:o,options:null}}_validateStyleAst(r,e){let t=e.currentAnimateTimings,n=e.currentTime,o=e.currentTime;t&&o>0&&(o-=t.duration+t.delay),r.styles.forEach(a=>{typeof a!=`string`&&a.forEach((s,l)=>{let c=e.collectedStyles.get(e.currentQuerySelector),d=c.get(l),p=!0;d&&(o!=n&&o>=d.startTime&&n<=d.endTime&&(e.errors.push(QV(l,d.startTime,d.endTime,o,n)),p=!1),o=d.startTime),p&&c.set(l,{startTime:o,endTime:n}),e.options&&fL(s,e.options,e.errors)})})}visitKeyframes(r,e){let t={type:mt.Keyframes,styles:[],options:null};if(!e.currentAnimateTimings)return e.errors.push(KV()),t;let n=1,o=0,a=[],s=!1,l=!1,c=0,d=r.steps.map(F=>{let A=this._makeStyleAst(F,e),W=A.offset!=null?A.offset:Jxe(A.styles),ie=0;return W!=null&&(o++,ie=A.offset=W),l=l||ie<0||ie>1,s=s||ie0&&o{let W=f>0?A==v?1:f*A:a[A],ie=W*M;e.currentTime=y+T.delay+ie,T.duration=ie,this._validateStyleAst(F,e),F.offset=W,t.styles.push(F)}),t}visitReference(r,e){return{type:mt.Reference,animation:wr(this,zu(r.animation),e),options:Gc(r.options)}}visitAnimateChild(r,e){return e.depCount++,{type:mt.AnimateChild,options:Gc(r.options)}}visitAnimateRef(r,e){return{type:mt.AnimateRef,animation:this.visitReference(r.animation,e),options:Gc(r.options)}}visitQuery(r,e){let t=e.currentQuerySelector,n=r.options||{};e.queryCount++,e.currentQuery=r;let[o,a]=Zxe(r.selector);e.currentQuerySelector=t.length?t+` `+o:o,Sr(e.collectedStyles,e.currentQuerySelector,new Map);let s=wr(this,zu(r.animation),e);return e.currentQuery=null,e.currentQuerySelector=t,{type:mt.Query,selector:o,limit:n.limit||0,optional:!!n.optional,includeSelf:a,animation:s,originalSelector:r.selector,options:Gc(r.options)}}visitStagger(r,e){e.currentQuery||e.errors.push(JV());let t=r.timings===`full`?{duration:0,delay:0,easing:`full`}:Zh(r.timings,e.errors,!0);return{type:mt.Stagger,animation:wr(this,zu(r.animation),e),timings:t,options:null}}};function Zxe(i){let r=!!i.split(/\s*,\s*/).find(e=>e==EL);return r&&(i=i.replace(Yxe,``)),i=i.replace(/@\*/g,Yh).replace(/@\w+/g,e=>Yh+`-`+e.slice(1)).replace(/:animating/g,Z0),[i,r]}function Xxe(i){return i?r({},i):null}var s2=class{errors;queryCount=0;depCount=0;currentTransition=null;currentQuery=null;currentQuerySelector=null;currentAnimateTimings=null;currentTime=0;collectedStyles=new Map;options=null;unsupportedCSSPropertiesFound=new Set;constructor(r){this.errors=r}};function Jxe(i){if(typeof i==`string`)return null;let r=null;if(Array.isArray(i))i.forEach(e=>{if(e instanceof Map&&e.has(`offset`)){let t=e;r=parseFloat(t.get(`offset`)),t.delete(`offset`)}});else if(i instanceof Map&&i.has(`offset`)){let e=i;r=parseFloat(e.get(`offset`)),e.delete(`offset`)}return r}function eve(i,r){if(typeof i==`object`&&i!==null&&Object.hasOwn(i,`duration`))return i;if(typeof i==`number`){let o=Zh(i,r).duration;return t2(o,0,``)}let e=i;if(e.split(/\s+/).some(o=>o.charAt(0)==`{`&&o.charAt(1)==`{`)){let o=t2(0,0,``);return o.dynamic=!0,o.strValue=e,o}let n=Zh(e,r);return t2(n.duration,n.delay,n.easing)}function Gc(i){return i?(i=r({},i),i.params&&(i.params=Xxe(i.params))):i={},i}function t2(i,r,e){return{duration:i,delay:r,easing:e}}function x2(i,r,e,t,n,o,a=null,s=!1){return{type:1,element:i,keyframes:r,preStyleProps:e,postStyleProps:t,duration:n,delay:o,totalTime:n+o,easing:a,subTimeline:s}}var Jh=class{_map=new Map;get(r){return this._map.get(r)||[]}append(r,e){let t=this._map.get(r);t||this._map.set(r,t=[]),t.push(...e)}has(r){return this._map.has(r)}clear(){this._map.clear()}};var tve=1;var nve=new RegExp(`:enter`,`g`);var ove=new RegExp(`:leave`,`g`);function ML(i,r,e,t,n,o=new Map,a=new Map,s,l,c=[]){return new l2().buildKeyframes(i,r,e,t,n,o,a,s,l,c)}var l2=class{buildKeyframes(r,e,t,n,o,a,s,l,c,d=[]){c=c||new Jh;let p=new c2(r,e,c,n,o,d,[]);p.options=l;let f=l.delay?Ta(l.delay):0;p.currentTimeline.delayNextStep(f),p.currentTimeline.setStyles([a],null,p.errors,l),wr(this,t,p);let v=p.timelines.filter(y=>y.containsAnimation());if(v.length&&s.size){let y;for(let T=v.length-1;T>=0;T--){let M=v[T];if(M.element===e){y=M;break}}y&&!y.allowOnlyTimelineStyles()&&y.setStyles([s],null,p.errors,l)}return v.length?v.map(y=>y.buildKeyframes()):[x2(e,[],[],[],0,f,``,!1)]}visitTrigger(r,e){}visitState(r,e){}visitTransition(r,e){}visitAnimateChild(r,e){let t=e.subInstructions.get(e.element);if(t){let n=e.createSubContext(r.options),o=e.currentTimeline.currentTime,a=this._visitSubInstructions(t,n,n.options);o!=a&&e.transformIntoNewTimeline(a)}e.previousNode=r}visitAnimateRef(r,e){let t=e.createSubContext(r.options);t.transformIntoNewTimeline(),this._applyAnimationRefDelays([r.options,r.animation.options],e,t),this.visitReference(r.animation,t),e.transformIntoNewTimeline(t.currentTimeline.currentTime),e.previousNode=r}_applyAnimationRefDelays(r,e,t){for(let n of r){let o=n?.delay;if(o){let a=typeof o==`number`?o:Ta(Bu(o,n?.params??{},e.errors));t.delayNextStep(a)}}}_visitSubInstructions(r,e,t){let o=e.currentTimeline.currentTime,a=t.duration!=null?Ta(t.duration):null,s=t.delay!=null?Ta(t.delay):null;return a!==0&&r.forEach(l=>{let c=e.appendInstructionToTimeline(l,a,s);o=Math.max(o,c.duration+c.delay)}),o}visitReference(r,e){e.updateOptions(r.options,!0),wr(this,r.animation,e),e.previousNode=r}visitSequence(r,e){let t=e.subContextCount,n=e,o=r.options;if(o&&(o.params||o.delay)&&(n=e.createSubContext(o),n.transformIntoNewTimeline(),o.delay!=null)){n.previousNode.type==mt.Style&&(n.currentTimeline.snapshotCurrentStyles(),n.previousNode=ay);let a=Ta(o.delay);n.delayNextStep(a)}r.steps.length&&(r.steps.forEach(a=>wr(this,a,n)),n.currentTimeline.applyStylesToKeyframe(),n.subContextCount>t&&n.transformIntoNewTimeline()),e.previousNode=r}visitGroup(r,e){let t=[],n=e.currentTimeline.currentTime,o=r.options&&r.options.delay?Ta(r.options.delay):0;r.steps.forEach(a=>{let s=e.createSubContext(r.options);o&&s.delayNextStep(o),wr(this,a,s),n=Math.max(n,s.currentTimeline.currentTime),t.push(s.currentTimeline)}),t.forEach(a=>e.currentTimeline.mergeTimelineCollectedStyles(a)),e.transformIntoNewTimeline(n),e.previousNode=r}_visitTiming(r,e){if(r.dynamic){let t=r.strValue;return Zh(e.params?Bu(t,e.params,e.errors):t,e.errors)}else return{duration:r.duration,delay:r.delay,easing:r.easing}}visitAnimate(r,e){let t=e.currentAnimateTimings=this._visitTiming(r.timings,e),n=e.currentTimeline;t.delay&&(e.incrementTime(t.delay),n.snapshotCurrentStyles());let o=r.style;o.type==mt.Keyframes?this.visitKeyframes(o,e):(e.incrementTime(t.duration),this.visitStyle(o,e),n.applyStylesToKeyframe()),e.currentAnimateTimings=null,e.previousNode=r}visitStyle(r,e){let t=e.currentTimeline,n=e.currentAnimateTimings;!n&&t.hasCurrentStyleProperties()&&t.forwardFrame();let o=n&&n.easing||r.easing;r.isEmptyStep?t.applyEmptyStep(o):t.setStyles(r.styles,o,e.errors,e.options),e.previousNode=r}visitKeyframes(r,e){let t=e.currentAnimateTimings,n=e.currentTimeline.duration,o=t.duration,s=e.createSubContext().currentTimeline;s.easing=t.easing,r.styles.forEach(l=>{let c=l.offset||0;s.forwardTime(c*o),s.setStyles(l.styles,l.easing,e.errors,e.options),s.applyStylesToKeyframe()}),e.currentTimeline.mergeTimelineCollectedStyles(s),e.transformIntoNewTimeline(n+o),e.previousNode=r}visitQuery(r,e){let t=e.currentTimeline.currentTime,n=r.options||{},o=n.delay?Ta(n.delay):0;o&&(e.previousNode.type===mt.Style||t==0&&e.currentTimeline.hasCurrentStyleProperties())&&(e.currentTimeline.snapshotCurrentStyles(),e.previousNode=ay);let a=t,s=e.invokeQuery(r.selector,r.originalSelector,r.limit,r.includeSelf,!!n.optional,e.errors);e.currentQueryTotal=s.length;let l=null;s.forEach((c,d)=>{e.currentQueryIndex=d;let p=e.createSubContext(r.options,c);o&&p.delayNextStep(o),c===e.element&&(l=p.currentTimeline),wr(this,r.animation,p),p.currentTimeline.applyStylesToKeyframe();let f=p.currentTimeline.currentTime;a=Math.max(a,f)}),e.currentQueryIndex=0,e.currentQueryTotal=0,e.transformIntoNewTimeline(a),l&&(e.currentTimeline.mergeTimelineCollectedStyles(l),e.currentTimeline.snapshotCurrentStyles()),e.previousNode=r}visitStagger(r,e){let t=e.parentContext,n=e.currentTimeline,o=r.timings,a=Math.abs(o.duration),s=a*(e.currentQueryTotal-1),l=a*e.currentQueryIndex;switch(o.duration<0?`reverse`:o.easing){case`reverse`:l=s-l;break;case`full`:l=t.currentStaggerTime;break}let d=e.currentTimeline;l&&d.delayNextStep(l);let p=d.currentTime;wr(this,r.animation,e),e.previousNode=r,t.currentStaggerTime=n.currentTime-p+(n.startTime-t.currentTimeline.startTime)}};var ay={};var c2=class i{_driver;element;subInstructions;_enterClassName;_leaveClassName;errors;timelines;parentContext=null;currentTimeline;currentAnimateTimings=null;previousNode=ay;subContextCount=0;options={};currentQueryIndex=0;currentQueryTotal=0;currentStaggerTime=0;constructor(r,e,t,n,o,a,s,l){this._driver=r,this.element=e,this.subInstructions=t,this._enterClassName=n,this._leaveClassName=o,this.errors=a,this.timelines=s,this.currentTimeline=l||new sy(this._driver,e,0),s.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(r,e){if(!r)return;let t=r,n=this.options;t.duration!=null&&(n.duration=Ta(t.duration)),t.delay!=null&&(n.delay=Ta(t.delay));let o=t.params;if(o){let a=n.params;a||(a=this.options.params={}),Object.keys(o).forEach(s=>{(!e||!Object.hasOwn(a,s))&&(a[s]=Bu(o[s],a,this.errors))})}}_copyOptions(){let r={};if(this.options){let e=this.options.params;if(e){let t=r.params={};Object.keys(e).forEach(n=>{t[n]=e[n]})}}return r}createSubContext(r=null,e,t){let n=e||this.element,o=new i(this._driver,n,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(n,t||0));return o.previousNode=this.previousNode,o.currentAnimateTimings=this.currentAnimateTimings,o.options=this._copyOptions(),o.updateOptions(r),o.currentQueryIndex=this.currentQueryIndex,o.currentQueryTotal=this.currentQueryTotal,o.parentContext=this,this.subContextCount++,o}transformIntoNewTimeline(r){return this.previousNode=ay,this.currentTimeline=this.currentTimeline.fork(this.element,r),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(r,e,t){let n={duration:e??r.duration,delay:this.currentTimeline.currentTime+(t??0)+r.delay,easing:``},o=new d2(this._driver,r.element,r.keyframes,r.preStyleProps,r.postStyleProps,n,r.stretchStartingKeyframe);return this.timelines.push(o),n}incrementTime(r){this.currentTimeline.forwardTime(this.currentTimeline.duration+r)}delayNextStep(r){r>0&&this.currentTimeline.delayNextStep(r)}invokeQuery(r,e,t,n,o,a){let s=[];if(n&&s.push(this.element),r.length>0){r=r.replace(nve,`.`+this._enterClassName),r=r.replace(ove,`.`+this._leaveClassName);let l=t!=1,c=this._driver.query(this.element,r,l);t!==0&&(c=t<0?c.slice(c.length+t,c.length):c.slice(0,t)),s.push(...c)}return!o&&s.length==0&&a.push(eL(e)),s}};var sy=class i{_driver;element;startTime;_elementTimelineStylesLookup;duration=0;easing=null;_previousKeyframe=new Map;_currentKeyframe=new Map;_keyframes=new Map;_styleSummary=new Map;_localTimelineStyles=new Map;_globalTimelineStyles;_pendingStyles=new Map;_backFill=new Map;_currentEmptyStepKeyframe=null;constructor(r,e,t,n){this._driver=r,this.element=e,this.startTime=t,this._elementTimelineStylesLookup=n,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(e),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(e,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(r){let e=this._keyframes.size===1&&this._pendingStyles.size;this.duration||e?(this.forwardTime(this.currentTime+r),e&&this.snapshotCurrentStyles()):this.startTime+=r}fork(r,e){return this.applyStylesToKeyframe(),new i(this._driver,r,e||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=tve,this._loadKeyframe()}forwardTime(r){this.applyStylesToKeyframe(),this.duration=r,this._loadKeyframe()}_updateStyle(r,e){this._localTimelineStyles.set(r,e),this._globalTimelineStyles.set(r,e),this._styleSummary.set(r,{time:this.currentTime,value:e})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(r){r&&this._previousKeyframe.set(`easing`,r);for(let[e,t]of this._globalTimelineStyles)this._backFill.set(e,t||no),this._currentKeyframe.set(e,no);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(r,e,t,n){e&&this._previousKeyframe.set(`easing`,e);let o=n&&n.params||{},a=ave(r,this._globalTimelineStyles);for(let[s,l]of a){let c=Bu(l,o,t);this._pendingStyles.set(s,c),this._localTimelineStyles.has(s)||this._backFill.set(s,this._globalTimelineStyles.get(s)??no),this._updateStyle(s,c)}}applyStylesToKeyframe(){this._pendingStyles.size!=0&&(this._pendingStyles.forEach((r,e)=>{this._currentKeyframe.set(e,r)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((r,e)=>{this._currentKeyframe.has(e)||this._currentKeyframe.set(e,r)}))}snapshotCurrentStyles(){for(let[r,e]of this._localTimelineStyles)this._pendingStyles.set(r,e),this._updateStyle(r,e)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){let r=[];for(let e in this._currentKeyframe)r.push(e);return r}mergeTimelineCollectedStyles(r){r._styleSummary.forEach((e,t)=>{let n=this._styleSummary.get(t);(!n||e.time>n.time)&&this._updateStyle(t,e.value)})}buildKeyframes(){this.applyStylesToKeyframe();let r=new Set,e=new Set,t=this._keyframes.size===1&&this.duration===0,n=[];this._keyframes.forEach((s,l)=>{let c=new Map([...this._backFill,...s]);c.forEach((d,p)=>{d===nu?r.add(p):d===no&&e.add(p)}),t||c.set(`offset`,l/this.duration),n.push(c)});let o=[...r.values()],a=[...e.values()];if(t){let s=n[0],l=new Map(s);s.set(`offset`,0),l.set(`offset`,1),n=[s,l]}return x2(this.element,n,o,a,this.duration,this.startTime,this.easing,!1)}};var d2=class extends sy{keyframes;preStyleProps;postStyleProps;_stretchStartingKeyframe;timings;constructor(r,e,t,n,o,a,s=!1){super(r,e,a.delay),this.keyframes=t,this.preStyleProps=n,this.postStyleProps=o,this._stretchStartingKeyframe=s,this.timings={duration:a.duration,delay:a.delay,easing:a.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let r=this.keyframes,{delay:e,duration:t,easing:n}=this.timings;if(this._stretchStartingKeyframe&&e){let o=[],a=t+e,s=e/a,l=new Map(r[0]);l.set(`offset`,0),o.push(l);let c=new Map(r[0]);c.set(`offset`,bL(s)),o.push(c);let d=r.length-1;for(let p=1;p<=d;p++){let f=new Map(r[p]),v=f.get(`offset`),y=e+v*t;f.set(`offset`,bL(y/a)),o.push(f)}t=a,e=0,n=``,r=o}return x2(this.element,r,this.preStyleProps,this.postStyleProps,t,e,n,!0)}};function bL(i,r=3){let e=Math.pow(10,r-1);return Math.round(i*e)/e}function ave(i,r){let e=new Map,t;return i.forEach(n=>{if(n===`*`){t??=r.keys();for(let o of t)e.set(o,no)}else for(let[o,a]of n)e.set(o,a)}),e}function SL(i,r,e,t,n,o,a,s,l,c,d,p,f){return{type:0,element:i,triggerName:r,isRemovalTransition:n,fromState:e,fromStyles:o,toState:t,toStyles:a,timelines:s,queriedElements:l,preStyleProps:c,postStyleProps:d,totalTime:p,errors:f}}var i2={};var ly=class{_triggerName;ast;_stateStyles;constructor(r,e,t){this._triggerName=r,this.ast=e,this._stateStyles=t}match(r,e,t,n){return sve(this.ast.matchers,r,e,t,n)}buildStyles(r,e,t){let n=this._stateStyles.get(`*`);return r!==void 0&&(n=this._stateStyles.get(r?.toString())||n),n?n.buildStyles(e,t):new Map}build(r,e,t,n,o,a,s,l,c,d){let p=[],f=this.ast.options&&this.ast.options.params||i2,v=s&&s.params||i2,y=this.buildStyles(t,v,p),T=l&&l.params||i2,M=this.buildStyles(n,T,p),F=new Set,A=new Map,W=new Map,ie=n===`void`,oe={params:RL(T,f),delay:this.ast.options?.delay},H=d?[]:ML(r,e,this.ast.animation,o,a,y,M,oe,c,p),K=0;return H.forEach(ve=>{K=Math.max(ve.duration+ve.delay,K)}),p.length?SL(e,this._triggerName,t,n,ie,y,M,[],[],A,W,K,p):(H.forEach(ve=>{let it=ve.element,Le=Sr(A,it,new Set);ve.preStyleProps.forEach(Ce=>Le.add(Ce));let at=Sr(W,it,new Set);ve.postStyleProps.forEach(Ce=>at.add(Ce)),it!==e&&F.add(it)}),SL(e,this._triggerName,t,n,ie,y,M,H,[...F.values()],A,W,K))}};function sve(i,r,e,t,n){return i.some(o=>o(r,e,t,n))}function RL(i,r$19){let e=r({},r$19);return Object.entries(i).forEach(([t,n])=>{n!=null&&(e[t]=n)}),e}var u2=class{styles;defaultParams;normalizer;constructor(r,e,t){this.styles=r,this.defaultParams=e,this.normalizer=t}buildStyles(r,e){let t=new Map,n=RL(r,this.defaultParams);return this.styles.styles.forEach(o=>{typeof o!=`string`&&o.forEach((a,s)=>{a&&(a=Bu(a,n,e));let l=this.normalizer.normalizePropertyName(s,e);a=this.normalizer.normalizeStyleValue(s,l,a,e),t.set(s,a)})}),t}};function lve(i,r,e){return new g2(i,r,e)}var g2=class{name;ast;_normalizer;transitionFactories=[];fallbackTransition;states=new Map;constructor(r,e,t){this.name=r,this.ast=e,this._normalizer=t,e.states.forEach(n=>{let o=n.options&&n.options.params||{};this.states.set(n.name,new u2(n.style,o,t))}),wL(this.states,`true`,`1`),wL(this.states,`false`,`0`),e.transitions.forEach(n=>{this.transitionFactories.push(new ly(r,n,this.states))}),this.fallbackTransition=cve(r,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(r,e,t,n){return this.transitionFactories.find(a=>a.match(r,e,t,n))||null}matchStyles(r,e,t){return this.fallbackTransition.buildStyles(r,e,t)}};function cve(i,r,e){let t=[(a,s)=>!0],n={type:mt.Sequence,steps:[],options:null};return new ly(i,{type:mt.Transition,animation:n,matchers:t,options:null,queryCount:0,depCount:0},r)}function wL(i,r,e){i.has(r)?i.has(e)||i.set(e,i.get(r)):i.has(e)&&i.set(r,i.get(e))}var dve=new Jh;var p2=class{bodyNode;_driver;_normalizer;_animations=new Map;_playersById=new Map;players=[];constructor(r,e,t){this.bodyNode=r,this._driver=e,this._normalizer=t}register(r,e){let t=[],o=kL(this._driver,e,t,[]);if(t.length)throw rL(t);this._animations.set(r,o)}_buildPlayer(r,e,t){let n=r.element,o=qD(this._normalizer,r.keyframes,e,t);return this._driver.animate(n,o,r.duration,r.delay,r.easing,[],!0)}create(r,e,t={}){let n=[],o=this._animations.get(r),a,s=new Map;if(o?(a=ML(this._driver,e,o,XD,Y0,new Map,new Map,t,dve,n),a.forEach(d=>{let p=Sr(s,d.element,new Map);d.postStyleProps.forEach(f=>p.set(f,null))})):(n.push(oL()),a=[]),n.length)throw aL(n);s.forEach((d,p)=>{d.forEach((f,v)=>{d.set(v,this._driver.computeStyle(p,v,no))})});let c=Cs(a.map(d=>{let p=s.get(d.element);return this._buildPlayer(d,new Map,p)}));return this._playersById.set(r,c),c.onDestroy(()=>this.destroy(r)),this.players.push(c),c}destroy(r){let e=this._getPlayer(r);e.destroy(),this._playersById.delete(r);let t=this.players.indexOf(e);t>=0&&this.players.splice(t,1)}_getPlayer(r){let e=this._playersById.get(r);if(!e)throw sL(r);return e}listen(r,e,t,n){let o=Q0(e,``,``,``);return q0(this._getPlayer(r),t,o,n),()=>{}}command(r,e,t,n){if(t==`register`){this.register(r,n[0]);return}if(t==`create`){let a=n[0]||{};this.create(r,e,a);return}let o=this._getPlayer(r);switch(t){case`play`:o.play();break;case`pause`:o.pause();break;case`reset`:o.reset();break;case`restart`:o.restart();break;case`finish`:o.finish();break;case`init`:o.init();break;case`setPosition`:o.setPosition(parseFloat(n[0]));break;case`destroy`:this.destroy(r);break}}};var CL=`ng-animate-queued`;var uve=`.ng-animate-queued`;var n2=`ng-animate-disabled`;var gve=`.ng-animate-disabled`;var pve=`ng-star-inserted`;var hve=`.ng-star-inserted`;var mve=[];var AL={namespaceId:``,setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1};var fve={namespaceId:``,setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0};var Uo=`__ng_removed`;var em=class{namespaceId;value;options;get params(){return this.options.params}constructor(r,e=``){this.namespaceId=e;let t$2=r&&Object.hasOwn(r,`value`),n=t$2?r.value:r;if(this.value=xve(n),t$2){let o=r,{value:a}=o,s=t(o,[`value`]);this.options=s}else this.options={};this.options.params||(this.options.params={})}absorbOptions(r){let e=r.params;if(e){let t=this.options.params;Object.keys(e).forEach(n=>{t[n]??(t[n]=e[n])})}}};var Xh=`void`;var r2=new em(Xh);var h2=class{id;hostElement;_engine;players=[];_triggers=new Map;_queue=[];_elementListeners=new Map;_hostClassName;constructor(r,e,t){this.id=r,this.hostElement=e,this._engine=t,this._hostClassName=`ng-tns-`+r,uo(e,this._hostClassName)}listen(r,e,t,n){if(!this._triggers.has(e))throw lL(t,e);if(t==null||t.length==0)throw cL(e);if(!vve(t))throw dL(t,e);let o=Sr(this._elementListeners,r,[]),a={name:e,phase:t,callback:n};o.push(a);let s=Sr(this._engine.statesByElement,r,new Map);return s.has(e)||(uo(r,Kh),uo(r,Kh+`-`+e),s.set(e,r2)),()=>{this._engine.afterFlush(()=>{let l=o.indexOf(a);l>=0&&o.splice(l,1),this._triggers.has(e)||s.delete(e)})}}register(r,e){return this._triggers.has(r)?!1:(this._triggers.set(r,e),!0)}_getTrigger(r){let e=this._triggers.get(r);if(!e)throw uL(r);return e}trigger(r,e,t,n=!0){let o=this._getTrigger(e),a=new tm(this.id,e,r),s=this._engine.statesByElement.get(r);s||(uo(r,Kh),uo(r,Kh+`-`+e),this._engine.statesByElement.set(r,s=new Map));let l=s.get(e),c=new em(t,this.id);if(!(t&&Object.hasOwn(t,`value`))&&l&&c.absorbOptions(l.options),s.set(e,c),l||(l=r2),!(c.value===Xh)&&l.value===c.value){if(!Sve(l.params,c.params)){let T=[],M=o.matchStyles(l.value,l.params,T),F=o.matchStyles(c.value,c.params,T);T.length?this._engine.reportError(T):this._engine.afterFlush(()=>{xl(r,M),Go(r,F)})}return}let f=Sr(this._engine.playersByElement,r,[]);f.forEach(T=>{T.namespaceId==this.id&&T.triggerName==e&&T.queued&&T.destroy()});let v=o.matchTransition(l.value,c.value,r,c.params),y=!1;if(!v){if(!n)return;v=o.fallbackTransition,y=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:r,triggerName:e,transition:v,fromState:l,toState:c,player:a,isFallbackTransition:y}),y||(uo(r,CL),a.onStart(()=>{Hu(r,CL)})),a.onDone(()=>{let T=this.players.indexOf(a);T>=0&&this.players.splice(T,1);let M=this._engine.playersByElement.get(r);if(M){let F=M.indexOf(a);F>=0&&M.splice(F,1)}}),this.players.push(a),f.push(a),a}deregister(r){this._triggers.delete(r),this._engine.statesByElement.forEach(e=>e.delete(r)),this._elementListeners.forEach((e,t)=>{this._elementListeners.set(t,e.filter(n=>n.name!=r))})}clearElementCache(r){this._engine.statesByElement.delete(r),this._elementListeners.delete(r);let e=this._engine.playersByElement.get(r);e&&(e.forEach(t=>t.destroy()),this._engine.playersByElement.delete(r))}_signalRemovalForInnerTriggers(r,e){let t=this._engine.driver.query(r,Yh,!0);t.forEach(n=>{if(n[Uo])return;let o=this._engine.fetchNamespacesByElement(n);o.size?o.forEach(a=>a.triggerLeaveAnimation(n,e,!1,!0)):this.clearElementCache(n)}),this._engine.afterFlushAnimationsDone(()=>t.forEach(n=>this.clearElementCache(n)))}triggerLeaveAnimation(r,e,t,n){let o=this._engine.statesByElement.get(r),a=new Map;if(o){let s=[];if(o.forEach((l,c)=>{if(a.set(c,l.value),this._triggers.has(c)){let d=this.trigger(r,c,Xh,n);d&&s.push(d)}}),s.length)return this._engine.markElementAsRemoved(this.id,r,!0,e,a),t&&Cs(s).onDone(()=>this._engine.processLeaveNode(r)),!0}return!1}prepareLeaveAnimationListeners(r){let e=this._elementListeners.get(r),t=this._engine.statesByElement.get(r);if(e&&t){let n=new Set;e.forEach(o=>{let a=o.name;if(n.has(a))return;n.add(a);let l=this._triggers.get(a).fallbackTransition,c=t.get(a)||r2,d=new em(Xh),p=new tm(this.id,a,r);this._engine.totalQueuedPlayers++,this._queue.push({element:r,triggerName:a,transition:l,fromState:c,toState:d,player:p,isFallbackTransition:!0})})}}removeNode(r,e){let t=this._engine;if(r.childElementCount&&this._signalRemovalForInnerTriggers(r,e),this.triggerLeaveAnimation(r,e,!0))return;let n=!1;if(t.totalAnimations){let o=t.players.length?t.playersByQueriedElement.get(r):[];if(o&&o.length)n=!0;else{let a=r;for(;a=a.parentNode;)if(t.statesByElement.get(a)){n=!0;break}}}if(this.prepareLeaveAnimationListeners(r),n)t.markElementAsRemoved(this.id,r,!1,e);else{let o=r[Uo];(!o||o===AL)&&(t.afterFlush(()=>this.clearElementCache(r)),t.destroyInnerAnimations(r),t._onRemovalComplete(r,e))}}insertNode(r,e){uo(r,this._hostClassName)}drainQueuedTransitions(r){let e=[];return this._queue.forEach(t=>{let n=t.player;if(n.destroyed)return;let o=t.element,a=this._elementListeners.get(o);a&&a.forEach(s=>{if(s.name==t.triggerName){let l=Q0(o,t.triggerName,t.fromState.value,t.toState.value);l._data=r,q0(t.player,s.phase,l,s.callback)}}),n.markedForDestroy?this._engine.afterFlush(()=>{n.destroy()}):e.push(t)}),this._queue=[],e.sort((t,n)=>{let o=t.transition.ast.depCount,a=n.transition.ast.depCount;return o==0||a==0?o-a:this._engine.driver.containsElement(t.element,n.element)?1:-1})}destroy(r){this.players.forEach(e=>e.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,r)}};var m2=class{bodyNode;driver;_normalizer;players=[];newHostElements=new Map;playersByElement=new Map;playersByQueriedElement=new Map;statesByElement=new Map;disabledNodes=new Set;totalAnimations=0;totalQueuedPlayers=0;_namespaceLookup={};_namespaceList=[];_flushFns=[];_whenQuietFns=[];namespacesByHostElement=new Map;collectedEnterElements=[];collectedLeaveElements=[];onRemovalComplete=(r,e)=>{};_onRemovalComplete(r,e){this.onRemovalComplete(r,e)}constructor(r,e,t){this.bodyNode=r,this.driver=e,this._normalizer=t}get queuedPlayers(){let r=[];return this._namespaceList.forEach(e=>{e.players.forEach(t=>{t.queued&&r.push(t)})}),r}createNamespace(r,e){let t=new h2(r,e,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,e)?this._balanceNamespaceList(t,e):(this.newHostElements.set(e,t),this.collectEnterElement(e)),this._namespaceLookup[r]=t}_balanceNamespaceList(r,e){let t=this._namespaceList,n=this.namespacesByHostElement;if(t.length-1>=0){let a=!1,s=this.driver.getParentElement(e);for(;s;){let l=n.get(s);if(l){let c=t.indexOf(l);t.splice(c+1,0,r),a=!0;break}s=this.driver.getParentElement(s)}a||t.unshift(r)}else t.push(r);return n.set(e,r),r}register(r,e){let t=this._namespaceLookup[r];return t||(t=this.createNamespace(r,e)),t}registerTrigger(r,e,t){let n=this._namespaceLookup[r];n&&n.register(e,t)&&this.totalAnimations++}destroy(r,e){r&&(this.afterFlush(()=>{}),this.afterFlushAnimationsDone(()=>{let t=this._fetchNamespace(r);this.namespacesByHostElement.delete(t.hostElement);let n=this._namespaceList.indexOf(t);n>=0&&this._namespaceList.splice(n,1),t.destroy(e),delete this._namespaceLookup[r]}))}_fetchNamespace(r){return this._namespaceLookup[r]}fetchNamespacesByElement(r){let e=new Set,t=this.statesByElement.get(r);if(t){for(let n of t.values())if(n.namespaceId){let o=this._fetchNamespace(n.namespaceId);o&&e.add(o)}}return e}trigger(r,e,t,n){if(iy(e)){let o=this._fetchNamespace(r);if(o)return o.trigger(e,t,n),!0}return!1}insertNode(r,e,t,n){if(!iy(e))return;let o=e[Uo];if(o&&o.setForRemoval){o.setForRemoval=!1,o.setForMove=!0;let a=this.collectedLeaveElements.indexOf(e);a>=0&&this.collectedLeaveElements.splice(a,1)}if(r){let a=this._fetchNamespace(r);a&&a.insertNode(e,t)}n&&this.collectEnterElement(e)}collectEnterElement(r){this.collectedEnterElements.push(r)}markElementAsDisabled(r,e){e?this.disabledNodes.has(r)||(this.disabledNodes.add(r),uo(r,n2)):this.disabledNodes.has(r)&&(this.disabledNodes.delete(r),Hu(r,n2))}removeNode(r,e,t){if(iy(e)){let n=r?this._fetchNamespace(r):null;n?n.removeNode(e,t):this.markElementAsRemoved(r,e,!1,t);let o=this.namespacesByHostElement.get(e);o&&o.id!==r&&o.removeNode(e,t)}else this._onRemovalComplete(e,t)}markElementAsRemoved(r,e,t,n,o){this.collectedLeaveElements.push(e),e[Uo]={namespaceId:r,setForRemoval:n,hasAnimation:t,removedBeforeQueried:!1,previousTriggersValues:o}}listen(r,e,t,n,o){return iy(e)?this._fetchNamespace(r).listen(e,t,n,o):()=>{}}_buildInstruction(r,e,t,n,o){return r.transition.build(this.driver,r.element,r.fromState.value,r.toState.value,t,n,r.fromState.options,r.toState.options,e,o)}destroyInnerAnimations(r){let e=this.driver.query(r,Yh,!0);e.forEach(t=>this.destroyActiveAnimationsForElement(t)),this.playersByQueriedElement.size!=0&&(e=this.driver.query(r,Z0,!0),e.forEach(t=>this.finishActiveQueriedAnimationOnElement(t)))}destroyActiveAnimationsForElement(r){let e=this.playersByElement.get(r);e&&e.forEach(t=>{t.queued?t.markedForDestroy=!0:t.destroy()})}finishActiveQueriedAnimationOnElement(r){let e=this.playersByQueriedElement.get(r);e&&e.forEach(t=>t.finish())}whenRenderingDone(){return new Promise(r=>{if(this.players.length)return Cs(this.players).onDone(()=>r());r()})}processLeaveNode(r){let e=r[Uo];if(e&&e.setForRemoval){if(r[Uo]=AL,e.namespaceId){this.destroyInnerAnimations(r);let t=this._fetchNamespace(e.namespaceId);t&&t.clearElementCache(r)}this._onRemovalComplete(r,e.setForRemoval)}r.classList?.contains(n2)&&this.markElementAsDisabled(r,!1),this.driver.query(r,gve,!0).forEach(t=>{this.markElementAsDisabled(t,!1)})}flush(r=-1){let e=[];if(this.newHostElements.size&&(this.newHostElements.forEach((t,n)=>this._balanceNamespaceList(t,n)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let t=0;tt()),this._flushFns=[],this._whenQuietFns.length){let t=this._whenQuietFns;this._whenQuietFns=[],e.length?Cs(e).onDone(()=>{t.forEach(n=>n())}):t.forEach(n=>n())}}reportError(r){throw gL(r)}_flushAnimations(r,e){let t=new Jh,n=[],o=new Map,a=[],s=new Map,l=new Map,c=new Map,d=new Set;this.disabledNodes.forEach(ye=>{d.add(ye);let Fe=this.driver.query(ye,uve,!0);for(let Re=0;Re{let Re=XD+T++;y.set(Fe,Re),ye.forEach(Ve=>uo(Ve,Re))});let M=[],F=new Set,A=new Set;for(let ye=0;yeF.add(Ve)):A.add(Fe))}let W=new Map,ie=DL(f,Array.from(F));ie.forEach((ye,Fe)=>{let Re=Y0+T++;W.set(Fe,Re),ye.forEach(Ve=>uo(Ve,Re))}),r.push(()=>{v.forEach((ye,Fe)=>{let Re=y.get(Fe);ye.forEach(Ve=>Hu(Ve,Re))}),ie.forEach((ye,Fe)=>{let Re=W.get(Fe);ye.forEach(Ve=>Hu(Ve,Re))}),M.forEach(ye=>{this.processLeaveNode(ye)})});let oe=[],H=[];for(let ye=this._namespaceList.length-1;ye>=0;ye--)this._namespaceList[ye].drainQueuedTransitions(e).forEach(Re=>{let Ve=Re.player,kt=Re.element;if(oe.push(Ve),this.collectedEnterElements.length){let Fi=kt[Uo];if(Fi&&Fi.setForMove){if(Fi.previousTriggersValues&&Fi.previousTriggersValues.has(Re.triggerName)){let Sl=Fi.previousTriggersValues.get(Re.triggerName),Wr=this.statesByElement.get(Re.element);if(Wr&&Wr.has(Re.triggerName)){let ym=Wr.get(Re.triggerName);ym.value=Sl,Wr.set(Re.triggerName,ym)}}Ve.destroy();return}}let Ai=!p||!this.driver.containsElement(p,kt),Tn=W.get(kt),Jn=y.get(kt),$t=this._buildInstruction(Re,t,Jn,Tn,Ai);if($t.errors&&$t.errors.length){H.push($t);return}if(Ai){Ve.onStart(()=>xl(kt,$t.fromStyles)),Ve.onDestroy(()=>Go(kt,$t.toStyles)),n.push(Ve);return}if(Re.isFallbackTransition){Ve.onStart(()=>xl(kt,$t.fromStyles)),Ve.onDestroy(()=>Go(kt,$t.toStyles)),n.push(Ve);return}let yl=[];$t.timelines.forEach(Fi=>{Fi.stretchStartingKeyframe=!0,this.disabledNodes.has(Fi.element)||yl.push(Fi)}),$t.timelines=yl,t.append(kt,$t.timelines);let bl={instruction:$t,player:Ve,element:kt};a.push(bl),$t.queriedElements.forEach(Fi=>Sr(s,Fi,[]).push(Ve)),$t.preStyleProps.forEach((Fi,Sl)=>{if(Fi.size){let Wr=l.get(Sl);Wr||l.set(Sl,Wr=new Set),Fi.forEach((ym,My)=>Wr.add(My))}}),$t.postStyleProps.forEach((Fi,Sl)=>{let Wr=c.get(Sl);Wr||c.set(Sl,Wr=new Set),Fi.forEach((ym,My)=>Wr.add(My))})});if(H.length){let ye=[];H.forEach(Fe=>{ye.push(pL(Fe.triggerName,Fe.errors))}),oe.forEach(Fe=>Fe.destroy()),this.reportError(ye)}let K=new Map,ve=new Map;a.forEach(ye=>{let Fe=ye.element;t.has(Fe)&&(ve.set(Fe,Fe),this._beforeAnimationBuild(ye.player.namespaceId,ye.instruction,K))}),n.forEach(ye=>{let Fe=ye.element;this._getPreviousPlayers(Fe,!1,ye.namespaceId,ye.triggerName,null).forEach(Ve=>{Sr(K,Fe,[]).push(Ve),Ve.destroy()})});let it=M.filter(ye=>TL(ye,l,c)),Le=new Map;NL(Le,this.driver,A,c,no).forEach(ye=>{TL(ye,l,c)&&it.push(ye)});let Ce=new Map;v.forEach((ye,Fe)=>{NL(Ce,this.driver,new Set(ye),l,nu)}),it.forEach(ye=>{let Fe=Le.get(ye),Re=Ce.get(ye);Le.set(ye,new Map([...Fe?.entries()??[],...Re?.entries()??[]]))});let De=[],Ft=[],Et={};a.forEach(ye=>{let{element:Fe,player:Re,instruction:Ve}=ye;if(t.has(Fe)){if(d.has(Fe)){Re.onDestroy(()=>Go(Fe,Ve.toStyles)),Re.disabled=!0,Re.overrideTotalTime(Ve.totalTime),n.push(Re);return}let kt=Et;if(ve.size>1){let Tn=Fe,Jn=[];for(;Tn=Tn.parentNode;){let $t=ve.get(Tn);if($t){kt=$t;break}Jn.push(Tn)}Jn.forEach($t=>ve.set($t,kt))}let Ai=this._buildAnimation(Re.namespaceId,Ve,K,o,Ce,Le);if(Re.setRealPlayer(Ai),kt===Et)De.push(Re);else{let Tn=this.playersByElement.get(kt);Tn&&Tn.length&&(Re.parentPlayer=Cs(Tn)),n.push(Re)}}else xl(Fe,Ve.fromStyles),Re.onDestroy(()=>Go(Fe,Ve.toStyles)),Ft.push(Re),d.has(Fe)&&n.push(Re)}),Ft.forEach(ye=>{let Fe=o.get(ye.element);if(Fe&&Fe.length){let Re=Cs(Fe);ye.setRealPlayer(Re)}}),n.forEach(ye=>{ye.parentPlayer?ye.syncPlayerEvents(ye.parentPlayer):ye.destroy()});for(let ye=0;ye!Ai.destroyed);kt.length?yve(this,Fe,kt):this.processLeaveNode(Fe)}return M.length=0,De.forEach(ye=>{this.players.push(ye),ye.onDone(()=>{ye.destroy();let Fe=this.players.indexOf(ye);this.players.splice(Fe,1)}),ye.play()}),De}afterFlush(r){this._flushFns.push(r)}afterFlushAnimationsDone(r){this._whenQuietFns.push(r)}_getPreviousPlayers(r,e,t,n,o){let a=[];if(e){let s=this.playersByQueriedElement.get(r);s&&(a=s)}else{let s=this.playersByElement.get(r);if(s){let l=!o||o==Xh;s.forEach(c=>{c.queued||!l&&c.triggerName!=n||a.push(c)})}}return(t||n)&&(a=a.filter(s=>!(t&&t!=s.namespaceId||n&&n!=s.triggerName))),a}_beforeAnimationBuild(r,e,t){let n=e.triggerName,o=e.element,a=e.isRemovalTransition?void 0:r,s=e.isRemovalTransition?void 0:n;for(let l of e.timelines){let c=l.element,d=c!==o,p=Sr(t,c,[]);this._getPreviousPlayers(c,d,a,s,e.toState).forEach(v=>{let y=v.getRealPlayer();y.beforeDestroy&&y.beforeDestroy(),v.destroy(),p.push(v)})}xl(o,e.fromStyles)}_buildAnimation(r,e,t,n,o,a){let s=e.triggerName,l=e.element,c=[],d=new Set,p=new Set,f=e.timelines.map(y=>{let T=y.element;d.add(T);let M=T[Uo];if(M&&M.removedBeforeQueried)return new ga(y.duration,y.delay);let F=T!==l,A=bve((t.get(T)||mve).map(K=>K.getRealPlayer())).filter(K=>{let ve=K;return ve.element?ve.element===T:!1}),W=o.get(T),ie=a.get(T),oe=qD(this._normalizer,y.keyframes,W,ie),H=this._buildPlayer(y,oe,A);if(y.subTimeline&&n&&p.add(T),F){let K=new tm(r,s,T);K.setRealPlayer(H),c.push(K)}return H});c.forEach(y=>{Sr(this.playersByQueriedElement,y.element,[]).push(y),y.onDone(()=>_ve(this.playersByQueriedElement,y.element,y))}),d.forEach(y=>uo(y,JD));let v=Cs(f);return v.onDestroy(()=>{d.forEach(y=>Hu(y,JD)),Go(l,e.toStyles)}),p.forEach(y=>{Sr(n,y,[]).push(v)}),v}_buildPlayer(r,e,t){return e.length>0?this.driver.animate(r.element,e,r.duration,r.delay,r.easing,t):new ga(r.duration,r.delay)}};var tm=class{namespaceId;triggerName;element;_player=new ga;_containsRealPlayer=!1;_queuedCallbacks=new Map;destroyed=!1;parentPlayer=null;markedForDestroy=!1;disabled=!1;queued=!0;totalTime=0;constructor(r,e,t){this.namespaceId=r,this.triggerName=e,this.element=t}setRealPlayer(r){this._containsRealPlayer||(this._player=r,this._queuedCallbacks.forEach((e,t)=>{e.forEach(n=>q0(r,t,void 0,n))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(r.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(r){this.totalTime=r}syncPlayerEvents(r){let e=this._player;e.triggerCallback&&r.onStart(()=>e.triggerCallback(`start`)),r.onDone(()=>this.finish()),r.onDestroy(()=>this.destroy())}_queueEvent(r,e){Sr(this._queuedCallbacks,r,[]).push(e)}onDone(r){this.queued&&this._queueEvent(`done`,r),this._player.onDone(r)}onStart(r){this.queued&&this._queueEvent(`start`,r),this._player.onStart(r)}onDestroy(r){this.queued&&this._queueEvent(`destroy`,r),this._player.onDestroy(r)}init(){this._player.init()}hasStarted(){return this.queued?!1:this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(r){this.queued||this._player.setPosition(r)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(r){let e=this._player;e.triggerCallback&&e.triggerCallback(r)}};function _ve(i,r,e){let t=i.get(r);if(t){if(t.length){let n=t.indexOf(e);t.splice(n,1)}t.length==0&&i.delete(r)}return t}function xve(i){return i??null}function iy(i){return i&&i.nodeType===1}function vve(i){return i==`start`||i==`done`}function IL(i,r){let e=i.style.display;return i.style.display=r??`none`,e}function NL(i,r,e,t,n){let o=[];e.forEach(l=>o.push(IL(l)));let a=[];t.forEach((l,c)=>{let d=new Map;l.forEach(p=>{let f=r.computeStyle(c,p,n);d.set(p,f),(!f||f.length==0)&&(c[Uo]=fve,a.push(c))}),i.set(c,d)});let s=0;return e.forEach(l=>IL(l,o[s++])),a}function DL(i,r){let e=new Map;if(i.forEach(s=>e.set(s,[])),r.length==0)return e;let t=1,n=new Set(r),o=new Map;function a(s){if(!s)return t;let l=o.get(s);if(l)return l;let c=s.parentNode;return e.has(c)?l=c:n.has(c)?l=t:l=a(c),o.set(s,l),l}return r.forEach(s=>{let l=a(s);l!==t&&e.get(l).push(s)}),e}function uo(i,r){i.classList?.add(r)}function Hu(i,r){i.classList?.remove(r)}function yve(i,r,e){Cs(e).onDone(()=>i.processLeaveNode(r))}function bve(i){let r=[];return FL(i,r),r}function FL(i,r){for(let e=0;en.add(o)):r.set(i,t),e.delete(i),!0}var Gu=class{_driver;_normalizer;_transitionEngine;_timelineEngine;_triggerCache={};onRemovalComplete=(r,e)=>{};constructor(r,e,t){this._driver=e,this._normalizer=t,this._transitionEngine=new m2(r.body,e,t),this._timelineEngine=new p2(r.body,e,t),this._transitionEngine.onRemovalComplete=(n,o)=>this.onRemovalComplete(n,o)}registerTrigger(r,e,t,n,o){let a=r+`-`+n,s=this._triggerCache[a];if(!s){let l=[],d=kL(this._driver,o,l,[]);if(l.length)throw nL(n,l);s=lve(n,d,this._normalizer),this._triggerCache[a]=s}this._transitionEngine.registerTrigger(e,n,s)}register(r,e){this._transitionEngine.register(r,e)}destroy(r,e){this._transitionEngine.destroy(r,e)}onInsert(r,e,t,n){this._transitionEngine.insertNode(r,e,t,n)}onRemove(r,e,t){this._transitionEngine.removeNode(r,e,t)}disableAnimations(r,e){this._transitionEngine.markElementAsDisabled(r,e)}process(r,e,t,n){if(t.charAt(0)==`@`){let[o,a]=QD(t),s=n;this._timelineEngine.command(o,e,a,s)}else this._transitionEngine.trigger(r,e,t,n)}listen(r,e,t,n,o){if(t.charAt(0)==`@`){let[a,s]=QD(t);return this._timelineEngine.listen(a,e,s,o)}return this._transitionEngine.listen(r,e,t,n,o)}flush(r=-1){this._transitionEngine.flush(r)}get players(){return[...this._transitionEngine.players,...this._timelineEngine.players]}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}afterFlushAnimationsDone(r){this._transitionEngine.afterFlushAnimationsDone(r)}};function wve(i,r){let e=null,t=null;return Array.isArray(r)&&r.length?(e=o2(r[0]),r.length>1&&(t=o2(r[r.length-1]))):r instanceof Map&&(e=o2(r)),e||t?new Cve(i,e,t):null}var Cve=(()=>{class i{_element;_startStyles;_endStyles;static initialStylesByElement=new WeakMap;_state=0;_initialStyles;constructor(e,t,n){this._element=e,this._startStyles=t,this._endStyles=n;let o=i.initialStylesByElement.get(e);o||i.initialStylesByElement.set(e,o=new Map),this._initialStyles=o}start(){this._state<1&&(this._startStyles&&Go(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(Go(this._element,this._initialStyles),this._endStyles&&(Go(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(i.initialStylesByElement.delete(this._element),this._startStyles&&(xl(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(xl(this._element,this._endStyles),this._endStyles=null),Go(this._element,this._initialStyles),this._state=3)}}return i})();function o2(i){let r=null;return i.forEach((e,t)=>{Ive(t)&&(r=r||new Map,r.set(t,e))}),r}function Ive(i){return i===`display`||i===`position`}var cy=class{element;keyframes;options;_specialStyles;_onDoneFns=[];_onStartFns=[];_onDestroyFns=[];_duration;_delay;_initialized=!1;_finished=!1;_started=!1;_destroyed=!1;_finalKeyframe;_originalOnDoneFns=[];_originalOnStartFns=[];domPlayer=null;time=0;parentPlayer=null;currentSnapshot=new Map;constructor(r,e,t,n){this.element=r,this.keyframes=e,this.options=t,this._specialStyles=n,this._duration=t.duration,this._delay=t.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(r=>r()),this._onDoneFns=[])}init(){this._buildPlayer()&&this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return this.domPlayer;this._initialized=!0;let r=this.keyframes,e=this._triggerWebAnimation(this.element,r,this.options);if(!e)return this._onFinish(),null;this.domPlayer=e,this._finalKeyframe=r.length?r[r.length-1]:new Map;let t=()=>this._onFinish();return e.addEventListener(`finish`,t),this.onDestroy(()=>{e.removeEventListener(`finish`,t)}),e}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer?.pause()}_convertKeyframesToObject(r){let e=[];return r.forEach(t=>{e.push(Object.fromEntries(t))}),e}_triggerWebAnimation(r,e,t){let n=this._convertKeyframesToObject(e);try{return r.animate(n,t)}catch{return null}}onStart(r){this._originalOnStartFns.push(r),this._onStartFns.push(r)}onDone(r){this._originalOnDoneFns.push(r),this._onDoneFns.push(r)}onDestroy(r){this._onDestroyFns.push(r)}play(){let r=this._buildPlayer();r&&(this.hasStarted()||(this._onStartFns.forEach(e=>e()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),r.play())}pause(){this.init(),this.domPlayer?.pause()}finish(){this.init(),this.domPlayer&&(this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish())}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer?.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(r=>r()),this._onDestroyFns=[])}setPosition(r){this.domPlayer||this.init(),this.domPlayer&&(this.domPlayer.currentTime=r*this.time)}getPosition(){return this.domPlayer?+(this.domPlayer.currentTime??0)/this.time:this._initialized?1:0}get totalTime(){return this._delay+this._duration}beforeDestroy(){let r=new Map;this.hasStarted()&&this._finalKeyframe.forEach((t,n)=>{n!==`offset`&&r.set(n,this._finished?t:J0(this.element,n))}),this.currentSnapshot=r}triggerCallback(r){let e=r===`start`?this._onStartFns:this._onDoneFns;e.forEach(t=>t()),e.length=0}};var dy=class{validateStyleProperty(r){return!0}validateAnimatableStyleProperty(r){return!0}containsElement(r,e){return KD(r,e)}getParentElement(r){return K0(r)}query(r,e,t){return YD(r,e,t)}computeStyle(r,e,t){return J0(r,e)}animate(r,e,t,n,o,a=[]){let l={duration:t,delay:n,fill:n==0?`both`:`forwards`};o&&(l.easing=o);let c=new Map,d=a.filter(v=>v instanceof cy);_L(t,n)&&d.forEach(v=>{v.currentSnapshot.forEach((y,T)=>c.set(T,y))});let p=mL(e).map(v=>new Map(v));p=xL(r,p,c);let f=wve(r,p);return new cy(r,p,l,f)}};var ny=`@`;var PL=`@.disabled`;var uy=class{namespaceId;delegate;engine;_onDestroy;ɵtype=0;constructor(r,e,t,n){this.namespaceId=r,this.delegate=e,this.engine=t,this._onDestroy=n}get data(){return this.delegate.data}destroyNode(r){this.delegate.destroyNode?.(r)}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.engine.afterFlushAnimationsDone(()=>{queueMicrotask(()=>{this.delegate.destroy()})}),this._onDestroy?.()}createElement(r,e){return this.delegate.createElement(r,e)}createComment(r){return this.delegate.createComment(r)}createText(r){return this.delegate.createText(r)}appendChild(r,e){this.delegate.appendChild(r,e),this.engine.onInsert(this.namespaceId,e,r,!1)}insertBefore(r,e,t,n=!0){this.delegate.insertBefore(r,e,t),this.engine.onInsert(this.namespaceId,e,r,n)}removeChild(r,e,t,n){if(n){this.delegate.removeChild(r,e,t,n);return}this.parentNode(e)&&this.engine.onRemove(this.namespaceId,e,this.delegate)}selectRootElement(r,e){return this.delegate.selectRootElement(r,e)}parentNode(r){return this.delegate.parentNode(r)}nextSibling(r){return this.delegate.nextSibling(r)}setAttribute(r,e,t,n){this.delegate.setAttribute(r,e,t,n)}removeAttribute(r,e,t){this.delegate.removeAttribute(r,e,t)}addClass(r,e){this.delegate.addClass(r,e)}removeClass(r,e){this.delegate.removeClass(r,e)}setStyle(r,e,t,n){this.delegate.setStyle(r,e,t,n)}removeStyle(r,e,t){this.delegate.removeStyle(r,e,t)}setProperty(r,e,t){e.charAt(0)==ny&&e==PL?this.disableAnimations(r,!!t):this.delegate.setProperty(r,e,t)}setValue(r,e){this.delegate.setValue(r,e)}listen(r,e,t,n){return this.delegate.listen(r,e,t,n)}disableAnimations(r,e){this.engine.disableAnimations(r,e)}};var f2=class extends uy{factory;constructor(r,e,t,n,o){super(e,t,n,o),this.factory=r,this.namespaceId=e}setProperty(r,e,t){e.charAt(0)==ny?e.charAt(1)==`.`&&e==PL?(t=t===void 0?!0:!!t,this.disableAnimations(r,t)):this.engine.process(this.namespaceId,r,e.slice(1),t):this.delegate.setProperty(r,e,t)}listen(r,e,t,n){if(e.charAt(0)==ny){let o=Nve(r),a=e.slice(1),s=``;return a.charAt(0)!=ny&&([a,s]=Dve(a)),this.engine.listen(this.namespaceId,o,a,s,l=>{let c=l._data||-1;this.factory.scheduleListenerCallback(c,t,l)})}return this.delegate.listen(r,e,t,n)}};function Nve(i){switch(i){case`body`:return document.body;case`document`:return document;case`window`:return window;default:return i}}function Dve(i){let r=i.indexOf(`.`);return[i.substring(0,r),i.slice(r+1)]}var gy=class{delegate;engine;_zone;_currentId=0;_microtaskId=1;_animationCallbacksBuffer=[];_rendererCache=new Map;_cdRecurDepth=0;constructor(r,e,t){this.delegate=r,this.engine=e,this._zone=t,e.onRemovalComplete=(n,o)=>{o?.removeChild(null,n)}}createRenderer(r,e){let n=this.delegate.createRenderer(r,e);if(!r||!e?.data?.animation){let c=this._rendererCache,d=c.get(n);if(!d){let p=()=>c.delete(n);d=new uy(``,n,this.engine,p),c.set(n,d)}return d}let o=e.id,a=e.id+`-`+this._currentId;this._currentId++,this.engine.register(a,r);let s=c=>{Array.isArray(c)?c.forEach(s):this.engine.registerTrigger(o,a,r,c.name,c)};return e.data.animation.forEach(s),new f2(this,a,n,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){queueMicrotask(()=>{this._microtaskId++})}scheduleListenerCallback(r,e,t){if(r>=0&&re(t));return}let n=this._animationCallbacksBuffer;n.length==0&&queueMicrotask(()=>{this._zone.run(()=>{n.forEach(o=>{let[a,s]=o;a(s)}),this._animationCallbacksBuffer=[]})}),n.push([e,t])}end(){this._cdRecurDepth--,this._cdRecurDepth==0&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}componentReplaced(r){this.engine.flush(),this.delegate.componentReplaced?.(r)}};var Eve=(()=>{class i extends Gu{constructor(e,t,n){super(e,t,n)}ngOnDestroy(){this.flush()}static ɵfac=function(t){return new(t||i)(Te($e),Te(Uc),Te(jc))};static ɵprov=de({token:i,factory:i.ɵfac})}return i})();function kve(){return new ry}function Mve(){return new gy(_(hu),_(Gu),_(Qe))}var OL=[{provide:jc,useFactory:kve},{provide:Gu,useClass:Eve},{provide:bo,useFactory:Mve}];[...OL];var Rve=[{provide:Uc,useFactory:()=>new dy},{provide:wd,useFactory:()=>`BrowserAnimations`},...OL];function VL(){return nr(`NgEagerAnimations`),[...Rve]}var xt=`primary`;var hm=Symbol(`RouteTitle`);var w2=class{params;constructor(r){this.params=r||{}}has(r){return Object.hasOwn(this.params,r)}get(r){if(this.has(r)){let e=this.params[r];return Array.isArray(e)?e[0]:e}return null}getAll(r){if(this.has(r)){let e=this.params[r];return Array.isArray(e)?e:[e]}return[]}get keys(){return Object.keys(this.params)}};function qu(i){return new w2(i)}function v2(i,r,e){for(let t=0;ti.length||e.pathMatch===`full`&&(r.hasChildren()||t.lengthi.length||e.pathMatch===`full`&&r.hasChildren()&&e.path!==`**`)return null;let s={};return!v2(o,i.slice(0,o.length),s)||!v2(a,i.slice(i.length-a.length),s)?null:{consumed:i,posParams:s}}function xy(i){return new Promise((r,e)=>{i.pipe(zt()).subscribe({next:t=>r(t),error:t=>e(t)})})}function Fve(i,r){if(i.length!==r.length)return!1;for(let e=0;et[o]===n)}else return i===r}function Pve(i){return i.length>0?i[i.length-1]:null}function Kc(i){return qm(i)?i:qa(i)?ui(Promise.resolve(i)):lt(i)}function $L(i){return qm(i)?xy(i):Promise.resolve(i)}var Ove={exact:KL,subset:YL};var qL={exact:Vve,subset:Lve,ignored:()=>!0};var QL={paths:`exact`,fragment:`ignored`,matrixParams:`ignored`,queryParams:`exact`};var I2={paths:`subset`,fragment:`ignored`,matrixParams:`ignored`,queryParams:`subset`};function LL(i,r,e){return Ove[e.paths](i.root,r.root,e.matrixParams)&&qL[e.queryParams](i.queryParams,r.queryParams)&&!(e.fragment===`exact`&&i.fragment!==r.fragment)}function Vve(i,r){return Ea(i,r)}function KL(i,r,e){if(!$c(i.segments,r.segments)||!my(i.segments,r.segments,e)||i.numberOfChildren!==r.numberOfChildren)return!1;for(let t in r.children)if(!i.children[t]||!KL(i.children[t],r.children[t],e))return!1;return!0}function Lve(i,r){return Object.keys(r).length<=Object.keys(i).length&&Object.keys(r).every(e=>WL(i[e],r[e]))}function YL(i,r,e){return ZL(i,r,r.segments,e)}function ZL(i,r,e,t){if(i.segments.length>e.length){let n=i.segments.slice(0,e.length);return!(!$c(n,e)||r.hasChildren()||!my(n,e,t))}else if(i.segments.length===e.length){if(!$c(i.segments,e)||!my(i.segments,e,t))return!1;for(let n in r.children)if(!i.children[n]||!YL(i.children[n],r.children[n],t))return!1;return!0}else{let n=e.slice(0,i.segments.length),o=e.slice(i.segments.length);return!$c(i.segments,n)||!my(i.segments,n,t)||!i.children[xt]?!1:ZL(i.children[xt],r,o,t)}}function my(i,r,e){return r.every((t,n)=>qL[e](i[n].parameters,t.parameters))}var $o=class{root;queryParams;fragment;_queryParamMap;constructor(r=new oi([],{}),e={},t=null){this.root=r,this.queryParams=e,this.fragment=t}get queryParamMap(){return this._queryParamMap??=qu(this.queryParams),this._queryParamMap}toString(){return Hve.serialize(this)}};var oi=class{segments;children;parent=null;constructor(r,e){this.segments=r,this.children=e,Object.values(e).forEach(t=>t.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return fy(this)}};var Wc=class{path;parameters;_parameterMap;constructor(r,e){this.path=r,this.parameters=e}get parameterMap(){return this._parameterMap??=qu(this.parameters),this._parameterMap}toString(){return JL(this)}};function zve(i,r){return $c(i,r)&&i.every((e,t)=>Ea(e.parameters,r[t].parameters))}function $c(i,r){return i.length!==r.length?!1:i.every((e,t)=>e.path===r[t].path)}function Bve(i,r){let e=[];return Object.entries(i.children).forEach(([t,n])=>{t===xt&&(e=e.concat(r(n,t)))}),Object.entries(i.children).forEach(([t,n])=>{t!==xt&&(e=e.concat(r(n,t)))}),e}var Ju=(()=>{class i{static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:()=>new vl})}return i})();var vl=class{parse(r){let e=new D2(r);return new $o(e.parseRootSegment(),e.parseQueryParams(),e.parseFragment())}serialize(r){return`${`/${im(r.root,!0)}`}${jve(r.queryParams)}${typeof r.fragment==`string`?`#${Gve(r.fragment)}`:``}`}};var Hve=new vl;function fy(i){return i.segments.map(r=>JL(r)).join(`/`)}function im(i,r){if(!i.hasChildren())return fy(i);if(r){let e=i.children[xt]?im(i.children[xt],!1):``,t=[];return Object.entries(i.children).forEach(([n,o])=>{n!==xt&&t.push(`${n}:${im(o,!1)}`)}),t.length>0?`${e}(${t.join(`//`)})`:e}else{let e=Bve(i,(t,n)=>n===xt?[im(i.children[xt],!1)]:[`${n}:${im(t,!1)}`]);return Object.keys(i.children).length===1&&i.children[xt]!=null?`${fy(i)}/${e[0]}`:`${fy(i)}/(${e.join(`//`)})`}}function XL(i){return encodeURIComponent(i).replace(/%40/g,`@`).replace(/%3A/gi,`:`).replace(/%24/g,`$`).replace(/%2C/gi,`,`)}function py(i){return XL(i).replace(/%3B/gi,`;`)}function Gve(i){return encodeURI(i)}function N2(i){return XL(i).replace(/\(/g,`%28`).replace(/\)/g,`%29`).replace(/%26/gi,`&`)}function _y(i){return decodeURIComponent(i)}function zL(i){return _y(i.replace(/\+/g,`%20`))}function JL(i){return`${N2(i.path)}${Uve(i.parameters)}`}function Uve(i){return Object.entries(i).map(([r,e])=>`;${N2(r)}=${N2(e)}`).join(``)}function jve(i){let r=Object.entries(i).map(([e,t])=>Array.isArray(t)?t.map(n=>`${py(e)}=${py(n)}`).join(`&`):`${py(e)}=${py(t)}`).filter(e=>e);return r.length?`?${r.join(`&`)}`:``}var Wve=/^[^\/()?;#]+/;function y2(i){let r=i.match(Wve);return r?r[0]:``}var $ve=/^[^\/()?;=#]+/;function qve(i){let r=i.match($ve);return r?r[0]:``}var Qve=/^[^=?&#]+/;function Kve(i){let r=i.match(Qve);return r?r[0]:``}var Yve=/^[^&#]+/;function Zve(i){let r=i.match(Yve);return r?r[0]:``}var D2=class{url;remaining;constructor(r){this.url=r,this.remaining=r}parseRootSegment(){for(;this.consumeOptional(`/`););return this.remaining===``||this.peekStartsWith(`?`)||this.peekStartsWith(`#`)?new oi([],{}):new oi([],this.parseChildren())}parseQueryParams(){let r={};if(this.consumeOptional(`?`))do this.parseQueryParam(r);while(this.consumeOptional(`&`));return r}parseFragment(){return this.consumeOptional(`#`)?decodeURIComponent(this.remaining):null}parseChildren(r=0){if(r>50)throw new X(4010,!1);if(this.remaining===``)return{};this.consumeOptional(`/`);let e=[];for(this.peekStartsWith(`(`)||e.push(this.parseSegment());this.peekStartsWith(`/`)&&!this.peekStartsWith(`//`)&&!this.peekStartsWith(`/(`);)this.capture(`/`),e.push(this.parseSegment());let t={};this.peekStartsWith(`/(`)&&(this.capture(`/`),t=this.parseParens(!0,r));let n={};return this.peekStartsWith(`(`)&&(n=this.parseParens(!1,r)),(e.length>0||Object.keys(t).length>0)&&(n[xt]=new oi(e,t)),n}parseSegment(){let r=y2(this.remaining);if(r===``&&this.peekStartsWith(`;`))throw new X(4009,!1);return this.capture(r),new Wc(_y(r),this.parseMatrixParams())}parseMatrixParams(){let r={};for(;this.consumeOptional(`;`);)this.parseParam(r);return r}parseParam(r){let e=qve(this.remaining);if(!e)return;this.capture(e);let t=``;if(this.consumeOptional(`=`)){let n=y2(this.remaining);n&&(t=n,this.capture(t))}r[_y(e)]=_y(t)}parseQueryParam(r){let e=Kve(this.remaining);if(!e)return;this.capture(e);let t=``;if(this.consumeOptional(`=`)){let a=Zve(this.remaining);a&&(t=a,this.capture(t))}let n=zL(e),o=zL(t);if(Object.hasOwn(r,n)){let a=r[n];Array.isArray(a)||(a=[a],r[n]=a),a.push(o)}else r[n]=o}parseParens(r,e){let t=Object.create(null);for(this.capture(`(`);!this.consumeOptional(`)`)&&this.remaining.length>0;){let n=y2(this.remaining),o=this.remaining[n.length];if(o!==`/`&&o!==`)`&&o!==`;`)throw new X(4010,!1);let a;n.indexOf(`:`)>-1?(a=n.slice(0,n.indexOf(`:`)),this.capture(a),this.capture(`:`)):r&&(a=xt);let s=this.parseChildren(e+1);t[a??xt]=Object.keys(s).length===1&&s[xt]?s[xt]:new oi([],s),this.consumeOptional(`//`)}return t}peekStartsWith(r){return this.remaining.startsWith(r)}consumeOptional(r){return this.peekStartsWith(r)?(this.remaining=this.remaining.substring(r.length),!0):!1}capture(r){if(!this.consumeOptional(r))throw new X(4011,!1)}};function e7(i){return i.segments.length>0?new oi([],{[xt]:i}):i}function t7(i){let r=Object.create(null);for(let[t,n]of Object.entries(i.children)){let o=t7(n);if(t===xt&&o.segments.length===0&&o.hasChildren())for(let[a,s]of Object.entries(o.children))r[a]=s;else(o.segments.length>0||o.hasChildren())&&(r[t]=o)}return Xve(new oi(i.segments,r))}function Xve(i){if(i.numberOfChildren===1&&i.children[xt]){let r=i.children[xt];return new oi(i.segments.concat(r.segments),r.children)}return i}function Qu(i){return i instanceof $o}function Jve(i,r,e=null,t=null,n=new vl){return n7(i7(i),r,e,t,n)}function i7(i){let r;function e(o){let a={};for(let l of o.children){let c=e(l);a[l.outlet]=c}let s=new oi(o.url,a);return o===i&&(r=s),s}let n=e7(e(i.root));return r??n}function n7(i,r,e,t,n){let o=i;for(;o.parent;)o=o.parent;if(r.length===0)return b2(o,o,o,e,t,n);let a=e0e(r);if(a.toRoot())return b2(o,o,new oi([],{}),e,t,n);let s=t0e(a,o,i),l=s.processChildren?rm(s.segmentGroup,s.index,a.commands):o7(s.segmentGroup,s.index,a.commands);return b2(o,s.segmentGroup,l,e,t,n)}function vy(i){return typeof i==`object`&&i!=null&&!i.outlets&&!i.segmentPath}function am(i){return typeof i==`object`&&i!=null&&i.outlets}function BL(i,r,e){i||=`ɵ`;let t=new $o;return t.queryParams={[i]:r},e.parse(e.serialize(t)).queryParams[i]}function b2(i,r,e,t,n,o){let a={};for(let[c,d]of Object.entries(t??{}))a[c]=Array.isArray(d)?d.map(p=>BL(c,p,o)):BL(c,d,o);let s;i===r?s=e:s=r7(i,r,e);return new $o(e7(t7(s)),a,n)}function r7(i,r,e){let t=Object.create(null);return Object.entries(i.children).forEach(([n,o])=>{o===r?t[n]=e:t[n]=r7(o,r,e)}),new oi(i.segments,t)}var yy=class{isAbsolute;numberOfDoubleDots;commands;constructor(r,e,t){if(this.isAbsolute=r,this.numberOfDoubleDots=e,this.commands=t,r&&t.length>0&&vy(t[0]))throw new X(4003,!1);let n=t.find(am);if(n&&n!==Pve(t))throw new X(4004,!1)}toRoot(){return this.isAbsolute&&this.commands.length===1&&this.commands[0]==`/`}};function e0e(i){if(typeof i[0]==`string`&&i.length===1&&i[0]===`/`)return new yy(!0,0,i);let r=0,e=!1,t=i.reduce((n,o,a)=>{if(typeof o==`object`&&o!=null){if(o.outlets){let s={};return Object.entries(o.outlets).forEach(([l,c])=>{s[l]=typeof c==`string`?c.split(`/`):c}),[...n,{outlets:s}]}if(o.segmentPath)return[...n,o.segmentPath]}return typeof o!=`string`?[...n,o]:a===0?(o.split(`/`).forEach((s,l)=>{l==0&&s===`.`||(l==0&&s===``?e=!0:s===`..`?r++:s!=``&&n.push(s))}),n):[...n,o]},[]);return new yy(e,r,t)}var ju=class{segmentGroup;processChildren;index;constructor(r,e,t){this.segmentGroup=r,this.processChildren=e,this.index=t}};function t0e(i,r,e){if(i.isAbsolute)return new ju(r,!0,0);if(!e)return new ju(r,!1,NaN);if(e.parent===null)return new ju(e,!0,0);let t=vy(i.commands[0])?0:1;return i0e(e,e.segments.length-1+t,i.numberOfDoubleDots)}function i0e(i,r,e){let t=i,n=r,o=e;for(;o>n;){if(o-=n,t=t.parent,!t)throw new X(4005,!1);n=t.segments.length}return new ju(t,!1,n-o)}function n0e(i){return am(i[0])?i[0].outlets:{[xt]:i}}function o7(i,r,e){if(i??=new oi([],{}),i.segments.length===0&&i.hasChildren())return rm(i,r,e);let t=r0e(i,r,e),n=e.slice(t.commandIndex);if(t.match&&t.pathIndexo!==xt)&&i.children[xt]&&i.numberOfChildren===1&&i.children[xt].segments.length===0){let o=rm(i.children[xt],r,e);return new oi(i.segments,o.children)}return Object.entries(t).forEach(([o,a])=>{typeof a==`string`&&(a=[a]),a!==null&&(n[o]=o7(i.children[o],r,a))}),Object.entries(i.children).forEach(([o,a])=>{t[o]===void 0&&(n[o]=a)}),new oi(i.segments,n)}}function r0e(i,r,e){let t=0,n=r,o={match:!1,pathIndex:0,commandIndex:0};for(;n=e.length)return o;let a=i.segments[n],s=e[t];if(am(s))break;let l=`${s}`,c=t0&&l===void 0)break;if(l&&c&&typeof c==`object`&&c.outlets===void 0){if(!GL(l,c,a))return o;t+=2}else{if(!GL(l,{},a))return o;t++}n++}return{match:!0,pathIndex:n,commandIndex:t}}function T2(i,r,e){let t=i.segments.slice(0,r),n=0;for(;n{typeof t==`string`&&(t=[t]),t!==null&&(r[e]=T2(new oi([],{}),0,t))}),r}function HL(i){let r={};return Object.entries(i).forEach(([e,t])=>r[e]=`${t}`),r}function GL(i,r,e){return i==e.path&&Ea(r,e.parameters)}var Wu=`imperative`;var Dn=(function(i){return i[i.NavigationStart=0]=`NavigationStart`,i[i.NavigationEnd=1]=`NavigationEnd`,i[i.NavigationCancel=2]=`NavigationCancel`,i[i.NavigationError=3]=`NavigationError`,i[i.RoutesRecognized=4]=`RoutesRecognized`,i[i.ResolveStart=5]=`ResolveStart`,i[i.ResolveEnd=6]=`ResolveEnd`,i[i.GuardsCheckStart=7]=`GuardsCheckStart`,i[i.GuardsCheckEnd=8]=`GuardsCheckEnd`,i[i.RouteConfigLoadStart=9]=`RouteConfigLoadStart`,i[i.RouteConfigLoadEnd=10]=`RouteConfigLoadEnd`,i[i.ChildActivationStart=11]=`ChildActivationStart`,i[i.ChildActivationEnd=12]=`ChildActivationEnd`,i[i.ActivationStart=13]=`ActivationStart`,i[i.ActivationEnd=14]=`ActivationEnd`,i[i.Scroll=15]=`Scroll`,i[i.NavigationSkipped=16]=`NavigationSkipped`,i})(Dn||{});var go=class{id;url;constructor(r,e){this.id=r,this.url=e}};var qc=class extends go{type=Dn.NavigationStart;navigationTrigger;restoredState;constructor(r,e,t=`imperative`,n=null){super(r,e),this.navigationTrigger=t,this.restoredState=n}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}};var ka=class extends go{urlAfterRedirects;type=Dn.NavigationEnd;constructor(r,e,t){super(r,e),this.urlAfterRedirects=t}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}};var cr=(function(i){return i[i.Redirect=0]=`Redirect`,i[i.SupersededByNewNavigation=1]=`SupersededByNewNavigation`,i[i.NoDataFromResolver=2]=`NoDataFromResolver`,i[i.GuardRejected=3]=`GuardRejected`,i[i.Aborted=4]=`Aborted`,i})(cr||{});var sm=(function(i){return i[i.IgnoredSameUrlNavigation=0]=`IgnoredSameUrlNavigation`,i[i.IgnoredByUrlHandlingStrategy=1]=`IgnoredByUrlHandlingStrategy`,i})(sm||{});var jo=class extends go{reason;code;type=Dn.NavigationCancel;constructor(r,e,t,n){super(r,e),this.reason=t,this.code=n}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}};function a7(i){return i instanceof jo&&(i.code===cr.Redirect||i.code===cr.SupersededByNewNavigation)}var Ns=class extends go{reason;code;type=Dn.NavigationSkipped;constructor(r,e,t,n){super(r,e),this.reason=t,this.code=n}};var Ku=class extends go{error;target;type=Dn.NavigationError;constructor(r,e,t,n){super(r,e),this.error=t,this.target=n}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}};var by=class extends go{urlAfterRedirects;state;type=Dn.RoutesRecognized;constructor(r,e,t,n){super(r,e),this.urlAfterRedirects=t,this.state=n}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}};var E2=class extends go{urlAfterRedirects;state;type=Dn.GuardsCheckStart;constructor(r,e,t,n){super(r,e),this.urlAfterRedirects=t,this.state=n}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}};var k2=class extends go{urlAfterRedirects;state;shouldActivate;type=Dn.GuardsCheckEnd;constructor(r,e,t,n,o){super(r,e),this.urlAfterRedirects=t,this.state=n,this.shouldActivate=o}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}};var M2=class extends go{urlAfterRedirects;state;type=Dn.ResolveStart;constructor(r,e,t,n){super(r,e),this.urlAfterRedirects=t,this.state=n}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}};var R2=class extends go{urlAfterRedirects;state;type=Dn.ResolveEnd;constructor(r,e,t,n){super(r,e),this.urlAfterRedirects=t,this.state=n}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}};var A2=class{route;type=Dn.RouteConfigLoadStart;constructor(r){this.route=r}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}};var F2=class{route;type=Dn.RouteConfigLoadEnd;constructor(r){this.route=r}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}};var P2=class{snapshot;type=Dn.ChildActivationStart;constructor(r){this.snapshot=r}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||``}')`}};var O2=class{snapshot;type=Dn.ChildActivationEnd;constructor(r){this.snapshot=r}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||``}')`}};var V2=class{snapshot;type=Dn.ActivationStart;constructor(r){this.snapshot=r}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||``}')`}};var L2=class{snapshot;type=Dn.ActivationEnd;constructor(r){this.snapshot=r}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||``}')`}};var lm=class{routerEvent;position;anchor;scrollBehavior;type=Dn.Scroll;constructor(r,e,t,n){this.routerEvent=r,this.position=e,this.anchor=t,this.scrollBehavior=n}toString(){let r=this.position?`${this.position[0]}, ${this.position[1]}`:null;return`Scroll(anchor: '${this.anchor}', position: '${r}')`}};var Yu=class{};var cm=class{};var Zu=class{url;navigationBehaviorOptions;constructor(r,e){this.url=r,this.navigationBehaviorOptions=e}};function a0e(i){return!(i instanceof Yu)&&!(i instanceof Zu)&&!(i instanceof cm)}var z2=class{rootInjector;outlet=null;route=null;children;attachRef=null;get injector(){return this.route?.snapshot._environmentInjector??this.rootInjector}constructor(r){this.rootInjector=r,this.children=new eg(this.rootInjector)}};var eg=(()=>{class i{rootInjector;contexts=new Map;constructor(e){this.rootInjector=e}onChildOutletCreated(e,t){let n=this.getOrCreateContext(e);n.outlet=t,this.contexts.set(e,n)}onChildOutletDestroyed(e){let t=this.getContext(e);t&&(t.outlet=null,t.attachRef=null)}onOutletDeactivated(){let e=this.contexts;return this.contexts=new Map,e}onOutletReAttached(e){this.contexts=e}getOrCreateContext(e){let t=this.getContext(e);return t||(t=new z2(this.rootInjector),this.contexts.set(e,t)),t}getContext(e){return this.contexts.get(e)||null}static ɵfac=function(t){return new(t||i)(Te(Yt))};static ɵprov=de({token:i,factory:i.ɵfac,providedIn:`root`})}return i})();var Sy=class{_root;constructor(r){this._root=r}get root(){return this._root.value}parent(r){let e=this.pathFromRoot(r);return e.length>1?e[e.length-2]:null}children(r){let e=B2(r,this._root);return e?e.children.map(t=>t.value):[]}firstChild(r){let e=B2(r,this._root);return e&&e.children.length>0?e.children[0].value:null}siblings(r){let e=H2(r,this._root);return e.length<2?[]:e[e.length-2].children.map(n=>n.value).filter(n=>n!==r)}pathFromRoot(r){return H2(r,this._root).map(e=>e.value)}};function B2(i,r){if(i===r.value)return r;for(let e of r.children){let t=B2(i,e);if(t)return t}return null}function H2(i,r){if(i===r.value)return[r];for(let e of r.children){let t=H2(i,e);if(t.length)return t.unshift(r),t}return[]}var jr=class{value;children;constructor(r,e){this.value=r,this.children=e}toString(){return`TreeNode(${this.value})`}};function Uu(i){let r={};return i&&i.children.forEach(e=>r[e.value.outlet]=e),r}var wy=class extends Sy{snapshot;constructor(r,e){super(r),this.snapshot=e,X2(this,r)}toString(){return this.snapshot.toString()}};function s7(i,r){let e=s0e(i,r),t=new Gi([new Wc(``,{})]),n=new Gi({}),o=new Gi({}),l=new Qc(t,n,new Gi({}),new Gi(``),o,xt,i,e.root);return l.snapshot=e.root,new wy(new jr(l,[]),e)}function s0e(i,r){return new Cy(``,new jr(new dm([],{},{},``,{},xt,i,null,{},r),[]))}var Qc=class{urlSubject;paramsSubject;queryParamsSubject;fragmentSubject;dataSubject;outlet;component;snapshot;_futureSnapshot;_routerState;_paramMap;_queryParamMap;title;url;params;queryParams;fragment;data;resources;_localInjector;pending;paramsSignal;queryParamsSignal;paramMapSignal;queryParamMapSignal;fragmentSignal;dataSignal;constructor(r,e,t,n,o,a,s,l){this.urlSubject=r,this.paramsSubject=e,this.queryParamsSubject=t,this.fragmentSubject=n,this.dataSubject=o,this.outlet=a,this.component=s,this._futureSnapshot=l,this.title=this.dataSubject?.pipe(Pt(c=>c[hm]))??lt(void 0),this.url=r,this.params=e,this.queryParams=t,this.fragment=n,this.data=o}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=this.params.pipe(Pt(r=>qu(r))),this._paramMap}get queryParamMap(){return this._queryParamMap??=this.queryParams.pipe(Pt(r=>qu(r))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}_setPending(r){this._futureSnapshot=r,this.pending?.set(!0)}};var l0e=`always`;function Z2(i,r$20,e){let t,{routeConfig:n}=i;return r$20!==null&&(e===`always`||n?.path===``||!r$20.component&&!r$20.routeConfig?.loadComponent)?t={params:r(r({},r$20.params),i.params),data:r(r({},r$20.data),i.data),resolve:r(r(r(r({},i.data),r$20.data),n?.data),i._resolvedData)}:t={params:r({},i.params),data:r({},i.data),resolve:r(r({},i.data),i._resolvedData??{})},n&&c7(n)&&(t.resolve[hm]=n.title),t}var dm=class{url;params;queryParams;fragment;data;outlet;component;routeConfig;_resolve;_resolvedData;_routerState;_paramMap;_queryParamMap;_environmentInjector;resources;get title(){return this.data?.[hm]}constructor(r,e,t,n,o,a,s,l,c,d){this.url=r,this.params=e,this.queryParams=t,this.fragment=n,this.data=o,this.outlet=a,this.component=s,this.routeConfig=l,this._resolve=c,this._environmentInjector=d}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=qu(this.params),this._paramMap}get queryParamMap(){return this._queryParamMap??=qu(this.queryParams),this._queryParamMap}toString(){return`Route(url:'${this.url.map(t=>t.toString()).join(`/`)}', path:'${this.routeConfig?this.routeConfig.path:``}')`}};var Cy=class extends Sy{url;constructor(r,e){super(e),this.url=r,X2(this,e)}toString(){return l7(this._root)}};function X2(i,r){r.value._routerState=i,r.children.forEach(e=>X2(i,e))}function l7(i){let r=i.children.length>0?` { ${i.children.map(l7).join(`, `)} } `:``;return`${i.value}${r}`}function S2(i){if(i.snapshot){let r=i.snapshot,e=i._futureSnapshot;i.snapshot=e,Ea(r.queryParams,e.queryParams)||i.queryParamsSubject.next(e.queryParams),r.fragment!==e.fragment&&i.fragmentSubject.next(e.fragment),Ea(r.params,e.params)||i.paramsSubject.next(e.params),Fve(r.url,e.url)||i.urlSubject.next(e.url),Ea(r.data,e.data)||i.dataSubject.next(e.data)}else i.snapshot=i._futureSnapshot,i.dataSubject.next(i._futureSnapshot.data)}function G2(i,r){let e=Ea(i.params,r.params)&&zve(i.url,r.url),t=!i.parent!=!r.parent;return e&&!t&&(!i.parent||G2(i.parent,r.parent))}function c7(i){return typeof i.title==`string`||i.title===null}var c0e=new le(``);var d7=(()=>{class i{activated=null;get activatedComponentRef(){return this.activated}_activatedRoute=null;name=xt;activateEvents=new k;deactivateEvents=new k;attachEvents=new k;detachEvents=new k;routerOutletData=lc();parentContexts=_(eg);location=_(hi);changeDetector=_(Ne);inputBinder=_(mm,{optional:!0});supportsBindingToComponentInputs=!0;ngOnChanges(e){if(e.name){let{firstChange:t,previousValue:n}=e.name;if(t)return;this.isTrackedInParentContexts(n)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(n)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(e){return this.parentContexts.getContext(e)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;let e=this.parentContexts.getContext(this.name);e?.route&&(e.attachRef?this.attach(e.attachRef,e.route):this.activateWith(e.route,e.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new X(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new X(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new X(4012,!1);this.location.detach();let e=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(e.instance),e}attach(e,t){this.activated=e,this._activatedRoute=t,this.location.insert(e.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(e.instance)}deactivate(){if(this.activated){let e=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(e)}}activateWith(e,t){if(this.isActivated)throw new X(4013,!1);this._activatedRoute=e;let n=this.location,a=e.snapshot.component,s=this.parentContexts.getOrCreateContext(this.name).children,l=new U2(e,s,n.injector,this.routerOutletData);this.activated=n.createComponent(a,{index:n.length,injector:l,environmentInjector:t}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static ɵfac=function(t){return new(t||i)};static ɵdir=L({type:i,selectors:[[`router-outlet`]],inputs:{name:`name`,routerOutletData:[1,`routerOutletData`]},outputs:{activateEvents:`activate`,deactivateEvents:`deactivate`,attachEvents:`attach`,detachEvents:`detach`},exportAs:[`outlet`],features:[Si]})}return i})();var U2=class{route;childContexts;parent;outletData;constructor(r,e,t,n){this.route=r,this.childContexts=e,this.parent=t,this.outletData=n}get(r,e){return r===Qc?this.route:r===eg?this.childContexts:r===c0e?this.outletData:this.parent.get(r,e)}};var mm=new le(``);var u7=(()=>{class i{options;outletDataSubscriptions=new Map;outletSeenKeys=new Map;constructor(e){this.options=e,this.options.queryParams??=!0}bindActivatedRouteToOutletComponent(e){this.unsubscribeFromRouteData(e),this.subscribeToRouteData(e)}unsubscribeFromRouteData(e){this.outletDataSubscriptions.get(e)?.unsubscribe(),this.outletDataSubscriptions.delete(e),this.outletSeenKeys.delete(e)}subscribeToRouteData(e){let{activatedRoute:t}=e,n=Ym([this.options.queryParams?t.queryParams:lt({}),t.params,t.data]).pipe(Ui(([o,a,s],l)=>(s=r(r(r({},o),a),s),l===0?lt(s):Promise.resolve(s)))).subscribe(o=>{if(!e.isActivated||!e.activatedComponentRef||e.activatedRoute!==t||t.component===null){this.unsubscribeFromRouteData(e);return}let a=Y5(t.component);if(!a){this.unsubscribeFromRouteData(e);return}let s=this.outletSeenKeys.get(e);s||(s=new Set,this.outletSeenKeys.set(e,s));for(let c of Object.keys(o))s.add(c);let l=this.options.unmatchedInputBehavior??`alwaysUndefined`;for(let{templateName:c}of a.inputs){let d=o[c];(d!==void 0||l===`alwaysUndefined`||s.has(c))&&e.activatedComponentRef.setInput(c,d)}});this.outletDataSubscriptions.set(e,n)}static ɵfac=function(t){ip()};static ɵprov=de({token:i,factory:i.ɵfac})}return i})();var g7=(()=>{class i{static ɵfac=function(t){return new(t||i)};static ɵcmp=Z({type:i,selectors:[[`ng-component`]],exportAs:[`emptyRouterOutlet`],decls:1,vars:0,template:function(t,n){t&1&&R(0,`router-outlet`)},dependencies:[d7],encapsulation:2,changeDetection:1})}return i})();function J2(i){let r$21=i.children&&i.children.map(J2),e=r$21?s(r({},i),{children:r$21}):r({},i);return!e.component&&!e.loadComponent&&(r$21||e.loadChildren)&&e.outlet&&e.outlet!==xt&&(e.component=g7),e}function d0e(i,r,e){let t=new Set;return{newlyCreatedRoutes:t,state:new wy(um(i,r._root,e?e._root:void 0,t),r)}}function um(i,r,e,t){if(e&&i.shouldReuseRoute(r.value,e.value.snapshot)){let n=e.value;n._setPending(r.value);return new jr(n,u0e(i,r,e,t))}else{if(i.shouldAttach(r.value)){let a=i.retrieve(r.value);if(a!==null){let s=a.route;return s.value._setPending(r.value),s.children=r.children.map(l=>um(i,l,void 0,t)),s}}let n=g0e(r.value);n._setPending(r.value),t.add(n);return new jr(n,r.children.map(a=>um(i,a,void 0,t)))}}function u0e(i,r,e,t){return r.children.map(n=>{for(let o of e.children)if(i.shouldReuseRoute(n.value,o.value.snapshot))return um(i,n,o,t);return um(i,n,void 0,t)})}function g0e(i){return new Qc(new Gi(i.url),new Gi(i.params),new Gi(i.queryParams),new Gi(i.fragment),new Gi(i.data),i.outlet,i.component,i)}var gm=class{redirectTo;navigationBehaviorOptions;constructor(r,e){this.redirectTo=r,this.navigationBehaviorOptions=e}};var p7=`ngNavigationCancelingError`;function Iy(i,r){let{redirectTo:e,navigationBehaviorOptions:t}=Qu(r)?{redirectTo:r,navigationBehaviorOptions:void 0}:r,n=h7(!1,cr.Redirect);return n.url=e,n.navigationBehaviorOptions=t,n}function h7(i,r){let e=new Error(`NavigationCancelingError: ${i||``}`);return e[p7]=!0,e.cancellationCode=r,e}function p0e(i){return m7(i)&&Qu(i.url)}function m7(i){return!!i&&i[p7]}var j2=class{routeReuseStrategy;futureState;currState;forwardEvent;inputBindingEnabled;constructor(r,e,t,n,o){this.routeReuseStrategy=r,this.futureState=e,this.currState=t,this.forwardEvent=n,this.inputBindingEnabled=o}activate(r){let e=this.futureState._root,t=this.currState?this.currState._root:null;this.deactivateChildRoutes(e,t,r),S2(this.futureState.root),this.activateChildRoutes(e,t,r)}deactivateChildRoutes(r,e,t){let n=Uu(e);r.children.forEach(o=>{let a=o.value.outlet;this.deactivateRoutes(o,n[a],t),delete n[a]}),Object.values(n).forEach(o=>{this.deactivateRouteAndItsChildren(o,t)})}deactivateRoutes(r,e,t){let n=r.value,o=e?e.value:null;if(n===o)if(n.component){let a=t.getContext(n.outlet);a&&this.deactivateChildRoutes(r,e,a.children)}else this.deactivateChildRoutes(r,e,t);else o&&this.deactivateRouteAndItsChildren(e,t)}deactivateRouteAndItsChildren(r,e){r.value.component&&this.routeReuseStrategy.shouldDetach(r.value.snapshot)?this.detachAndStoreRouteSubtree(r,e):this.deactivateRouteAndOutlet(r,e)}detachAndStoreRouteSubtree(r,e){let t=e.getContext(r.value.outlet),n=t&&r.value.component?t.children:e,o=Uu(r);for(let a of Object.values(o))this.deactivateRouteAndItsChildren(a,n);if(t&&t.outlet){let a=t.outlet.detach(),s=t.children.onOutletDeactivated();this.routeReuseStrategy.store(r.value.snapshot,{componentRef:a,route:r,contexts:s})}}deactivateRouteAndOutlet(r,e){let t=e.getContext(r.value.outlet),n=t&&r.value.component?t.children:e,o=Uu(r);for(let a of Object.values(o))this.deactivateRouteAndItsChildren(a,n);t&&(t.outlet&&(t.outlet.deactivate(),t.children.onOutletDeactivated()),t.attachRef=null,t.route=null),r.value._localInjector?.destroy()}activateChildRoutes(r,e,t){let n=Uu(e);r.children.forEach(o=>{this.activateRoutes(o,n[o.value.outlet],t),this.forwardEvent(new L2(o.value.snapshot))}),r.children.length&&this.forwardEvent(new O2(r.value.snapshot))}activateRoutes(r,e,t){let n=r.value,o=e?e.value:null;if(S2(n),n===o)if(n.component){let a=t.getOrCreateContext(n.outlet);this.activateChildRoutes(r,e,a.children)}else this.activateChildRoutes(r,e,t);else if(n.component){let a=t.getOrCreateContext(n.outlet);if(this.routeReuseStrategy.shouldAttach(n.snapshot)){let s=this.routeReuseStrategy.retrieve(n.snapshot);this.routeReuseStrategy.store(n.snapshot,null),a.children.onOutletReAttached(s.contexts),a.attachRef=s.componentRef,a.route=s.route.value,a.outlet&&a.outlet.attach(s.componentRef,s.route.value),S2(s.route.value),this.activateChildRoutes(r,null,a.children)}else a.attachRef=null,a.route=n,a.outlet&&a.outlet.activateWith(n,a.injector),this.activateChildRoutes(r,null,a.children)}else this.activateChildRoutes(r,null,t)}};var Ny=class{path;route;constructor(r){this.path=r,this.route=this.path[this.path.length-1]}};var $u=class{component;route;constructor(r,e){this.component=r,this.route=e}};function h0e(i,r,e){let t=i._root;return nm(t,r?r._root:null,e,[t.value])}function m0e(i){let r=i.routeConfig?i.routeConfig.canActivateChild:null;return!r||r.length===0?null:{node:i,guards:r}}function tg(i,r){let e=Symbol(),t=r.get(i,e);return t===e?typeof i==`function`&&!vb(i)?i:r.get(i):t}function nm(i,r,e,t,n={canDeactivateChecks:[],canActivateChecks:[]}){let o=Uu(r);return i.children.forEach(a=>{f0e(a,o[a.value.outlet],e,t.concat([a.value]),n),delete o[a.value.outlet]}),Object.entries(o).forEach(([a,s])=>om(s,e.getContext(a),e,n)),n}function f0e(i,r,e,t,n={canDeactivateChecks:[],canActivateChecks:[]}){let o=i.value,a=r?r.value:null,s=e?e.getContext(i.value.outlet):null;if(a&&o.routeConfig===a.routeConfig){let l=_0e(a,o,o.routeConfig.runGuardsAndResolvers);l?n.canActivateChecks.push(new Ny(t)):(o.data=a.data,o._resolvedData=a._resolvedData),o.component?nm(i,r,s?s.children:null,t,n):nm(i,r,e,t,n),l&&s&&s.outlet&&s.outlet.isActivated&&n.canDeactivateChecks.push(new $u(s.outlet.component,a))}else a&&om(r,s,e,n),n.canActivateChecks.push(new Ny(t)),o.component?nm(i,null,s?s.children:null,t,n):nm(i,null,e,t,n);return n}function _0e(i,r,e){if(typeof e==`function`)return qi(r._environmentInjector,()=>e(i,r));switch(e){case`pathParamsChange`:return!$c(i.url,r.url);case`pathParamsOrQueryParamsChange`:return!$c(i.url,r.url)||!Ea(i.queryParams,r.queryParams);case`always`:return!0;case`paramsOrQueryParamsChange`:return!G2(i,r)||!Ea(i.queryParams,r.queryParams);default:return!G2(i,r)}}function om(i,r,e,t){let n=Uu(i),o=i.value;Object.entries(n).forEach(([a,s])=>{o.component?r?om(s,r.children.getContext(a),r.children,t):om(s,null,null,t):om(s,e?e.getContext(a):null,e,t)}),o.component?r&&r.outlet&&r.outlet.isActivated?t.canDeactivateChecks.push(new $u(r.outlet.component,o)):t.canDeactivateChecks.push(new $u(null,o)):t.canDeactivateChecks.push(new $u(null,o))}function fm(i){return typeof i==`function`}function x0e(i){return typeof i==`boolean`}function v0e(i){return i&&fm(i.canLoad)}function y0e(i){return i&&fm(i.canActivate)}function b0e(i){return i&&fm(i.canActivateChild)}function S0e(i){return i&&fm(i.canDeactivate)}function w0e(i){return i&&fm(i.canMatch)}function f7(i){return i instanceof Pl||i?.name===`EmptyError`}var hy=Symbol(`INITIAL_VALUE`);function Xu(){return Ui(i=>Ym(i.map(r=>r.pipe(ur(1),rb(hy)))).pipe(Pt(r=>{for(let e of r)if(e!==!0){if(e===hy)return hy;if(e===!1||C0e(e))return e}return!0}),gt(r=>r!==hy),ur(1)))}function C0e(i){return Qu(i)||i instanceof gm}function _7(i){return i.aborted?lt(void 0).pipe(ur(1)):new qe(r=>{let e=()=>{r.next(),r.complete()};return i.addEventListener(`abort`,e),()=>i.removeEventListener(`abort`,e)})}function x7(i){return U(_7(i))}function I0e(i){return en(r$22=>{let{targetSnapshot:e,currentSnapshot:t,guards:{canActivateChecks:n,canDeactivateChecks:o}}=r$22;return o.length===0&&n.length===0?lt(s(r({},r$22),{guardsResult:!0})):N0e(o,e,t).pipe(en(a=>a&&x0e(a)?D0e(e,n,i):lt(a)),Pt(a=>s(r({},r$22),{guardsResult:a})))})}function N0e(i,r,e){return ui(i).pipe(en(t=>R0e(t.component,t.route,e,r)),zt(t=>t!==!0,!0))}function D0e(i,r,e){return ui(r).pipe(ks(t=>dd(E0e(t.route.parent,e),T0e(t.route,e),M0e(i,t.path),k0e(i,t.route))),zt(t=>t!==!0,!0))}function T0e(i,r){return i!==null&&r&&r(new V2(i)),lt(!0)}function E0e(i,r){return i!==null&&r&&r(new P2(i)),lt(!0)}function k0e(i,r){let e=r.routeConfig?r.routeConfig.canActivate:null;if(!e||e.length===0)return lt(!0);return lt(e.map(n=>ug(()=>{let o=r._environmentInjector,a=tg(n,o);return Kc(y0e(a)?a.canActivate(r,i):qi(o,()=>a(r,i))).pipe(zt())}))).pipe(Xu())}function M0e(i,r){let e=r[r.length-1];return lt(r.slice(0,r.length-1).reverse().map(o=>m0e(o)).filter(o=>o!==null).map(o=>ug(()=>{return lt(o.guards.map(s=>{let l=o.node._environmentInjector,c=tg(s,l);return Kc(b0e(c)?c.canActivateChild(e,i):qi(l,()=>c(e,i))).pipe(zt())})).pipe(Xu())}))).pipe(Xu())}function R0e(i,r,e,t){let n=r&&r.routeConfig?r.routeConfig.canDeactivate:null;if(!n||n.length===0)return lt(!0);return lt(n.map(a=>{let s=r._environmentInjector,l=tg(a,s);return Kc(S0e(l)?l.canDeactivate(i,r,e,t):qi(s,()=>l(i,r,e,t))).pipe(zt())})).pipe(Xu())}function A0e(i,r,e,t,n){let o=r.canLoad;if(o===void 0||o.length===0)return lt(!0);return lt(o.map(s=>{let l=tg(s,i),d=Kc(v0e(l)?l.canLoad(r,e):qi(i,()=>l(r,e)));return n?d.pipe(x7(n)):d})).pipe(Xu(),v7(t))}function v7(i){return rd(gr(r=>{if(typeof r!=`boolean`)throw Iy(i,r)}),Pt(r=>r===!0))}function F0e(i,r,e,t,n,o){let a=r.canMatch;if(!a||a.length===0)return lt(!0);return lt(a.map(l=>{let c=tg(l,i);return Kc(w0e(c)?c.canMatch(r,e,n):qi(i,()=>c(r,e,n))).pipe(x7(o))})).pipe(Xu(),v7(t))}var Is=class i extends Error{segmentGroup;constructor(r){super(),this.segmentGroup=r||null,Object.setPrototypeOf(this,i.prototype)}};var pm=class i extends Error{urlTree;constructor(r){super(),this.urlTree=r,Object.setPrototypeOf(this,i.prototype)}};function P0e(i){throw new X(4e3,!1)}function O0e(i){throw h7(!1,cr.GuardRejected)}var W2=class{urlSerializer;urlTree;constructor(r,e){this.urlSerializer=r,this.urlTree=e}async lineralizeSegments(r,e){let t=[],n=e.root;for(;;){if(t=t.concat(n.segments),n.numberOfChildren===0)return t;if(n.numberOfChildren>1||!n.children[xt])throw P0e(`${r.redirectTo}`);n=n.children[xt]}}async applyRedirectCommands(r,e,t,n,o){let a=await V0e(e,n,o);if(a instanceof $o)throw new pm(a);let s=this.applyRedirectCreateUrlTree(a,this.urlSerializer.parse(a),r,t);if(a[0]===`/`)throw new pm(s);return s}applyRedirectCreateUrlTree(r,e,t,n){return new $o(this.createSegmentGroup(r,e.root,t,n),this.createQueryParams(e.queryParams,this.urlTree.queryParams),e.fragment)}createQueryParams(r,e){let t={};return Object.entries(r).forEach(([n,o])=>{if(typeof o==`string`&&o[0]===`:`){let s=o.substring(1);t[n]=e[s]}else t[n]=o}),t}createSegmentGroup(r,e,t,n){let o=this.createSegments(r,e.segments,t,n),a=Object.create(null);return Object.entries(e.children).forEach(([s,l])=>{a[s]=this.createSegmentGroup(r,l,t,n)}),new oi(o,a)}createSegments(r,e,t,n){return e.map(o=>o.path[0]===`:`?this.findPosParam(r,o,n):this.findOrReturn(o,t))}findPosParam(r,e,t){let n=t[e.path.substring(1)];if(!n)throw new X(4001,!1);return n}findOrReturn(r,e){let t=0;for(let n of e){if(n.path===r.path)return e.splice(t),n;t++}return r}};function V0e(i,r,e){if(typeof i==`string`)return Promise.resolve(i);let t=i;return xy(Kc(qi(e,()=>t(r))))}function L0e(i,r){return i.providers&&!i._injector&&(i._injector=Fd(i.providers,r,`Route: ${i.path}`)),i._injector??r}function Wo(i){return i.outlet||xt}function z0e(i,r){let e=i.filter(t=>Wo(t)===r);return e.push(...i.filter(t=>Wo(t)!==r)),e}var $2={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function y7(i){return{routeConfig:i.routeConfig,url:i.url,params:i.params,queryParams:i.queryParams,fragment:i.fragment,data:i.data,outlet:i.outlet,title:i.title,paramMap:i.paramMap,queryParamMap:i.queryParamMap}}function B0e(i,r$23,e,t,n,o,a){let s=b7(i,r$23,e);if(!s.matched)return lt(s);let l=y7(o(s));return t=L0e(r$23,t),F0e(t,r$23,e,n,l,a).pipe(Pt(c=>c===!0?s:r({},$2)))}function b7(i,r$24,e){if(r$24.path===``)return r$24.pathMatch===`full`&&(i.hasChildren()||e.length>0)?r({},$2):{matched:!0,consumedSegments:[],remainingSegments:e,parameters:{},positionalParamSegments:{}};let n=(r$24.matcher||Ave)(e,i,r$24);if(!n)return r({},$2);let o={};Object.entries(n.posParams??{}).forEach(([s,l])=>{o[s]=l.path});let a=n.consumed.length>0?r(r({},o),n.consumed[n.consumed.length-1].parameters):o;return{matched:!0,consumedSegments:n.consumed,remainingSegments:e.slice(n.consumed.length),parameters:a,positionalParamSegments:n.posParams??{}}}function UL(i,r,e,t,n){return e.length>0&&U0e(i,e,t,n)?{segmentGroup:new oi(r,G0e(t,new oi(e,i.children))),slicedSegments:[]}:e.length===0&&j0e(i,e,t)?{segmentGroup:new oi(i.segments,H0e(i,e,t,i.children)),slicedSegments:e}:{segmentGroup:new oi(i.segments,i.children),slicedSegments:e}}function H0e(i,r$25,e,t){let n={};for(let o of e)if(Dy(i,r$25,o)&&!t[Wo(o)]){let a=new oi([],{});n[Wo(o)]=a}return r(r({},t),n)}function G0e(i,r){let e={};e[xt]=r;for(let t of i)if(t.path===``&&Wo(t)!==xt){let n=new oi([],{});e[Wo(t)]=n}return e}function U0e(i,r,e,t){return e.some(n=>!Dy(i,r,n)||!(Wo(n)!==xt)?!1:!(t!==void 0&&Wo(n)===t))}function j0e(i,r,e){return e.some(t=>Dy(i,r,t))}function Dy(i,r,e){return(i.hasChildren()||r.length>0)&&e.pathMatch===`full`?!1:e.path===``}function W0e(i,r,e){return r.length===0&&!i.children[e]}var q2=class{};async function $0e(i,r,e,t,n,o,a,s){return new Q2(i,r,e,t,n,a,o,s).recognize()}var q0e=31;var Q2=class{injector;configLoader;rootComponentType;config;urlTree;paramsInheritanceStrategy;urlSerializer;abortSignal;applyRedirects;absoluteRedirectCount=0;allowRedirects=!0;constructor(r,e,t,n,o,a,s,l){this.injector=r,this.configLoader=e,this.rootComponentType=t,this.config=n,this.urlTree=o,this.paramsInheritanceStrategy=a,this.urlSerializer=s,this.abortSignal=l,this.applyRedirects=new W2(this.urlSerializer,this.urlTree)}noMatchError(r){return new X(4002,`'${r.segmentGroup}'`)}async recognize(){let r=UL(this.urlTree.root,[],[],this.config).segmentGroup,{children:e,rootSnapshot:t}=await this.match(r),o=new Cy(``,new jr(t,e)),a=Jve(t,[],this.urlTree.queryParams,this.urlTree.fragment);return a.queryParams=this.urlTree.queryParams,o.url=this.urlSerializer.serialize(a),{state:o,tree:a}}async match(r$26){let e=new dm([],Object.freeze({}),Object.freeze(r({},this.urlTree.queryParams)),this.urlTree.fragment,Object.freeze({}),xt,this.rootComponentType,null,{},this.injector);try{return{children:await this.processSegmentGroup(this.injector,this.config,r$26,xt,e),rootSnapshot:e}}catch(t){if(t instanceof pm)return this.urlTree=t.urlTree,this.match(t.urlTree.root);throw t instanceof Is?this.noMatchError(t):t}}async processSegmentGroup(r,e,t,n,o){if(t.segments.length===0&&t.hasChildren())return this.processChildren(r,e,t,o);let a=await this.processSegment(r,e,t,t.segments,n,!0,o);return a instanceof jr?[a]:[]}async processChildren(r,e,t,n){let o=[];for(let l of Object.keys(t.children))l===`primary`?o.unshift(l):o.push(l);let a=[];for(let l of o){let c=t.children[l],d=z0e(e,l),p=await this.processSegmentGroup(r,d,c,l,n);a.push(...p)}let s=S7(a);return Q0e(s),s}async processSegment(r,e,t,n,o,a,s){for(let l of e)try{return await this.processSegmentAgainstRoute(l._injector??r,e,l,t,n,o,a,s)}catch(c){if(c instanceof Is||f7(c))continue;throw c}if(W0e(t,n,o))return new q2;throw new Is(t)}async processSegmentAgainstRoute(r,e,t,n,o,a,s,l){if(Wo(t)!==a&&(a===xt||!Dy(n,o,t)))throw new Is(n);if(t.redirectTo===void 0)return this.matchSegmentAgainstRoute(r,n,t,o,a,l);if(this.allowRedirects&&s)return this.expandSegmentAgainstRouteUsingRedirect(r,n,e,t,o,a,l);throw new Is(n)}async expandSegmentAgainstRouteUsingRedirect(r,e,t,n,o,a,s){let{matched:l,parameters:c,consumedSegments:d,positionalParamSegments:p,remainingSegments:f}=b7(e,n,o);if(!l)throw new Is(e);typeof n.redirectTo==`string`&&n.redirectTo[0]===`/`&&(this.absoluteRedirectCount++,this.absoluteRedirectCount>q0e&&(this.allowRedirects=!1));let v=this.createSnapshot(r,n,o,c,s);if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);let y=await this.applyRedirects.applyRedirectCommands(d,n.redirectTo,p,y7(v),r),T=await this.applyRedirects.lineralizeSegments(n,y);return this.processSegment(r,t,e,T.concat(f),a,!1,s)}createSnapshot(r$27,e,t,n,o){let a=new dm(t,n,Object.freeze(r({},this.urlTree.queryParams)),this.urlTree.fragment,Y0e(e),Wo(e),e.component??e._loadedComponent??null,e,Z0e(e),r$27),s=Z2(a,o,this.paramsInheritanceStrategy);return a.params=Object.freeze(s.params),a.data=Object.freeze(s.data),a}async matchSegmentAgainstRoute(r,e,t,n,o,a){if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);let s=W=>this.createSnapshot(r,t,W.consumedSegments,W.parameters,a),l=await xy(B0e(e,t,n,r,this.urlSerializer,s,this.abortSignal));if(t.path===`**`&&(e.children={}),!l?.matched)throw new Is(e);r=t._injector??r;let{routes:c}=await this.getChildConfig(r,t,n),d=t._loadedInjector??r,{parameters:p,consumedSegments:f,remainingSegments:v}=l,y=this.createSnapshot(r,t,f,p,a),{segmentGroup:T,slicedSegments:M}=UL(e,f,v,c,o);if(M.length===0&&T.hasChildren())return new jr(y,await this.processChildren(d,c,T,y));if(c.length===0&&M.length===0)return new jr(y,[]);let F=Wo(t)===o,A=await this.processSegment(d,c,T,M,F?xt:o,!0,y);return new jr(y,A instanceof jr?[A]:[])}async getChildConfig(r,e,t){if(e.children)return{routes:e.children,injector:r};if(e.loadChildren){if(e._loadedRoutes!==void 0){let o=e._loadedNgModuleFactory;return o&&!e._loadedInjector&&(e._loadedInjector=o.create(r).injector),{routes:e._loadedRoutes,injector:e._loadedInjector}}if(this.abortSignal.aborted)throw new Error(this.abortSignal.reason);if(await xy(A0e(r,e,t,this.urlSerializer,this.abortSignal))){let o=await this.configLoader.loadChildren(r,e);return e._loadedRoutes=o.routes,e._loadedInjector=o.injector,e._loadedNgModuleFactory=o.factory,o}throw O0e(e)}return{routes:[],injector:r}}};function Q0e(i){i.sort((r,e)=>r.value.outlet===xt?-1:e.value.outlet===xt?1:r.value.outlet.localeCompare(e.value.outlet))}function K0e(i){let r=i.value.routeConfig;return r&&r.path===``}function S7(i){let r=[],e=new Set;for(let t of i){if(!K0e(t)){r.push(t);continue}let n=r.find(o=>t.value.routeConfig===o.value.routeConfig);n!==void 0?(n.children.push(...t.children),e.add(n)):r.push(t)}for(let t of e){let n=S7(t.children);r.push(new jr(t.value,n))}return r.filter(t=>!e.has(t))}function Y0e(i){return i.data||{}}function Z0e(i){return i.resolve||{}}function X0e(i,r$28,e,t,n,o,a){return en(async s$6=>{let{state:l,tree:c}=await $0e(i,r$28,e,t,s$6.extractedUrl,n,o,a);return s(r({},s$6),{targetSnapshot:l,urlAfterRedirects:c})})}function J0e(i){return en(r=>{let{targetSnapshot:e,guards:{canActivateChecks:t}}=r;if(!t.length)return lt(r);let n=new Set(t.map(s=>s.route)),o=new Set;for(let s of n)if(!o.has(s))for(let l of w7(s))o.add(l);let a=0;return ui(o).pipe(ks(s=>n.has(s)?eye(s,e,i):(s.data=Z2(s,s.parent,i).resolve,lt(void 0))),gr(()=>a++),Zm(1),en(s=>a===o.size?lt(r):Ji))})}function w7(i){return[i,...i.children.map(e=>w7(e)).flat()]}function eye(i,r$29,e){let t=i.routeConfig,n=i._resolve;return t?.title!==void 0&&!c7(t)&&(n[hm]=t.title),ug(()=>(i.data=Z2(i,i.parent,e).resolve,tye(n,i,r$29).pipe(Pt(o=>(i._resolvedData=o,i.data=r(r({},i.data),o),null)))))}function tye(i,r,e){let t=C2(i);if(t.length===0)return lt({});let n={};return ui(t).pipe(en(o=>iye(i[o],r,e).pipe(zt(),gr(a=>{if(a instanceof gm)throw Iy(new vl,a);n[o]=a}))),Zm(1),Pt(()=>n),ud(o=>f7(o)?Ji:Zy(o)))}function iye(i,r,e){let t=r._environmentInjector,n=tg(i,t);return Kc(n.resolve?n.resolve(r,e):qi(t,()=>n(r,e)))}var C7=new le(``);function K2(i){return Ui(r=>{let e=i(r);return e?ui(e).pipe(Pt(()=>r)):lt(r)})}var I7=(()=>{class i{buildTitle(e){let t,n=e.root;for(;n!==void 0;)t=this.getResolvedTitleForRoute(n)??t,n=n.children.find(o=>o.outlet===xt);return t}getResolvedTitleForRoute(e){return e.data[hm]}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:()=>_(nye)})}return i})();var nye=(()=>{class i extends I7{title;constructor(e){super(),this.title=e}updateTitle(e){let t=this.buildTitle(e);t!==void 0&&this.title.setTitle(t)}static ɵfac=function(t){return new(t||i)(Te(Q4))};static ɵprov=de({token:i,factory:i.ɵfac,providedIn:`root`})}return i})();var ig=new le(``,{factory:()=>({})});var _m=new le(``);var Ty=(()=>{class i{componentLoaders=new WeakMap;childrenLoaders=new WeakMap;onLoadStartListener;onLoadEndListener;compiler=_(GS);async loadComponent(e,t){if(this.componentLoaders.get(t))return this.componentLoaders.get(t);if(t._loadedComponent)return Promise.resolve(t._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(t);let n=(async()=>{try{let a=await N7(JS(await $L(qi(e,()=>t.loadComponent()))));return this.onLoadEndListener&&this.onLoadEndListener(t),t._loadedComponent=a,a}finally{this.componentLoaders.delete(t)}})();return this.componentLoaders.set(t,n),n}loadChildren(e,t){if(this.childrenLoaders.get(t))return this.childrenLoaders.get(t);if(t._loadedRoutes)return Promise.resolve({routes:t._loadedRoutes,injector:t._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(t);let n=(async()=>{try{let o=await rye(t,this.compiler,e,this.onLoadEndListener);return t._loadedRoutes=o.routes,t._loadedInjector=o.injector,t._loadedNgModuleFactory=o.factory,o}finally{this.childrenLoaders.delete(t)}})();return this.childrenLoaders.set(t,n),n}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();async function rye(i,r,e,t){let o=await N7(JS(await $L(qi(e,()=>i.loadChildren())))),a;o instanceof x_||Array.isArray(o)?a=o:a=await r.compileModuleAsync(o),t&&t(i);let s,l,d;return Array.isArray(a)?l=a:(s=a.create(e).injector,d=a,l=s.get(_m,[],{optional:!0,self:!0}).flat()),{routes:l.map(J2),injector:s,factory:d}}async function N7(i){return i}var eT=(()=>{class i{static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:()=>_(oye)})}return i})();var oye=(()=>{class i{shouldProcessUrl(e){return!0}extract(e){return e}merge(e,t){return e}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();var tT=new le(``);var iT=new le(``);function D7(i,r,e){let t=i.get(iT),n=i.get($e);if(!n.startViewTransition||t.skipNextTransition)return t.skipNextTransition=!1,new Promise(c=>setTimeout(c));let o,a=new Promise(c=>{o=c}),s=n.startViewTransition(()=>(o(),aye(i)));s.updateCallbackDone.catch(c=>{}),s.ready.catch(c=>{}),s.finished.catch(c=>{});let{onViewTransitionCreated:l}=t;return l&&qi(i,()=>l({transition:s,from:r,to:e})),a}function aye(i){return new Promise(r=>{$a({read:()=>setTimeout(r)},{injector:i})})}var sye=()=>{};var nT=new le(``);var Ey=(()=>{class i{currentNavigation=gi(null,{equal:()=>!1});currentTransition=null;lastSuccessfulNavigation=gi(null);events=new ce;transitionAbortWithErrorSubject=new ce;configLoader=_(Ty);environmentInjector=_(Yt);destroyRef=_(Mt);urlSerializer=_(Ju);rootContexts=_(eg);location=_(Ws);inputBindingEnabled=_(mm,{optional:!0})!==null;titleStrategy=_(I7);options=_(ig,{optional:!0})||{};paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||l0e;urlHandlingStrategy=_(eT);createViewTransition=_(tT,{optional:!0});navigationErrorHandler=_(nT,{optional:!0});routerResourcesFeature=_(C7,{optional:!0});navigationId=0;get hasRequestedNavigation(){return this.navigationId!==0}transitions;afterPreactivation=()=>lt(void 0);rootComponentType=null;destroyed=!1;constructor(){let e=n=>this.events.next(new A2(n)),t=n=>this.events.next(new F2(n));this.configLoader.onLoadEndListener=t,this.configLoader.onLoadStartListener=e,this.destroyRef.onDestroy(()=>{this.destroyed=!0})}complete(){this.transitions?.complete()}handleNavigationRequest(e){let t=++this.navigationId;pi(()=>{this.transitions?.next(s(r({},e),{extractedUrl:this.urlHandlingStrategy.extract(e.rawUrl),targetSnapshot:null,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null,id:t,routesRecognizeHandler:{},beforeActivateHandler:{}}))})}setupNavigations(e){return this.transitions=new Gi(null),this.transitions.pipe(gt(t=>t!==null),Ui(t=>{let n=!0,o=!1,a=new AbortController,s$7=()=>!o&&this.currentTransition?.id===t.id;return lt(t).pipe(Ui(l=>{if(this.navigationId>t.id)return this.cancelNavigationTransition(t,``,cr.SupersededByNewNavigation),Ji;this.currentTransition=t;let c=this.lastSuccessfulNavigation();this.currentNavigation.set({id:l.id,initialUrl:l.rawUrl,extractedUrl:l.extractedUrl,targetBrowserUrl:typeof l.extras.browserUrl==`string`?this.urlSerializer.parse(l.extras.browserUrl):l.extras.browserUrl,trigger:l.source,extras:l.extras,previousNavigation:c?s(r({},c),{previousNavigation:null}):null,abort:()=>a.abort(),routesRecognizeHandler:l.routesRecognizeHandler,beforeActivateHandler:l.beforeActivateHandler});let d=!e.navigated||this.isUpdatingInternalState()||this.isUpdatedBrowserUrl(),p=l.extras.onSameUrlNavigation??e.onSameUrlNavigation;if(!d&&p!==`reload`)return this.events.next(new Ns(l.id,this.urlSerializer.serialize(l.rawUrl),``,sm.IgnoredSameUrlNavigation)),l.resolve(!1),Ji;if(this.urlHandlingStrategy.shouldProcessUrl(l.rawUrl))return lt(l).pipe(Ui(f=>(this.events.next(new qc(f.id,this.urlSerializer.serialize(f.extractedUrl),f.source,f.restoredState)),f.id!==this.navigationId?Ji:Promise.resolve(f))),X0e(this.environmentInjector,this.configLoader,this.rootComponentType,e.config,this.urlSerializer,this.paramsInheritanceStrategy,a.signal),gr(f=>{t.targetSnapshot=f.targetSnapshot,t.urlAfterRedirects=f.urlAfterRedirects,this.currentNavigation.update(v=>(v.finalUrl=f.urlAfterRedirects,v)),this.events.next(new cm)}),Ui(f=>ui(t.routesRecognizeHandler.deferredHandle??lt(void 0)).pipe(Pt(()=>f))),gr(()=>{let f=new by(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects),l.targetSnapshot);this.events.next(f)}));if(d&&this.urlHandlingStrategy.shouldProcessUrl(l.currentRawUrl)){let{id:f,extractedUrl:v,source:y,restoredState:T,extras:M}=l,F=new qc(f,this.urlSerializer.serialize(v),y,T);this.events.next(F);let A=s7(this.rootComponentType,this.environmentInjector).snapshot;return this.currentTransition=t=s(r({},l),{targetSnapshot:A,urlAfterRedirects:v,extras:s(r({},M),{skipLocationChange:!1,replaceUrl:!1})}),this.currentNavigation.update(W=>(W.finalUrl=v,W)),lt(t)}else return this.events.next(new Ns(l.id,this.urlSerializer.serialize(l.extractedUrl),``,sm.IgnoredByUrlHandlingStrategy)),l.resolve(!1),Ji}),Pt(l=>{let c=new E2(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects),l.targetSnapshot);return this.events.next(c),this.currentTransition=t=s(r({},l),{guards:h0e(l.targetSnapshot,l.currentSnapshot,this.rootContexts)}),t}),I0e(l=>this.events.next(l)),Ui(l=>{if(t.guardsResult=l.guardsResult,l.guardsResult&&typeof l.guardsResult!=`boolean`)throw Iy(this.urlSerializer,l.guardsResult);let c=new k2(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects),l.targetSnapshot,!!l.guardsResult);if(this.events.next(c),!s$7())return Ji;if(!l.guardsResult)return this.cancelNavigationTransition(l,``,cr.GuardRejected),Ji;if(l.guards.canActivateChecks.length===0)return lt(l);let d=new M2(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects),l.targetSnapshot);if(this.events.next(d),!s$7())return Ji;let p=!1;return lt(l).pipe(J0e(this.paramsInheritanceStrategy),gr({next:()=>{p=!0;let f=new R2(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects),l.targetSnapshot);this.events.next(f)},complete:()=>{p||this.cancelNavigationTransition(l,``,cr.NoDataFromResolver)}}))}),K2(l=>{let c=p=>{let f=[];if(p.routeConfig?._loadedComponent)p.component=p.routeConfig?._loadedComponent;else if(p.routeConfig?.loadComponent){let v=p._environmentInjector;f.push(this.configLoader.loadComponent(v,p.routeConfig).then(y=>{p.component=y}))}for(let v of p.children)f.push(...c(v));return f},d=c(l.targetSnapshot.root);return d.length===0?lt(l):ui(Promise.all(d).then(()=>l))}),Ui(l=>{let{newlyCreatedRoutes:c,state:d}=d0e(e.routeReuseStrategy,l.targetSnapshot,l.currentRouterState);return this.currentTransition=t=l=s(r({},l),{targetRouterState:d,newlyCreatedRoutes:c}),this.currentNavigation.update(p=>(p.targetRouterState=d,p)),lt(l)}),this.routerResourcesFeature?.setupAndRunResources(a.signal)??(l=>l),K2(()=>this.afterPreactivation()),Ui(()=>{let{currentSnapshot:l,targetSnapshot:c}=t,d=this.createViewTransition?.(this.environmentInjector,l.root,c.root);return d?ui(d).pipe(Pt(()=>t)):lt(t)}),ur(1),Ui(l=>{n=!1,this.events.next(new Yu);let c=t.beforeActivateHandler.deferredHandle;return c?ui(c.then(()=>l)):lt(l)}),gr(l=>{new j2(e.routeReuseStrategy,t.targetRouterState,t.currentRouterState,c=>this.events.next(c),this.inputBindingEnabled).activate(this.rootContexts),l.newlyCreatedRoutes?.clear(),s$7()&&(T7(l.targetRouterState),o=!0,this.currentNavigation.update(c=>(c.abort=sye,c)),this.lastSuccessfulNavigation.set(pi(this.currentNavigation)),this.events.next(new ka(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects))),this.titleStrategy?.updateTitle(l.targetRouterState.snapshot),l.resolve(!0))}),U(_7(a.signal).pipe(gt(()=>!o&&n),gr(()=>{this.cancelNavigationTransition(t,a.signal.reason+``,cr.Aborted)}))),gr({complete:()=>{o=!0}}),U(this.transitionAbortWithErrorSubject.pipe(gr(l=>{throw l}))),gd(()=>{a.abort(),o||this.cancelNavigationTransition(t,``,cr.SupersededByNewNavigation),this.currentTransition?.id===t.id&&(this.currentNavigation.set(null),this.currentTransition=null)}),ud(l=>{if(o=!0,jL(t),this.destroyed)return t.resolve(!1),Ji;if(m7(l))this.events.next(new jo(t.id,this.urlSerializer.serialize(t.extractedUrl),l.message,l.cancellationCode)),p0e(l)?this.events.next(new Zu(l.url,l.navigationBehaviorOptions)):t.resolve(!1);else{let c=new Ku(t.id,this.urlSerializer.serialize(t.extractedUrl),l,t.targetSnapshot??void 0);try{let d=qi(this.environmentInjector,()=>this.navigationErrorHandler?.(c));if(d instanceof gm){let{message:p,cancellationCode:f}=Iy(this.urlSerializer,d);this.events.next(new jo(t.id,this.urlSerializer.serialize(t.extractedUrl),p,f)),this.events.next(new Zu(d.redirectTo,d.navigationBehaviorOptions))}else throw this.events.next(c),l}catch(d){this.options.resolveNavigationPromiseOnError?t.resolve(!1):t.reject(d)}}return Ji}))}))}cancelNavigationTransition(e,t,n){jL(e);let o=new jo(e.id,this.urlSerializer.serialize(e.extractedUrl),t,n);this.events.next(o),e.resolve(!1)}isUpdatingInternalState(){return this.currentTransition?.extractedUrl.toString()!==this.currentTransition?.currentUrlTree.toString()}isUpdatedBrowserUrl(){let e=this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(!0))),t=pi(this.currentNavigation),n=t?.targetBrowserUrl??t?.extractedUrl;return e.toString()!==n?.toString()&&!t?.extras.skipLocationChange}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();function lye(i){return i!==Wu}function jL(i){for(let r of i.newlyCreatedRoutes??[])r._localInjector?.destroy(),r._localInjector=void 0;T7(i.targetRouterState)}function T7(i){if(!i)return;let r=e=>{e.value.pending?.set(!1),e.children.forEach(r)};r(i._root)}var E7=new le(``);var cye=(()=>{class i{static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:()=>_(dye)})}return i})();var Y2=class{shouldDetach(r){return!1}store(r,e){}shouldAttach(r){return!1}retrieve(r){return null}shouldReuseRoute(r,e){return r.routeConfig===e.routeConfig}shouldDestroyInjector(r){return!0}};var dye=(()=>{class i extends Y2{static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();var rT=(()=>{class i{urlSerializer=_(Ju);options=_(ig,{optional:!0})||{};canceledNavigationResolution=this.options.canceledNavigationResolution||`replace`;location=_(Ws);urlHandlingStrategy=_(eT);urlUpdateStrategy=this.options.urlUpdateStrategy||`deferred`;currentUrlTree=new $o;getCurrentUrlTree(){return this.currentUrlTree}rawUrlTree=this.currentUrlTree;getRawUrlTree(){return this.rawUrlTree}createBrowserPath({finalUrl:e,initialUrl:t,targetBrowserUrl:n}){let o=e!==void 0?this.urlHandlingStrategy.merge(e,t):t,a=n??o;return a instanceof $o?this.urlSerializer.serialize(a):a}routerUrlState(e){return e?.targetBrowserUrl===void 0||e?.finalUrl===void 0?{}:{ɵrouterUrl:this.urlSerializer.serialize(e.finalUrl)}}commitTransition({targetRouterState:e,finalUrl:t,initialUrl:n}){t&&e?(this.currentUrlTree=t,this.rawUrlTree=this.urlHandlingStrategy.merge(t,n),this.routerState=e):this.rawUrlTree=n}routerState=s7(null,_(Yt));getRouterState(){return this.routerState}_stateMemento=this.createStateMemento();get stateMemento(){return this._stateMemento}updateStateMemento(){this._stateMemento=this.createStateMemento()}createStateMemento(){return{rawUrlTree:this.rawUrlTree,currentUrlTree:this.currentUrlTree,routerState:this.routerState}}restoredState(){return this.location.getState()}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:()=>_(uye)})}return i})();var uye=(()=>{class i extends rT{currentPageId=0;lastSuccessfulId=-1;get browserPageId(){return this.canceledNavigationResolution!==`computed`?this.currentPageId:this.restoredState()?.ɵrouterPageId??this.currentPageId}registerNonRouterCurrentEntryChangeListener(e){return this.location.subscribe(t=>{t.type===`popstate`&&setTimeout(()=>{e(t.url,t.state,`popstate`,{replaceUrl:!0})})})}handleRouterEvent(e,t){e instanceof qc?this.updateStateMemento():e instanceof Ns?this.commitTransition(t):e instanceof by?this.urlUpdateStrategy===`eager`&&(t.extras.skipLocationChange||this.setBrowserUrl(this.createBrowserPath(t),t)):e instanceof Yu?(this.commitTransition(t),this.urlUpdateStrategy===`deferred`&&!t.extras.skipLocationChange&&this.setBrowserUrl(this.createBrowserPath(t),t)):e instanceof jo&&!a7(e)?this.restoreHistory(t):e instanceof Ku?this.restoreHistory(t,!0):e instanceof ka&&(this.lastSuccessfulId=e.id,this.currentPageId=this.browserPageId)}setBrowserUrl(e,t){let{extras:n,id:o}=t,{replaceUrl:a,state:s}=n;if(this.location.isCurrentPathEqualTo(e)||a){let l=this.browserPageId,c=r(r({},s),this.generateNgRouterState(o,l,t));this.location.replaceState(e,``,c)}else{let l=r(r({},s),this.generateNgRouterState(o,this.browserPageId+1,t));this.location.go(e,``,l)}}restoreHistory(e,t=!1){if(this.canceledNavigationResolution===`computed`){let n=this.browserPageId,o=this.currentPageId-n;o!==0?this.location.historyGo(o):this.getCurrentUrlTree()===e.finalUrl&&o===0&&(this.resetInternalState(e),this.resetUrlToCurrentUrlTree())}else this.canceledNavigationResolution===`replace`&&(t&&this.resetInternalState(e),this.resetUrlToCurrentUrlTree())}resetInternalState({finalUrl:e}){this.routerState=this.stateMemento.routerState,this.currentUrlTree=this.stateMemento.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,e??this.rawUrlTree)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.getRawUrlTree()),``,this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(e,t,n){return this.canceledNavigationResolution===`computed`?r({navigationId:e,ɵrouterPageId:t},this.routerUrlState(n)):r({navigationId:e},this.routerUrlState(n))}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();function oT(i,r){i.events.pipe(gt(e=>e instanceof ka||e instanceof jo||e instanceof Ku||e instanceof Ns),Pt(e=>e instanceof ka||e instanceof Ns?0:(e instanceof jo?e.code===cr.Redirect||e.code===cr.SupersededByNewNavigation:!1)?2:1),gt(e=>e!==2),ur(1)).subscribe(()=>{r()})}var Yc=(()=>{class i{get currentUrlTree(){return this.stateManager.getCurrentUrlTree()}get rawUrlTree(){return this.stateManager.getRawUrlTree()}disposed=!1;nonRouterCurrentEntryChangeSubscription;console=_(b_);stateManager=_(rT);options=_(ig,{optional:!0})||{};pendingTasks=_(ia);urlUpdateStrategy=this.options.urlUpdateStrategy||`deferred`;navigationTransitions=_(Ey);urlSerializer=_(Ju);location=_(Ws);urlHandlingStrategy=_(eT);injector=_(Yt);_events=new ce;get events(){return this._events}get routerState(){return this.stateManager.getRouterState()}navigated=!1;routeReuseStrategy=_(cye);injectorCleanup=_(E7,{optional:!0});onSameUrlNavigation=this.options.onSameUrlNavigation||`ignore`;config=_(_m,{optional:!0})?.flat()??[];componentInputBindingEnabled=!!_(mm,{optional:!0});currentNavigation=this.navigationTransitions.currentNavigation.asReadonly();constructor(){this.resetConfig(this.config),this.navigationTransitions.setupNavigations(this).subscribe({error:e=>{}}),this.subscribeToNavigationEvents()}eventsSubscription=new yi;subscribeToNavigationEvents(){let e=this.navigationTransitions.events.subscribe(t=>{try{let n=this.navigationTransitions.currentTransition,o=pi(this.navigationTransitions.currentNavigation);if(n!==null&&o!==null){if(this.stateManager.handleRouterEvent(t,o),t instanceof jo&&t.code!==cr.Redirect&&t.code!==cr.SupersededByNewNavigation)this.navigated=!0;else if(t instanceof ka)this.navigated=!0,this.injectorCleanup?.(this.routeReuseStrategy,this.routerState,this.config);else if(t instanceof Zu){let a=t.navigationBehaviorOptions,s=this.urlHandlingStrategy.merge(t.url,n.currentRawUrl),l=r({scroll:n.extras.scroll,browserUrl:n.extras.browserUrl,info:n.extras.info,skipLocationChange:n.extras.skipLocationChange,replaceUrl:n.extras.replaceUrl||this.urlUpdateStrategy===`eager`||lye(n.source)},a);this.scheduleNavigation(s,Wu,null,l,{resolve:n.resolve,reject:n.reject,promise:n.promise})}}a0e(t)&&this._events.next(t)}catch(n){this.navigationTransitions.transitionAbortWithErrorSubject.next(n)}});this.eventsSubscription.add(e)}resetRootComponentType(e){this.routerState.root.component=e,this.navigationTransitions.rootComponentType=e}initialNavigation(){this.setUpLocationChangeListener(),this.navigationTransitions.hasRequestedNavigation||this.navigateToSyncWithBrowser(this.location.path(!0),Wu,this.stateManager.restoredState(),{replaceUrl:!0})}setUpLocationChangeListener(){this.nonRouterCurrentEntryChangeSubscription??=this.stateManager.registerNonRouterCurrentEntryChangeListener((e,t,n,o)=>{this.navigateToSyncWithBrowser(e,n,t,o)})}navigateToSyncWithBrowser(e,t,n,o){let a=n?.navigationId?n:null,s$8=n?.ɵrouterUrl??e;if(n?.ɵrouterUrl&&(o=s(r({},o),{browserUrl:e})),n){let c=r({},n);delete c.navigationId,delete c.ɵrouterPageId,delete c.ɵrouterUrl,Object.keys(c).length!==0&&(o.state=c)}let l=this.parseUrl(s$8);this.scheduleNavigation(l,t,a,o).catch(c=>{this.disposed||this.injector.get(Xr)(c)})}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return pi(this.navigationTransitions.currentNavigation)}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(e){this.config=e.map(J2),this.navigated=!1}ngOnDestroy(){this.dispose()}dispose(){this._events.unsubscribe(),this.navigationTransitions.complete(),this.nonRouterCurrentEntryChangeSubscription?.unsubscribe(),this.nonRouterCurrentEntryChangeSubscription=void 0,this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(e,t={}){let{relativeTo:n,queryParams:o,fragment:a,queryParamsHandling:s,preserveFragment:l}=t,c=l?this.currentUrlTree.fragment:a,d=null;switch(s??this.options.defaultQueryParamsHandling){case`merge`:d=r(r({},this.currentUrlTree.queryParams),o);break;case`preserve`:d=this.currentUrlTree.queryParams;break;default:d=o||null}d!==null&&(d=this.removeEmptyProps(d));let p;try{p=i7(n?n.snapshot:this.routerState.snapshot.root)}catch{(typeof e[0]!=`string`||e[0][0]!==`/`)&&(e=[]),p=this.currentUrlTree.root}return n7(p,e,d,c??null,this.urlSerializer)}navigateByUrl(e,t={skipLocationChange:!1}){let n=Qu(e)?e:this.parseUrl(e),o=this.urlHandlingStrategy.merge(n,this.rawUrlTree);return this.scheduleNavigation(o,Wu,null,t)}navigate(e,t={skipLocationChange:!1}){return gye(e),this.navigateByUrl(this.createUrlTree(e,t),t)}serializeUrl(e){return this.urlSerializer.serialize(e)}parseUrl(e){try{return this.urlSerializer.parse(e)}catch{return this.console.warn(Dr(4018,!1)),this.urlSerializer.parse(`/`)}}isActive(e,t){let n;if(t===!0?n=r({},QL):t===!1?n=r({},I2):n=r(r({},I2),t),Qu(e))return LL(this.currentUrlTree,e,n);let o=this.parseUrl(e);return LL(this.currentUrlTree,o,n)}removeEmptyProps(e){return Object.entries(e).reduce((t,[n,o])=>(o!=null&&(t[n]=o),t),{})}scheduleNavigation(e,t,n,o,a){if(this.disposed)return Promise.resolve(!1);let s,l,c;a?(s=a.resolve,l=a.reject,c=a.promise):c=new Promise((p,f)=>{s=p,l=f});let d=this.pendingTasks.add();return oT(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(d))}),this.navigationTransitions.handleNavigationRequest({source:t,restoredState:n,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:e,extras:o,resolve:s,reject:l,promise:c,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),c.catch(Promise.reject.bind(Promise))}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();function gye(i){for(let r=0;r{class i{router;injector;preloadingStrategy;loader;subscription;constructor(e,t,n,o){this.router=e,this.injector=t,this.preloadingStrategy=n,this.loader=o}setUpPreloading(){this.subscription=this.router.events.pipe(gt(e=>e instanceof ka),ks(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription?.unsubscribe()}processRoutes(e,t){let n=[];for(let o of t){o.providers&&!o._injector&&(o._injector=Fd(o.providers,e,``));let a=o._injector??e;o._loadedNgModuleFactory&&!o._loadedInjector&&(o._loadedInjector=o._loadedNgModuleFactory.create(a).injector);let s=o._loadedInjector??a;(o.loadChildren&&!o._loadedRoutes&&o.canLoad===void 0||o.loadComponent&&!o._loadedComponent)&&n.push(this.preloadConfig(a,o)),(o.children||o._loadedRoutes)&&n.push(this.processRoutes(s,o.children??o._loadedRoutes))}return ui(n).pipe(Es())}preloadConfig(e,t){return this.preloadingStrategy.preload(t,()=>{if(e.destroyed)return lt(null);let n;t.loadChildren&&t.canLoad===void 0?n=ui(this.loader.loadChildren(e,t)):n=lt(null);let o=n.pipe(en(a=>a===null?lt(void 0):(t._loadedRoutes=a.routes,t._loadedInjector=a.injector,t._loadedNgModuleFactory=a.factory,this.processRoutes(a.injector??e,a.routes))));if(t.loadComponent&&!t._loadedComponent)return ui([o,this.loader.loadComponent(e,t)]).pipe(Es());else return o})}static ɵfac=function(t){return new(t||i)(Te(Yc),Te(Yt),Te(xm),Te(Ty))};static ɵprov=de({token:i,factory:i.ɵfac,providedIn:`root`})}return i})();var M7=new le(``);var pye=(()=>{class i{options;routerEventsSubscription;scrollEventsSubscription;lastId=0;lastSource=Wu;restoredId=0;store={};isHydrating=_(tS,{optional:!0})??!1;urlSerializer=_(Ju);zone=_(Qe);viewportScroller=_(bw);transitions=_(Ey);constructor(e){this.options=e,this.options.scrollPositionRestoration||=`disabled`,this.options.anchorScrolling||=`disabled`,this.isHydrating&&_(Jr).whenStable().then(()=>{this.isHydrating=!1})}init(){this.options.scrollPositionRestoration!==`disabled`&&this.viewportScroller.setHistoryScrollRestoration(`manual`),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(e=>{e instanceof qc?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=e.navigationTrigger,this.restoredId=e.restoredState?e.restoredState.navigationId:0):e instanceof ka?(this.lastId=e.id,this.scheduleScrollEvent(e,this.urlSerializer.parse(e.urlAfterRedirects).fragment)):e instanceof Ns&&e.code===sm.IgnoredSameUrlNavigation&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(e,this.urlSerializer.parse(e.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(e=>{if(!(e instanceof lm)||e.scrollBehavior===`manual`)return;let t={behavior:`instant`};e.position?this.options.scrollPositionRestoration===`top`?this.viewportScroller.scrollToPosition([0,0],t):this.options.scrollPositionRestoration===`enabled`&&this.viewportScroller.scrollToPosition(e.position,t):e.anchor&&this.options.anchorScrolling===`enabled`?this.viewportScroller.scrollToAnchor(e.anchor):this.options.scrollPositionRestoration!==`disabled`&&this.viewportScroller.scrollToPosition([0,0])})}scheduleScrollEvent(e,t){if(this.isHydrating)return;let n=pi(this.transitions.currentNavigation)?.extras.scroll;this.zone.runOutsideAngular(async()=>{await new Promise(o=>{setTimeout(o),typeof requestAnimationFrame<`u`&&requestAnimationFrame(o)}),this.zone.run(()=>{this.transitions.events.next(new lm(e,this.lastSource===`popstate`?this.store[this.restoredId]:null,t,n))})})}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}static ɵfac=function(t){ip()};static ɵprov=de({token:i,factory:i.ɵfac})}return i})();function hye(){return _(Yc).routerState.root}function vm(i,r){return{ɵkind:i,ɵproviders:r}}function mye(){let i=_(qt);return r=>{let e=i.get(Jr);if(r!==e.components[0])return;let t=i.get(Yc),n=i.get(R7);i.get(sT)===1&&t.initialNavigation(),i.get(P7,null,{optional:!0})?.setUpPreloading(),i.get(M7,null,{optional:!0})?.init(),t.resetRootComponentType(e.componentTypes[0]),n.closed||(n.next(),n.complete(),n.unsubscribe())}}var R7=new le(``,{factory:()=>new ce});var sT=new le(``,{factory:()=>1});function A7(){return vm(2,[{provide:r_,useValue:!0},{provide:sT,useValue:0},v_(()=>{let r=_(qt);return r.get(iw,Promise.resolve()).then(()=>new Promise(t=>{let n=r.get(Yc),o=r.get(R7);oT(n,()=>{t(!0)}),r.get(Ey).afterPreactivation=()=>(t(!0),o.closed?lt(void 0):o),n.initialNavigation()}))})])}function F7(){return vm(3,[v_(()=>{_(Yc).setUpLocationChangeListener()}),{provide:sT,useValue:2}])}var P7=new le(``);function O7(i){return vm(0,[{provide:P7,useExisting:k7},{provide:xm,useExisting:i}])}function V7(i={}){return vm(8,[{provide:mm,useFactory:()=>new u7(i)}])}function L7(i){nr(`NgRouterViewTransitions`);return vm(9,[{provide:tT,useValue:D7},{provide:iT,useValue:r({skipNextTransition:!!i?.skipInitialTransition},i)}])}var z7=[Ws,{provide:Ju,useClass:vl},Yc,eg,{provide:Qc,useFactory:hye},Ty];var ky=(()=>{class i{constructor(){}static forRoot(e,t){return{ngModule:i,providers:[z7,[],{provide:_m,multi:!0,useValue:e},[],t?.errorHandler?{provide:nT,useValue:t.errorHandler}:[],{provide:ig,useValue:t||{}},t?.useHash?_ye():xye(),fye(),t?.preloadingStrategy?O7(t.preloadingStrategy).ɵproviders:[],t?.initialNavigation?vye(t):[],t?.bindToComponentInputs?V7(typeof t.bindToComponentInputs==`object`?t.bindToComponentInputs:{}).ɵproviders:[],t?.enableViewTransitions?L7().ɵproviders:[],yye()]}}static forChild(e){return{ngModule:i,providers:[{provide:_m,multi:!0,useValue:e}]}}static ɵfac=function(t){return new(t||i)};static ɵmod=Me({type:i});static ɵinj=Ee({})}return i})();function fye(){return{provide:M7,useFactory:()=>{let i=_(bw),r=_(ig);return r.scrollOffset&&i.setOffset(r.scrollOffset),new pye(r)}}}function _ye(){return{provide:Ka,useClass:uw}}function xye(){return{provide:Ka,useClass:R_}}function vye(i){return[i.initialNavigation===`disabled`?F7().ɵproviders:[],i.initialNavigation===`enabledBlocking`?A7().ɵproviders:[]]}var aT=new le(``);function yye(){return[{provide:aT,useFactory:mye},{provide:op,multi:!0,useExisting:aT}]}var Sye=[{path:``,component:U0,data:{text:`TaskPlannerGrid`}}];var B7=(()=>{class i{static{this.ɵfac=function(t){return new(t||i)}}static{this.ɵmod=Me({type:i})}static{this.ɵinj=Ee({imports:[ky.forRoot(Sye),ky]})}}return i})();X5.production;cI(U0,{providers:[BS(),hf(dI,B7,B6,dP,bV,kI,MD,AV,K4,pP,OV,uP,zV,MD,cn,kI,mP,j6,BV,TV,K6,TP,CP,gP,On,fP,DP,hP,o8,t8),VL(),_I(vI(),xI())]}).catch(i=>console.error(i))}));export default require_main_ZSOIWSXQ();export{sn as a,init_chunk_CHEWUVT5 as i,u as n,__esmMin as o,v as r,init_chunk_IFGU66OU as t}; \ No newline at end of file diff --git a/docs/main.3c19cdd3b7bfeee6.js b/docs/main.3c19cdd3b7bfeee6.js deleted file mode 100644 index d3df5dc..0000000 --- a/docs/main.3c19cdd3b7bfeee6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunktaskplanner=self.webpackChunktaskplanner||[]).push([[590],{988:()=>{function Ph(t,r,n,e,i,s,o){try{var a=t[s](o),l=a.value}catch(c){return void n(c)}a.done?r(l):Promise.resolve(l).then(e,i)}function yl(t){return function(){var r=this,n=arguments;return new Promise(function(e,i){var s=t.apply(r,n);function o(l){Ph(s,e,i,o,a,"next",l)}function a(l){Ph(s,e,i,o,a,"throw",l)}o(void 0)})}}let sn=null,dm=1;const wl=Symbol("SIGNAL");function Xi(t){const r=sn;return sn=t,r}function O2(t){if((!Oh(t)||t.dirty)&&(t.dirty||t.lastCleanEpoch!==dm)){if(!t.producerMustRecompute(t)&&!Lw(t))return t.dirty=!1,void(t.lastCleanEpoch=dm);t.producerRecomputeValue(t),t.dirty=!1,t.lastCleanEpoch=dm}}function Lw(t){Kc(t);for(let r=0;r0}function Kc(t){t.producerNode??=[],t.producerIndexOfThis??=[],t.producerLastReadVersion??=[]}let j2=null;function Nh(t){return"function"==typeof t}let Hw=!1;const Cs={Promise:void 0,set useDeprecatedSynchronousErrorHandling(t){if(t){const r=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+r.stack)}else Hw&&console.log("RxJS: Back to a better error behavior. Thank you. <3");Hw=t},get useDeprecatedSynchronousErrorHandling(){return Hw}};function Zc(t){setTimeout(()=>{throw t},0)}const hm={closed:!0,next(t){},error(t){if(Cs.useDeprecatedSynchronousErrorHandling)throw t;Zc(t)},complete(){}},Yc=Array.isArray||(t=>t&&"number"==typeof t.length);function Bw(t){return null!==t&&"object"==typeof t}const gm=(()=>{function t(r){return Error.call(this),this.message=r?`${r.length} errors occurred during unsubscription:\n${r.map((n,e)=>`${e+1}) ${n.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=r,this}return t.prototype=Object.create(Error.prototype),t})();class yi{constructor(r){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,r&&(this._ctorUnsubscribe=!0,this._unsubscribe=r)}unsubscribe(){let r;if(this.closed)return;let{_parentOrParents:n,_ctorUnsubscribe:e,_unsubscribe:i,_subscriptions:s}=this;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,n instanceof yi)n.remove(this);else if(null!==n)for(let o=0;or.concat(n instanceof gm?n.errors:n),[])}yi.EMPTY=((t=new yi).closed=!0,t);const pm="function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random();class Zt extends yi{constructor(r,n,e){switch(super(),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=hm;break;case 1:if(!r){this.destination=hm;break}if("object"==typeof r){r instanceof Zt?(this.syncErrorThrowable=r.syncErrorThrowable,this.destination=r,r.add(this)):(this.syncErrorThrowable=!0,this.destination=new K2(this,r));break}default:this.syncErrorThrowable=!0,this.destination=new K2(this,r,n,e)}}[pm](){return this}static create(r,n,e){const i=new Zt(r,n,e);return i.syncErrorThrowable=!1,i}next(r){this.isStopped||this._next(r)}error(r){this.isStopped||(this.isStopped=!0,this._error(r))}complete(){this.isStopped||(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}_next(r){this.destination.next(r)}_error(r){this.destination.error(r),this.unsubscribe()}_complete(){this.destination.complete(),this.unsubscribe()}_unsubscribeAndRecycle(){const{_parentOrParents:r}=this;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=r,this}}class K2 extends Zt{constructor(r,n,e,i){super(),this._parentSubscriber=r;let s,o=this;Nh(n)?s=n:n&&(s=n.next,e=n.error,i=n.complete,n!==hm&&(o=Object.create(n),Nh(o.unsubscribe)&&this.add(o.unsubscribe.bind(o)),o.unsubscribe=this.unsubscribe.bind(this))),this._context=o,this._next=s,this._error=e,this._complete=i}next(r){if(!this.isStopped&&this._next){const{_parentSubscriber:n}=this;Cs.useDeprecatedSynchronousErrorHandling&&n.syncErrorThrowable?this.__tryOrSetError(n,this._next,r)&&this.unsubscribe():this.__tryOrUnsub(this._next,r)}}error(r){if(!this.isStopped){const{_parentSubscriber:n}=this,{useDeprecatedSynchronousErrorHandling:e}=Cs;if(this._error)e&&n.syncErrorThrowable?(this.__tryOrSetError(n,this._error,r),this.unsubscribe()):(this.__tryOrUnsub(this._error,r),this.unsubscribe());else if(n.syncErrorThrowable)e?(n.syncErrorValue=r,n.syncErrorThrown=!0):Zc(r),this.unsubscribe();else{if(this.unsubscribe(),e)throw r;Zc(r)}}}complete(){if(!this.isStopped){const{_parentSubscriber:r}=this;if(this._complete){const n=()=>this._complete.call(this._context);Cs.useDeprecatedSynchronousErrorHandling&&r.syncErrorThrowable?(this.__tryOrSetError(r,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}}__tryOrUnsub(r,n){try{r.call(this._context,n)}catch(e){if(this.unsubscribe(),Cs.useDeprecatedSynchronousErrorHandling)throw e;Zc(e)}}__tryOrSetError(r,n,e){if(!Cs.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{n.call(this._context,e)}catch(i){return Cs.useDeprecatedSynchronousErrorHandling?(r.syncErrorValue=i,r.syncErrorThrown=!0,!0):(Zc(i),!0)}return!1}_unsubscribe(){const{_parentSubscriber:r}=this;this._context=null,this._parentSubscriber=null,r.unsubscribe()}}const Vh="function"==typeof Symbol&&Symbol.observable||"@@observable";function fm(t){return t}function Z2(...t){return Y2(t)}function Y2(t){return 0===t.length?fm:1===t.length?t[0]:function(n){return t.reduce((e,i)=>i(e),n)}}let wi=(()=>{class t{constructor(n){this._isScalar=!1,n&&(this._subscribe=n)}lift(n){const e=new t;return e.source=this,e.operator=n,e}subscribe(n,e,i){const{operator:s}=this,o=function MG(t,r,n){if(t){if(t instanceof Zt)return t;if(t[pm])return t[pm]()}return t||r||n?new Zt(t,r,n):new Zt(hm)}(n,e,i);if(o.add(s?s.call(o,this.source):this.source||Cs.useDeprecatedSynchronousErrorHandling&&!o.syncErrorThrowable?this._subscribe(o):this._trySubscribe(o)),Cs.useDeprecatedSynchronousErrorHandling&&o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o}_trySubscribe(n){try{return this._subscribe(n)}catch(e){Cs.useDeprecatedSynchronousErrorHandling&&(n.syncErrorThrown=!0,n.syncErrorValue=e),function EG(t){for(;t;){const{closed:r,destination:n,isStopped:e}=t;if(r||e)return!1;t=n&&n instanceof Zt?n:null}return!0}(n)?n.error(e):console.warn(e)}}forEach(n,e){return new(e=Q2(e))((i,s)=>{let o;o=this.subscribe(a=>{try{n(a)}catch(l){s(l),o&&o.unsubscribe()}},s,i)})}_subscribe(n){const{source:e}=this;return e&&e.subscribe(n)}[Vh](){return this}pipe(...n){return 0===n.length?this:Y2(n)(this)}toPromise(n){return new(n=Q2(n))((e,i)=>{let s;this.subscribe(o=>s=o,o=>i(o),()=>e(s))})}}return t.create=r=>new t(r),t})();function Q2(t){if(t||(t=Cs.Promise||Promise),!t)throw new Error("no Promise impl found");return t}const Cl=(()=>{function t(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return t.prototype=Object.create(Error.prototype),t})();class X2 extends yi{constructor(r,n){super(),this.subject=r,this.subscriber=n,this.closed=!1}unsubscribe(){if(this.closed)return;this.closed=!0;const r=this.subject,n=r.observers;if(this.subject=null,!n||0===n.length||r.isStopped||r.closed)return;const e=n.indexOf(this.subscriber);-1!==e&&n.splice(e,1)}}class J2 extends Zt{constructor(r){super(r),this.destination=r}}let Ie=(()=>{class t extends wi{constructor(){super(),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}[pm](){return new J2(this)}lift(n){const e=new eE(this,this);return e.operator=n,e}next(n){if(this.closed)throw new Cl;if(!this.isStopped){const{observers:e}=this,i=e.length,s=e.slice();for(let o=0;onew eE(r,n),t})();class eE extends Ie{constructor(r,n){super(),this.destination=r,this.source=n}next(r){const{destination:n}=this;n&&n.next&&n.next(r)}error(r){const{destination:n}=this;n&&n.error&&this.destination.error(r)}complete(){const{destination:r}=this;r&&r.complete&&this.destination.complete()}_subscribe(r){const{source:n}=this;return n?this.source.subscribe(r):yi.EMPTY}}class es extends Ie{constructor(r){super(),this._value=r}get value(){return this.getValue()}_subscribe(r){const n=super._subscribe(r);return n&&!n.closed&&r.next(this._value),n}getValue(){if(this.hasError)throw this.thrownError;if(this.closed)throw new Cl;return this._value}next(r){super.next(this._value=r)}}function It(t,r){return function(e){if("function"!=typeof t)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return e.lift(new AG(t,r))}}class AG{constructor(r,n){this.project=r,this.thisArg=n}call(r,n){return n.subscribe(new kG(r,this.project,this.thisArg))}}class kG extends Zt{constructor(r,n,e){super(r),this.project=n,this.count=0,this.thisArg=e||this}_next(r){let n;try{n=this.project.call(this.thisArg,r,this.count++)}catch(e){return void this.destination.error(e)}this.destination.next(n)}}const tE="https://g.co/ng/security#xss";class se extends Error{constructor(r,n){super(function Qc(t,r){return`NG0${Math.abs(t)}${r?": "+r:""}`}(r,n)),this.code=r}}function zw(t){return r=>{setTimeout(t,void 0,r)}}const A=class RG extends Ie{constructor(r=!1){super(),this.__isAsync=r}emit(r){super.next(r)}subscribe(r,n,e){let i=r,s=n||(()=>null),o=e;if(r&&"object"==typeof r){const l=r;i=l.next?.bind(l),s=l.error?.bind(l),o=l.complete?.bind(l)}this.__isAsync&&(s=zw(s),i&&(i=zw(i)),o&&(o=zw(o)));const a=super.subscribe({next:i,error:s,complete:o});return r instanceof yi&&r.add(a),a}};var Et=function(t){return t[t.Default=0]="Default",t[t.Host=1]="Host",t[t.Self=2]="Self",t[t.SkipSelf=4]="SkipSelf",t[t.Optional=8]="Optional",t}(Et||{});function xn(t){if("string"==typeof t)return t;if(Array.isArray(t))return"["+t.map(xn).join(", ")+"]";if(null==t)return""+t;if(t.overriddenName)return`${t.overriddenName}`;if(t.name)return`${t.name}`;const r=t.toString();if(null==r)return""+r;const n=r.indexOf("\n");return-1===n?r:r.substring(0,n)}function Uw(t,r){return null==t||""===t?null===r?"":r:null==r||""===r?t:t+" "+r}var _m=function(t){return t[t.OnPush=0]="OnPush",t[t.Default=1]="Default",t}(_m||{}),ts=function(t){return t[t.Emulated=0]="Emulated",t[t.None=2]="None",t[t.ShadowDom=3]="ShadowDom",t}(ts||{});function To(t){return{toString:t}.toString()}const ii=globalThis,Ks={},Wt=[];function ai(t){for(let r in t)if(t[r]===ai)return r;throw Error("Could not find renamed property on target object.")}function NG(t,r){for(const n in r)r.hasOwnProperty(n)&&!t.hasOwnProperty(n)&&(t[n]=r[n])}const Lh=ai({\u0275cmp:ai}),jw=ai({\u0275dir:ai}),Ww=ai({\u0275pipe:ai}),rE=ai({\u0275mod:ai}),Eo=ai({\u0275fac:ai}),Gh=ai({__NG_ELEMENT_ID__:ai}),sE=ai({__NG_ENV_ID__:ai});var O=function(t){return t[t.None=0]="None",t[t.SignalBased=1]="SignalBased",t[t.HasDecoratorInputTransform=2]="HasDecoratorInputTransform",t}(O||{});function oE(t,r,n){let e=t.length;for(;;){const i=t.indexOf(r,n);if(-1===i)return i;if(0===i||t.charCodeAt(i-1)<=32){const s=r.length;if(i+s===e||t.charCodeAt(i+s)<=32)return i}n=i+1}}function $w(t,r,n){let e=0;for(;er){o=s-1;break}}}for(;ss?"":i[g+1].toLowerCase();const x=8&e?_:null;if(x&&-1!==oE(x,c,0)||2&e&&c!==_){if(Is(e))return!1;o=!0}}}}else{if(!o&&!Is(e)&&!Is(l))return!1;if(o&&Is(l))continue;o=!1,e=l|1&e}}return Is(e)||o}function Is(t){return 0==(1&t)}function HG(t,r,n,e){if(null===r)return-1;let i=0;if(e||!n){let s=!1;for(;i-1)for(n++;n0?'="'+a+'"':"")+"]"}else 8&e?i+="."+o:4&e&&(i+=" "+o);else""!==i&&!Is(o)&&(r+=gE(s,i),i=""),e=o,s=s||!Is(e);n++}return""!==i&&(r+=gE(s,i)),r}function ie(t){return To(()=>{const r=fE(t),n={...r,decls:t.decls,vars:t.vars,template:t.template,consts:t.consts||null,ngContentSelectors:t.ngContentSelectors,onPush:t.changeDetection===_m.OnPush,directiveDefs:null,pipeDefs:null,dependencies:r.standalone&&t.dependencies||null,getStandaloneInjector:null,signals:t.signals??!1,data:t.data||{},encapsulation:t.encapsulation||ts.Emulated,styles:t.styles||Wt,_:null,schemas:t.schemas||null,tView:null,id:""};mE(n);const e=t.dependencies;return n.directiveDefs=vm(e,!1),n.pipeDefs=vm(e,!0),n.id=function QG(t){let r=0;const n=[t.selectors,t.ngContentSelectors,t.hostVars,t.hostAttrs,t.consts,t.vars,t.decls,t.encapsulation,t.standalone,t.signals,t.exportAs,JSON.stringify(t.inputs),JSON.stringify(t.outputs),Object.getOwnPropertyNames(t.type.prototype),!!t.contentQueries,!!t.viewQuery].join("|");for(const i of n)r=Math.imul(31,r)+i.charCodeAt(0)<<0;return r+=2147483648,"c"+r}(n),n})}function KG(t){return vt(t)||yn(t)}function ZG(t){return null!==t}function Lt(t){return To(()=>({type:t.type,bootstrap:t.bootstrap||Wt,declarations:t.declarations||Wt,imports:t.imports||Wt,exports:t.exports||Wt,transitiveCompileScopes:null,schemas:t.schemas||null,id:t.id||null}))}function pE(t,r){if(null==t)return Ks;const n={};for(const e in t)if(t.hasOwnProperty(e)){const i=t[e];let s,o,a=O.None;Array.isArray(i)?(a=i[0],s=i[1],o=i[2]??s):(s=i,o=i),r?(n[s]=a!==O.None?[e,a]:e,r[s]=o):n[s]=e}return n}function H(t){return To(()=>{const r=fE(t);return mE(r),r})}function Te(t){return{type:t.type,name:t.name,factory:null,pure:!1!==t.pure,standalone:!0===t.standalone,onDestroy:t.type.prototype.ngOnDestroy||null}}function vt(t){return t[Lh]||null}function yn(t){return t[jw]||null}function Fn(t){return t[Ww]||null}function Qn(t,r){const n=t[rE]||null;if(!n&&!0===r)throw new Error(`Type ${xn(t)} does not have '\u0275mod' property.`);return n}function fE(t){const r={};return{type:t.type,providersResolver:null,factory:null,hostBindings:t.hostBindings||null,hostVars:t.hostVars||0,hostAttrs:t.hostAttrs||null,contentQueries:t.contentQueries||null,declaredInputs:r,inputTransforms:null,inputConfig:t.inputs||Ks,exportAs:t.exportAs||null,standalone:!0===t.standalone,signals:!0===t.signals,selectors:t.selectors||Wt,viewQuery:t.viewQuery||null,features:t.features||null,setInput:null,findHostDirectiveDefs:null,hostDirectives:null,inputs:pE(t.inputs,r),outputs:pE(t.outputs),debugInfo:null}}function mE(t){t.features?.forEach(r=>r(t))}function vm(t,r){if(!t)return null;const n=r?Fn:KG;return()=>("function"==typeof t?t():t).map(e=>n(e)).filter(ZG)}const Bi=0,we=1,Le=2,on=3,bs=4,Xn=5,Ds=6,Xc=7,Si=8,Jn=9,Mo=10,st=11,Bh=12,_E=13,Jc=14,ji=15,zh=16,ed=17,Ao=18,Uh=19,vE=20,ma=21,xm=22,Il=23,lt=25,qw=1,Zs=7,td=9,an=10;var Kw=function(t){return t[t.None=0]="None",t[t.HasTransplantedViews=2]="HasTransplantedViews",t}(Kw||{});function er(t){return Array.isArray(t)&&"object"==typeof t[qw]}function tr(t){return Array.isArray(t)&&!0===t[qw]}function Zw(t){return 0!=(4&t.flags)}function bl(t){return t.componentOffset>-1}function wm(t){return 1==(1&t.flags)}function Ss(t){return!!t.template}function Yw(t){return 0!=(512&t[Le])}const CE="svg";let bE=!1;function gi(t){for(;Array.isArray(t);)t=t[Bi];return t}function Wh(t,r){return gi(r[t])}function pr(t,r){return gi(r[t.index])}function $h(t,r){return t.data[r]}function id(t,r){return t[r]}function Hr(t,r){const n=r[t];return er(n)?n:n[Bi]}function e0(t){return 128==(128&t[Le])}function Ys(t,r){return null==r?null:t[r]}function DE(t){t[ed]=0}function sH(t){1024&t[Le]||(t[Le]|=1024,e0(t)&&qh(t))}function t0(t){return!!(9216&t[Le]||t[Il]?.dirty)}function n0(t){t0(t)?qh(t):64&t[Le]&&(function tH(){return bE}()?(t[Le]|=1024,qh(t)):t[Mo].changeDetectionScheduler?.notify())}function qh(t){t[Mo].changeDetectionScheduler?.notify();let r=Dl(t);for(;null!==r&&!(8192&r[Le])&&(r[Le]|=8192,e0(r));)r=Dl(r)}function Cm(t,r){if(256==(256&t[Le]))throw new se(911,!1);null===t[ma]&&(t[ma]=[]),t[ma].push(r)}function Dl(t){const r=t[on];return tr(r)?r[on]:r}const Xe={lFrame:OE(null),bindingsEnabled:!0,skipHydrationRootTNode:null};function EE(){return Xe.bindingsEnabled}function nd(){return null!==Xe.skipHydrationRootTNode}function le(){return Xe.lFrame.lView}function Mt(){return Xe.lFrame.tView}function I(t){return Xe.lFrame.contextLView=t,t[Si]}function b(t){return Xe.lFrame.contextLView=null,t}function li(){let t=ME();for(;null!==t&&64===t.type;)t=t.parent;return t}function ME(){return Xe.lFrame.currentTNode}function Qs(t,r){const n=Xe.lFrame;n.currentTNode=t,n.isParent=r}function s0(){return Xe.lFrame.isParent}function o0(){Xe.lFrame.isParent=!1}function fr(){const t=Xe.lFrame;let r=t.bindingRootIndex;return-1===r&&(r=t.bindingRootIndex=t.tView.bindingStartIndex),r}function Ts(){return Xe.lFrame.bindingIndex++}function Ro(t){const r=Xe.lFrame,n=r.bindingIndex;return r.bindingIndex=r.bindingIndex+t,n}function mH(t,r){const n=Xe.lFrame;n.bindingIndex=n.bindingRootIndex=t,a0(r)}function a0(t){Xe.lFrame.currentDirectiveIndex=t}function c0(){return Xe.lFrame.currentQueryIndex}function Im(t){Xe.lFrame.currentQueryIndex=t}function vH(t){const r=t[we];return 2===r.type?r.declTNode:1===r.type?t[Xn]:null}function PE(t,r,n){if(n&Et.SkipSelf){let i=r,s=t;for(;!(i=i.parent,null!==i||n&Et.Host||(i=vH(s),null===i||(s=s[Jc],10&i.type))););if(null===i)return!1;r=i,t=s}const e=Xe.lFrame=FE();return e.currentTNode=r,e.lView=t,!0}function d0(t){const r=FE(),n=t[we];Xe.lFrame=r,r.currentTNode=n.firstChild,r.lView=t,r.tView=n,r.contextLView=t,r.bindingIndex=n.bindingStartIndex,r.inI18n=!1}function FE(){const t=Xe.lFrame,r=null===t?null:t.child;return null===r?OE(t):r}function OE(t){const r={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:t,child:null,inI18n:!1};return null!==t&&(t.child=r),r}function NE(){const t=Xe.lFrame;return Xe.lFrame=t.parent,t.currentTNode=null,t.lView=null,t}const VE=NE;function u0(){const t=NE();t.isParent=!0,t.tView=null,t.selectedIndex=-1,t.contextLView=null,t.elementDepthCount=0,t.currentDirectiveIndex=-1,t.currentNamespace=null,t.bindingRootIndex=-1,t.bindingIndex=-1,t.currentQueryIndex=0}function ir(){return Xe.lFrame.selectedIndex}function Sl(t){Xe.lFrame.selectedIndex=t}function Ti(){const t=Xe.lFrame;return $h(t.tView,t.selectedIndex)}function Po(){Xe.lFrame.currentNamespace=CE}function Zh(){!function wH(){Xe.lFrame.currentNamespace=null}()}let GE=!0;function bm(){return GE}function _a(t){GE=t}function CH(){return rd(li(),le())}function rd(t,r){return new X(pr(t,r))}let p0,X=(()=>{class r{constructor(e){this.nativeElement=e}}return r.__NG_ELEMENT_ID__=CH,r})();function HE(t){return t instanceof X?t.nativeElement:t}function sd(t,r){t.forEach(n=>Array.isArray(n)?sd(n,r):r(n))}function BE(t,r,n){r>=t.length?t.push(n):t.splice(r,0,n)}function Dm(t,r){return r>=t.length-1?t.pop():t.splice(r,1)[0]}function Br(t,r,n){let e=od(t,r);return e>=0?t[1|e]=n:(e=~e,function zE(t,r,n,e){let i=t.length;if(i==r)t.push(n,e);else if(1===i)t.push(e,t[0]),t[0]=n;else{for(i--,t.push(t[i-1],t[i]);i>r;)t[i]=t[i-2],i--;t[r]=n,t[r+1]=e}}(t,e,r,n)),e}function g0(t,r){const n=od(t,r);if(n>=0)return t[1|n]}function od(t,r){return function UE(t,r,n){let e=0,i=t.length>>n;for(;i!==e;){const s=e+(i-e>>1),o=t[s<r?i=s:e=s+1}return~(i<AH}),AH="ng",KE=new Ce(""),Fo=new Ce("",{providedIn:"platform",factory:()=>"unknown"}),m0=new Ce(""),ZE=new Ce("",{providedIn:"root",factory:()=>va().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null}),PH=ai({__forward_ref__:ai});function $t(t){return t.__forward_ref__=$t,t.toString=function(){return xn(this())},t}function Ye(t){return Pm(t)?t():t}function Pm(t){return"function"==typeof t&&t.hasOwnProperty(PH)&&t.__forward_ref__===$t}function w0(t){return t&&!!t.\u0275providers}function ct(t){return"string"==typeof t?t:null==t?"":String(t)}function C0(t,r){throw new se(-201,!1)}let I0;function QE(){return I0}function Dr(t){const r=I0;return I0=t,r}function XE(t,r,n){const e=Mm(t);return e&&"root"==e.providedIn?void 0===e.value?e.value=e.factory():e.value:n&Et.Optional?null:void 0!==r?r:void C0()}const Qh={},b0="__NG_DI_FLAG__",Fm="ngTempTokenPath",GH=/\n/gm,JE="__source";let ad;function xa(t){const r=ad;return ad=t,r}function zH(t,r=Et.Default){if(void 0===ad)throw new se(-203,!1);return null===ad?XE(t,void 0,r):ad.get(t,r&Et.Optional?null:void 0,r)}function ve(t,r=Et.Default){return(QE()||zH)(Ye(t),r)}function fe(t,r=Et.Default){return ve(t,Om(r))}function Om(t){return typeof t>"u"||"number"==typeof t?t:0|(t.optional&&8)|(t.host&&1)|(t.self&&2)|(t.skipSelf&&4)}function D0(t){const r=[];for(let n=0;nnull;function P0(t,r,n=!1){return tM(t,r,n)}const hd="__parameters__";function pd(t,r,n){return To(()=>{const e=function V0(t){return function(...n){if(t){const e=t(...n);for(const i in e)this[i]=e[i]}}}(r);function i(...s){if(this instanceof i)return e.apply(this,s),this;const o=new i(...s);return a.annotation=o,a;function a(l,c,d){const g=l.hasOwnProperty(hd)?l[hd]:Object.defineProperty(l,hd,{value:[]})[hd];for(;g.length<=d;)g.push(null);return(g[d]=g[d]||[]).push(o),l}}return n&&(i.prototype=Object.create(n.prototype)),i.prototype.ngMetadataName=t,i.annotationCls=i,i})}const fd=Xh(pd("Optional"),8),Bm=Xh(pd("SkipSelf"),4);function Tl(t,r){return t.hasOwnProperty(Eo)?t[Eo]:null}const El=new Ce(""),lM=new Ce("",-1),L0=new Ce("");class zm{get(r,n=Qh){if(n===Qh){const e=new Error(`NullInjectorError: No provider for ${xn(r)}!`);throw e.name="NullInjectorError",e}return n}}function Um(t){return{\u0275providers:t}}function cM(...t){return{\u0275providers:dM(0,t),\u0275fromNgModule:!0}}function dM(t,...r){const n=[],e=new Set;let i;const s=o=>{n.push(o)};return sd(r,o=>{const a=o;jm(a,s,[],e)&&(i||=[],i.push(a))}),void 0!==i&&uM(i,s),n}function uM(t,r){for(let n=0;n{r(s,e)})}}function jm(t,r,n,e){if(!(t=Ye(t)))return!1;let i=null,s=Am(t);const o=!s&&vt(t);if(s||o){if(o&&!o.standalone)return!1;i=t}else{const l=t.ngModule;if(s=Am(l),!s)return!1;i=l}const a=e.has(i);if(o){if(a)return!1;if(e.add(i),o.dependencies){const l="function"==typeof o.dependencies?o.dependencies():o.dependencies;for(const c of l)jm(c,r,n,e)}}else{if(!s)return!1;{if(null!=s.imports&&!a){let c;e.add(i);try{sd(s.imports,d=>{jm(d,r,n,e)&&(c||=[],c.push(d))})}finally{}void 0!==c&&uM(c,r)}if(!a){const c=Tl(i)||(()=>new i);r({provide:i,useFactory:c,deps:Wt},i),r({provide:L0,useValue:i,multi:!0},i),r({provide:El,useValue:()=>ve(i),multi:!0},i)}const l=s.providers;if(null!=l&&!a){const c=t;G0(l,d=>{r(d,c)})}}}return i!==t&&void 0!==t.providers}function G0(t,r){for(let n of t)w0(n)&&(n=n.\u0275providers),Array.isArray(n)?G0(n,r):r(n)}const iB=ai({provide:String,useValue:ai});function H0(t){return null!==t&&"object"==typeof t&&iB in t}function Ml(t){return"function"==typeof t}const B0=new Ce(""),Wm={},rB={};let z0;function $m(){return void 0===z0&&(z0=new zm),z0}class un{}class md extends un{get destroyed(){return this._destroyed}constructor(r,n,e,i){super(),this.parent=n,this.source=e,this.scopes=i,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,j0(r,o=>this.processProvider(o)),this.records.set(lM,_d(void 0,this)),i.has("environment")&&this.records.set(un,_d(void 0,this));const s=this.records.get(B0);null!=s&&"string"==typeof s.value&&this.scopes.add(s.value),this.injectorDefTypes=new Set(this.get(L0,Wt,Et.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const n of this._ngOnDestroyHooks)n.ngOnDestroy();const r=this._onDestroyHooks;this._onDestroyHooks=[];for(const n of r)n()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear()}}onDestroy(r){return this.assertNotDestroyed(),this._onDestroyHooks.push(r),()=>this.removeOnDestroy(r)}runInContext(r){this.assertNotDestroyed();const n=xa(this),e=Dr(void 0);try{return r()}finally{xa(n),Dr(e)}}get(r,n=Qh,e=Et.Default){if(this.assertNotDestroyed(),r.hasOwnProperty(sE))return r[sE](this);e=Om(e);const s=xa(this),o=Dr(void 0);try{if(!(e&Et.SkipSelf)){let l=this.records.get(r);if(void 0===l){const c=function cB(t){return"function"==typeof t||"object"==typeof t&&t instanceof Ce}(r)&&Mm(r);l=c&&this.injectableDefInScope(c)?_d(U0(r),Wm):null,this.records.set(r,l)}if(null!=l)return this.hydrate(r,l)}return(e&Et.Self?$m():this.parent).get(r,n=e&Et.Optional&&n===Qh?null:n)}catch(a){if("NullInjectorError"===a.name){if((a[Fm]=a[Fm]||[]).unshift(xn(r)),s)throw a;return function jH(t,r,n,e){const i=t[Fm];throw r[JE]&&i.unshift(r[JE]),t.message=function WH(t,r,n,e=null){t=t&&"\n"===t.charAt(0)&&"\u0275"==t.charAt(1)?t.slice(2):t;let i=xn(r);if(Array.isArray(r))i=r.map(xn).join(" -> ");else if("object"==typeof r){let s=[];for(let o in r)if(r.hasOwnProperty(o)){let a=r[o];s.push(o+":"+("string"==typeof a?JSON.stringify(a):xn(a)))}i=`{${s.join(", ")}}`}return`${n}${e?"("+e+")":""}[${i}]: ${t.replace(GH,"\n ")}`}("\n"+t.message,i,n,e),t.ngTokenPath=i,t[Fm]=null,t}(a,r,"R3InjectorError",this.source)}throw a}finally{Dr(o),xa(s)}}resolveInjectorInitializers(){const r=xa(this),n=Dr(void 0);try{const i=this.get(El,Wt,Et.Self);for(const s of i)s()}finally{xa(r),Dr(n)}}toString(){const r=[],n=this.records;for(const e of n.keys())r.push(xn(e));return`R3Injector[${r.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new se(205,!1)}processProvider(r){let n=Ml(r=Ye(r))?r:Ye(r&&r.provide);const e=function oB(t){return H0(t)?_d(void 0,t.useValue):_d(pM(t),Wm)}(r);if(!Ml(r)&&!0===r.multi){let i=this.records.get(n);i||(i=_d(void 0,Wm,!0),i.factory=()=>D0(i.multi),this.records.set(n,i)),n=r,i.multi.push(r)}this.records.set(n,e)}hydrate(r,n){return n.value===Wm&&(n.value=rB,n.value=n.factory()),"object"==typeof n.value&&n.value&&function lB(t){return null!==t&&"object"==typeof t&&"function"==typeof t.ngOnDestroy}(n.value)&&this._ngOnDestroyHooks.add(n.value),n.value}injectableDefInScope(r){if(!r.providedIn)return!1;const n=Ye(r.providedIn);return"string"==typeof n?"any"===n||this.scopes.has(n):this.injectorDefTypes.has(n)}removeOnDestroy(r){const n=this._onDestroyHooks.indexOf(r);-1!==n&&this._onDestroyHooks.splice(n,1)}}function U0(t){const r=Mm(t),n=null!==r?r.factory:Tl(t);if(null!==n)return n;if(t instanceof Ce)throw new se(204,!1);if(t instanceof Function)return function sB(t){if(t.length>0)throw new se(204,!1);const n=function EH(t){return t&&(t[km]||t[qE])||null}(t);return null!==n?()=>n.factory(t):()=>new t}(t);throw new se(204,!1)}function pM(t,r,n){let e;if(Ml(t)){const i=Ye(t);return Tl(i)||U0(i)}if(H0(t))e=()=>Ye(t.useValue);else if(function gM(t){return!(!t||!t.useFactory)}(t))e=()=>t.useFactory(...D0(t.deps||[]));else if(function hM(t){return!(!t||!t.useExisting)}(t))e=()=>ve(Ye(t.useExisting));else{const i=Ye(t&&(t.useClass||t.provide));if(!function aB(t){return!!t.deps}(t))return Tl(i)||U0(i);e=()=>new i(...D0(t.deps))}return e}function _d(t,r,n=!1){return{factory:t,value:r,multi:n?[]:void 0}}function j0(t,r){for(const n of t)Array.isArray(n)?j0(n,r):n&&w0(n)?j0(n.\u0275providers,r):r(n)}function ya(t,r){t instanceof md&&t.assertNotDestroyed();const e=xa(t),i=Dr(void 0);try{return r()}finally{xa(e),Dr(i)}}class mM{constructor(r,n,e){this.previousValue=r,this.currentValue=n,this.firstChange=e}isFirstChange(){return this.firstChange}}function _M(t,r,n,e){null!==r?r.applyValueToInputSignal(r,e):t[n]=e}function Ci(){return vM}function vM(t){return t.type.prototype.ngOnChanges&&(t.setInput=yB),xB}function xB(){const t=yM(this),r=t?.current;if(r){const n=t.previous;if(n===Ks)t.previous=r;else for(let e in r)n[e]=r[e];t.current=null,this.ngOnChanges(r)}}function yB(t,r,n,e,i){const s=this.declaredInputs[e],o=yM(t)||function wB(t,r){return t[xM]=r}(t,{previous:Ks,current:null}),a=o.current||(o.current={}),l=o.previous,c=l[s];a[s]=new mM(c&&c.currentValue,n,l===Ks),_M(t,r,i,n)}Ci.ngInherit=!0;const xM="__ngSimpleChanges__";function yM(t){return t[xM]||null}const Xs=function(t,r,n){};function Km(t,r){for(let n=r.directiveStart,e=r.directiveEnd;n=e)break}else r[l]<0&&(t[ed]+=65536),(a>14>16&&(3&t[Le])===r&&(t[Le]+=16384,CM(a,s)):CM(a,s)}const xd=-1;class ng{constructor(r,n,e){this.factory=r,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=e}}function Y0(t){return t!==xd}function rg(t){return 32767&t}function sg(t,r){let n=function MB(t){return t>>16}(t),e=r;for(;n>0;)e=e[Jc],n--;return e}let Q0=!0;function Qm(t){const r=Q0;return Q0=t,r}const IM=255,bM=5;let AB=0;const Js={};function Xm(t,r){const n=DM(t,r);if(-1!==n)return n;const e=r[we];e.firstCreatePass&&(t.injectorIndex=r.length,X0(e.data,t),X0(r,null),X0(e.blueprint,null));const i=Jm(t,r),s=t.injectorIndex;if(Y0(i)){const o=rg(i),a=sg(i,r),l=a[we].data;for(let c=0;c<8;c++)r[s+c]=a[o+c]|l[o+c]}return r[s+8]=i,s}function X0(t,r){t.push(0,0,0,0,0,0,0,0,r)}function DM(t,r){return-1===t.injectorIndex||t.parent&&t.parent.injectorIndex===t.injectorIndex||null===r[t.injectorIndex+8]?-1:t.injectorIndex}function Jm(t,r){if(t.parent&&-1!==t.parent.injectorIndex)return t.parent.injectorIndex;let n=0,e=null,i=r;for(;null!==i;){if(e=RM(i),null===e)return xd;if(n++,i=i[Jc],-1!==e.injectorIndex)return e.injectorIndex|n<<16}return xd}function J0(t,r,n){!function kB(t,r,n){let e;"string"==typeof n?e=n.charCodeAt(0)||0:n.hasOwnProperty(Gh)&&(e=n[Gh]),null==e&&(e=n[Gh]=AB++);const i=e&IM;r.data[t+(i>>bM)]|=1<=0?r&IM:OB:r}(n);if("function"==typeof s){if(!PE(r,t,e))return e&Et.Host?SM(i,0,e):TM(r,n,e,i);try{let o;if(o=s(e),null!=o||e&Et.Optional)return o;C0()}finally{VE()}}else if("number"==typeof s){let o=null,a=DM(t,r),l=xd,c=e&Et.Host?r[ji][Xn]:null;for((-1===a||e&Et.SkipSelf)&&(l=-1===a?Jm(t,r):r[a+8],l!==xd&&kM(e,!1)?(o=r[we],a=rg(l),r=sg(l,r)):a=-1);-1!==a;){const d=r[we];if(AM(s,a,d.data)){const g=PB(a,r,n,o,e,c);if(g!==Js)return g}l=r[a+8],l!==xd&&kM(e,r[we].data[a+8]===c)&&AM(s,a,r)?(o=d,a=rg(l),r=sg(l,r)):a=-1}}return i}function PB(t,r,n,e,i,s){const o=r[we],a=o.data[t+8],d=e_(a,o,n,null==e?bl(a)&&Q0:e!=o&&0!=(3&a.type),i&Et.Host&&s===a);return null!==d?Al(r,o,d,a):Js}function e_(t,r,n,e,i){const s=t.providerIndexes,o=r.data,a=1048575&s,l=t.directiveStart,d=s>>20,_=i?a+d:t.directiveEnd;for(let x=e?a:a+d;x<_;x++){const w=o[x];if(x=l&&w.type===n)return x}if(i){const x=o[l];if(x&&Ss(x)&&x.type===n)return l}return null}function Al(t,r,n,e){let i=t[n];const s=r.data;if(function DB(t){return t instanceof ng}(i)){const o=i;o.resolving&&function NH(t,r){throw r&&r.join(" > "),new se(-200,t)}(function Xt(t){return"function"==typeof t?t.name||t.toString():"object"==typeof t&&null!=t&&"function"==typeof t.type?t.type.name||t.type.toString():ct(t)}(s[n]));const a=Qm(o.canSeeViewProviders);o.resolving=!0;const c=o.injectImpl?Dr(o.injectImpl):null;PE(t,e,Et.Default);try{i=t[n]=o.factory(void 0,s,t,e),r.firstCreatePass&&n>=e.directiveStart&&function IB(t,r,n){const{ngOnChanges:e,ngOnInit:i,ngDoCheck:s}=r.type.prototype;if(e){const o=vM(r);(n.preOrderHooks??=[]).push(t,o),(n.preOrderCheckHooks??=[]).push(t,o)}i&&(n.preOrderHooks??=[]).push(0-t,i),s&&((n.preOrderHooks??=[]).push(t,s),(n.preOrderCheckHooks??=[]).push(t,s))}(n,s[n],r)}finally{null!==c&&Dr(c),Qm(a),o.resolving=!1,VE()}}return i}function AM(t,r,n){return!!(n[r+(t>>bM)]&1<{const r=t.prototype.constructor,n=r[Eo]||eC(r),e=Object.prototype;let i=Object.getPrototypeOf(t.prototype).constructor;for(;i&&i!==e;){const s=i[Eo]||eC(i);if(s&&s!==n)return s;i=Object.getPrototypeOf(i)}return s=>new s})}function eC(t){return Pm(t)?()=>{const r=eC(Ye(t));return r&&r()}:Tl(t)}function RM(t){const r=t[we],n=r.type;return 2===n?r.declTNode:1===n?t[Xn]:null}function VM(t,r=null,n=null,e){const i=LM(t,r,n,e);return i.resolveInjectorInitializers(),i}function LM(t,r=null,n=null,e,i=new Set){const s=[n||Wt,cM(t)];return e=e||("object"==typeof t?void 0:xn(t)),new md(s,r||$m(),e||null,i)}let ci=(()=>{var t;class r{static create(e,i){if(Array.isArray(e))return VM({name:""},i,e,"");{const s=e.name??"";return VM({name:s},e.parent,e.providers,s)}}}return(t=r).THROW_IF_NOT_FOUND=Qh,t.NULL=new zm,t.\u0275prov=ue({token:t,providedIn:"any",factory:()=>ve(lM)}),t.__NG_ELEMENT_ID__=-1,r})();function iC(t){return t.ngOriginalError}class Oo{constructor(){this._console=console}handleError(r){const n=this._findOriginalError(r);this._console.error("ERROR",r),n&&this._console.error("ORIGINAL ERROR",n)}_findOriginalError(r){let n=r&&iC(r);for(;n&&iC(n);)n=iC(n);return n||null}}const HM=new Ce("",{providedIn:"root",factory:()=>fe(Oo).handleError.bind(void 0)}),zM=new Ce("",{providedIn:"root",factory:()=>!1});let r_,s_;function Cd(t){return function nC(){if(void 0===r_&&(r_=null,ii.trustedTypes))try{r_=ii.trustedTypes.createPolicy("angular",{createHTML:t=>t,createScript:t=>t,createScriptURL:t=>t})}catch{}return r_}()?.createHTML(t)||t}function UM(t){return function rC(){if(void 0===s_&&(s_=null,ii.trustedTypes))try{s_=ii.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:t=>t,createScript:t=>t,createScriptURL:t=>t})}catch{}return s_}()?.createHTML(t)||t}class kl{constructor(r){this.changingThisBreaksApplicationSecurity=r}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${tE})`}}class $B extends kl{getTypeName(){return"HTML"}}class qB extends kl{getTypeName(){return"Style"}}class KB extends kl{getTypeName(){return"Script"}}class ZB extends kl{getTypeName(){return"URL"}}class YB extends kl{getTypeName(){return"ResourceURL"}}function zr(t){return t instanceof kl?t.changingThisBreaksApplicationSecurity:t}function eo(t,r){const n=function QB(t){return t instanceof kl&&t.getTypeName()||null}(t);if(null!=n&&n!==r){if("ResourceURL"===n&&"URL"===r)return!0;throw new Error(`Required a safe ${r}, got a ${n} (see ${tE})`)}return n===r}class n7{constructor(r){this.inertDocumentHelper=r}getInertBodyElement(r){r=""+r;try{const n=(new window.DOMParser).parseFromString(Cd(r),"text/html").body;return null===n?this.inertDocumentHelper.getInertBodyElement(r):(n.removeChild(n.firstChild),n)}catch{return null}}}class r7{constructor(r){this.defaultDoc=r,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert")}getInertBodyElement(r){const n=this.inertDocument.createElement("template");return n.innerHTML=Cd(r),n}}const o7=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function o_(t){return(t=String(t)).match(o7)?t:"unsafe:"+t}function No(t){const r={};for(const n of t.split(","))r[n]=!0;return r}function og(...t){const r={};for(const n of t)for(const e in n)n.hasOwnProperty(e)&&(r[e]=!0);return r}const qM=No("area,br,col,hr,img,wbr"),KM=No("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),ZM=No("rp,rt"),sC=og(qM,og(KM,No("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),og(ZM,No("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),og(ZM,KM)),oC=No("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),YM=og(oC,No("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),No("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext")),a7=No("script,style,template");class l7{constructor(){this.sanitizedSomething=!1,this.buf=[]}sanitizeChildren(r){let n=r.firstChild,e=!0;for(;n;)if(n.nodeType===Node.ELEMENT_NODE?e=this.startElement(n):n.nodeType===Node.TEXT_NODE?this.chars(n.nodeValue):this.sanitizedSomething=!0,e&&n.firstChild)n=n.firstChild;else for(;n;){n.nodeType===Node.ELEMENT_NODE&&this.endElement(n);let i=this.checkClobberedElement(n,n.nextSibling);if(i){n=i;break}n=this.checkClobberedElement(n,n.parentNode)}return this.buf.join("")}startElement(r){const n=r.nodeName.toLowerCase();if(!sC.hasOwnProperty(n))return this.sanitizedSomething=!0,!a7.hasOwnProperty(n);this.buf.push("<"),this.buf.push(n);const e=r.attributes;for(let i=0;i"),!0}endElement(r){const n=r.nodeName.toLowerCase();sC.hasOwnProperty(n)&&!qM.hasOwnProperty(n)&&(this.buf.push(""))}chars(r){this.buf.push(QM(r))}checkClobberedElement(r,n){if(n&&(r.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${r.outerHTML}`);return n}}const c7=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,d7=/([^\#-~ |!])/g;function QM(t){return t.replace(/&/g,"&").replace(c7,function(r){return"&#"+(1024*(r.charCodeAt(0)-55296)+(r.charCodeAt(1)-56320)+65536)+";"}).replace(d7,function(r){return"&#"+r.charCodeAt(0)+";"}).replace(//g,">")}let a_;function XM(t,r){let n=null;try{a_=a_||function $M(t){const r=new r7(t);return function s7(){try{return!!(new window.DOMParser).parseFromString(Cd(""),"text/html")}catch{return!1}}()?new n7(r):r}(t);let e=r?String(r):"";n=a_.getInertBodyElement(e);let i=5,s=e;do{if(0===i)throw new Error("Failed to sanitize html because the input is unstable");i--,e=s,s=n.innerHTML,n=a_.getInertBodyElement(e)}while(e!==s);return Cd((new l7).sanitizeChildren(aC(n)||n))}finally{if(n){const e=aC(n)||n;for(;e.firstChild;)e.removeChild(e.firstChild)}}}function aC(t){return"content"in t&&function u7(t){return t.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===t.nodeName}(t)?t.content:null}var Ur=function(t){return t[t.NONE=0]="NONE",t[t.HTML=1]="HTML",t[t.STYLE=2]="STYLE",t[t.SCRIPT=3]="SCRIPT",t[t.URL=4]="URL",t[t.RESOURCE_URL=5]="RESOURCE_URL",t}(Ur||{});function JM(t){const r=ag();return r?UM(r.sanitize(Ur.HTML,t)||""):eo(t,"HTML")?UM(zr(t)):XM(va(),ct(t))}function Id(t){const r=ag();return r?r.sanitize(Ur.URL,t)||"":eo(t,"URL")?zr(t):o_(ct(t))}function ag(){const t=le();return t&&t[Mo].sanitizer}const _7=/^>|^->||--!>|)/g,x7="\u200b$1\u200b";const lC=new Map;let b7=0;const dC="__ngContext__";function rr(t,r){er(r)?(t[dC]=r[Uh],function S7(t){lC.set(t[Uh],t)}(r)):t[dC]=r}function pC(t){return t.ownerDocument}function jr(t){return t instanceof Function?t():t}var Vo=function(t){return t[t.Important=1]="Important",t[t.DashCase=2]="DashCase",t}(Vo||{});let fC;function mC(t,r){return fC(t,r)}function Dd(t,r,n,e,i){if(null!=e){let s,o=!1;tr(e)?s=e:er(e)&&(o=!0,e=e[Bi]);const a=gi(e);0===t&&null!==n?null==i?yA(r,n,a):Rl(r,n,a,i||null,!0):1===t&&null!==n?Rl(r,n,a,i||null,!0):2===t?function f_(t,r,n){const e=g_(t,r);e&&function q7(t,r,n,e){t.removeChild(r,n,e)}(t,e,r,n)}(r,a,o):3===t&&r.destroyNode(a),null!=s&&function Y7(t,r,n,e,i){const s=n[Zs];s!==gi(n)&&Dd(r,t,e,s,i);for(let a=an;ar.replace(v7,x7))}(r))}function u_(t,r,n){return t.createElement(r,n)}function _A(t,r){m_(t,r,r[st],2,null,null)}function vA(t,r){const n=t[td],e=n.indexOf(r);n.splice(e,1)}function cg(t,r){if(t.length<=an)return;const n=an+r,e=t[n];if(e){const i=e[zh];null!==i&&i!==t&&vA(i,e),r>0&&(t[n-1][bs]=e[bs]);const s=Dm(t,an+r);!function H7(t,r){_A(t,r),r[Bi]=null,r[Xn]=null}(e[we],e);const o=s[Ao];null!==o&&o.detachView(s[we]),e[on]=null,e[bs]=null,e[Le]&=-129}return e}function h_(t,r){if(!(256&r[Le])){const n=r[st];n.destroyNode&&m_(t,r,n,3,null,null),function z7(t){let r=t[Bh];if(!r)return vC(t[we],t);for(;r;){let n=null;if(er(r))n=r[Bh];else{const e=r[an];e&&(n=e)}if(!n){for(;r&&!r[bs]&&r!==t;)er(r)&&vC(r[we],r),r=r[on];null===r&&(r=t),er(r)&&vC(r[we],r),n=r&&r[bs]}r=n}}(r)}}function vC(t,r){if(!(256&r[Le])){r[Le]&=-129,r[Le]|=256,r[Il]&&function B2(t){if(Kc(t),Oh(t))for(let r=0;r=0?e[o]():e[-o].unsubscribe(),s+=2}else n[s].call(e[n[s+1]]);null!==e&&(r[Xc]=null);const i=r[ma];if(null!==i){r[ma]=null;for(let s=0;s-1){const{encapsulation:s}=t.data[e.directiveStart+i];if(s===ts.None||s===ts.Emulated)return null}return pr(e,n)}}(t,r.parent,n)}function Rl(t,r,n,e,i){t.insertBefore(r,n,e,i)}function yA(t,r,n){t.appendChild(r,n)}function wA(t,r,n,e,i){null!==e?Rl(t,r,n,e,i):yA(t,r,n)}function g_(t,r){return t.parentNode(r)}function CA(t,r,n){return bA(t,r,n)}let yC,bA=function IA(t,r,n){return 40&t.type?pr(t,n):null};function p_(t,r,n,e){const i=xC(t,e,r),s=r[st],a=CA(e.parent||r[Xn],e,r);if(null!=i)if(Array.isArray(n))for(let l=0;llt&&kA(t,r,lt,!1),Xs(o?2:0,i),n(e,i)}finally{Sl(s),Xs(o?3:1,i)}}function bC(t,r,n){if(Zw(r)){const e=Xi(null);try{const s=r.directiveEnd;for(let o=r.directiveStart;onull;function VA(t,r,n,e,i){for(let s in r){if(!r.hasOwnProperty(s))continue;const o=r[s];if(void 0===o)continue;e??={};let a,l=O.None;Array.isArray(o)?(a=o[0],l=o[1]):a=o;let c=s;if(null!==i){if(!i.hasOwnProperty(s))continue;c=i[s]}0===t?LA(e,n,c,a,l):LA(e,n,c,a)}return e}function LA(t,r,n,e,i){let s;t.hasOwnProperty(n)?(s=t[n]).push(r,e):s=t[n]=[r,e],void 0!==i&&s.push(i)}function Tr(t,r,n,e,i,s,o,a){const l=pr(r,n);let d,c=r.inputs;!a&&null!=c&&(d=c[e])?(RC(t,n,d,e,i),bl(r)&&function c9(t,r){const n=Hr(r,t);16&n[Le]||(n[Le]|=64)}(n,r.index)):3&r.type&&(e=function l9(t){return"class"===t?"className":"for"===t?"htmlFor":"formaction"===t?"formAction":"innerHtml"===t?"innerHTML":"readonly"===t?"readOnly":"tabindex"===t?"tabIndex":t}(e),i=null!=o?o(i,r.value||"",e):i,s.setProperty(l,e,i))}function EC(t,r,n,e){if(EE()){const i=null===e?null:{"":-1},s=function f9(t,r){const n=t.directiveRegistry;let e=null,i=null;if(n)for(let s=0;s0;){const n=t[--r];if("number"==typeof n&&n<0)return n}return 0})(o)!=a&&o.push(a),o.push(n,e,s)}}(t,r,e,ug(t,n,i.hostVars,ut),i)}function to(t,r,n,e,i,s){const o=pr(t,r);!function AC(t,r,n,e,i,s,o){if(null==s)t.removeAttribute(r,i,n);else{const a=null==o?ct(s):o(s,e||"",i);t.setAttribute(r,i,a,n)}}(r[st],o,s,t.value,n,e,i)}function w9(t,r,n,e,i,s){const o=s[r];if(null!==o)for(let a=0;a0&&(n[i-1][bs]=r),e!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{},consumerIsAlwaysLive:!0,consumerMarkedDirty:t=>{qh(t.lView)},consumerOnSignalRead(){this.lView[Il]=this}};function ZA(t){return QA(t[Bh])}function YA(t){return QA(t[bs])}function QA(t){for(;null!==t&&!tr(t);)t=t[bs];return t}function y_(t,r=!0,n=0){const e=t[Mo],i=e.rendererFactory;i.begin?.();try{!function R9(t,r){OC(t,r);let n=0;for(;t0(t);){if(100===n)throw new se(103,!1);n++,OC(t,1)}}(t,n)}catch(o){throw r&&x_(t,o),o}finally{i.end?.(),e.inlineEffectRunner?.flush()}}function P9(t,r,n,e){const i=r[Le];if(256==(256&i))return;r[Mo].inlineEffectRunner?.flush(),d0(r);let o=null,a=null;(function F9(t){return 2!==t.type})(t)&&(a=function S9(t){return t[Il]??function T9(t){const r=KA.pop()??Object.create(M9);return r.lView=t,r}(t)}(r),o=function G2(t){return t&&(t.nextProducerIndex=0),Xi(t)}(a));try{DE(r),function kE(t){return Xe.lFrame.bindingIndex=t}(t.bindingStartIndex),null!==n&&FA(t,r,n,2,e);const l=3==(3&i);if(l){const g=t.preOrderCheckHooks;null!==g&&Zm(r,g,null)}else{const g=t.preOrderHooks;null!==g&&Ym(r,g,0,null),K0(r,0)}if(function O9(t){for(let r=ZA(t);null!==r;r=YA(r)){if(!(r[Le]&Kw.HasTransplantedViews))continue;const n=r[td];for(let e=0;et.nextProducerIndex;)t.producerNode.pop(),t.producerLastReadVersion.pop(),t.producerIndexOfThis.pop()}}(a,o),function E9(t){t.lView[Il]!==t&&(t.lView=null,KA.push(t))}(a)),u0()}}function JA(t,r){for(let n=ZA(t);null!==n;n=YA(n))for(let e=an;e-1&&(cg(r,e),Dm(n,e))}this._attachedToViewContainer=!1}h_(this._lView[we],this._lView)}onDestroy(r){Cm(this._lView,r)}markForCheck(){fg(this._cdRefInjectingView||this._lView)}detach(){this._lView[Le]&=-129}reattach(){n0(this._lView),this._lView[Le]|=128}detectChanges(){this._lView[Le]|=1024,y_(this._lView,this.notifyErrorHandler)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new se(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,_A(this._lView[we],this._lView)}attachToAppRef(r){if(this._attachedToViewContainer)throw new se(902,!1);this._appRef=r,n0(this._lView)}}let ne=(()=>{class r{}return r.__NG_ELEMENT_ID__=G9,r})();const V9=ne,L9=class extends V9{constructor(r,n,e){super(),this._declarationLView=r,this._declarationTContainer=n,this.elementRef=e}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(r,n){return this.createEmbeddedViewImpl(r,n)}createEmbeddedViewImpl(r,n,e){const i=function hg(t,r,n,e){const i=r.tView,a=__(t,i,n,4096&t[Le]?4096:16,null,r,null,null,null,e?.injector??null,e?.dehydratedView??null);a[zh]=t[r.index];const c=t[Ao];return null!==c&&(a[Ao]=c.createEmbeddedView(i)),PC(i,a,n),a}(this._declarationLView,this._declarationTContainer,r,{injector:n,dehydratedView:e});return new mg(i)}};function G9(){return w_(li(),le())}function w_(t,r){return 4&t.type?new L9(r,t,rd(t,r)):null}class BC{}class az{}class lk{}class cz{resolveComponentFactory(r){throw function lz(t){const r=Error(`No component factory found for ${xn(t)}.`);return r.ngComponent=t,r}(r)}}let wg=(()=>{class r{}return r.NULL=new cz,r})();class S_{}let Yt=(()=>{class r{constructor(){this.destroyNode=null}}return r.__NG_ELEMENT_ID__=()=>function dz(){const t=le(),n=Hr(li().index,t);return(er(n)?n:t)[st]}(),r})(),uz=(()=>{var t;class r{}return(t=r).\u0275prov=ue({token:t,providedIn:"root",factory:()=>null}),r})();const zC={};function uk(t){return function dk(t){return"function"==typeof t&&void 0!==t[wl]}(t)&&"function"==typeof t.set}function hk(t){const r=Xi(null);try{return t()}finally{Xi(r)}}function T_(t){return!!UC(t)&&(Array.isArray(t)||!(t instanceof Map)&&Symbol.iterator in t)}function UC(t){return null!==t&&("function"==typeof t||"object"==typeof t)}class gk{constructor(){}supports(r){return T_(r)}create(r){return new _z(r)}}const mz=(t,r)=>r;class _z{constructor(r){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=r||mz}forEachItem(r){let n;for(n=this._itHead;null!==n;n=n._next)r(n)}forEachOperation(r){let n=this._itHead,e=this._removalsHead,i=0,s=null;for(;n||e;){const o=!e||n&&n.currentIndex{o=this._trackByFn(i,a),null!==n&&Object.is(n.trackById,o)?(e&&(n=this._verifyReinsertion(n,a,o,i)),Object.is(n.item,a)||this._addIdentityChange(n,a)):(n=this._mismatch(n,a,o,i),e=!0),n=n._next,i++}),this.length=i;return this._truncate(n),this.collection=r,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let r;for(r=this._previousItHead=this._itHead;null!==r;r=r._next)r._nextPrevious=r._next;for(r=this._additionsHead;null!==r;r=r._nextAdded)r.previousIndex=r.currentIndex;for(this._additionsHead=this._additionsTail=null,r=this._movesHead;null!==r;r=r._nextMoved)r.previousIndex=r.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(r,n,e,i){let s;return null===r?s=this._itTail:(s=r._prev,this._remove(r)),null!==(r=null===this._unlinkedRecords?null:this._unlinkedRecords.get(e,null))?(Object.is(r.item,n)||this._addIdentityChange(r,n),this._reinsertAfter(r,s,i)):null!==(r=null===this._linkedRecords?null:this._linkedRecords.get(e,i))?(Object.is(r.item,n)||this._addIdentityChange(r,n),this._moveAfter(r,s,i)):r=this._addAfter(new vz(n,e),s,i),r}_verifyReinsertion(r,n,e,i){let s=null===this._unlinkedRecords?null:this._unlinkedRecords.get(e,null);return null!==s?r=this._reinsertAfter(s,r._prev,i):r.currentIndex!=i&&(r.currentIndex=i,this._addToMoves(r,i)),r}_truncate(r){for(;null!==r;){const n=r._next;this._addToRemovals(this._unlink(r)),r=n}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(r,n,e){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(r);const i=r._prevRemoved,s=r._nextRemoved;return null===i?this._removalsHead=s:i._nextRemoved=s,null===s?this._removalsTail=i:s._prevRemoved=i,this._insertAfter(r,n,e),this._addToMoves(r,e),r}_moveAfter(r,n,e){return this._unlink(r),this._insertAfter(r,n,e),this._addToMoves(r,e),r}_addAfter(r,n,e){return this._insertAfter(r,n,e),this._additionsTail=null===this._additionsTail?this._additionsHead=r:this._additionsTail._nextAdded=r,r}_insertAfter(r,n,e){const i=null===n?this._itHead:n._next;return r._next=i,r._prev=n,null===i?this._itTail=r:i._prev=r,null===n?this._itHead=r:n._next=r,null===this._linkedRecords&&(this._linkedRecords=new pk),this._linkedRecords.put(r),r.currentIndex=e,r}_remove(r){return this._addToRemovals(this._unlink(r))}_unlink(r){null!==this._linkedRecords&&this._linkedRecords.remove(r);const n=r._prev,e=r._next;return null===n?this._itHead=e:n._next=e,null===e?this._itTail=n:e._prev=n,r}_addToMoves(r,n){return r.previousIndex===n||(this._movesTail=null===this._movesTail?this._movesHead=r:this._movesTail._nextMoved=r),r}_addToRemovals(r){return null===this._unlinkedRecords&&(this._unlinkedRecords=new pk),this._unlinkedRecords.put(r),r.currentIndex=null,r._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=r,r._prevRemoved=null):(r._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=r),r}_addIdentityChange(r,n){return r.item=n,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=r:this._identityChangesTail._nextIdentityChange=r,r}}class vz{constructor(r,n){this.item=r,this.trackById=n,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class xz{constructor(){this._head=null,this._tail=null}add(r){null===this._head?(this._head=this._tail=r,r._nextDup=null,r._prevDup=null):(this._tail._nextDup=r,r._prevDup=this._tail,r._nextDup=null,this._tail=r)}get(r,n){let e;for(e=this._head;null!==e;e=e._nextDup)if((null===n||n<=e.currentIndex)&&Object.is(e.trackById,r))return e;return null}remove(r){const n=r._prevDup,e=r._nextDup;return null===n?this._head=e:n._nextDup=e,null===e?this._tail=n:e._prevDup=n,null===this._head}}class pk{constructor(){this.map=new Map}put(r){const n=r.trackById;let e=this.map.get(n);e||(e=new xz,this.map.set(n,e)),e.add(r)}get(r,n){const i=this.map.get(r);return i?i.get(r,n):null}remove(r){const n=r.trackById;return this.map.get(n).remove(r)&&this.map.delete(n),r}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function fk(t,r,n){const e=t.previousIndex;if(null===e)return e;let i=0;return n&&e{if(n&&n.key===i)this._maybeAddToChanges(n,e),this._appendAfter=n,n=n._next;else{const s=this._getOrCreateRecordForKey(i,e);n=this._insertBeforeOrAppend(n,s)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(let e=n;null!==e;e=e._nextRemoved)e===this._mapHead&&(this._mapHead=null),this._records.delete(e.key),e._nextRemoved=e._next,e.previousValue=e.currentValue,e.currentValue=null,e._prev=null,e._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(r,n){if(r){const e=r._prev;return n._next=r,n._prev=e,r._prev=n,e&&(e._next=n),r===this._mapHead&&(this._mapHead=n),this._appendAfter=r,r}return this._appendAfter?(this._appendAfter._next=n,n._prev=this._appendAfter):this._mapHead=n,this._appendAfter=n,null}_getOrCreateRecordForKey(r,n){if(this._records.has(r)){const i=this._records.get(r);this._maybeAddToChanges(i,n);const s=i._prev,o=i._next;return s&&(s._next=o),o&&(o._prev=s),i._next=null,i._prev=null,i}const e=new wz(r);return this._records.set(r,e),e.currentValue=n,this._addToAdditions(e),e}_reset(){if(this.isDirty){let r;for(this._previousMapHead=this._mapHead,r=this._previousMapHead;null!==r;r=r._next)r._nextPrevious=r._next;for(r=this._changesHead;null!==r;r=r._nextChanged)r.previousValue=r.currentValue;for(r=this._additionsHead;null!=r;r=r._nextAdded)r.previousValue=r.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(r,n){Object.is(n,r.currentValue)||(r.previousValue=r.currentValue,r.currentValue=n,this._addToChanges(r))}_addToAdditions(r){null===this._additionsHead?this._additionsHead=this._additionsTail=r:(this._additionsTail._nextAdded=r,this._additionsTail=r)}_addToChanges(r){null===this._changesHead?this._changesHead=this._changesTail=r:(this._changesTail._nextChanged=r,this._changesTail=r)}_forEach(r,n){r instanceof Map?r.forEach(n):Object.keys(r).forEach(e=>n(r[e],e))}}class wz{constructor(r){this.key=r,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function _k(){return new mr([new gk])}let mr=(()=>{var t;class r{constructor(e){this.factories=e}static create(e,i){if(null!=i){const s=i.factories.slice();e=e.concat(s)}return new r(e)}static extend(e){return{provide:r,useFactory:i=>r.create(e,i||_k()),deps:[[r,new Bm,new fd]]}}find(e){const i=this.factories.find(s=>s.supports(e));if(null!=i)return i;throw new se(901,!1)}}return(t=r).\u0275prov=ue({token:t,providedIn:"root",factory:_k}),r})();function vk(){return new E_([new mk])}let E_=(()=>{var t;class r{constructor(e){this.factories=e}static create(e,i){if(i){const s=i.factories.slice();e=e.concat(s)}return new r(e)}static extend(e){return{provide:r,useFactory:i=>r.create(e,i||vk()),deps:[[r,new Bm,new fd]]}}find(e){const i=this.factories.find(s=>s.supports(e));if(i)return i;throw new se(901,!1)}}return(t=r).\u0275prov=ue({token:t,providedIn:"root",factory:vk}),r})(),Ee=(()=>{class r{}return r.__NG_ELEMENT_ID__=Iz,r})();function Iz(t){return function bz(t,r,n){if(bl(t)&&!n){const e=Hr(t.index,r);return new mg(e,e)}return 47&t.type?new mg(r[ji],r):null}(li(),le(),16==(16&t))}let M_=(()=>{var t;class r{}return(t=r).__NG_ELEMENT_ID__=Ez,t.__NG_ENV_ID__=n=>n,r})();class Tz extends M_{constructor(r){super(),this._lView=r}onDestroy(r){return Cm(this._lView,r),()=>function r0(t,r){if(null===t[ma])return;const n=t[ma].indexOf(r);-1!==n&&t[ma].splice(n,1)}(this._lView,r)}}function Ez(){return new Tz(le())}const xk=new Set;function Ca(t){xk.has(t)||(xk.add(t),performance?.mark?.("mark_feature_usage",{detail:{feature:t}}))}function yk(...t){}class Oe{constructor({enableLongStackTrace:r=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:e=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new A(!1),this.onMicrotaskEmpty=new A(!1),this.onStable=new A(!1),this.onError=new A(!1),typeof Zone>"u")throw new se(908,!1);Zone.assertZonePatched();const i=this;i._nesting=0,i._outer=i._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(i._inner=i._inner.fork(new Zone.TaskTrackingZoneSpec)),r&&Zone.longStackTraceZoneSpec&&(i._inner=i._inner.fork(Zone.longStackTraceZoneSpec)),i.shouldCoalesceEventChangeDetection=!e&&n,i.shouldCoalesceRunChangeDetection=e,i.lastRequestAnimationFrameId=-1,i.nativeRequestAnimationFrame=function Fz(){const t="function"==typeof ii.requestAnimationFrame;let r=ii[t?"requestAnimationFrame":"setTimeout"],n=ii[t?"cancelAnimationFrame":"clearTimeout"];if(typeof Zone<"u"&&r&&n){const e=r[Zone.__symbol__("OriginalDelegate")];e&&(r=e);const i=n[Zone.__symbol__("OriginalDelegate")];i&&(n=i)}return{nativeRequestAnimationFrame:r,nativeCancelAnimationFrame:n}}().nativeRequestAnimationFrame,function Vz(t){const r=()=>{!function Nz(t){t.isCheckStableRunning||-1!==t.lastRequestAnimationFrameId||(t.lastRequestAnimationFrameId=t.nativeRequestAnimationFrame.call(ii,()=>{t.fakeTopEventTask||(t.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{t.lastRequestAnimationFrameId=-1,WC(t),t.isCheckStableRunning=!0,jC(t),t.isCheckStableRunning=!1},void 0,()=>{},()=>{})),t.fakeTopEventTask.invoke()}),WC(t))}(t)};t._inner=t._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,e,i,s,o,a)=>{if(function Lz(t){return!(!Array.isArray(t)||1!==t.length)&&!0===t[0].data?.__ignore_ng_zone__}(a))return n.invokeTask(i,s,o,a);try{return wk(t),n.invokeTask(i,s,o,a)}finally{(t.shouldCoalesceEventChangeDetection&&"eventTask"===s.type||t.shouldCoalesceRunChangeDetection)&&r(),Ck(t)}},onInvoke:(n,e,i,s,o,a,l)=>{try{return wk(t),n.invoke(i,s,o,a,l)}finally{t.shouldCoalesceRunChangeDetection&&r(),Ck(t)}},onHasTask:(n,e,i,s)=>{n.hasTask(i,s),e===i&&("microTask"==s.change?(t._hasPendingMicrotasks=s.microTask,WC(t),jC(t)):"macroTask"==s.change&&(t.hasPendingMacrotasks=s.macroTask))},onHandleError:(n,e,i,s)=>(n.handleError(i,s),t.runOutsideAngular(()=>t.onError.emit(s)),!1)})}(i)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!Oe.isInAngularZone())throw new se(909,!1)}static assertNotInAngularZone(){if(Oe.isInAngularZone())throw new se(909,!1)}run(r,n,e){return this._inner.run(r,n,e)}runTask(r,n,e,i){const s=this._inner,o=s.scheduleEventTask("NgZoneEvent: "+i,r,Oz,yk,yk);try{return s.runTask(o,n,e)}finally{s.cancelTask(o)}}runGuarded(r,n,e){return this._inner.runGuarded(r,n,e)}runOutsideAngular(r){return this._outer.run(r)}}const Oz={};function jC(t){if(0==t._nesting&&!t.hasPendingMicrotasks&&!t.isStable)try{t._nesting++,t.onMicrotaskEmpty.emit(null)}finally{if(t._nesting--,!t.hasPendingMicrotasks)try{t.runOutsideAngular(()=>t.onStable.emit(null))}finally{t.isStable=!0}}}function WC(t){t.hasPendingMicrotasks=!!(t._hasPendingMicrotasks||(t.shouldCoalesceEventChangeDetection||t.shouldCoalesceRunChangeDetection)&&-1!==t.lastRequestAnimationFrameId)}function wk(t){t._nesting++,t.isStable&&(t.isStable=!1,t.onUnstable.emit(null))}function Ck(t){t._nesting--,jC(t)}var Pl=function(t){return t[t.EarlyRead=0]="EarlyRead",t[t.Write=1]="Write",t[t.MixedReadWrite=2]="MixedReadWrite",t[t.Read=3]="Read",t}(Pl||{});const bk={destroy(){}};function Sk(t,r){!r&&function W0(t){if(!QE()&&!function BH(){return ad}())throw new se(-203,!1)}();const n=r?.injector??fe(ci);if(!function wa(t){return"browser"===(t??fe(ci)).get(Fo)}(n))return bk;Ca("NgAfterNextRender");const e=n.get(Cg),i=e.handler??=new Ek,s=r?.phase??Pl.MixedReadWrite,o=()=>{i.unregister(l),a()},a=n.get(M_).onDestroy(o),l=new Tk(n,s,()=>{o(),t()});return i.register(l),{destroy:o}}class Tk{constructor(r,n,e){this.phase=n,this.callbackFn=e,this.zone=r.get(Oe),this.errorHandler=r.get(Oo,null,{optional:!0})}invoke(){try{this.zone.runOutsideAngular(this.callbackFn)}catch(r){this.errorHandler?.handleError(r)}}}class Ek{constructor(){this.executingCallbacks=!1,this.buckets={[Pl.EarlyRead]:new Set,[Pl.Write]:new Set,[Pl.MixedReadWrite]:new Set,[Pl.Read]:new Set},this.deferredCallbacks=new Set}register(r){(this.executingCallbacks?this.deferredCallbacks:this.buckets[r.phase]).add(r)}unregister(r){this.buckets[r.phase].delete(r),this.deferredCallbacks.delete(r)}execute(){this.executingCallbacks=!0;for(const r of Object.values(this.buckets))for(const n of r)n.invoke();this.executingCallbacks=!1;for(const r of this.deferredCallbacks)this.buckets[r.phase].add(r);this.deferredCallbacks.clear()}destroy(){for(const r of Object.values(this.buckets))r.clear();this.deferredCallbacks.clear()}}let Cg=(()=>{var t;class r{constructor(){this.handler=null,this.internalCallbacks=[]}execute(){const e=[...this.internalCallbacks];this.internalCallbacks.length=0;for(const i of e)i();this.handler?.execute()}ngOnDestroy(){this.handler?.destroy(),this.handler=null,this.internalCallbacks.length=0}}return(t=r).\u0275prov=ue({token:t,providedIn:"root",factory:()=>new t}),r})();function k_(t,r,n){let e=n?t.styles:null,i=n?t.classes:null,s=0;if(null!==r)for(let o=0;o0&&MA(t,n,s.join(" "))}}(_,ce,w,e),void 0!==n&&function Qz(t,r,n){const e=t.projection=[];for(let i=0;i{class r{}return r.__NG_ELEMENT_ID__=Jz,r})();function Jz(){return Ok(li(),le())}const eU=bt,Pk=class extends eU{constructor(r,n,e){super(),this._lContainer=r,this._hostTNode=n,this._hostLView=e}get element(){return rd(this._hostTNode,this._hostLView)}get injector(){return new Cn(this._hostTNode,this._hostLView)}get parentInjector(){const r=Jm(this._hostTNode,this._hostLView);if(Y0(r)){const n=sg(r,this._hostLView),e=rg(r);return new Cn(n[we].data[e+8],n)}return new Cn(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(r){const n=Fk(this._lContainer);return null!==n&&n[r]||null}get length(){return this._lContainer.length-an}createEmbeddedView(r,n,e){let i,s;"number"==typeof e?i=e:null!=e&&(i=e.index,s=e.injector);const a=r.createEmbeddedViewImpl(n||{},s,null);return this.insertImpl(a,i,Td(this._hostTNode,null)),a}createComponent(r,n,e,i,s){const o=r&&!function ig(t){return"function"==typeof t}(r);let a;if(o)a=n;else{const w=n||{};a=w.index,e=w.injector,i=w.projectableNodes,s=w.environmentInjector||w.ngModuleRef}const l=o?r:new Dg(vt(r)),c=e||this.parentInjector;if(!s&&null==l.ngModule){const E=(o?c:this.parentInjector).get(un,null);E&&(s=E)}vt(l.componentType??{});const x=l.create(c,i,null,s);return this.insertImpl(x.hostView,a,Td(this._hostTNode,null)),x}insert(r,n){return this.insertImpl(r,n,!0)}insertImpl(r,n,e){const i=r._lView;if(function rH(t){return tr(t[on])}(i)){const a=this.indexOf(r);if(-1!==a)this.detach(a);else{const l=i[on],c=new Pk(l,l[Xn],l[on]);c.detach(c.indexOf(r))}}const s=this._adjustIndex(n),o=this._lContainer;return gg(o,i,s,e),r.attachToViewContainerRef(),BE(KC(o),s,r),r}move(r,n){return this.insert(r,n)}indexOf(r){const n=Fk(this._lContainer);return null!==n?n.indexOf(r):-1}remove(r){const n=this._adjustIndex(r,-1),e=cg(this._lContainer,n);e&&(Dm(KC(this._lContainer),n),h_(e[we],e))}detach(r){const n=this._adjustIndex(r,-1),e=cg(this._lContainer,n);return e&&null!=Dm(KC(this._lContainer),n)?new mg(e):null}_adjustIndex(r,n=0){return r??this.length+n}};function Fk(t){return t[8]}function KC(t){return t[8]||(t[8]=[])}function Ok(t,r){let n;const e=r[t.index];return tr(e)?n=e:(n=BA(e,r,null,t),r[t.index]=n,v_(r,n)),Nk(n,r,t,e),new Pk(n,t,r)}let Nk=function Lk(t,r,n,e){if(t[Zs])return;let i;i=8&n.type?gi(e):function tU(t,r){const n=t[st],e=n.createComment(""),i=pr(r,t);return Rl(n,g_(n,i),e,function K7(t,r){return t.nextSibling(r)}(n,i),!1),e}(r,n),t[Zs]=i},ZC=()=>!1;class YC{constructor(r){this.queryList=r,this.matches=null}clone(){return new YC(this.queryList)}setDirty(){this.queryList.setDirty()}}class QC{constructor(r=[]){this.queries=r}createEmbeddedView(r){const n=r.queries;if(null!==n){const e=null!==r.contentQueries?r.contentQueries[0]:n.length,i=[];for(let s=0;sr.trim())}(r):r}}class XC{constructor(r=[]){this.queries=r}elementStart(r,n){for(let e=0;e0)e.push(o[a/2]);else{const c=s[a+1],d=r[-l];for(let g=an;g=0;e--){const i=t[e];i.hostVars=r+=i.hostVars,i.hostAttrs=Hh(i.hostAttrs,n=Hh(n,i.hostAttrs))}}(e)}function yU(t,r){for(const n in r.inputs){if(!r.inputs.hasOwnProperty(n)||t.inputs.hasOwnProperty(n))continue;const e=r.inputs[n];if(void 0!==e&&(t.inputs[n]=e,t.declaredInputs[n]=r.declaredInputs[n],null!==r.inputTransforms)){const i=Array.isArray(e)?e[0]:e;if(!r.inputTransforms.hasOwnProperty(i))continue;t.inputTransforms??={},t.inputTransforms[i]=r.inputTransforms[i]}}}function P_(t){return t===Ks?{}:t===Wt?[]:t}function CU(t,r){const n=t.viewQuery;t.viewQuery=n?(e,i)=>{r(e,i),n(e,i)}:r}function IU(t,r){const n=t.contentQueries;t.contentQueries=n?(e,i,s)=>{r(e,i,s),n(e,i,s)}:r}function bU(t,r){const n=t.hostBindings;t.hostBindings=n?(e,i)=>{r(e,i),n(e,i)}:r}function _e(t){const r=t.inputConfig,n={};for(const e in r)if(r.hasOwnProperty(e)){const i=r[e];Array.isArray(i)&&i[3]&&(n[e]=i[3])}t.inputTransforms=n}class Fl{}class oR{}class rI extends Fl{constructor(r,n,e){super(),this._parent=n,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new kk(this);const i=Qn(r);this._bootstrapComponents=jr(i.bootstrap),this._r3Injector=LM(r,n,[{provide:Fl,useValue:this},{provide:wg,useValue:this.componentFactoryResolver},...e],xn(r),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(r)}get injector(){return this._r3Injector}destroy(){const r=this._r3Injector;!r.destroyed&&r.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(r){this.destroyCbs.push(r)}}class sI extends oR{constructor(r){super(),this.moduleType=r}create(r){return new rI(this.moduleType,r,[])}}class aR extends Fl{constructor(r){super(),this.componentFactoryResolver=new kk(this),this.instance=null;const n=new md([...r.providers,{provide:Fl,useValue:this},{provide:wg,useValue:this.componentFactoryResolver}],r.parent||$m(),r.debugName,new Set(["environment"]));this.injector=n,r.runEnvironmentInitializers&&n.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(r){this.injector.onDestroy(r)}}function oI(t,r,n=null){return new aR({providers:t,parent:r,debugName:n,runEnvironmentInitializers:!0}).injector}let Ol=(()=>{var t;class r{constructor(){this.taskId=0,this.pendingTasks=new Set,this.hasPendingTasks=new es(!1)}get _hasPendingTasks(){return this.hasPendingTasks.value}add(){this._hasPendingTasks||this.hasPendingTasks.next(!0);const e=this.taskId++;return this.pendingTasks.add(e),e}remove(e){this.pendingTasks.delete(e),0===this.pendingTasks.size&&this._hasPendingTasks&&this.hasPendingTasks.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this._hasPendingTasks&&this.hasPendingTasks.next(!1)}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();function io(t,r,n){return t[r]=n}function Tg(t,r){return t[r]}function ln(t,r,n){return!Object.is(t[r],n)&&(t[r]=n,!0)}function Nl(t,r,n,e){const i=ln(t,r,n);return ln(t,r+1,e)||i}function O_(t,r,n,e,i){const s=Nl(t,r,n,e);return ln(t,r+2,i)||s}function is(t,r,n,e,i,s){const o=Nl(t,r,n,e);return Nl(t,r+2,i,s)||o}function y(t,r,n,e,i,s,o,a){const l=le(),c=Mt(),d=t+lt,g=c.firstCreatePass?function PU(t,r,n,e,i,s,o,a,l){const c=r.consts,d=Sd(r,t,4,o||null,Ys(c,a));EC(r,n,d,Ys(c,l)),Km(r,d);const g=d.tView=TC(2,d,e,i,s,r.directiveRegistry,r.pipeRegistry,null,r.schemas,c,null);return null!==r.queries&&(r.queries.template(r,d),g.queries=r.queries.embeddedTView(d)),d}(d,c,l,r,n,e,i,s,o):c.data[d];Qs(g,!1);const _=lR(c,l,g,t);bm()&&p_(c,l,_,g),rr(_,l);const x=BA(_,l,_,g);return l[d]=x,v_(l,x),function Vk(t,r,n){return ZC(t,r,n)}(x,g,l),wm(g)&&DC(c,l,g),null!=o&&SC(l,g,a),y}let lR=function cR(t,r,n,e){return _a(!0),r[st].createComment("")};function U(t,r,n,e){const i=le();return ln(i,Ts(),r)&&(Mt(),to(Ti(),i,t,r,n,e)),U}function Vd(t,r,n,e){return ln(t,Ts(),n)?r+ct(n)+e:ut}function Ld(t,r,n,e,i,s){const a=Nl(t,function ko(){return Xe.lFrame.bindingIndex}(),n,i);return Ro(2),a?r+ct(n)+e+ct(i)+s:ut}function B_(t,r){return t<<17|r<<2}function Sa(t){return t>>17&32767}function mI(t){return 2|t}function Ll(t){return(131068&t)>>2}function _I(t,r){return-131069&t|r<<2}function vI(t){return 1|t}function HR(t,r,n,e){const i=t[n+1],s=null===r;let o=e?Sa(i):Ll(i),a=!1;for(;0!==o&&(!1===a||s);){const c=t[o+1];_j(t[o],r)&&(a=!0,t[o+1]=e?vI(c):mI(c)),o=e?Sa(c):Ll(c)}a&&(t[n+1]=e?mI(i):vI(i))}function _j(t,r){return null===t||null==r||(Array.isArray(t)?t[1]:t)===r||!(!Array.isArray(t)||"string"!=typeof r)&&od(t,r)>=0}const In={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function BR(t){return t.substring(In.key,In.keyEnd)}function zR(t,r){const n=In.textEnd;return n===r?-1:(r=In.keyEnd=function wj(t,r,n){for(;r32;)r++;return r}(t,In.key=r,n),Wd(t,r,n))}function Wd(t,r,n){for(;r=0;n=zR(r,n))Br(t,BR(r),!0)}function Es(t,r,n,e){const i=le(),s=Mt(),o=Ro(2);s.firstUpdatePass&&KR(s,t,o,e),r!==ut&&ln(i,o,r)&&YR(s,s.data[ir()],i,i[st],t,i[o+1]=function Rj(t,r){return null==t||""===t||("string"==typeof r?t+=r:"object"==typeof t&&(t=xn(zr(t)))),t}(r,n),e,o)}function Ms(t,r,n,e){const i=Mt(),s=Ro(2);i.firstUpdatePass&&KR(i,null,s,e);const o=le();if(n!==ut&&ln(o,s,n)){const a=i.data[ir()];if(XR(a,e)&&!qR(i,s)){let l=e?a.classesWithoutHost:a.stylesWithoutHost;null!==l&&(n=Uw(l,n||"")),xI(i,a,o,n,e)}else!function kj(t,r,n,e,i,s,o,a){i===ut&&(i=Wt);let l=0,c=0,d=0=t.expandoStartIndex}function KR(t,r,n,e){const i=t.data;if(null===i[n+1]){const s=i[ir()],o=qR(t,n);XR(s,e)&&null===r&&!o&&(r=!1),r=function Dj(t,r,n,e){const i=function l0(t){const r=Xe.lFrame.currentDirectiveIndex;return-1===r?null:t[r]}(t);let s=e?r.residualClasses:r.residualStyles;if(null===i)0===(e?r.classBindings:r.styleBindings)&&(n=kg(n=yI(null,t,r,n,e),r.attrs,e),s=null);else{const o=r.directiveStylingLast;if(-1===o||t[o]!==i)if(n=yI(i,t,r,n,e),null===s){let l=function Sj(t,r,n){const e=n?r.classBindings:r.styleBindings;if(0!==Ll(e))return t[Sa(e)]}(t,r,e);void 0!==l&&Array.isArray(l)&&(l=yI(null,t,r,l[1],e),l=kg(l,r.attrs,e),function Tj(t,r,n,e){t[Sa(n?r.classBindings:r.styleBindings)]=e}(t,r,e,l))}else s=function Ej(t,r,n){let e;const i=r.directiveEnd;for(let s=1+r.directiveStylingLast;s0)&&(c=!0)):d=n,i)if(0!==l){const _=Sa(t[a+1]);t[e+1]=B_(_,a),0!==_&&(t[_+1]=_I(t[_+1],e)),t[a+1]=function gj(t,r){return 131071&t|r<<17}(t[a+1],e)}else t[e+1]=B_(a,0),0!==a&&(t[a+1]=_I(t[a+1],e)),a=e;else t[e+1]=B_(l,0),0===a?a=e:t[l+1]=_I(t[l+1],e),l=e;c&&(t[e+1]=mI(t[e+1])),HR(t,d,e,!0),HR(t,d,e,!1),function mj(t,r,n,e,i){const s=i?t.residualClasses:t.residualStyles;null!=s&&"string"==typeof r&&od(s,r)>=0&&(n[e+1]=vI(n[e+1]))}(r,d,t,e,s),o=B_(a,l),s?r.classBindings=o:r.styleBindings=o}(i,s,r,n,o,e)}}function yI(t,r,n,e,i){let s=null;const o=n.directiveEnd;let a=n.directiveStylingLast;for(-1===a?a=n.directiveStart:a++;a0;){const l=t[i],c=Array.isArray(l),d=c?l[1]:l,g=null===d;let _=n[i+1];_===ut&&(_=g?Wt:void 0);let x=g?g0(_,e):d===e?_:void 0;if(c&&!z_(x)&&(x=g0(l,e)),z_(x)&&(a=x,o))return a;const w=t[i+1];i=o?Sa(w):Ll(w)}if(null!==r){let l=s?r.residualClasses:r.residualStyles;null!=l&&(a=g0(l,e))}return a}function z_(t){return void 0!==t}function XR(t,r){return 0!=(t.flags&(r?8:16))}function Gl(t,r,n){Ms(Br,ro,Vd(le(),t,r,n),!0)}function f(t,r,n,e){const i=le(),s=Mt(),o=lt+t,a=i[st],l=s.firstCreatePass?function eW(t,r,n,e,i,s){const o=r.consts,l=Sd(r,t,2,e,Ys(o,i));return EC(r,n,l,Ys(o,s)),null!==l.attrs&&k_(l,l.attrs,!1),null!==l.mergedAttrs&&k_(l,l.mergedAttrs,!0),null!==r.queries&&r.queries.elementStart(r,l),l}(o,s,i,r,n,e):s.data[o],c=i3(s,i,l,a,r,t);i[o]=c;const d=wm(l);return Qs(l,!0),AA(a,c,l),32!=(32&l.flags)&&bm()&&p_(s,i,c,l),0===function oH(){return Xe.lFrame.elementDepthCount}()&&rr(c,i),function aH(){Xe.lFrame.elementDepthCount++}(),d&&(DC(s,i,l),bC(s,l,i)),null!==e&&SC(i,l),f}function m(){let t=li();s0()?o0():(t=t.parent,Qs(t,!1));const r=t;(function cH(t){return Xe.skipHydrationRootTNode===t})(r)&&function gH(){Xe.skipHydrationRootTNode=null}(),function lH(){Xe.lFrame.elementDepthCount--}();const n=Mt();return n.firstCreatePass&&(Km(n,t),Zw(t)&&n.queries.elementEnd(t)),null!=r.classesWithoutHost&&function TB(t){return 0!=(8&t.flags)}(r)&&xI(n,r,le(),r.classesWithoutHost,!0),null!=r.stylesWithoutHost&&function EB(t){return 0!=(16&t.flags)}(r)&&xI(n,r,le(),r.stylesWithoutHost,!1),m}function V(t,r,n,e){return f(t,r,n,e),m(),V}let i3=(t,r,n,e,i,s)=>(_a(!0),u_(e,i,function LE(){return Xe.lFrame.currentNamespace}()));function j(t,r,n){const e=le(),i=Mt(),s=t+lt,o=i.firstCreatePass?function nW(t,r,n,e,i){const s=r.consts,o=Ys(s,e),a=Sd(r,t,8,"ng-container",o);return null!==o&&k_(a,o,!0),EC(r,n,a,Ys(s,i)),null!==r.queries&&r.queries.elementStart(r,a),a}(s,i,e,r,n):i.data[s];Qs(o,!0);const a=n3(i,e,o,t);return e[s]=a,bm()&&p_(i,e,a,o),rr(a,e),wm(o)&&(DC(i,e,o),bC(i,o,e)),null!=n&&SC(e,o),j}function W(){let t=li();const r=Mt();return s0()?o0():(t=t.parent,Qs(t,!1)),r.firstCreatePass&&(Km(r,t),Zw(t)&&r.queries.elementEnd(t)),W}function G(t,r,n){return j(t,r,n),W(),G}let n3=(t,r,n,e)=>(_a(!0),_C(r[st],""));function z(){return le()}function U_(t,r,n){const e=le();return ln(e,Ts(),r)&&Tr(Mt(),Ti(),e,t,r,e[st],n,!0),U_}const Hl=void 0;var aW=["en",[["a","p"],["AM","PM"],Hl],[["AM","PM"],Hl,Hl],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],Hl,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],Hl,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",Hl,"{1} 'at' {0}",Hl],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",function oW(t){const n=Math.floor(Math.abs(t)),e=t.toString().replace(/^[^.]*\.?/,"").length;return 1===n&&0===e?1:5}];let $d={};function On(t){const r=function cW(t){return t.toLowerCase().replace(/_/g,"-")}(t);let n=o3(r);if(n)return n;const e=r.split("-")[0];if(n=o3(e),n)return n;if("en"===e)return aW;throw new se(701,!1)}function o3(t){return t in $d||($d[t]=ii.ng&&ii.ng.common&&ii.ng.common.locales&&ii.ng.common.locales[t]),$d[t]}var pi=function(t){return t[t.LocaleId=0]="LocaleId",t[t.DayPeriodsFormat=1]="DayPeriodsFormat",t[t.DayPeriodsStandalone=2]="DayPeriodsStandalone",t[t.DaysFormat=3]="DaysFormat",t[t.DaysStandalone=4]="DaysStandalone",t[t.MonthsFormat=5]="MonthsFormat",t[t.MonthsStandalone=6]="MonthsStandalone",t[t.Eras=7]="Eras",t[t.FirstDayOfWeek=8]="FirstDayOfWeek",t[t.WeekendRange=9]="WeekendRange",t[t.DateFormat=10]="DateFormat",t[t.TimeFormat=11]="TimeFormat",t[t.DateTimeFormat=12]="DateTimeFormat",t[t.NumberSymbols=13]="NumberSymbols",t[t.NumberFormats=14]="NumberFormats",t[t.CurrencyCode=15]="CurrencyCode",t[t.CurrencySymbol=16]="CurrencySymbol",t[t.CurrencyName=17]="CurrencyName",t[t.Currencies=18]="Currencies",t[t.Directionality=19]="Directionality",t[t.PluralCase=20]="PluralCase",t[t.ExtraData=21]="ExtraData",t}(pi||{});const qd="en-US";let a3=qd;function T(t,r,n,e){const i=le(),s=Mt(),o=li();return TI(s,i,i[st],o,t,r,e),T}function TI(t,r,n,e,i,s,o){const a=wm(e),c=t.firstCreatePass&&jA(t),d=r[Si],g=UA(r);let _=!0;if(3&e.type||o){const E=pr(e,r),M=o?o(E):E,k=g.length,N=o?$=>o(gi($[e.index])):e.index;let q=null;if(!o&&a&&(q=function n$(t,r,n,e){const i=t.cleanup;if(null!=i)for(let s=0;sl?a[l]:null}"string"==typeof o&&(s+=2)}return null}(t,r,i,e.index)),null!==q)(q.__ngLastListenerFn__||q).__ngNextListenerFn__=s,q.__ngLastListenerFn__=s,_=!1;else{s=F3(e,r,d,s,!1);const $=n.listen(M,i,s);g.push(s,$),c&&c.push(i,N,k,k+1)}}else s=F3(e,r,d,s,!1);const x=e.outputs;let w;if(_&&null!==x&&(w=x[i])){const E=w.length;if(E)for(let M=0;M-1?Hr(t.index,r):r);let l=P3(r,n,e,o),c=s.__ngNextListenerFn__;for(;c;)l=P3(r,n,c,o)&&l,c=c.__ngNextListenerFn__;return i&&!1===l&&o.preventDefault(),l}}function p(t=1){return function xH(t){return(Xe.lFrame.contextLView=function SE(t,r){for(;t>0;)r=r[Jc],t--;return r}(t,Xe.lFrame.contextLView))[Si]}(t)}function r$(t,r){let n=null;const e=function BG(t){const r=t.attrs;if(null!=r){const n=r.indexOf(5);if(!(1&n))return r[n+1]}return null}(t);for(let i=0;i(_a(!0),function d_(t,r){return t.createText(r)}(r[st],e));function Y(t){return Q("",t,""),Y}function Q(t,r,n){const e=le(),i=Vd(e,t,r,n);return i!==ut&&Lo(e,ir(),i),Q}function Bl(t,r,n,e,i){const s=le(),o=Ld(s,t,r,n,e,i);return o!==ut&&Lo(s,ir(),o),Bl}function Je(t,r,n){uk(r)&&(r=r());const e=le();return ln(e,Ts(),r)&&Tr(Mt(),Ti(),e,t,r,e[st],n,!1),Je}function tt(t,r){const n=uk(t);return n&&t.set(r),n}function it(t,r){const n=le(),e=Mt(),i=li();return TI(e,n,n[st],i,t,r),it}function AI(t,r,n,e,i){if(t=Ye(t),Array.isArray(t))for(let s=0;s>20;if(Ml(t)||!t.multi){const x=new ng(c,i,v),w=RI(l,r,i?d:d+_,g);-1===w?(J0(Xm(a,o),s,l),kI(s,t,r.length),r.push(l),a.directiveStart++,a.directiveEnd++,i&&(a.providerIndexes+=1048576),n.push(x),o.push(x)):(n[w]=x,o[w]=x)}else{const x=RI(l,r,d+_,g),w=RI(l,r,d,d+_),M=w>=0&&n[w];if(i&&!M||!i&&!(x>=0&&n[x])){J0(Xm(a,o),s,l);const k=function I$(t,r,n,e,i){const s=new ng(t,n,v);return s.multi=[],s.index=r,s.componentProviders=0,sP(s,i,e&&!n),s}(i?C$:w$,n.length,i,e,c);!i&&M&&(n[w].providerFactory=k),kI(s,t,r.length,0),r.push(l),a.directiveStart++,a.directiveEnd++,i&&(a.providerIndexes+=1048576),n.push(k),o.push(k)}else kI(s,t,x>-1?x:w,sP(n[i?w:x],c,!i&&e));!i&&e&&M&&n[w].componentProviders++}}}function kI(t,r,n,e){const i=Ml(r),s=function nB(t){return!!t.useClass}(r);if(i||s){const l=(s?Ye(r.useClass):r).prototype.ngOnDestroy;if(l){const c=t.destroyHooks||(t.destroyHooks=[]);if(!i&&r.multi){const d=c.indexOf(n);-1===d?c.push(n,[e,l]):c[d+1].push(e,l)}else c.push(n,l)}}}function sP(t,r,n){return n&&t.componentProviders++,t.multi.push(r)-1}function RI(t,r,n,e){for(let i=n;i{n.providersResolver=(e,i)=>function y$(t,r,n){const e=Mt();if(e.firstCreatePass){const i=Ss(t);AI(n,e.data,e.blueprint,i,!0),AI(r,e.data,e.blueprint,i,!1)}}(e,i?i(t):t,r)}}let b$=(()=>{var t;class r{constructor(e){this._injector=e,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(e){if(!e.standalone)return null;if(!this.cachedInjectors.has(e)){const i=dM(0,e.type),s=i.length>0?oI([i],this._injector,`Standalone[${e.type.name}]`):null;this.cachedInjectors.set(e,s)}return this.cachedInjectors.get(e)}ngOnDestroy(){try{for(const e of this.cachedInjectors.values())null!==e&&e.destroy()}finally{this.cachedInjectors.clear()}}}return(t=r).\u0275prov=ue({token:t,providedIn:"environment",factory:()=>new t(ve(un))}),r})();function re(t){Ca("NgStandalone"),t.getStandaloneInjector=r=>r.get(b$).getOrCreateStandaloneInjector(t)}function An(t,r,n){const e=fr()+t,i=le();return i[e]===ut?io(i,e,n?r.call(n):r()):Tg(i,e)}function Ue(t,r,n,e){return pP(le(),fr(),t,r,n,e)}function Wi(t,r,n,e,i){return fP(le(),fr(),t,r,n,e,i)}function Vg(t,r,n,e,i,s){return mP(le(),fr(),t,r,n,e,i,s)}function so(t,r,n,e,i,s,o){return _P(le(),fr(),t,r,n,e,i,s,o)}function Dt(t,r,n,e,i,s,o,a){const l=fr()+t,c=le(),d=is(c,l,n,e,i,s);return ln(c,l+4,o)||d?io(c,l+5,a?r.call(a,n,e,i,s,o):r(n,e,i,s,o)):Tg(c,l+5)}function Rt(t,r,n,e,i,s,o,a,l){const c=fr()+t,d=le(),g=is(d,c,n,e,i,s);return Nl(d,c+4,o,a)||g?io(d,c+6,l?r.call(l,n,e,i,s,o,a):r(n,e,i,s,o,a)):Tg(d,c+6)}function Nn(t,r,n,e,i,s,o,a,l,c){const d=fr()+t,g=le();let _=is(g,d,n,e,i,s);return O_(g,d+4,o,a,l)||_?io(g,d+7,c?r.call(c,n,e,i,s,o,a,l):r(n,e,i,s,o,a,l)):Tg(g,d+7)}function OI(t,r,n,e,i,s,o,a,l,c,d){const g=fr()+t,_=le(),x=is(_,g,n,e,i,s);return is(_,g+4,o,a,l,c)||x?io(_,g+8,d?r.call(d,n,e,i,s,o,a,l,c):r(n,e,i,s,o,a,l,c)):Tg(_,g+8)}function Ta(t,r,n,e){return vP(le(),fr(),t,r,n,e)}function Lg(t,r){const n=t[r];return n===ut?void 0:n}function pP(t,r,n,e,i,s){const o=r+n;return ln(t,o,i)?io(t,o+1,s?e.call(s,i):e(i)):Lg(t,o+1)}function fP(t,r,n,e,i,s,o){const a=r+n;return Nl(t,a,i,s)?io(t,a+2,o?e.call(o,i,s):e(i,s)):Lg(t,a+2)}function mP(t,r,n,e,i,s,o,a){const l=r+n;return O_(t,l,i,s,o)?io(t,l+3,a?e.call(a,i,s,o):e(i,s,o)):Lg(t,l+3)}function _P(t,r,n,e,i,s,o,a,l){const c=r+n;return is(t,c,i,s,o,a)?io(t,c+4,l?e.call(l,i,s,o,a):e(i,s,o,a)):Lg(t,c+4)}function vP(t,r,n,e,i,s){let o=r+n,a=!1;for(let l=0;l=0;n--){const e=r[n];if(t===e.name)return e}}(r,n.pipeRegistry),n.data[i]=e,e.onDestroy&&(n.destroyHooks??=[]).push(i,e.onDestroy)):e=n.data[i];const s=e.factory||(e.factory=Tl(e.type)),a=Dr(v);try{const l=Qm(!1),c=s();return Qm(l),function l$(t,r,n,e){n>=t.data.length&&(t.data[n]=null,t.blueprint[n]=null),r[n]=e}(n,le(),i,c),c}finally{Dr(a)}}function ht(t,r,n){const e=t+lt,i=le(),s=id(i,e);return Gg(i,e)?pP(i,fr(),r,s.transform,n,s):s.transform(n)}function Gt(t,r,n,e){const i=t+lt,s=le(),o=id(s,i);return Gg(s,i)?fP(s,fr(),r,o.transform,n,e,o):o.transform(n,e)}function he(t,r,n,e,i){const s=t+lt,o=le(),a=id(o,s);return Gg(o,s)?mP(o,fr(),r,a.transform,n,e,i,a):a.transform(n,e,i)}function xt(t,r,n,e,i,s){const o=t+lt,a=le(),l=id(a,o);return Gg(a,o)?_P(a,fr(),r,l.transform,n,e,i,s,l):l.transform(n,e,i,s)}function me(t,r,n){const e=t+lt,i=le(),s=id(i,e);return Gg(i,e)?vP(i,fr(),r,s.transform,n,s):s.transform.apply(s,n)}function Gg(t,r){return t[we].data[r].pure}function L(t,r){return w_(t,r)}let Y_=(()=>{var t;class r{log(e){console.log(e)}warn(e){console.warn(e)}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"platform"}),r})();const LP=new Ce(""),X_=new Ce("");let UI,BI=(()=>{var t;class r{constructor(e,i,s){this._ngZone=e,this.registry=i,this._pendingCount=0,this._isZoneStable=!0,this._callbacks=[],this.taskTrackingZone=null,UI||(function Tq(t){UI=t}(s),s.addToWindow(i)),this._watchAngularEvents(),e.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{Oe.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;0!==this._callbacks.length;){let e=this._callbacks.pop();clearTimeout(e.timeoutId),e.doneCb()}});else{let e=this.getPendingTasks();this._callbacks=this._callbacks.filter(i=>!i.updateCb||!i.updateCb(e)||(clearTimeout(i.timeoutId),!1))}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(e=>({source:e.source,creationLocation:e.creationLocation,data:e.data})):[]}addCallback(e,i,s){let o=-1;i&&i>0&&(o=setTimeout(()=>{this._callbacks=this._callbacks.filter(a=>a.timeoutId!==o),e()},i)),this._callbacks.push({doneCb:e,timeoutId:o,updateCb:s})}whenStable(e,i,s){if(s&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(e,i,s),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(e){this.registry.registerApplication(e,this)}unregisterApplication(e){this.registry.unregisterApplication(e)}findProviders(e,i,s){return[]}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(Oe),ve(zI),ve(X_))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})(),zI=(()=>{var t;class r{constructor(){this._applications=new Map}registerApplication(e,i){this._applications.set(e,i)}unregisterApplication(e){this._applications.delete(e)}unregisterAllApplications(){this._applications.clear()}getTestability(e){return this._applications.get(e)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(e,i=!0){return UI?.findTestabilityInTree(this,e,i)??null}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"platform"}),r})();function Ug(t){return!!t&&"function"==typeof t.then}function GP(t){return!!t&&"function"==typeof t.subscribe}const jI=new Ce("");let WI=(()=>{var t;class r{constructor(){this.initialized=!1,this.done=!1,this.donePromise=new Promise((e,i)=>{this.resolve=e,this.reject=i}),this.appInits=fe(jI,{optional:!0})??[]}runInitializers(){if(this.initialized)return;const e=[];for(const s of this.appInits){const o=s();if(Ug(o))e.push(o);else if(GP(o)){const a=new Promise((l,c)=>{o.subscribe({complete:l,error:c})});e.push(a)}}const i=()=>{this.done=!0,this.resolve()};Promise.all(e).then(()=>{i()}).catch(s=>{this.reject(s)}),0===e.length&&i(),this.initialized=!0}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();const $I=new Ce("");let Ea=(()=>{var t;class r{constructor(){this._bootstrapListeners=[],this._runningTick=!1,this._destroyed=!1,this._destroyListeners=[],this._views=[],this.internalErrorHandler=fe(HM),this.afterRenderEffectManager=fe(Cg),this.componentTypes=[],this.components=[],this.isStable=fe(Ol).hasPendingTasks.pipe(It(e=>!e)),this._injector=fe(un)}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(e,i){const s=e instanceof lk;if(!this._injector.get(WI).done)throw!s&&function fa(t){const r=vt(t)||yn(t)||Fn(t);return null!==r&&r.standalone}(e),new se(405,!1);let a;a=s?e:this._injector.get(wg).resolveComponentFactory(e),this.componentTypes.push(a.componentType);const l=function Eq(t){return t.isBoundToModule}(a)?void 0:this._injector.get(Fl),d=a.create(ci.NULL,[],i||a.selector,l),g=d.location.nativeElement,_=d.injector.get(LP,null);return _?.registerApplication(g),d.onDestroy(()=>{this.detachView(d.hostView),J_(this.components,d),_?.unregisterApplication(g)}),this._loadComponent(d),d}tick(){if(this._runningTick)throw new se(101,!1);try{this._runningTick=!0,this.detectChangesInAttachedViews()}catch(e){this.internalErrorHandler(e)}finally{this._runningTick=!1}}detectChangesInAttachedViews(){let e=0;do{if(100===e)throw new se(103,!1);const i=0===e;for(let{_lView:s,notifyErrorHandler:o}of this._views)!i&&!UP(s)||this.detectChangesInView(s,o,i);this.afterRenderEffectManager.execute(),e++}while(this._views.some(({_lView:i})=>UP(i)))}detectChangesInView(e,i,s){let o;s?(o=0,e[Le]|=1024):o=64&e[Le]?0:1,y_(e,i,o)}attachView(e){const i=e;this._views.push(i),i.attachToAppRef(this)}detachView(e){const i=e;J_(this._views,i),i.detachFromAppRef()}_loadComponent(e){this.attachView(e.hostView),this.tick(),this.components.push(e);const i=this._injector.get($I,[]);[...this._bootstrapListeners,...i].forEach(s=>s(e))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(e=>e()),this._views.slice().forEach(e=>e.destroy())}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(e){return this._destroyListeners.push(e),()=>J_(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new se(406,!1);const e=this._injector;e.destroy&&!e.destroyed&&e.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();function J_(t,r){const n=t.indexOf(r);n>-1&&t.splice(n,1)}function UP(t){return t0(t)}class Aq{constructor(r,n){this.ngModuleFactory=r,this.componentFactories=n}}let jP=(()=>{var t;class r{compileModuleSync(e){return new sI(e)}compileModuleAsync(e){return Promise.resolve(this.compileModuleSync(e))}compileModuleAndAllComponentsSync(e){const i=this.compileModuleSync(e),o=jr(Qn(e).declarations).reduce((a,l)=>{const c=vt(l);return c&&a.push(new Dg(c)),a},[]);return new Aq(i,o)}compileModuleAndAllComponentsAsync(e){return Promise.resolve(this.compileModuleAndAllComponentsSync(e))}clearCache(){}clearCacheFor(e){}getModuleId(e){}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})(),Pq=(()=>{var t;class r{constructor(){this.zone=fe(Oe),this.applicationRef=fe(Ea)}initialize(){this._onMicrotaskEmptySubscription||(this._onMicrotaskEmptySubscription=this.zone.onMicrotaskEmpty.subscribe({next:()=>{this.zone.run(()=>{this.applicationRef.tick()})}}))}ngOnDestroy(){this._onMicrotaskEmptySubscription?.unsubscribe()}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();function $P(t){return[{provide:Oe,useFactory:t},{provide:El,multi:!0,useFactory:()=>{const r=fe(Pq,{optional:!0});return()=>r.initialize()}},{provide:El,multi:!0,useFactory:()=>{const r=fe(Nq);return()=>{r.initialize()}}},{provide:HM,useFactory:Fq}]}function Fq(){const t=fe(Oe),r=fe(Oo);return n=>t.runOutsideAngular(()=>r.handleError(n))}function Oq(t){return Um([[],$P(()=>new Oe(function qP(t){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:t?.eventCoalescing??!1,shouldCoalesceRunChangeDetection:t?.runCoalescing??!1}}(t)))])}let Nq=(()=>{var t;class r{constructor(){this.subscription=new yi,this.initialized=!1,this.zone=fe(Oe),this.pendingTasks=fe(Ol)}initialize(){if(this.initialized)return;this.initialized=!0;let e=null;!this.zone.isStable&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(e=this.pendingTasks.add()),this.zone.runOutsideAngular(()=>{this.subscription.add(this.zone.onStable.subscribe(()=>{Oe.assertNotInAngularZone(),queueMicrotask(()=>{null!==e&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(this.pendingTasks.remove(e),e=null)})}))}),this.subscription.add(this.zone.onUnstable.subscribe(()=>{Oe.assertInAngularZone(),e??=this.pendingTasks.add()}))}ngOnDestroy(){this.subscription.unsubscribe()}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();const Ji=new Ce("",{providedIn:"root",factory:()=>fe(Ji,Et.Optional|Et.SkipSelf)||function Vq(){return typeof $localize<"u"&&$localize.locale||qd}()}),Lq=new Ce("",{providedIn:"root",factory:()=>"USD"}),qI=new Ce("");let Ma=null;let qq=(()=>{var t;class r{constructor(e){}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(Ea))},t.\u0275mod=Lt({type:t}),t.\u0275inj=Ot({}),r})();function lK(t){try{const{rootComponent:r,appProviders:n,platformProviders:e}=t,i=function zq(t=[]){if(Ma)return Ma;const r=function YP(t=[],r){return ci.create({name:r,providers:[{provide:B0,useValue:"platform"},{provide:qI,useValue:new Set([()=>Ma=null])},...t]})}(t);return Ma=r,function HP(){!function IG(t){j2=t}(()=>{throw new se(600,!1)})}(),function QP(t){t.get(KE,null)?.forEach(n=>n())}(r),r}(e),s=[Oq(),...n||[]],a=new aR({providers:s,parent:i,debugName:"",runEnvironmentInitializers:!1}).injector,l=a.get(Oe);return l.run(()=>{a.resolveInjectorInitializers();const c=a.get(Oo,null);let d;l.runOutsideAngular(()=>{d=l.onError.subscribe({next:x=>{c.handleError(x)}})});const g=()=>a.destroy(),_=i.get(qI);return _.add(g),a.onDestroy(()=>{d.unsubscribe(),_.delete(g)}),function BP(t,r,n){try{const e=n();return Ug(e)?e.catch(i=>{throw r.runOutsideAngular(()=>t.handleError(i)),i}):e}catch(e){throw r.runOutsideAngular(()=>t.handleError(e)),e}}(c,l,()=>{const x=a.get(WI);return x.runInitializers(),x.donePromise.then(()=>{!function l3(t){"string"==typeof t&&(a3=t.toLowerCase().replace(/_/g,"-"))}(a.get(Ji,qd)||qd);const E=a.get(Ea);return void 0!==r&&E.bootstrap(r),E})})})}catch(r){return Promise.reject(r)}}function B(t){return"boolean"==typeof t?t:null!=t&&"false"!==t}let CF=null;function Go(){return CF}class bK{}const St=new Ce("");let t1=(()=>{var t;class r{historyGo(e){throw new Error("")}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:()=>fe(SK),providedIn:"platform"}),r})();const DK=new Ce("");let SK=(()=>{var t;class r extends t1{constructor(){super(),this._doc=fe(St),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return Go().getBaseHref(this._doc)}onPopState(e){const i=Go().getGlobalEventTarget(this._doc,"window");return i.addEventListener("popstate",e,!1),()=>i.removeEventListener("popstate",e)}onHashChange(e){const i=Go().getGlobalEventTarget(this._doc,"window");return i.addEventListener("hashchange",e,!1),()=>i.removeEventListener("hashchange",e)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(e){this._location.pathname=e}pushState(e,i,s){this._history.pushState(e,i,s)}replaceState(e,i,s){this._history.replaceState(e,i,s)}forward(){this._history.forward()}back(){this._history.back()}historyGo(e=0){this._history.go(e)}getState(){return this._history.state}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:()=>new t,providedIn:"platform"}),r})();function i1(t,r){if(0==t.length)return r;if(0==r.length)return t;let n=0;return t.endsWith("/")&&n++,r.startsWith("/")&&n++,2==n?t+r.substring(1):1==n?t+r:t+"/"+r}function IF(t){const r=t.match(/#|\?|$/),n=r&&r.index||t.length;return t.slice(0,n-("/"===t[n-1]?1:0))+t.slice(n)}function Ho(t){return t&&"?"!==t[0]?"?"+t:t}let Ul=(()=>{var t;class r{historyGo(e){throw new Error("")}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:()=>fe(DF),providedIn:"root"}),r})();const bF=new Ce("");let DF=(()=>{var t;class r extends Ul{constructor(e,i){super(),this._platformLocation=e,this._removeListenerFns=[],this._baseHref=i??this._platformLocation.getBaseHrefFromDOM()??fe(St).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(e){this._removeListenerFns.push(this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e))}getBaseHref(){return this._baseHref}prepareExternalUrl(e){return i1(this._baseHref,e)}path(e=!1){const i=this._platformLocation.pathname+Ho(this._platformLocation.search),s=this._platformLocation.hash;return s&&e?`${i}${s}`:i}pushState(e,i,s,o){const a=this.prepareExternalUrl(s+Ho(o));this._platformLocation.pushState(e,i,a)}replaceState(e,i,s,o){const a=this.prepareExternalUrl(s+Ho(o));this._platformLocation.replaceState(e,i,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(e=0){this._platformLocation.historyGo?.(e)}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(t1),ve(bF,8))},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})(),TK=(()=>{var t;class r extends Ul{constructor(e,i){super(),this._platformLocation=e,this._baseHref="",this._removeListenerFns=[],null!=i&&(this._baseHref=i)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(e){this._removeListenerFns.push(this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e))}getBaseHref(){return this._baseHref}path(e=!1){const i=this._platformLocation.hash??"#";return i.length>0?i.substring(1):i}prepareExternalUrl(e){const i=i1(this._baseHref,e);return i.length>0?"#"+i:i}pushState(e,i,s,o){let a=this.prepareExternalUrl(s+Ho(o));0==a.length&&(a=this._platformLocation.pathname),this._platformLocation.pushState(e,i,a)}replaceState(e,i,s,o){let a=this.prepareExternalUrl(s+Ho(o));0==a.length&&(a=this._platformLocation.pathname),this._platformLocation.replaceState(e,i,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(e=0){this._platformLocation.historyGo?.(e)}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(t1),ve(bF,8))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})(),qg=(()=>{var t;class r{constructor(e){this._subject=new A,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=e;const i=this._locationStrategy.getBaseHref();this._basePath=function AK(t){if(new RegExp("^(https?:)?//").test(t)){const[,n]=t.split(/\/\/[^\/]+/);return n}return t}(IF(SF(i))),this._locationStrategy.onPopState(s=>{this._subject.emit({url:this.path(!0),pop:!0,state:s.state,type:s.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(e=!1){return this.normalize(this._locationStrategy.path(e))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(e,i=""){return this.path()==this.normalize(e+Ho(i))}normalize(e){return r.stripTrailingSlash(function MK(t,r){if(!t||!r.startsWith(t))return r;const n=r.substring(t.length);return""===n||["/",";","?","#"].includes(n[0])?n:r}(this._basePath,SF(e)))}prepareExternalUrl(e){return e&&"/"!==e[0]&&(e="/"+e),this._locationStrategy.prepareExternalUrl(e)}go(e,i="",s=null){this._locationStrategy.pushState(s,"",e,i),this._notifyUrlChangeListeners(this.prepareExternalUrl(e+Ho(i)),s)}replaceState(e,i="",s=null){this._locationStrategy.replaceState(s,"",e,i),this._notifyUrlChangeListeners(this.prepareExternalUrl(e+Ho(i)),s)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(e=0){this._locationStrategy.historyGo?.(e)}onUrlChange(e){return this._urlChangeListeners.push(e),this._urlChangeSubscription??=this.subscribe(i=>{this._notifyUrlChangeListeners(i.url,i.state)}),()=>{const i=this._urlChangeListeners.indexOf(e);this._urlChangeListeners.splice(i,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(e="",i){this._urlChangeListeners.forEach(s=>s(e,i))}subscribe(e,i,s){return this._subject.subscribe({next:e,error:i,complete:s})}}return(t=r).normalizeQueryParams=Ho,t.joinWithSlash=i1,t.stripTrailingSlash=IF,t.\u0275fac=function(e){return new(e||t)(ve(Ul))},t.\u0275prov=ue({token:t,factory:()=>function EK(){return new qg(ve(Ul))}(),providedIn:"root"}),r})();function SF(t){return t.replace(/\/index.html$/,"")}const TF={ADP:[void 0,void 0,0],AFN:[void 0,"\u060b",0],ALL:[void 0,void 0,0],AMD:[void 0,"\u058f",2],AOA:[void 0,"Kz"],ARS:[void 0,"$"],AUD:["A$","$"],AZN:[void 0,"\u20bc"],BAM:[void 0,"KM"],BBD:[void 0,"$"],BDT:[void 0,"\u09f3"],BHD:[void 0,void 0,3],BIF:[void 0,void 0,0],BMD:[void 0,"$"],BND:[void 0,"$"],BOB:[void 0,"Bs"],BRL:["R$"],BSD:[void 0,"$"],BWP:[void 0,"P"],BYN:[void 0,void 0,2],BYR:[void 0,void 0,0],BZD:[void 0,"$"],CAD:["CA$","$",2],CHF:[void 0,void 0,2],CLF:[void 0,void 0,4],CLP:[void 0,"$",0],CNY:["CN\xa5","\xa5"],COP:[void 0,"$",2],CRC:[void 0,"\u20a1",2],CUC:[void 0,"$"],CUP:[void 0,"$"],CZK:[void 0,"K\u010d",2],DJF:[void 0,void 0,0],DKK:[void 0,"kr",2],DOP:[void 0,"$"],EGP:[void 0,"E\xa3"],ESP:[void 0,"\u20a7",0],EUR:["\u20ac"],FJD:[void 0,"$"],FKP:[void 0,"\xa3"],GBP:["\xa3"],GEL:[void 0,"\u20be"],GHS:[void 0,"GH\u20b5"],GIP:[void 0,"\xa3"],GNF:[void 0,"FG",0],GTQ:[void 0,"Q"],GYD:[void 0,"$",2],HKD:["HK$","$"],HNL:[void 0,"L"],HRK:[void 0,"kn"],HUF:[void 0,"Ft",2],IDR:[void 0,"Rp",2],ILS:["\u20aa"],INR:["\u20b9"],IQD:[void 0,void 0,0],IRR:[void 0,void 0,0],ISK:[void 0,"kr",0],ITL:[void 0,void 0,0],JMD:[void 0,"$"],JOD:[void 0,void 0,3],JPY:["\xa5",void 0,0],KHR:[void 0,"\u17db"],KMF:[void 0,"CF",0],KPW:[void 0,"\u20a9",0],KRW:["\u20a9",void 0,0],KWD:[void 0,void 0,3],KYD:[void 0,"$"],KZT:[void 0,"\u20b8"],LAK:[void 0,"\u20ad",0],LBP:[void 0,"L\xa3",0],LKR:[void 0,"Rs"],LRD:[void 0,"$"],LTL:[void 0,"Lt"],LUF:[void 0,void 0,0],LVL:[void 0,"Ls"],LYD:[void 0,void 0,3],MGA:[void 0,"Ar",0],MGF:[void 0,void 0,0],MMK:[void 0,"K",0],MNT:[void 0,"\u20ae",2],MRO:[void 0,void 0,0],MUR:[void 0,"Rs",2],MXN:["MX$","$"],MYR:[void 0,"RM"],NAD:[void 0,"$"],NGN:[void 0,"\u20a6"],NIO:[void 0,"C$"],NOK:[void 0,"kr",2],NPR:[void 0,"Rs"],NZD:["NZ$","$"],OMR:[void 0,void 0,3],PHP:["\u20b1"],PKR:[void 0,"Rs",2],PLN:[void 0,"z\u0142"],PYG:[void 0,"\u20b2",0],RON:[void 0,"lei"],RSD:[void 0,void 0,0],RUB:[void 0,"\u20bd"],RWF:[void 0,"RF",0],SBD:[void 0,"$"],SEK:[void 0,"kr",2],SGD:[void 0,"$"],SHP:[void 0,"\xa3"],SLE:[void 0,void 0,2],SLL:[void 0,void 0,0],SOS:[void 0,void 0,0],SRD:[void 0,"$"],SSP:[void 0,"\xa3"],STD:[void 0,void 0,0],STN:[void 0,"Db"],SYP:[void 0,"\xa3",0],THB:[void 0,"\u0e3f"],TMM:[void 0,void 0,0],TND:[void 0,void 0,3],TOP:[void 0,"T$"],TRL:[void 0,void 0,0],TRY:[void 0,"\u20ba"],TTD:[void 0,"$"],TWD:["NT$","$",2],TZS:[void 0,void 0,2],UAH:[void 0,"\u20b4"],UGX:[void 0,void 0,0],USD:["$"],UYI:[void 0,void 0,0],UYU:[void 0,"$"],UYW:[void 0,void 0,4],UZS:[void 0,void 0,2],VEF:[void 0,"Bs",2],VND:["\u20ab",void 0,0],VUV:[void 0,void 0,0],XAF:["FCFA",void 0,0],XCD:["EC$","$"],XOF:["F\u202fCFA",void 0,0],XPF:["CFPF",void 0,0],XXX:["\xa4"],YER:[void 0,void 0,0],ZAR:[void 0,"R"],ZMK:[void 0,void 0,0],ZMW:[void 0,"ZK"],ZWD:[void 0,void 0,0]};var Kg=function(t){return t[t.Decimal=0]="Decimal",t[t.Percent=1]="Percent",t[t.Currency=2]="Currency",t[t.Scientific=3]="Scientific",t}(Kg||{}),vr=function(t){return t[t.Format=0]="Format",t[t.Standalone=1]="Standalone",t}(vr||{}),Ii=function(t){return t[t.Narrow=0]="Narrow",t[t.Abbreviated=1]="Abbreviated",t[t.Wide=2]="Wide",t[t.Short=3]="Short",t}(Ii||{}),Vn=function(t){return t[t.Short=0]="Short",t[t.Medium=1]="Medium",t[t.Long=2]="Long",t[t.Full=3]="Full",t}(Vn||{}),dn=function(t){return t[t.Decimal=0]="Decimal",t[t.Group=1]="Group",t[t.List=2]="List",t[t.PercentSign=3]="PercentSign",t[t.PlusSign=4]="PlusSign",t[t.MinusSign=5]="MinusSign",t[t.Exponential=6]="Exponential",t[t.SuperscriptingExponent=7]="SuperscriptingExponent",t[t.PerMille=8]="PerMille",t[t.Infinity=9]="Infinity",t[t.NaN=10]="NaN",t[t.TimeSeparator=11]="TimeSeparator",t[t.CurrencyDecimal=12]="CurrencyDecimal",t[t.CurrencyGroup=13]="CurrencyGroup",t}(dn||{});function Xd(t){return On(t)[pi.FirstDayOfWeek]}function Jd(t,r){return os(On(t)[pi.DateFormat],r)}function lv(t,r){return os(On(t)[pi.TimeFormat],r)}function Zg(t,r){return os(On(t)[pi.DateTimeFormat],r)}function ss(t,r){const n=On(t),e=n[pi.NumberSymbols][r];if(typeof e>"u"){if(r===dn.CurrencyDecimal)return n[pi.NumberSymbols][dn.Decimal];if(r===dn.CurrencyGroup)return n[pi.NumberSymbols][dn.Group]}return e}function cv(t,r){return On(t)[pi.NumberFormats][r]}function eu(t){return function lW(t){return On(t)[pi.CurrencyCode]||null}(t)}function EF(t){if(!t[pi.ExtraData])throw new Error(`Missing extra locale data for the locale "${t[pi.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function os(t,r){for(let n=r;n>-1;n--)if(typeof t[n]<"u")return t[n];throw new Error("Locale data API: locale data undefined")}function n1(t){const[r,n]=t.split(":");return{hours:+r,minutes:+n}}function MF(t,r,n="en"){const e=function LK(t){return On(t)[pi.Currencies]}(n)[t]||TF[t]||[],i=e[1];return"narrow"===r&&"string"==typeof i?i:e[0]||t}const jK=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,dv={},WK=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var Bo=function(t){return t[t.Short=0]="Short",t[t.ShortGMT=1]="ShortGMT",t[t.Long=2]="Long",t[t.Extended=3]="Extended",t}(Bo||{}),Jt=function(t){return t[t.FullYear=0]="FullYear",t[t.Month=1]="Month",t[t.Date=2]="Date",t[t.Hours=3]="Hours",t[t.Minutes=4]="Minutes",t[t.Seconds=5]="Seconds",t[t.FractionalSeconds=6]="FractionalSeconds",t[t.Day=7]="Day",t}(Jt||{}),ei=function(t){return t[t.DayPeriods=0]="DayPeriods",t[t.Days=1]="Days",t[t.Months=2]="Months",t[t.Eras=3]="Eras",t}(ei||{});function uv(t,r,n,e){let i=function eZ(t){if(RF(t))return t;if("number"==typeof t&&!isNaN(t))return new Date(t);if("string"==typeof t){if(t=t.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(t)){const[i,s=1,o=1]=t.split("-").map(a=>+a);return hv(i,s-1,o)}const n=parseFloat(t);if(!isNaN(t-n))return new Date(n);let e;if(e=t.match(jK))return function tZ(t){const r=new Date(0);let n=0,e=0;const i=t[8]?r.setUTCFullYear:r.setFullYear,s=t[8]?r.setUTCHours:r.setHours;t[9]&&(n=Number(t[9]+t[10]),e=Number(t[9]+t[11])),i.call(r,Number(t[1]),Number(t[2])-1,Number(t[3]));const o=Number(t[4]||0)-n,a=Number(t[5]||0)-e,l=Number(t[6]||0),c=Math.floor(1e3*parseFloat("0."+(t[7]||0)));return s.call(r,o,a,l,c),r}(e)}const r=new Date(t);if(!RF(r))throw new Error(`Unable to convert "${t}" into a date`);return r}(t);r=zo(n,r)||r;let a,o=[];for(;r;){if(a=WK.exec(r),!a){o.push(r);break}{o=o.concat(a.slice(1));const d=o.pop();if(!d)break;r=d}}let l=i.getTimezoneOffset();e&&(l=kF(e,l),i=function JK(t,r,n){const e=n?-1:1,i=t.getTimezoneOffset();return function XK(t,r){return(t=new Date(t.getTime())).setMinutes(t.getMinutes()+r),t}(t,e*(kF(r,i)-i))}(i,e,!0));let c="";return o.forEach(d=>{const g=function QK(t){if(s1[t])return s1[t];let r;switch(t){case"G":case"GG":case"GGG":r=Ei(ei.Eras,Ii.Abbreviated);break;case"GGGG":r=Ei(ei.Eras,Ii.Wide);break;case"GGGGG":r=Ei(ei.Eras,Ii.Narrow);break;case"y":r=pn(Jt.FullYear,1,0,!1,!0);break;case"yy":r=pn(Jt.FullYear,2,0,!0,!0);break;case"yyy":r=pn(Jt.FullYear,3,0,!1,!0);break;case"yyyy":r=pn(Jt.FullYear,4,0,!1,!0);break;case"Y":r=mv(1);break;case"YY":r=mv(2,!0);break;case"YYY":r=mv(3);break;case"YYYY":r=mv(4);break;case"M":case"L":r=pn(Jt.Month,1,1);break;case"MM":case"LL":r=pn(Jt.Month,2,1);break;case"MMM":r=Ei(ei.Months,Ii.Abbreviated);break;case"MMMM":r=Ei(ei.Months,Ii.Wide);break;case"MMMMM":r=Ei(ei.Months,Ii.Narrow);break;case"LLL":r=Ei(ei.Months,Ii.Abbreviated,vr.Standalone);break;case"LLLL":r=Ei(ei.Months,Ii.Wide,vr.Standalone);break;case"LLLLL":r=Ei(ei.Months,Ii.Narrow,vr.Standalone);break;case"w":r=r1(1);break;case"ww":r=r1(2);break;case"W":r=r1(1,!0);break;case"d":r=pn(Jt.Date,1);break;case"dd":r=pn(Jt.Date,2);break;case"c":case"cc":r=pn(Jt.Day,1);break;case"ccc":r=Ei(ei.Days,Ii.Abbreviated,vr.Standalone);break;case"cccc":r=Ei(ei.Days,Ii.Wide,vr.Standalone);break;case"ccccc":r=Ei(ei.Days,Ii.Narrow,vr.Standalone);break;case"cccccc":r=Ei(ei.Days,Ii.Short,vr.Standalone);break;case"E":case"EE":case"EEE":r=Ei(ei.Days,Ii.Abbreviated);break;case"EEEE":r=Ei(ei.Days,Ii.Wide);break;case"EEEEE":r=Ei(ei.Days,Ii.Narrow);break;case"EEEEEE":r=Ei(ei.Days,Ii.Short);break;case"a":case"aa":case"aaa":r=Ei(ei.DayPeriods,Ii.Abbreviated);break;case"aaaa":r=Ei(ei.DayPeriods,Ii.Wide);break;case"aaaaa":r=Ei(ei.DayPeriods,Ii.Narrow);break;case"b":case"bb":case"bbb":r=Ei(ei.DayPeriods,Ii.Abbreviated,vr.Standalone,!0);break;case"bbbb":r=Ei(ei.DayPeriods,Ii.Wide,vr.Standalone,!0);break;case"bbbbb":r=Ei(ei.DayPeriods,Ii.Narrow,vr.Standalone,!0);break;case"B":case"BB":case"BBB":r=Ei(ei.DayPeriods,Ii.Abbreviated,vr.Format,!0);break;case"BBBB":r=Ei(ei.DayPeriods,Ii.Wide,vr.Format,!0);break;case"BBBBB":r=Ei(ei.DayPeriods,Ii.Narrow,vr.Format,!0);break;case"h":r=pn(Jt.Hours,1,-12);break;case"hh":r=pn(Jt.Hours,2,-12);break;case"H":r=pn(Jt.Hours,1);break;case"HH":r=pn(Jt.Hours,2);break;case"m":r=pn(Jt.Minutes,1);break;case"mm":r=pn(Jt.Minutes,2);break;case"s":r=pn(Jt.Seconds,1);break;case"ss":r=pn(Jt.Seconds,2);break;case"S":r=pn(Jt.FractionalSeconds,1);break;case"SS":r=pn(Jt.FractionalSeconds,2);break;case"SSS":r=pn(Jt.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":r=pv(Bo.Short);break;case"ZZZZZ":r=pv(Bo.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":r=pv(Bo.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":r=pv(Bo.Long);break;default:return null}return s1[t]=r,r}(d);c+=g?g(i,n,l):"''"===d?"'":d.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),c}function hv(t,r,n){const e=new Date(0);return e.setFullYear(t,r,n),e.setHours(0,0,0),e}function zo(t,r){const n=function RK(t){return On(t)[pi.LocaleId]}(t);if(dv[n]??={},dv[n][r])return dv[n][r];let e="";switch(r){case"shortDate":e=Jd(t,Vn.Short);break;case"mediumDate":e=Jd(t,Vn.Medium);break;case"longDate":e=Jd(t,Vn.Long);break;case"fullDate":e=Jd(t,Vn.Full);break;case"shortTime":e=lv(t,Vn.Short);break;case"mediumTime":e=lv(t,Vn.Medium);break;case"longTime":e=lv(t,Vn.Long);break;case"fullTime":e=lv(t,Vn.Full);break;case"short":const i=zo(t,"shortTime"),s=zo(t,"shortDate");e=gv(Zg(t,Vn.Short),[i,s]);break;case"medium":const o=zo(t,"mediumTime"),a=zo(t,"mediumDate");e=gv(Zg(t,Vn.Medium),[o,a]);break;case"long":const l=zo(t,"longTime"),c=zo(t,"longDate");e=gv(Zg(t,Vn.Long),[l,c]);break;case"full":const d=zo(t,"fullTime"),g=zo(t,"fullDate");e=gv(Zg(t,Vn.Full),[d,g])}return e&&(dv[n][r]=e),e}function gv(t,r){return r&&(t=t.replace(/\{([^}]+)}/g,function(n,e){return null!=r&&e in r?r[e]:n})),t}function ks(t,r,n="-",e,i){let s="";(t<0||i&&t<=0)&&(i?t=1-t:(t=-t,s=n));let o=String(t);for(;o.length0||a>-n)&&(a+=n),t===Jt.Hours)0===a&&-12===n&&(a=12);else if(t===Jt.FractionalSeconds)return function $K(t,r){return ks(t,3).substring(0,r)}(a,r);const l=ss(o,dn.MinusSign);return ks(a,r,l,e,i)}}function Ei(t,r,n=vr.Format,e=!1){return function(i,s){return function KK(t,r,n,e,i,s){switch(n){case ei.Months:return function OK(t,r,n){const e=On(t),s=os([e[pi.MonthsFormat],e[pi.MonthsStandalone]],r);return os(s,n)}(r,i,e)[t.getMonth()];case ei.Days:return function FK(t,r,n){const e=On(t),s=os([e[pi.DaysFormat],e[pi.DaysStandalone]],r);return os(s,n)}(r,i,e)[t.getDay()];case ei.DayPeriods:const o=t.getHours(),a=t.getMinutes();if(s){const c=function HK(t){const r=On(t);return EF(r),(r[pi.ExtraData][2]||[]).map(e=>"string"==typeof e?n1(e):[n1(e[0]),n1(e[1])])}(r),d=function BK(t,r,n){const e=On(t);EF(e);const s=os([e[pi.ExtraData][0],e[pi.ExtraData][1]],r)||[];return os(s,n)||[]}(r,i,e),g=c.findIndex(_=>{if(Array.isArray(_)){const[x,w]=_,E=o>=x.hours&&a>=x.minutes,M=o0?Math.floor(i/60):Math.ceil(i/60);switch(t){case Bo.Short:return(i>=0?"+":"")+ks(o,2,s)+ks(Math.abs(i%60),2,s);case Bo.ShortGMT:return"GMT"+(i>=0?"+":"")+ks(o,1,s);case Bo.Long:return"GMT"+(i>=0?"+":"")+ks(o,2,s)+":"+ks(Math.abs(i%60),2,s);case Bo.Extended:return 0===e?"Z":(i>=0?"+":"")+ks(o,2,s)+":"+ks(Math.abs(i%60),2,s);default:throw new Error(`Unknown zone width "${t}"`)}}}const ZK=0,fv=4;function AF(t){const r=t.getDay(),n=0===r?-3:fv-r;return hv(t.getFullYear(),t.getMonth(),t.getDate()+n)}function r1(t,r=!1){return function(n,e){let i;if(r){const s=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,o=n.getDate();i=1+Math.floor((o+s)/7)}else{const s=AF(n),o=function YK(t){const r=hv(t,ZK,1).getDay();return hv(t,0,1+(r<=fv?fv:fv+7)-r)}(s.getFullYear()),a=s.getTime()-o.getTime();i=1+Math.round(a/6048e5)}return ks(i,t,ss(e,dn.MinusSign))}}function mv(t,r=!1){return function(n,e){return ks(AF(n).getFullYear(),t,ss(e,dn.MinusSign),r)}}const s1={};function kF(t,r){t=t.replace(/:/g,"");const n=Date.parse("Jan 01, 1970 00:00:00 "+t)/6e4;return isNaN(n)?r:n}function RF(t){return t instanceof Date&&!isNaN(t.valueOf())}const iZ=/^(\d+)?\.((\d+)(-(\d+))?)?$/,PF=22,_v=".",Yg="0",nZ=";",rZ=",",o1="#";function a1(t,r,n,e,i,s,o=!1){let a="",l=!1;if(isFinite(t)){let c=function aZ(t){let e,i,s,o,a,r=Math.abs(t)+"",n=0;for((i=r.indexOf(_v))>-1&&(r=r.replace(_v,"")),(s=r.search(/e/i))>0?(i<0&&(i=s),i+=+r.slice(s+1),r=r.substring(0,s)):i<0&&(i=r.length),s=0;r.charAt(s)===Yg;s++);if(s===(a=r.length))e=[0],i=1;else{for(a--;r.charAt(a)===Yg;)a--;for(i-=s,e=[],o=0;s<=a;s++,o++)e[o]=Number(r.charAt(s))}return i>PF&&(e=e.splice(0,PF-1),n=i-1,i=1),{digits:e,exponent:n,integerLen:i}}(t);o&&(c=function oZ(t){if(0===t.digits[0])return t;const r=t.digits.length-t.integerLen;return t.exponent?t.exponent+=2:(0===r?t.digits.push(0,0):1===r&&t.digits.push(0),t.integerLen+=2),t}(c));let d=r.minInt,g=r.minFrac,_=r.maxFrac;if(s){const N=s.match(iZ);if(null===N)throw new Error(`${s} is not a valid digit info`);const q=N[1],$=N[3],ce=N[5];null!=q&&(d=c1(q)),null!=$&&(g=c1($)),null!=ce?_=c1(ce):null!=$&&g>_&&(_=g)}!function lZ(t,r,n){if(r>n)throw new Error(`The minimum number of digits after fraction (${r}) is higher than the maximum (${n}).`);let e=t.digits,i=e.length-t.integerLen;const s=Math.min(Math.max(r,i),n);let o=s+t.integerLen,a=e[o];if(o>0){e.splice(Math.max(t.integerLen,o));for(let g=o;g=5)if(o-1<0){for(let g=0;g>o;g--)e.unshift(0),t.integerLen++;e.unshift(1),t.integerLen++}else e[o-1]++;for(;i=c?w.pop():l=!1),_>=10?1:0},0);d&&(e.unshift(d),t.integerLen++)}(c,g,_);let x=c.digits,w=c.integerLen;const E=c.exponent;let M=[];for(l=x.every(N=>!N);w0?M=x.splice(w,x.length):(M=x,x=[0]);const k=[];for(x.length>=r.lgSize&&k.unshift(x.splice(-r.lgSize,x.length).join(""));x.length>r.gSize;)k.unshift(x.splice(-r.gSize,x.length).join(""));x.length&&k.unshift(x.join("")),a=k.join(ss(n,e)),M.length&&(a+=ss(n,i)+M.join("")),E&&(a+=ss(n,dn.Exponential)+"+"+E)}else a=ss(n,dn.Infinity);return a=t<0&&!l?r.negPre+a+r.negSuf:r.posPre+a+r.posSuf,a}function OF(t,r,n,e,i){const o=l1(cv(r,Kg.Currency),ss(r,dn.MinusSign));return o.minFrac=function UK(t){let r;const n=TF[t];return n&&(r=n[2]),"number"==typeof r?r:2}(e),o.maxFrac=o.minFrac,a1(t,o,r,dn.CurrencyGroup,dn.CurrencyDecimal,i).replace("\xa4",n).replace("\xa4","").trim()}function Qg(t,r,n){return a1(t,l1(cv(r,Kg.Percent),ss(r,dn.MinusSign)),r,dn.Group,dn.Decimal,n,!0).replace(new RegExp("%","g"),ss(r,dn.PercentSign))}function tu(t,r,n){return a1(t,l1(cv(r,Kg.Decimal),ss(r,dn.MinusSign)),r,dn.Group,dn.Decimal,n)}function l1(t,r="-"){const n={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},e=t.split(nZ),i=e[0],s=e[1],o=-1!==i.indexOf(_v)?i.split(_v):[i.substring(0,i.lastIndexOf(Yg)+1),i.substring(i.lastIndexOf(Yg)+1)],a=o[0],l=o[1]||"";n.posPre=a.substring(0,a.indexOf(o1));for(let d=0;d{var t;class r{constructor(e,i){this._ngEl=e,this._renderer=i,this.initialClasses=LF,this.stateMap=new Map}set klass(e){this.initialClasses=null!=e?e.trim().split(u1):LF}set ngClass(e){this.rawClass="string"==typeof e?e.trim().split(u1):e}ngDoCheck(){for(const i of this.initialClasses)this._updateState(i,!0);const e=this.rawClass;if(Array.isArray(e)||e instanceof Set)for(const i of e)this._updateState(i,!0);else if(null!=e)for(const i of Object.keys(e))this._updateState(i,!!e[i]);this._applyStateDiff()}_updateState(e,i){const s=this.stateMap.get(e);void 0!==s?(s.enabled!==i&&(s.changed=!0,s.enabled=i),s.touched=!0):this.stateMap.set(e,{enabled:i,changed:!0,touched:!0})}_applyStateDiff(){for(const e of this.stateMap){const i=e[0],s=e[1];s.changed?(this._toggleClass(i,s.enabled),s.changed=!1):s.touched||(s.enabled&&this._toggleClass(i,!1),this.stateMap.delete(i)),s.touched=!1}}_toggleClass(e,i){(e=e.trim()).length>0&&e.split(u1).forEach(s=>{i?this._renderer.addClass(this._ngEl.nativeElement,s):this._renderer.removeClass(this._ngEl.nativeElement,s)})}}return(t=r).\u0275fac=function(e){return new(e||t)(v(X),v(Yt))},t.\u0275dir=H({type:t,selectors:[["","ngClass",""]],inputs:{klass:[O.None,"class","klass"],ngClass:"ngClass"},standalone:!0}),r})();class uZ{constructor(r,n,e,i){this.$implicit=r,this.ngForOf=n,this.index=e,this.count=i}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let pt=(()=>{var t;class r{set ngForOf(e){this._ngForOf=e,this._ngForOfDirty=!0}set ngForTrackBy(e){this._trackByFn=e}get ngForTrackBy(){return this._trackByFn}constructor(e,i,s){this._viewContainer=e,this._template=i,this._differs=s,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForTemplate(e){e&&(this._template=e)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const e=this._ngForOf;!this._differ&&e&&(this._differ=this._differs.find(e).create(this.ngForTrackBy))}if(this._differ){const e=this._differ.diff(this._ngForOf);e&&this._applyChanges(e)}}_applyChanges(e){const i=this._viewContainer;e.forEachOperation((s,o,a)=>{if(null==s.previousIndex)i.createEmbeddedView(this._template,new uZ(s.item,this._ngForOf,-1,-1),null===a?void 0:a);else if(null==a)i.remove(null===o?void 0:o);else if(null!==o){const l=i.get(o);i.move(l,a),HF(l,s)}});for(let s=0,o=i.length;s{HF(i.get(s.currentIndex),s)})}static ngTemplateContextGuard(e,i){return!0}}return(t=r).\u0275fac=function(e){return new(e||t)(v(bt),v(ne),v(mr))},t.\u0275dir=H({type:t,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0}),r})();function HF(t,r){t.context.$implicit=r.item}let ye=(()=>{var t;class r{constructor(e,i){this._viewContainer=e,this._context=new hZ,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=i}set ngIf(e){this._context.$implicit=this._context.ngIf=e,this._updateView()}set ngIfThen(e){BF("ngIfThen",e),this._thenTemplateRef=e,this._thenViewRef=null,this._updateView()}set ngIfElse(e){BF("ngIfElse",e),this._elseTemplateRef=e,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(e,i){return!0}}return(t=r).\u0275fac=function(e){return new(e||t)(v(bt),v(ne))},t.\u0275dir=H({type:t,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),r})();class hZ{constructor(){this.$implicit=null,this.ngIf=null}}function BF(t,r){if(r&&!r.createEmbeddedView)throw new Error(`${t} must be a TemplateRef, but received '${xn(r)}'.`)}class h1{constructor(r,n){this._viewContainerRef=r,this._templateRef=n,this._created=!1}create(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)}destroy(){this._created=!1,this._viewContainerRef.clear()}enforceState(r){r&&!this._created?this.create():!r&&this._created&&this.destroy()}}let iu=(()=>{var t;class r{constructor(){this._defaultViews=[],this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}set ngSwitch(e){this._ngSwitch=e,0===this._caseCount&&this._updateDefaultCases(!0)}_addCase(){return this._caseCount++}_addDefault(e){this._defaultViews.push(e)}_matchCase(e){const i=e===this._ngSwitch;return this._lastCasesMatched||=i,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),i}_updateDefaultCases(e){if(this._defaultViews.length>0&&e!==this._defaultUsed){this._defaultUsed=e;for(const i of this._defaultViews)i.enforceState(e)}}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275dir=H({type:t,selectors:[["","ngSwitch",""]],inputs:{ngSwitch:"ngSwitch"},standalone:!0}),r})(),vv=(()=>{var t;class r{constructor(e,i,s){this.ngSwitch=s,s._addCase(),this._view=new h1(e,i)}ngDoCheck(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))}}return(t=r).\u0275fac=function(e){return new(e||t)(v(bt),v(ne),v(iu,9))},t.\u0275dir=H({type:t,selectors:[["","ngSwitchCase",""]],inputs:{ngSwitchCase:"ngSwitchCase"},standalone:!0}),r})(),xv=(()=>{var t;class r{constructor(e,i,s){s._addDefault(new h1(e,i))}}return(t=r).\u0275fac=function(e){return new(e||t)(v(bt),v(ne),v(iu,9))},t.\u0275dir=H({type:t,selectors:[["","ngSwitchDefault",""]],standalone:!0}),r})(),Ln=(()=>{var t;class r{constructor(e,i,s){this._ngEl=e,this._differs=i,this._renderer=s,this._ngStyle=null,this._differ=null}set ngStyle(e){this._ngStyle=e,!this._differ&&e&&(this._differ=this._differs.find(e).create())}ngDoCheck(){if(this._differ){const e=this._differ.diff(this._ngStyle);e&&this._applyChanges(e)}}_setStyle(e,i){const[s,o]=e.split("."),a=-1===s.indexOf("-")?void 0:Vo.DashCase;null!=i?this._renderer.setStyle(this._ngEl.nativeElement,s,o?`${i}${o}`:i,a):this._renderer.removeStyle(this._ngEl.nativeElement,s,a)}_applyChanges(e){e.forEachRemovedItem(i=>this._setStyle(i.key,null)),e.forEachAddedItem(i=>this._setStyle(i.key,i.currentValue)),e.forEachChangedItem(i=>this._setStyle(i.key,i.currentValue))}}return(t=r).\u0275fac=function(e){return new(e||t)(v(X),v(E_),v(Yt))},t.\u0275dir=H({type:t,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0}),r})(),Be=(()=>{var t;class r{constructor(e){this._viewContainerRef=e,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null,this.ngTemplateOutletInjector=null}ngOnChanges(e){if(this._shouldRecreateView(e)){const i=this._viewContainerRef;if(this._viewRef&&i.remove(i.indexOf(this._viewRef)),!this.ngTemplateOutlet)return void(this._viewRef=null);const s=this._createContextForwardProxy();this._viewRef=i.createEmbeddedView(this.ngTemplateOutlet,s,{injector:this.ngTemplateOutletInjector??void 0})}}_shouldRecreateView(e){return!!e.ngTemplateOutlet||!!e.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(e,i,s)=>!!this.ngTemplateOutletContext&&Reflect.set(this.ngTemplateOutletContext,i,s),get:(e,i,s)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,i,s)}})}}return(t=r).\u0275fac=function(e){return new(e||t)(v(bt))},t.\u0275dir=H({type:t,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},standalone:!0,features:[Ci]}),r})();function Rs(t,r){return new se(2100,!1)}class fZ{createSubscription(r,n){return hk(()=>r.subscribe({next:n,error:e=>{throw e}}))}dispose(r){hk(()=>r.unsubscribe())}}class mZ{createSubscription(r,n){return r.then(n,e=>{throw e})}dispose(r){}}const _Z=new mZ,vZ=new fZ;let g1=(()=>{var t;class r{constructor(e){this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null,this._ref=e}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(e){return this._obj?e!==this._obj?(this._dispose(),this.transform(e)):this._latestValue:(e&&this._subscribe(e),this._latestValue)}_subscribe(e){this._obj=e,this._strategy=this._selectStrategy(e),this._subscription=this._strategy.createSubscription(e,i=>this._updateLatestValue(e,i))}_selectStrategy(e){if(Ug(e))return _Z;if(GP(e))return vZ;throw Rs()}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(e,i){e===this._obj&&(this._latestValue=i,this._ref.markForCheck())}}return(t=r).\u0275fac=function(e){return new(e||t)(v(Ee,16))},t.\u0275pipe=Te({name:"async",type:t,pure:!1,standalone:!0}),r})();const yZ=/(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g;let p1=(()=>{var t;class r{transform(e){if(null==e)return null;if("string"!=typeof e)throw Rs();return e.replace(yZ,i=>i[0].toUpperCase()+i.slice(1).toLowerCase())}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275pipe=Te({name:"titlecase",type:t,pure:!0,standalone:!0}),r})();const IZ=new Ce(""),bZ=new Ce("");let xr=(()=>{var t;class r{constructor(e,i,s){this.locale=e,this.defaultTimezone=i,this.defaultOptions=s}transform(e,i,s,o){if(null==e||""===e||e!=e)return null;try{return uv(e,i??this.defaultOptions?.dateFormat??"mediumDate",o||this.locale,s??this.defaultOptions?.timezone??this.defaultTimezone??void 0)}catch(a){throw Rs()}}}return(t=r).\u0275fac=function(e){return new(e||t)(v(Ji,16),v(IZ,24),v(bZ,24))},t.\u0275pipe=Te({name:"date",type:t,pure:!0,standalone:!0}),r})(),nu=(()=>{var t;class r{constructor(e){this._locale=e}transform(e,i,s){if(!f1(e))return null;s||=this._locale;try{return tu(m1(e),s,i)}catch(o){throw Rs()}}}return(t=r).\u0275fac=function(e){return new(e||t)(v(Ji,16))},t.\u0275pipe=Te({name:"number",type:t,pure:!0,standalone:!0}),r})(),jl=(()=>{var t;class r{constructor(e){this._locale=e}transform(e,i,s){if(!f1(e))return null;s||=this._locale;try{return Qg(m1(e),s,i)}catch(o){throw Rs()}}}return(t=r).\u0275fac=function(e){return new(e||t)(v(Ji,16))},t.\u0275pipe=Te({name:"percent",type:t,pure:!0,standalone:!0}),r})(),Wl=(()=>{var t;class r{constructor(e,i="USD"){this._locale=e,this._defaultCurrencyCode=i}transform(e,i=this._defaultCurrencyCode,s="symbol",o,a){if(!f1(e))return null;a||=this._locale,"boolean"==typeof s&&(s=s?"symbol":"code");let l=i||this._defaultCurrencyCode;"code"!==s&&(l="symbol"===s||"symbol-narrow"===s?MF(l,"symbol"===s?"wide":"narrow",a):s);try{return OF(m1(e),a,l,i,o)}catch(c){throw Rs()}}}return(t=r).\u0275fac=function(e){return new(e||t)(v(Ji,16),v(Lq,16))},t.\u0275pipe=Te({name:"currency",type:t,pure:!0,standalone:!0}),r})();function f1(t){return!(null==t||""===t||t!=t)}function m1(t){if("string"==typeof t&&!isNaN(Number(t)-parseFloat(t)))return Number(t);if("number"!=typeof t)throw new Error(`${t} is not a number`);return t}let kZ=(()=>{var t;class r{}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275mod=Lt({type:t}),t.\u0275inj=Ot({}),r})();const jF="browser";function WF(t){return t===jF}function $F(t){return"server"===t}let OZ=(()=>{var t;class r{}return(t=r).\u0275prov=ue({token:t,providedIn:"root",factory:()=>WF(fe(Fo))?new NZ(fe(St),window):new LZ}),r})();class NZ{constructor(r,n){this.document=r,this.window=n,this.offset=()=>[0,0]}setOffset(r){this.offset=Array.isArray(r)?()=>r:r}getScrollPosition(){return[this.window.scrollX,this.window.scrollY]}scrollToPosition(r){this.window.scrollTo(r[0],r[1])}scrollToAnchor(r){const n=function VZ(t,r){const n=t.getElementById(r)||t.getElementsByName(r)[0];if(n)return n;if("function"==typeof t.createTreeWalker&&t.body&&"function"==typeof t.body.attachShadow){const e=t.createTreeWalker(t.body,NodeFilter.SHOW_ELEMENT);let i=e.currentNode;for(;i;){const s=i.shadowRoot;if(s){const o=s.getElementById(r)||s.querySelector(`[name="${r}"]`);if(o)return o}i=e.nextNode()}}return null}(this.document,r);n&&(this.scrollToElement(n),n.focus())}setHistoryScrollRestoration(r){this.window.history.scrollRestoration=r}scrollToElement(r){const n=r.getBoundingClientRect(),e=n.left+this.window.pageXOffset,i=n.top+this.window.pageYOffset,s=this.offset();this.window.scrollTo(e-s[0],i-s[1])}}class LZ{setOffset(r){}getScrollPosition(){return[0,0]}scrollToPosition(r){}scrollToAnchor(r){}setHistoryScrollRestoration(r){}}class qF{}const i4=t=>r=>{for(let n=0,e=t.length;nt&&"number"==typeof t.length&&"function"!=typeof t;function r4(t){return!!t&&"function"!=typeof t.subscribe&&"function"==typeof t.then}const v1=t=>{if(t&&"function"==typeof t[Vh])return(t=>r=>{const n=t[Vh]();if("function"!=typeof n.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return n.subscribe(r)})(t);if(n4(t))return i4(t);if(r4(t))return(t=>r=>(t.then(n=>{r.closed||(r.next(n),r.complete())},n=>r.error(n)).then(null,Zc),r))(t);if(t&&"function"==typeof t[Cv])return(t=>r=>{const n=t[Cv]();for(;;){let e;try{e=n.next()}catch(i){return r.error(i),r}if(e.done){r.complete();break}if(r.next(e.value),r.closed)break}return"function"==typeof n.return&&r.add(()=>{n.return&&n.return()}),r})(t);{const n=`You provided ${Bw(t)?"an invalid object":`'${t}'`} where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.`;throw new TypeError(n)}};function x1(t,r){return new wi(n=>{const e=new yi;let i=0;return e.add(r.schedule(function(){i!==t.length?(n.next(t[i++]),n.closed||e.add(this.schedule())):n.complete()})),e})}function Dn(t,r){return r?function wY(t,r){if(null!=t){if(function xY(t){return t&&"function"==typeof t[Vh]}(t))return function mY(t,r){return new wi(n=>{const e=new yi;return e.add(r.schedule(()=>{const i=t[Vh]();e.add(i.subscribe({next(s){e.add(r.schedule(()=>n.next(s)))},error(s){e.add(r.schedule(()=>n.error(s)))},complete(){e.add(r.schedule(()=>n.complete()))}}))})),e})}(t,r);if(r4(t))return function _Y(t,r){return new wi(n=>{const e=new yi;return e.add(r.schedule(()=>t.then(i=>{e.add(r.schedule(()=>{n.next(i),e.add(r.schedule(()=>n.complete()))}))},i=>{e.add(r.schedule(()=>n.error(i)))}))),e})}(t,r);if(n4(t))return x1(t,r);if(function yY(t){return t&&"function"==typeof t[Cv]}(t)||"string"==typeof t)return function vY(t,r){if(!t)throw new Error("Iterable cannot be null");return new wi(n=>{const e=new yi;let i;return e.add(()=>{i&&"function"==typeof i.return&&i.return()}),e.add(r.schedule(()=>{i=t[Cv](),e.add(r.schedule(function(){if(n.closed)return;let s,o;try{const a=i.next();s=a.value,o=a.done}catch(a){return void n.error(a)}o?n.complete():(n.next(s),this.schedule())}))})),e})}(t,r)}throw new TypeError((null!==t&&typeof t||t)+" is not observable")}(t,r):t instanceof wi?t:new wi(v1(t))}function Iv(t,r){return new wi(n=>{const e=t.length;if(0===e)return void n.complete();const i=new Array(e);let s=0,o=0;for(let a=0;a{c||(c=!0,o++),i[a]=d},error:d=>n.error(d),complete:()=>{s++,(s===e||!c)&&(o===e&&n.next(r?r.reduce((d,g,_)=>(d[g]=i[_],d),{}):i),n.complete())}}))}})}let s4=(()=>{var t;class r{constructor(e,i){this._renderer=e,this._elementRef=i,this.onChange=s=>{},this.onTouched=()=>{}}setProperty(e,i){this._renderer.setProperty(this._elementRef.nativeElement,e,i)}registerOnTouched(e){this.onTouched=e}registerOnChange(e){this.onChange=e}setDisabledState(e){this.setProperty("disabled",e)}}return(t=r).\u0275fac=function(e){return new(e||t)(v(Yt),v(X))},t.\u0275dir=H({type:t}),r})(),$l=(()=>{var t;class r extends s4{}return(t=r).\u0275fac=(()=>{let n;return function(i){return(n||(n=Ae(t)))(i||t)}})(),t.\u0275dir=H({type:t,features:[oe]}),r})();const Oi=new Ce(""),bY={provide:Oi,useExisting:$t(()=>Mr),multi:!0},SY=new Ce("");let Mr=(()=>{var t;class r extends s4{constructor(e,i,s){super(e,i),this._compositionMode=s,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function DY(){const t=Go()?Go().getUserAgent():"";return/android (\d+)/.test(t.toLowerCase())}())}writeValue(e){this.setProperty("value",e??"")}_handleInput(e){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(e)}_compositionStart(){this._composing=!0}_compositionEnd(e){this._composing=!1,this._compositionMode&&this.onChange(e)}}return(t=r).\u0275fac=function(e){return new(e||t)(v(Yt),v(X),v(SY,8))},t.\u0275dir=H({type:t,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(e,i){1&e&&T("input",function(o){return i._handleInput(o.target.value)})("blur",function(){return i.onTouched()})("compositionstart",function(){return i._compositionStart()})("compositionend",function(o){return i._compositionEnd(o.target.value)})},features:[pe([bY]),oe]}),r})();function Aa(t){return null==t||("string"==typeof t||Array.isArray(t))&&0===t.length}function a4(t){return null!=t&&"number"==typeof t.length}const fi=new Ce(""),ka=new Ce(""),TY=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;class l4{static min(r){return function c4(t){return r=>{if(Aa(r.value)||Aa(t))return null;const n=parseFloat(r.value);return!isNaN(n)&&n{if(Aa(r.value)||Aa(t))return null;const n=parseFloat(r.value);return!isNaN(n)&&n>t?{max:{max:t,actual:r.value}}:null}}(r)}static required(r){return u4(r)}static requiredTrue(r){return function h4(t){return!0===t.value?null:{required:!0}}(r)}static email(r){return function g4(t){return Aa(t.value)||TY.test(t.value)?null:{email:!0}}(r)}static minLength(r){return p4(r)}static maxLength(r){return function f4(t){return r=>a4(r.value)&&r.value.length>t?{maxlength:{requiredLength:t,actualLength:r.value.length}}:null}(r)}static pattern(r){return function m4(t){if(!t)return bv;let r,n;return"string"==typeof t?(n="","^"!==t.charAt(0)&&(n+="^"),n+=t,"$"!==t.charAt(t.length-1)&&(n+="$"),r=new RegExp(n)):(n=t.toString(),r=t),e=>{if(Aa(e.value))return null;const i=e.value;return r.test(i)?null:{pattern:{requiredPattern:n,actualValue:i}}}}(r)}static nullValidator(r){return null}static compose(r){return C4(r)}static composeAsync(r){return I4(r)}}function u4(t){return Aa(t.value)?{required:!0}:null}function p4(t){return r=>Aa(r.value)||!a4(r.value)?null:r.value.length{r=null!=n?{...r,...n}:r}),0===Object.keys(r).length?null:r}function y4(t,r){return r.map(n=>n(t))}function w4(t){return t.map(r=>function EY(t){return!t.validate}(r)?r:n=>r.validate(n))}function C4(t){if(!t)return null;const r=t.filter(_4);return 0==r.length?null:function(n){return x4(y4(n,r))}}function y1(t){return null!=t?C4(w4(t)):null}function I4(t){if(!t)return null;const r=t.filter(_4);return 0==r.length?null:function(n){return function CY(...t){if(1===t.length){const r=t[0];if(Yc(r))return Iv(r,null);if(Bw(r)&&Object.getPrototypeOf(r)===Object.prototype){const n=Object.keys(r);return Iv(n.map(e=>r[e]),n)}}if("function"==typeof t[t.length-1]){const r=t.pop();return Iv(t=1===t.length&&Yc(t[0])?t[0]:t,null).pipe(It(n=>r(...n)))}return Iv(t,null)}(y4(n,r).map(v4)).pipe(It(x4))}}function w1(t){return null!=t?I4(w4(t)):null}function b4(t,r){return null===t?[r]:Array.isArray(t)?[...t,r]:[t,r]}function D4(t){return t._rawValidators}function S4(t){return t._rawAsyncValidators}function C1(t){return t?Array.isArray(t)?t:[t]:[]}function Dv(t,r){return Array.isArray(t)?t.includes(r):t===r}function T4(t,r){const n=C1(r);return C1(t).forEach(i=>{Dv(n,i)||n.push(i)}),n}function E4(t,r){return C1(r).filter(n=>!Dv(t,n))}class M4{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(r){this._rawValidators=r||[],this._composedValidatorFn=y1(this._rawValidators)}_setAsyncValidators(r){this._rawAsyncValidators=r||[],this._composedAsyncValidatorFn=w1(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(r){this._onDestroyCallbacks.push(r)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(r=>r()),this._onDestroyCallbacks=[]}reset(r=void 0){this.control&&this.control.reset(r)}hasError(r,n){return!!this.control&&this.control.hasError(r,n)}getError(r,n){return this.control?this.control.getError(r,n):null}}class sr extends M4{get formDirective(){return null}get path(){return null}}class Gn extends M4{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class A4{constructor(r){this._cd=r}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}}let Wr=(()=>{var t;class r extends A4{constructor(e){super(e)}}return(t=r).\u0275fac=function(e){return new(e||t)(v(Gn,2))},t.\u0275dir=H({type:t,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(e,i){2&e&&ee("ng-untouched",i.isUntouched)("ng-touched",i.isTouched)("ng-pristine",i.isPristine)("ng-dirty",i.isDirty)("ng-valid",i.isValid)("ng-invalid",i.isInvalid)("ng-pending",i.isPending)},features:[oe]}),r})(),ep=(()=>{var t;class r extends A4{constructor(e){super(e)}}return(t=r).\u0275fac=function(e){return new(e||t)(v(sr,10))},t.\u0275dir=H({type:t,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(e,i){2&e&&ee("ng-untouched",i.isUntouched)("ng-touched",i.isTouched)("ng-pristine",i.isPristine)("ng-dirty",i.isDirty)("ng-valid",i.isValid)("ng-invalid",i.isInvalid)("ng-pending",i.isPending)("ng-submitted",i.isSubmitted)},features:[oe]}),r})();const tp="VALID",Tv="INVALID",ru="PENDING",ip="DISABLED";function D1(t){return(Ev(t)?t.validators:t)||null}function S1(t,r){return(Ev(r)?r.asyncValidators:t)||null}function Ev(t){return null!=t&&!Array.isArray(t)&&"object"==typeof t}class T1{constructor(r,n){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(r),this._assignAsyncValidators(n)}get validator(){return this._composedValidatorFn}set validator(r){this._rawValidators=this._composedValidatorFn=r}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(r){this._rawAsyncValidators=this._composedAsyncValidatorFn=r}get parent(){return this._parent}get valid(){return this.status===tp}get invalid(){return this.status===Tv}get pending(){return this.status==ru}get disabled(){return this.status===ip}get enabled(){return this.status!==ip}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(r){this._assignValidators(r)}setAsyncValidators(r){this._assignAsyncValidators(r)}addValidators(r){this.setValidators(T4(r,this._rawValidators))}addAsyncValidators(r){this.setAsyncValidators(T4(r,this._rawAsyncValidators))}removeValidators(r){this.setValidators(E4(r,this._rawValidators))}removeAsyncValidators(r){this.setAsyncValidators(E4(r,this._rawAsyncValidators))}hasValidator(r){return Dv(this._rawValidators,r)}hasAsyncValidator(r){return Dv(this._rawAsyncValidators,r)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(r={}){this.touched=!0,this._parent&&!r.onlySelf&&this._parent.markAsTouched(r)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(r=>r.markAllAsTouched())}markAsUntouched(r={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(n=>{n.markAsUntouched({onlySelf:!0})}),this._parent&&!r.onlySelf&&this._parent._updateTouched(r)}markAsDirty(r={}){this.pristine=!1,this._parent&&!r.onlySelf&&this._parent.markAsDirty(r)}markAsPristine(r={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(n=>{n.markAsPristine({onlySelf:!0})}),this._parent&&!r.onlySelf&&this._parent._updatePristine(r)}markAsPending(r={}){this.status=ru,!1!==r.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!r.onlySelf&&this._parent.markAsPending(r)}disable(r={}){const n=this._parentMarkedDirty(r.onlySelf);this.status=ip,this.errors=null,this._forEachChild(e=>{e.disable({...r,onlySelf:!0})}),this._updateValue(),!1!==r.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors({...r,skipPristineCheck:n}),this._onDisabledChange.forEach(e=>e(!0))}enable(r={}){const n=this._parentMarkedDirty(r.onlySelf);this.status=tp,this._forEachChild(e=>{e.enable({...r,onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:r.emitEvent}),this._updateAncestors({...r,skipPristineCheck:n}),this._onDisabledChange.forEach(e=>e(!1))}_updateAncestors(r){this._parent&&!r.onlySelf&&(this._parent.updateValueAndValidity(r),r.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(r){this._parent=r}getRawValue(){return this.value}updateValueAndValidity(r={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===tp||this.status===ru)&&this._runAsyncValidator(r.emitEvent)),!1!==r.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!r.onlySelf&&this._parent.updateValueAndValidity(r)}_updateTreeValidity(r={emitEvent:!0}){this._forEachChild(n=>n._updateTreeValidity(r)),this.updateValueAndValidity({onlySelf:!0,emitEvent:r.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?ip:tp}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(r){if(this.asyncValidator){this.status=ru,this._hasOwnPendingAsyncValidator=!0;const n=v4(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(e=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(e,{emitEvent:r})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(r,n={}){this.errors=r,this._updateControlsErrors(!1!==n.emitEvent)}get(r){let n=r;return null==n||(Array.isArray(n)||(n=n.split(".")),0===n.length)?null:n.reduce((e,i)=>e&&e._find(i),this)}getError(r,n){const e=n?this.get(n):this;return e&&e.errors?e.errors[r]:null}hasError(r,n){return!!this.getError(r,n)}get root(){let r=this;for(;r._parent;)r=r._parent;return r}_updateControlsErrors(r){this.status=this._calculateStatus(),r&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(r)}_initObservables(){this.valueChanges=new A,this.statusChanges=new A}_calculateStatus(){return this._allControlsDisabled()?ip:this.errors?Tv:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(ru)?ru:this._anyControlsHaveStatus(Tv)?Tv:tp}_anyControlsHaveStatus(r){return this._anyControls(n=>n.status===r)}_anyControlsDirty(){return this._anyControls(r=>r.dirty)}_anyControlsTouched(){return this._anyControls(r=>r.touched)}_updatePristine(r={}){this.pristine=!this._anyControlsDirty(),this._parent&&!r.onlySelf&&this._parent._updatePristine(r)}_updateTouched(r={}){this.touched=this._anyControlsTouched(),this._parent&&!r.onlySelf&&this._parent._updateTouched(r)}_registerOnCollectionChange(r){this._onCollectionChange=r}_setUpdateStrategy(r){Ev(r)&&null!=r.updateOn&&(this._updateOn=r.updateOn)}_parentMarkedDirty(r){return!r&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}_find(r){return null}_assignValidators(r){this._rawValidators=Array.isArray(r)?r.slice():r,this._composedValidatorFn=function RY(t){return Array.isArray(t)?y1(t):t||null}(this._rawValidators)}_assignAsyncValidators(r){this._rawAsyncValidators=Array.isArray(r)?r.slice():r,this._composedAsyncValidatorFn=function PY(t){return Array.isArray(t)?w1(t):t||null}(this._rawAsyncValidators)}}class np extends T1{constructor(r,n,e){super(D1(n),S1(e,n)),this.controls=r,this._initObservables(),this._setUpdateStrategy(n),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(r,n){return this.controls[r]?this.controls[r]:(this.controls[r]=n,n.setParent(this),n._registerOnCollectionChange(this._onCollectionChange),n)}addControl(r,n,e={}){this.registerControl(r,n),this.updateValueAndValidity({emitEvent:e.emitEvent}),this._onCollectionChange()}removeControl(r,n={}){this.controls[r]&&this.controls[r]._registerOnCollectionChange(()=>{}),delete this.controls[r],this.updateValueAndValidity({emitEvent:n.emitEvent}),this._onCollectionChange()}setControl(r,n,e={}){this.controls[r]&&this.controls[r]._registerOnCollectionChange(()=>{}),delete this.controls[r],n&&this.registerControl(r,n),this.updateValueAndValidity({emitEvent:e.emitEvent}),this._onCollectionChange()}contains(r){return this.controls.hasOwnProperty(r)&&this.controls[r].enabled}setValue(r,n={}){(function P4(t,r,n){t._forEachChild((e,i)=>{if(void 0===n[i])throw new se(1002,"")})})(this,0,r),Object.keys(r).forEach(e=>{(function R4(t,r,n){const e=t.controls;if(!(r?Object.keys(e):e).length)throw new se(1e3,"");if(!e[n])throw new se(1001,"")})(this,!0,e),this.controls[e].setValue(r[e],{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n)}patchValue(r,n={}){null!=r&&(Object.keys(r).forEach(e=>{const i=this.controls[e];i&&i.patchValue(r[e],{onlySelf:!0,emitEvent:n.emitEvent})}),this.updateValueAndValidity(n))}reset(r={},n={}){this._forEachChild((e,i)=>{e.reset(r?r[i]:null,{onlySelf:!0,emitEvent:n.emitEvent})}),this._updatePristine(n),this._updateTouched(n),this.updateValueAndValidity(n)}getRawValue(){return this._reduceChildren({},(r,n,e)=>(r[e]=n.getRawValue(),r))}_syncPendingControls(){let r=this._reduceChildren(!1,(n,e)=>!!e._syncPendingControls()||n);return r&&this.updateValueAndValidity({onlySelf:!0}),r}_forEachChild(r){Object.keys(this.controls).forEach(n=>{const e=this.controls[n];e&&r(e,n)})}_setUpControls(){this._forEachChild(r=>{r.setParent(this),r._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(r){for(const[n,e]of Object.entries(this.controls))if(this.contains(n)&&r(e))return!0;return!1}_reduceValue(){return this._reduceChildren({},(n,e,i)=>((e.enabled||this.disabled)&&(n[i]=e.value),n))}_reduceChildren(r,n){let e=r;return this._forEachChild((i,s)=>{e=n(e,i,s)}),e}_allControlsDisabled(){for(const r of Object.keys(this.controls))if(this.controls[r].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(r){return this.controls.hasOwnProperty(r)?this.controls[r]:null}}const ql=new Ce("CallSetDisabledState",{providedIn:"root",factory:()=>rp}),rp="always";function sp(t,r,n=rp){E1(t,r),r.valueAccessor.writeValue(t.value),(t.disabled||"always"===n)&&r.valueAccessor.setDisabledState?.(t.disabled),function NY(t,r){r.valueAccessor.registerOnChange(n=>{t._pendingValue=n,t._pendingChange=!0,t._pendingDirty=!0,"change"===t.updateOn&&F4(t,r)})}(t,r),function LY(t,r){const n=(e,i)=>{r.valueAccessor.writeValue(e),i&&r.viewToModelUpdate(e)};t.registerOnChange(n),r._registerOnDestroy(()=>{t._unregisterOnChange(n)})}(t,r),function VY(t,r){r.valueAccessor.registerOnTouched(()=>{t._pendingTouched=!0,"blur"===t.updateOn&&t._pendingChange&&F4(t,r),"submit"!==t.updateOn&&t.markAsTouched()})}(t,r),function OY(t,r){if(r.valueAccessor.setDisabledState){const n=e=>{r.valueAccessor.setDisabledState(e)};t.registerOnDisabledChange(n),r._registerOnDestroy(()=>{t._unregisterOnDisabledChange(n)})}}(t,r)}function Av(t,r,n=!0){const e=()=>{};r.valueAccessor&&(r.valueAccessor.registerOnChange(e),r.valueAccessor.registerOnTouched(e)),Rv(t,r),t&&(r._invokeOnDestroyCallbacks(),t._registerOnCollectionChange(()=>{}))}function kv(t,r){t.forEach(n=>{n.registerOnValidatorChange&&n.registerOnValidatorChange(r)})}function E1(t,r){const n=D4(t);null!==r.validator?t.setValidators(b4(n,r.validator)):"function"==typeof n&&t.setValidators([n]);const e=S4(t);null!==r.asyncValidator?t.setAsyncValidators(b4(e,r.asyncValidator)):"function"==typeof e&&t.setAsyncValidators([e]);const i=()=>t.updateValueAndValidity();kv(r._rawValidators,i),kv(r._rawAsyncValidators,i)}function Rv(t,r){let n=!1;if(null!==t){if(null!==r.validator){const i=D4(t);if(Array.isArray(i)&&i.length>0){const s=i.filter(o=>o!==r.validator);s.length!==i.length&&(n=!0,t.setValidators(s))}}if(null!==r.asyncValidator){const i=S4(t);if(Array.isArray(i)&&i.length>0){const s=i.filter(o=>o!==r.asyncValidator);s.length!==i.length&&(n=!0,t.setAsyncValidators(s))}}}const e=()=>{};return kv(r._rawValidators,e),kv(r._rawAsyncValidators,e),n}function F4(t,r){t._pendingDirty&&t.markAsDirty(),t.setValue(t._pendingValue,{emitModelToViewChange:!1}),r.viewToModelUpdate(t._pendingValue),t._pendingChange=!1}function O4(t,r){E1(t,r)}function A1(t,r){if(!t.hasOwnProperty("model"))return!1;const n=t.model;return!!n.isFirstChange()||!Object.is(r,n.currentValue)}function N4(t,r){t._syncPendingControls(),r.forEach(n=>{const e=n.control;"submit"===e.updateOn&&e._pendingChange&&(n.viewToModelUpdate(e._pendingValue),e._pendingChange=!1)})}function k1(t,r){if(!r)return null;let n,e,i;return Array.isArray(r),r.forEach(s=>{s.constructor===Mr?n=s:function BY(t){return Object.getPrototypeOf(t.constructor)===$l}(s)?e=s:i=s}),i||e||n||null}const UY={provide:sr,useExisting:$t(()=>Pv)},op=Promise.resolve();let Pv=(()=>{var t;class r extends sr{constructor(e,i,s){super(),this.callSetDisabledState=s,this.submitted=!1,this._directives=new Set,this.ngSubmit=new A,this.form=new np({},y1(e),w1(i))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(e){op.then(()=>{const i=this._findContainer(e.path);e.control=i.registerControl(e.name,e.control),sp(e.control,e,this.callSetDisabledState),e.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(e)})}getControl(e){return this.form.get(e.path)}removeControl(e){op.then(()=>{const i=this._findContainer(e.path);i&&i.removeControl(e.name),this._directives.delete(e)})}addFormGroup(e){op.then(()=>{const i=this._findContainer(e.path),s=new np({});O4(s,e),i.registerControl(e.name,s),s.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(e){op.then(()=>{const i=this._findContainer(e.path);i&&i.removeControl(e.name)})}getFormGroup(e){return this.form.get(e.path)}updateModel(e,i){op.then(()=>{this.form.get(e.path).setValue(i)})}setValue(e){this.control.setValue(e)}onSubmit(e){return this.submitted=!0,N4(this.form,this._directives),this.ngSubmit.emit(e),"dialog"===e?.target?.method}onReset(){this.resetForm()}resetForm(e=void 0){this.form.reset(e),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(e){return e.pop(),e.length?this.form.get(e):this.form}}return(t=r).\u0275fac=function(e){return new(e||t)(v(fi,10),v(ka,10),v(ql,8))},t.\u0275dir=H({type:t,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(e,i){1&e&&T("submit",function(o){return i.onSubmit(o)})("reset",function(){return i.onReset()})},inputs:{options:[O.None,"ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[pe([UY]),oe]}),r})();function V4(t,r){const n=t.indexOf(r);n>-1&&t.splice(n,1)}function L4(t){return"object"==typeof t&&null!==t&&2===Object.keys(t).length&&"value"in t&&"disabled"in t}const R1=class extends T1{constructor(r=null,n,e){super(D1(n),S1(e,n)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(r),this._setUpdateStrategy(n),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),Ev(n)&&(n.nonNullable||n.initialValueIsDefault)&&(this.defaultValue=L4(r)?r.value:r)}setValue(r,n={}){this.value=this._pendingValue=r,this._onChange.length&&!1!==n.emitModelToViewChange&&this._onChange.forEach(e=>e(this.value,!1!==n.emitViewToModelChange)),this.updateValueAndValidity(n)}patchValue(r,n={}){this.setValue(r,n)}reset(r=this.defaultValue,n={}){this._applyFormState(r),this.markAsPristine(n),this.markAsUntouched(n),this.setValue(this.value,n),this._pendingChange=!1}_updateValue(){}_anyControls(r){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(r){this._onChange.push(r)}_unregisterOnChange(r){V4(this._onChange,r)}registerOnDisabledChange(r){this._onDisabledChange.push(r)}_unregisterOnDisabledChange(r){V4(this._onDisabledChange,r)}_forEachChild(r){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(r){L4(r)?(this.value=this._pendingValue=r.value,r.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=r}},$Y={provide:Gn,useExisting:$t(()=>Ps)},B4=Promise.resolve();let Ps=(()=>{var t;class r extends Gn{constructor(e,i,s,o,a,l){super(),this._changeDetectorRef=a,this.callSetDisabledState=l,this.control=new R1,this._registered=!1,this.name="",this.update=new A,this._parent=e,this._setValidators(i),this._setAsyncValidators(s),this.valueAccessor=k1(0,o)}ngOnChanges(e){if(this._checkForErrors(),!this._registered||"name"in e){if(this._registered&&(this._checkName(),this.formDirective)){const i=e.name.previousValue;this.formDirective.removeControl({name:i,path:this._getPath(i)})}this._setUpControl()}"isDisabled"in e&&this._updateDisabled(e),A1(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(e){this.viewModel=e,this.update.emit(e)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){sp(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(e){B4.then(()=>{this.control.setValue(e,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(e){const i=e.isDisabled.currentValue,s=0!==i&&B(i);B4.then(()=>{s&&!this.control.disabled?this.control.disable():!s&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(e){return this._parent?function Mv(t,r){return[...r.path,t]}(e,this._parent):[e]}}return(t=r).\u0275fac=function(e){return new(e||t)(v(sr,9),v(fi,10),v(ka,10),v(Oi,10),v(Ee,8),v(ql,8))},t.\u0275dir=H({type:t,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:[O.None,"disabled","isDisabled"],model:[O.None,"ngModel","model"],options:[O.None,"ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[pe([$Y]),oe,Ci]}),r})();const KY={provide:Oi,useExisting:$t(()=>su),multi:!0};let su=(()=>{var t;class r extends $l{writeValue(e){this.setProperty("value",e??"")}registerOnChange(e){this.onChange=i=>{e(""==i?null:parseFloat(i))}}}return(t=r).\u0275fac=(()=>{let n;return function(i){return(n||(n=Ae(t)))(i||t)}})(),t.\u0275dir=H({type:t,selectors:[["input","type","number","formControlName",""],["input","type","number","formControl",""],["input","type","number","ngModel",""]],hostBindings:function(e,i){1&e&&T("input",function(o){return i.onChange(o.target.value)})("blur",function(){return i.onTouched()})},features:[pe([KY]),oe]}),r})();const P1=new Ce(""),XY={provide:Gn,useExisting:$t(()=>ou)};let ou=(()=>{var t;class r extends Gn{set isDisabled(e){}constructor(e,i,s,o,a){super(),this._ngModelWarningConfig=o,this.callSetDisabledState=a,this.update=new A,this._ngModelWarningSent=!1,this._setValidators(e),this._setAsyncValidators(i),this.valueAccessor=k1(0,s)}ngOnChanges(e){if(this._isControlChanged(e)){const i=e.form.previousValue;i&&Av(i,this,!1),sp(this.form,this,this.callSetDisabledState),this.form.updateValueAndValidity({emitEvent:!1})}A1(e,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.form&&Av(this.form,this,!1)}get path(){return[]}get control(){return this.form}viewToModelUpdate(e){this.viewModel=e,this.update.emit(e)}_isControlChanged(e){return e.hasOwnProperty("form")}}return(t=r)._ngModelWarningSentOnce=!1,t.\u0275fac=function(e){return new(e||t)(v(fi,10),v(ka,10),v(Oi,10),v(P1,8),v(ql,8))},t.\u0275dir=H({type:t,selectors:[["","formControl",""]],inputs:{form:[O.None,"formControl","form"],isDisabled:[O.None,"disabled","isDisabled"],model:[O.None,"ngModel","model"]},outputs:{update:"ngModelChange"},exportAs:["ngForm"],features:[pe([XY]),oe,Ci]}),r})();const JY={provide:sr,useExisting:$t(()=>Kl)};let Kl=(()=>{var t;class r extends sr{constructor(e,i,s){super(),this.callSetDisabledState=s,this.submitted=!1,this._onCollectionChange=()=>this._updateDomValue(),this.directives=[],this.form=null,this.ngSubmit=new A,this._setValidators(e),this._setAsyncValidators(i)}ngOnChanges(e){this._checkFormPresent(),e.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}ngOnDestroy(){this.form&&(Rv(this.form,this),this.form._onCollectionChange===this._onCollectionChange&&this.form._registerOnCollectionChange(()=>{}))}get formDirective(){return this}get control(){return this.form}get path(){return[]}addControl(e){const i=this.form.get(e.path);return sp(i,e,this.callSetDisabledState),i.updateValueAndValidity({emitEvent:!1}),this.directives.push(e),i}getControl(e){return this.form.get(e.path)}removeControl(e){Av(e.control||null,e,!1),function zY(t,r){const n=t.indexOf(r);n>-1&&t.splice(n,1)}(this.directives,e)}addFormGroup(e){this._setUpFormContainer(e)}removeFormGroup(e){this._cleanUpFormContainer(e)}getFormGroup(e){return this.form.get(e.path)}addFormArray(e){this._setUpFormContainer(e)}removeFormArray(e){this._cleanUpFormContainer(e)}getFormArray(e){return this.form.get(e.path)}updateModel(e,i){this.form.get(e.path).setValue(i)}onSubmit(e){return this.submitted=!0,N4(this.form,this.directives),this.ngSubmit.emit(e),"dialog"===e?.target?.method}onReset(){this.resetForm()}resetForm(e=void 0){this.form.reset(e),this.submitted=!1}_updateDomValue(){this.directives.forEach(e=>{const i=e.control,s=this.form.get(e.path);i!==s&&(Av(i||null,e),(t=>t instanceof R1)(s)&&(sp(s,e,this.callSetDisabledState),e.control=s))}),this.form._updateTreeValidity({emitEvent:!1})}_setUpFormContainer(e){const i=this.form.get(e.path);O4(i,e),i.updateValueAndValidity({emitEvent:!1})}_cleanUpFormContainer(e){if(this.form){const i=this.form.get(e.path);i&&function GY(t,r){return Rv(t,r)}(i,e)&&i.updateValueAndValidity({emitEvent:!1})}}_updateRegistrations(){this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm&&this._oldForm._registerOnCollectionChange(()=>{})}_updateValidators(){E1(this.form,this),this._oldForm&&Rv(this._oldForm,this)}_checkFormPresent(){}}return(t=r).\u0275fac=function(e){return new(e||t)(v(fi,10),v(ka,10),v(ql,8))},t.\u0275dir=H({type:t,selectors:[["","formGroup",""]],hostBindings:function(e,i){1&e&&T("submit",function(o){return i.onSubmit(o)})("reset",function(){return i.onReset()})},inputs:{form:[O.None,"formGroup","form"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[pe([JY]),oe,Ci]}),r})();let Zl=(()=>{var t;class r{constructor(){this._validator=bv}ngOnChanges(e){if(this.inputName in e){const i=this.normalizeInput(e[this.inputName].currentValue);this._enabled=this.enabled(i),this._validator=this._enabled?this.createValidator(i):bv,this._onChange&&this._onChange()}}validate(e){return this._validator(e)}registerOnValidatorChange(e){this._onChange=e}enabled(e){return null!=e}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275dir=H({type:t,features:[Ci]}),r})();const uQ={provide:fi,useExisting:$t(()=>ap),multi:!0};let ap=(()=>{var t;class r extends Zl{constructor(){super(...arguments),this.inputName="required",this.normalizeInput=B,this.createValidator=e=>u4}enabled(e){return e}}return(t=r).\u0275fac=(()=>{let n;return function(i){return(n||(n=Ae(t)))(i||t)}})(),t.\u0275dir=H({type:t,selectors:[["","required","","formControlName","",3,"type","checkbox"],["","required","","formControl","",3,"type","checkbox"],["","required","","ngModel","",3,"type","checkbox"]],hostVars:1,hostBindings:function(e,i){2&e&&U("required",i._enabled?"":null)},inputs:{required:"required"},features:[pe([uQ]),oe]}),r})();const pQ={provide:fi,useExisting:$t(()=>B1),multi:!0};let B1=(()=>{var t;class r extends Zl{constructor(){super(...arguments),this.inputName="minlength",this.normalizeInput=e=>function K4(t){return"number"==typeof t?t:parseInt(t,10)}(e),this.createValidator=e=>p4(e)}}return(t=r).\u0275fac=(()=>{let n;return function(i){return(n||(n=Ae(t)))(i||t)}})(),t.\u0275dir=H({type:t,selectors:[["","minlength","","formControlName",""],["","minlength","","formControl",""],["","minlength","","ngModel",""]],hostVars:1,hostBindings:function(e,i){2&e&&U("minlength",i._enabled?i.minlength:null)},inputs:{minlength:"minlength"},features:[pe([pQ]),oe]}),r})(),Q4=(()=>{var t;class r{}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275mod=Lt({type:t}),t.\u0275inj=Ot({}),r})(),Fs=(()=>{var t;class r{static withConfig(e){return{ngModule:r,providers:[{provide:ql,useValue:e.callSetDisabledState??rp}]}}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275mod=Lt({type:t}),t.\u0275inj=Ot({imports:[Q4]}),r})(),Fv=(()=>{var t;class r{static withConfig(e){return{ngModule:r,providers:[{provide:P1,useValue:e.warnOnNgModelWithFormControl??"always"},{provide:ql,useValue:e.callSetDisabledState??rp}]}}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275mod=Lt({type:t}),t.\u0275inj=Ot({imports:[Q4]}),r})();function Pt(t,r,n,e){return Nh(n)&&(e=n,n=void 0),e?Pt(t,r,n).pipe(It(i=>Yc(i)?e(...i):e(i))):new wi(i=>{X4(t,r,function s(o){i.next(arguments.length>1?Array.prototype.slice.call(arguments):o)},i,n)})}function X4(t,r,n,e,i){let s;if(function yQ(t){return t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}(t)){const o=t;t.addEventListener(r,n,i),s=()=>o.removeEventListener(r,n,i)}else if(function xQ(t){return t&&"function"==typeof t.on&&"function"==typeof t.off}(t)){const o=t;t.on(r,n),s=()=>o.off(r,n)}else if(function vQ(t){return t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}(t)){const o=t;t.addListener(r,n),s=()=>o.removeListener(r,n)}else{if(!t||!t.length)throw new TypeError("Invalid event target");for(let o=0,a=t.length;o{class t{constructor(n,e=t.now){this.SchedulerAction=n,this.now=e}schedule(n,e=0,i){return new this.SchedulerAction(this,n).schedule(i,e)}}return t.now=()=>Date.now(),t})();class oo extends J4{constructor(r,n=J4.now){super(r,()=>oo.delegate&&oo.delegate!==this?oo.delegate.now():n()),this.actions=[],this.active=!1,this.scheduled=void 0}schedule(r,n=0,e){return oo.delegate&&oo.delegate!==this?oo.delegate.schedule(r,n,e):super.schedule(r,n,e)}flush(r){const{actions:n}=this;if(this.active)return void n.push(r);let e;this.active=!0;do{if(e=r.execute(r.state,r.delay))break}while(r=n.shift());if(this.active=!1,e){for(;r=n.shift();)r.unsubscribe();throw e}}}const lp=new oo(j1);function W1(t){return!Yc(t)&&t-parseFloat(t)+1>=0}function ao(t=0,r=lp){return(!W1(t)||t<0)&&(t=0),(!r||"function"!=typeof r.schedule)&&(r=lp),new wi(n=>(n.add(r.schedule(CQ,t,{subscriber:n,counter:0,period:t})),n))}function CQ(t){const{subscriber:r,counter:n,period:e}=t;r.next(n),this.schedule({subscriber:r,counter:n+1,period:e},e)}const Ra=new class bQ extends oo{flush(r){this.active=!0,this.scheduled=void 0;const{actions:n}=this;let e,i=-1,s=n.length;r=r||n.shift();do{if(e=r.execute(r.state,r.delay))break}while(++i0?super.requestAsyncId(r,n,e):(r.actions.push(this),r.scheduled||(r.scheduled=requestAnimationFrame(()=>r.flush(null))))}recycleAsyncId(r,n,e=0){if(null!==e&&e>0||null===e&&this.delay>0)return super.recycleAsyncId(r,n,e);0===r.actions.length&&(cancelAnimationFrame(n),r.scheduled=void 0)}});function yt(){}function au(t){return t&&"function"==typeof t.schedule}class lu extends Zt{constructor(r){super(),this.parent=r}_next(r){this.parent.notifyNext(r)}_error(r){this.parent.notifyError(r),this.unsubscribe()}_complete(){this.parent.notifyComplete(),this.unsubscribe()}}class cu extends Zt{notifyNext(r){this.destination.next(r)}notifyError(r){this.destination.error(r)}notifyComplete(){this.destination.complete()}}function du(t,r){if(r.closed)return;if(t instanceof wi)return t.subscribe(r);let n;try{n=v1(t)(r)}catch(e){r.error(e)}return n}function yr(t,r,n=Number.POSITIVE_INFINITY){return"function"==typeof r?e=>e.pipe(yr((i,s)=>Dn(t(i,s)).pipe(It((o,a)=>r(i,o,s,a))),n)):("number"==typeof r&&(n=r),e=>e.lift(new DQ(t,n)))}class DQ{constructor(r,n=Number.POSITIVE_INFINITY){this.project=r,this.concurrent=n}call(r,n){return n.subscribe(new SQ(r,this.project,this.concurrent))}}class SQ extends cu{constructor(r,n,e=Number.POSITIVE_INFINITY){super(r),this.project=n,this.concurrent=e,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}_next(r){this.active0?this._next(r.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()}}function uu(t=Number.POSITIVE_INFINITY){return yr(fm,t)}function $1(t,r){return r?x1(t,r):new wi(i4(t))}function cp(...t){let r=Number.POSITIVE_INFINITY,n=null,e=t[t.length-1];return au(e)?(n=t.pop(),t.length>1&&"number"==typeof t[t.length-1]&&(r=t.pop())):"number"==typeof e&&(r=t.pop()),null===n&&1===t.length&&t[0]instanceof wi?t[0]:uu(r)($1(t,n))}function TQ(t){const{index:r,period:n,subscriber:e}=t;if(e.next(r),!e.closed){if(-1===n)return e.complete();t.index=r+1,this.schedule(t,n)}}function K(t){return r=>r.lift(new EQ(t))}class EQ{constructor(r){this.notifier=r}call(r,n){const e=new MQ(r),i=du(this.notifier,new lu(e));return i&&!e.seenValue?(e.add(i),n.subscribe(e)):e}}class MQ extends cu{constructor(r){super(r),this.seenValue=!1}notifyNext(){this.seenValue=!0,this.complete()}notifyComplete(){}}function Ai(t,r){return function(e){return e.lift(new AQ(t,r))}}class AQ{constructor(r,n){this.predicate=r,this.thisArg=n}call(r,n){return n.subscribe(new kQ(r,this.predicate,this.thisArg))}}class kQ extends Zt{constructor(r,n,e){super(r),this.predicate=n,this.thisArg=e,this.count=0}_next(r){let n;try{n=this.predicate.call(this.thisArg,r,this.count++)}catch(e){return void this.destination.error(e)}n&&this.destination.next(r)}}const Ov=(()=>{function t(){return Error.call(this),this.message="no elements in sequence",this.name="EmptyError",this}return t.prototype=Object.create(Error.prototype),t})(),q1=(()=>{function t(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return t.prototype=Object.create(Error.prototype),t})(),Yl=new wi(t=>t.complete());function Nv(t){return t?function RQ(t){return new wi(r=>t.schedule(()=>r.complete()))}(t):Yl}function Pa(t){return r=>0===t?Nv():r.lift(new PQ(t))}class PQ{constructor(r){if(this.total=r,this.total<0)throw new q1}call(r,n){return n.subscribe(new FQ(r,this.total))}}class FQ extends Zt{constructor(r,n){super(r),this.total=n,this.count=0}_next(r){const n=this.total,e=++this.count;e<=n&&(this.destination.next(r),e===n&&(this.destination.complete(),this.unsubscribe()))}}function Vv(t=null){return r=>r.lift(new OQ(t))}class OQ{constructor(r){this.defaultValue=r}call(r,n){return n.subscribe(new NQ(r,this.defaultValue))}}class NQ extends Zt{constructor(r,n){super(r),this.defaultValue=n,this.isEmpty=!0}_next(r){this.isEmpty=!1,this.destination.next(r)}_complete(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()}}function tO(t=GQ){return r=>r.lift(new VQ(t))}class VQ{constructor(r){this.errorFactory=r}call(r,n){return n.subscribe(new LQ(r,this.errorFactory))}}class LQ extends Zt{constructor(r,n){super(r),this.errorFactory=n,this.hasValue=!1}_next(r){this.hasValue=!0,this.destination.next(r)}_complete(){if(this.hasValue)return this.destination.complete();{let r;try{r=this.errorFactory()}catch(n){r=n}this.destination.error(r)}}}function GQ(){return new Ov}function nt(t,r){const n=arguments.length>=2;return e=>e.pipe(t?Ai((i,s)=>t(i,s,e)):fm,Pa(1),n?Vv(r):tO(()=>new Ov))}const iO={leading:!0,trailing:!1};function Lv(t,r=iO){return n=>n.lift(new HQ(t,!!r.leading,!!r.trailing))}class HQ{constructor(r,n,e){this.durationSelector=r,this.leading=n,this.trailing=e}call(r,n){return n.subscribe(new BQ(r,this.durationSelector,this.leading,this.trailing))}}class BQ extends cu{constructor(r,n,e,i){super(r),this.destination=r,this.durationSelector=n,this._leading=e,this._trailing=i,this._hasValue=!1}_next(r){this._hasValue=!0,this._sendValue=r,this._throttled||(this._leading?this.send():this.throttle(r))}send(){const{_hasValue:r,_sendValue:n}=this;r&&(this.destination.next(n),this.throttle(n)),this._hasValue=!1,this._sendValue=void 0}throttle(r){const n=this.tryDurationSelector(r);n&&this.add(this._throttled=du(n,new lu(this)))}tryDurationSelector(r){try{return this.durationSelector(r)}catch(n){return this.destination.error(n),null}}throttlingDone(){const{_throttled:r,_trailing:n}=this;r&&r.unsubscribe(),this._throttled=void 0,n&&this.send()}notifyNext(){this.throttlingDone()}notifyComplete(){this.throttlingDone()}}function dp(t,r=lp,n=iO){return e=>e.lift(new zQ(t,r,n.leading,n.trailing))}class zQ{constructor(r,n,e,i){this.duration=r,this.scheduler=n,this.leading=e,this.trailing=i}call(r,n){return n.subscribe(new UQ(r,this.duration,this.scheduler,this.leading,this.trailing))}}class UQ extends Zt{constructor(r,n,e,i,s){super(r),this.duration=n,this.scheduler=e,this.leading=i,this.trailing=s,this._hasTrailingValue=!1,this._trailingValue=null}_next(r){this.throttled?this.trailing&&(this._trailingValue=r,this._hasTrailingValue=!0):(this.add(this.throttled=this.scheduler.schedule(jQ,this.duration,{subscriber:this})),this.leading?this.destination.next(r):this.trailing&&(this._trailingValue=r,this._hasTrailingValue=!0))}_complete(){this._hasTrailingValue?(this.destination.next(this._trailingValue),this.destination.complete()):this.destination.complete()}clearThrottle(){const r=this.throttled;r&&(this.trailing&&this._hasTrailingValue&&(this.destination.next(this._trailingValue),this._trailingValue=null,this._hasTrailingValue=!1),r.unsubscribe(),this.remove(r),this.throttled=null)}}function jQ(t){const{subscriber:r}=t;r.clearThrottle()}function Ke(...t){let r=t[t.length-1];return au(r)?(t.pop(),x1(t,r)):$1(t)}function K1(...t){return function WQ(){return uu(1)}()(Ke(...t))}function Gv(t){return r=>r.lift(new $Q(t))}class $Q{constructor(r){this.durationSelector=r}call(r,n){return n.subscribe(new qQ(r,this.durationSelector))}}class qQ extends cu{constructor(r,n){super(r),this.durationSelector=n,this.hasValue=!1}_next(r){try{const n=this.durationSelector.call(this,r);n&&this._tryNext(r,n)}catch(n){this.destination.error(n)}}_complete(){this.emitValue(),this.destination.complete()}_tryNext(r,n){let e=this.durationSubscription;this.value=r,this.hasValue=!0,e&&(e.unsubscribe(),this.remove(e)),e=du(n,new lu(this)),e&&!e.closed&&this.add(this.durationSubscription=e)}notifyNext(){this.emitValue()}notifyComplete(){this.emitValue()}emitValue(){if(this.hasValue){const r=this.value,n=this.durationSubscription;n&&(this.durationSubscription=void 0,n.unsubscribe(),this.remove(n)),this.value=void 0,this.hasValue=!1,super._next(r)}}}function Hn(t,r,n){return function(i){return i.lift(new KQ(t,r,n))}}class KQ{constructor(r,n,e){this.nextOrObserver=r,this.error=n,this.complete=e}call(r,n){return n.subscribe(new ZQ(r,this.nextOrObserver,this.error,this.complete))}}class ZQ extends Zt{constructor(r,n,e,i){super(r),this._tapNext=yt,this._tapError=yt,this._tapComplete=yt,this._tapError=e||yt,this._tapComplete=i||yt,Nh(n)?(this._context=this,this._tapNext=n):n&&(this._context=n,this._tapNext=n.next||yt,this._tapError=n.error||yt,this._tapComplete=n.complete||yt)}_next(r){try{this._tapNext.call(this._context,r)}catch(n){return void this.destination.error(n)}this.destination.next(r)}_error(r){try{this._tapError.call(this._context,r)}catch(n){return void this.destination.error(n)}this.destination.error(r)}_complete(){try{this._tapComplete.call(this._context)}catch(r){return void this.destination.error(r)}return this.destination.complete()}}function Ar(t,r){return"function"==typeof r?n=>n.pipe(Ar((e,i)=>Dn(t(e,i)).pipe(It((s,o)=>r(e,s,i,o))))):n=>n.lift(new YQ(t))}class YQ{constructor(r){this.project=r}call(r,n){return n.subscribe(new QQ(r,this.project))}}class QQ extends cu{constructor(r,n){super(r),this.project=n,this.index=0}_next(r){let n;const e=this.index++;try{n=this.project(r,e)}catch(i){return void this.destination.error(i)}this._innerSub(n)}_innerSub(r){const n=this.innerSubscription;n&&n.unsubscribe();const e=new lu(this),i=this.destination;i.add(e),this.innerSubscription=du(r,e),this.innerSubscription!==e&&i.add(this.innerSubscription)}_complete(){const{innerSubscription:r}=this;(!r||r.closed)&&super._complete(),this.unsubscribe()}_unsubscribe(){this.innerSubscription=void 0}notifyComplete(){this.innerSubscription=void 0,this.isStopped&&super._complete()}notifyNext(r){this.destination.next(r)}}class JQ{constructor(r){if(this._skipCount=r,this._skipCount<0)throw new q1}call(r,n){return n.subscribe(0===this._skipCount?new Zt(r):new eX(r,this._skipCount))}}class eX extends Zt{constructor(r,n){super(r),this._skipCount=n,this._count=0,this._ring=new Array(n)}_next(r){const n=this._skipCount,e=this._count++;if(en.lift(new tX(t,r))}class tX{constructor(r,n){this.dueTime=r,this.scheduler=n}call(r,n){return n.subscribe(new iX(r,this.dueTime,this.scheduler))}}class iX extends Zt{constructor(r,n,e){super(r),this.dueTime=n,this.scheduler=e,this.debouncedSubscription=null,this.lastValue=null,this.hasValue=!1}_next(r){this.clearDebounce(),this.lastValue=r,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(nX,this.dueTime,this))}_complete(){this.debouncedNext(),this.destination.complete()}debouncedNext(){if(this.clearDebounce(),this.hasValue){const{lastValue:r}=this;this.lastValue=null,this.hasValue=!1,this.destination.next(r)}}clearDebounce(){const r=this.debouncedSubscription;null!==r&&(this.remove(r),r.unsubscribe(),this.debouncedSubscription=null)}}function nX(t){t.debouncedNext()}const oX=new class sX extends oo{}(class rX extends j1{constructor(r,n){super(r,n),this.scheduler=r,this.work=n}schedule(r,n=0){return n>0?super.schedule(r,n):(this.delay=n,this.state=r,this.scheduler.flush(this),this)}execute(r,n){return n>0||this.closed?super.execute(r,n):this._execute(r,n)}requestAsyncId(r,n,e=0){return null!==e&&e>0||null===e&&this.delay>0?super.requestAsyncId(r,n,e):r.flush(this)}});function up(t,r){return new wi(r?n=>r.schedule(aX,0,{error:t,subscriber:n}):n=>n.error(t))}function aX({error:t,subscriber:r}){r.error(t)}class as{constructor(r,n,e){this.kind=r,this.value=n,this.error=e,this.hasValue="N"===r}observe(r){switch(this.kind){case"N":return r.next&&r.next(this.value);case"E":return r.error&&r.error(this.error);case"C":return r.complete&&r.complete()}}do(r,n,e){switch(this.kind){case"N":return r&&r(this.value);case"E":return n&&n(this.error);case"C":return e&&e()}}accept(r,n,e){return r&&"function"==typeof r.next?this.observe(r):this.do(r,n,e)}toObservable(){switch(this.kind){case"N":return Ke(this.value);case"E":return up(this.error);case"C":return Nv()}throw new Error("unexpected notification kind value")}static createNext(r){return typeof r<"u"?new as("N",r):as.undefinedValueNotification}static createError(r){return new as("E",void 0,r)}static createComplete(){return as.completeNotification}}as.completeNotification=new as("C"),as.undefinedValueNotification=new as("N",void 0);class Hv extends Zt{constructor(r,n,e=0){super(r),this.scheduler=n,this.delay=e}static dispatch(r){const{notification:n,destination:e}=r;n.observe(e),this.unsubscribe()}scheduleMessage(r){this.destination.add(this.scheduler.schedule(Hv.dispatch,this.delay,new dX(r,this.destination)))}_next(r){this.scheduleMessage(as.createNext(r))}_error(r){this.scheduleMessage(as.createError(r)),this.unsubscribe()}_complete(){this.scheduleMessage(as.createComplete()),this.unsubscribe()}}class dX{constructor(r,n){this.notification=r,this.destination=n}}class uX extends Ie{constructor(r=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY,e){super(),this.scheduler=e,this._events=[],this._infiniteTimeWindow=!1,this._bufferSize=r<1?1:r,this._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(this._infiniteTimeWindow=!0,this.next=this.nextInfiniteTimeWindow):this.next=this.nextTimeWindow}nextInfiniteTimeWindow(r){if(!this.isStopped){const n=this._events;n.push(r),n.length>this._bufferSize&&n.shift()}super.next(r)}nextTimeWindow(r){this.isStopped||(this._events.push(new hX(this._getNow(),r)),this._trimBufferThenGetEvents()),super.next(r)}_subscribe(r){const n=this._infiniteTimeWindow,e=n?this._events:this._trimBufferThenGetEvents(),i=this.scheduler,s=e.length;let o;if(this.closed)throw new Cl;if(this.isStopped||this.hasError?o=yi.EMPTY:(this.observers.push(r),o=new X2(this,r)),i&&r.add(r=new Hv(r,i)),n)for(let a=0;an&&(o=Math.max(o,s-n)),o>0&&i.splice(0,o),i}}class hX{constructor(r,n){this.time=r,this.value=n}}function Bv(t,r=!1){return n=>n.lift(new fX(t,r))}class fX{constructor(r,n){this.predicate=r,this.inclusive=n}call(r,n){return n.subscribe(new mX(r,this.predicate,this.inclusive))}}class mX extends Zt{constructor(r,n,e){super(r),this.predicate=n,this.inclusive=e,this.index=0}_next(r){const n=this.destination;let e;try{e=this.predicate(r,this.index++)}catch(i){return void n.error(i)}this.nextOrComplete(r,e)}nextOrComplete(r,n){const e=this.destination;n?e.next(r):(this.inclusive&&e.next(r),e.complete())}}const zv=function wX(t,r){return t===r||t!=t&&r!=r},Uv=function CX(t,r){for(var n=t.length;n--;)if(zv(t[n][0],r))return n;return-1};var bX=Array.prototype.splice;function hu(t){var r=-1,n=null==t?0:t.length;for(this.clear();++r-1},hu.prototype.set=function kX(t,r){var n=this.__data__,e=Uv(n,t);return e<0?(++this.size,n.push([t,r])):n[e][1]=r,this};const jv=hu,sO="object"==typeof global&&global&&global.Object===Object&&global;var zX="object"==typeof self&&self&&self.Object===Object&&self;const gu=sO||zX||Function("return this")();var jX=gu.Symbol,oO=Object.prototype,WX=oO.hasOwnProperty,$X=oO.toString,hp=jX?jX.toStringTag:void 0;var YX=Object.prototype.toString;var aO=jX?jX.toStringTag:void 0;const $v=function tJ(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":aO&&aO in Object(t)?function qX(t){var r=WX.call(t,hp),n=t[hp];try{t[hp]=void 0;var e=!0}catch{}var i=$X.call(t);return e&&(r?t[hp]=n:delete t[hp]),i}(t):function QX(t){return YX.call(t)}(t)},Ql=function iJ(t){var r=typeof t;return null!=t&&("object"==r||"function"==r)},Z1=function aJ(t){if(!Ql(t))return!1;var r=$v(t);return"[object Function]"==r||"[object GeneratorFunction]"==r||"[object AsyncFunction]"==r||"[object Proxy]"==r},Y1=gu["__core-js_shared__"];var lO=function(){var t=/[^.]+$/.exec(Y1&&Y1.keys&&Y1.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();var hJ=Function.prototype.toString;var mJ=/^\[object .+?Constructor\]$/,wJ=RegExp("^"+Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const IJ=function CJ(t){return!(!Ql(t)||function cJ(t){return!!lO&&lO in t}(t))&&(Z1(t)?wJ:mJ).test(function gJ(t){if(null!=t){try{return hJ.call(t)}catch{}try{return t+""}catch{}}return""}(t))},Q1=function SJ(t,r){var n=function bJ(t,r){return t?.[r]}(t,r);return IJ(n)?n:void 0},cO=Q1(gu,"Map"),gp=Q1(Object,"create");var OJ=Object.prototype.hasOwnProperty;var GJ=Object.prototype.hasOwnProperty;function pu(t){var r=-1,n=null==t?0:t.length;for(this.clear();++r-1&&t%1==0&&t<=9007199254740991},ib=function zee(t){return null!=t&&wO(t.length)&&!Z1(t)};var CO="object"==typeof exports&&exports&&!exports.nodeType&&exports,IO=CO&&"object"==typeof module&&module&&!module.nodeType&&module,bO=IO&&IO.exports===CO?gu.Buffer:void 0;const DO=(bO?bO.isBuffer:void 0)||function Wee(){return!1};var SO=Function.prototype.toString,Jee=Object.prototype.hasOwnProperty,ete=SO.call(Object);var Ni={};Ni["[object Float32Array]"]=Ni["[object Float64Array]"]=Ni["[object Int8Array]"]=Ni["[object Int16Array]"]=Ni["[object Int32Array]"]=Ni["[object Uint8Array]"]=Ni["[object Uint8ClampedArray]"]=Ni["[object Uint16Array]"]=Ni["[object Uint32Array]"]=!0,Ni["[object Arguments]"]=Ni["[object Array]"]=Ni["[object ArrayBuffer]"]=Ni["[object Boolean]"]=Ni["[object DataView]"]=Ni["[object Date]"]=Ni["[object Error]"]=Ni["[object Function]"]=Ni["[object Map]"]=Ni["[object Number]"]=Ni["[object Object]"]=Ni["[object RegExp]"]=Ni["[object Set]"]=Ni["[object String]"]=Ni["[object WeakMap]"]=!1;var TO="object"==typeof exports&&exports&&!exports.nodeType&&exports,fp=TO&&"object"==typeof module&&module&&!module.nodeType&&module,nb=fp&&fp.exports===TO&&sO.process,Rte=function(){try{return fp&&fp.require&&fp.require("util").types||nb&&nb.binding&&nb.binding("util")}catch{}}(),MO=Rte&&Rte.isTypedArray;const AO=MO?function Mte(t){return function(r){return t(r)}}(MO):function Tte(t){return pp(t)&&wO(t.length)&&!!Ni[$v(t)]},rb=function Fte(t,r){if(("constructor"!==r||"function"!=typeof t[r])&&"__proto__"!=r)return t[r]};var Nte=Object.prototype.hasOwnProperty;const Lte=function Vte(t,r,n){var e=t[r];(!Nte.call(t,r)||!zv(e,n)||void 0===n&&!(r in t))&&X1(t,r,n)};var jte=/^(?:0|[1-9]\d*)$/;const kO=function Wte(t,r){var n=typeof t;return!!(r=r??9007199254740991)&&("number"==n||"symbol"!=n&&jte.test(t))&&t>-1&&t%1==0&&t0){if(++r>=800)return arguments[0]}else r=0;return t.apply(void 0,arguments)}}(fie);const Cie=wie,bie=function Iie(t,r){return Cie(function uie(t,r,n){return r=OO(void 0===r?t.length-1:r,0),function(){for(var e=arguments,i=-1,s=OO(e.length-r,0),o=Array(s);++i1?n[i-1]:void 0,o=i>2?n[2]:void 0;for(s=t.length>3&&"function"==typeof s?(i--,s):void 0,o&&function Die(t,r,n){if(!Ql(n))return!1;var e=typeof r;return!!("number"==e?ib(n)&&kO(r,n.length):"string"==e&&r in n)&&zv(n[r],t)}(n[0],n[1],o)&&(s=i<3?void 0:s,i=1),r=Object(r);++e>1|(21845&Vi)<<1;vp[Vi]=((65280&(Fa=(61680&(Fa=(52428&Fa)>>2|(13107&Fa)<<2))>>4|(3855&Fa)<<4))>>8|(255&Fa)<<8)>>1}var lo=function(t,r,n){for(var e=t.length,i=0,s=new wr(r);i>l]=c}else for(a=new wr(e),i=0;i>15-t[i]);return a},Oa=new di(288);for(Vi=0;Vi<144;++Vi)Oa[Vi]=8;for(Vi=144;Vi<256;++Vi)Oa[Vi]=9;for(Vi=256;Vi<280;++Vi)Oa[Vi]=7;for(Vi=280;Vi<288;++Vi)Oa[Vi]=8;var xp=new di(32);for(Vi=0;Vi<32;++Vi)xp[Vi]=5;var BO=lo(Oa,9,0),UO=lo(xp,5,0),yp=function(t){return(t+7)/8|0},Na=function(t,r,n){return(null==r||r<0)&&(r=0),(null==n||n>t.length)&&(n=t.length),new di(t.subarray(r,n))},WO=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Ht=function(t,r,n){var e=new Error(r||WO[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,Ht),!n)throw e;return e},co=function(t,r,n){var e=r/8|0;t[e]|=n<<=7&r,t[e+1]|=n>>8},xu=function(t,r,n){var e=r/8|0;t[e]|=n<<=7&r,t[e+1]|=n>>8,t[e+2]|=n>>16},ex=function(t,r){for(var n=[],e=0;e_&&(_=s[e].s);var x=new wr(_+1),w=tx(n[d-1],x,0);if(w>r){e=0;var E=0,M=w-r,k=1<r))break;E+=k-(1<>=M;E>0;){var q=s[e].s;x[q]=0&&E;--e){var $=s[e].s;x[$]==r&&(--x[$],++E)}w=r}return{t:new di(x),l:w}},tx=function(t,r,n){return-1==t.s?Math.max(tx(t.l,r,n+1),tx(t.r,r,n+1)):r[t.s]=n},ab=function(t){for(var r=t.length;r&&!t[--r];);for(var n=new wr(++r),e=0,i=t[0],s=1,o=function(l){n[e++]=l},a=1;a<=r;++a)if(t[a]==i&&a!=r)++s;else{if(!i&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(i),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(i);s=1,i=t[a]}return{c:n.subarray(0,e),n:r}},yu=function(t,r){for(var n=0,e=0;e>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var s=0;s4&&!Vt[_p[ti-1]];--ti);var Se,Me,Ne,$e,gr=c+5<<3,Ki=yu(i,Oa)+yu(s,xp)+o,Zi=yu(i,_)+yu(s,E)+o+14+3*ti+yu(De,Vt)+2*De[16]+3*De[17]+7*De[18];if(l>=0&&gr<=Ki&&gr<=Zi)return lb(r,d,t.subarray(l,l+c));if(co(r,d,1+(Zi15&&(co(r,d,rn[be]>>5&127),d+=rn[be]>>12)}}else Se=BO,Me=Oa,Ne=UO,$e=xp;for(be=0;be255){var kt;xu(r,d,Se[257+(kt=Hi>>18&31)]),d+=Me[kt+257],kt>7&&(co(r,d,Hi>>23&31),d+=_u[kt]);var ws=31&Hi;xu(r,d,Ne[ws]),d+=$e[ws],ws>3&&(xu(r,d,Hi>>5&8191),d+=vu[ws])}else xu(r,d,Se[Hi]),d+=Me[Hi]}return xu(r,d,Se[256]),d+Me[256]},$O=new mp([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),db=new di(0),qO=function(t,r,n,e,i,s){var o=s.z||t.length,a=new di(e+o+5*(1+Math.ceil(o/7e3))+i),l=a.subarray(e,a.length-i),c=s.l,d=7&(s.r||0);if(r){d&&(l[0]=s.r>>3);for(var g=$O[r-1],_=g>>13,x=8191&g,w=(1<7e3||Vt>24576)&&(Se>423||!c)){d=cb(t,l,0,$,ce,ge,be,Vt,ti,Re-ti,d),Vt=De=be=0,ti=Re;for(var Me=0;Me<286;++Me)ce[Me]=0;for(Me=0;Me<30;++Me)ge[Me]=0}var Ne=2,$e=0,Gi=x,Ui=Ki-Zi&32767;if(Se>2&&gr==q(Re-Ui))for(var Yi=Math.min(_,Se)-1,rn=Math.min(32767,Re),kt=Math.min(258,Se);Ui<=rn&&--Gi&&Ki!=Zi;){if(t[Re+Ne]==t[Re+Ne-Ui]){for(var Hi=0;HiNe){if(Ne=Hi,$e=Ui,Hi>Yi)break;var ws=Math.min(Ui,Hi-2),Qi=0;for(Me=0;MeQi&&(Qi=ha,Zi=Vr)}}}Ui+=(Ki=Zi)-(Zi=E[Ki])&32767}if($e){$[Vt++]=268435456|Yv[Ne]<<18|ob[$e];var ga=31&Yv[Ne],cm=31&ob[$e];be+=_u[ga]+vu[cm],++ce[257+ga],++ge[cm],jt=Re+Ne,++De}else $[Vt++]=t[Re],++ce[t[Re]]}}for(Re=Math.max(Re,jt);Re=o&&(l[d/8|0]=c,Rh=o),d=lb(l,d+1,t.subarray(Re,Rh))}s.i=o}return Na(a,0,e+yp(d)+i)},KO=function(){for(var t=new Int32Array(256),r=0;r<256;++r){for(var n=r,e=9;--e;)n=(1&n&&-306674912)^n>>>1;t[r]=n}return t}(),nx=function(t,r,n,e,i){if(!i&&(i={l:1},r.dictionary)){var s=r.dictionary.subarray(-32768),o=new di(s.length+t.length);o.set(s),o.set(t,s.length),t=o,i.w=s.length}return qO(t,null==r.level?6:r.level,null==r.mem?i.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(t.length)))):20:12+r.mem,n,e,i)},rx=function(t,r){var n={};for(var e in t)n[e]=t[e];for(var e in r)n[e]=r[e];return n},ZO=function(t,r,n){for(var e=t(),i=t.toString(),s=i.slice(i.indexOf("[")+1,i.lastIndexOf("]")).replace(/\s+/g,"").split(","),o=0;o>>=8};function ox(t,r){return nx(t,r||{},0,0)}var vb=function(t,r,n,e){for(var i in t){var s=t[i],o=r+i,a=e;Array.isArray(s)&&(a=rx(e,s[1]),s=s[0]),s instanceof di?n[o]=[s,a]:(n[o+="/"]=[new di(0),a],vb(s,o,n,e))}},o5=typeof TextEncoder<"u"&&new TextEncoder,xb=typeof TextDecoder<"u"&&new TextDecoder;try{xb.decode(db,{stream:!0})}catch{}function or(t,r){if(r){for(var n=new di(t.length),e=0;e>1)),o=0,a=function(d){s[o++]=d};for(e=0;es.length){var l=new di(o+8+(i-e<<1));l.set(s),s=l}var c=t.charCodeAt(e);c<128||r?a(c):c<2048?(a(192|c>>6),a(128|63&c)):c>55295&&c<57344?(a(240|(c=65536+(1047552&c)|1023&t.charCodeAt(++e))>>18),a(128|c>>12&63),a(128|c>>6&63),a(128|63&c)):(a(224|c>>12),a(128|c>>6&63),a(128|63&c))}return Na(s,0,o)}var Cp=function(t){var r=0;if(t)for(var n in t){var e=t[n].length;e>65535&&Ht(9),r+=e+4}return r},ax=function(t,r,n,e,i,s,o,a){var l=e.length,c=n.extra,d=a&&a.length,g=Cp(c);zi(t,r,null!=o?33639248:67324752),r+=4,null!=o&&(t[r++]=20,t[r++]=n.os),t[r]=20,r+=2,t[r++]=n.flag<<1|(s<0&&8),t[r++]=i&&8,t[r++]=255&n.compression,t[r++]=n.compression>>8;var _=new Date(null==n.mtime?Date.now():n.mtime),x=_.getFullYear()-1980;if((x<0||x>119)&&Ht(10),zi(t,r,x<<25|_.getMonth()+1<<21|_.getDate()<<16|_.getHours()<<11|_.getMinutes()<<5|_.getSeconds()>>1),r+=4,-1!=s&&(zi(t,r,n.crc),zi(t,r+4,s<0?-s-2:s),zi(t,r+8,n.size)),zi(t,r+12,l),zi(t,r+14,g),r+=16,null!=o&&(zi(t,r,d),zi(t,r+6,n.attrs),zi(t,r+10,o),r+=14),t.set(e,r),r+=l,g)for(var w in c){var E=c[w],M=E.length;zi(t,r,+w),zi(t,r+2,M),t.set(E,r+4),r+=4+M}return d&&(t.set(a,r),r+=d),r};function zie(t,r,n){n||(n=r,r={}),"function"!=typeof n&&Ht(7);var e={};vb(t,"",e,r);var i=Object.keys(e),s=i.length,o=0,a=0,l=s,c=new Array(s),d=[],g=function(){for(var M=0;M>>8;t=n},d:function(){return~t}}}(),ge=q.length;ce.p(q);var De=or(k),be=De.length,Re=$.comment,Vt=Re&&or(Re),jt=Vt&&Vt.length,ti=Cp($.extra),gr=0==$.level?0:8,Ki=function(Zi,Se){if(Zi)g(),_(Zi,null);else{var Me=Se.length;c[M]=rx($,{size:ge,crc:ce.d(),c:Se,f:De,m:Vt,u:be!=k.length||Vt&&Re.length!=jt,compression:gr}),o+=30+be+ti+Me,a+=76+2*(be+ti)+(jt||0)+Me,--s||x()}};if(be>65535&&Ki(Ht(11,0,1),null),gr)if(ge<16e4)try{Ki(null,ox(q,$))}catch(Zi){Ki(Zi,null)}else d.push(function Oie(t,r,n){return n||(n=r,r={}),"function"!=typeof n&&Ht(7),wu(t,r,[gb],function(e){return Va(ox(e.data[0],e.data[1]))},0,n)}(q,$,Ki));else Ki(null,q)},E=0;E{var t;class r{}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:()=>fe(jie),providedIn:"root"}),r})();class Uie{}let jie=(()=>{var t;class r extends yb{constructor(e,i){if(super(),this.animationModuleType=fe(m0,{optional:!0}),this._nextAnimationId=0,this._renderer=e.createRenderer(i.body,{id:"0",encapsulation:ts.None,styles:[],data:{animation:[]}}),null===this.animationModuleType&&!function Kie(t){const r=t.\u0275type;return 0===r||1===r}(this._renderer))throw new se(3600,!1)}build(e){const i=this._nextAnimationId;this._nextAnimationId++;const s=Array.isArray(e)?d5(e):e;return u5(this._renderer,null,i,"register",[s]),new Wie(i,this._renderer)}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(S_),ve(St))},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();class Wie extends Uie{constructor(r,n){super(),this._id=r,this._renderer=n}create(r,n){return new $ie(this._id,r,n||{},this._renderer)}}class $ie{constructor(r,n,e,i){this.id=r,this.element=n,this._renderer=i,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",e)}_listen(r,n){return this._renderer.listen(this.element,`@@${this.id}:${r}`,n)}_command(r,...n){u5(this._renderer,this.element,this.id,r,n)}onDone(r){this._listen("done",r)}onStart(r){this._listen("start",r)}onDestroy(r){this._listen("destroy",r)}init(){this._command("init")}hasStarted(){return this._started}play(){this._command("play"),this._started=!0}pause(){this._command("pause")}restart(){this._command("restart")}finish(){this._command("finish")}destroy(){this._command("destroy")}reset(){this._command("reset"),this._started=!1}setPosition(r){this._command("setPosition",r)}getPosition(){return function qie(t){const r=t.\u0275type;return 0===r?t:1===r?t.animationRenderer:null}(this._renderer)?.engine?.players[this.id]?.getPosition()??0}}function u5(t,r,n,e,i){t.setProperty(r,`@@${n}:${e}`,i)}class bp{constructor(r=0,n=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._originalOnDoneFns=[],this._originalOnStartFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this._position=0,this.parentPlayer=null,this.totalTime=r+n}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(r=>r()),this._onDoneFns=[])}onStart(r){this._originalOnStartFns.push(r),this._onStartFns.push(r)}onDone(r){this._originalOnDoneFns.push(r),this._onDoneFns.push(r)}onDestroy(r){this._onDestroyFns.push(r)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){queueMicrotask(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(r=>r()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(r=>r()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(r){this._position=this.totalTime?r*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(r){const n="start"==r?this._onStartFns:this._onDoneFns;n.forEach(e=>e()),n.length=0}}class h5{constructor(r){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=r;let n=0,e=0,i=0;const s=this.players.length;0==s?queueMicrotask(()=>this._onFinish()):this.players.forEach(o=>{o.onDone(()=>{++n==s&&this._onFinish()}),o.onDestroy(()=>{++e==s&&this._onDestroy()}),o.onStart(()=>{++i==s&&this._onStart()})}),this.totalTime=this.players.reduce((o,a)=>Math.max(o,a.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(r=>r()),this._onDoneFns=[])}init(){this.players.forEach(r=>r.init())}onStart(r){this._onStartFns.push(r)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(r=>r()),this._onStartFns=[])}onDone(r){this._onDoneFns.push(r)}onDestroy(r){this._onDestroyFns.push(r)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(r=>r.play())}pause(){this.players.forEach(r=>r.pause())}restart(){this.players.forEach(r=>r.restart())}finish(){this._onFinish(),this.players.forEach(r=>r.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(r=>r.destroy()),this._onDestroyFns.forEach(r=>r()),this._onDestroyFns=[])}reset(){this.players.forEach(r=>r.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(r){const n=r*this.totalTime;this.players.forEach(e=>{const i=e.totalTime?Math.min(1,n/e.totalTime):1;e.setPosition(i)})}getPosition(){const r=this.players.reduce((n,e)=>null===n||e.totalTime>n.totalTime?e:n,null);return null!=r?r.getPosition():0}beforeDestroy(){this.players.forEach(r=>{r.beforeDestroy&&r.beforeDestroy()})}triggerCallback(r){const n="start"==r?this._onStartFns:this._onDoneFns;n.forEach(e=>e()),n.length=0}}const g5=[ft({opacity:"{{startOpacity}}"}),cs("{{duration}} {{delay}} {{easing}}",ft({opacity:"{{endOpacity}}"}))],ar=de(g5,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:1,startOpacity:0}}),ds=de(g5,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,startOpacity:1}}),Ga=[ft({backfaceVisibility:"hidden",transformStyle:"preserve-3d"}),cs("{{duration}} {{delay}} {{easing}}",Ip([ft({offset:0,transform:"translateZ({{startDistance}})\n rotate3d({{rotateX}}, {{rotateY}}, {{rotateZ}}, {{startAngle}}deg)"}),ft({offset:1,transform:"translateZ({{endDistance}})\n rotate3d({{rotateX}}, {{rotateY}}, {{rotateZ}}, {{endAngle}}deg)"})]))],Cb=de(Ga,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:180,endDistance:"0px",rotateX:1,rotateY:0,rotateZ:0,startAngle:0,startDistance:"0px"}}),Ib=de(Ga,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endDistance:"0px",rotateX:1,rotateY:0,rotateZ:0,startAngle:0,startDistance:"0px",endAngle:-180}}),bb=de(Ga,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:180,endDistance:"0px",rotateZ:0,startAngle:0,startDistance:"0px",rotateX:0,rotateY:1}}),Db=de(Ga,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endDistance:"0px",rotateZ:0,startAngle:0,startDistance:"0px",endAngle:-180,rotateX:0,rotateY:1}}),Sb=de(Ga,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:180,rotateX:1,rotateY:0,rotateZ:0,startAngle:0,startDistance:"0px",endDistance:"170px"}}),Tb=de(Ga,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:180,rotateX:1,rotateY:0,rotateZ:0,startAngle:0,startDistance:"0px",endDistance:"-170px"}}),Eb=de(Ga,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:180,rotateZ:0,startAngle:0,startDistance:"0px",endDistance:"170px",rotateX:0,rotateY:1}}),Mb=de(Ga,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:180,rotateZ:0,startAngle:0,startDistance:"0px",endDistance:"-170px",rotateX:0,rotateY:1}}),p5=[ft({opacity:"{{ startOpacity }}",height:"{{ startHeight }}",paddingBlock:"{{ startPadding }}"}),cs("{{duration}} {{delay}} {{easing}}",ft({opacity:"{{ endOpacity }}",height:"{{ endHeight }}",paddingBlock:"{{ endPadding }}"}))],Xl=de(p5,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",startOpacity:0,endOpacity:1,startHeight:"0px",endHeight:"*",startPadding:"0px",endPadding:"*"}}),Jl=de(p5,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",startOpacity:1,endOpacity:0,startHeight:"*",endHeight:"0px",startPadding:"*",endPadding:"0px"}}),Ns=[cs("{{duration}} {{delay}} {{easing}}",Ip([ft({offset:0,transform:"rotate(0deg) translate{{direction}}(0)",transformOrigin:"{{xPos}} {{yPos}}"}),ft({offset:.1,transform:"rotate({{endAngle}}deg) translate{{direction}}(-{{startDistance}})"}),ft({offset:.2,transform:"rotate(-{{startAngle}}deg) translate{{direction}}({{startDistance}})"}),ft({offset:.3,transform:"rotate({{startAngle}}deg) translate{{direction}}(-{{startDistance}})"}),ft({offset:.4,transform:"rotate(-{{startAngle}}deg) translate{{direction}}({{startDistance}})"}),ft({offset:.5,transform:"rotate({{startAngle}}deg) translate{{direction}}(-{{startDistance}})"}),ft({offset:.6,transform:"rotate(-{{startAngle}}deg) translate{{direction}}({{startDistance}})"}),ft({offset:.7,transform:"rotate({{startAngle}}deg) translate{{direction}}(-{{startDistance}})"}),ft({offset:.8,transform:"rotate(-{{endAngle}}deg) translate{{direction}}({{endDistance}})"}),ft({offset:.9,transform:"rotate({{endAngle}}deg) translate{{direction}}(-{{endDistance}})"}),ft({offset:1,transform:"rotate(0deg) translate{{direction}}(0)",transformOrigin:"{{xPos}} {{yPos}}"})]))],f5=de(Ns,{params:{delay:"0s",direction:"X",duration:"800ms",easing:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",endAngle:0,endDistance:"8px",startAngle:0,startDistance:"10px",xPos:"center",yPos:"center"}}),m5=de(Ns,{params:{delay:"0s",direction:"Y",duration:"800ms",easing:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",endAngle:0,endDistance:"8px",startAngle:0,startDistance:"10px",xPos:"center",yPos:"center"}}),_5=de(Ns,{params:{delay:"0s",direction:"X",duration:"800ms",easing:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",xPos:"center",endAngle:2,endDistance:"0",startAngle:4,startDistance:"0",yPos:"top"}}),v5=de(Ns,{params:{delay:"0s",duration:"800ms",easing:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",xPos:"center",direction:"Y",endAngle:2,endDistance:"0",startAngle:4,startDistance:"0",yPos:"bottom"}}),x5=de(Ns,{params:{delay:"0s",duration:"800ms",easing:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",direction:"Y",endAngle:2,endDistance:"0",startAngle:4,startDistance:"0",xPos:"right",yPos:"center"}}),y5=de(Ns,{params:{delay:"0s",duration:"800ms",easing:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",direction:"Y",endAngle:2,endDistance:"0",startAngle:4,startDistance:"0",xPos:"left",yPos:"center"}}),w5=de(Ns,{params:{delay:"0s",duration:"800ms",easing:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",direction:"Y",endAngle:8,endDistance:"0",startAngle:10,startDistance:"0",xPos:"center",yPos:"center"}}),C5=de(Ns,{params:{delay:"0s",duration:"800ms",easing:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",direction:"Y",endAngle:2,endDistance:"0",startAngle:4,startDistance:"0",xPos:"right",yPos:"top"}}),I5=de(Ns,{params:{delay:"0s",duration:"800ms",easing:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",direction:"Y",endAngle:2,endDistance:"0",startAngle:4,startDistance:"0",xPos:"right",yPos:"bottom"}}),b5=de(Ns,{params:{delay:"0s",duration:"800ms",easing:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",direction:"Y",endAngle:2,endDistance:"0",startAngle:4,startDistance:"0",xPos:"left",yPos:"bottom"}}),D5=de(Ns,{params:{delay:"0s",duration:"800ms",easing:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",direction:"Y",endAngle:2,endDistance:"0",startAngle:4,startDistance:"0",xPos:"left",yPos:"top"}}),Zie=[ft({animationTimingFunction:"ease-out",transform:"scale(1)",transformOrigin:"center center"}),cs("{{duration}} {{delay}} {{easing}}",Ip([ft({animationTimingFunction:"ease-in",offset:.1,transform:"scale(0.91)"}),ft({animationTimingFunction:"ease-out",offset:.17,transform:"scale(0.98)"}),ft({animationTimingFunction:"ease-in",offset:.33,transform:"scale(0.87)"}),ft({animationTimingFunction:"ease-out",offset:.45,transform:"scale(1)"})]))],S5=[cs("{{duration}} {{delay}} {{easing}}",Ip([ft({offset:0,transform:"scale({{fromScale}})"}),ft({offset:.5,transform:"scale({{toScale}})"}),ft({offset:1,transform:"scale({{fromScale}})"})]))],Yie=[cs("{{duration}} {{delay}} {{easing}}",Ip([ft({offset:0,opacity:.8,transform:"scale({{fromScale}})"}),ft({offset:.8,opacity:0,transform:"scale({{midScale}})"}),ft({offset:1,opacity:0,transform:"scale({{toScale}})"})]))],T5=de(S5,{params:{delay:"0s",duration:".5s",easing:"ease-in-out",fromScale:1,toScale:1.1}}),E5=de(S5,{params:{delay:"0s",duration:".5s",easing:"ease-in-out",fromScale:1,toScale:.9}}),M5=de(Zie,{params:{delay:"0s",duration:"1.5s",easing:"ease-in-out"}}),A5=de(Yie,{params:{delay:"0s",duration:".8s",easing:"ease-in-out",fromScale:.2,midScale:1.2,toScale:2.2}}),ki=[ft({opacity:"{{startOpacity}}",transform:"rotate3d({{rotateX}},{{rotateY}},{{rotateZ}},{{startAngle}}deg)",transformOrigin:"{{xPos}} {{yPos}}"}),cs("{{duration}} {{delay}} {{easing}}",ft({offset:0,opacity:"{{endOpacity}}",transform:"rotate3d({{rotateX}},{{rotateY}},{{rotateZ}},{{endAngle}}deg)",transformOrigin:"{{xPos}} {{yPos}}"}))],k5=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,startOpacity:0,xPos:"center",yPos:"center"}}),R5=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,xPos:"center",yPos:"center",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1}}),Ab=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,startOpacity:0,yPos:"center",xPos:"top"}}),kb=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,yPos:"center",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,xPos:"top"}}),Rb=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,startOpacity:0,yPos:"center",xPos:"right"}}),Pb=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,yPos:"center",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,xPos:"right"}}),Fb=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,startOpacity:0,yPos:"center",xPos:"bottom"}}),Ob=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,yPos:"center",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,xPos:"bottom"}}),Nb=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,startOpacity:0,yPos:"center",xPos:"left"}}),Vb=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,yPos:"center",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,xPos:"left"}}),dx=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,startOpacity:0,xPos:"right",yPos:"top"}}),ux=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,xPos:"right",yPos:"top"}}),hx=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,startOpacity:0,xPos:"right",yPos:"bottom"}}),gx=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,xPos:"right",yPos:"bottom"}}),px=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,startOpacity:0,xPos:"left",yPos:"bottom"}}),fx=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,xPos:"left",yPos:"bottom"}}),mx=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,startOpacity:0,xPos:"left",yPos:"top"}}),_x=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,rotateX:0,rotateY:0,rotateZ:1,startAngle:-360,easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,xPos:"left",yPos:"top"}}),P5=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,startAngle:-360,startOpacity:0,xPos:"center",yPos:"center",rotateX:1,rotateY:1,rotateZ:0}}),F5=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,startAngle:-360,xPos:"center",yPos:"center",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,rotateX:1,rotateY:1,rotateZ:0}}),O5=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,startAngle:-360,startOpacity:0,xPos:"center",yPos:"center",rotateX:-1,rotateY:1,rotateZ:0}}),N5=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,startAngle:-360,xPos:"center",yPos:"center",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,rotateX:-1,rotateY:1,rotateZ:0}}),V5=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,startAngle:-360,startOpacity:0,xPos:"center",yPos:"center",rotateX:0,rotateY:1,rotateZ:0}}),L5=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,startAngle:-360,xPos:"center",yPos:"center",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,rotateX:0,rotateY:1,rotateZ:0}}),G5=de(ki,{params:{delay:"0s",duration:"600ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endAngle:0,endOpacity:1,startAngle:-360,startOpacity:0,xPos:"center",yPos:"center",rotateX:1,rotateY:0,rotateZ:0}}),H5=de(ki,{params:{delay:"0s",duration:"600ms",endAngle:0,startAngle:-360,xPos:"center",yPos:"center",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,rotateX:1,rotateY:0,rotateZ:0}}),ni=[ft({opacity:"{{startOpacity}}",transform:"scale{{direction}}({{fromScale}})",transformOrigin:"{{xPos}} {{yPos}}"}),cs("{{duration}} {{delay}} {{easing}}",ft({opacity:"{{endOpacity}}",transform:"scale{{direction}}({{toScale}})",transformOrigin:"{{xPos}} {{yPos}}"}))],Dp=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromScale:.5,startOpacity:0,toScale:1,xPos:"50%",yPos:"50%"}}),vx=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromScale:.5,startOpacity:0,toScale:1,xPos:"0",yPos:"100%"}}),B5=de(ni,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,startOpacity:0,toScale:1,xPos:"50%",yPos:"50%",direction:"Y",fromScale:.4}}),Lb=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromScale:.5,startOpacity:0,toScale:1,xPos:"50%",yPos:"0"}}),Gb=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromScale:.5,startOpacity:0,toScale:1,xPos:"0",yPos:"50%"}}),ec=de(ni,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,startOpacity:0,toScale:1,direction:"Y",fromScale:.4,xPos:"100%",yPos:"0"}}),xx=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromScale:.5,startOpacity:0,toScale:1,xPos:"100%",yPos:"0"}}),yx=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromScale:.5,startOpacity:0,toScale:1,xPos:"0",yPos:"0"}}),Sp=de(ni,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,startOpacity:0,toScale:1,direction:"Y",fromScale:.4,xPos:"0",yPos:"100%"}}),Hb=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromScale:.5,startOpacity:0,toScale:1,xPos:"100%",yPos:"50%"}}),z5=de(ni,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,startOpacity:0,toScale:1,xPos:"50%",yPos:"50%",direction:"X",fromScale:.4}}),wx=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromScale:.5,startOpacity:0,toScale:1,xPos:"100%",yPos:"100%"}}),Cx=de(ni,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,startOpacity:0,toScale:1,direction:"X",fromScale:.4,xPos:"0",yPos:"0"}}),Bb=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromScale:.5,startOpacity:0,toScale:1,xPos:"50%",yPos:"100%"}}),Ix=de(ni,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,startOpacity:0,toScale:1,direction:"X",fromScale:.4,xPos:"100%",yPos:"100%"}}),U5=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",xPos:"50%",yPos:"50%",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,toScale:.5}}),bx=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,toScale:.5,xPos:"0",yPos:"100%"}}),Dx=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,toScale:.5,xPos:"100%",yPos:"100%"}}),j5=de(ni,{params:{delay:"0s",duration:"350ms",xPos:"50%",yPos:"50%",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,direction:"Y",toScale:.3}}),Cu=de(ni,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,direction:"Y",toScale:.3,xPos:"100%",yPos:"0"}}),Sx=de(ni,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,direction:"Y",toScale:.3,xPos:"0",yPos:"100%"}}),zb=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,toScale:.5,xPos:"50%",yPos:"0"}}),Ub=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,toScale:.5,xPos:"0",yPos:"50%"}}),Tx=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,toScale:.5,xPos:"100%",yPos:"0"}}),Ex=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,toScale:.5,xPos:"0",yPos:"0"}}),jb=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,toScale:.5,xPos:"100%",yPos:"50%"}}),Wb=de(ni,{params:{delay:"0s",direction:"",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,toScale:.5,xPos:"50%",yPos:"100%"}}),W5=de(ni,{params:{delay:"0s",duration:"350ms",xPos:"50%",yPos:"50%",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,direction:"X",toScale:.3}}),Mx=de(ni,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,direction:"X",toScale:.3,xPos:"0",yPos:"0"}}),Ax=de(ni,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",endOpacity:0,fromScale:1,startOpacity:1,direction:"X",toScale:.3,xPos:"100%",yPos:"100%"}}),lr=[ft({opacity:"{{startOpacity}}",transform:"{{fromPosition}}"}),cs("{{duration}} {{delay}} {{easing}}",ft({opacity:"{{endOpacity}}",transform:"{{toPosition}}"}))],kx=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromPosition:"translateY(-500px)",startOpacity:0,toPosition:"translateY(0)"}}),tc=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromPosition:"translateX(-500px)",startOpacity:0,toPosition:"translateY(0)"}}),Iu=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromPosition:"translateX(500px)",startOpacity:0,toPosition:"translateY(0)"}}),Rx=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,fromPosition:"translateY(500px)",startOpacity:0,toPosition:"translateY(0)"}}),Px=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,startOpacity:0,fromPosition:"translateY(-500px) translateX(500px)",toPosition:"translateY(0) translateX(0)"}}),Fx=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,startOpacity:0,fromPosition:"translateY(-500px) translateX(-500px)",toPosition:"translateY(0) translateX(0)"}}),Ox=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,startOpacity:0,fromPosition:"translateY(500px) translateX(500px)",toPosition:"translateY(0) translateX(0)"}}),Nx=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",endOpacity:1,startOpacity:0,fromPosition:"translateY(500px) translateX(-500px)",toPosition:"translateY(0) translateX(0)"}}),Vx=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,fromPosition:"translateY(0)",startOpacity:1,toPosition:"translateY(-500px)"}}),$b=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,fromPosition:"translateY(0)",startOpacity:1,toPosition:"translateX(500px)"}}),Lx=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,fromPosition:"translateY(0)",startOpacity:1,toPosition:"translateY(500px)"}}),qb=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,fromPosition:"translateY(0)",startOpacity:1,toPosition:"translateX(-500px)"}}),Gx=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,fromPosition:"translateY(0) translateX(0)",toPosition:"translateY(-500px) translateX(500px)"}}),Hx=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,fromPosition:"translateY(0) translateX(0)",toPosition:"translateY(500px) translateX(500px)"}}),Bx=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,fromPosition:"translateY(0) translateX(0)",toPosition:"translateY(500px) translateX(-500px)"}}),zx=de(lr,{params:{delay:"0s",duration:"350ms",easing:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",endOpacity:0,startOpacity:1,fromPosition:"translateY(0) translateX(0)",toPosition:"translateY(-500px) translateX(-500px)"}}),cr=[ft({opacity:"{{startOpacity}}",transform:"rotate{{direction}}({{startAngle}}deg)",transformOrigin:"{{xPos}} {{yPos}}"}),cs("{{duration}} {{delay}} {{easing}}",ft({opacity:"{{endOpacity}}",transform:"rotate{{direction}}({{endAngle}}deg)",transformOrigin:"{{xPos}} {{yPos}}"}))],Kb=de(cr,{params:{delay:"0s",direction:"X",duration:".5s",easing:"cubic-bezier(0.175, 0.885, 0.320, 1.275)",endAngle:0,endOpacity:1,startAngle:-100,startOpacity:0,xPos:"top",yPos:"center"}}),Zb=de(cr,{params:{delay:"0s",duration:".5s",easing:"cubic-bezier(0.175, 0.885, 0.320, 1.275)",endAngle:0,endOpacity:1,startAngle:-100,startOpacity:0,direction:"Y",xPos:"center",yPos:"right"}}),Yb=de(cr,{params:{delay:"0s",direction:"X",duration:".5s",easing:"cubic-bezier(0.175, 0.885, 0.320, 1.275)",endAngle:0,endOpacity:1,startOpacity:0,yPos:"center",startAngle:100,xPos:"bottom"}}),Qb=de(cr,{params:{delay:"0s",duration:".5s",easing:"cubic-bezier(0.175, 0.885, 0.320, 1.275)",endAngle:0,endOpacity:1,startOpacity:0,direction:"Y",startAngle:100,xPos:"center",yPos:"left"}}),Xb=de(cr,{params:{delay:"0s",direction:"X",easing:"cubic-bezier(0.175, 0.885, 0.320, 1.275)",endAngle:0,endOpacity:1,startOpacity:0,xPos:"top",yPos:"center",duration:".6s",startAngle:70}}),Jb=de(cr,{params:{delay:"0s",easing:"cubic-bezier(0.175, 0.885, 0.320, 1.275)",endAngle:0,endOpacity:1,startOpacity:0,direction:"Y",duration:".6s",startAngle:70,xPos:"center",yPos:"right"}}),eD=de(cr,{params:{delay:"0s",direction:"X",easing:"cubic-bezier(0.175, 0.885, 0.320, 1.275)",endAngle:0,endOpacity:1,startOpacity:0,yPos:"center",duration:".6s",startAngle:-70,xPos:"bottom"}}),tD=de(cr,{params:{delay:"0s",easing:"cubic-bezier(0.175, 0.885, 0.320, 1.275)",endAngle:0,endOpacity:1,startOpacity:0,direction:"Y",duration:".6s",startAngle:-70,xPos:"center",yPos:"left"}}),iD=de(cr,{params:{delay:"0s",direction:"X",xPos:"top",yPos:"center",duration:".55s",easing:"cubic-bezier(0.600, -0.280, 0.735, 0.045)",endAngle:70,endOpacity:0,startAngle:0,startOpacity:1}}),nD=de(cr,{params:{delay:"0s",duration:".55s",easing:"cubic-bezier(0.600, -0.280, 0.735, 0.045)",endAngle:70,endOpacity:0,startAngle:0,startOpacity:1,direction:"Y",xPos:"center",yPos:"right"}}),rD=de(cr,{params:{delay:"0s",direction:"X",yPos:"center",duration:".55s",easing:"cubic-bezier(0.600, -0.280, 0.735, 0.045)",endOpacity:0,startAngle:0,startOpacity:1,endAngle:-70,xPos:"bottom"}}),sD=de(cr,{params:{delay:"0s",duration:".55s",easing:"cubic-bezier(0.600, -0.280, 0.735, 0.045)",endOpacity:0,startAngle:0,startOpacity:1,direction:"Y",endAngle:-70,xPos:"center",yPos:"left"}}),oD=de(cr,{params:{delay:"0s",direction:"X",xPos:"top",yPos:"center",easing:"cubic-bezier(0.600, -0.280, 0.735, 0.045)",endOpacity:0,startAngle:0,startOpacity:1,duration:".45s",endAngle:-100}}),aD=de(cr,{params:{delay:"0s",easing:"cubic-bezier(0.600, -0.280, 0.735, 0.045)",endOpacity:0,startAngle:0,startOpacity:1,direction:"Y",duration:".45s",endAngle:-100,xPos:"center",yPos:"right"}}),lD=de(cr,{params:{delay:"0s",direction:"X",yPos:"center",easing:"cubic-bezier(0.600, -0.280, 0.735, 0.045)",endOpacity:0,startAngle:0,startOpacity:1,duration:".45s",endAngle:100,xPos:"bottom"}}),cD=de(cr,{params:{delay:"0s",easing:"cubic-bezier(0.600, -0.280, 0.735, 0.045)",endOpacity:0,startAngle:0,startOpacity:1,direction:"Y",duration:".45s",endAngle:100,xPos:"center",yPos:"left"}});class Ux{constructor(){this.oppositeAnimation=new Map([[ar,ar],[ds,ds],[Cb,Ib],[Ib,Cb],[Db,bb],[bb,Db],[Sb,Tb],[Tb,Sb],[Eb,Mb],[Mb,Eb],[Xl,Xl],[Jl,Jl],[M5,M5],[T5,E5],[E5,T5],[A5,A5],[f5,f5],[m5,m5],[_5,_5],[v5,v5],[x5,x5],[y5,y5],[w5,w5],[C5,C5],[I5,I5],[b5,b5],[D5,D5],[k5,k5],[R5,R5],[Ab,Fb],[kb,Ob],[Rb,Nb],[Pb,Vb],[Nb,Rb],[Vb,Pb],[Fb,Ab],[Ob,kb],[dx,px],[ux,fx],[hx,mx],[gx,_x],[px,dx],[fx,ux],[mx,hx],[_x,gx],[P5,P5],[F5,F5],[O5,O5],[N5,N5],[V5,V5],[L5,L5],[G5,G5],[H5,H5],[Lb,Bb],[zb,Wb],[Hb,Gb],[jb,Ub],[Bb,Lb],[Wb,zb],[Gb,Hb],[Ub,jb],[Dp,Dp],[U5,U5],[xx,vx],[Tx,bx],[wx,yx],[Dx,Ex],[vx,xx],[bx,Tx],[yx,wx],[Ex,Dx],[ec,Sp],[Cu,Sx],[Sp,ec],[Sx,Cu],[B5,B5],[j5,j5],[z5,z5],[W5,W5],[Cx,Ix],[Mx,Ax],[Ix,Cx],[Ax,Mx],[kx,Rx],[Vx,Lx],[Iu,tc],[$b,qb],[Rx,kx],[Lx,Vx],[tc,Iu],[qb,$b],[Px,Nx],[Gx,Bx],[Ox,Fx],[Hx,zx],[Nx,Px],[Bx,Gx],[Fx,Ox],[zx,Hx],[Kb,Yb],[iD,rD],[Zb,Qb],[nD,sD],[Qb,Zb],[sD,nD],[Yb,Kb],[rD,iD],[Xb,eD],[oD,lD],[Jb,tD],[aD,cD],[eD,Xb],[lD,oD],[tD,Jb],[cD,aD]]),this.horizontalAnimations=[Db,bb,Eb,Mb,Rb,Pb,Nb,Vb,dx,ux,hx,gx,px,fx,mx,_x,Hb,jb,Gb,Ub,xx,Tx,wx,Dx,vx,bx,yx,Ex,Cx,Mx,Ix,Ax,Iu,$b,tc,qb,Px,Gx,Ox,Hx,Nx,Bx,Fx,zx,Zb,nD,Qb,sD,Jb,aD,tD,cD],this.verticalAnimations=[Cb,Ib,Sb,Tb,Xl,Jl,Ab,kb,Fb,Ob,dx,ux,hx,gx,px,fx,mx,_x,Lb,zb,Bb,Wb,xx,Tx,wx,Dx,vx,bx,yx,Ex,ec,Cu,Sp,Sx,kx,Vx,Rx,Lx,Px,Gx,Ox,Hx,Nx,Bx,Fx,zx,Kb,iD,Yb,rD,Xb,oD,eD,lD]}static instance(){return this._instance||(this._instance=new this)}reverseAnimationResolver(r){return this.oppositeAnimation.get(r)??r}isHorizontalAnimation(r){return this.horizontalAnimations.includes(r)}isVerticalAnimation(r){return this.verticalAnimations.includes(r)}}class Qie extends bK{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class dD extends Qie{static makeCurrent(){!function IK(t){CF??=t}(new dD)}onAndCancel(r,n,e){return r.addEventListener(n,e),()=>{r.removeEventListener(n,e)}}dispatchEvent(r,n){r.dispatchEvent(n)}remove(r){r.parentNode&&r.parentNode.removeChild(r)}createElement(r,n){return(n=n||this.getDefaultDocument()).createElement(r)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(r){return r.nodeType===Node.ELEMENT_NODE}isShadowRoot(r){return r instanceof DocumentFragment}getGlobalEventTarget(r,n){return"window"===n?window:"document"===n?r:"body"===n?r.body:null}getBaseHref(r){const n=function Xie(){return Tp=Tp||document.querySelector("base"),Tp?Tp.getAttribute("href"):null}();return null==n?null:function Jie(t){return new URL(t,document.baseURI).pathname}(n)}resetBaseElement(){Tp=null}getUserAgent(){return window.navigator.userAgent}getCookie(r){return VF(document.cookie,r)}}let Tp=null,tne=(()=>{var t;class r{build(){return new XMLHttpRequest}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();const jx=new Ce("");let $5=(()=>{var t;class r{constructor(e,i){this._zone=i,this._eventNameToPlugin=new Map,e.forEach(s=>{s.manager=this}),this._plugins=e.slice().reverse()}addEventListener(e,i,s){return this._findPluginFor(i).addEventListener(e,i,s)}getZone(){return this._zone}_findPluginFor(e){let i=this._eventNameToPlugin.get(e);if(i)return i;if(i=this._plugins.find(o=>o.supports(e)),!i)throw new se(5101,!1);return this._eventNameToPlugin.set(e,i),i}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(jx),ve(Oe))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();class uD{constructor(r){this._doc=r}}const hD="ng-app-id";let q5=(()=>{var t;class r{constructor(e,i,s,o={}){this.doc=e,this.appId=i,this.nonce=s,this.platformId=o,this.styleRef=new Map,this.hostNodes=new Set,this.styleNodesInDOM=this.collectServerRenderedStyles(),this.platformIsServer=$F(o),this.resetHostNodes()}addStyles(e){for(const i of e)1===this.changeUsageCount(i,1)&&this.onStyleAdded(i)}removeStyles(e){for(const i of e)this.changeUsageCount(i,-1)<=0&&this.onStyleRemoved(i)}ngOnDestroy(){const e=this.styleNodesInDOM;e&&(e.forEach(i=>i.remove()),e.clear());for(const i of this.getAllStyles())this.onStyleRemoved(i);this.resetHostNodes()}addHost(e){this.hostNodes.add(e);for(const i of this.getAllStyles())this.addStyleToHost(e,i)}removeHost(e){this.hostNodes.delete(e)}getAllStyles(){return this.styleRef.keys()}onStyleAdded(e){for(const i of this.hostNodes)this.addStyleToHost(i,e)}onStyleRemoved(e){const i=this.styleRef;i.get(e)?.elements?.forEach(s=>s.remove()),i.delete(e)}collectServerRenderedStyles(){const e=this.doc.head?.querySelectorAll(`style[${hD}="${this.appId}"]`);if(e?.length){const i=new Map;return e.forEach(s=>{null!=s.textContent&&i.set(s.textContent,s)}),i}return null}changeUsageCount(e,i){const s=this.styleRef;if(s.has(e)){const o=s.get(e);return o.usage+=i,o.usage}return s.set(e,{usage:i,elements:[]}),i}getStyleElement(e,i){const s=this.styleNodesInDOM,o=s?.get(i);if(o?.parentNode===e)return s.delete(i),o.removeAttribute(hD),o;{const a=this.doc.createElement("style");return this.nonce&&a.setAttribute("nonce",this.nonce),a.textContent=i,this.platformIsServer&&a.setAttribute(hD,this.appId),e.appendChild(a),a}}addStyleToHost(e,i){const s=this.getStyleElement(e,i),o=this.styleRef,a=o.get(i)?.elements;a?a.push(s):o.set(i,{elements:[s],usage:1})}resetHostNodes(){const e=this.hostNodes;e.clear(),e.add(this.doc.head)}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(St),ve(Rm),ve(ZE,8),ve(Fo))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();const gD={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},pD=/%COMP%/g,sne=new Ce("",{providedIn:"root",factory:()=>!0});function Z5(t,r){return r.map(n=>n.replace(pD,t))}let fD=(()=>{var t;class r{constructor(e,i,s,o,a,l,c,d=null){this.eventManager=e,this.sharedStylesHost=i,this.appId=s,this.removeStylesOnCompDestroy=o,this.doc=a,this.platformId=l,this.ngZone=c,this.nonce=d,this.rendererByCompId=new Map,this.platformIsServer=$F(l),this.defaultRenderer=new mD(e,a,c,this.platformIsServer)}createRenderer(e,i){if(!e||!i)return this.defaultRenderer;this.platformIsServer&&i.encapsulation===ts.ShadowDom&&(i={...i,encapsulation:ts.Emulated});const s=this.getOrCreateRenderer(e,i);return s instanceof Q5?s.applyToHost(e):s instanceof _D&&s.applyStyles(),s}getOrCreateRenderer(e,i){const s=this.rendererByCompId;let o=s.get(i.id);if(!o){const a=this.doc,l=this.ngZone,c=this.eventManager,d=this.sharedStylesHost,g=this.removeStylesOnCompDestroy,_=this.platformIsServer;switch(i.encapsulation){case ts.Emulated:o=new Q5(c,d,i,this.appId,g,a,l,_);break;case ts.ShadowDom:return new cne(c,d,e,i,a,l,this.nonce,_);default:o=new _D(c,d,i,g,a,l,_)}s.set(i.id,o)}return o}ngOnDestroy(){this.rendererByCompId.clear()}}return(t=r).\u0275fac=function(e){return new(e||t)(ve($5),ve(q5),ve(Rm),ve(sne),ve(St),ve(Fo),ve(Oe),ve(ZE))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();class mD{constructor(r,n,e,i){this.eventManager=r,this.doc=n,this.ngZone=e,this.platformIsServer=i,this.data=Object.create(null),this.throwOnSyntheticProps=!0,this.destroyNode=null}destroy(){}createElement(r,n){return n?this.doc.createElementNS(gD[n]||n,r):this.doc.createElement(r)}createComment(r){return this.doc.createComment(r)}createText(r){return this.doc.createTextNode(r)}appendChild(r,n){(Y5(r)?r.content:r).appendChild(n)}insertBefore(r,n,e){r&&(Y5(r)?r.content:r).insertBefore(n,e)}removeChild(r,n){r&&r.removeChild(n)}selectRootElement(r,n){let e="string"==typeof r?this.doc.querySelector(r):r;if(!e)throw new se(-5104,!1);return n||(e.textContent=""),e}parentNode(r){return r.parentNode}nextSibling(r){return r.nextSibling}setAttribute(r,n,e,i){if(i){n=i+":"+n;const s=gD[i];s?r.setAttributeNS(s,n,e):r.setAttribute(n,e)}else r.setAttribute(n,e)}removeAttribute(r,n,e){if(e){const i=gD[e];i?r.removeAttributeNS(i,n):r.removeAttribute(`${e}:${n}`)}else r.removeAttribute(n)}addClass(r,n){r.classList.add(n)}removeClass(r,n){r.classList.remove(n)}setStyle(r,n,e,i){i&(Vo.DashCase|Vo.Important)?r.style.setProperty(n,e,i&Vo.Important?"important":""):r.style[n]=e}removeStyle(r,n,e){e&Vo.DashCase?r.style.removeProperty(n):r.style[n]=""}setProperty(r,n,e){null!=r&&(r[n]=e)}setValue(r,n){r.nodeValue=n}listen(r,n,e){if("string"==typeof r&&!(r=Go().getGlobalEventTarget(this.doc,r)))throw new Error(`Unsupported event target ${r} for event ${n}`);return this.eventManager.addEventListener(r,n,this.decoratePreventDefault(e))}decoratePreventDefault(r){return n=>{if("__ngUnwrap__"===n)return r;!1===(this.platformIsServer?this.ngZone.runGuarded(()=>r(n)):r(n))&&n.preventDefault()}}}function Y5(t){return"TEMPLATE"===t.tagName&&void 0!==t.content}class cne extends mD{constructor(r,n,e,i,s,o,a,l){super(r,s,o,l),this.sharedStylesHost=n,this.hostEl=e,this.shadowRoot=e.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const c=Z5(i.id,i.styles);for(const d of c){const g=document.createElement("style");a&&g.setAttribute("nonce",a),g.textContent=d,this.shadowRoot.appendChild(g)}}nodeOrShadowRoot(r){return r===this.hostEl?this.shadowRoot:r}appendChild(r,n){return super.appendChild(this.nodeOrShadowRoot(r),n)}insertBefore(r,n,e){return super.insertBefore(this.nodeOrShadowRoot(r),n,e)}removeChild(r,n){return super.removeChild(this.nodeOrShadowRoot(r),n)}parentNode(r){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(r)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}}class _D extends mD{constructor(r,n,e,i,s,o,a,l){super(r,s,o,a),this.sharedStylesHost=n,this.removeStylesOnCompDestroy=i,this.styles=l?Z5(l,e.styles):e.styles}applyStyles(){this.sharedStylesHost.addStyles(this.styles)}destroy(){this.removeStylesOnCompDestroy&&this.sharedStylesHost.removeStyles(this.styles)}}class Q5 extends _D{constructor(r,n,e,i,s,o,a,l){const c=i+"-"+e.id;super(r,n,e,s,o,a,l,c),this.contentAttr=function one(t){return"_ngcontent-%COMP%".replace(pD,t)}(c),this.hostAttr=function ane(t){return"_nghost-%COMP%".replace(pD,t)}(c)}applyToHost(r){this.applyStyles(),this.setAttribute(r,this.hostAttr,"")}createElement(r,n){const e=super.createElement(r,n);return super.setAttribute(e,this.contentAttr,""),e}}let dne=(()=>{var t;class r extends uD{constructor(e){super(e)}supports(e){return!0}addEventListener(e,i,s){return e.addEventListener(i,s,!1),()=>this.removeEventListener(e,i,s)}removeEventListener(e,i,s){return e.removeEventListener(i,s)}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(St))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();const X5=["alt","control","meta","shift"],une={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},hne={alt:t=>t.altKey,control:t=>t.ctrlKey,meta:t=>t.metaKey,shift:t=>t.shiftKey};let gne=(()=>{var t;class r extends uD{constructor(e){super(e)}supports(e){return null!=r.parseEventName(e)}addEventListener(e,i,s){const o=r.parseEventName(i),a=r.eventCallback(o.fullKey,s,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Go().onAndCancel(e,o.domEventName,a))}static parseEventName(e){const i=e.toLowerCase().split("."),s=i.shift();if(0===i.length||"keydown"!==s&&"keyup"!==s)return null;const o=r._normalizeKey(i.pop());let a="",l=i.indexOf("code");if(l>-1&&(i.splice(l,1),a="code."),X5.forEach(d=>{const g=i.indexOf(d);g>-1&&(i.splice(g,1),a+=d+".")}),a+=o,0!=i.length||0===o.length)return null;const c={};return c.domEventName=s,c.fullKey=a,c}static matchEventFullKeyCode(e,i){let s=une[e.key]||e.key,o="";return i.indexOf("code.")>-1&&(s=e.code,o="code."),!(null==s||!s)&&(s=s.toLowerCase()," "===s?s="space":"."===s&&(s="dot"),X5.forEach(a=>{a!==s&&(0,hne[a])(e)&&(o+=a+".")}),o+=s,o===i)}static eventCallback(e,i,s){return o=>{r.matchEventFullKeyCode(o,e)&&s.runGuarded(()=>i(o))}}static _normalizeKey(e){return"esc"===e?"escape":e}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(St))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();function J5(t){return{appProviders:[...tN,...t?.providers??[]],platformProviders:vne}}const vne=[{provide:Fo,useValue:jF},{provide:KE,useValue:function fne(){dD.makeCurrent()},multi:!0},{provide:St,useFactory:function _ne(){return function SH(t){p0=t}(document),document},deps:[]}],xne=new Ce(""),eN=[{provide:X_,useClass:class ene{addToWindow(r){ii.getAngularTestability=(e,i=!0)=>{const s=r.findTestabilityInTree(e,i);if(null==s)throw new se(5103,!1);return s},ii.getAllAngularTestabilities=()=>r.getAllTestabilities(),ii.getAllAngularRootElements=()=>r.getAllRootElements(),ii.frameworkStabilizers||(ii.frameworkStabilizers=[]),ii.frameworkStabilizers.push(e=>{const i=ii.getAllAngularTestabilities();let s=i.length;const o=function(){s--,0==s&&e()};i.forEach(a=>{a.whenStable(o)})})}findTestabilityInTree(r,n,e){return null==n?null:r.getTestability(n)??(e?Go().isShadowRoot(n)?this.findTestabilityInTree(r,n.host,!0):this.findTestabilityInTree(r,n.parentElement,!0):null)}},deps:[]},{provide:LP,useClass:BI,deps:[Oe,zI,X_]},{provide:BI,useClass:BI,deps:[Oe,zI,X_]}],tN=[{provide:B0,useValue:"root"},{provide:Oo,useFactory:function mne(){return new Oo},deps:[]},{provide:jx,useClass:dne,multi:!0,deps:[St,Oe,Fo]},{provide:jx,useClass:gne,multi:!0,deps:[St]},fD,q5,$5,{provide:S_,useExisting:fD},{provide:qF,useClass:tne,deps:[]},[]];let yne=(()=>{var t;class r{constructor(e){}static withServerTransition(e){return{ngModule:r,providers:[{provide:Rm,useValue:e.appId}]}}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(xne,12))},t.\u0275mod=Lt({type:t}),t.\u0275inj=Ot({providers:[...tN,...eN],imports:[kZ,qq]}),r})(),wne=(()=>{var t;class r{constructor(e){this._doc=e}getTitle(){return this._doc.title}setTitle(e){this._doc.title=e||""}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(St))},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();const Dne={pan:!0,panstart:!0,panmove:!0,panend:!0,pancancel:!0,panleft:!0,panright:!0,panup:!0,pandown:!0,pinch:!0,pinchstart:!0,pinchmove:!0,pinchend:!0,pinchcancel:!0,pinchin:!0,pinchout:!0,press:!0,pressup:!0,rotate:!0,rotatestart:!0,rotatemove:!0,rotateend:!0,rotatecancel:!0,swipe:!0,swipeleft:!0,swiperight:!0,swipeup:!0,swipedown:!0,tap:!0,doubletap:!0},Ep=new Ce("HammerGestureConfig"),rN=new Ce("HammerLoader");let vD=(()=>{var t;class r{constructor(){this.events=[],this.overrides={}}buildHammer(e){const i=new Hammer(e,this.options);i.get("pinch").set({enable:!0}),i.get("rotate").set({enable:!0});for(const s in this.overrides)i.get(s).set(this.overrides[s]);return i}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})(),Sne=(()=>{var t;class r extends uD{constructor(e,i,s,o){super(e),this._config=i,this.console=s,this.loader=o,this._loaderPromise=null}supports(e){return!(!Dne.hasOwnProperty(e.toLowerCase())&&!this.isCustomEvent(e)||!window.Hammer&&!this.loader)}addEventListener(e,i,s){const o=this.manager.getZone();if(i=i.toLowerCase(),!window.Hammer&&this.loader){this._loaderPromise=this._loaderPromise||o.runOutsideAngular(()=>this.loader());let a=!1,l=()=>{a=!0};return o.runOutsideAngular(()=>this._loaderPromise.then(()=>{window.Hammer?a||(l=this.addEventListener(e,i,s)):l=()=>{}}).catch(()=>{l=()=>{}})),()=>{l()}}return o.runOutsideAngular(()=>{const a=this._config.buildHammer(e),l=function(c){o.runGuarded(function(){s(c)})};return a.on(i,l),()=>{a.off(i,l),"function"==typeof a.destroy&&a.destroy()}})}isCustomEvent(e){return this._config.events.indexOf(e)>-1}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(St),ve(Ep),ve(Y_),ve(rN,8))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})(),Tne=(()=>{var t;class r{}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275mod=Lt({type:t}),t.\u0275inj=Ot({providers:[{provide:jx,useClass:Sne,multi:!0,deps:[St,Ep,Y_,[new fd,rN]]},{provide:Ep,useClass:vD,deps:[]}]}),r})(),sN=(()=>{var t;class r{}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:function(e){let i=null;return i=e?new(e||t):ve(Ene),i},providedIn:"root"}),r})(),Ene=(()=>{var t;class r extends sN{constructor(e){super(),this._doc=e}sanitize(e,i){if(null==i)return null;switch(e){case Ur.NONE:return i;case Ur.HTML:return eo(i,"HTML")?zr(i):XM(this._doc,String(i)).toString();case Ur.STYLE:return eo(i,"Style")?zr(i):i;case Ur.SCRIPT:if(eo(i,"Script"))return zr(i);throw new se(5200,!1);case Ur.URL:return eo(i,"URL")?zr(i):o_(String(i));case Ur.RESOURCE_URL:if(eo(i,"ResourceURL"))return zr(i);throw new se(5201,!1);default:throw new se(5202,!1)}}bypassSecurityTrustHtml(e){return function XB(t){return new $B(t)}(e)}bypassSecurityTrustStyle(e){return function JB(t){return new qB(t)}(e)}bypassSecurityTrustScript(e){return function e7(t){return new KB(t)}(e)}bypassSecurityTrustUrl(e){return function t7(t){return new ZB(t)}(e)}bypassSecurityTrustResourceUrl(e){return function i7(t){return new YB(t)}(e)}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(St))},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();function bu(t,r){return yr(t,r,1)}function Ap(t){return r=>r.lift(new Mne(t))}class Mne{constructor(r){this.callback=r}call(r,n){return n.subscribe(new Ane(r,this.callback))}}class Ane extends Zt{constructor(r,n){super(r),this.add(new yi(n))}}class Wx{}class $x{}class us{constructor(r){this.normalizedNames=new Map,this.lazyUpdate=null,r?"string"==typeof r?this.lazyInit=()=>{this.headers=new Map,r.split("\n").forEach(n=>{const e=n.indexOf(":");if(e>0){const i=n.slice(0,e),s=i.toLowerCase(),o=n.slice(e+1).trim();this.maybeSetNormalizedName(i,s),this.headers.has(s)?this.headers.get(s).push(o):this.headers.set(s,[o])}})}:typeof Headers<"u"&&r instanceof Headers?(this.headers=new Map,r.forEach((n,e)=>{this.setHeaderEntries(e,n)})):this.lazyInit=()=>{this.headers=new Map,Object.entries(r).forEach(([n,e])=>{this.setHeaderEntries(n,e)})}:this.headers=new Map}has(r){return this.init(),this.headers.has(r.toLowerCase())}get(r){this.init();const n=this.headers.get(r.toLowerCase());return n&&n.length>0?n[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(r){return this.init(),this.headers.get(r.toLowerCase())||null}append(r,n){return this.clone({name:r,value:n,op:"a"})}set(r,n){return this.clone({name:r,value:n,op:"s"})}delete(r,n){return this.clone({name:r,value:n,op:"d"})}maybeSetNormalizedName(r,n){this.normalizedNames.has(n)||this.normalizedNames.set(n,r)}init(){this.lazyInit&&(this.lazyInit instanceof us?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(r=>this.applyUpdate(r)),this.lazyUpdate=null))}copyFrom(r){r.init(),Array.from(r.headers.keys()).forEach(n=>{this.headers.set(n,r.headers.get(n)),this.normalizedNames.set(n,r.normalizedNames.get(n))})}clone(r){const n=new us;return n.lazyInit=this.lazyInit&&this.lazyInit instanceof us?this.lazyInit:this,n.lazyUpdate=(this.lazyUpdate||[]).concat([r]),n}applyUpdate(r){const n=r.name.toLowerCase();switch(r.op){case"a":case"s":let e=r.value;if("string"==typeof e&&(e=[e]),0===e.length)return;this.maybeSetNormalizedName(r.name,n);const i=("a"===r.op?this.headers.get(n):void 0)||[];i.push(...e),this.headers.set(n,i);break;case"d":const s=r.value;if(s){let o=this.headers.get(n);if(!o)return;o=o.filter(a=>-1===s.indexOf(a)),0===o.length?(this.headers.delete(n),this.normalizedNames.delete(n)):this.headers.set(n,o)}else this.headers.delete(n),this.normalizedNames.delete(n)}}setHeaderEntries(r,n){const e=(Array.isArray(n)?n:[n]).map(s=>s.toString()),i=r.toLowerCase();this.headers.set(i,e),this.maybeSetNormalizedName(r,i)}forEach(r){this.init(),Array.from(this.normalizedNames.keys()).forEach(n=>r(this.normalizedNames.get(n),this.headers.get(n)))}}class kne{encodeKey(r){return aN(r)}encodeValue(r){return aN(r)}decodeKey(r){return decodeURIComponent(r)}decodeValue(r){return decodeURIComponent(r)}}const Pne=/%(\d[a-f0-9])/gi,Fne={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function aN(t){return encodeURIComponent(t).replace(Pne,(r,n)=>Fne[n]??r)}function qx(t){return`${t}`}class Ha{constructor(r={}){if(this.updates=null,this.cloneFrom=null,this.encoder=r.encoder||new kne,r.fromString){if(r.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function Rne(t,r){const n=new Map;return t.length>0&&t.replace(/^\?/,"").split("&").forEach(i=>{const s=i.indexOf("="),[o,a]=-1==s?[r.decodeKey(i),""]:[r.decodeKey(i.slice(0,s)),r.decodeValue(i.slice(s+1))],l=n.get(o)||[];l.push(a),n.set(o,l)}),n}(r.fromString,this.encoder)}else r.fromObject?(this.map=new Map,Object.keys(r.fromObject).forEach(n=>{const e=r.fromObject[n],i=Array.isArray(e)?e.map(qx):[qx(e)];this.map.set(n,i)})):this.map=null}has(r){return this.init(),this.map.has(r)}get(r){this.init();const n=this.map.get(r);return n?n[0]:null}getAll(r){return this.init(),this.map.get(r)||null}keys(){return this.init(),Array.from(this.map.keys())}append(r,n){return this.clone({param:r,value:n,op:"a"})}appendAll(r){const n=[];return Object.keys(r).forEach(e=>{const i=r[e];Array.isArray(i)?i.forEach(s=>{n.push({param:e,value:s,op:"a"})}):n.push({param:e,value:i,op:"a"})}),this.clone(n)}set(r,n){return this.clone({param:r,value:n,op:"s"})}delete(r,n){return this.clone({param:r,value:n,op:"d"})}toString(){return this.init(),this.keys().map(r=>{const n=this.encoder.encodeKey(r);return this.map.get(r).map(e=>n+"="+this.encoder.encodeValue(e)).join("&")}).filter(r=>""!==r).join("&")}clone(r){const n=new Ha({encoder:this.encoder});return n.cloneFrom=this.cloneFrom||this,n.updates=(this.updates||[]).concat(r),n}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(r=>this.map.set(r,this.cloneFrom.map.get(r))),this.updates.forEach(r=>{switch(r.op){case"a":case"s":const n=("a"===r.op?this.map.get(r.param):void 0)||[];n.push(qx(r.value)),this.map.set(r.param,n);break;case"d":if(void 0===r.value){this.map.delete(r.param);break}{let e=this.map.get(r.param)||[];const i=e.indexOf(qx(r.value));-1!==i&&e.splice(i,1),e.length>0?this.map.set(r.param,e):this.map.delete(r.param)}}}),this.cloneFrom=this.updates=null)}}class One{constructor(){this.map=new Map}set(r,n){return this.map.set(r,n),this}get(r){return this.map.has(r)||this.map.set(r,r.defaultValue()),this.map.get(r)}delete(r){return this.map.delete(r),this}has(r){return this.map.has(r)}keys(){return this.map.keys()}}function lN(t){return typeof ArrayBuffer<"u"&&t instanceof ArrayBuffer}function cN(t){return typeof Blob<"u"&&t instanceof Blob}function dN(t){return typeof FormData<"u"&&t instanceof FormData}class kp{constructor(r,n,e,i){let s;if(this.url=n,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=r.toUpperCase(),function Nne(t){switch(t){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||i?(this.body=void 0!==e?e:null,s=i):s=e,s&&(this.reportProgress=!!s.reportProgress,this.withCredentials=!!s.withCredentials,s.responseType&&(this.responseType=s.responseType),s.headers&&(this.headers=s.headers),s.context&&(this.context=s.context),s.params&&(this.params=s.params),this.transferCache=s.transferCache),this.headers??=new us,this.context??=new One,this.params){const o=this.params.toString();if(0===o.length)this.urlWithParams=n;else{const a=n.indexOf("?");this.urlWithParams=n+(-1===a?"?":ag.set(_,r.setHeaders[_]),l)),r.setParams&&(c=Object.keys(r.setParams).reduce((g,_)=>g.set(_,r.setParams[_]),c)),new kp(n,e,s,{params:c,headers:l,context:d,reportProgress:a,responseType:i,withCredentials:o})}}var Ba=function(t){return t[t.Sent=0]="Sent",t[t.UploadProgress=1]="UploadProgress",t[t.ResponseHeader=2]="ResponseHeader",t[t.DownloadProgress=3]="DownloadProgress",t[t.Response=4]="Response",t[t.User=5]="User",t}(Ba||{});class xD{constructor(r,n=Rp.Ok,e="OK"){this.headers=r.headers||new us,this.status=void 0!==r.status?r.status:n,this.statusText=r.statusText||e,this.url=r.url||null,this.ok=this.status>=200&&this.status<300}}class Kx extends xD{constructor(r={}){super(r),this.type=Ba.ResponseHeader}clone(r={}){return new Kx({headers:r.headers||this.headers,status:void 0!==r.status?r.status:this.status,statusText:r.statusText||this.statusText,url:r.url||this.url||void 0})}}class ic extends xD{constructor(r={}){super(r),this.type=Ba.Response,this.body=void 0!==r.body?r.body:null}clone(r={}){return new ic({body:void 0!==r.body?r.body:this.body,headers:r.headers||this.headers,status:void 0!==r.status?r.status:this.status,statusText:r.statusText||this.statusText,url:r.url||this.url||void 0})}}class Du extends xD{constructor(r){super(r,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${r.url||"(unknown url)"}`:`Http failure response for ${r.url||"(unknown url)"}: ${r.status} ${r.statusText}`,this.error=r.error||null}}var Rp=function(t){return t[t.Continue=100]="Continue",t[t.SwitchingProtocols=101]="SwitchingProtocols",t[t.Processing=102]="Processing",t[t.EarlyHints=103]="EarlyHints",t[t.Ok=200]="Ok",t[t.Created=201]="Created",t[t.Accepted=202]="Accepted",t[t.NonAuthoritativeInformation=203]="NonAuthoritativeInformation",t[t.NoContent=204]="NoContent",t[t.ResetContent=205]="ResetContent",t[t.PartialContent=206]="PartialContent",t[t.MultiStatus=207]="MultiStatus",t[t.AlreadyReported=208]="AlreadyReported",t[t.ImUsed=226]="ImUsed",t[t.MultipleChoices=300]="MultipleChoices",t[t.MovedPermanently=301]="MovedPermanently",t[t.Found=302]="Found",t[t.SeeOther=303]="SeeOther",t[t.NotModified=304]="NotModified",t[t.UseProxy=305]="UseProxy",t[t.Unused=306]="Unused",t[t.TemporaryRedirect=307]="TemporaryRedirect",t[t.PermanentRedirect=308]="PermanentRedirect",t[t.BadRequest=400]="BadRequest",t[t.Unauthorized=401]="Unauthorized",t[t.PaymentRequired=402]="PaymentRequired",t[t.Forbidden=403]="Forbidden",t[t.NotFound=404]="NotFound",t[t.MethodNotAllowed=405]="MethodNotAllowed",t[t.NotAcceptable=406]="NotAcceptable",t[t.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",t[t.RequestTimeout=408]="RequestTimeout",t[t.Conflict=409]="Conflict",t[t.Gone=410]="Gone",t[t.LengthRequired=411]="LengthRequired",t[t.PreconditionFailed=412]="PreconditionFailed",t[t.PayloadTooLarge=413]="PayloadTooLarge",t[t.UriTooLong=414]="UriTooLong",t[t.UnsupportedMediaType=415]="UnsupportedMediaType",t[t.RangeNotSatisfiable=416]="RangeNotSatisfiable",t[t.ExpectationFailed=417]="ExpectationFailed",t[t.ImATeapot=418]="ImATeapot",t[t.MisdirectedRequest=421]="MisdirectedRequest",t[t.UnprocessableEntity=422]="UnprocessableEntity",t[t.Locked=423]="Locked",t[t.FailedDependency=424]="FailedDependency",t[t.TooEarly=425]="TooEarly",t[t.UpgradeRequired=426]="UpgradeRequired",t[t.PreconditionRequired=428]="PreconditionRequired",t[t.TooManyRequests=429]="TooManyRequests",t[t.RequestHeaderFieldsTooLarge=431]="RequestHeaderFieldsTooLarge",t[t.UnavailableForLegalReasons=451]="UnavailableForLegalReasons",t[t.InternalServerError=500]="InternalServerError",t[t.NotImplemented=501]="NotImplemented",t[t.BadGateway=502]="BadGateway",t[t.ServiceUnavailable=503]="ServiceUnavailable",t[t.GatewayTimeout=504]="GatewayTimeout",t[t.HttpVersionNotSupported=505]="HttpVersionNotSupported",t[t.VariantAlsoNegotiates=506]="VariantAlsoNegotiates",t[t.InsufficientStorage=507]="InsufficientStorage",t[t.LoopDetected=508]="LoopDetected",t[t.NotExtended=510]="NotExtended",t[t.NetworkAuthenticationRequired=511]="NetworkAuthenticationRequired",t}(Rp||{});function yD(t,r){return{body:r,headers:t.headers,context:t.context,observe:t.observe,params:t.params,reportProgress:t.reportProgress,responseType:t.responseType,withCredentials:t.withCredentials,transferCache:t.transferCache}}let wD=(()=>{var t;class r{constructor(e){this.handler=e}request(e,i,s={}){let o;if(e instanceof kp)o=e;else{let c,d;c=s.headers instanceof us?s.headers:new us(s.headers),s.params&&(d=s.params instanceof Ha?s.params:new Ha({fromObject:s.params})),o=new kp(e,i,void 0!==s.body?s.body:null,{headers:c,context:s.context,params:d,reportProgress:s.reportProgress,responseType:s.responseType||"json",withCredentials:s.withCredentials,transferCache:s.transferCache})}const a=Ke(o).pipe(bu(c=>this.handler.handle(c)));if(e instanceof kp||"events"===s.observe)return a;const l=a.pipe(Ai(c=>c instanceof ic));switch(s.observe||"body"){case"body":switch(o.responseType){case"arraybuffer":return l.pipe(It(c=>{if(null!==c.body&&!(c.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return c.body}));case"blob":return l.pipe(It(c=>{if(null!==c.body&&!(c.body instanceof Blob))throw new Error("Response is not a Blob.");return c.body}));case"text":return l.pipe(It(c=>{if(null!==c.body&&"string"!=typeof c.body)throw new Error("Response is not a string.");return c.body}));default:return l.pipe(It(c=>c.body))}case"response":return l;default:throw new Error(`Unreachable: unhandled observe type ${s.observe}}`)}}delete(e,i={}){return this.request("DELETE",e,i)}get(e,i={}){return this.request("GET",e,i)}head(e,i={}){return this.request("HEAD",e,i)}jsonp(e,i){return this.request("JSONP",e,{params:(new Ha).append(i,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(e,i={}){return this.request("OPTIONS",e,i)}patch(e,i,s={}){return this.request("PATCH",e,yD(s,i))}post(e,i,s={}){return this.request("POST",e,yD(s,i))}put(e,i,s={}){return this.request("PUT",e,yD(s,i))}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(Wx))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();function hN(t,r){return r(t)}function zne(t,r){return(n,e)=>r.intercept(n,{handle:i=>t(i,e)})}const jne=new Ce(""),Pp=new Ce(""),gN=new Ce(""),pN=new Ce("");function Wne(){let t=null;return(r,n)=>{null===t&&(t=(fe(jne,{optional:!0})??[]).reduceRight(zne,hN));const e=fe(Ol),i=e.add();return t(r,n).pipe(Ap(()=>e.remove(i)))}}let fN=(()=>{var t;class r extends Wx{constructor(e,i){super(),this.backend=e,this.injector=i,this.chain=null,this.pendingTasks=fe(Ol);const s=fe(pN,{optional:!0});this.backend=s??e}handle(e){if(null===this.chain){const s=Array.from(new Set([...this.injector.get(Pp),...this.injector.get(gN,[])]));this.chain=s.reduceRight((o,a)=>function Une(t,r,n){return(e,i)=>ya(n,()=>r(e,s=>t(s,i)))}(o,a,this.injector),hN)}const i=this.pendingTasks.add();return this.chain(e,s=>this.backend.handle(s)).pipe(Ap(()=>this.pendingTasks.remove(i)))}}return(t=r).\u0275fac=function(e){return new(e||t)(ve($x),ve(un))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();const Yne=/^\)\]\}',?\n/;let _N=(()=>{var t;class r{constructor(e){this.xhrFactory=e}handle(e){if("JSONP"===e.method)throw new se(-2800,!1);const i=this.xhrFactory;return(i.\u0275loadImpl?Dn(i.\u0275loadImpl()):Ke(null)).pipe(Ar(()=>new wi(o=>{const a=i.build();if(a.open(e.method,e.urlWithParams),e.withCredentials&&(a.withCredentials=!0),e.headers.forEach((M,k)=>a.setRequestHeader(M,k.join(","))),e.headers.has("Accept")||a.setRequestHeader("Accept","application/json, text/plain, */*"),!e.headers.has("Content-Type")){const M=e.detectContentTypeHeader();null!==M&&a.setRequestHeader("Content-Type",M)}if(e.responseType){const M=e.responseType.toLowerCase();a.responseType="json"!==M?M:"text"}const l=e.serializeBody();let c=null;const d=()=>{if(null!==c)return c;const M=a.statusText||"OK",k=new us(a.getAllResponseHeaders()),N=function Qne(t){return"responseURL"in t&&t.responseURL?t.responseURL:/^X-Request-URL:/m.test(t.getAllResponseHeaders())?t.getResponseHeader("X-Request-URL"):null}(a)||e.url;return c=new Kx({headers:k,status:a.status,statusText:M,url:N}),c},g=()=>{let{headers:M,status:k,statusText:N,url:q}=d(),$=null;k!==Rp.NoContent&&($=typeof a.response>"u"?a.responseText:a.response),0===k&&(k=$?Rp.Ok:0);let ce=k>=200&&k<300;if("json"===e.responseType&&"string"==typeof $){const ge=$;$=$.replace(Yne,"");try{$=""!==$?JSON.parse($):null}catch(De){$=ge,ce&&(ce=!1,$={error:De,text:$})}}ce?(o.next(new ic({body:$,headers:M,status:k,statusText:N,url:q||void 0})),o.complete()):o.error(new Du({error:$,headers:M,status:k,statusText:N,url:q||void 0}))},_=M=>{const{url:k}=d(),N=new Du({error:M,status:a.status||0,statusText:a.statusText||"Unknown Error",url:k||void 0});o.error(N)};let x=!1;const w=M=>{x||(o.next(d()),x=!0);let k={type:Ba.DownloadProgress,loaded:M.loaded};M.lengthComputable&&(k.total=M.total),"text"===e.responseType&&a.responseText&&(k.partialText=a.responseText),o.next(k)},E=M=>{let k={type:Ba.UploadProgress,loaded:M.loaded};M.lengthComputable&&(k.total=M.total),o.next(k)};return a.addEventListener("load",g),a.addEventListener("error",_),a.addEventListener("timeout",_),a.addEventListener("abort",_),e.reportProgress&&(a.addEventListener("progress",w),null!==l&&a.upload&&a.upload.addEventListener("progress",E)),a.send(l),o.next({type:Ba.Sent}),()=>{a.removeEventListener("error",_),a.removeEventListener("abort",_),a.removeEventListener("load",g),a.removeEventListener("timeout",_),e.reportProgress&&(a.removeEventListener("progress",w),null!==l&&a.upload&&a.upload.removeEventListener("progress",E)),a.readyState!==a.DONE&&a.abort()}})))}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(qF))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();const bD=new Ce(""),vN=new Ce("",{providedIn:"root",factory:()=>"XSRF-TOKEN"}),xN=new Ce("",{providedIn:"root",factory:()=>"X-XSRF-TOKEN"});class yN{}let ere=(()=>{var t;class r{constructor(e,i,s){this.doc=e,this.platform=i,this.cookieName=s,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const e=this.doc.cookie||"";return e!==this.lastCookieString&&(this.parseCount++,this.lastToken=VF(e,this.cookieName),this.lastCookieString=e),this.lastToken}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(St),ve(Fo),ve(vN))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();function tre(t,r){const n=t.url.toLowerCase();if(!fe(bD)||"GET"===t.method||"HEAD"===t.method||n.startsWith("http://")||n.startsWith("https://"))return r(t);const e=fe(yN).getToken(),i=fe(xN);return null!=e&&!t.headers.has(i)&&(t=t.clone({headers:t.headers.set(i,e)})),r(t)}var za=function(t){return t[t.Interceptors=0]="Interceptors",t[t.LegacyInterceptors=1]="LegacyInterceptors",t[t.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",t[t.NoXsrfProtection=3]="NoXsrfProtection",t[t.JsonpSupport=4]="JsonpSupport",t[t.RequestsMadeViaParent=5]="RequestsMadeViaParent",t[t.Fetch=6]="Fetch",t}(za||{});const wN=new Ce(""),rc_name="pin-left",rc_value='Pin Left IconA picture depicting a pin pointed to the left.',sc_name="unpin-left",sc_value='Unpin Left IconA picture depicting a crossed-out left-pointed pin.',MN={name:"ends-with",value:'Ends With IconA picture showing three dots followed by lowercase a.',categories:["editor"],keywords:["end","character","compare","filter"]},AN={name:"equals",value:'Equals IconA picture showing the equals sign.',categories:["editor"],keywords:["equal","equals","compare","filter","equality","calculation","math"]},kN={name:"is-empty",value:'Is Empty IconA picture showing a dotted square.',categories:["editor"],keywords:["empty","box","nothing"]},RN=[{name:"bottom-percentile-records",value:'Bottom recordsShows percentile records positioned at the bottom.',categories:["editor"]},{name:"bottom-records",value:'Bottom recordsShows records positioned at the bottom.',categories:["editor"]},{name:"case-sensitive",value:'Case Sensitive IconA picture showing the letter A written in both upper and lower case.',categories:["editor"],keywords:["case","sensitive","character","text","mode","sentence","style","change","compare","filter"]},{name:"check",value:'Check IconA picture depicting a check mark.',categories:["editor"],keywords:["check","checked","mark","tick","ok","success"]},{name:"contains",value:'Contains IconA picture showing the lowercase letter A in a square box.',categories:["editor"],keywords:["contains","letter","contain","compare","filter"]},{name:"custom-filter",value:'Custom Filter IconAn icon showing that custom filter is applied.',categories:["editor"],keywords:["custom","filter"]},{name:"does-not-contain",value:'Does-Not-Contain IconA picture showing the lowercase letter A in a crossed-out square box.',categories:["editor"],keywords:["contains","character","contain","compare","filter"]},{name:"does-not-end-with",value:'Does-Not-End-With IconA picture showing crossed-out lines at the end of a square box.',categories:["editor"]},{name:"does-not-start-with",value:'Does-Not-Start-With IconA picture showing crossed-out lines at the beginning of a square box.',categories:["editor"]},{name:"end-expression",value:'End Expression IconA picture showing three dots followed by a right-pointed chevron.',categories:["editor"],keywords:["end","expression","arrow","right"]},MN,AN,{name:"exact-match",value:'Exact Match IconA picture depicting an arrow hitting bulls-eye.',categories:["editor"],keywords:["exact","match","arrow","target","goal","aim","business","dart","bullseye"]},{name:"greater-than",value:'Greater Than IconA picture showing the greater-than symbol.',categories:["editor"],keywords:["greater","more","compare","next","forward","chevron","math","inequalty","arrow"]},{name:"greater-than-or-equal",value:'Greater Than or Equal IconA picture showing the grater-than or equal symbol.',categories:["editor"],keywords:["greater","more","equal","equals","compare","math"]},{name:"is-after",value:'Is After IconA picture showing a square bracket drawn after a vertical line.',categories:["editor"],keywords:["after","comparison","before","convert","decode","render","scan"]},{name:"is-before",value:'Is Before IconA picture showing a square bracket drawn before a vertical line.',categories:["editor"],keywords:["after","comparison","before","convert","decode","render","scan"]},kN,{name:"is-false",value:'Is False IconA picture showing an encircled X symbol.',categories:["editor"],keywords:["false","true","choice","options","yes","no","check","tick","cross"]},{name:"is-not-null",value:'Is Not Null IconA picture showing a crossed-out circle.',categories:["editor"],keywords:["empty","null","void","problem","number","invalid","inoperative","none","nothing"]},{name:"is-null",value:'Is Null IconA picture showing an empty circle.',categories:["editor"],keywords:["null","circle","zero","o"]},{name:"is-true",value:'is True IconA picture showing an encircled check mark symbol.',categories:["editor"],keywords:["true","false","choice","options","yes","no","check","tick","cross"]},{name:"last-month",value:'Last Month IconA picture depicting a calendar with a back-arrow at the end.',categories:["editor"],keywords:["last","calendar","month","date","day","previous","schedule","arrow","left","page"]},{name:"last-quarter",value:'Last Quarter IconA picture depicting a quarter of a circle with an arrow pointing right.',categories:["editor"]},{name:"last-week",value:'Last Week IconA picture depicting a square with an arrow pointing down.',categories:["editor"]},{name:"last-year",value:'Last Year IconA picture depicting a calendar with an back-arrow in the middle.',categories:["editor"],keywords:["last","calendar","month","date","previous","schedule","arrow","left"]},{name:"less-than",value:'Less Than IconA picture showing the less-than symbol.',categories:["editor"],keywords:["less","smaller","compare","previous","back","chevron","math","inequalty","arrow"]},{name:"less-than-or-equal",value:'Less Than or Equal IconA picture showing the lass-than or equal symbol.',categories:["editor"],keywords:["less","smaller","equal","equals","compare","math"]},{name:"match",value:'Match IconA picture depicting two puzzle pieces fitting together.',categories:["editor"],keywords:["match","fit","puzzle","pieces","jigsaw","combination","play","game","toy"]},{name:"month",value:'Month IconA picture depicting a month calendar.',categories:["editor"]},{name:"next-month",value:'Next Month iconA picture depicting a calendar with a forward-arrow at the end.',categories:["editor"],keywords:["next","calendar","month","date","day","following","schedule","arrow","right","page"]},{name:"next-quarter",value:'Next Quarter IconA picture depicting a quarter circle with an arrow pointing right.',categories:["editor"]},{name:"next-week",value:'Next Week IconA picture depicting a square with an arrow pointing right.',categories:["editor"]},{name:"next-year",value:'Next Year iconA picture depicting a calendar with a forward-arrow in the middle.',categories:["editor"],keywords:["next","calendar","month","date","following","schedule","arrow","right"]},{name:"not-empty",value:'Not Empty IconA picture showing a crossed-out dotted square.',categories:["editor"],keywords:["empty","full"]},{name:"not-equal",value:'Not Equal IconA picture showing a crossed-out equals symbol.',categories:["editor"],keywords:["equal","equals","different","compare","filter","equality","calculation","math"]},{name:"previous-quarter",value:'Previous Quarter IconA picture depicting a quarter circle with an arrow pointing left.',categories:["editor"]},{name:"previous-week",value:'Next Week IconA picture depicting a square with an arrow pointing left.',categories:["editor"]},{name:"quarter-four",value:'Quarter Four IconA picture depicting a quarter of a circle next to a three-thirds circle.',categories:["editor"]},{name:"quarter-one",value:'Quarter One IconA picture depicting a quarter of a circle next to a three-thirds circle.',categories:["editor"]},{name:"quarter-three",value:'Quarter Three IconA picture depicting a quarter of a circle next to a three-thirds circle.',categories:["editor"]},{name:"quarter-two",value:'Quarter Two IconA picture depicting a quarter of a circle next to a three-thirds circle.',categories:["editor"]},MN,AN,kN,{name:"select-all",value:'Select All IconA picture showing tree lines and a check mark.',categories:["editor"],keywords:["all","select","check","multiple"]},{name:"start-expression",value:'Start Expression IconA picture showing a left chevron followed by three dots.',categories:["editor"],keywords:["start","expression","arrow","left"]},{name:"starts-with",value:'Starts With IconA picture showing the uppercase letter A followed by three dots.',categories:["editor"],keywords:["start","character","compare","filter"]},{name:"this-month",value:'This Month IconA picture depicting a calendar with an encircled check mark at the end.',categories:["editor"],keywords:["this","calendar","month","date","day","current","schedule","check","page","now"]},{name:"this-quarter",value:'This Quarter IconA picture depicting an arrow pointing right to a quarter of a circle.',categories:["editor"]},{name:"this-week",value:'This Quarter IconA picture depicting a square with an arrow pointing up.',categories:["editor"]},{name:"this-year",value:'This Year IconA picture depicting a stacked calendar with a check mark in the middle.',categories:["editor"],keywords:["this","calendar","month","date","current","schedule","check","now"]},{name:"today",value:'Today IconA picture depicting a calendar with a check mark in the middle.',categories:["editor"],keywords:["today","now","check","date","day","calendar","current","schedule","event"]},{name:"top-percentile-records",value:'Top Percentile Records IconShows percentile records positioned at the top.',categories:["editor"]},{name:"top-records",value:'Top Records IconShows records positioned at the top.',categories:["editor"]},{name:"ungroup",value:'Ungroup IconA picture depicting a broken box with four squares inside it.',categories:["editor"],keywords:["ungroup","exclude","extract"]},{name:"year-to-date",value:'Year To Date IconA picture depicting an year calendar.',categories:["editor"]},{name:"year",value:'Year iconA picture depicting an year calendar.',categories:["editor"]},{name:"yesterday",value:'Yesterday IconA picture depicting a calendar with a back arrow in the middle.',categories:["editor"],keywords:["yesterday","date","calendar","left","arrow","past","previous","day"]},{name:"tomorrow",value:'Tomorrow IconA picture depicting a calendar with a right-pointed arrow in the middle.',categories:["editor"],keywords:["tomorrow","date","calendar","right","arrow","future","next","day"]}];function Ve(t,r,n,e){var o,i=arguments.length,s=i<3?r:null===e?e=Object.getOwnPropertyDescriptor(r,n):e;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,r,n,e);else for(var a=t.length-1;a>=0;a--)(o=t[a])&&(s=(i<3?o(s):i>3?o(r,n,s):o(r,n))||s);return i>3&&s&&Object.defineProperty(r,n,s),s}function AD(t,r){return function(n,e){r(n,e,t)}}"function"==typeof SuppressedError&&SuppressedError;const FN={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let Qx;const Joe=new Uint8Array(16);function eae(){if(!Qx&&(Qx=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Qx))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Qx(Joe)}const zn=[];for(let t=0;t<256;++t)zn.push((t+256).toString(16).slice(1));const iae=function tae(t,r,n){if(FN.randomUUID&&!r&&!t)return FN.randomUUID();const e=(t=t||{}).random||(t.rng||eae)();if(e[6]=15&e[6]|64,e[8]=63&e[8]|128,r){n=n||0;for(let i=0;i<16;++i)r[n+i]=e[i];return r}return function ON(t,r=0){return zn[t[r+0]]+zn[t[r+1]]+zn[t[r+2]]+zn[t[r+3]]+"-"+zn[t[r+4]]+zn[t[r+5]]+"-"+zn[t[r+6]]+zn[t[r+7]]+"-"+zn[t[r+8]]+zn[t[r+9]]+"-"+zn[t[r+10]]+zn[t[r+11]]+zn[t[r+12]]+zn[t[r+13]]+zn[t[r+14]]+zn[t[r+15]]}(e)};var oc;const nae=["noLigature"],rae=["explicitLigature"],sae=["svgImage"];function oae(t,r){}function aae(t,r){1&t&&J(0)}function lae(t,r){1&t&&V(0,"div",4),2&t&&h("innerHTML",p().getSvg,JM)}function cae(t,r){1&t&&G(0)}const ri=["*"];function dae(t,r){1&t&&G(0)}function uae(t,r){if(1&t&&(f(0,"div",13),y(1,dae,1,0,"ng-container",14),m()),2&t){p();const n=P(24);u(),h("ngTemplateOutlet",n)}}function hae(t,r){1&t&&J(0,1)}function gae(t,r){1&t&&J(0,2)}function pae(t,r){1&t&&J(0,3)}const PD=t=>({"igx-input-group__upload-button":t});function fae(t,r){if(1&t){const n=z();f(0,"igx-prefix",16)(1,"button",17),T("click",function(){return I(n),b(p(2).uploadButtonHandler())}),C(2),m()()}if(2&t){const n=p(2);u(),h("displayDensity",n.displayDensity)("disabled",n.disabled)("ngClass",Ue(4,PD,n.isTypeLine)),u(),Q(" ",n.resourceStrings.igx_input_upload_button," ")}}function mae(t,r){1&t&&y(0,fae,3,6,"igx-prefix",15),2&t&&h("ngIf",p().isFileType)}function _ae(t,r){if(1&t&&(f(0,"div",19)(1,"span"),C(2),m()()),2&t){const n=p(2);h("title",n.fileNames),u(2),Y(n.fileNames)}}function vae(t,r){1&t&&y(0,_ae,3,2,"div",18),2&t&&h("ngIf",p().isFileType)}function xae(t,r){if(1&t){const n=z();f(0,"igx-suffix",21),T("click",function(){return I(n),b(p(2).clearValueHandler())})("keydown.Enter",function(){return I(n),b(p(2).clearValueHandler())}),f(1,"igx-icon"),C(2,"clear"),m()()}}function yae(t,r){if(1&t&&y(0,xae,3,0,"igx-suffix",20),2&t){const n=p();h("ngIf",n.isFileType&&n.isFilled)}}function wae(t,r){1&t&&J(0,4)}function Cae(t,r){1&t&&G(0)}function Iae(t,r){1&t&&G(0)}function bae(t,r){1&t&&G(0)}function Dae(t,r){1&t&&G(0)}function Sae(t,r){1&t&&G(0)}function Tae(t,r){1&t&&G(0)}function Eae(t,r){1&t&&G(0)}function Mae(t,r){1&t&&V(0,"div",29)}function Aae(t,r){if(1&t&&(f(0,"div",22)(1,"div",23),y(2,Cae,1,0,"ng-container",14)(3,Iae,1,0,"ng-container",14),m(),j(4),f(5,"div",24),y(6,bae,1,0,"ng-container",14),m(),W(),f(7,"div",25),y(8,Dae,1,0,"ng-container",14)(9,Sae,1,0,"ng-container",14),m(),V(10,"div",26),f(11,"div",27),y(12,Tae,1,0,"ng-container",14)(13,Eae,1,0,"ng-container",14),m(),y(14,Mae,1,0,"div",28),m()),2&t){const n=p(),e=P(8),i=P(10),s=P(4),o=P(6),a=P(12),l=P(14),c=P(16);u(2),h("ngTemplateOutlet",e),u(),h("ngTemplateOutlet",i),u(3),h("ngTemplateOutlet",s),u(2),h("ngTemplateOutlet",o),u(),h("ngTemplateOutlet",a),u(3),h("ngTemplateOutlet",l),u(),h("ngTemplateOutlet",c),u(),h("ngIf",n.hasBorder)}}function kae(t,r){1&t&&G(0)}function Rae(t,r){1&t&&G(0)}function Pae(t,r){1&t&&G(0)}function Fae(t,r){1&t&&G(0)}function Oae(t,r){1&t&&G(0)}function Nae(t,r){1&t&&G(0)}function Vae(t,r){1&t&&G(0)}function Lae(t,r){1&t&&V(0,"div",29)}function Gae(t,r){if(1&t&&(y(0,kae,1,0,"ng-container",14),f(1,"div",22)(2,"div",23),y(3,Rae,1,0,"ng-container",14)(4,Pae,1,0,"ng-container",14),m(),f(5,"div",25),y(6,Fae,1,0,"ng-container",14)(7,Oae,1,0,"ng-container",14),m(),f(8,"div",27),y(9,Nae,1,0,"ng-container",14)(10,Vae,1,0,"ng-container",14),m(),y(11,Lae,1,0,"div",28),m()),2&t){const n=p(),e=P(4),i=P(8),s=P(10),o=P(6),a=P(12),l=P(14),c=P(16);h("ngTemplateOutlet",e),u(3),h("ngTemplateOutlet",i),u(),h("ngTemplateOutlet",s),u(2),h("ngTemplateOutlet",o),u(),h("ngTemplateOutlet",a),u(2),h("ngTemplateOutlet",l),u(),h("ngTemplateOutlet",c),u(),h("ngIf",n.hasBorder)}}function Hae(t,r){1&t&&G(0)}function Bae(t,r){1&t&&G(0)}function zae(t,r){1&t&&G(0)}function Uae(t,r){1&t&&G(0)}function jae(t,r){1&t&&G(0)}function Wae(t,r){1&t&&G(0)}function $ae(t,r){1&t&&G(0)}function qae(t,r){if(1&t&&(y(0,Hae,1,0,"ng-container",14),f(1,"div",22)(2,"div",23),y(3,Bae,1,0,"ng-container",14)(4,zae,1,0,"ng-container",14),m(),y(5,Uae,1,0,"ng-container",14)(6,jae,1,0,"ng-container",14),f(7,"div",27),y(8,Wae,1,0,"ng-container",14)(9,$ae,1,0,"ng-container",14),m()()),2&t){p();const n=P(4),e=P(8),i=P(10),s=P(6),o=P(12),a=P(14),l=P(16);h("ngTemplateOutlet",n),u(3),h("ngTemplateOutlet",e),u(),h("ngTemplateOutlet",i),u(),h("ngTemplateOutlet",s),u(),h("ngTemplateOutlet",o),u(2),h("ngTemplateOutlet",a),u(),h("ngTemplateOutlet",l)}}function Kae(t,r){1&t&&G(0)}function Zae(t,r){if(1&t&&(j(0),y(1,Kae,1,0,"ng-container",14),W()),2&t){p(2);const n=P(22);u(),h("ngTemplateOutlet",n)}}function Yae(t,r){1&t&&G(0)}function Qae(t,r){if(1&t&&(j(0),y(1,Yae,1,0,"ng-container",14),W()),2&t){p(2);const n=P(20);u(),h("ngTemplateOutlet",n)}}function Xae(t,r){1&t&&G(0)}function Jae(t,r){if(1&t&&(j(0),y(1,Xae,1,0,"ng-container",14),W()),2&t){p(2);const n=P(20);u(),h("ngTemplateOutlet",n)}}function ele(t,r){1&t&&G(0)}function tle(t,r){if(1&t&&(j(0),y(1,ele,1,0,"ng-container",14),W()),2&t){p(2);const n=P(18);u(),h("ngTemplateOutlet",n)}}function ile(t,r){1&t&&(j(0,30),y(1,Zae,2,1,"ng-container",31)(2,Qae,2,1,"ng-container",31)(3,Jae,2,1,"ng-container",31)(4,tle,2,1,"ng-container",32),W()),2&t&&(h("ngSwitch",p().theme),u(),h("ngSwitchCase","bootstrap"),u(),h("ngSwitchCase","fluent"),u(),h("ngSwitchCase","indigo-design"))}const FD=[[["igx-hint"],["","igxHint",""]],[["","igxLabel",""]],[["","igxInput",""]],[["igx-prefix"],["","igxPrefix",""]],[["igx-suffix"],["","igxSuffix",""]]],OD=["igx-hint, [igxHint]","[igxLabel]","[igxInput]","igx-prefix, [igxPrefix]","igx-suffix, [igxSuffix]"],NN=["display_container"];function nle(t,r){}const rle=["horizontal_container"],Xx=["container"],sle=["checkbox"],ole=["label"],ale=["placeholderLabel"],_le=[[["igx-drop-down-item"]]],vle=["igx-drop-down-item"],xle=[[["igx-prefix"],["","igxPrefix",""]],"*",[["igx-suffix"],["","igxSuffix",""]],[["igx-divider"]]],yle=["igx-prefix, [igxPrefix]","*","igx-suffix, [igxSuffix]","igx-divider"],VN=["scrollContainer"];function wle(t,r){1&t&&(j(0),J(1),W())}const LN=["igxDirRef"],Ale=["cell"],Bt=t=>({$implicit:t}),Wle=["defaultTemplate"],$le=["imageTemplate"],qle=["initialsTemplate"],Kle=["iconTemplate"];function Zle(t,r){1&t&&J(0)}function Yle(t,r){1&t&&V(0,"div",5,6),2&t&&Z("background-image",p().getSrcUrl())}function Qle(t,r){if(1&t&&(f(0,"span"),C(1),m()),2&t){const n=p();u(),Y(n.initials.substring(0,2))}}function Xle(t,r){if(1&t&&(f(0,"igx-icon"),C(1),m()),2&t){const n=p();u(),Y(n.icon)}}function Jle(t,r){1&t&&G(0)}function ece(t,r){if(1&t&&(f(0,"span",3),C(1),m()),2&t){const n=p();u(),Y(n.value)}}function tce(t,r){if(1&t&&(f(0,"igx-icon"),C(1),m()),2&t){const n=p();u(),Y(n.icon)}}function ice(t,r){if(1&t&&(f(0,"igx-icon",4),C(1),m()),2&t){const n=p();h("family",n.iconSet)("name",n.icon),u(),Y(n.icon)}}function cce(t,r){if(1&t&&(f(0,"igx-icon"),C(1),m()),2&t){const n=p().$implicit;u(),Y(n.icon)}}function dce(t,r){if(1&t&&(f(0,"span",5),C(1),m()),2&t){const n=p().$implicit;u(),Y(n.label)}}function uce(t,r){if(1&t&&(f(0,"button",2)(1,"span"),y(2,cce,2,1,"igx-icon",3)(3,dce,2,1,"span",4),m()()),2&t){const n=r.$implicit,e=p();h("displayDensity",e.displayDensity)("selected",n.selected)("disabled",e.disabled||n.disabled)("igxButtonColor",n.color)("igxButtonBackground",n.bgcolor)("igxLabel",n.label)("igxRipple",n.ripple),U("data-togglable",n.togglable),u(),Gl("igx-button-group__item-content ",e.itemContentCssClass,""),u(),h("ngIf",n.icon),u(),h("ngIf",n.label)}}const GN=["yearsBtn"];function hce(t,r){if(1&t){const n=z();f(0,"span",3),T("monthSelection",function(i){return I(n),b(p().selectMonth(i))}),R(1,"date"),C(2),R(3,"titlecase"),m()}if(2&t){const n=r.$implicit,e=r.index,i=p();h("igxCalendarMonth",n)("date",i.date)("index",e),U("aria-label",Gt(1,6,n,"LLLL"))("tabindex",i.activeMonth===n.getMonth()?0:-1),u(2),Q(" ",ht(3,9,i.formattedMonth(n))," ")}}function gce(t,r){if(1&t){const n=z();f(0,"span",3),T("yearSelection",function(i){return I(n),b(p().selectYear(i))}),C(1),m()}if(2&t){const n=r.$implicit,e=p();h("igxCalendarYear",n)("date",e.date),u(),Q(" ",e.formattedYear(n)," ")}}function pce(t,r){1&t&&(f(0,"div",4)(1,"span"),C(2,"Wk"),m()())}function fce(t,r){if(1&t&&(f(0,"span",5),C(1),R(2,"titlecase"),m()),2&t){const n=r.$implicit;U("aria-label",n),u(),Q(" ",ht(2,2,n)," ")}}function mce(t,r){if(1&t&&(f(0,"div",8)(1,"span",9),C(2),m()()),2&t){const n=p().$implicit,e=p();u(2),Q(" ",e.getWeekNumber(n[0].date)," ")}}function _ce(t,r){if(1&t){const n=z();f(0,"igx-day-item",10),T("focus",function(){const s=I(n).$implicit;return b(p(2).activeDate=s.date.toLocaleDateString())})("dateSelection",function(i){return I(n),b(p(2).selectDay(i))}),C(1),m()}if(2&t){const n=r.$implicit,e=p(2);h("date",n)("selection",e.selection)("selected",e.isSelected(n))("isLastInRange",e.isLastInRange(n))("isFirstInRange",e.isFirstInRange(n))("isWithinRange",e.isWithinRange(n.date,!0))("disabledDates",e.disabledDates)("specialDates",e.specialDates)("outOfRangeDates",e.outOfRangeDates)("hideOutsideDays",e.hideOutsideDays),U("aria-selected",e.isSelected(n))("aria-disabled",e.isDateDisabled(n.date))("aria-label",e.isFirstInRange(n)?n.date.toDateString()+", "+e.resourceStrings.igx_calendar_range_start:e.isLastInRange(n)?n.date.toDateString()+", "+e.resourceStrings.igx_calendar_range_end:n.date.toDateString())("tabindex",e.tabIndex(n)),u(),Q(" ",e.formattedDate(n.date)," ")}}function vce(t,r){if(1&t&&(f(0,"div",0),y(1,mce,3,1,"div",6)(2,_ce,2,15,"igx-day-item",7),m()),2&t){const n=r.$implicit,e=p();u(),h("ngIf",e.showWeekNumbers),u(),h("ngForOf",n)("ngForTrackBy",e.dateTracker)}}const HN=["months"],BN=["decade"],ND=["days"],xce=["prevMonthBtn"],yce=["nextMonthBtn"],wce=["monthsBtn"];function Cce(t,r){if(1&t&&(f(0,"span"),C(1),m(),f(2,"span"),C(3),m()),2&t){const n=p();u(),Q("",n.getFormattedDate().weekday,",\xa0"),u(2),Y(n.getFormattedDate().monthday)}}function Ice(t,r){if(1&t&&(f(0,"span",10),C(1),R(2,"date"),R(3,"date"),m()),2&t){const n=p().$implicit,e=p();u(),Q(" ",e.monthsViewNumber>1?e.resourceStrings.igx_calendar_first_picker_of.replace("{0}",e.monthsViewNumber.toString())+" "+Gt(2,1,e.getViewDate(n.index),"LLLL yyyy"):e.resourceStrings.igx_calendar_selected_month_is+Gt(3,4,e.getViewDate(n.index),"LLLL yyyy")," ")}}function bce(t,r){if(1&t){const n=z();y(0,Ice,4,7,"span",6),f(1,"span",7,8),T("keydown",function(i){const o=I(n).$implicit,a=p();return b(a.onActiveViewYearKB(a.getViewDate(o.index),i,o.index))})("click",function(){const s=I(n).$implicit,o=p();return b(o.onActiveViewYear(o.getViewDate(s.index),s.index))}),R(3,"date"),C(4),m(),f(5,"span",7,9),T("keydown",function(i){const o=I(n).$implicit,a=p();return b(a.onActiveViewDecadeKB(i,a.getViewDate(o.index),o.index))})("click",function(){const s=I(n).$implicit,o=p();return b(o.onActiveViewDecade(o.getViewDate(s.index),s.index))}),R(7,"date"),C(8),m()}if(2&t){const n=r.$implicit,e=p();h("ngIf",e.monthsViewNumber<2||n.index<1),u(),U("aria-label",Gt(3,5,e.getViewDate(n.index),"LLLL")+" "+e.resourceStrings.igx_calendar_select_month),u(3),Q(" ",e.formattedMonth(e.getViewDate(n.index))," "),u(),U("aria-label",Gt(7,8,e.getViewDate(n.index),"yyyy")+" "+e.resourceStrings.igx_calendar_select_year),u(3),Q(" ",e.formattedYear(e.getViewDate(n.index))," ")}}function Dce(t,r){1&t&&G(0)}function Sce(t,r){if(1&t&&(f(0,"header",11)(1,"h5",12),C(2),m(),f(3,"h2",13),y(4,Dce,1,0,"ng-container",14),m()()),2&t){const n=p(),e=P(1);u(2),Q(" ",n.formattedYear(n.headerDate)," "),u(2),h("ngTemplateOutlet",n.headerTemplate?n.headerTemplate:e)("ngTemplateOutletContext",n.headerContext)}}function Tce(t,r){if(1&t&&(j(0),C(1),W()),2&t){const n=p(2);u(),Q(" ",n.monthsViewNumber&&n.monthsViewNumber>1?n.resourceStrings.igx_calendar_multi_selection.replace("{0}",n.monthsViewNumber.toString()):n.resourceStrings.igx_calendar_singular_multi_selection," ")}}function Ece(t,r){if(1&t&&(j(0),C(1),W()),2&t){const n=p(2);u(),Q(" ",n.monthsViewNumber&&n.monthsViewNumber>1?n.resourceStrings.igx_calendar_range_selection.replace("{0}",n.monthsViewNumber.toString()):n.resourceStrings.igx_calendar_singular_range_selection," ")}}function Mce(t,r){if(1&t&&(j(0),C(1),W()),2&t){const n=p(2);u(),Q(" ",n.monthsViewNumber&&n.monthsViewNumber>1?n.resourceStrings.igx_calendar_single_selection.replace("{0}",n.monthsViewNumber.toString()):n.resourceStrings.igx_calendar_singular_single_selection," ")}}function Ace(t,r){1&t&&G(0)}function kce(t,r){if(1&t&&(f(0,"div",27),R(1,"IgxGetViewDate"),y(2,Ace,1,0,"ng-container",14),m()),2&t){const n=r.index,e=p(2),i=P(3);Z("width",100/e.monthsViewNumber,"%"),U("data-month",he(1,5,n,e.viewDate,!1)),u(2),h("ngTemplateOutlet",e.subheaderTemplate?e.subheaderTemplate:i)("ngTemplateOutletContext",e.getContext(n))}}function Rce(t,r){if(1&t){const n=z();f(0,"igx-days-view",28,29),it("activeDateChange",function(i){I(n);const s=p(2);return tt(s.activeDate,i)||(s.activeDate=i),b(i)}),T("viewChanging",function(i){return I(n),b(p(2).viewChanging(i))})("dateSelection",function(i){return I(n),b(p(2).childClicked(i))})("monthsViewBlur",function(){return I(n),b(p(2).resetActiveDate())}),R(2,"IgxGetViewDate"),m()}if(2&t){const n=r.index,e=p(2);h("changeDaysView",!0)("selection",e.selection)("locale",e.locale)("value",e.value),Je("activeDate",e.activeDate),h("viewDate",Gt(2,13,n,e.viewDate))("weekStart",e.weekStart)("formatOptions",e.formatOptions)("formatViews",e.formatViews)("disabledDates",e.disabledDates)("specialDates",e.specialDates)("hideOutsideDays",e.hideOutsideDays)("showWeekNumbers",e.showWeekNumbers)}}const zN=t=>({"min-width.%":t});function Pce(t,r){if(1&t){const n=z();f(0,"div",15),T("@animateView.done",function(i){return I(n),b(p().viewRendered(i))})("swiperight",function(){return I(n),b(p().previousMonth())})("swipeleft",function(){return I(n),b(p().nextMonth())})("pointerdown",function(){return I(n),b(p().suppressBlur())}),f(1,"section",16)(2,"span",17),y(3,Tce,2,1,"ng-container",18)(4,Ece,2,1,"ng-container",18)(5,Mce,2,1,"ng-container",18),m(),f(6,"div",19,20),R(8,"date"),f(9,"igx-icon",21),C(10,"keyboard_arrow_left"),m()(),y(11,kce,3,9,"div",22),R(12,"IgxMonthViewSlots"),f(13,"div",23,24),R(15,"date"),f(16,"igx-icon",21),C(17,"keyboard_arrow_right"),m()()(),f(18,"section",25),T("@animateChange.done",function(i){return I(n),b(p().animationDone(i))}),y(19,Rce,3,16,"igx-days-view",26),R(20,"IgxMonthViewSlots"),m()()}if(2&t){const n=p();h("@animateView",n.activeView),u(3),h("ngIf","multi"===n.selection),u(),h("ngIf","range"===n.selection),u(),h("ngIf","single"===n.selection),u(),h("startScroll",n.startPrevMonthScroll)("stopScroll",n.stopMonthScroll)("ngStyle",Ue(25,zN,100/(7*n.monthsViewNumber))),U("aria-label",n.resourceStrings.igx_calendar_previous_month+", "+Gt(8,15,n.getPrevMonth(n.viewDate),"LLLL")),u(5),h("ngForOf",ht(12,18,n.monthsViewNumber)),u(2),h("startScroll",n.startNextMonthScroll)("stopScroll",n.stopMonthScroll)("ngStyle",Ue(27,zN,100/(7*n.monthsViewNumber))),U("aria-label",n.resourceStrings.igx_calendar_next_month+", "+Gt(15,20,n.getNextMonth(n.viewDate,n.monthsViewNumber),"LLLL")),u(5),h("@animateChange",n.animationAction),u(),h("ngForOf",ht(20,23,n.monthsViewNumber))}}function Fce(t,r){if(1&t){const n=z();f(0,"igx-months-view",30,31),T("@animateView.done",function(i){return I(n),b(p().viewRendered(i))})("selected",function(i){return I(n),b(p().changeMonth(i))}),m()}if(2&t){const n=p();h("@animateView",n.activeView)("date",n.viewDate)("locale",n.locale)("formatView",n.formatViews.month)("monthFormat",n.formatOptions.month)}}function Oce(t,r){if(1&t){const n=z();f(0,"igx-years-view",32,33),T("@animateView.done",function(i){return I(n),b(p().viewRendered(i))})("selected",function(i){return I(n),b(p().changeYear(i))}),m()}if(2&t){const n=p();h("@animateView",n.activeView)("date",n.viewDate)("locale",n.locale)("formatView",n.formatViews.year)("yearFormat",n.formatOptions.year)}}const Hce=[[["igx-avatar"],["igx-card-media"],["","igxCardThumbnail",""]],[["","igxCardHeaderTitle",""],["","igxCardHeaderSubtitle",""],["",8,"igx-card-header__title"],["",8,"igx-card-header__subtitle"]],"*"],Bce=["igx-avatar, igx-card-media, [igxCardThumbnail]","\n [igxCardHeaderTitle],\n [igxCardHeaderSubtitle],\n .igx-card-header__title,\n .igx-card-header__subtitle","*"],UN=["defaultIndicator"],jN=["chipArea"],nde=["defaultRemoveIcon"],rde=["defaultSelectIcon"];function sde(t,r){1&t&&G(0)}function ode(t,r){if(1&t&&(f(0,"div",10),y(1,sde,1,0,"ng-container",11),m()),2&t){const n=p();h("ngClass",n.selectClass(n.selected)),u(),h("ngTemplateOutlet",n.selectIconTemplate)}}function ade(t,r){1&t&&G(0)}function lde(t,r){if(1&t){const n=z();f(0,"div",12),T("keydown",function(i){return I(n),b(p().onRemoveBtnKeyDown(i))})("pointerdown",function(i){return I(n),b(p().onRemoveMouseDown(i))})("mousedown",function(i){return I(n),b(p().onRemoveMouseDown(i))})("click",function(i){return I(n),b(p().onRemoveClick(i))})("touchmove",function(){return I(n),b(p().onRemoveTouchMove())})("touchend",function(i){return I(n),b(p().onRemoveTouchEnd(i))}),y(1,ade,1,0,"ng-container",11),m()}if(2&t){const n=p();U("tabIndex",n.tabIndex),u(),h("ngTemplateOutlet",n.removeButtonTemplate)}}function cde(t,r){1&t&&(f(0,"igx-icon"),C(1,"done"),m()),2&t&&U("aria-label",p().resourceStrings.igx_chip_select)}function dde(t,r){1&t&&(f(0,"igx-icon"),C(1,"cancel"),m()),2&t&&U("aria-label",p().resourceStrings.igx_chip_remove)}const VD=[[["igx-prefix"],["","igxPrefix",""]],"*",[["igx-suffix"],["","igxSuffix",""]]],ude=t=>({chip:t}),WN=["igx-prefix,[igxPrefix]","*","igx-suffix,[igxSuffix]"],LD=["inputGroup"],qt=(t,r,n,e,i)=>[t,r,n,e,i];function mue(t,r){if(1&t){const n=z();f(0,"button",5,6),T("click",function(){I(n);const i=p(3);return b(i.calendarClose.emit({owner:i}))}),C(2),m()}if(2&t){const n=p(3);u(2),Q(" ",n.closeButtonLabel," ")}}function _ue(t,r){if(1&t){const n=z();f(0,"button",5,7),T("click",function(){I(n);const i=p(3);return b(i.todaySelection.emit({owner:i}))}),C(2),m()}if(2&t){const n=p(3);u(2),Q(" ",n.todayButtonLabel," ")}}function vue(t,r){if(1&t&&(f(0,"div",3),y(1,mue,3,1,"button",4)(2,_ue,3,1,"button",4),m()),2&t){const n=p(2);u(),h("ngIf",n.closeButtonLabel),u(),h("ngIf",n.todayButtonLabel)}}function xue(t,r){if(1&t&&y(0,vue,3,2,"div",2),2&t){const n=p();h("ngIf",n.closeButtonLabel||n.todayButtonLabel)}}function yue(t,r){1&t&&G(0)}function wue(t,r){if(1&t){const n=z();f(0,"igx-prefix",7),T("click",function(){return I(n),b(p().toggle())}),f(1,"igx-icon",8),C(2,"today"),m()()}if(2&t){const n=p();u(),h("title",n.value?n.pickerResourceStrings.igx_date_picker_change_date:n.pickerResourceStrings.igx_date_picker_choose_date)}}function Cue(t,r){if(1&t){const n=z();f(0,"igx-suffix",7),T("click",function(){return I(n),b(p().clear())}),f(1,"igx-icon"),C(2,"clear"),m()()}}const YN=[[["","igxLabel",""]],[["igx-prefix"],["","igxPrefix",""]],[["igx-suffix"],["","igxSuffix",""]],[["igx-hint"],["","igxHint",""]]],QN=["[igxLabel]","igx-prefix,[igxPrefix]","igx-suffix,[igxSuffix]","igx-hint,[igxHint]"];function Iue(t,r){if(1&t&&(f(0,"div",9),C(1),m()),2&t){const n=p();U("id",n.titleId),u(),Q(" ",n.title," ")}}function bue(t,r){1&t&&J(0,0,["*ngIf","!title"])}function Due(t,r){if(1&t&&(f(0,"span",10),C(1),m()),2&t){const n=p();u(),Y(n.message)}}function Sue(t,r){1&t&&J(0,1,["*ngIf","!message"])}function Tue(t,r){if(1&t){const n=z();f(0,"button",13),T("click",function(i){return I(n),b(p(2).onInternalLeftButtonSelect(i))}),C(1),m()}if(2&t){const n=p(2);rs("igxButtonColor",n.leftButtonColor),rs("igxButtonBackground",n.leftButtonBackgroundColor),rs("igxRipple",n.leftButtonRipple),h("igxFocus",n.isOpen)("igxButton",n.leftButtonType),u(),Q(" ",n.leftButtonLabel," ")}}function Eue(t,r){if(1&t){const n=z();f(0,"button",13),T("click",function(i){return I(n),b(p(2).onInternalRightButtonSelect(i))}),C(1),m()}if(2&t){const n=p(2);rs("igxButtonColor",n.rightButtonColor),rs("igxButtonBackground",n.rightButtonBackgroundColor),rs("igxRipple",n.rightButtonRipple),h("igxFocus",n.isOpen)("igxButton",n.rightButtonType),u(),Q(" ",n.rightButtonLabel," ")}}function Mue(t,r){if(1&t&&(f(0,"div",11),y(1,Tue,2,6,"button",12)(2,Eue,2,6,"button",12),m()),2&t){const n=p();u(),h("ngIf",n.leftButtonLabel),u(),h("ngIf",n.rightButtonLabel)}}function Aue(t,r){1&t&&J(0,2,["*ngIf","!leftButtonLabel && !rightButtonLabel"])}const kue=[[["igx-dialog-title"],["","igxDialogTitle",""]],"*",[["igx-dialog-actions"],["","igxDialogActions",""]]],Rue=["igx-dialog-title,[igxDialogTitle]","*","igx-dialog-actions,[igxDialogActions]"];function Pue(t,r){if(1&t&&(f(0,"h4",7),C(1),m()),2&t){const n=p();U("id",n.titleID),u(),Y(n.title)}}function Fue(t,r){if(1&t){const n=z();f(0,"igx-input-group",8)(1,"input",9),it("ngModelChange",function(i){I(n);const s=p();return tt(s.filterCriteria,i)||(s.filterCriteria=i),b(i)}),m()()}if(2&t){const n=p();u(),Je("ngModel",n.filterCriteria),h("placeholder",n.filterColumnsPrompt),U("aria-describedby",n.titleID)}}function Oue(t,r){if(1&t){const n=z();f(0,"igx-checkbox",10),T("click",function(){const s=I(n).$implicit;return b(p().toggleColumn(s))}),C(1),m()}if(2&t){const n=r.$implicit,e=p();Z("margin-left",n.level*e.indentation,"px"),h("readonly",!0)("checked",e.actionsDirective.columnChecked(n)),u(),Q(" ",n.header||n.field," ")}}const Nue=["igx-prefix, [igxPrefix]","*","igx-suffix, [igxSuffix]"],Jx=["input"];function Vue(t,r){1&t&&G(0)}function Lue(t,r){if(1&t&&(j(0),y(1,Vue,1,0,"ng-container",15),W()),2&t){const n=p();u(),h("ngTemplateOutlet",n.toggleIconTemplate)("ngTemplateOutletContext",Ue(2,Bt,n.collapsed))}}function Gue(t,r){if(1&t&&(f(0,"igx-icon"),C(1),m()),2&t){const n=p(),e=P(1);u(),Q(" ","material"===e.theme?n.collapsed?"expand_more":"expand_less":n.collapsed?"arrow_drop_down":"arrow_drop_up"," ")}}function Hue(t,r){1&t&&J(0,5,["*ngTemplateOutlet","headerTemplate"])}function Bue(t,r){if(1&t&&(f(0,"div",16),y(1,Hue,1,0,"ng-content",17),m()),2&t){const n=p();u(),h("ngTemplateOutlet",n.headerTemplate)}}function zue(t,r){1&t&&G(0)}function Uue(t,r){if(1&t&&(f(0,"div",18),y(1,zue,1,0,"ng-container",17),m()),2&t){const n=p();u(),h("ngTemplateOutlet",n.footerTemplate)}}const jue=[[["","igxLabel",""]],[["igx-prefix"],["","igxPrefix",""]],[["igx-suffix"],["","igxSuffix",""]],[["igx-hint"],["","igxHint",""]],[["igx-select-item"],["igx-select-item-group"]],"*"],Wue=["[igxLabel]","igx-prefix,[igxPrefix]","igx-suffix,[igxSuffix]","igx-hint, [igxHint]","igx-select-item, igx-select-item-group","*"],$ue=["hourList"],que=["minuteList"],Kue=["secondsList"],Zue=["ampmList"];function Yue(t,r){if(1&t){const n=z();f(0,"igx-prefix",15),T("click",function(){return I(n),b(p().toggle())}),f(1,"igx-icon",16),C(2,"access_time"),m()()}if(2&t){const n=p();u(),h("title",n.value?n.resourceStrings.igx_time_picker_change_time:n.resourceStrings.igx_time_picker_choose_time)}}function Que(t,r){if(1&t){const n=z();f(0,"igx-suffix",15),T("click",function(i){return I(n),p().clear(),b(i.stopPropagation())}),f(1,"igx-icon"),C(2,"clear"),m()()}}function Xue(t,r){if(1&t){const n=z();f(0,"button",20),T("click",function(){return I(n),b(p(3).cancelButtonClick())}),C(1),m()}if(2&t){const n=p(3);u(),Q(" ",n.cancelButtonLabel," ")}}function Jue(t,r){if(1&t){const n=z();f(0,"button",20),T("click",function(){return I(n),b(p(3).okButtonClick())}),C(1),m()}if(2&t){const n=p(3);u(),Q(" ",n.okButtonLabel," ")}}function ehe(t,r){if(1&t&&(f(0,"div",18),y(1,Xue,2,1,"button",19)(2,Jue,2,1,"button",19),m()),2&t){const n=p(2);u(),h("ngIf",n.cancelButtonLabel),u(),h("ngIf",n.okButtonLabel)}}function the(t,r){if(1&t&&y(0,ehe,3,2,"div",17),2&t){const n=p();h("ngIf",n.cancelButtonLabel||n.okButtonLabel)}}function ihe(t,r){if(1&t&&(f(0,"div",21)(1,"h2",22)(2,"span"),C(3),R(4,"timeFormatPipe"),m()()()),2&t){const n=p();u(3),Y(ht(4,1,n.selectedDate))}}function nhe(t,r){if(1&t&&(f(0,"span",26,27),C(2),m()),2&t){const n=r.$implicit,e=P(1);h("igxTimeItem",n),U("role",e.isSelectedTime?"spinbutton":null)("aria-valuenow",e.isSelectedTime?e.hourValue:null)("aria-valuemin",e.isSelectedTime?e.minValue:null)("aria-valuemax",e.isSelectedTime?e.maxValue:null),u(2),Y(n)}}const rhe=(t,r,n,e)=>[t,"hour",r,n,e];function she(t,r){if(1&t&&(f(0,"div",23,24),y(2,nhe,3,6,"span",25),R(3,"timeItemPipe"),m()),2&t){const n=p();h("igxItemList","hourList"),u(2),h("ngForOf",me(3,2,so(8,rhe,n.hourItems,n.selectedDate,n.minDropdownValue,n.maxDropdownValue)))}}function ohe(t,r){if(1&t&&(f(0,"span",30,27),C(2),m()),2&t){const n=r.$implicit,e=P(1);h("igxTimeItem",n),U("role",e.isSelectedTime?"spinbutton":null)("aria-valuenow",e.isSelectedTime?n:null)("aria-valuemin",e.isSelectedTime?e.minValue:null)("aria-valuemax",e.isSelectedTime?e.maxValue:null),u(2),Y(n)}}const ahe=(t,r,n,e)=>[t,"minutes",r,n,e];function lhe(t,r){if(1&t&&(f(0,"div",23,28),y(2,ohe,3,6,"span",29),R(3,"timeItemPipe"),m()),2&t){const n=p();h("igxItemList","minuteList"),u(2),h("ngForOf",me(3,2,so(8,ahe,n.minuteItems,n.selectedDate,n.minDropdownValue,n.maxDropdownValue)))}}function che(t,r){if(1&t&&(f(0,"span",33,27),C(2),m()),2&t){const n=r.$implicit,e=P(1);h("igxTimeItem",n),U("role",e.isSelectedTime?"spinbutton":null)("aria-valuenow",e.isSelectedTime?n:null)("aria-valuemin",e.isSelectedTime?e.minValue:null)("aria-valuemax",e.isSelectedTime?e.maxValue:null),u(2),Y(n)}}const dhe=(t,r,n,e)=>[t,"seconds",r,n,e];function uhe(t,r){if(1&t&&(f(0,"div",23,31),y(2,che,3,6,"span",32),R(3,"timeItemPipe"),m()),2&t){const n=p();h("igxItemList","secondsList"),u(2),h("ngForOf",me(3,2,so(8,dhe,n.secondsItems,n.selectedDate,n.minDropdownValue,n.maxDropdownValue)))}}function hhe(t,r){if(1&t&&(f(0,"span",36,27),C(2),m()),2&t){const n=r.$implicit,e=P(1);h("igxTimeItem",n),U("role",e.isSelectedTime?"spinbutton":null)("aria-valuenow",e.isSelectedTime?n:null)("aria-valuemin",e.isSelectedTime?e.minValue:null)("aria-valuemax",e.isSelectedTime?e.maxValue:null),u(2),Y(n)}}const ghe=(t,r,n,e)=>[t,"ampm",r,n,e];function phe(t,r){if(1&t&&(f(0,"div",23,34),y(2,hhe,3,6,"span",35),R(3,"timeItemPipe"),m()),2&t){const n=p();h("igxItemList","ampmList"),u(2),h("ngForOf",me(3,2,so(8,ghe,n.ampmItems,n.selectedDate,n.minDropdownValue,n.maxDropdownValue)))}}function fhe(t,r){1&t&&G(0)}const mhe=(t,r)=>({"igx-time-picker--dropdown":t,"igx-time-picker--vertical":r});function _he(t,r){if(1&t&&(f(0,"div",3)(1,"div",4)(2,"span"),C(3),m()(),f(4,"div",5)(5,"span"),C(6),m()()()),2&t){const n=p();u(3),Y(n.resourceStrings.igx_query_builder_and_label),u(3),Y(n.resourceStrings.igx_query_builder_or_label)}}const vhe=["fieldSelect"],xhe=["conditionSelect"],yhe=["searchValueInput"],GD=["picker"],whe=["addRootAndGroupButton"],Che=["addConditionButton"],Ihe=["editingInputsContainer"],bhe=["addModeContainer"],Dhe=["currentGroupButtonsContainer"],XN=["expressionsContainer"],JN=["overlayOutlet"];function She(t,r){1&t&&V(0,"igx-query-builder-header",11),2&t&&h("title",p().resourceStrings.igx_query_builder_title)}function The(t,r){if(1&t){const n=z();j(0),f(1,"button",12,13),T("click",function(){return I(n),b(p().addAndGroup())}),f(3,"igx-icon"),C(4,"add"),m(),f(5,"span"),C(6),m()(),f(7,"button",12),T("click",function(){return I(n),b(p().addOrGroup())}),f(8,"igx-icon"),C(9,"add"),m(),f(10,"span"),C(11),m()(),f(12,"div",14)(13,"h6",15),C(14),m()(),W()}if(2&t){const n=p();u(),h("displayDensity",n.displayDensity),u(5),Y(n.resourceStrings.igx_query_builder_and_group),u(),h("displayDensity",n.displayDensity),u(4),Y(n.resourceStrings.igx_query_builder_or_group),u(3),Q(" ",n.resourceStrings.igx_query_builder_initial_text," ")}}function Ehe(t,r){if(1&t){const n=z();f(0,"button",16,17),T("click",function(){const i=I(n),s=i.$implicit,o=i.afterExpression;return b(p().addCondition(s,o))}),f(2,"igx-icon"),C(3,"add"),m(),f(4,"span"),C(5),m()(),f(6,"button",16),T("click",function(){const i=I(n),s=i.$implicit,o=i.afterExpression;return b(p().addAndGroup(s,o))}),f(7,"igx-icon"),C(8,"add"),m(),f(9,"span"),C(10),m()(),f(11,"button",16),T("click",function(){const i=I(n),s=i.$implicit,o=i.afterExpression;return b(p().addOrGroup(s,o))}),f(12,"igx-icon"),C(13,"add"),m(),f(14,"span"),C(15),m()()}if(2&t){const n=p();h("displayDensity",n.displayDensity)("disabled",n.hasEditedExpression),u(5),Y(n.resourceStrings.igx_query_builder_add_condition),u(),h("displayDensity",n.displayDensity)("disabled",n.hasEditedExpression),u(4),Y(n.resourceStrings.igx_query_builder_and_group),u(),h("displayDensity",n.displayDensity)("disabled",n.hasEditedExpression),u(4),Y(n.resourceStrings.igx_query_builder_or_group)}}function Mhe(t,r){if(1&t&&(f(0,"span",28),C(1),R(2,"fieldFormatter"),R(3,"date"),m()),2&t){const n=p(2).$implicit,e=p();u(),Q(" ",e.isDate(n.expression.searchVal)?e.getFormatter(n.expression.fieldName)?he(2,1,n.expression.searchVal,e.getFormatter(n.expression.fieldName),void 0):xt(3,5,n.expression.searchVal,e.getFormat(n.expression.fieldName),void 0,e.locale):n.expression.searchVal," ")}}function Ahe(t,r){if(1&t){const n=z();f(0,"igx-icon",30),T("keydown",function(i){return I(n),b(p(4).invokeClick(i))})("click",function(){I(n);const i=p(3).$implicit;return b(p().enterExpressionAdd(i))}),C(1," add "),m()}}function khe(t,r){if(1&t){const n=z();f(0,"div",29)(1,"igx-icon",30),T("keydown",function(i){return I(n),b(p(3).invokeClick(i))})("click",function(){I(n);const i=p(2).$implicit;return b(p().enterExpressionEdit(i))}),C(2," edit "),m(),y(3,Ahe,2,0,"igx-icon",31),m()}if(2&t){const n=p(2).$implicit,e=p();u(3),h("ngIf",!n.inAddMode&&(n.parent!==e.currentGroup||n!==e.currentGroup.children[e.currentGroup.children.length-1]))}}function Rhe(t,r){if(1&t){const n=z();f(0,"div",21),T("mouseenter",function(){return I(n),b(p().$implicit.hovered=!0)})("mouseleave",function(){return I(n),b(p().$implicit.hovered=!1)}),f(1,"igx-chip",22),T("keydown",function(i){return I(n),b(p(2).invokeClick(i))})("click",function(){I(n);const i=p().$implicit;return b(p().onChipClick(i))})("dblclick",function(){I(n);const i=p().$implicit;return b(p().onChipDblClick(i))})("remove",function(){I(n);const i=p().$implicit;return b(p().onChipRemove(i))})("selectedChanged",function(){return I(n),b(p(2).onChipSelectionEnd())}),f(2,"span",23),C(3),m(),f(4,"igx-prefix"),V(5,"igx-icon",24),m(),f(6,"span",25),C(7),m(),y(8,Mhe,4,10,"span",26),m(),y(9,khe,4,1,"div",27),m()}if(2&t){const n=p().$implicit,e=p();u(),h("data",n)("displayDensity","compact"===e.displayDensity?"cosy":e.displayDensity)("removable",!0)("selected",n.selected),u(2),Y(n.fieldLabel||n.expression.fieldName),u(2),h("name",n.expression.condition.iconName),u(2),Q(" ",e.getConditionFriendlyName(n.expression.condition.name)," "),u(),h("ngIf",!n.expression.condition.isUnary),u(),h("ngIf",n.selected&&1===e.selectedExpressions.length||n.hovered)}}function Phe(t,r){if(1&t&&(f(0,"igx-select-item",47),C(1),m()),2&t){const n=r.$implicit;h("value",n),u(),Q(" ",n.label||n.header||n.field," ")}}function Fhe(t,r){if(1&t&&(f(0,"igx-prefix"),V(1,"igx-icon",24),m()),2&t){p();const n=P(6),e=p(2);u(),h("name",e.selectedField.filters.condition(n.value).iconName)}}function Ohe(t,r){if(1&t&&(f(0,"igx-select-item",48)(1,"div",49),V(2,"igx-icon",24),f(3,"span",50),C(4),m()()()),2&t){const n=r.$implicit,e=p(3);h("value",n)("text",e.getConditionFriendlyName(n)),u(2),h("name",e.selectedField.filters.condition(n).iconName),u(2),Y(e.getConditionFriendlyName(n))}}function Nhe(t,r){if(1&t){const n=z();f(0,"igx-input-group",51)(1,"input",52,53),it("ngModelChange",function(i){I(n);const s=p(3);return tt(s.searchValue,i)||(s.searchValue=i),b(i)}),m()()}if(2&t){const n=p(3);h("displayDensity","compact"),u(),h("disabled",!n.selectedField||!n.selectedCondition||n.selectedField&&n.selectedField.filters.condition(n.selectedCondition).isUnary)("type",n.selectedField&&"number"===n.selectedField.dataType?"number":"text")("placeholder",n.resourceStrings.igx_query_builder_value_placeholder),Je("ngModel",n.searchValue)}}function Vhe(t,r){if(1&t){const n=z();f(0,"igx-date-picker",54,55),it("valueChange",function(i){I(n);const s=p(3);return tt(s.searchValue,i)||(s.searchValue=i),b(i)}),T("keydown",function(i){return I(n),b(p(3).openPicker(i))})("click",function(){return I(n),b(P(1).open())}),V(2,"igx-picker-toggle")(3,"igx-picker-clear"),m()}if(2&t){const n=p(3);Je("value",n.searchValue),h("readOnly",!0)("displayDensity","compact")("placeholder",n.resourceStrings.igx_query_builder_date_placeholder)("disabled",!n.selectedField||!n.selectedCondition||n.selectedField&&n.selectedField.filters.condition(n.selectedCondition).isUnary)("locale",n.locale)("outlet",n.pickerOutlet)("formatter",n.selectedField.formatter)("displayFormat",n.selectedField.pipeArgs.format)("weekStart",n.selectedField.pipeArgs.weekStart)}}function Lhe(t,r){if(1&t){const n=z();f(0,"igx-time-picker",56,55),it("valueChange",function(i){I(n);const s=p(3);return tt(s.searchValue,i)||(s.searchValue=i),b(i)}),T("click",function(){return I(n),b(P(1).open())})("keydown",function(i){return I(n),b(p(3).openPicker(i))}),V(2,"igx-picker-toggle")(3,"igx-picker-clear"),m()}if(2&t){const n=p(3);Je("value",n.searchValue),h("displayDensity","compact")("placeholder",n.resourceStrings.igx_query_builder_time_placeholder)("readOnly",!0)("disabled",!n.selectedField||!n.selectedCondition||n.selectedField&&n.selectedField.filters.condition(n.selectedCondition).isUnary)("locale",n.locale)("outlet",n.pickerOutlet)("formatter",n.selectedField.formatter)("inputFormat",n.selectedField.defaultTimeFormat)}}function Ghe(t,r){if(1&t){const n=z();f(0,"igx-input-group",57,58)(2,"input",59,60),it("ngModelChange",function(i){I(n);const s=p(3);return tt(s.searchValue,i)||(s.searchValue=i),b(i)}),m()()}if(2&t){const n=p(3);h("displayDensity","compact"),u(2),h("placeholder",n.resourceStrings.igx_query_builder_date_placeholder),Je("ngModel",n.searchValue),h("disabled",!n.selectedField||!n.selectedCondition||n.selectedField&&n.selectedField.filters.condition(n.selectedCondition).isUnary)("igxDateTimeEditor",n.selectedField.defaultDateTimeFormat)}}function Hhe(t,r){if(1&t){const n=z();f(0,"div",32,33)(2,"igx-select",34,35),it("ngModelChange",function(i){I(n);const s=p(2);return tt(s.selectedField,i)||(s.selectedField=i),b(i)}),y(4,Phe,2,2,"igx-select-item",36),m(),f(5,"igx-select",37,38),it("ngModelChange",function(i){I(n);const s=p(2);return tt(s.selectedCondition,i)||(s.selectedCondition=i),b(i)}),y(7,Fhe,2,1,"igx-prefix",3)(8,Ohe,5,4,"igx-select-item",39),m(),y(9,Nhe,3,5,"igx-input-group",40)(10,Vhe,4,10,"igx-date-picker",41)(11,Lhe,4,9,"igx-time-picker",42)(12,Ghe,4,5,"igx-input-group",43),f(13,"div",44)(14,"button",45),T("click",function(){return I(n),b(p(2).commitOperandEdit())}),f(15,"igx-icon"),C(16,"check"),m()(),f(17,"button",46),T("click",function(){return I(n),b(p(2).cancelOperandEdit())}),f(18,"igx-icon"),C(19,"close"),m()()()()}if(2&t){const n=P(6),e=p(2);u(2),h("displayDensity","compact")("overlaySettings",e.fieldSelectOverlaySettings)("placeholder",e.resourceStrings.igx_query_builder_column_placeholder),Je("ngModel",e.selectedField),u(2),h("ngForOf",e.fields),u(),h("displayDensity","compact")("overlaySettings",e.conditionSelectOverlaySettings)("placeholder",e.resourceStrings.igx_query_builder_condition_placeholder),Je("ngModel",e.selectedCondition),h("disabled",!e.selectedField),u(2),h("ngIf",e.selectedField&&n.value&&e.selectedField.filters.condition(n.value)),u(),h("ngForOf",e.getConditionList()),u(),h("ngIf",!e.selectedField||"date"!==e.selectedField.dataType&&"time"!==e.selectedField.dataType&&"dateTime"!==e.selectedField.dataType),u(),h("ngIf",e.selectedField&&"date"===e.selectedField.dataType),u(),h("ngIf",e.selectedField&&"time"===e.selectedField.dataType),u(),h("ngIf",e.selectedField&&"dateTime"===e.selectedField.dataType),u(2),Z("--component-size",e.getComponentSizeStyles()),h("disabled",!e.operandCanBeCommitted()),u(3),Z("--component-size",e.getComponentSizeStyles())}}function Bhe(t,r){1&t&&G(0)}function zhe(t,r){if(1&t){const n=z();f(0,"div",61,62),y(2,Bhe,1,0,"ng-container",63),f(3,"button",46),T("click",function(){return I(n),b(p(2).cancelOperandAdd())}),f(4,"igx-icon"),C(5,"close"),m()()()}if(2&t){const n=p().$implicit,e=p(),i=P(6);u(2),h("ngTemplateOutlet",i)("ngTemplateOutletContext",e.context(n.parent,n)),u(),Z("--component-size",e.getComponentSizeStyles())}}function Uhe(t,r){if(1&t&&y(0,Rhe,10,9,"div",18)(1,Hhe,20,21,"div",19)(2,zhe,6,4,"div",20),2&t){const n=r.$implicit;h("ngIf",!n.inEditMode),u(),h("ngIf",n.inEditMode),u(),h("ngIf",n.inAddMode)}}function jhe(t,r){1&t&&G(0)}function Whe(t,r){if(1&t&&(j(0),y(1,jhe,1,0,"ng-container",63),W()),2&t){const n=r.$implicit,e=p(2),i=P(10),s=P(8);u(),h("ngTemplateOutlet",e.isExpressionGroup(n)?i:s)("ngTemplateOutletContext",e.context(n))}}function $he(t,r){1&t&&G(0)}function qhe(t,r){if(1&t){const n=z();f(0,"button",16),T("click",function(){I(n);const i=p(2).$implicit;return b(p().endGroup(i))}),f(1,"span"),C(2),m()()}if(2&t){const n=p(2).$implicit,e=p();h("displayDensity",e.displayDensity)("disabled",e.hasEditedExpression||n.children.length<2),u(2),Y(e.resourceStrings.igx_query_builder_end_group)}}function Khe(t,r){if(1&t&&(f(0,"div",61,68),y(2,$he,1,0,"ng-container",63)(3,qhe,3,3,"button",69),m()),2&t){const n=p().$implicit,e=p(),i=P(6);u(2),h("ngTemplateOutlet",i)("ngTemplateOutletContext",e.context(n)),u(),h("ngIf",n!==e.rootGroup)}}const Zhe=(t,r,n)=>({"igx-filter-tree__line--and":t,"igx-filter-tree__line--or":r,"igx-filter-tree__line--selected":n});function Yhe(t,r){if(1&t){const n=z();f(0,"div",64)(1,"div",65),T("keydown",function(i){return I(n),b(p().invokeClick(i))})("click",function(){const s=I(n).$implicit;return b(p().onGroupClick(s))}),m(),f(2,"div",66),y(3,Whe,2,2,"ng-container",67)(4,Khe,4,3,"div",20),m()()}if(2&t){const n=r.$implicit,e=p();u(),h("ngClass",Vg(3,Zhe,0===n.operator,1===n.operator,n.selected)),u(2),h("ngForOf",n.children),u(),h("ngIf",e.currentGroup===n)}}function Qhe(t,r){1&t&&G(0)}function Xhe(t,r){if(1&t&&(j(0),y(1,Qhe,1,0,"ng-container",63),W()),2&t){const n=p(),e=P(10);u(),h("ngTemplateOutlet",e)("ngTemplateOutletContext",n.context(n.rootGroup))}}function Jhe(t,r){if(1&t){const n=z();j(0),f(1,"igx-buttongroup",70),T("selected",function(i){return I(n),b(p().selectFilteringLogic(i))}),m(),f(2,"button",16),T("click",function(){return I(n),b(p().ungroup())}),V(3,"igx-icon",71),f(4,"span"),C(5),m()(),f(6,"button",72),T("click",function(){return I(n),b(p().deleteGroup())}),f(7,"igx-icon"),C(8,"delete"),m(),f(9,"span"),C(10),m()(),W()}if(2&t){const n=p();u(),h("displayDensity",n.displayDensity)("values",n.filteringLogics),u(),h("displayDensity",n.displayDensity)("disabled",!n.contextualGroup.parent),u(3),Y(n.resourceStrings.igx_query_builder_ungroup),u(),h("displayDensity",n.displayDensity),u(4),Y(n.resourceStrings.igx_query_builder_delete)}}function ege(t,r){if(1&t){const n=z();j(0),f(1,"button",12),T("click",function(){return I(n),b(p().createAndGroup())}),C(2),m(),f(3,"button",12),T("click",function(){return I(n),b(p().createOrGroup())}),C(4),m(),f(5,"button",72),T("click",function(){return I(n),b(p().deleteFilters())}),C(6),m(),W()}if(2&t){const n=p();u(),h("displayDensity",n.displayDensity),u(),Q(" ",n.resourceStrings.igx_query_builder_create_and_group," "),u(),h("displayDensity",n.displayDensity),u(),Q(" ",n.resourceStrings.igx_query_builder_create_or_group," "),u(),h("displayDensity",n.displayDensity),u(),Q(" ",n.resourceStrings.igx_query_builder_delete_filters," ")}}const tge=[[["igx-query-builder-header"]]],ige=(t,r)=>({"igx-filter-contextual-menu--cosy":t,"igx-filter-contextual-menu--compact":r}),nge=["igx-query-builder-header"],rge=["queryBuilder"],sge=t=>({"igx-advanced-filter":!0,"igx-advanced-filter--inline":t});function oge(t,r){if(1&t){const n=z();f(0,"article",1),T("dragStart",function(i){return I(n),b(p().dragStart(i))})("dragMove",function(i){return I(n),b(p().onDragMove(i))})("keydown",function(i){return I(n),b(p().onKeyDown(i))}),f(1,"igx-query-builder",2,3),V(3,"igx-query-builder-header",4),m(),f(4,"footer",5)(5,"div",6)(6,"button",7),T("click",function(i){return I(n),b(p().onClearButtonClick(i))}),C(7),m()(),f(8,"div",8)(9,"button",7),T("click",function(){return I(n),b(p().cancelChanges())}),C(10),m()(),f(11,"div",9)(12,"button",10),T("click",function(i){return I(n),b(p().onApplyButtonClick(i))}),C(13),m()()()()}if(2&t){const n=p();h("ghost",!1)("dragTolerance",0)("ngClass",Ue(13,sge,n.inline)),u(),h("locale",n.grid.locale)("fields",n.filterableFields)("expressionTree",n.grid.advancedFilteringExpressionsTree),u(2),h("title",n.grid.resourceStrings.igx_grid_advanced_filter_title),u(3),h("displayDensity",n.displayDensity),u(),Q(" ",n.grid.resourceStrings.igx_grid_excel_custom_dialog_clear," "),u(2),h("displayDensity",n.displayDensity),u(),Q(" ",n.grid.resourceStrings.igx_grid_excel_cancel," "),u(2),h("displayDensity",n.displayDensity),u(),Q(" ",n.grid.resourceStrings.igx_grid_excel_apply," ")}}function age(t,r){if(1&t){const n=z();f(0,"div",1),T("keydown",function(i){return I(n),b(p().onClearFilterKeyDown(i))})("click",function(){return I(n),b(p().clearFilter())}),f(1,"span"),C(2),m(),f(3,"igx-icon"),C(4,"clear"),m()()}if(2&t){const n=p();h("ngClass",n.clearFilterClass()),U("aria-disabled",!n.esf.column.filteringExpressionsTree),u(2),Y(n.esf.grid.resourceStrings.igx_grid_excel_filter_clear)}}const lge=["dropdownConditions"],cge=["logicOperatorButtonGroup"],dge=["inputValues"];function uge(t,r){1&t&&V(0,"igx-icon",12),2&t&&h("name",p().getIconName())}function hge(t,r){1&t&&(f(0,"igx-icon"),C(1,"filter_list"),m())}function gge(t,r){if(1&t&&(f(0,"igx-select-item",13)(1,"div",14),V(2,"igx-icon",12),f(3,"span",15),C(4),m()()()),2&t){const n=r.$implicit,e=p();h("value",n)("text",e.getConditionFriendlyName(n))("selected",e.isConditionSelected(n)),u(2),h("name",e.getCondition(n).iconName),u(2),Y(e.translateCondition(n))}}function pge(t,r){if(1&t){const n=z();f(0,"button",16),T("click",function(){return I(n),b(p().onRemoveButtonClick())}),f(1,"igx-icon"),C(2,"cancel"),m()()}}function fge(t,r){if(1&t){const n=z();f(0,"igx-buttongroup",null,17)(2,"span",18,19),T("keydown",function(i){return I(n),b(p().onLogicOperatorKeyDown(i,0))})("click",function(i){return I(n),b(p().onLogicOperatorButtonClicked(i,0))}),C(4),m(),f(5,"span",18,20),T("keydown",function(i){return I(n),b(p().onLogicOperatorKeyDown(i,1))})("click",function(i){return I(n),b(p().onLogicOperatorButtonClicked(i,1))}),C(7),m()()}if(2&t){const n=p();u(2),h("displayDensity",n.displayDensity)("selected",0===n.expressionUI.afterOperator),u(2),Q(" ",n.grid.resourceStrings.igx_grid_filter_operator_and," "),u(),h("displayDensity",n.displayDensity)("selected",1===n.expressionUI.afterOperator),u(2),Q(" ",n.grid.resourceStrings.igx_grid_filter_operator_or," ")}}function mge(t,r){1&t&&V(0,"igx-icon",11),2&t&&h("name",p().getIconName())}function _ge(t,r){1&t&&(f(0,"igx-icon"),C(1,"filter_list"),m())}function vge(t,r){if(1&t&&(f(0,"igx-select-item",12),V(1,"igx-icon",11),f(2,"span"),C(3),m()()),2&t){const n=r.$implicit,e=p();h("value",n)("text",e.getConditionFriendlyName(n))("selected",e.isConditionSelected(n)),u(),h("name",e.getCondition(n).iconName),u(2),Y(e.translateCondition(n))}}function xge(t,r){if(1&t){const n=z();f(0,"igx-date-picker",13,14),it("valueChange",function(i){I(n);const s=p();return tt(s.expressionUI.expression.searchVal,i)||(s.expressionUI.expression.searchVal=i),b(i)}),T("click",function(){return I(n),b(P(1).open())}),V(2,"igx-picker-toggle")(3,"igx-picker-clear"),m()}if(2&t){const n=p();let e;h("weekStart",null!==(e=n.column.pipeArgs.weekStart)&&void 0!==e?e:n.weekStart),Je("value",n.expressionUI.expression.searchVal),h("locale",n.grid.locale)("outlet",n.grid.outlet)("displayDensity",n.displayDensity)("readOnly",!0)("placeholder",n.inputDatePlaceholder)("displayFormat",n.column.pipeArgs.format)("formatter",n.column.formatter)("disabled",n.expressionUI.expression.condition&&n.expressionUI.expression.condition.isUnary)}}function yge(t,r){if(1&t){const n=z();f(0,"igx-time-picker",15,14),it("valueChange",function(i){I(n);const s=p();return tt(s.expressionUI.expression.searchVal,i)||(s.expressionUI.expression.searchVal=i),b(i)}),T("click",function(){return I(n),b(P(1).open())}),V(2,"igx-picker-toggle")(3,"igx-picker-clear"),m()}if(2&t){const n=p();h("inputFormat",n.column.defaultTimeFormat),Je("value",n.expressionUI.expression.searchVal),h("locale",n.grid.locale)("outlet",n.grid.outlet)("displayDensity",n.displayDensity)("readOnly",!0)("placeholder",n.inputTimePlaceholder)("displayFormat",n.column.pipeArgs.format)("formatter",n.column.formatter)("disabled",n.expressionUI.expression.condition&&n.expressionUI.expression.condition.isUnary)}}function wge(t,r){if(1&t){const n=z();f(0,"igx-input-group",16,17)(3,"input",18,19),it("ngModelChange",function(i){I(n);const s=p();return tt(s.expressionUI.expression.searchVal,i)||(s.expressionUI.expression.searchVal=i),b(i)}),m()()}if(2&t){const n=p();h("displayDensity",n.displayDensity),u(3),h("placeholder",n.inputDatePlaceholder)("igxDateTimeEditor",n.column.defaultDateTimeFormat),Je("ngModel",n.expressionUI.expression.searchVal),h("disabled",n.expressionUI.expression.condition&&n.expressionUI.expression.condition.isUnary)}}function Cge(t,r){if(1&t){const n=z();f(0,"button",20),T("click",function(){return I(n),b(p().onRemoveButtonClick())}),f(1,"igx-icon"),C(2,"cancel"),m()()}}function Ige(t,r){if(1&t){const n=z();f(0,"igx-buttongroup",null,21)(2,"span",22,23),T("keydown",function(i){return I(n),b(p().onLogicOperatorKeyDown(i,0))})("click",function(i){return I(n),b(p().onLogicOperatorButtonClicked(i,0))}),C(4),m(),f(5,"span",22,24),T("keydown",function(i){return I(n),b(p().onLogicOperatorKeyDown(i,1))})("click",function(i){return I(n),b(p().onLogicOperatorButtonClicked(i,1))}),C(7),m()()}if(2&t){const n=p();u(2),h("displayDensity",n.displayDensity)("selected",0===n.expressionUI.afterOperator),u(2),Q(" ",n.grid.resourceStrings.igx_grid_filter_operator_and," "),u(),h("displayDensity",n.displayDensity)("selected",1===n.expressionUI.afterOperator),u(2),Q(" ",n.grid.resourceStrings.igx_grid_filter_operator_or," ")}}const bge=["toggle"],Dge=["defaultExpressionTemplate"],Sge=["dateExpressionTemplate"];function Tge(t,r){if(1&t){const n=z();f(0,"igx-excel-style-date-expression",15),T("expressionRemoved",function(i){return I(n),b(p(2).onExpressionRemoved(i))})("logicOperatorChanged",function(i){return I(n),b(p(2).onLogicOperatorChanged(i))}),m()}if(2&t){const n=r.$implicit,e=p(2);h("expressionUI",n)("column",e.column)("grid",e.grid)("displayDensity",e.displayDensity)("expressionsList",e.expressionsList)}}function Ege(t,r){if(1&t&&(j(0),y(1,Tge,1,5,"igx-excel-style-date-expression",14),W()),2&t){const n=p();u(),h("ngForOf",n.expressionsList)}}function Mge(t,r){if(1&t){const n=z();f(0,"igx-excel-style-default-expression",15),T("expressionRemoved",function(i){return I(n),b(p(2).onExpressionRemoved(i))})("logicOperatorChanged",function(i){return I(n),b(p(2).onLogicOperatorChanged(i))}),m()}if(2&t){const n=r.$implicit,e=p(2);h("expressionUI",n)("column",e.column)("grid",e.grid)("displayDensity",e.displayDensity)("expressionsList",e.expressionsList)}}function Age(t,r){if(1&t&&(j(0),y(1,Mge,1,5,"igx-excel-style-default-expression",14),W()),2&t){const n=p();u(),h("ngForOf",n.expressionsList)}}const kge=(t,r)=>({"igx-excel-filter__secondary--cosy":t,"igx-excel-filter__secondary--compact":r}),Rge=["customDialog"],Pge=["subMenu"];function Fge(t,r){if(1&t&&(f(0,"igx-drop-down-item",7)(1,"div",8),V(2,"igx-icon",9),f(3,"span",10),C(4),m()()()),2&t){const n=r.$implicit,e=p(2);h("value",n),u(2),h("name",e.getCondition(n).iconName),u(2),Y(e.translateCondition(n))}}function Oge(t,r){if(1&t&&(f(0,"igx-drop-down-item")(1,"div",8)(2,"igx-icon"),C(3,"filter_list"),m(),f(4,"span",10),C(5),m()()()),2&t){const n=p(2);u(5),Y(n.esf.grid.resourceStrings.igx_grid_excel_custom_filter)}}function Nge(t,r){if(1&t){const n=z();j(0),f(1,"div",1),T("keydown",function(i){return I(n),b(p().onTextFilterKeyDown(i))})("click",function(i){return I(n),b(p().onTextFilterClick(i))}),f(2,"span"),C(3),m(),f(4,"igx-icon"),C(5,"keyboard_arrow_right"),m()(),f(6,"igx-drop-down",2,3),T("selectionChanging",function(i){return I(n),b(p().onSubMenuSelection(i))})("closed",function(){return I(n),b(p().onSubMenuClosed())}),f(8,"div"),y(9,Fge,5,3,"igx-drop-down-item",4)(10,Oge,6,1,"igx-drop-down-item",0),m()(),V(11,"igx-excel-style-custom-dialog",5,6),W()}if(2&t){const n=P(7),e=p();u(),h("igxDropDownItemNavigation",n),U("aria-controls",n.listId)("aria-activedescendant",n.collapsed||null==n.focusedItem?null:n.focusedItem.id),u(2),Y(e.subMenuText),u(3),h("maxHeight","397px")("displayDensity",e.esf.displayDensity),u(3),h("ngForOf",e.conditions),u(),h("ngIf",e.showCustomFilterItem()),u(),h("column",e.esf.column)("filteringService",e.esf.grid.filteringService)("overlayComponentId",e.esf.overlayComponentId)("displayDensity",e.esf.displayDensity)}}function Vge(t,r){if(1&t){const n=z();f(0,"button",5),T("click",function(){return I(n),b(p(2).esf.onSelect())}),f(1,"igx-icon"),C(2,"done"),m()()}if(2&t){const n=p(2);h("ngClass",n.esf.column.selected?"igx-excel-filter__actions-selected":"igx-excel-filter__actions-select"),U("aria-label",n.esf.column.selected?n.esf.grid.resourceStrings.igx_grid_excel_deselect:n.esf.grid.resourceStrings.igx_grid_excel_select)}}function Lge(t,r){if(1&t){const n=z();f(0,"button",6),T("click",function(){return I(n),b(p(2).esf.onPin())}),V(1,"igx-icon",7),m()}if(2&t){const n=p(2);U("aria-label",n.esf.column.pinned?n.esf.grid.resourceStrings.igx_grid_excel_unpin:n.esf.grid.resourceStrings.igx_grid_excel_pin),u(),h("name",n.esf.column.pinned?"unpin-left":"pin-left")}}function Gge(t,r){if(1&t){const n=z();f(0,"button",6),T("click",function(){return I(n),b(p(2).esf.onHideToggle())}),f(1,"igx-icon"),C(2),m()()}if(2&t){const n=p(2);U("aria-label",n.esf.column.hidden?n.esf.grid.resourceStrings.igx_grid_excel_show:n.esf.grid.resourceStrings.igx_grid_excel_hide),u(2),Y(n.esf.column.hidden?"visibility":"visibility_off")}}function Hge(t,r){if(1&t&&(f(0,"header",1)(1,"h4"),C(2),m(),f(3,"div",2),y(4,Vge,3,2,"button",3)(5,Lge,2,2,"button",4)(6,Gge,3,2,"button",4),m()()),2&t){const n=p();u(2),Y(n.esf.column.header||n.esf.column.field),u(2),h("ngIf",n.showSelecting),u(),h("ngIf",n.showPinning),u(),h("ngIf",n.showHiding)}}function Bge(t,r){if(1&t){const n=z();f(0,"div",1),T("click",function(){return I(n),b(p().esf.onHideToggle())}),f(1,"span"),C(2),m(),f(3,"igx-icon"),C(4),m()()}if(2&t){const n=p();u(2),Y(n.esf.column.hidden?n.esf.grid.resourceStrings.igx_grid_excel_show:n.esf.grid.resourceStrings.igx_grid_excel_hide),u(2),Y(n.esf.column.hidden?"visibility":"visibility_off")}}function zge(t,r){if(1&t){const n=z();j(0),f(1,"header"),C(2),m(),f(3,"igx-buttongroup")(4,"button",1),T("click",function(){return I(n),b(p().onMoveButtonClicked(0))}),f(5,"igx-icon"),C(6,"arrow_back"),m(),f(7,"span"),C(8),m()(),f(9,"button",1),T("click",function(){return I(n),b(p().onMoveButtonClicked(1))}),f(10,"span"),C(11),m(),f(12,"igx-icon"),C(13,"arrow_forwards"),m()()(),W()}if(2&t){const n=p();u(2),Q(" ",n.esf.grid.resourceStrings.igx_grid_excel_filter_moving_header,"\n"),u(2),h("displayDensity",n.esf.displayDensity)("disabled",n.canNotMoveLeft),u(4),Q(" ","compact"===n.esf.displayDensity?n.esf.grid.resourceStrings.igx_grid_excel_filter_moving_left_short:n.esf.grid.resourceStrings.igx_grid_excel_filter_moving_left," "),u(),h("displayDensity",n.esf.displayDensity)("disabled",n.canNotMoveRight),u(2),Q(" ","compact"===n.esf.displayDensity?n.esf.grid.resourceStrings.igx_grid_excel_filter_moving_right_short:n.esf.grid.resourceStrings.igx_grid_excel_filter_moving_right," ")}}function Uge(t,r){if(1&t){const n=z();f(0,"div",1),T("click",function(){return I(n),b(p().esf.onPin())}),f(1,"span"),C(2),m(),V(3,"igx-icon",2),m()}if(2&t){const n=p();h("ngClass",n.esf.column.pinned?"igx-excel-filter__actions-unpin":"igx-excel-filter__actions-pin"),u(2),Y(n.esf.column.pinned?n.esf.grid.resourceStrings.igx_grid_excel_unpin:n.esf.grid.resourceStrings.igx_grid_excel_pin),u(),rs("name",n.esf.column.pinned?"unpin-left":"pin-left")}}const eV=["indicator"],jge=(t,r,n,e,i)=>({"igx-linear-bar__value--start":t,"igx-linear-bar__value--center":r,"igx-linear-bar__value--end":n,"igx-linear-bar__value--top":e,"igx-linear-bar__value--hidden":i}),Wge=["circle"];function $ge(t,r){1&t&&(Po(),G(0))}function qge(t,r){1&t&&(Po(),f(0,"linearGradient",9),V(1,"stop",10)(2,"stop",11),m()),2&t&&h("id",p().gradientId)}function Kge(t,r){1&t&&G(0)}function Zge(t,r){if(1&t&&(Po(),Zh(),f(0,"span",12),y(1,Kge,1,0,"ng-container",5),m()),2&t){const n=p(),e=P(11);u(),h("ngTemplateOutlet",n.textTemplate?n.textTemplate.template:e)("ngTemplateOutletContext",n.context)}}function Yge(t,r){if(1&t&&(Po(),C(0)),2&t){const n=p();Q(" ",n.textContent?n.textContent:n.valueInPercent+"%","\n")}}const Qge=["ghostTemplate"],Xge=["childrenContainer"];function Jge(t,r){}function epe(t,r){1&t&&y(0,Jge,0,0,"ng-template")}function tpe(t,r){1&t&&y(0,epe,1,0,null,1),2&t&&(p(),h("ngTemplateOutlet",P(9)))}function ipe(t,r){}function npe(t,r){1&t&&y(0,ipe,0,0,"ng-template")}function rpe(t,r){1&t&&(f(0,"div",7,8),J(2),m())}function spe(t,r){if(1&t&&(f(0,"igx-icon"),C(1),m()),2&t){const n=p();U("aria-label",n.expanded?n.resourceStrings.igx_collapse:n.resourceStrings.igx_expand),u(),Q(" ",n.expanded?"keyboard_arrow_down":"keyboard_arrow_right"," ")}}function ope(t,r){if(1&t&&V(0,"igx-checkbox",9),2&t){const n=p();h("checked",n.selected)("readonly",!0)("indeterminate",n.indeterminate)("tabindex",-1)}}function ape(t,r){1&t&&V(0,"span",19)}function lpe(t,r){1&t&&G(0)}const cpe=t=>({"igx-tree-node__toggle-button--hidden":t});function dpe(t,r){if(1&t){const n=z();f(0,"span",20),T("click",function(){return I(n),b(p(2).indicatorClick())}),y(1,lpe,1,0,"ng-container",21),m()}if(2&t){const n=p(2);h("ngClass",Ue(3,cpe,!(null!=n._children&&n._children.length))),u(),h("ngTemplateOutlet",n.expandIndicatorTemplate)("ngTemplateOutletContext",Ue(5,Bt,n.expanded))}}function upe(t,r){1&t&&(f(0,"span",22),V(1,"igx-circular-bar",23),m()),2&t&&(u(),h("animate",!1)("indeterminate",!0)("textVisibility",!1))}function hpe(t,r){1&t&&G(0)}function gpe(t,r){if(1&t){const n=z();f(0,"div",24),T("pointerdown",function(i){return I(n),b(p(2).onSelectorPointerDown(i))})("click",function(i){return I(n),b(p(2).onSelectorClick(i))}),y(1,hpe,1,0,"ng-container",1),m()}if(2&t){p(2);const n=P(7);u(),h("ngTemplateOutlet",n)}}function ppe(t,r){1&t&&V(0,"span",19)}const fpe=(t,r,n,e)=>({"igx-tree-node__wrapper--selected":t,"igx-tree-node__wrapper--active":r,"igx-tree-node__wrapper--focused":n,"igx-tree-node__wrapper--disabled":e}),Vs=()=>[];function mpe(t,r){if(1&t){const n=z();f(0,"div",10,11),T("pointerdown",function(i){return I(n),b(p().onPointerDown(i))})("focus",function(){return I(n),b(p().handleFocus())})("blur",function(){return I(n),b(p().clearFocus())}),f(2,"div",12),y(3,ape,1,0,"span",13),m(),y(4,dpe,2,7,"span",14)(5,upe,2,3,"span",15)(6,gpe,2,1,"div",16),f(7,"div",17),J(8,1),m()(),f(9,"div",18),y(10,ppe,1,0,"span",13),V(11,"div"),m()}if(2&t){const n=p();h("tabIndex",n.tabIndex)("ngClass",so(8,fpe,n.selected,n.active,n.focused,n.disabled)),U("role",n.role),u(3),h("ngForOf",An(13,Vs).constructor(n.level)),u(),h("ngIf",!n.loading),u(),h("ngIf",n.loading),u(),h("ngIf",n.showSelectors),u(4),h("ngForOf",An(14,Vs).constructor(n.level))}}function _pe(t,r){}function vpe(t,r){1&t&&y(0,_pe,0,0,"ng-template")}function xpe(t,r){if(1&t&&(f(0,"div",25),y(1,vpe,1,0,null,1),m()),2&t){p();const n=P(9);u(),h("ngTemplateOutlet",n)}}const ype=[[["igx-tree-node"]],"*"],wpe=["igx-tree-node","*"],Cpe=[[["igx-tree-node"]]],Ipe=["igx-tree-node"],bpe=["leftPanningTmpl"],Dpe=["rightPanningTmpl"];function Spe(t,r){1&t&&G(0)}function Tpe(t,r){if(1&t&&(f(0,"div",7,8),y(2,Spe,1,0,"ng-container",9),m()),2&t){const n=p();Z("width",n.offsetWidthInRem,"rem")("height",n.offsetHeightInRem,"rem"),u(2),h("ngTemplateOutlet",n.list.listItemLeftPanningTemplate.template)("ngTemplateOutletContext",n.context)}}function Epe(t,r){1&t&&G(0)}function Mpe(t,r){if(1&t&&(f(0,"div",10,11),y(2,Epe,1,0,"ng-container",9),m()),2&t){const n=p();Z("width",n.offsetWidthInRem,"rem")("height",n.offsetHeightInRem,"rem"),u(2),h("ngTemplateOutlet",n.list.listItemRightPanningTemplate.template)("ngTemplateOutletContext",n.context)}}function Ape(t,r){1&t&&J(0)}function kpe(t,r){1&t&&(f(0,"div",12),J(1,1),m())}function Rpe(t,r){1&t&&(f(0,"div",13),J(1,2),m())}function Ppe(t,r){1&t&&(f(0,"div",14),J(1,3),m())}function Fpe(t,r){1&t&&G(0)}function Ope(t,r){if(1&t&&(j(0),y(1,Fpe,1,0,"ng-container",15),W()),2&t){p();const n=P(3);u(),h("ngTemplateOutlet",n)}}function Npe(t,r){1&t&&G(0)}function Vpe(t,r){1&t&&G(0)}function Lpe(t,r){1&t&&G(0)}function Gpe(t,r){1&t&&G(0)}function Hpe(t,r){if(1&t&&(j(0),f(1,"div",16),y(2,Npe,1,0,"ng-container",15)(3,Vpe,1,0,"ng-container",15)(4,Lpe,1,0,"ng-container",15)(5,Gpe,1,0,"ng-container",15),m(),W()),2&t){p();const n=P(5),e=P(7),i=P(9),s=P(3);u(2),h("ngTemplateOutlet",n),u(),h("ngTemplateOutlet",e),u(),h("ngTemplateOutlet",i),u(),h("ngTemplateOutlet",s)}}const Bpe=["*",[["","igxListThumbnail",""],["igx-list__item-thumbnail"],["igx-avatar"]],[["","igxListLine",""],["",8,"igx-list__item-lines"],["","igxListLineTitle",""],["","igxListLineSubTitle",""],["",8,"igx-list__item-line-title"],["",8,"igx-list__item-line-subtitle"]],[["","igxListAction",""],["",8,"igx-list__item-actions"]]],zpe=["*","[igxListThumbnail], igx-list__item-thumbnail, igx-avatar","[igxListLine], .igx-list__item-lines, [igxListLineTitle], [igxListLineSubTitle], .igx-list__item-line-title, .igx-list__item-line-subtitle","[igxListAction], .igx-list__item-actions"],Upe=["defaultEmptyList"],jpe=["defaultDataLoading"];function Wpe(t,r){if(1&t&&(f(0,"article",3),C(1),m()),2&t){const n=p();u(),Q(" ",n.resourceStrings.igx_list_no_items," ")}}function $pe(t,r){if(1&t&&(f(0,"article",3),C(1),m()),2&t){const n=p();u(),Q(" ",n.resourceStrings.igx_list_loading," ")}}function qpe(t,r){1&t&&G(0)}function Kpe(t,r){if(1&t&&(j(0),y(1,qpe,1,0,"ng-container",4),W()),2&t){const n=p();u(),h("ngTemplateOutlet",n.template)("ngTemplateOutletContext",n.context)}}const Zpe=["cancelButton"],Ype=["list"],Qpe=["selectAllCheckbox"],Xpe=["addToCurrentFilterCheckbox"],Jpe=["tree"],efe=["defaultExcelStyleLoadingValuesTemplate"];function tfe(t,r){if(1&t){const n=z();f(0,"igx-icon",15),T("click",function(){return I(n),b(p().clearInput())}),C(1," clear "),m()}}function ife(t,r){if(1&t){const n=z();f(0,"igx-list-item",23)(1,"igx-checkbox",24),T("change",function(i){return I(n),b(p(2).onCheckboxChange(i))}),C(2),m()()}if(2&t){const n=r.$implicit,e=r.index,i=p(2);ee("igx-list__item-base--active",(null==i.focusedItem?null:i.focusedItem.id)===i.getItemId(e)),U("id",i.getItemId(e)),u(),h("value",n)("tabindex",-1)("checked",null==n?null:n.isSelected)("disableRipple",!0)("indeterminate",null==n?null:n.indeterminate)("disableTransitions",!0),u(),Q(" ",n.label," ")}}function nfe(t,r){1&t&&G(0)}function rfe(t,r){if(1&t&&(f(0,"div",25),y(1,nfe,1,0,"ng-container",26),m()),2&t){const n=p(2);u(),h("ngTemplateOutlet",n.valuesLoadingTemplate)}}function sfe(t,r){1&t&&G(0)}function ofe(t,r){1&t&&y(0,sfe,1,0,"ng-container",26),2&t&&(p(2),h("ngTemplateOutlet",P(9)))}function afe(t,r){if(1&t){const n=z();f(0,"igx-list",16,17),T("keydown",function(i){return I(n),b(p().handleKeyDown(i))})("focus",function(){return I(n),b(p().onFocus())})("focusout",function(){return I(n),b(p().onFocusOut())}),f(2,"div",18),y(3,ife,3,10,"igx-list-item",19),m(),y(4,rfe,2,1,"ng-template",20)(5,ofe,1,1,"ng-template",21),f(6,"div",22),C(7),m()()}if(2&t){const n=p();h("displayDensity",n.esf.displayDensity)("isLoading",n.isLoading),U("aria-activedescendant",n.activeDescendant),u(3),h("igxForOf",n.displayedListData)("igxForScrollOrientation","vertical")("igxForContainerSize",n.containerSize)("igxForItemSize",n.itemSize),u(4),Q(" ",null==n.esf.grid?null:n.esf.grid.resourceStrings.igx_grid_excel_matches_count.replace("{0}",n.matchesCount)," ")}}function lfe(t,r){if(1&t&&(f(0,"div",34)(1,"igx-checkbox",38,39),C(3),m()()),2&t){const n=p(3);u(),h("value",n.addToCurrentFilterItem)("checked",n.addToCurrentFilterItem.isSelected)("disableRipple",!0)("disableTransitions",!0),u(2),Q(" ",n.addToCurrentFilterItem.label," ")}}function cfe(t,r){if(1&t){const n=z();f(0,"div",33)(1,"div",34)(2,"igx-checkbox",35,36),T("change",function(i){return I(n),b(p(2).onSelectAllCheckboxChange(i))}),C(4),m()(),y(5,lfe,4,5,"div",37),m()}if(2&t){const n=p(2);u(2),h("value",n.selectAllItem)("checked",null==n.selectAllItem?null:n.selectAllItem.isSelected)("disableRipple",!0)("indeterminate",null==n.selectAllItem?null:n.selectAllItem.indeterminate)("disableTransitions",!0),u(2),Q(" ",n.selectAllItem.label," "),u(),h("ngIf",n.searchValue)}}function dfe(t,r){if(1&t&&(f(0,"igx-tree-node",40)(1,"div"),C(2),m()()),2&t){const n=r.$implicit;h("data",n)("selected",n.isSelected),u(2),Y(n.label)}}function ufe(t,r){if(1&t&&(f(0,"igx-tree-node",40)(1,"div"),C(2),m(),y(3,dfe,3,3,"igx-tree-node",31),m()),2&t){const n=r.$implicit;h("data",n)("selected",n.isSelected),u(2),Y(n.label),u(),h("ngForOf",n.children)}}function hfe(t,r){if(1&t&&(f(0,"igx-tree-node",40)(1,"div"),C(2),m(),y(3,ufe,4,4,"igx-tree-node",31),m()),2&t){const n=r.$implicit;h("data",n)("selected",n.isSelected),u(2),Y(n.label),u(),h("ngForOf",n.children)}}function gfe(t,r){if(1&t&&(f(0,"igx-tree-node",40)(1,"div"),C(2),m(),y(3,hfe,4,4,"igx-tree-node",31),m()),2&t){const n=r.$implicit;h("data",n)("selected",n.isSelected),u(2),Y(n.label),u(),h("ngForOf",n.children)}}function pfe(t,r){if(1&t&&(f(0,"igx-tree-node",40)(1,"div"),C(2),m(),y(3,gfe,4,4,"igx-tree-node",31),m()),2&t){const n=r.$implicit;h("data",n)("selected",n.isSelected),u(2),Y(n.label),u(),h("ngForOf",n.children)}}function ffe(t,r){if(1&t&&(f(0,"igx-tree-node",40)(1,"div"),C(2),m(),y(3,pfe,4,4,"igx-tree-node",31),m()),2&t){const n=r.$implicit;h("data",n)("selected",n.isSelected),u(2),Y(n.label),u(),h("ngForOf",n.children)}}function mfe(t,r){if(1&t&&(f(0,"igx-tree-node",40)(1,"div"),C(2),m(),y(3,ffe,4,4,"igx-tree-node",31),m()),2&t){const n=r.$implicit;h("data",n)("selected",n.isSelected),u(2),Y(n.label),u(),h("ngForOf",n.children)}}function _fe(t,r){if(1&t&&(f(0,"igx-tree-node",40)(1,"div"),C(2),m(),y(3,mfe,4,4,"igx-tree-node",31),m()),2&t){const n=r.$implicit;h("data",n)("selected",n.isSelected),u(2),Y(n.label),u(),h("ngForOf",n.children)}}function vfe(t,r){if(1&t&&(f(0,"igx-tree-node",40)(1,"div"),C(2),m(),y(3,_fe,4,4,"igx-tree-node",31),m()),2&t){const n=r.$implicit;h("data",n)("selected",n.isSelected),u(2),Y(n.label),u(),h("ngForOf",n.children)}}function xfe(t,r){if(1&t&&(f(0,"igx-tree-node",40)(1,"div"),C(2),m(),y(3,vfe,4,4,"igx-tree-node",31),m()),2&t){const n=r.$implicit;h("data",n)("selected",n.isSelected),u(2),Y(n.label),u(),h("ngForOf",n.children)}}function yfe(t,r){1&t&&G(0)}function wfe(t,r){if(1&t&&(f(0,"div",25),y(1,yfe,1,0,"ng-container",26),m()),2&t){const n=p(2);u(),h("ngTemplateOutlet",n.valuesLoadingTemplate)}}function Cfe(t,r){1&t&&G(0)}function Ife(t,r){1&t&&y(0,Cfe,1,0,"ng-container",26),2&t&&(p(2),h("ngTemplateOutlet",P(9)))}function bfe(t,r){if(1&t){const n=z();f(0,"div",27),y(1,cfe,6,7,"div",28),f(2,"igx-tree",29,30),T("nodeSelection",function(i){return I(n),b(p().onNodeSelectionChange(i))}),y(4,xfe,4,4,"igx-tree-node",31),m(),y(5,wfe,2,1,"ng-template",20)(6,Ife,1,1,"ng-template",32),m()}if(2&t){const n=p();u(),h("ngIf",!n.isTreeEmpty()),u(),h("displayDensity",n.esf.displayDensity),u(2),h("ngForOf",n.displayedListData),u(2),h("ngIf",n.isTreeEmpty())}}function Dfe(t,r){if(1&t&&(f(0,"div",41),C(1),m()),2&t){const n=p();u(),Q(" ",null==n.esf.grid?null:n.esf.grid.resourceStrings.igx_grid_excel_no_matches," ")}}function Sfe(t,r){1&t&&V(0,"igx-circular-bar",42),2&t&&h("indeterminate",!0)}function Tfe(t,r){if(1&t){const n=z();f(0,"div",1),T("click",function(){return I(n),b(p().esf.onSelect())}),f(1,"span"),C(2),m(),f(3,"igx-icon"),C(4,"done"),m()()}if(2&t){const n=p();h("ngClass",n.esf.column.selected?"igx-excel-filter__actions-selected":"igx-excel-filter__actions-select"),U("aria-pressed",n.esf.column.selected),u(2),Y(n.esf.grid.resourceStrings.igx_grid_excel_select)}}const Efe=["sortButtonGroup"];function Mfe(t,r){if(1&t){const n=z();j(0),f(1,"header"),C(2),m(),f(3,"igx-buttongroup",null,1)(5,"button",2),T("click",function(){return I(n),b(p().onSortButtonClicked(1))}),f(6,"igx-icon"),C(7,"arrow_upwards"),m(),f(8,"span"),C(9),m()(),f(10,"button",2),T("click",function(){return I(n),b(p().onSortButtonClicked(2))}),f(11,"igx-icon"),C(12,"arrow_downwards"),m(),f(13,"span"),C(14),m()()(),W()}if(2&t){const n=p();u(2),Q(" ",n.esf.grid.resourceStrings.igx_grid_excel_filter_sorting_header,"\n"),u(3),h("displayDensity",n.esf.displayDensity),U("data-togglable",!0),u(4),Q(" ","compact"===n.esf.displayDensity?n.esf.grid.resourceStrings.igx_grid_excel_filter_sorting_asc_short:n.esf.grid.resourceStrings.igx_grid_excel_filter_sorting_asc," "),u(),h("displayDensity",n.esf.displayDensity),U("data-togglable",!0),u(4),Q(" ","compact"===n.esf.displayDensity?n.esf.grid.resourceStrings.igx_grid_excel_filter_sorting_desc_short:n.esf.grid.resourceStrings.igx_grid_excel_filter_sorting_desc," ")}}const Afe=["mainDropdown"],kfe=["defaultExcelColumnOperations"],Rfe=["defaultExcelFilterOperations"];function Pfe(t,r){1&t&&V(0,"igx-excel-style-sorting")}function Ffe(t,r){1&t&&V(0,"igx-excel-style-moving")}function Ofe(t,r){1&t&&V(0,"igx-excel-style-pinning")}function Nfe(t,r){1&t&&V(0,"igx-excel-style-hiding")}function Vfe(t,r){1&t&&V(0,"igx-excel-style-selecting")}function Lfe(t,r){if(1&t&&(V(0,"igx-excel-style-header",5),y(1,Pfe,1,0,"igx-excel-style-sorting",6)(2,Ffe,1,0,"igx-excel-style-moving",6)(3,Ofe,1,0,"igx-excel-style-pinning",6)(4,Nfe,1,0,"igx-excel-style-hiding",6)(5,Vfe,1,0,"igx-excel-style-selecting",6)),2&t){const n=p();h("showHiding","comfortable"!==n.displayDensity&&!(null!=n.column&&n.column.disableHiding))("showPinning","comfortable"!==n.displayDensity&&!(null!=n.column&&n.column.disablePinning))("showSelecting","comfortable"!==n.displayDensity&&n.columnSelectable()),u(),h("ngIf",null==n.column?null:n.column.sortable),u(),h("ngIf",null==n.grid?null:n.grid.moving),u(),h("ngIf",!(null!=n.column&&n.column.disablePinning)&&"comfortable"===n.displayDensity),u(),h("ngIf",!(null!=n.column&&n.column.disableHiding)&&"comfortable"===n.displayDensity),u(),h("ngIf",n.columnSelectable()&&"comfortable"===n.displayDensity)}}function Gfe(t,r){1&t&&V(0,"igx-excel-style-clear-filters")(1,"igx-excel-style-conditional-filter")(2,"igx-excel-style-search")}function Hfe(t,r){1&t&&(j(0),J(1),W())}function Bfe(t,r){1&t&&(j(0),J(1,1),W())}const zfe=[[["igx-excel-style-column-operations"],["","igxExcelStyleColumnOperations",""]],[["igx-excel-style-filter-operations"],["","igxExcelStyleFilterOperations",""]]],Ufe=(t,r)=>({"igx-excel-filter__menu--cosy":t,"igx-excel-filter__menu--compact":r}),jfe=["igx-excel-style-column-operations,[igxExcelStyleColumnOperations]","igx-excel-style-filter-operations,[igxExcelStyleFilterOperations]"],Wfe=["defaultESFHeaderIconTemplate"],$fe=["defaultSortHeaderIconTemplate"];function qfe(t,r){if(1&t&&(f(0,"span",6),C(1),m()),2&t){const n=p();h("title",n.title),u(),Y(n.column.header||n.column.field)}}function Kfe(t,r){1&t&&(f(0,"igx-icon"),C(1,"more_vert"),m())}function Zfe(t,r){if(1&t&&(f(0,"igx-icon"),C(1),m()),2&t){const n=p();u(),Y(n.sortDirection<2?"arrow_upward":"arrow_downward")}}function Yfe(t,r){1&t&&G(0)}function Qfe(t,r){1&t&&G(0)}function Xfe(t,r){if(1&t){const n=z();j(0),f(1,"div",8),T("pointerdown",function(i){return I(n),b(p(2).onPointerDownIndicator(i))})("click",function(i){return I(n),b(p(2).onSortingIconClick(i))}),R(2,"sortingIndex"),y(3,Qfe,1,0,"ng-container",4),m(),W()}if(2&t){const n=p(2);u(),U("data-sortIndex","single"===n.grid.sortingOptions.mode&&n.grid.sortingExpressions.length<=1?null:Gt(2,3,n.column.field,n.grid.sortingExpressions)),u(2),h("ngTemplateOutlet",n.sortIconTemplate)("ngTemplateOutletContext",Ue(6,Bt,n))}}function Jfe(t,r){1&t&&G(0)}function eme(t,r){if(1&t){const n=z();j(0),f(1,"div",9),T("pointerdown",function(i){return I(n),b(p(2).onPointerDownIndicator(i))})("click",function(i){return I(n),b(p(2).onFilteringIconClick(i))}),y(2,Jfe,1,0,"ng-container",4),m(),W()}if(2&t){const n=p(2);u(),h("ngClass",n.filterIconClassName),u(),h("ngTemplateOutlet",n.esfIconTemplate)("ngTemplateOutletContext",Ue(3,Bt,n))}}function tme(t,r){if(1&t&&(j(0),f(1,"div",7),y(2,Xfe,4,8,"ng-container",5)(3,eme,3,5,"ng-container",5),m(),W()),2&t){const n=p();u(2),h("ngIf",n.column.sortable&&!n.disabled),u(),h("ngIf",n.grid.allowFiltering&&n.column.filterable&&"excelStyleFilter"===n.grid.filterMode)}}const ey=(t,r)=>({$implicit:t,column:r}),ime=["emptyFilter"],nme=["defaultFilter"],rme=["complexFilter"],tV=["chipsArea"],sme=["moreIcon"],ome=["ghostChip"],ame=["complexChip"];function lme(t,r){if(1&t){const n=z();f(0,"igx-chips-area",4)(1,"igx-chip",5,6),T("click",function(){return I(n),b(p().onChipClicked())}),f(3,"igx-icon",7),C(4,"filter_list"),m(),f(5,"span"),C(6),m()()()}if(2&t){const n=p();U("draggable",!1),u(),h("displayDensity",n.displayDensity)("tabIndex",-1),U("draggable",!1),u(2),U("draggable",!1),u(2),U("draggable",!1),u(),Y(n.filteringService.grid.resourceStrings.igx_grid_filter)}}function cme(t,r){if(1&t){const n=z();f(0,"igx-chip",15),T("click",function(){I(n);const i=p().$implicit;return b(p(2).onChipClicked(i.expression))})("remove",function(i){I(n);const s=p().$implicit;return b(p(2).onChipRemoved(i,s))}),V(1,"igx-icon",16),f(2,"span",null,17),C(4),m()()}if(2&t){const n=p().$implicit,e=p(2);h("removable",!0)("tabIndex",-1)("displayDensity",e.displayDensity),u(),h("name",n.expression.condition.iconName),u(3),Q(" ",e.filteringService.getChipLabel(n.expression)," ")}}function dme(t,r){if(1&t&&(f(0,"span",18),C(1),m()),2&t){const n=p().$implicit,e=p(2);u(),Y(e.filteringService.getOperatorAsString(n.afterOperator))}}function ume(t,r){if(1&t&&(j(0),y(1,cme,5,5,"igx-chip",13)(2,dme,2,1,"span",14),W()),2&t){const n=r.last,e=r.index,i=p(2);u(),h("ngIf",i.isChipVisible(e)),u(),h("ngIf",!n&&i.isChipVisible(e+1))}}function hme(t,r){if(1&t){const n=z();f(0,"igx-chips-area",4,8),y(2,ume,3,2,"ng-container",9),f(3,"div",10,11),T("click",function(){return I(n),b(p().onChipClicked())}),f(5,"igx-icon"),C(6,"filter_list"),m(),V(7,"igx-badge",12),m()()}if(2&t){const n=p();u(2),h("ngForOf",n.expressionsList),u(),h("ngClass",n.filteringIndicatorClass()),u(4),h("value",n.moreFiltersCount)}}function gme(t,r){if(1&t){const n=z();f(0,"igx-chip",19,20),T("remove",function(){return I(n),b(p().clearFiltering())}),f(2,"igx-icon",7),C(3,"filter_list"),m(),f(4,"span"),C(5),m()()}if(2&t){const n=p();h("removable",!0)("displayDensity",n.displayDensity)("tabIndex",-1),u(5),Y(n.filteringService.grid.resourceStrings.igx_grid_complex_filter)}}function pme(t,r){1&t&&G(0)}function fme(t,r){1&t&&V(0,"span",7)}function mme(t,r){if(1&t&&(V(0,"igx-grid-header-group",9),R(1,"igxHeaderGroupStyle")),2&t){const n=p().$implicit,e=p(2);h("ngClass",n.headerGroupClasses)("ngStyle",he(1,7,n.headerGroupStyles,n,e.grid.pipeTrigger))("column",n)("igxColumnMovingDrag",n)("ghostHost",e.grid.outlet.nativeElement)("igxColumnMovingDrop",n),U("droppable",!0)}}function _me(t,r){if(1&t&&(j(0),y(1,mme,2,11,"igx-grid-header-group",8),W()),2&t){const n=r.$implicit;u(),h("ngIf",!n.hidden)}}function vme(t,r){1&t&&V(0,"span",10)}const xme=(t,r)=>({"igx-grid-th--pinned-last":t,"igx-grid-th--pinned-first":r}),iV=(t,r)=>({"grid-template-rows":t,"grid-template-columns":r});function yme(t,r){if(1&t&&(j(0),y(1,fme,1,0,"span",3),f(2,"div",4),y(3,_me,2,1,"ng-container",5),m(),y(4,vme,1,0,"span",6),W()),2&t){const n=p();u(),h("ngIf",n.grid.moving),u(),h("ngClass",Wi(5,xme,n.hasLastPinnedChildColumn,n.hasFirstPinnedChildColumn))("ngStyle",Wi(8,iV,n.column.getGridTemplate(!0),n.column.getGridTemplate(!1))),u(),h("ngForOf",n.column.children),u(),h("ngIf",n.grid.moving)}}function wme(t,r){if(1&t&&(f(0,"span",11),C(1),m()),2&t){const n=p();h("title",n.title),u(),Y(n.column.header)}}function Cme(t,r){if(1&t&&(f(0,"igx-icon"),C(1),m()),2&t){const n=p();u(),Q("",n.column.expanded?"expand_more":"chevron_right"," ")}}function Ime(t,r){1&t&&V(0,"span",7)}function bme(t,r){1&t&&G(0)}function Dme(t,r){if(1&t){const n=z();j(0),f(1,"div",15),T("pointerdown",function(i){return I(n),b(p(2).onPointerDownIndicator(i))})("click",function(i){return I(n),b(p(2).toggleExpandState(i))}),y(2,bme,1,0,"ng-container",13),m(),W()}if(2&t){const n=p(2),e=P(4);u(2),h("ngTemplateOutlet",n.column.collapsibleIndicatorTemplate?n.column.collapsibleIndicatorTemplate:e)("ngTemplateOutletContext",Wi(2,ey,n.column,n.column))}}function Sme(t,r){1&t&&G(0)}function Tme(t,r){if(1&t&&(f(0,"igx-grid-header-group",18),R(1,"igxHeaderGroupWidth"),R(2,"igxHeaderGroupWidth"),R(3,"igxHeaderGroupStyle"),m()),2&t){const n=p().$implicit,e=p(3);Z("min-width",he(1,7,n.calcWidth,e.grid.defaultHeaderGroupMinWidth,e.grid.hasColumnLayouts))("flex-basis",he(2,11,n.calcWidth,e.grid.defaultHeaderGroupMinWidth,e.grid.hasColumnLayouts)),h("ngClass",n.headerGroupClasses)("ngStyle",he(3,15,n.headerGroupStyles,n,e.grid.pipeTrigger))("column",n)}}function Eme(t,r){if(1&t&&(j(0),y(1,Tme,4,19,"igx-grid-header-group",17),W()),2&t){const n=r.$implicit;u(),h("ngIf",!n.hidden)}}function Mme(t,r){if(1&t&&(f(0,"div",16),y(1,Eme,2,1,"ng-container",5),m()),2&t){const n=p(2);u(),h("ngForOf",n.column.children)}}function Ame(t,r){1&t&&V(0,"span",10)}const kme=(t,r,n,e,i,s)=>({"igx-grid-th--pinned-last":t,"igx-grid-th--pinned-first":r,"igx-grid-th--collapsible":n,"igx-grid-th--selectable":e,"igx-grid-th--selected":i,"igx-grid-th--active":s});function Rme(t,r){if(1&t){const n=z();j(0),y(1,Ime,1,0,"span",3),f(2,"div",12),T("pointerdown",function(i){return I(n),b(p().pointerdown(i))})("click",function(i){return I(n),b(p().groupClicked(i))})("pointerenter",function(){return I(n),b(p().onPinterEnter())})("pointerleave",function(){return I(n),b(p().onPointerLeave())}),y(3,Dme,3,5,"ng-container",0)(4,Sme,1,0,"ng-container",13),m(),y(5,Mme,2,1,"div",14)(6,Ame,1,0,"span",6),W()}if(2&t){const n=p(),e=P(2);u(),h("ngIf",n.grid.moving),u(),h("ngClass",Rt(14,kme,n.hasLastPinnedChildColumn,n.hasFirstPinnedChildColumn,n.column.collapsible,n.selectable,n.selected,n.activeGroup))("igxColumnMovingDrag",n.column)("ghostHost",n.grid.outlet.nativeElement)("igxColumnMovingDrop",n.column),U("aria-label",n.column.header||n.column.field)("aria-expanded",n.column.expanded)("aria-selected",n.column.selected)("droppable",!0),u(),h("ngIf",n.column.collapsible),u(),h("ngTemplateOutlet",n.column.headerTemplate?n.column.headerTemplate:e)("ngTemplateOutletContext",Wi(21,ey,n.column,n.column)),u(),h("ngIf",!n.grid.isPivot),u(),h("ngIf",n.grid.moving)}}function Pme(t,r){1&t&&V(0,"span",7)}function Fme(t,r){1&t&&V(0,"igx-grid-filtering-cell",22),2&t&&(h("column",p(2).column),U("draggable",!1))}function Ome(t,r){if(1&t&&V(0,"span",23),2&t){const n=p(2);Z("cursor",n.colResizingService.resizeCursor),h("igxResizeHandle",n.column),U("draggable",!1)}}function Nme(t,r){1&t&&V(0,"span",10)}function Vme(t,r){if(1&t){const n=z();j(0),y(1,Pme,1,0,"span",3),f(2,"igx-grid-header",19),T("pointerdown",function(){return I(n),b(p().activate())}),R(3,"igxHeaderGroupStyle"),m(),y(4,Fme,1,2,"igx-grid-filtering-cell",20)(5,Ome,1,4,"span",21)(6,Nme,1,0,"span",6),W()}if(2&t){const n=p();u(),h("ngIf",n.grid.moving),u(),h("id",n.grid.id+"_"+n.column.field)("ngClass",n.column.headerClasses)("ngStyle",he(3,13,n.column.headerStyles,n.column,n.grid.pipeTrigger))("igxColumnMovingDrag",n.column)("ghostHost",n.grid.outlet.nativeElement)("igxColumnMovingDrop",n.column)("column",n.column)("density",n.grid.displayDensity),U("droppable",!0),u(2),h("ngIf",n.grid.allowFiltering&&"quickFilter"===n.grid.filterMode),u(),h("ngIf",!n.column.columnGroup&&n.column.resizable),u(),h("ngIf",n.grid.moving)}}const Lme=["defaultFilterUI"],Gme=["defaultDateUI"],Hme=["defaultTimeUI"],Bme=["defaultDateTimeUI"],zme=["inputGroupConditions"],Ume=["inputGroupPrefix"],jme=["operand"],Wme=["closeButton"],$me=["operators"];function qme(t,r){if(1&t&&(f(0,"igx-drop-down-item",17)(1,"div",18),V(2,"igx-icon",19),f(3,"span",20),C(4),m()()()),2&t){const n=r.$implicit,e=p();h("value",n)("selected",e.isConditionSelected(n)),u(2),h("name",e.getCondition(n).iconName),u(2),Y(e.translateCondition(n))}}function Kme(t,r){if(1&t){const n=z();f(0,"igx-suffix")(1,"igx-icon",27),T("keydown",function(i){return I(n),b(p(2).onCommitKeyDown(i))})("click",function(){return I(n),b(p(2).onCommitClick())}),C(2,"done"),m(),f(3,"igx-icon",27),T("keydown",function(i){return I(n),b(p(2).onClearKeyDown(i))})("click",function(){return I(n),b(p(2).onClearClick())}),C(4,"clear"),m()()}}function Zme(t,r){if(1&t){const n=z();f(0,"igx-input-group",21,22),T("focusout",function(){return I(n),b(p().onInputGroupFocusout())}),f(2,"igx-prefix",23,24),T("click",function(i){return I(n),b(p().inputGroupPrefixClick(i))})("keydown",function(i){return I(n),b(p().onPrefixKeyDown(i))}),V(4,"igx-icon",19),m(),f(5,"input",25,26),T("input",function(i){return I(n),b(p().onInput(i))})("click",function(){return I(n),b(p().onInputClick())})("compositionstart",function(){return I(n),b(p().onCompositionStart())})("compositionend",function(){return I(n),b(p().onCompositionEnd())})("keydown",function(i){return I(n),b(p().onInputKeyDown(i))})("keyup",function(){return I(n),b(p().onInputKeyUp())}),m(),y(7,Kme,5,0,"igx-suffix",16),m()}if(2&t){const n=p(),e=P(1);h("displayDensity",n.displayDensity),u(2),h("igxDropDownItemNavigation",e),u(2),h("name",n.getIconName()),u(),h("placeholder",n.placeholder)("value",n.value)("type",n.type)("readonly",n.isUnaryCondition),u(2),h("ngIf",n.value||0===n.value)}}function Yme(t,r){if(1&t){const n=z();f(0,"igx-suffix")(1,"igx-icon",27),T("keydown",function(i){return I(n),b(p(2).onCommitKeyDown(i))})("click",function(i){return I(n),b(p(2).onCommitClick(i))}),C(2,"done"),m(),f(3,"igx-icon",27),T("keydown",function(i){return I(n),b(p(2).onClearKeyDown(i))})("click",function(i){return I(n),b(p(2).clearInput(i))}),C(4,"clear"),m()()}}function Qme(t,r){if(1&t){const n=z();f(0,"igx-date-picker",28,29),it("valueChange",function(i){I(n);const s=p();return tt(s.value,i)||(s.value=i),b(i)}),T("click",function(){I(n);const i=P(1);return b(p().expression.condition.isUnary?null:i.open())})("keydown",function(i){return I(n),b(p().onInputKeyDown(i))})("focusout",function(){return I(n),b(p().onInputGroupFocusout())})("closed",function(){return I(n),b(p().focusEditElement())}),f(2,"igx-prefix",23,24),T("click",function(i){return I(n),b(p().inputGroupPrefixClick(i))})("keydown",function(i){return I(n),b(p().onPrefixKeyDown(i))}),V(4,"igx-icon",19),m(),y(5,Yme,5,0,"igx-suffix",16),V(6,"igx-picker-toggle")(7,"igx-picker-clear"),m()}if(2&t){const n=p(),e=P(1);Je("value",n.value),h("readOnly",!0)("outlet",n.filteringService.grid.outlet)("locale",n.filteringService.grid.locale)("displayFormat",n.column.pipeArgs.format)("formatter",n.column.formatter)("placeholder",n.placeholder)("weekStart",n.column.pipeArgs.weekStart)("displayDensity",n.displayDensity),u(2),h("igxDropDownItemNavigation",e),u(2),h("name",n.expression.condition.iconName),u(),h("ngIf",n.value)}}function Xme(t,r){if(1&t){const n=z();f(0,"igx-suffix")(1,"igx-icon",27),T("keydown",function(i){return I(n),b(p(2).onCommitKeyDown(i))})("click",function(i){return I(n),b(p(2).onCommitClick(i))}),C(2,"done"),m(),f(3,"igx-icon",27),T("keydown",function(i){return I(n),b(p(2).onClearKeyDown(i))})("click",function(i){return I(n),b(p(2).clearInput(i))}),C(4,"clear"),m()()}}function Jme(t,r){if(1&t){const n=z();f(0,"igx-time-picker",30,29),it("valueChange",function(i){I(n);const s=p();return tt(s.value,i)||(s.value=i),b(i)}),T("closed",function(){return I(n),b(p().focusEditElement())})("focusout",function(){return I(n),b(p().onInputGroupFocusout())})("keydown",function(i){return I(n),b(p().onInputKeyDown(i))})("click",function(){I(n);const i=P(1);return b(p().expression.condition.isUnary?null:i.open())}),f(2,"igx-prefix",23,24),T("click",function(i){return I(n),b(p().inputGroupPrefixClick(i))})("keydown",function(i){return I(n),b(p().onPrefixKeyDown(i))}),V(4,"igx-icon",19),m(),y(5,Xme,5,0,"igx-suffix",16),V(6,"igx-picker-toggle")(7,"igx-picker-clear"),m()}if(2&t){const n=p(),e=P(1);Je("value",n.value),h("inputFormat",n.column.defaultTimeFormat)("locale",n.filteringService.grid.locale)("formatter",n.column.formatter)("outlet",n.filteringService.grid.outlet)("displayDensity",n.displayDensity)("readOnly",!0)("placeholder",n.placeholder),u(2),h("igxDropDownItemNavigation",e),u(2),h("name",n.expression.condition.iconName),u(),h("ngIf",n.value)}}function e_e(t,r){if(1&t){const n=z();f(0,"igx-suffix")(1,"igx-icon",27),T("keydown",function(i){return I(n),b(p(2).onCommitKeyDown(i))})("click",function(){return I(n),b(p(2).onCommitClick())}),C(2,"done"),m(),f(3,"igx-icon",27),T("keydown",function(i){return I(n),b(p(2).onClearKeyDown(i))})("click",function(){return I(n),b(p(2).onClearClick())}),C(4,"clear"),m()()}}function t_e(t,r){if(1&t){const n=z();f(0,"igx-input-group",21,22),T("focusout",function(){return I(n),b(p().onInputGroupFocusout())}),f(2,"igx-prefix",23,24),T("click",function(i){return I(n),b(p().inputGroupPrefixClick(i))})("keydown",function(i){return I(n),b(p().onPrefixKeyDown(i))}),V(4,"igx-icon",19),m(),f(5,"input",31,26),T("valueChange",function(i){return I(n),b(p().onInput(i))})("click",function(){return I(n),b(p().onInputClick())})("keydown",function(i){return I(n),b(p().onInputKeyDown(i))})("keyup",function(){return I(n),b(p().onInputKeyUp())}),m(),y(7,e_e,5,0,"igx-suffix",16),m()}if(2&t){const n=p(),e=P(1);h("displayDensity",n.displayDensity),u(2),h("igxDropDownItemNavigation",e),u(2),h("name",n.getIconName()),u(),h("placeholder",n.placeholder)("igxDateTimeEditor",n.column.defaultDateTimeFormat)("value",n.value)("readonly",n.isUnaryCondition),u(2),h("ngIf",n.value||0===n.value)}}function i_e(t,r){1&t&&G(0)}function n_e(t,r){if(1&t){const n=z();f(0,"button",32),T("keydown",function(i){return I(n),b(p().onLeftArrowKeyDown(i))})("click",function(){return I(n),b(p().scrollChipsOnArrowPress("left"))}),f(1,"igx-icon"),C(2,"navigate_before"),m()()}}function r_e(t,r){if(1&t){const n=z();f(0,"span",38)(1,"button",39),T("click",function(i){I(n);const s=p().index;return b(p().toggleOperatorsDropDown(i,s))}),f(2,"igx-icon"),C(3,"expand_more"),m(),f(4,"span"),C(5),m()(),f(6,"igx-drop-down",40,41),T("selectionChanging",function(i){I(n);const s=p().$implicit;return b(p().onLogicOperatorChanged(i,s))}),f(8,"igx-drop-down-item",17),C(9),m(),f(10,"igx-drop-down-item",17),C(11),m()()()}if(2&t){const n=P(7),e=p().$implicit,i=p();u(),h("igxDropDownItemNavigation",n)("displayDensity",i.displayDensity),u(4),Y(i.filteringService.getOperatorAsString(e.afterOperator)),u(),h("displayDensity",i.column.grid.displayDensity),u(2),h("value",0)("selected",0===e.afterOperator),u(),Y(i.filteringService.grid.resourceStrings.igx_grid_filter_operator_and),u(),h("value",1)("selected",1===e.afterOperator),u(),Y(i.filteringService.grid.resourceStrings.igx_grid_filter_operator_or)}}function s_e(t,r){if(1&t){const n=z();j(0,33),f(1,"igx-chip",34,35),T("pointerdown",function(i){I(n);const s=P(2);return b(p().onChipPointerdown(i,s))})("click",function(i){const o=I(n).$implicit;return b(p().onChipClick(i,o))})("keydown",function(i){const o=I(n).$implicit;return b(p().onChipKeyDown(i,o))})("remove",function(i){const o=I(n).$implicit;return b(p().onChipRemoved(i,o))}),V(3,"igx-icon",36),f(4,"span"),C(5),m()(),y(6,r_e,12,10,"span",37),W()}if(2&t){const n=r.$implicit,e=r.last,i=p();u(),h("selectable",!1)("selected",n.isSelected)("displayDensity",i.displayDensity)("removable",!0),u(2),h("name",n.expression.condition.iconName),u(2),Y(i.filteringService.getChipLabel(n.expression)),u(),h("ngIf",!e)}}function o_e(t,r){if(1&t){const n=z();f(0,"button",42),T("click",function(){return I(n),b(p().scrollChipsOnArrowPress("right"))}),f(1,"igx-icon"),C(2,"navigate_next"),m()()}}function a_e(t,r){if(1&t){const n=z();j(0),f(1,"button",43),T("click",function(){return I(n),b(p().clearFiltering())}),f(2,"igx-icon"),C(3,"refresh"),m(),f(4,"span"),C(5),m()(),f(6,"button",44,45),T("click",function(){return I(n),b(p().close())}),f(8,"igx-icon"),C(9,"close"),m(),f(10,"span"),C(11),m()(),W()}if(2&t){const n=p();u(),h("displayDensity",n.displayDensity)("disabled",n.disabled)("tabindex",n.disabled),u(4),Y(n.filteringService.grid.resourceStrings.igx_grid_filter_row_reset),u(),h("displayDensity",n.displayDensity),u(5),Y(n.filteringService.grid.resourceStrings.igx_grid_filter_row_close)}}function l_e(t,r){if(1&t){const n=z();j(0),f(1,"button",46),T("click",function(){return I(n),b(p().clearFiltering())}),f(2,"igx-icon"),C(3,"refresh"),m()(),f(4,"button",47,45),T("click",function(){return I(n),b(p().close())}),f(6,"igx-icon"),C(7,"close"),m()(),W()}if(2&t){const n=p();u(),Z("--component-size",n.getIconBtnSize()),h("disabled",n.disabled)("tabindex",n.disabled),u(3),Z("--component-size",n.getIconBtnSize())}}const nV=["headerVirtualContainer"],c_e=["headerDragContainer"],d_e=["headerSelectorContainer"],u_e=["headerGroupContainer"],rV=["headSelectorBaseTemplate"],h_e=["headerHierarchyExpander"];function g_e(t,r){if(1&t&&(j(0),V(1,"span",8),W()),2&t){const n=p();u(),Z("left",n.grid.pinnedWidth,"px"),h("igxColumnMovingDrop",n.headerContainer)}}function p_e(t,r){if(1&t&&(j(0),V(1,"span",9),W()),2&t){const n=p();u(),Z("left",n.grid.pinnedWidth,"px"),h("igxColumnMovingDrop",n.headerContainer)}}function f_e(t,r){1&t&&G(0)}function m_e(t,r){if(1&t&&(j(0),f(1,"div",10,11),T("pointerdown",function(e){return e.preventDefault()}),f(3,"div",12),y(4,f_e,1,0,"ng-container",13),m()(),W()),2&t){const n=p();u(),ee("igx-grid__drag-indicator--header",!n.grid.isRowSelectable),u(3),h("ngTemplateOutlet",n.grid.dragIndicatorIconTemplate||n.grid.dragIndicatorIconBase)}}function __e(t,r){1&t&&G(0,null,17)}function v_e(t,r){if(1&t){const n=z();j(0),f(1,"div",14,15),T("click",function(i){return I(n),b(p().headerRowSelection(i))})("pointerdown",function(i){return i.preventDefault()}),y(3,__e,2,0,"ng-container",16),m(),W()}if(2&t){const n=p(),e=P(17);u(),ee("igx-grid__cbx-selection--push",n.grid.filteringService.isFilterRowVisible),u(2),h("ngTemplateOutlet",n.grid.headSelectorTemplate||e)("ngTemplateOutletContext",n.rowSelectorsContext)}}function x_e(t,r){1&t&&G(0)}const y_e=(t,r,n)=>({"igx-grid__hierarchical-expander igx-grid__hierarchical-expander--header igx-grid__tr-action":t,"igx-grid__hierarchical-expander--push":r,"igx-grid__hierarchical-expander--no-border":n});function w_e(t,r){if(1&t){const n=z();j(0),f(1,"div",18,19),T("click",function(){return I(n),b(p().grid.toggleAll())})("pointerdown",function(i){return i.preventDefault()}),y(3,x_e,1,0,"ng-container",16),m(),W()}if(2&t){const n=p();u(),h("hidden",!n.grid.hasExpandableChildren||!n.grid.hasVisibleColumns)("ngClass",Vg(4,y_e,n.grid.hasExpandableChildren,n.grid.filteringService.isFilterRowVisible,n.grid.isRowSelectable||n.grid.rowDraggable)),u(2),h("ngTemplateOutlet",n.grid.iconTemplate)("ngTemplateOutletContext",Ue(8,Bt,n.grid))}}function C_e(t,r){1&t&&G(0)}function I_e(t,r){if(1&t){const n=z();j(0),f(1,"div",20,21),T("click",function(){return I(n),b(p().grid.toggleAllGroupRows())})("pointerdown",function(i){return i.preventDefault()}),y(3,C_e,1,0,"ng-container",16),m(),W()}if(2&t){const n=p();u(),gn(n.indentationCSSClasses),u(2),h("ngTemplateOutlet",n.grid.iconTemplate)("ngTemplateOutletContext",Ue(5,Bt,n.grid))}}function b_e(t,r){if(1&t&&(j(0),f(1,"igx-grid-header-group",23),R(2,"igxHeaderGroupWidth"),R(3,"igxHeaderGroupWidth"),R(4,"igxHeaderGroupStyle"),m(),W()),2&t){const n=r.$implicit,e=p(2);u(),Z("min-width",he(2,7,n.resolvedWidth,e.grid.defaultHeaderGroupMinWidth,e.hasMRL))("flex-basis",he(3,11,n.resolvedWidth,e.grid.defaultHeaderGroupMinWidth,e.hasMRL)),h("ngClass",n.headerGroupClasses)("ngStyle",he(4,15,n.headerGroupStyles,n,e.grid.pipeTrigger))("column",n)}}function D_e(t,r){if(1&t&&(j(0),y(1,b_e,5,19,"ng-container",22),R(2,"igxTopLevel"),W()),2&t){const n=p();u(),h("ngForOf",ht(2,1,n.pinnedColumnCollection))}}function S_e(t,r){if(1&t&&(f(0,"igx-grid-header-group",23),R(1,"igxHeaderGroupWidth"),R(2,"igxHeaderGroupWidth"),R(3,"igxHeaderGroupStyle"),m()),2&t){const n=r.$implicit,e=p();Z("min-width",he(1,7,n.resolvedWidth,e.grid.defaultHeaderGroupMinWidth,e.hasMRL))("flex-basis",he(2,11,n.resolvedWidth,e.grid.defaultHeaderGroupMinWidth,e.hasMRL)),h("ngClass",n.headerGroupClasses)("ngStyle",he(3,15,n.headerGroupStyles,n,e.grid.pipeTrigger))("column",n)}}function T_e(t,r){if(1&t&&(j(0),f(1,"igx-grid-header-group",23),R(2,"igxHeaderGroupWidth"),R(3,"igxHeaderGroupWidth"),R(4,"igxHeaderGroupStyle"),m(),W()),2&t){const n=r.$implicit,e=p(2);u(),Z("min-width",he(2,9,n.resolvedWidth,e.grid.defaultHeaderGroupMinWidth,e.hasMRL))("flex-basis",he(3,13,n.resolvedWidth,e.grid.defaultHeaderGroupMinWidth,e.hasMRL))("left",n.rightPinnedOffset),h("ngClass",n.headerGroupClasses)("ngStyle",he(4,17,n.headerGroupStyles,n,e.grid.pipeTrigger))("column",n)}}function E_e(t,r){if(1&t&&(j(0),y(1,T_e,5,21,"ng-container",22),R(2,"igxTopLevel"),W()),2&t){const n=p();u(),h("ngForOf",ht(2,1,n.pinnedColumnCollection))}}function M_e(t,r){if(1&t&&(j(0),V(1,"igx-grid-filtering-row",24,25),W()),2&t){const n=p();u(),Z("width",n.width,"px"),h("column",n.grid.filteringService.filteredColumn)}}function A_e(t,r){if(1&t&&(j(0),V(1,"span",26),W()),2&t){const n=p();u(),h("igxColumnMovingDrop",n.headerContainer)}}const k_e=t=>({visibility:t});function R_e(t,r){if(1&t&&(f(0,"div",27),V(1,"igx-checkbox",28,29),m()),2&t){const n=r.$implicit,e=p();u(),h("tabindex",-1)("readonly",!0)("checked",n.selectedCount>0&&e.grid.selectionService.areAllRowSelected())("disableRipple",!0)("ngStyle",Ue(7,k_e,e.grid.isMultiRowSelectionEnabled?"visible":"hidden"))("indeterminate",n.selectedCount>0&&e.grid.selectionService.hasSomeRowSelected())("aria-label",e.grid.headSelectorBaseAriaLabel)}}function P_e(t,r){1&t&&G(0)}function F_e(t,r){if(1&t&&(j(0),y(1,P_e,1,0,"ng-container",2),W()),2&t){const n=p(),e=P(2);u(),h("ngTemplateOutlet",n.summaryTemplate?n.summaryTemplate:e)("ngTemplateOutletContext",Ue(2,Bt,n.summaryResults))}}function O_e(t,r){if(1&t&&(j(0),f(1,"div",4)(2,"span",5),C(3),m(),f(4,"span",6),C(5),m()(),W()),2&t){const n=r.$implicit,e=p(2);u(),Z("height",e.itemHeight,"px"),u(),h("title",n.label),u(),Y(e.translateSummary(n)),u(),h("title",e.formatSummaryResult(n)),u(),Q(" ",e.formatSummaryResult(n)," ")}}function N_e(t,r){1&t&&y(0,O_e,6,6,"ng-container",3),2&t&&h("ngForOf",p().summaryResults)}function V_e(t,r){if(1&t&&(j(0),f(1,"div",4),T("pointerdown",function(e){return e.preventDefault()}),m(),W()),2&t){const n=p(2);u(),Z("min-width",n.grid.summariesMargin,"px")("flex-basis",n.grid.summariesMargin,"px")}}function L_e(t,r){1&t&&G(0)}function G_e(t,r){if(1&t&&(j(0),y(1,L_e,1,0,"ng-container",5),W()),2&t){const n=p(2),e=P(2);u(),h("ngTemplateOutlet",e)("ngTemplateOutletContext",n.getContext(n))}}function H_e(t,r){if(1&t&&V(0,"igx-grid-summary-cell",6),2&t){const n=r.$implicit,e=p(2);Z("max-height",e.minHeight,"px")("min-height",e.minHeight,"px")("min-width",n.resolvedWidth)("max-width",n.resolvedWidth)("flex-basis",n.resolvedWidth),ee("igx-grid-summary--cosy","cosy"===e.grid.displayDensity)("igx-grid-summary--compact","compact"===e.grid.displayDensity)("igx-grid-summary--empty",!n.hasSummary)("igx-grid-summary--pinned-last",n.isLastPinned),h("column",n)("rowIndex",e.index)("firstCellIndentation",e.firstCellIndentation)("summaryResults",e.getColumnSummaries(n.field))("summaryTemplate",n.summaryTemplate)("hasSummary",n.hasSummary)("density",e.grid.displayDensity)("summaryFormatter",n.summaryFormatter)("active",e.isCellActive(n.visibleIndex))}}function B_e(t,r){1&t&&G(0)}function z_e(t,r){if(1&t&&(j(0),y(1,B_e,1,0,"ng-container",5),W()),2&t){const n=p(2),e=P(2);u(),h("ngTemplateOutlet",e)("ngTemplateOutletContext",n.getContext(n))}}function U_e(t,r){if(1&t&&(j(0),y(1,V_e,2,4,"ng-container",0)(2,G_e,2,2,"ng-container",0)(3,H_e,1,27,"ng-template",2,3,L),R(5,"igxNotGrouped"),y(6,z_e,2,2,"ng-container",0),W()),2&t){const n=p();u(),h("ngIf",n.grid.summariesMargin),u(),h("ngIf",n.pinnedColumns.length>0&&n.grid.isPinningToStart),u(),h("igxGridForOf",ht(5,9,n.unpinnedColumns))("igxForScrollContainer",n.grid.parentVirtDir)("igxForScrollOrientation","horizontal")("igxForContainerSize",n.grid.unpinnedWidth)("igxForTrackBy",n.grid.trackColumnChanges)("igxForSizePropName","calcPixelWidth"),u(3),h("ngIf",n.pinnedColumns.length>0&&!n.grid.isPinningToStart)}}function j_e(t,r){if(1&t&&V(0,"igx-grid-summary-cell",8),2&t){const n=r.$implicit,e=p(2);Z("max-height",e.minHeight,"px")("min-height",e.minHeight,"px")("min-width",n.resolvedWidth)("max-width",n.resolvedWidth)("flex-basis",n.resolvedWidth)("left",n.rightPinnedOffset),ee("igx-grid-summary--cosy","cosy"===e.grid.displayDensity)("igx-grid-summary--compact","compact"===e.grid.displayDensity)("igx-grid-summary--empty",!n.hasSummary)("igx-grid-summary--pinned-first",n.isFirstPinned)("igx-grid-summary--pinned-last",n.isLastPinned),h("column",n)("firstCellIndentation",e.firstCellIndentation)("rowIndex",e.index)("summaryResults",e.getColumnSummaries(n.field))("summaryTemplate",n.summaryTemplate)("hasSummary",n.hasSummary)("density",e.grid.displayDensity)("active",e.isCellActive(n.visibleIndex))}}function W_e(t,r){1&t&&(y(0,j_e,1,30,"igx-grid-summary-cell",7),R(1,"igxNotGrouped")),2&t&&h("ngForOf",ht(1,1,p().pinnedColumns))}function $_e(t,r){if(1&t){const n=z();f(0,"button",4),T("click",function(){return I(n),b(p().triggerAction())}),C(1),m()}if(2&t){const n=p();u(),Q(" ",n.actionText,"\n")}}const q_e=["*",[["","igxButton",""]]],K_e=["*","[igxButton]"];function Z_e(t,r){if(1&t){const n=z();j(0),f(1,"igx-chip",5),T("keyDown",function(i){return I(n),b(p().handleKeyDown(i.owner.id,i.originalEvent))})("remove",function(i){return I(n),b(p().clearGrouping(i.owner.id))})("chipClick",function(){const s=I(n).$implicit;return b(p().handleClick(s.fieldName))}),R(2,"igxGroupByMeta"),R(3,"igxGroupByMeta"),R(4,"igxGroupByMeta"),R(5,"igxGroupByMeta"),f(6,"span"),C(7),R(8,"igxGroupByMeta"),m(),f(9,"igx-icon",6),C(10),m()(),f(11,"span",7)(12,"igx-icon",8),C(13,"arrow_forward"),m()(),W()}if(2&t){const n=r.$implicit,e=r.last,i=p();u(),h("id",n.fieldName)("title",Gt(2,9,n.fieldName,i.grid).title)("displayDensity",i.grid.displayDensity)("removable",he(3,12,n.fieldName,i.grid,i.grid.groupablePipeTrigger).groupable)("draggable",he(4,16,n.fieldName,i.grid,i.grid.groupablePipeTrigger).groupable)("disabled",!he(5,20,n.fieldName,i.grid,i.grid.groupablePipeTrigger).groupable),u(6),Y(Gt(8,24,n.fieldName,i.grid).title),u(3),Y(1===n.dir?"arrow_upward":"arrow_downward"),u(2),h("hidden",e&&!i.dropAreaVisible)}}function Y_e(t,r){1&t&&G(0)}function Q_e(t,r){if(1&t&&(f(0,"igx-icon",9),C(1,"group_work"),m(),f(2,"span",10),C(3),m()),2&t){const n=p();u(3),Y(n.dropAreaMessage)}}const X_e=["loadingOverlay"],J_e=["igxLoadingOverlayOutlet"],eve=["emptyFilteredGrid"],tve=["defaultEmptyGrid"],ive=["defaultLoadingGrid"],nve=["verticalScrollContainer"],rve=["verticalScrollHolder"],sve=["scr"],ove=["footer"],ave=["tbody"],lve=["pinContainer"],cve=["tfoot"],dve=["igxRowEditingOverlayOutlet"],uve=["dragIndicatorIconBase"],hve=["rowEditingOverlay"],gve=["igxFilteringOverlayOutlet"],HD=["defaultExpandedTemplate"],BD=["defaultCollapsedTemplate"],pve=["defaultESFHeaderIcon"],fve=["defaultRowEditTemplate"],mve=["summaryRow"],_ve=["row"],vve=["pinnedRow"],xve=["groupContent"],yve=["defaultGroupByExpandedTemplate"],wve=["defaultGroupByCollapsedTemplate"];function Cve(t,r){1&t&&(j(0),f(1,"div",10)(2,"igx-icon"),C(3,"drag_indicator"),m()(),W()),2&t&&(u(2),Z("visibility","hidden"))}function Ive(t,r){}function bve(t,r){1&t&&y(0,Ive,0,0,"ng-template",null,12,L)}const Dve=(t,r,n)=>({selectedCount:t,totalCount:r,groupRow:n});function Sve(t,r){if(1&t){const n=z();j(0),f(1,"div",11),T("pointerdown",function(i){return i.preventDefault()})("click",function(i){return I(n),b(p().onGroupSelectorClick(i))}),y(2,bve,2,0,null,3),m(),W()}if(2&t){const n=p(),e=P(16);u(2),h("ngTemplateOutlet",n.grid.groupByRowSelectorTemplate?n.grid.groupByRowSelectorTemplate:e)("ngTemplateOutletContext",Ue(6,Bt,Vg(2,Dve,n.selectedRowsInTheGroup.length,n.groupRow.records.length,n.groupRow)))}}function Tve(t,r){1&t&&G(0)}function Eve(t,r){1&t&&G(0)}function Mve(t,r){1&t&&(f(0,"igx-icon"),C(1,"expand_more"),m())}function Ave(t,r){1&t&&(f(0,"igx-icon"),C(1,"chevron_right"),m())}function kve(t,r){if(1&t&&(f(0,"div",13)(1,"igx-icon",14),C(2,"group_work"),m(),f(3,"span",15),C(4),m(),f(5,"span",16),C(6),R(7,"columnFormatter"),R(8,"number"),R(9,"date"),R(10,"currency"),R(11,"percent"),m(),V(12,"igx-badge",17),m()),2&t){const n=p();u(4),Q(" ",n.groupRow.column&&n.groupRow.column.header?n.groupRow.column.header:n.groupRow.expression?n.groupRow.expression.fieldName:"",": "),u(2),Y(n.formatter?xt(7,3,n.groupRow.value,n.formatter,n.groupRow.records[0],null):"number"===n.dataType?he(8,8,n.groupRow.value,n.groupRow.column.pipeArgs.digitsInfo,n.grid.locale):"date"===n.dataType||"time"===n.dataType||"dateTime"===n.dataType?xt(9,12,n.groupRow.value,n.groupRow.column.pipeArgs.format,n.groupRow.column.pipeArgs.timezone,n.grid.locale):"currency"===n.dataType?me(10,17,Dt(27,qt,n.groupRow.value,n.currencyCode,n.groupRow.column.pipeArgs.display,n.groupRow.column.pipeArgs.digitsInfo,n.grid.locale)):"percent"===n.dataType?he(11,23,n.groupRow.value,n.groupRow.column.pipeArgs.digitsInfo,n.grid.locale):n.groupRow.value),u(6),h("value",n.groupRow.records?n.groupRow.records.length:0)}}function Rve(t,r){if(1&t&&(f(0,"div",18),V(1,"igx-checkbox",19,20),m()),2&t){const n=p();u(),h("tabindex",-1)("readonly",!0)("checked",n.areAllRowsInTheGroupSelected)("disableRipple",!0)("indeterminate",n.groupByRowCheckboxIndeterminateState)("disabled","single"===n.grid.rowSelection)("aria-label",n.groupByRowSelectorBaseAriaLabel)}}const Pve=["errorIcon"],Fve=["defaultError"],Ove=["defaultCell"],Nve=["defaultPinnedIndicator"],Vve=["inlineEditor"],Lve=["addRowCell"],Gve=["error"];function Hve(t,r){if(1&t&&(f(0,"igx-chip",8),C(1),m()),2&t){const n=p(2);h("disabled",!0)("displayDensity","compact"),u(),Y(n.grid.resourceStrings.igx_grid_pinned_row_indicator)}}function Bve(t,r){1&t&&y(0,Hve,2,3,"igx-chip",7),2&t&&h("ngIf",p().displayPinnedChip)}function zve(t,r){if(1&t&&(f(0,"div",12),R(1,"columnFormatter"),R(2,"number"),R(3,"date"),R(4,"currency"),R(5,"percent"),C(6),R(7,"columnFormatter"),R(8,"number"),R(9,"date"),R(10,"currency"),R(11,"percent"),m()),2&t){const n=p(2);h("cssClass",n.highlightClass)("activeCssClass",n.activeHighlightClass)("groupName",n.gridID)("value",n.formatter?xt(1,9,n.value,n.formatter,n.rowData,n.columnData):"number"===n.column.dataType?he(2,14,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):"date"===n.column.dataType||"time"===n.column.dataType||"dateTime"===n.column.dataType?xt(3,18,n.value,n.column.pipeArgs.format,n.column.pipeArgs.timezone,n.grid.locale):"currency"===n.column.dataType?me(4,23,Dt(57,qt,n.value,n.currencyCode,n.column.pipeArgs.display,n.column.pipeArgs.digitsInfo,n.grid.locale)):"percent"===n.column.dataType?he(5,29,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):n.value)("row",n.rowData)("column",n.column.field)("containerClass","igx-grid__td-text")("metadata",n.searchMetadata),u(6),Y(n.formatter?xt(7,33,n.value,n.formatter,n.rowData,n.columnData):"number"===n.column.dataType?he(8,38,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):"date"===n.column.dataType||"time"===n.column.dataType||"dateTime"===n.column.dataType?xt(9,42,n.value,n.column.pipeArgs.format,n.column.pipeArgs.timezone,n.grid.locale):"currency"===n.column.dataType?me(10,47,Dt(63,qt,n.value,n.currencyCode,n.column.pipeArgs.display,n.column.pipeArgs.digitsInfo,n.grid.locale)):"percent"===n.column.dataType?he(11,53,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):n.value)}}const ty=(t,r)=>({"igx-icon--success":t,"igx-icon--error":r});function Uve(t,r){if(1&t&&(f(0,"igx-icon",13),C(1),m()),2&t){const n=p(2);h("ngClass",Wi(2,ty,n.value,!n.value)),u(),Y(n.value?"check":"close")}}function jve(t,r){if(1&t&&(V(0,"img",14),R(1,"igxCellImageAlt")),2&t){const n=p(2);h("src",n.value,Id)("alt",ht(1,2,n.value))}}function Wve(t,r){if(1&t&&y(0,zve,12,69,"div",9)(1,Uve,2,5,"igx-icon",10)(2,jve,2,4,"img",11),2&t){const n=p();h("ngIf","boolean"!==n.column.dataType&&"image"!==n.column.dataType||"boolean"===n.column.dataType&&n.formatter),u(),h("ngIf","boolean"===n.column.dataType&&!n.formatter),u(),h("ngIf","image"===n.column.dataType)}}function $ve(t,r){if(1&t&&(f(0,"div",12),R(1,"columnFormatter"),R(2,"number"),R(3,"date"),R(4,"currency"),R(5,"percent"),C(6),m()),2&t){const n=p(2);h("cssClass",n.highlightClass)("activeCssClass",n.activeHighlightClass)("groupName",n.gridID)("value",n.formatter?he(1,9,n.value,n.formatter,n.rowData):"number"===n.column.dataType?he(2,13,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):"date"===n.column.dataType||"time"===n.column.dataType||"dateTime"===n.column.dataType?xt(3,17,n.value,n.column.pipeArgs.format,n.column.pipeArgs.timezone,n.grid.locale):"currency"===n.column.dataType?me(4,22,Dt(32,qt,n.value,n.currencyCode,n.column.pipeArgs.display,n.column.pipeArgs.digitsInfo,n.grid.locale)):"percent"===n.column.dataType?he(5,28,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):n.value)("row",n.rowData)("column",n.column.field)("containerClass","igx-grid__td-text")("metadata",n.searchMetadata),u(6),Y(n.isEmptyAddRowCell?n.column.header||n.column.field:n.value)}}function qve(t,r){if(1&t&&y(0,$ve,7,38,"div",9),2&t){const n=p();h("ngIf","boolean"!==n.column.dataType||"boolean"===n.column.dataType&&n.formatter)}}function Kve(t,r){if(1&t){const n=z();j(0,16),f(1,"igx-input-group",17)(2,"input",18),T("compositionstart",function(){return I(n),b(p(2).grid.crudService.isInCompositionMode=!0)})("compositionend",function(){return I(n),b(p(2).grid.crudService.isInCompositionMode=!1)}),m()(),W()}if(2&t){const n=p(2);h("formGroup",n.formGroup),u(2),h("igxFocus",!0)("igxTextSelection",!0)("formControl",n.formControl),U("aria-describedby",n.ariaDescribeBy)("aria-invalid",n.isInvalid)}}function Zve(t,r){if(1&t&&(j(0),f(1,"igx-input-group",19),V(2,"input",20),m(),W()),2&t){const n=p(2);u(),h("formGroup",n.formGroup),u(),h("igxFocus",!0)("igxTextSelection",!0)("step",n.step)("formControl",n.formControl),U("aria-describedby",n.ariaDescribeBy)("aria-invalid",n.isInvalid)}}function Yve(t,r){if(1&t&&(j(0,16),V(1,"igx-checkbox",21),W()),2&t){const n=p(2);h("formGroup",n.formGroup),u(),h("checked",n.editValue)("igxFocus",!0)("disableRipple",!0)("formControl",n.formControl)}}function Qve(t,r){if(1&t){const n=z();j(0,16),f(1,"igx-date-picker",22),it("valueChange",function(i){I(n);const s=p(2);return tt(s.editValue,i)||(s.editValue=i),b(i)}),m(),W()}if(2&t){const n=p(2);h("formGroup",n.formGroup),u(),Z("width",100,"%"),h("outlet",n.grid.outlet)("locale",n.grid.locale)("weekStart",n.column.pipeArgs.weekStart),Je("value",n.editValue),h("igxFocus",!0)("formControl",n.formControl)}}function Xve(t,r){if(1&t){const n=z();j(0,16),f(1,"igx-time-picker",23),it("valueChange",function(i){I(n);const s=p(2);return tt(s.editValue,i)||(s.editValue=i),b(i)}),m(),W()}if(2&t){const n=p(2);h("formGroup",n.formGroup),u(),Z("width",100,"%"),h("outlet",n.grid.outlet)("locale",n.grid.locale)("inputFormat",n.column.defaultTimeFormat),Je("value",n.editValue),h("igxFocus",!0)("formControl",n.formControl)}}function Jve(t,r){if(1&t&&(j(0),f(1,"igx-input-group",16),V(2,"input",24),m(),W()),2&t){const n=p(2);u(),h("formGroup",n.formGroup),u(),h("formControl",n.formControl)("igxDateTimeEditor",n.column.defaultDateTimeFormat)("igxFocus",!0),U("aria-describedby",n.ariaDescribeBy)("aria-invalid",n.isInvalid)}}function exe(t,r){if(1&t&&(f(0,"igx-prefix"),C(1),m()),2&t){const n=p(3);u(),Y(n.currencyCodeSymbol)}}function txe(t,r){if(1&t&&(f(0,"igx-suffix"),C(1),m()),2&t){const n=p(3);u(),Y(n.currencyCodeSymbol)}}function ixe(t,r){if(1&t&&(j(0),f(1,"igx-input-group",19),y(2,exe,2,1,"igx-prefix",5),V(3,"input",20),y(4,txe,2,1,"igx-suffix",5),m(),W()),2&t){const n=p(2);u(),h("formGroup",n.formGroup),u(),h("ngIf",n.grid.currencyPositionLeft),u(),h("igxFocus",!0)("igxTextSelection",!0)("step",n.step)("formControl",n.formControl),U("aria-describedby",n.ariaDescribeBy)("aria-invalid",n.isInvalid),u(),h("ngIf",!n.grid.currencyPositionLeft)}}function nxe(t,r){if(1&t&&(j(0),f(1,"igx-input-group",19),V(2,"input",20),f(3,"igx-suffix"),C(4),R(5,"percent"),m()(),W()),2&t){const n=p(2);u(),h("formGroup",n.formGroup),u(),h("igxFocus",!0)("igxTextSelection",!0)("step",n.step)("formControl",n.formControl),U("aria-describedby",n.ariaDescribeBy)("aria-invalid",n.isInvalid),u(2),Q(" ",he(5,8,n.editValue,n.column.pipeArgs.digitsInfo,n.grid.locale)," ")}}function rxe(t,r){if(1&t&&y(0,Kve,3,6,"ng-container",15)(1,Zve,3,7,"ng-container",5)(2,Yve,2,5,"ng-container",15)(3,Qve,2,9,"ng-container",15)(4,Xve,2,9,"ng-container",15)(5,Jve,3,6,"ng-container",5)(6,ixe,5,9,"ng-container",5)(7,nxe,6,12,"ng-container",5),2&t){const n=p();h("ngIf","string"===n.column.dataType||"image"===n.column.dataType),u(),h("ngIf","number"===n.column.dataType),u(),h("ngIf","boolean"===n.column.dataType),u(),h("ngIf","date"===n.column.dataType),u(),h("ngIf","time"===n.column.dataType),u(),h("ngIf","dateTime"===n.column.dataType),u(),h("ngIf","currency"===n.column.dataType),u(),h("ngIf","percent"===n.column.dataType)}}function sxe(t,r){1&t&&G(0)}function oxe(t,r){1&t&&G(0)}function axe(t,r){1&t&&G(0)}function lxe(t,r){if(1&t){const n=z();j(0),f(1,"igx-icon",25,26),T("mouseover",function(){return I(n),b(p().errorShowing=!0)})("mouseout",function(){return I(n),b(p().errorShowing=!1)}),C(3,"error"),m(),f(4,"div",27,28)(7,"div"),y(8,axe,1,0,"ng-container",4),m()(),W()}if(2&t){const n=P(6),e=p(),i=P(12);u(),h("igxTooltipTarget",n)("igxToggleOutlet",e.grid.outlet),u(3),h("id",e.ariaErrorMessage),u(3),Z("width","max-content"),u(),h("ngTemplateOutlet",e.cellValidationErrorTemplate||i)("ngTemplateOutletContext",e.context)}}function cxe(t,r){if(1&t&&(f(0,"div"),C(1),m()),2&t){const n=p(2);u(),Q(" ",n.grid.resourceStrings.igx_grid_required_validation_error," ")}}function dxe(t,r){if(1&t&&(f(0,"div"),C(1),R(2,"igxStringReplace"),m()),2&t){const n=p(2);u(),Q(" ",he(2,1,n.grid.resourceStrings.igx_grid_min_length_validation_error,"{0}",n.formGroup.get(n.column.field).errors.minlength.requiredLength)," ")}}function uxe(t,r){if(1&t&&(f(0,"div"),C(1),R(2,"igxStringReplace"),m()),2&t){const n=p(2);u(),Q(" ",he(2,1,n.grid.resourceStrings.igx_grid_max_length_validation_error,"{0}",n.formGroup.get(n.column.field).errors.maxlength.requiredLength)," ")}}function hxe(t,r){if(1&t&&(f(0,"div"),C(1),R(2,"igxStringReplace"),m()),2&t){const n=p(2);u(),Q(" ",he(2,1,n.grid.resourceStrings.igx_grid_min_validation_error,"{0}",n.formGroup.get(n.column.field).errors.min.min)," ")}}function gxe(t,r){if(1&t&&(f(0,"div"),C(1),R(2,"igxStringReplace"),m()),2&t){const n=p(2);u(),Q(" ",he(2,1,n.grid.resourceStrings.igx_grid_max_validation_error,"{0}",n.formGroup.get(n.column.field).errors.max.max)," ")}}function pxe(t,r){if(1&t&&(f(0,"div"),C(1),m()),2&t){const n=p(2);u(),Q(" ",n.grid.resourceStrings.igx_grid_email_validation_error," ")}}function fxe(t,r){if(1&t&&(f(0,"div"),C(1),m()),2&t){const n=p(2);u(),Q(" ",n.grid.resourceStrings.igx_grid_pattern_validation_error," ")}}function mxe(t,r){if(1&t&&y(0,cxe,2,1,"div",5)(1,dxe,3,5,"div",5)(2,uxe,3,5,"div",5)(3,hxe,3,5,"div",5)(4,gxe,3,5,"div",5)(5,pxe,2,1,"div",5)(6,fxe,2,1,"div",5),2&t){const n=p();h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.required),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.minlength),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.maxlength),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.min),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.max),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.email),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.pattern)}}const _xe=["indentationDiv"];function vxe(t,r){if(1&t&&(f(0,"igx-chip",10),C(1),m()),2&t){const n=p(2);h("disabled",!0)("displayDensity","compact"),u(),Y(n.grid.resourceStrings.igx_grid_pinned_row_indicator)}}function xxe(t,r){1&t&&y(0,vxe,2,3,"igx-chip",9),2&t&&h("ngIf",p().displayPinnedChip)}function yxe(t,r){if(1&t&&(f(0,"div",14),R(1,"columnFormatter"),R(2,"number"),R(3,"date"),R(4,"currency"),R(5,"percent"),C(6),R(7,"columnFormatter"),R(8,"number"),R(9,"date"),R(10,"currency"),R(11,"percent"),m()),2&t){const n=p(2);h("cssClass",n.highlightClass)("activeCssClass",n.activeHighlightClass)("groupName",n.gridID)("value",n.formatter?he(1,9,n.value,n.formatter,n.rowData):"number"===n.column.dataType?he(2,13,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):"date"===n.column.dataType||"time"===n.column.dataType||"dateTime"===n.column.dataType?xt(3,17,n.value,n.column.pipeArgs.format,n.column.pipeArgs.timezone,n.grid.locale):"currency"===n.column.dataType?me(4,22,Dt(55,qt,n.value,n.currencyCode,n.column.pipeArgs.display,n.column.pipeArgs.digitsInfo,n.grid.locale)):"percent"===n.column.dataType?he(5,28,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):n.value)("row",n.rowData)("column",n.column.field)("containerClass","igx-grid__td-text")("metadata",n.searchMetadata),u(6),Y(n.formatter?he(7,32,n.value,n.formatter,n.rowData):"number"===n.column.dataType?he(8,36,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):"date"===n.column.dataType||"time"===n.column.dataType||"dateTime"===n.column.dataType?xt(9,40,n.value,n.column.pipeArgs.format,n.column.pipeArgs.timezone,n.grid.locale):"currency"===n.column.dataType?me(10,45,Dt(61,qt,n.value,n.currencyCode,n.column.pipeArgs.display,n.column.pipeArgs.digitsInfo,n.grid.locale)):"percent"===n.column.dataType?he(11,51,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):n.value)}}function wxe(t,r){if(1&t&&(f(0,"igx-icon",15),C(1),m()),2&t){const n=p(2);h("ngClass",Wi(2,ty,n.value,!n.value)),u(),Y(n.value?"check":"close")}}function Cxe(t,r){if(1&t&&(V(0,"img",16),R(1,"igxCellImageAlt")),2&t){const n=p(2);h("src",n.value,Id)("alt",ht(1,2,n.value))}}function Ixe(t,r){if(1&t&&y(0,yxe,12,67,"div",11)(1,wxe,2,5,"igx-icon",12)(2,Cxe,2,4,"img",13),2&t){const n=p();h("ngIf","boolean"!==n.column.dataType&&"image"!==n.column.dataType||"boolean"===n.column.dataType&&n.formatter),u(),h("ngIf","boolean"===n.column.dataType&&!n.formatter),u(),h("ngIf","image"===n.column.dataType)}}function bxe(t,r){if(1&t&&(f(0,"div",14),R(1,"columnFormatter"),R(2,"number"),R(3,"date"),R(4,"currency"),R(5,"percent"),C(6),m()),2&t){const n=p(2);h("cssClass",n.highlightClass)("activeCssClass",n.activeHighlightClass)("groupName",n.gridID)("value",n.formatter?he(1,9,n.value,n.formatter,n.rowData):"number"===n.column.dataType?he(2,13,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):"date"===n.column.dataType||"time"===n.column.dataType||"dateTime"===n.column.dataType?xt(3,17,n.value,n.column.pipeArgs.format,n.column.pipeArgs.timezone,n.grid.locale):"currency"===n.column.dataType?me(4,22,Dt(32,qt,n.value,n.currencyCode,n.column.pipeArgs.display,n.column.pipeArgs.digitsInfo,n.grid.locale)):"percent"===n.column.dataType?he(5,28,n.value,n.column.pipeArgs.digitsInfo,n.grid.locale):n.value)("row",n.rowData)("column",n.column.field)("containerClass","igx-grid__td-text")("metadata",n.searchMetadata),u(6),Y(n.value?n.value:n.column.header||n.column.field)}}function Dxe(t,r){if(1&t&&y(0,bxe,7,38,"div",11),2&t){const n=p();h("ngIf","boolean"!==n.column.dataType||"boolean"===n.column.dataType&&n.formatter)}}function Sxe(t,r){if(1&t){const n=z();j(0,18),f(1,"igx-input-group",19)(2,"input",20),T("compositionstart",function(){return I(n),b(p(2).grid.crudService.isInCompositionMode=!0)})("compositionend",function(){return I(n),b(p(2).grid.crudService.isInCompositionMode=!1)}),m()(),W()}if(2&t){const n=p(2);h("formGroup",n.formGroup),u(2),h("igxFocus",!0)("formControl",n.formControl),U("aria-describedby",n.ariaDescribeBy)("aria-invalid",n.isInvalid)}}function Txe(t,r){if(1&t&&(j(0),f(1,"igx-input-group",21),V(2,"input",22),m(),W()),2&t){const n=p(2);u(),h("formGroup",n.formGroup),u(),h("igxFocus",!0)("step",n.step)("formControl",n.formControl),U("aria-describedby",n.ariaDescribeBy)("aria-invalid",n.isInvalid)}}function Exe(t,r){if(1&t&&(j(0,18),V(1,"igx-checkbox",23),W()),2&t){const n=p(2);h("formGroup",n.formGroup),u(),h("checked",n.editValue)("igxFocus",!0)("disableRipple",!0)("formControl",n.formControl)}}function Mxe(t,r){if(1&t){const n=z();j(0,18),f(1,"igx-date-picker",24),it("valueChange",function(i){I(n);const s=p(2);return tt(s.editValue,i)||(s.editValue=i),b(i)}),m(),W()}if(2&t){const n=p(2);h("formGroup",n.formGroup),u(),Z("width",100,"%"),h("outlet",n.grid.outlet)("locale",n.grid.locale)("weekStart",n.column.pipeArgs.weekStart),Je("value",n.editValue),h("igxFocus",!0)("formControl",n.formControl)}}function Axe(t,r){if(1&t){const n=z();j(0,18),f(1,"igx-time-picker",25),it("valueChange",function(i){I(n);const s=p(2);return tt(s.editValue,i)||(s.editValue=i),b(i)}),m(),W()}if(2&t){const n=p(2);h("formGroup",n.formGroup),u(),Z("width",100,"%"),h("outlet",n.grid.outlet)("locale",n.grid.locale)("inputFormat",n.column.defaultTimeFormat),Je("value",n.editValue),h("igxFocus",!0)("formControl",n.formControl)}}function kxe(t,r){if(1&t&&(j(0),f(1,"igx-input-group",18),V(2,"input",26),m(),W()),2&t){const n=p(2);u(),h("formGroup",n.formGroup),u(),h("formControl",n.formControl)("igxDateTimeEditor",n.column.defaultDateTimeFormat)("igxFocus",!0),U("aria-describedby",n.ariaDescribeBy)("aria-invalid",n.isInvalid)}}function Rxe(t,r){if(1&t&&(f(0,"igx-prefix"),C(1),m()),2&t){const n=p(3);u(),Y(n.currencyCodeSymbol)}}function Pxe(t,r){if(1&t&&(f(0,"igx-suffix"),C(1),m()),2&t){const n=p(3);u(),Y(n.currencyCodeSymbol)}}function Fxe(t,r){if(1&t&&(j(0),f(1,"igx-input-group",21),y(2,Rxe,2,1,"igx-prefix",4),V(3,"input",22),y(4,Pxe,2,1,"igx-suffix",4),m(),W()),2&t){const n=p(2);u(),h("formGroup",n.formGroup),u(),h("ngIf",n.grid.currencyPositionLeft),u(),h("igxFocus",!0)("step",n.step)("formControl",n.formControl),U("aria-describedby",n.ariaDescribeBy)("aria-invalid",n.isInvalid),u(),h("ngIf",!n.grid.currencyPositionLeft)}}function Oxe(t,r){if(1&t&&(j(0),f(1,"igx-input-group",21),V(2,"input",22),f(3,"igx-suffix"),C(4),R(5,"percent"),m()(),W()),2&t){const n=p(2);u(),h("formGroup",n.formGroup),u(),h("igxFocus",!0)("step",n.step)("formControl",n.formControl),U("aria-describedby",n.ariaDescribeBy)("aria-invalid",n.isInvalid),u(2),Q(" ",he(5,7,n.editValue,n.column.pipeArgs.digitsInfo,n.grid.locale)," ")}}function Nxe(t,r){if(1&t&&y(0,Sxe,3,5,"ng-container",17)(1,Txe,3,6,"ng-container",4)(2,Exe,2,5,"ng-container",17)(3,Mxe,2,9,"ng-container",17)(4,Axe,2,9,"ng-container",17)(5,kxe,3,6,"ng-container",4)(6,Fxe,5,8,"ng-container",4)(7,Oxe,6,11,"ng-container",4),2&t){const n=p();h("ngIf","string"===n.column.dataType||"image"===n.column.dataType),u(),h("ngIf","number"===n.column.dataType),u(),h("ngIf","boolean"===n.column.dataType),u(),h("ngIf","date"===n.column.dataType),u(),h("ngIf","time"===n.column.dataType),u(),h("ngIf","dateTime"===n.column.dataType),u(),h("ngIf","currency"===n.column.dataType),u(),h("ngIf","percent"===n.column.dataType)}}function Vxe(t,r){1&t&&G(0)}function Lxe(t,r){if(1&t){const n=z();j(0),f(1,"div",27,28),T("click",function(i){return I(n),b(p().toggle(i))})("focus",function(){return I(n),b(p().onIndicatorFocus())}),y(3,Vxe,1,0,"ng-container",5),m(),W()}if(2&t){const n=p();u(3),h("ngTemplateOutlet",n.iconTemplate)("ngTemplateOutletContext",Ue(2,Bt,n.row))}}function Gxe(t,r){1&t&&G(0)}function Hxe(t,r){1&t&&G(0)}function Bxe(t,r){1&t&&G(0)}function zxe(t,r){if(1&t){const n=z();j(0),f(1,"igx-icon",29,30),T("mouseover",function(){return I(n),b(p().errorShowing=!0)})("mouseout",function(){return I(n),b(p().errorShowing=!1)}),C(3,"error"),m(),f(4,"div",31,32)(7,"div"),y(8,Bxe,1,0,"ng-container",5),m()(),W()}if(2&t){const n=P(6),e=p(),i=P(17);u(),h("igxTooltipTarget",n)("igxToggleOutlet",e.grid.outlet),u(3),h("id",e.ariaErrorMessage),u(3),Z("width","max-content"),u(),h("ngTemplateOutlet",e.cellValidationErrorTemplate||i)("ngTemplateOutletContext",e.context)}}function Uxe(t,r){1&t&&(f(0,"igx-icon"),C(1,"expand_more"),m())}function jxe(t,r){1&t&&(f(0,"igx-icon"),C(1,"chevron_right"),m())}function Wxe(t,r){if(1&t&&(f(0,"div"),C(1),m()),2&t){const n=p(2);u(),Q(" ",n.grid.resourceStrings.igx_grid_required_validation_error," ")}}function $xe(t,r){if(1&t&&(f(0,"div"),C(1),R(2,"igxStringReplace"),m()),2&t){const n=p(2);u(),Q(" ",he(2,1,n.grid.resourceStrings.igx_grid_min_length_validation_error,"{0}",n.formGroup.get(n.column.field).errors.minlength.requiredLength)," ")}}function qxe(t,r){if(1&t&&(f(0,"div"),C(1),R(2,"igxStringReplace"),m()),2&t){const n=p(2);u(),Q(" ",he(2,1,n.grid.resourceStrings.igx_grid_max_length_validation_error,"{0}",n.formGroup.get(n.column.field).errors.maxlength.requiredLength)," ")}}function Kxe(t,r){if(1&t&&(f(0,"div"),C(1),R(2,"igxStringReplace"),m()),2&t){const n=p(2);u(),Q(" ",he(2,1,n.grid.resourceStrings.igx_grid_min_validation_error,"{0}",n.formGroup.get(n.column.field).errors.min.min)," ")}}function Zxe(t,r){if(1&t&&(f(0,"div"),C(1),R(2,"igxStringReplace"),m()),2&t){const n=p(2);u(),Q(" ",he(2,1,n.grid.resourceStrings.igx_grid_max_validation_error,"{0}",n.formGroup.get(n.column.field).errors.max.max)," ")}}function Yxe(t,r){if(1&t&&(f(0,"div"),C(1),m()),2&t){const n=p(2);u(),Q(" ",n.grid.resourceStrings.igx_grid_email_validation_error," ")}}function Qxe(t,r){if(1&t&&(f(0,"div"),C(1),m()),2&t){const n=p(2);u(),Q(" ",n.grid.resourceStrings.igx_grid_pattern_validation_error," ")}}function Xxe(t,r){if(1&t&&y(0,Wxe,2,1,"div",4)(1,$xe,3,5,"div",4)(2,qxe,3,5,"div",4)(3,Kxe,3,5,"div",4)(4,Zxe,3,5,"div",4)(5,Yxe,2,1,"div",4)(6,Qxe,2,1,"div",4),2&t){const n=p();h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.required),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.minlength),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.maxlength),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.min),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.max),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.email),u(),h("ngIf",null==n.formGroup||null==n.formGroup.get(null==n.column?null:n.column.field).errors?null:n.formGroup.get(null==n.column?null:n.column.field).errors.pattern)}}function Jxe(t,r){1&t&&G(0)}function eye(t,r){1&t&&G(0)}function tye(t,r){if(1&t){const n=z();f(0,"div",9),T("animationend",function(){return I(n),b(p().animationEndHandler())}),y(1,eye,1,0,"ng-container",0),m()}if(2&t){const n=p(),e=P(4);ee("igx-grid__tr--add-animate",n.triggerAddAnimationClass),u(),h("ngTemplateOutlet",e)}}function iye(t,r){1&t&&G(0)}function nye(t,r){if(1&t&&(j(0),f(1,"div",11),T("click",function(e){return e.stopPropagation()}),y(2,iye,1,0,"ng-container",0),m(),W()),2&t){const n=p(2);u(),gn(n.resolveDragIndicatorClasses),h("igxRowDrag",n)("ghostTemplate",n.grid.getDragGhostCustomTemplate()),u(),h("ngTemplateOutlet",n.grid.dragIndicatorIconTemplate?n.grid.dragIndicatorIconTemplate:n.grid.dragIndicatorIconBase)}}function rye(t,r){}function sye(t,r){1&t&&y(0,rye,0,0,"ng-template")}const sV=(t,r,n,e)=>({index:t,rowID:r,key:n,selected:e});function oye(t,r){if(1&t){const n=z();j(0),f(1,"div",12),T("pointerdown",function(i){return i.preventDefault()})("click",function(i){return I(n),b(p(2).onRowSelectorClick(i))}),y(2,sye,1,0,null,13),m(),W()}if(2&t){const n=p(2),e=P(8);u(2),h("ngTemplateOutlet",n.grid.rowSelectorTemplate?n.grid.rowSelectorTemplate:e)("ngTemplateOutletContext",Ue(7,Bt,so(2,sV,n.viewIndex,n.key,n.key,n.selected)))}}function aye(t,r){if(1&t&&(j(0),f(1,"div",14),T("pointerdown",function(e){return e.preventDefault()})("click",function(e){return e.stopPropagation()}),m(),W()),2&t){const n=p(2);u(),Gl("igx-grid__row-indentation igx-grid__row-indentation--level-",n.grid.groupingExpressions.length,"")}}function lye(t,r){1&t&&G(0)}function cye(t,r){if(1&t&&y(0,lye,1,0,"ng-container",13),2&t){const n=r.$implicit,e=p(4),i=P(12),s=P(10);h("ngTemplateOutlet",0===n.visibleIndex&&e.grid.hasDetails?i:s)("ngTemplateOutletContext",e.getContext(n,e))}}function dye(t,r){if(1&t&&(j(0),y(1,cye,1,2,"ng-template",17),R(2,"igxNotGrouped"),W()),2&t){const n=p(3);u(),h("ngForOf",ht(2,1,n.pinnedColumns))}}function uye(t,r){1&t&&G(0)}function hye(t,r){if(1&t&&y(0,uye,1,0,"ng-container",13),2&t){const n=r.$implicit,e=p(3),i=P(12),s=P(10);h("ngTemplateOutlet",0===n.visibleIndex&&e.grid.hasDetails?i:s)("ngTemplateOutletContext",e.getContext(n,e))}}function gye(t,r){1&t&&G(0)}function pye(t,r){if(1&t&&y(0,gye,1,0,"ng-container",13),2&t){const n=r.$implicit,e=p(4),i=P(12),s=P(10);h("ngTemplateOutlet",0===n.visibleIndex&&e.grid.hasDetails?i:s)("ngTemplateOutletContext",e.getContext(n,e))}}function fye(t,r){if(1&t&&(j(0),y(1,pye,1,2,"ng-template",17),R(2,"igxNotGrouped"),W()),2&t){const n=p(3);u(),h("ngForOf",ht(2,1,n.pinnedColumns))}}function mye(t,r){if(1&t&&(j(0),y(1,dye,3,3,"ng-container",10)(2,hye,1,2,"ng-template",15,16,L),R(4,"igxNotGrouped"),y(5,fye,3,3,"ng-container",10),W()),2&t){const n=p(2);u(),h("ngIf",n.pinnedColumns.length>0&&n.grid.isPinningToStart),u(),h("igxGridForOf",ht(4,8,n.unpinnedColumns))("igxForScrollContainer",n.grid.parentVirtDir)("igxForScrollOrientation","horizontal")("igxForContainerSize",n.grid.unpinnedWidth)("igxForSizePropName","calcPixelWidth")("igxForTrackBy",n.grid.trackColumnChanges),u(3),h("ngIf",n.pinnedColumns.length>0&&!n.grid.isPinningToStart)}}function _ye(t,r){1&t&&G(0)}function vye(t,r){if(1&t&&(j(0),y(1,_ye,1,0,"ng-container",13),W()),2&t){const n=p(3),e=P(6);u(),h("ngTemplateOutlet",e)("ngTemplateOutletContext",n.getContextMRL(n.pinnedColumns,n))}}function xye(t,r){1&t&&G(0)}function yye(t,r){if(1&t&&y(0,xye,1,0,"ng-container",13),2&t){const n=r.$implicit,e=p(4),i=P(16),s=P(14);h("ngTemplateOutlet",0===n.visibleIndex&&e.grid.hasDetails?i:s)("ngTemplateOutletContext",e.getContext(n,e))}}function wye(t,r){if(1&t&&(f(0,"div",18),y(1,yye,1,2,"ng-template",17),m()),2&t){const n=r.$implicit;h("ngStyle",Wi(2,iV,n.getGridTemplate(!0),n.getGridTemplate(!1))),u(),h("ngForOf",n.children)}}function Cye(t,r){1&t&&G(0)}function Iye(t,r){if(1&t&&(j(0),y(1,Cye,1,0,"ng-container",13),W()),2&t){const n=p(3),e=P(6);u(),h("ngTemplateOutlet",e)("ngTemplateOutletContext",n.getContextMRL(n.pinnedColumns,n))}}function bye(t,r){if(1&t&&(j(0),y(1,vye,2,2,"ng-container",10)(2,wye,2,5,"ng-template",15,16,L),R(4,"igxTopLevel"),y(5,Iye,2,2,"ng-container",10),W()),2&t){const n=p(2);u(),h("ngIf",n.pinnedColumns.length>0&&n.grid.isPinningToStart),u(),h("igxGridForOf",ht(4,8,n.unpinnedColumns))("igxForScrollContainer",n.grid.parentVirtDir)("igxForScrollOrientation","horizontal")("igxForContainerSize",n.grid.unpinnedWidth)("igxForSizePropName","calcPixelWidth")("igxForTrackBy",n.grid.trackColumnChanges),u(3),h("ngIf",n.pinnedColumns.length>0&&!n.grid.isPinningToStart)}}function Dye(t,r){if(1&t&&y(0,nye,3,5,"ng-container",10)(1,oye,3,9,"ng-container",10)(2,aye,2,3,"ng-container",10)(3,mye,6,10,"ng-container",10)(4,bye,6,10,"ng-container",10),2&t){const n=p();h("ngIf",n.rowDraggable),u(),h("ngIf",n.showRowSelectors),u(),h("ngIf",n.grid.groupingExpressions.length>0),u(),h("ngIf",!n.grid.hasColumnLayouts),u(),h("ngIf",n.grid.hasColumnLayouts)}}function Sye(t,r){1&t&&G(0)}function Tye(t,r){if(1&t&&y(0,Sye,1,0,"ng-container",13),2&t){const n=r.$implicit,e=p(3),i=P(16),s=P(14);h("ngTemplateOutlet",0===n.visibleIndex&&e.grid.hasDetails?i:s)("ngTemplateOutletContext",e.getContext(n,e))}}const Eye=(t,r,n)=>({"grid-template-rows":t,"grid-template-columns":r,"z-index":n});function Mye(t,r){if(1&t&&(f(0,"div",18),y(1,Tye,1,2,"ng-template",17),m()),2&t){const n=r.$implicit;Z("left",p(2).mrlRightPinnedOffset),ee("igx-grid__td--pinned-last",n.hasLastPinnedChildColumn)("igx-grid__td--pinned-first",n.hasFirstPinnedChildColumn),h("ngStyle",Vg(8,Eye,n.getGridTemplate(!0),n.getGridTemplate(!1),n.pinned?1:null)),u(),h("ngForOf",n.children)}}function Aye(t,r){1&t&&(y(0,Mye,2,12,"div",19),R(1,"igxTopLevel")),2&t&&h("ngForOf",ht(1,1,r.$implicit))}function kye(t,r){if(1&t&&(f(0,"div",20),V(1,"igx-checkbox",21),m()),2&t){const n=p();u(),h("tabindex",-1)("checked",n.selected)("readonly",!0)("disabled",n.deleted)("disableRipple",!0)("disableTransitions",n.grid.disableTransitions)("aria-label",n.rowCheckboxAriaLabel)}}const kr=(t,r,n,e,i,s,o)=>[t,r,n,e,i,s,o],si=(t,r,n,e,i,s)=>[t,r,n,e,i,s];function Rye(t,r){if(1&t&&(f(0,"igx-grid-cell",22,23),R(2,"transactionState"),R(3,"igxCellStyleClasses"),R(4,"igxCellStyles"),R(5,"dataMapper"),m()),2&t){const n=r.$implicit,e=p();Z("min-height",e.cellHeight,"px")("min-width",n.resolvedWidth)("max-width",n.resolvedWidth)("flex-basis",n.resolvedWidth)("left",n.rightPinnedOffset),ee("igx-grid__td--edited",me(2,38,Nn(66,kr,e.key,n.field,e.grid.rowEditable,e.grid.transactions,e.grid.pipeTrigger,e.grid.gridAPI.crudService.cell,e.grid.gridAPI.crudService.row)))("igx-grid__td--pinned",n.pinned)("igx-grid__td--number","number"===n.dataType||"percent"===n.dataType||"currency"===n.dataType)("igx-grid__td--bool","boolean"===n.dataType)("igx-grid__td--image","image"===n.dataType),h("ngClass",me(3,46,Rt(74,si,n.cellClasses,e.data[n.field],e.data,n.field,e.viewIndex,e.grid.pipeTrigger)))("ngStyle",me(4,53,Rt(81,si,n.cellStyles,e.data[n.field],e.data,n.field,e.viewIndex,e.grid.pipeTrigger)))("editMode",n.editable&&e.grid.crudService.targetInEdit(e.index,n.index))("column",n)("formatter",n.formatter)("intRow",e)("lastPinned",n.columnLayoutChild?null:n.isLastPinned)("firstPinned",n.columnLayoutChild?null:n.isFirstPinned)("rowData",e.data)("width",n.getCellWidth())("visibleColumnIndex",n.visibleIndex)("value",me(5,60,Dt(88,qt,e.data,n.field,e.grid.pipeTrigger,e.data[n.field],n.hasNestedPath)))("cellTemplate",n.bodyTemplate)("cellValidationErrorTemplate",n.errorTemplate)("lastSearchInfo",e.grid.lastSearchInfo)("active",e.isCellActive(n.visibleIndex))("cellSelectionMode",e.grid.cellSelection)("displayPinnedChip",e.shouldDisplayPinnedChip(n.visibleIndex))}}function Pye(t,r){if(1&t&&(f(0,"igx-expandable-grid-cell",24,23),R(2,"transactionState"),R(3,"igxCellStyleClasses"),R(4,"igxCellStyles"),R(5,"dataMapper"),m()),2&t){const n=r.$implicit,e=p();Z("min-height",e.cellHeight,"px")("min-width",n.resolvedWidth)("max-width",n.resolvedWidth)("flex-basis",n.resolvedWidth),ee("igx-grid__td--pinned",n.pinned)("igx-grid__td--edited",me(2,32,Nn(60,kr,e.key,n.field,e.grid.rowEditable,e.grid.transactions,e.grid.pipeTrigger,e.grid.gridAPI.crudService.cell,e.grid.gridAPI.crudService.row)))("igx-grid__td--number",("number"===n.dataType||"percent"===n.dataType||"currency"===n.dataType)&&0!==n.visibleIndex),h("ngClass",me(3,40,Rt(68,si,n.cellClasses,e.data[n.field],e.data,n.field,e.viewIndex,e.grid.pipeTrigger)))("ngStyle",me(4,47,Rt(75,si,n.cellStyles,e.data[n.field],e.data,n.field,e.viewIndex,e.grid.pipeTrigger)))("expanded",e.expanded)("editMode",n.editable&&e.grid.crudService.targetInEdit(e.index,n.index))("column",n)("formatter",n.formatter)("intRow",e)("lastPinned",n.columnLayoutChild?null:n.isLastPinned)("rowData",e.data)("width",n.getCellWidth())("visibleColumnIndex",n.visibleIndex)("value",me(5,54,Dt(82,qt,e.data,n.field,e.grid.pipeTrigger,e.data[n.field],n.hasNestedPath)))("cellTemplate",n.bodyTemplate)("cellValidationErrorTemplate",n.errorTemplate)("lastSearchInfo",e.grid.lastSearchInfo)("active",e.isCellActive(n.visibleIndex))("cellSelectionMode",e.grid.cellSelection)("displayPinnedChip",e.shouldDisplayPinnedChip(n.visibleIndex))}}function Fye(t,r){if(1&t&&(f(0,"igx-grid-cell",25,23),R(2,"transactionState"),R(3,"igxCellStyleClasses"),R(4,"igxCellStyles"),R(5,"dataMapper"),m()),2&t){const n=r.$implicit,e=p();Z("grid-row-end",n.rowEnd)("grid-column-end",n.colEnd)("grid-row-start",n.rowStart)("grid-column-start",n.colStart)("min-height",e.cellHeight,"px"),ee("igx-grid__td--edited",me(2,33,Nn(61,kr,e.key,n.field,e.grid.rowEditable,e.grid.transactions,e.grid.pipeTrigger,e.grid.gridAPI.crudService.cell,e.grid.gridAPI.crudService.row)))("igx-grid__td--pinned",n.pinned)("igx-grid__td--number","number"===n.dataType||"percent"===n.dataType||"currency"===n.dataType),h("ngClass",me(3,41,Rt(69,si,n.cellClasses,e.data[n.field],e.data,n.field,e.viewIndex,e.grid.pipeTrigger)))("ngStyle",me(4,48,Rt(76,si,n.cellStyles,e.data[n.field],e.data,n.field,e.viewIndex,e.grid.pipeTrigger)))("editMode",n.editable&&e.grid.crudService.targetInEdit(e.index,n.index))("column",n)("lastPinned",n.columnLayoutChild?null:n.isLastPinned)("firstPinned",n.columnLayoutChild?null:n.isFirstPinned)("formatter",n.formatter)("intRow",e)("rowData",e.data)("visibleColumnIndex",n.visibleIndex)("value",me(5,55,Dt(83,qt,e.data,n.field,e.grid.pipeTrigger,e.data[n.field],n.hasNestedPath)))("cellTemplate",n.bodyTemplate)("cellValidationErrorTemplate",n.errorTemplate)("lastSearchInfo",e.grid.lastSearchInfo)("active",e.isCellActive(n.visibleIndex))("cellSelectionMode",e.grid.cellSelection)("displayPinnedChip",e.shouldDisplayPinnedChip(n.visibleIndex))}}function Oye(t,r){if(1&t&&(f(0,"igx-expandable-grid-cell",26,23),R(2,"transactionState"),R(3,"igxCellStyleClasses"),R(4,"igxCellStyles"),R(5,"dataMapper"),m()),2&t){const n=r.$implicit,e=p();Z("grid-row-end",n.rowEnd)("grid-column-end",n.colEnd)("grid-row-start",n.rowStart)("grid-column-start",n.colStart)("min-height",e.cellHeight,"px"),ee("igx-grid__td--edited",me(2,33,Nn(61,kr,e.key,n.field,e.grid.rowEditable,e.grid.transactions,e.grid.pipeTrigger,e.grid.gridAPI.crudService.cell,e.grid.gridAPI.crudService.row)))("igx-grid__td--pinned",n.pinned)("igx-grid__td--number",("number"===n.dataType||"percent"===n.dataType||"currency"===n.dataType)&&0!==n.visibleIndex),h("ngClass",me(3,41,Rt(69,si,n.cellClasses,e.data[n.field],e.data,n.field,e.viewIndex,e.grid.pipeTrigger)))("ngStyle",me(4,48,Rt(76,si,n.cellStyles,e.data[n.field],e.data,n.field,e.viewIndex,e.grid.pipeTrigger)))("expanded",e.expanded)("editMode",n.editable&&e.grid.crudService.targetInEdit(e.index,n.index))("column",n)("lastPinned",n.columnLayoutChild?null:n.isLastPinned)("formatter",n.formatter)("intRow",e)("rowData",e.data)("visibleColumnIndex",n.visibleIndex)("value",me(5,55,Dt(83,qt,e.data,n.field,e.grid.pipeTrigger,e.data[n.field],n.hasNestedPath)))("cellTemplate",n.bodyTemplate)("cellValidationErrorTemplate",n.errorTemplate)("lastSearchInfo",e.grid.lastSearchInfo)("active",e.isCellActive(n.visibleIndex))("cellSelectionMode",e.grid.cellSelection)("displayPinnedChip",e.shouldDisplayPinnedChip(n.visibleIndex))}}const zD=["record_template"],Nye=["detail_template_container"],Vye=["group_template"],oV=["summary_template"];function Lye(t,r){if(1&t&&(j(0),V(1,"igx-grid-group-by-area",61,62),W()),2&t){const n=p();u(),Z("flex-basis",n.outerWidth,"px"),h("grid",n)("expressions",n.groupingExpressions)("sortingExpressions",n.sortingExpressions)("density",n.displayDensity)("dropAreaTemplate",n.dropAreaTemplate)("dropAreaMessage",n.dropAreaMessage)}}function Gye(t,r){1&t&&V(0,"span",63),2&t&&(h("igxColumnMovingDrop",p().headerContainer),U("droppable",!0))}function Hye(t,r){if(1&t&&V(0,"span",64),2&t){const n=p();Z("left",n.pinnedWidth,"px"),h("igxColumnMovingDrop",n.headerContainer),U("droppable",!0)}}function Bye(t,r){1&t&&G(0)}function zye(t,r){1&t&&G(0)}function Uye(t,r){if(1&t&&(j(0),y(1,zye,1,0,"ng-container",69),W()),2&t){const n=r.$implicit,e=r.index,i=p(4),s=P(27);u(),h("ngTemplateOutlet",s)("ngTemplateOutletContext",i.getContext(n,e,!0))}}const UD=(t,r)=>({"igx-grid__tr--pinned-bottom":t,"igx-grid__tr--pinned-top":r});function jye(t,r){if(1&t&&(f(0,"div",66,67),y(2,Uye,2,2,"ng-container",68),m()),2&t){const n=p().ngIf,e=p(2);Z("width",e.calcWidth,"px"),h("ngClass",Wi(4,UD,!e.isRowPinningToTop,e.isRowPinningToTop)),u(2),h("ngForOf",n)}}function Wye(t,r){if(1&t&&(j(0),y(1,jye,3,7,"div",65),W()),2&t){const n=r.ngIf;u(),h("ngIf",n.length>0)}}const aV=(t,r,n,e,i,s,o)=>[t,r,n,e,i,s,o,!0],jD=(t,r,n,e,i,s)=>[t,r,n,e,i,s,!0];function $ye(t,r){if(1&t&&(y(0,Wye,2,1,"ng-container",0),R(1,"gridSort"),R(2,"gridFiltering"),R(3,"gridRowPinning"),R(4,"gridAddRow"),R(5,"visibleColumns"),R(6,"gridTransaction")),2&t){const n=p();h("ngIf",me(1,1,Rt(42,jD,me(2,9,Nn(34,aV,xt(3,18,he(4,23,Gt(5,27,he(6,30,n.data,n.id,n.pipeTrigger),n.hasVisibleColumns),!0,n.pipeTrigger),n.id,!0,n.pipeTrigger),n.filteringExpressionsTree,n.filterStrategy,n.advancedFilteringExpressionsTree,n.id,n.pipeTrigger,n.filteringPipeTrigger)),n.sortingExpressions,n.groupingExpressions,n.sortStrategy,n.id,n.pipeTrigger)))}}function qye(t,r){}function Kye(t,r){if(1&t){const n=z();y(0,qye,0,0,"ng-template",70),T("cachedViewLoaded",function(i){return I(n),b(p().cachedViewLoaded(i))})("viewCreated",function(i){return I(n),b(p().viewCreatedHandler(i))})("viewMoved",function(i){return I(n),b(p().viewMovedHandler(i))})}if(2&t){const n=r.$implicit,e=r.index,i=p();h("igxTemplateOutlet",i.getRowTemplate(n))("igxTemplateOutletContext",i.getContext(n,e))}}function Zye(t,r){1&t&&G(0)}const Op=(t,r,n,e,i,s,o,a,l,c,d)=>[t,r,n,e,i,s,o,a,l,!1,c,d];function Yye(t,r){if(1&t&&(V(0,"igx-grid-row",71,72),R(2,"igxGridRowClasses"),R(3,"igxGridRowStyles")),2&t){const n=r.index,e=r.$implicit,i=r.disabled,s=P(1),o=p();h("gridID",o.id)("index",n)("data",e)("disabled",i)("ngClass",me(2,6,Ta(24,Op,[o.rowClasses,s,s.inEditMode,s.selected,s.dirty,s.deleted,s.dragging,n,o.hasColumnLayouts,e,o.pipeTrigger])))("ngStyle",xt(3,19,o.rowStyles,e,n,o.pipeTrigger))}}function Qye(t,r){if(1&t&&(V(0,"igx-grid-row",73,74),R(3,"igxGridRowClasses"),R(4,"igxGridRowStyles")),2&t){const n=r.index,e=r.$implicit,i=P(1),s=p();h("gridID",s.id)("index",n)("data",e)("ngClass",me(3,5,Ta(23,Op,[s.rowClasses,i,i.inEditMode,i.selected,i.dirty,i.deleted,i.dragging,n,s.hasColumnLayouts,e,s.pipeTrigger])))("ngStyle",xt(4,18,s.rowStyles,e,n,s.pipeTrigger))}}function Xye(t,r){if(1&t&&V(0,"igx-grid-groupby-row",75,72),2&t){const n=r.index,e=r.$implicit,i=p();h("gridID",i.id)("index",n)("groupRow",e)("hideGroupRowSelectors",i.hideRowSelectors)("rowDraggable",i.rowDraggable)}}function Jye(t,r){if(1&t&&V(0,"igx-grid-summary-row",76,77),2&t){const n=r.index,e=r.$implicit;h("gridID",p().id)("summaries",e.summaries)("index",n)}}function ewe(t,r){if(1&t&&(j(0),V(1,"div"),W()),2&t){const n=p(2);u(),Gl("igx-grid__row-indentation igx-grid__row-indentation--level-",n.groupingExpressions.length,"")}}function twe(t,r){}const iwe=t=>({"igx-grid__tr-container":!0,"igx-grid__tr-container--active":t});function nwe(t,r){if(1&t){const n=z();f(0,"div",78,79),T("pointerdown",function(){const s=I(n).index,o=P(1);return b(p().detailsViewFocused(o,s))}),f(2,"div",80),y(3,ewe,2,3,"ng-container",0)(4,twe,0,0,"ng-template",81),m()()}if(2&t){const n=r.index,e=r.$implicit,i=p();MI("id","",i.id,"_",n,""),h("ngClass",Ue(7,iwe,i.isDetailActive(n))),U("data-rowindex",n),u(3),h("ngIf",i.groupingExpressions.length>0),u(),h("ngTemplateOutlet",i.detailTemplate)("ngTemplateOutletContext",i.getDetailsContext(e,n))}}function rwe(t,r){1&t&&G(0)}function swe(t,r){1&t&&V(0,"igx-circular-bar",82),2&t&&h("indeterminate",!0)}function owe(t,r){1&t&&V(0,"span",83),2&t&&(h("igxColumnMovingDrop",p().headerContainer),U("droppable",!0))}function awe(t,r){}function lwe(t,r){if(1&t&&(V(0,"igx-grid-summary-row",84,77),R(2,"igxGridSummaryDataPipe")),2&t){const n=p();Z("width",n.calcWidth,"px")("height",n.summaryRowHeight,"px"),h("gridID",n.id)("summaries",Gt(2,7,n.id,n.summaryService.retriggerRootPipe))("index",n.dataView.length)}}function cwe(t,r){}function dwe(t,r){1&t&&G(0)}function uwe(t,r){if(1&t&&(f(0,"span"),y(1,dwe,1,0,"ng-container",7),m()),2&t){const n=p(2),e=P(76);u(),h("ngTemplateOutlet",n.addRowEmptyTemplate||e)}}function hwe(t,r){if(1&t&&(f(0,"span",85)(1,"span"),C(2),m(),y(3,uwe,2,1,"span",0),m()),2&t){const n=p();u(2),Y(n.emptyFilteredGridMessage),u(),h("ngIf",n.showAddButton)}}function gwe(t,r){1&t&&G(0)}function pwe(t,r){if(1&t&&(f(0,"span"),y(1,gwe,1,0,"ng-container",7),m()),2&t){const n=p(2),e=P(76);u(),h("ngTemplateOutlet",n.addRowEmptyTemplate||e)}}function fwe(t,r){if(1&t&&(f(0,"span",85)(1,"span"),C(2),m(),y(3,pwe,2,1,"span",0),m()),2&t){const n=p();u(2),Y(n.emptyGridMessage),u(),h("ngIf",n.showAddButton)}}function mwe(t,r){if(1&t){const n=z();f(0,"button",86),T("click",function(i){return I(n),b(p().crudService.enterAddRowMode(null,!1,i))}),C(1),m()}if(2&t){const n=p();u(),Q(" ",n.resourceStrings.igx_grid_add_row_label," ")}}function _we(t,r){1&t&&(f(0,"div",87),V(1,"igx-circular-bar",82),m()),2&t&&(u(),h("indeterminate",!0))}const lV=t=>({"igx-grid__group-expand-btn--push":t});function vwe(t,r){if(1&t&&(f(0,"igx-icon",88),C(1,"unfold_less"),m()),2&t){const n=p();h("ngClass",Ue(1,lV,n.filteringService.isFilterRowVisible))}}function xwe(t,r){if(1&t&&(f(0,"igx-icon",88),C(1,"unfold_more"),m()),2&t){const n=p();h("ngClass",Ue(1,lV,n.filteringService.isFilterRowVisible))}}function ywe(t,r){1&t&&G(0)}const WD=(t,r)=>({rowChangesCount:t,endEdit:r});function wwe(t,r){if(1&t&&(f(0,"div",18,89)(2,"div",90),y(3,ywe,1,0,"ng-container",69),m()()),2&t){const n=p();u(2),h("className",n.bannerClass),u(),h("ngTemplateOutlet",n.rowEditContainer)("ngTemplateOutletContext",Wi(3,WD,n.rowChangesCount,n.endEdit.bind(n)))}}function Cwe(t,r){if(1&t&&C(0),2&t){const n=p();Bl(" You have ",n.rowChangesCount," changes in this row and ",n.hiddenColumnsCount," hidden columns\n")}}function Iwe(t,r){if(1&t){const n=z();f(0,"button",91),T("click",function(i){return I(n),b(p().endRowEditTabStop(!1,i))}),C(1),m(),f(2,"button",91),T("click",function(i){return I(n),b(p().endRowEditTabStop(!0,i))}),C(3),m()}if(2&t){const n=p();u(),Y(n.resourceStrings.igx_grid_row_edit_btn_cancel),u(2),Y(n.resourceStrings.igx_grid_row_edit_btn_done)}}function bwe(t,r){1&t&&G(0)}function Dwe(t,r){1&t&&G(0)}function Swe(t,r){if(1&t&&(f(0,"div",92)(1,"span",93),y(2,bwe,1,0,"ng-container",69),m()(),f(3,"div",94)(4,"div",95),y(5,Dwe,1,0,"ng-container",69),m()()),2&t){const n=p(),e=P(85),i=P(87);u(2),h("ngTemplateOutlet","IgxAddRow"===(null==n.crudService.row?null:n.crudService.row.getClassName())?n.rowAddTextTemplate:n.rowEditTextTemplate?n.rowEditTextTemplate:e)("ngTemplateOutletContext",Ue(4,Bt,"IgxAddRow"!==(null==n.crudService.row?null:n.crudService.row.getClassName())?n.rowChangesCount:null)),u(3),h("ngTemplateOutlet",n.rowEditActionsTemplate?n.rowEditActionsTemplate:i)("ngTemplateOutletContext",Ue(6,Bt,n.endEdit.bind(n)))}}function Twe(t,r){1&t&&(f(0,"igx-icon"),C(1,"drag_indicator"),m())}function Ewe(t,r){1&t&&V(0,"igx-grid-column-resizer")}const cV=[[["igx-grid-toolbar"]],[["igx-grid-footer"]],[["igx-paginator"]]],dV=(t,r,n,e,i,s,o,a)=>[t,r,n,e,i,s,o,a],uV=["igx-grid-toolbar","igx-grid-footer","igx-paginator"];function lCe(t,r){if(1&t&&(f(0,"span"),C(1),m()),2&t){const n=p();u(),Y(null==n.grid?null:n.grid.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label)}}function cCe(t,r){1&t&&J(0,2)}function dCe(t,r){1&t&&V(0,"igx-grid-toolbar-advanced-filtering")}function uCe(t,r){if(1&t&&(f(0,"igx-grid-toolbar-actions"),y(1,dCe,1,0,"igx-grid-toolbar-advanced-filtering",2),m()),2&t){const n=p();u(),h("ngIf",n.grid.allowAdvancedFiltering)}}function hCe(t,r){1&t&&G(0)}function gCe(t,r){1&t&&(f(0,"div",5),V(1,"igx-linear-bar",6),m()),2&t&&(u(),h("indeterminate",!0))}const pCe=[[["","igxGridToolbarTitle",""],["igx-grid-toolbar-title"]],"*",[["","igxGridToolbarActions",""],["igx-grid-toolbar-actions"]]],fCe=["[igxGridToolbarTitle],igx-grid-toolbar-title","*","[igxGridToolbarActions],igx-grid-toolbar-actions"];function mCe(t,r){if(1&t&&(f(0,"span"),C(1),m()),2&t){const n=p();u(),Q(" ",null==n.grid?null:n.grid.resourceStrings.igx_grid_toolbar_exporter_button_label," ")}}function _Ce(t,r){1&t&&J(0,1)}function vCe(t,r){if(1&t&&(f(0,"excel-text"),C(1),m()),2&t){const n=p(2);u(),Q(" ",null==n.grid?null:n.grid.resourceStrings.igx_grid_toolbar_exporter_excel_entry_text," ")}}function xCe(t,r){1&t&&G(0)}function yCe(t,r){if(1&t){const n=z();f(0,"li",9,10),T("click",function(){I(n);const i=p(),s=P(12);return b(i.export("excel",s))}),y(2,_Ce,1,0,"ng-template",null,11,L)(4,vCe,2,1,"excel-text",3)(5,xCe,1,0,"ng-container",12),m()}if(2&t){const n=P(3),e=p();u(4),h("ngIf",!e.hasExcelAttr),u(),h("ngTemplateOutlet",n)}}function wCe(t,r){1&t&&J(0,2)}function CCe(t,r){if(1&t&&(f(0,"csv-text"),C(1),m()),2&t){const n=p(2);u(),Q(" ",null==n.grid?null:n.grid.resourceStrings.igx_grid_toolbar_exporter_csv_entry_text,"")}}function ICe(t,r){1&t&&G(0)}function bCe(t,r){if(1&t){const n=z();f(0,"li",13,14),T("click",function(){I(n);const i=p(),s=P(12);return b(i.export("csv",s))}),y(2,wCe,1,0,"ng-template",null,15,L)(4,CCe,2,1,"csv-text",3)(5,ICe,1,0,"ng-container",12),m()}if(2&t){const n=P(3),e=p();u(4),h("ngIf",!e.hasCSVAttr),u(),h("ngTemplateOutlet",n)}}const DCe=["*",[["","excelText",""],["excel-text"]],[["","csvText",""],["csv-text"]]],SCe=["*","[excelText],excel-text","[csvText],csv-text"];function TCe(t,r){if(1&t){const n=z();j(0),f(1,"button",1,2),T("click",function(){I(n);const i=P(2),s=P(11),o=P(10);return b(p().toggle(i,s,o))}),f(3,"igx-icon"),C(4),m(),f(5,"span"),C(6),m(),f(7,"span"),C(8),m()(),f(9,"igx-column-actions",3,4),T("opened",function(){I(n);const i=P(11);return b(p().focusSearch(i.element))}),m(),W()}if(2&t){const n=p();u(),h("title",null==n.grid?null:n.grid.resourceStrings.igx_grid_toolbar_hiding_button_tooltip)("displayDensity",n.grid.displayDensity),u(3),Y(n.grid.hiddenColumnsCount?"visibility_off":"visibility"),u(2),Y(n.grid.hiddenColumnsCount),u(2),Y(n.buttonText),u(),h("grid",n.grid)("title",n.title||(null==n.grid?null:n.grid.resourceStrings.igx_grid_toolbar_hiding_title))("filterColumnsPrompt",n.prompt||(null==n.grid?null:n.grid.resourceStrings.igx_grid_toolbar_actions_filter_prompt))("hideFilter",n.hideFilter)("filterCriteria",n.filterCriteria)("columnDisplayOrder",n.columnDisplayOrder)("columnsAreaMaxHeight",n.columnsAreaMaxHeight)("uncheckAllText",n.uncheckAllText)("checkAllText",n.checkAllText)("indentation",n.indentetion)}}function ECe(t,r){if(1&t){const n=z();j(0),f(1,"button",1,2),T("click",function(){I(n);const i=P(2),s=P(10),o=P(9);return b(p().toggle(i,s,o))}),V(3,"igx-icon",3),f(4,"span"),C(5),m(),f(6,"span"),C(7),m()(),f(8,"igx-column-actions",4,5),T("opened",function(){I(n);const i=P(10);return b(p().focusSearch(i.element))}),m(),W()}if(2&t){const n=p();u(),h("title",null==n.grid?null:n.grid.resourceStrings.igx_grid_toolbar_pinning_button_tooltip)("displayDensity",n.grid.displayDensity),u(2),h("name",n.grid.pinnedColumnsCount?"pin-left":"unpin-left"),u(2),Y(n.grid.pinnedColumnsCount),u(2),Y(n.buttonText),u(),h("grid",n.grid)("title",n.title||(null==n.grid?null:n.grid.resourceStrings.igx_grid_toolbar_pinning_title))("filterColumnsPrompt",n.prompt||(null==n.grid?null:n.grid.resourceStrings.igx_grid_toolbar_actions_filter_prompt))("hideFilter",n.hideFilter)("filterCriteria",n.filterCriteria)("columnDisplayOrder",n.columnDisplayOrder)("columnsAreaMaxHeight",n.columnsAreaMaxHeight)("uncheckAllText",n.uncheckAllText)("checkAllText",n.checkAllText)("indentation",n.indentetion)}}function MCe(t,r){1&t&&V(0,"igx-page-size")}function ACe(t,r){1&t&&V(0,"igx-page-nav")}const kCe=[[["","igxPaginatorContent",""],["igx-paginator-content"]]],RCe=["[igxPaginatorContent],igx-paginator-content"];function PCe(t,r){if(1&t&&(f(0,"igx-select-item",4),C(1),m()),2&t){const n=r.$implicit;h("value",n),u(),Q(" ",n," ")}}function KDe(t,r){if(1&t){const n=z();f(0,"igx-icon",5),T("click",function(){return I(n),b(p()._triggerAction())}),C(1),m()}if(2&t){const n=p();u(),Q(" ",n.actionButtonIcon," ")}}function ZDe(t,r){if(1&t&&(f(0,"h1",6),C(1),m()),2&t){const n=p();U("id",n.titleId),u(),Q(" ",n.title," ")}}const YDe=[[["igx-navbar-action"],["","igxNavbarAction",""]],[["igx-navbar-title"],["","igxNavbarTitle",""]],"*"],QDe=["igx-navbar-action, [igxNavbarAction]","igx-navbar-title, [igxNavbarTitle]","*"];let ac=(()=>{var t;class r{constructor(){this.navs={}}add(e,i){this.navs[e]=i}remove(e){delete this.navs[e]}get(e){if(e)return this.navs[e]}toggle(e,...i){if(this.navs[e])return this.navs[e].toggle(...i)}open(e,...i){if(this.navs[e])return this.navs[e].open(...i)}close(e,...i){if(this.navs[e])return this.navs[e].close(...i)}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();const Np={};let qD=0,gV=!1;const CEe=t=>(t=>{if(Np.hasOwnProperty(t)){const r=Np[t];delete Np[t],r()}})(t.data),Tt=t=>t,iy=()=>window.ResizeObserver,gt=(t,r)=>{const n=[];if(!t)return n;let e=t.length;for(;e--;)n[e]=r?uo(t[e]):t[e];return n},KD=(t,r)=>{const n=[];if(!t)return n;for(const e of t){const i=uo(e);Array.isArray(e[r])&&(i[r]=KD(i[r],r)),n.push(i)}return n},jo=(t,r)=>Zv(t,r,(n,e)=>{if(Array.isArray(e))return e}),uo=t=>{if(Un(t))return new Date(t.getTime());if(Array.isArray(t))return[...t];if(t instanceof Map||t instanceof Set)return t;if(Ua(t)){const r={};for(const n of Object.keys(t))r[n]=uo(t[n]);return r}return t},hs=t=>Un(t)?isNaN(t.getTime())?null:t:t?new Date(t):null,Ua=t=>!(!t||"[object Object]"!==t.toString()),Un=t=>t instanceof Date,lc=(t,r)=>Un(t)&&Un(r)?t.getTime()===r.getTime():t===r;let We=(()=>{var t;class r{constructor(e){this.platformId=e,this.isBrowser=WF(this.platformId),this.isIOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!("MSStream"in window),this.isFirefox=this.isBrowser&&/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent),this.isEdge=this.isBrowser&&/Edge[\/\s](\d+\.\d+)/.test(navigator.userAgent),this.isChromium=this.isBrowser&&(/Chrom|e?ium/g.test(navigator.userAgent)||/Google Inc/g.test(navigator.vendor))&&!/Edge/g.test(navigator.userAgent),this.KEYMAP={ENTER:"Enter",SPACE:" ",ESCAPE:"Escape",ARROW_DOWN:"ArrowDown",ARROW_UP:"ArrowUp",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",END:"End",HOME:"Home",PAGE_DOWN:"PageDown",PAGE_UP:"PageUp",F2:"F2",TAB:"Tab",SEMICOLON:";",DELETE:"Delete",BACKSPACE:"Backspace",CONTROL:"Control",X:"x",Y:"y",Z:"z"}}getNodeSizeViaRange(e,i,s){let a,o=null;if(this.isFirefox||(o=i.style.overflow,i.style.overflow="visible"),s){const d=s.style;a=[d.width,d.minWidth,d.flexBasis],d.width="",d.minWidth="",d.flexBasis=""}e.selectNodeContents(i);const l=i.getBoundingClientRect().width/i.offsetWidth,c=e.getBoundingClientRect().width/l;return this.isFirefox||(i.style.overflow=o),s&&(s.style.width=a[0],s.style.minWidth=a[1],s.style.flexBasis=a[2]),c}isActivationKey(e){return e.key===this.KEYMAP.ENTER||e.key===this.KEYMAP.SPACE}isFilteringKeyCombo(e){return e.key===this.KEYMAP.ESCAPE||e.ctrlKey&&e.shiftKey&&"l"===e.key.toLowerCase()}isLeftClick(e){return 0===e.button}isNavigationKey(e){return[this.KEYMAP.HOME,this.KEYMAP.END,this.KEYMAP.SPACE,this.KEYMAP.ARROW_DOWN,this.KEYMAP.ARROW_LEFT,this.KEYMAP.ARROW_RIGHT,this.KEYMAP.ARROW_UP].includes(e)}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(Fo))},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();const ZD=t=>{let r=[];return t.forEach(n=>{if(r.push(n),n.children){const e=Array.isArray(n.children)?n.children:n.children.toArray();r=r.concat(ZD(e))}}),r},mV=new Set(["arrowleft","left","arrowright","right","home","end"]),ja=new Set(["down","up","left","right","arrowdown","arrowup","arrowleft","arrowright","home","end","space","spacebar"," "]),ny=(new Set("up down arrowup arrowdown home end".split(" ")),new Set("right down arrowright arrowdown".split(" "))),ry=new Set("left up arrowleft arrowup".split(" ")),_V=new Set(["+","add","\u2260","\xb1","="]),YD=new Set([...Array.from(ja),...Array.from(_V),"enter","f2","escape","esc","pagedown","pageup"]),QD=new Set([...Array.from(ja),"escape","esc","l","\xac"]),XD=t=>new wi(r=>{const n=new(iy())(i=>{r.next(i)});return n.observe(t),()=>n.disconnect()}),vV=(t,r)=>{if(!r)return!t;if(t.size!==r.size)return!1;let n=!0;const e=Array.from(r.keys());for(const i of e)if(n=!!t.has(i)&&t.get(i)===r.get(i),!n)break;return n},tn=(t,r)=>{const n=r?.split(".")??[];let e=t[n.shift()];return n.forEach(i=>{e&&(e=e[i])}),e},JD=(t,r,n,e)=>{let i=0;const s=()=>{const o=Math.min(i+r,t);for(;i{t.apply(void 0,r)};const n=window.location;window.postMessage(qD+"",n.protocol+"//"+n.host)}(s):e()};s()},Su=(t,r,n,e)=>null==t||""===t?"":uv(t,r,n,e),eS=new Wl(void 0).transform,Tu=t=>{const r=parseFloat(getComputedStyle(globalThis.document?.documentElement).getPropertyValue("--ig-base-font-size"));return Number(t)/r};var Vp=function(t){return t[t.None=0]="None",t[t.IncorrectPageIndex=1]="IncorrectPageIndex",t[t.IncorrectRecordsPerPage=2]="IncorrectRecordsPerPage",t}(Vp||{}),ze=function(t){return t.ADD="add",t.DELETE="delete",t.UPDATE="update",t}(ze||{}),gs=function(t){return t.UNDO="undo",t.REDO="redo",t.CLEAR="clear",t.ADD="add",t.END="endPending",t}(gs||{}),dt=function(t){return t[t.None=0]="None",t[t.Asc=1]="Asc",t[t.Desc=2]="Desc",t}(dt||{});let ho=(()=>{class r{constructor(){}static instance(){return this._instance||(this._instance=new this)}sort(e,i,s,o,a,l,c){const d=i,g=s===dt.Desc?-1:1;return this.arraySort(e,(x,w)=>this.compareObjects(x,w,d,g,o,a,l,c))}compareValues(e,i){const o=null==i;return null==e?o?0:-1:o||e>i?1:et.length===r.length&&t.every((e,i)=>{const o=n.find(a=>a.fieldName===e.fieldName).groupingComparer||ho.instance().compareValues;return e.fieldName===r[i].fieldName&&0===o(e.value,r[i].value)}),iS=t=>{const r=[];if(void 0!==t&&t.expression)for(r.push({fieldName:t.expression.fieldName,value:t.value});t.groupParent;)r.unshift({fieldName:(t=t.groupParent).expression.fieldName,value:t.value});return r},sy="dateTime";class oy{sort(r,n,e){return this.sortDataRecursive(r,n,0,e)}groupDataRecursive(r,n,e,i,s,o=null,a=[],l={data:[],metadata:[]}){const c=n.expressions,d=n.expansion;let g=0,_=[];for(;gtS(De.hierarchy||[{fieldName:N.expression.fieldName,value:N.value}],q,c)),ce=$?$.expanded:n.defaultExpanded;let ge;if(_.push(N),s.push(null),l.data.push(N),l.metadata.push(null),e=c||d<=1)return r;const g=n[e];g.strategy||(g.strategy=ho.instance());const _=i?.getColumnByName(g.fieldName),x="date"===_?.dataType||_?.dataType===sy,w="time"===_?.dataType||_?.dataType===sy,E="string"===_?.dataType;if(r=g.strategy.sort(r,g.fieldName,g.dir,g.ignoreCase,this.getFieldValue,x,w,i),e===c-1)return r;for(s=0;s1&&(a=this.sortDataRecursive(a,n,e+1,i)),o=0;o{const l=wt.cloneTreeGridRecord(a);l.parent=i,l.children&&(l.children=wt.treeGridSort(l.children,n,e,l,s)),o.push(l)}),o=wt.sort(o,n,e,s),o}static cloneTreeGridRecord(r){return{key:r.key,data:r.data,children:r.children,isFilteredOutParent:r.isFilteredOutParent,level:r.level,expanded:r.expanded}}static group(r,n,e=new MEe,i=null,s=[],o={data:[],metadata:[]}){return s.splice(0,s.length),e.groupBy(r,n,i,s,o)}static page(r,n,e){if(!n)return r;const i=void 0!==e?e:r.length,s=n.index,o=[],a=void 0!==e&&n.recordsPerPage>e?e:n.recordsPerPage;return n.metadata={countPages:0,countRecords:i,error:Vp.None},s<0||isNaN(s)?(n.metadata.error=Vp.IncorrectPageIndex,o):a<=0||isNaN(a)?(n.metadata.error=Vp.IncorrectRecordsPerPage,o):(n.metadata.countPages=Math.ceil(i/a),i?s>=n.metadata.countPages?(n.metadata.error=Vp.IncorrectPageIndex,o):r.slice(s*a,(s+1)*a):r)}static correctPagingState(r,n){const e=Math.ceil(n/r.recordsPerPage)-1;!isNaN(e)&&r.index>e&&(r.index=e)}static getHierarchy(r){return iS(r)}static isHierarchyMatch(r,n,e){return tS(r,n,e)}static mergeTransactions(r,n,e,i=new Lp,s=!1){return r.forEach((o,a)=>{const l=e?o[e]:o,c=n.find(d=>d.id===l);c&&c.type===ze.UPDATE&&(r[a]=jo(i.clone(r[a]),c.newValue))}),s&&n.filter(o=>o.type===ze.DELETE).forEach(o=>{const a=r.findIndex(e?l=>l[e]===o.id:l=>l===o.id);0<=a&&ao.type===ze.ADD).map(o=>o.newValue)),r}static mergeHierarchicalTransactions(r,n,e,i,s=new Lp,o=!1){for(const a of n)if(a.path){const l=this.findParentFromPath(r,i,e,a.path);let c=l?l[e]:r;switch(a.type){case ze.ADD:l&&!l[e]&&(l[e]=c=[]),c.push(a.newValue);break;case ze.UPDATE:const d=c.findIndex(g=>g[i]===a.id);-1!==d&&(c[d]=jo(s.clone(c[d]),a.newValue));break;case ze.DELETE:if(o){const g=c.findIndex(_=>_[i]===a.id);-1!==g&&c.splice(g,1)}}}else r.push(a.newValue);return r}static parseValue(r,n){return(r===ae.Number||r===ae.Currency||r===ae.Percent)&&(n=parseFloat(n)),n}static findParentFromPath(r,n,e,i){let o,s=r;for(const a of i){if(o=s&&s.find(l=>l[n]===a),!o)break;s=o[e]}return o}}class jn{static getKeysFromData(r){const n=r.length;if(0===n)return[];const e=r[0],i=r[Math.floor(n/2)],s=r[n-1],o=Object.keys(e),a=Object.keys(i),l=Object.keys(s),c=new Set(o.concat(a).concat(l));return jn.isSpecialData(e)?["Column 1"]:Array.from(c)}static saveBlobToFile(r,n){const e=document.createElement("a"),i=window.URL.createObjectURL(r);e.download=n,e.href=i,document.body.appendChild(e),e.click(),document.body.removeChild(e),window.URL.revokeObjectURL(i)}static stringToArrayBuffer(r){const n=new ArrayBuffer(r.length),e=new Uint8Array(n);for(let i=0;i!==r.length;++i)e[i]=255&r.charCodeAt(i);return n}static isSpecialData(r){return"string"==typeof r||"number"==typeof r||r instanceof Date}static hasValue(r){return null!=r}static isNullOrWhitespaces(r){return null==r||!r.trim()}static sanitizeValue(r){return this.hasValue(r)?String(r).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"):""}}var nS=function(t){return t[t.Regular=0]="Regular",t[t.Advanced=1]="Advanced",t}(nS||{});class rt{constructor(r,n){this.filteringOperands=[],this.operator=r,this.fieldName=n}static empty(r){return!r||!r.filteringOperands||!r.filteringOperands.length}find(r){const n=this.findIndex(r);return n>-1?this.filteringOperands[n]:null}findIndex(r){let n;for(let e=0;e{let a=tn(o,i);const l=r.formatter&&this.shouldFormatFilterValues(r);return a=l?r.formatter(a,o):a,{value:a,label:this.getFilterItemLabel(r,a,!l,o)}});return s=this.getUniqueFilterItems(r,s),Promise.resolve(s)}getFilterItemLabel(r,n,e,i){if(r.formatter)return e?r.formatter(n,i):n;const{display:s,format:o,digitsInfo:a,currencyCode:l,timezone:c}=r.pipeArgs,d=r.grid.locale;switch(r.dataType){case ae.Date:case ae.DateTime:case ae.Time:return Su(n,o,d,c);case ae.Currency:return eS(n,l||eu(d),s,a,d);case ae.Number:return tu(n,d,a);case ae.Percent:return Qg(n,d,a);default:return n}}getUniqueFilterItems(r,n){const e=n.reduce((s,o)=>{let a=o.value;if(r.dataType===ae.String&&r.filteringIgnoreCase)a=a?.toString().toLowerCase();else if(r.dataType===ae.DateTime)a=o.value?.toString(),o.value=a&&new Date(a);else if(r.dataType===ae.Time){const l=a&&new Date(a);a=l?(new Date).setHours(l.getHours(),l.getMinutes(),l.getSeconds()):a,o.value=a&&new Date(a)}else if(r.dataType===ae.Date){const l=a&&new Date(a);a=l?new Date(l.getFullYear(),l.getMonth(),l.getDate()).toISOString():a,o.value=l}return s.has(a)?s:s.set(a,o)},new Map);return Array.from(e.values())}shouldFormatFilterValues(r){return!1}}let Eu=(()=>{class r extends IV{constructor(){super()}static instance(){return this._instance||(this._instance=new this)}filter(e,i,s,o){let a,l;const c=e.length,d=[];if(rt.empty(i)&&rt.empty(s)||!c)return e;for(a=0;a0?d:null}this.matchRecord(a,n,s)&&this.matchRecord(a,e,s)?c.push(a):a.children&&a.children.length>0&&(a.isFilteredOutParent=!0,c.push(a))}return c}isHierarchicalFilterField(r){return this.hierarchicalFilterFields&&-1!==this.hierarchicalFilterFields.indexOf(r)}getFilterItems(r,n){if(!this.isHierarchicalFilterField(r.field))return super.getFilterItems(r,n);let e=r.grid.gridAPI.filterTreeDataByExpressions(n);e=wt.treeGridSort(e,[{fieldName:r.field,dir:dt.Asc,ignoreCase:r.sortingIgnoreCase}],r.grid.sortStrategy,null,r.grid);const i=this.getHierarchicalFilterItems(e,r);return Promise.resolve(i)}getHierarchicalFilterItems(r,n,e){return r?.map(i=>{let s=tn(i.data,n.field);const o=n.formatter&&this.shouldFormatFilterValues(n);s=o?n.formatter(s,i.data):s;const l={value:e?s||0===s?`${e.value}.[${s}]`:s:`[${s}]`};return l.label=this.getFilterItemLabel(n,s,!o,i.data),l.children=this.getHierarchicalFilterItems(i.children,n,l),l})}}const $a=Tt({quickFilter:"quickFilter",excelStyleFilter:"excelStyleFilter"}),$r=Tt({top:"top",bottom:"bottom"}),qr=Tt({rootLevelOnly:"rootLevelOnly",childLevelsOnly:"childLevelsOnly",rootAndChildLevels:"rootAndChildLevels"}),_t=Tt({none:"none",single:"single",multiple:"multiple",multipleCascade:"multipleCascade"}),rS=Tt({Alphabetical:"Alphabetical",DisplayOrder:"DisplayOrder"});var sS=function(t){return t[t.Start=0]="Start",t[t.End=1]="End",t}(sS||{}),bV=function(t){return t[t.Top=0]="Top",t[t.Bottom=1]="Bottom",t}(bV||{}),cc=function(t){return t[t.Local=0]="Local",t[t.Remote=1]="Remote",t}(cc||{}),Hp=function(t){return t[t.Grid=0]="Grid",t[t.TreeGrid=1]="TreeGrid",t}(Hp||{}),Ct=function(t){return t.GroupedRecord="GroupedRecord",t.TreeGridRecord="TreeGridRecord",t.DataRecord="DataRecord",t.HierarchicalGridRecord="HierarchicalGridRecord",t.HeaderRecord="HeaderRecord",t.SummaryRecord="SummaryRecord",t.PivotGridRecord="PivotGridRecord",t}(Ct||{}),Ri=function(t){return t.RowHeader="RowHeader",t.ColumnHeader="ColumnHeader",t.MultiRowHeader="MultiRowHeader",t.MultiColumnHeader="MultiColumnHeader",t}(Ri||{});class PEe{get columnIndex(){return this._columnIndex}set columnIndex(r){this._columnIndex=r,this.userSetIndex=!0}constructor(r){this.userSetIndex=!1,this.header=r.header,this.field=r.field,this.cancel=r.cancel,this.skipFormatter=r.skipFormatter,this.grid=r.grid,this.owner=r.owner,this._columnIndex=r.columnIndex}}const go="default",Bp="igxGridRootSummary",Wo="grid-parent",Gs="GRID_LEVEL_COL",aS="grid-child-";class DV{constructor(){this.exportEnded=new A,this.rowExporting=new A,this.columnExporting=new A,this._sort=null,this._ownersMap=new Map,this._setChildSummaries=!1,this.summaries=new Map,this.rowIslandCounter=-1,this.flatRecords=[],this.pivotGridColumns=[],this.pivotGridKeyValueMap=new Map}export(r,n){if(null==n)throw Error("No options provided!");this.options=n,this.locale=r.locale;let e=r.columns;this.options.ignoreMultiColumnHeaders&&(e=e.filter(o=>void 0===o.children));const i=this.getColumns(e),s=r.nativeElement.tagName.toLowerCase();if("igx-hierarchical-grid"===s){this._ownersMap.set(r,i);const o=r.childLayoutList;for(const a of o)this.mapHierarchicalGridColumns(a,r.data[0])}else"igx-pivot-grid"===s?(this.pivotGridColumns=[],this.isPivotGridExport=!0,this.pivotGridKeyValueMap=new Map,this.pivotGridRowDimensionsMap=new Map,r.pivotConfiguration.rows.filter(o=>o.enabled).forEach(o=>{this.addToRowDimensionsMap(o,o.memberName)}),this._ownersMap.set(go,i)):this._ownersMap.set(go,i);this.summaries=this.prepareSummaries(r),this._setChildSummaries=this.summaries.size>1&&r.summaryCalculationMode!==qr.rootLevelOnly,this.addLevelColumns(),this.prepareData(r),this.addLevelData(),this.addPivotGridColumns(r),this.exportGridRecordsData(this.flatRecords,r)}exportData(r,n){if(null==n)throw Error("No options provided!");this.options=n;const e=r.map(i=>({data:i,type:Ct.DataRecord,level:0}));this.exportGridRecordsData(e)}addToRowDimensionsMap(r,n){this.pivotGridRowDimensionsMap[r.memberName]=n,r.childLevel&&this.addToRowDimensionsMap(r.childLevel,n)}exportGridRecordsData(r,n){if(0===this._ownersMap.size){const a=r.filter(_=>_.type!==Ct.SummaryRecord).map(_=>_.data),l=jn.getKeysFromData(a),c=l.map(_=>({header:_,field:_,skip:!1,headerType:Ri.ColumnHeader,level:0,columnSpan:1})),d=new Array(l.length).fill(8.43);this._ownersMap.set(go,{columns:c,columnWidths:d,indexOfLastPinnedColumn:-1,maxLevel:0})}let e=!1;for(const[a,l]of this._ownersMap){let c=0,d=1,g=l.indexOfLastPinnedColumn;l.columns.forEach((_,x)=>{if(!_.skip){const w={header:jn.isNullOrWhitespaces(_.header)?"Column"+d++:_.header,field:_.field,columnIndex:x,cancel:!1,skipFormatter:!1,grid:a===go?n:a},E=new PEe(w);if(this.columnExporting.emit(E),_.header=E.header,_.skip=E.cancel,_.skipFormatter=E.skipFormatter,E.userSetIndex&&(_.exportIndex=E.columnIndex,e=!0),_.skip){x<=g&&c++,this.calculateColumnSpans(_,l,_.columnSpan);const M=l.columns.filter(k=>!k.skip);M.length>0&&(this._ownersMap.get(a).maxLevel=M.sort((k,N)=>N.level-k.level)[0].level)}this._sort&&this._sort.fieldName===_.field&&(_.skip?this._sort=null:this._sort.fieldName=_.header)}}),g-=c,e&&(l.columns=this.reorderColumns(l.columns))}const i=new Array,s=r[0]?.data,o=jn.isSpecialData(s);JD(r.length,100,a=>{this.exportRow(i,r[a],a,o)},()=>{this.exportDataImplementation(i,this.options,()=>{this.resetDefaults()})})}calculateColumnSpans(r,n,e){r.headerType===Ri.MultiColumnHeader&&r.skip&&n.columns.filter(o=>o.columnGroupParent===r.columnGroup).forEach(o=>{o.headerType===Ri.MultiColumnHeader?(o.columnSpan=0,o.columnGroupParent=null,o.skip=!0,this.calculateColumnSpans(o,n,o.columnSpan)):o.skip=!0});const i=n.columns.filter(s=>null!==r.columnGroupParent&&s.columnGroup===r.columnGroupParent)[0];void 0!==i&&(i.columnSpan-=e,null!==i.columnGroupParent&&this.calculateColumnSpans(i,n,e),0===i.columnSpan&&(i.skip=!0))}exportRow(r,n,e,i){if(!i){const a=this._ownersMap.get(void 0===n.owner?go:n.owner).columns;if(n.type!==Ct.HeaderRecord){const l=a.filter(c=>c.headerType===Ri.ColumnHeader&&!c.skip).sort((c,d)=>c.startIndex-d.startIndex).sort((c,d)=>c.pinnedIndex-d.pinnedIndex);n.data=l.reduce((c,d)=>{if(!d.skip){let g=tn(n.data,d.field);const _=d.formatter&&!d.skipFormatter&&n.type!==Ct.GroupedRecord;"date"!==d.dataType&&"dateTime"!==d.dataType&&"time"!==d.dataType||n.type===Ct.SummaryRecord||n.type===Ct.GroupedRecord||g instanceof Date||_||null==g?"string"===d.dataType&&g instanceof Date&&(g=g.toString()):g=new Date(g);let w=_?d.formatter(g,n.data):g;this.isPivotGridExport&&!isNaN(parseFloat(w))&&(w=parseFloat(w)),c[d.field]=w}return c},{})}else{const l=a.filter(c=>c.skip).map(c=>c.header?c.header:c.field);n.data=n.data.filter(c=>-1===l.indexOf(c))}}const s={rowData:n.data,rowIndex:e,cancel:!1};this.rowExporting.emit(s),s.cancel||r.push(n)}reorderColumns(r){const n=r.filter(a=>!a.skip),e=n.length,i=n.filter(a=>!isNaN(a.exportIndex)).sort((a,l)=>a.exportIndex-l.exportIndex),s=i.map(a=>a.exportIndex);i.forEach(a=>{n.splice(n.indexOf(a),1)});const o=new Array(e);if(i.length>Math.max(...s))return i.concat(n);s.forEach((a,l)=>{if(a<0||a>=e)n.push(i[l]);else{let c=a;for(;c0||r.advancedFilteringExpressionsTree&&r.advancedFilteringExpressionsTree.filteringOperands.length>0,i=r.groupingExpressions?r.groupingExpressions.concat(r.sortingExpressions||[]):r.sortingExpressions,s=i&&i.length>0;let o=!1;switch(n){case"igx-pivot-grid":this.preparePivotGridData(r);break;case"igx-hierarchical-grid":this.prepareHierarchicalGridData(r,e,s),o=!0;break;case"igx-tree-grid":this.prepareTreeGridData(r,e,s);break;default:this.prepareGridData(r,e,s)}this.summaries.size>0&&r.summaryCalculationMode!==qr.childLevelsOnly&&(o?this.setSummaries(Bp,0,!1,r):this.setSummaries(Bp))}preparePivotGridData(r){for(const n of r.filteredSortedData){const e=Object.fromEntries(n.aggregationValues);n.dimensionValues.forEach((s,o)=>{e[this.pivotGridRowDimensionsMap[o]]=s}),this.flatRecords.push({data:e,level:n.level,type:Ct.PivotGridRecord})}}prepareHierarchicalGridData(r,n,e){if(n&&this.options.ignoreFiltering||e&&this.options.ignoreSorting){let s=r.data;n&&!this.options.ignoreFiltering&&(s=Wa.filter(s,{expressionsTree:r.filteringExpressionsTree,advancedExpressionsTree:r.advancedFilteringExpressionsTree,strategy:r.filterStrategy},r)),e&&!this.options.ignoreSorting&&(this._sort=uo(r.sortingExpressions[0]),s=wt.sort(s,r.sortingExpressions,r.sortStrategy,r)),this.addHierarchicalGridData(r,s)}else this.addHierarchicalGridData(r,r.filteredSortedData)}addHierarchicalGridData(r,n){const e=r.childLayoutList,i=this._ownersMap.get(r).columns.map(s=>s.field);for(const s of n){const o=!!r.expansionStates.has(s)&&r.expansionStates.get(s),l={data:Object.keys(s).filter(c=>i.includes(c)).reduce((c,d)=>(c[d]=s[d],c),{}),level:0,type:Ct.HierarchicalGridRecord,owner:r,hierarchicalOwner:Wo};this.flatRecords.push(l);for(const c of e){const d={rowID:c.primaryKey?s[c.primaryKey]:s,rowKey:c.primaryKey?s[c.primaryKey]:s,rowIslandKey:c.key},g=r?.gridAPI.getChildGrid([d]),_=this.prepareIslandData(c,g,s[c.key])||[];this.getAllChildColumnsAndData(c,_,o,g)}}}prepareSummaries(r){let n=new Map;if(this.options.exportSummaries&&r.summaryService.summaryCacheMap.size>0){const e=r.summaryService.summaryCacheMap;switch(r.summaryCalculationMode){case qr.childLevelsOnly:e.delete(Bp);break;case qr.rootLevelOnly:for(const i of e.keys())i!==Bp&&e.delete(i)}n=e}return n}prepareIslandData(r,n,e){if(void 0!==n){const i=n.filteringExpressionsTree&&n.filteringExpressionsTree.filteringOperands.length>0||n.advancedFilteringExpressionsTree&&n.advancedFilteringExpressionsTree.filteringOperands.length>0,s=n.sortingExpressions&&n.sortingExpressions.length>0;i&&this.options.ignoreFiltering||s&&this.options.ignoreSorting?(i&&!this.options.ignoreFiltering&&(e=Wa.filter(e,{expressionsTree:n.filteringExpressionsTree,advancedExpressionsTree:n.advancedFilteringExpressionsTree,strategy:n.filterStrategy},n)),s&&!this.options.ignoreSorting&&(this._sort=uo(n.sortingExpressions[0]),e=wt.sort(e,n.sortingExpressions,n.sortStrategy,n))):e=n.filteredSortedData}else{const i=r.filteringExpressionsTree&&r.filteringExpressionsTree.filteringOperands.length>0||r.advancedFilteringExpressionsTree&&r.advancedFilteringExpressionsTree.filteringOperands.length>0,s=r.sortingExpressions&&r.sortingExpressions.length>0;(i&&!this.options.ignoreFiltering||s&&!this.options.ignoreSorting)&&(i&&!this.options.ignoreFiltering&&(e=Wa.filter(e,{expressionsTree:r.filteringExpressionsTree,advancedExpressionsTree:r.advancedFilteringExpressionsTree,strategy:r.filterStrategy},r)),s&&!this.options.ignoreSorting&&(this._sort=uo(r.sortingExpressions[0]),e=wt.sort(e,r.sortingExpressions,r.sortStrategy,r)))}return e}getAllChildColumnsAndData(r,n,e,i){const s=`${aS}${++this.rowIslandCounter}`,l={data:this._ownersMap.get(r).columns.filter(c=>c.headerType===Ri.ColumnHeader).map(c=>c.header?c.header:c.field),level:r.level,type:Ct.HeaderRecord,owner:r,hidden:!e,hierarchicalOwner:s};if(n&&n.length>0){this.flatRecords.push(l);for(const c of n){const d={data:c,level:r.level,type:Ct.HierarchicalGridRecord,owner:r,hidden:!e,hierarchicalOwner:s};if(d.summaryKey=r.key,this.flatRecords.push(d),r.children.length>0){const g=void 0!==i&&!!i.expansionStates.has(c)&&i.expansionStates.get(c);for(const _ of r.children){const x={rowID:_.primaryKey?c[_.primaryKey]:c,rowKey:_.primaryKey?c[_.primaryKey]:c,rowIslandKey:_.key},w=i?.gridAPI.getChildGrid([x]),E=this.prepareIslandData(r,w,c[_.key])||[];this.getAllChildColumnsAndData(_,E,g,w)}}}if(i){const c=this.prepareSummaries(i);for(const d of c.keys()){const g=c.get(d);this.setSummaries(r.key,r.level,!e,r,g,s)}}}}prepareGridData(r,n,e){const i={expressions:r.groupingExpressions,expansion:r.groupingExpansionState,defaultExpanded:r.groupsExpanded},s=r.groupingExpressions&&r.groupingExpressions.length>0;if(n&&this.options.ignoreFiltering||e&&this.options.ignoreSorting||s&&this.options.ignoreGrouping){let a=r.data;if(n&&!this.options.ignoreFiltering&&(a=Wa.filter(a,{expressionsTree:r.filteringExpressionsTree,advancedExpressionsTree:r.advancedFilteringExpressionsTree,strategy:r.filterStrategy},r)),e&&!this.options.ignoreSorting){const l=r.groupingExpressions?r.groupingExpressions.concat(r.sortingExpressions||[]):r.sortingExpressions;a=wt.sort(a,l,r.sortStrategy,r)}if(s&&!this.options.ignoreGrouping){const l=[];wt.group(gt(a),i,r.groupStrategy,r,l),a=l}s&&!this.options.ignoreGrouping?this.addGroupedData(r,a,i,!0):this.addFlatData(a)}else s?this.addGroupedData(r,r.groupsRecords,i,!0):this.addFlatData(r.filteredSortedData)}prepareTreeGridData(r,n,e){if(n&&this.options.ignoreFiltering||e&&this.options.ignoreSorting){let s=r.rootRecords;if(n&&!this.options.ignoreFiltering){const o={expressionsTree:r.filteringExpressionsTree,advancedExpressionsTree:r.advancedFilteringExpressionsTree,strategy:r.filterStrategy?r.filterStrategy:new Gp};s=o.strategy.filter(s,o.expressionsTree,o.advancedExpressionsTree)}e&&!this.options.ignoreSorting&&(this._sort=uo(r.sortingExpressions[0]),s=wt.treeGridSort(s,r.sortingExpressions,r.sortStrategy)),this.addTreeGridData(s)}else this.addTreeGridData(r.processedRootRecords)}addTreeGridData(r,n=!0,e){if(r)for(const i of r)this.flatRecords.push({data:i.data,level:i.level,hidden:!n,type:Ct.TreeGridRecord,summaryKey:i.key,hierarchicalOwner:0===i.level?Wo:e}),i.children&&this.getTreeGridChildData(i.children,i.key,i.level,i.expanded&&n)}getTreeGridChildData(r,n,e,i=!0){const s=`${aS}${++this.rowIslandCounter}`;let o=e,a=!i;for(const l of r)if(l.children&&l.children.length>0)this.addTreeGridData([l],i,s),o=l.level;else{const c={data:l.data,level:l.level,hidden:!i,type:Ct.DataRecord,hierarchicalOwner:s};this._setChildSummaries&&(c.summaryKey=n),this.flatRecords.push(c),o=l.level,a=!i}this._setChildSummaries&&this.setSummaries(n,o,a,null,null,s)}addFlatData(r){if(r)for(const n of r)this.flatRecords.push({data:n,type:Ct.DataRecord,level:0})}setSummaries(r,n=0,e=!1,i,s,o){const a=s??this.summaries.get(r);if(a){const c=[...a.values()].sort((d,g)=>g.length-d.length)[0];for(let d=0;d({label:M.label,value:M.summaryResult}));g[x]=E[d]}const _={data:g,type:Ct.SummaryRecord,level:n,hidden:e,summaryKey:r,hierarchicalOwner:o};i&&(_.owner=i),this.flatRecords.push(_)}}}addGroupedData(r,n,e,i,s=!0,o=[]){if(!n)return;let a="";const l=this._ownersMap.get(go).columns.filter(c=>c.headerType===Ri.ColumnHeader&&!c.skip).sort((c,d)=>c.startIndex-d.startIndex).sort((c,d)=>c.pinnedIndex-d.pinnedIndex)[0].field;for(const c of n){let d=c.value;const g=i?Wo:`${aS}${++this.rowIslandCounter}`,_=iS(c),x=e.expansion.find($=>tS($.hierarchy||[{fieldName:c.expression.fieldName,value:d}],_,r.groupingExpressions)),w=x?x.expanded:e.defaultExpanded;if(d instanceof Date){const $=6e4*d.getTimezoneOffset(),ce=new Date(d-$).toISOString();d=new xr(r.locale).transform(ce)}d=null!==d?d:"";const k={data:{[l]:`${c.column&&c.column.header?c.column.header:c.expression.fieldName}: ${d??"(Blank)"} (${c.records.length})`},level:c.level,hidden:!s,type:Ct.GroupedRecord,hierarchicalOwner:g};this.flatRecords.push(k);let N="",q="";if(this._setChildSummaries&&(N=`'${c.expression.fieldName}': '${d}'`,o=o.filter($=>$!==a),a=N,o.push(N),q=`{ ${o.join(", ")} }`,k.summaryKey=q),c.groups.length>0)this.addGroupedData(r,c.groups,e,!1,w&&s,o);else{const $=c.records;for(const ce of $){const ge={data:ce,level:c.level+1,hidden:!(w&&s),type:Ct.DataRecord,hierarchicalOwner:g};q&&(ge.summaryKey=q),this.flatRecords.push(ge)}}this._setChildSummaries&&(this.setSummaries(q,c.level+1,!(w&&s),null,null,g),o.pop())}}getColumns(r){const n=[],e=[],i=[];let s=-1,o=-1,a=0;return r.forEach(c=>{const d=jn.isNullOrWhitespaces(c.header)?c.field:c.header,g=!c.hidden||this.options.ignoreColumnsVisibility,_=this.options.ignoreColumnsOrder||this.options.ignoreColumnsVisibility?c.index:c.visibleIndex,x=Number(c.width?.slice(0,-2))||8.43,w=this.options.ignoreMultiColumnHeaders?0:c.level,E=c.columnGroup,M=E?c.allChildren.filter(N=>!(N.columnGroup||!this.options.ignoreColumnsVisibility&&N.hidden)).length:1,k={header:jn.sanitizeValue(d),dataType:c.dataType,field:c.field,skip:!g,formatter:c.formatter,skipFormatter:!1,headerType:E?Ri.MultiColumnHeader:Ri.ColumnHeader,columnSpan:M,level:w,startIndex:_,pinnedIndex:c.pinned?c.hidden?NaN:c.grid.pinnedColumns.indexOf(c):Number.MAX_VALUE,columnGroupParent:c.parent?c.parent:null,columnGroup:E?c:null};"currency"===c.dataType&&(k.currencyCode=c.pipeArgs.currencyCode?c.pipeArgs.currencyCode:eu(this.locale),k.displayFormat=c.pipeArgs.display?c.pipeArgs.display:"symbol",k.digitsInfo=c.pipeArgs.digitsInfo?c.pipeArgs.digitsInfo:"1.0-2"),"date"===c.dataType&&(k.dateFormat=Jd(this.locale,Vn.Medium)),"dateTime"===c.dataType&&(k.dateFormat=Zg(this.locale,Vn.Medium)),this.options.ignoreColumnsOrder&&k.startIndex!==k.pinnedIndex&&(k.pinnedIndex=Number.MAX_VALUE),c.level>a&&!this.options.ignoreMultiColumnHeaders&&(a=c.level),-1!==_?(n.push(k),e.push(x),o=Math.max(o,n.indexOf(k))):i.push(k),c.pinned&&g&&k.headerType===Ri.ColumnHeader&&s++}),i.forEach(c=>{n[++o]=c}),{columns:n,columnWidths:e,indexOfLastPinnedColumn:s,maxLevel:a}}mapHierarchicalGridColumns(r,n){let e,i;if(r.autoGenerate){i=n[r.key];const s=r.children.map(a=>a.key),o=i.map(a=>{const l={};return Object.keys(a).map(c=>{s.includes(c)||(l[c]=a[c])}),l});e=this.getAutoGeneratedColumns(o)}else e=this.getColumns(r.columns);if(this._ownersMap.set(r,e),r.children.length>0)for(const s of r.children)this.mapHierarchicalGridColumns(s,void 0!==i?i[0]:{})}getAutoGeneratedColumns(r){const n=[],e=[];return Object.keys(r[0]).forEach((o,a)=>{n.push({header:o,field:o,dataType:"string",skip:!1,headerType:Ri.ColumnHeader,columnSpan:1,level:0,startIndex:a,pinnedIndex:Number.MAX_VALUE}),e.push(8.43)}),{columns:n,columnWidths:e,indexOfLastPinnedColumn:-1,maxLevel:0}}addPivotGridColumns(r){if("igx-pivot-grid"!==r.nativeElement.tagName.toLowerCase())return;const n=r.pivotConfiguration.rows.filter(i=>i.enabled).map((i,s)=>({name:i.memberName,level:s}));this.preparePivotGridColumns(n),this.pivotGridFilterFieldsCount=n.length;const e=this._ownersMap.get(go);e.columns.unshift(...this.pivotGridColumns),e.columnWidths.unshift(...Array(this.pivotGridColumns.length).fill(200)),e.indexOfLastPinnedColumn=n.length-1,e.maxRowLevel=n.length,this._ownersMap.set(go,e)}preparePivotGridColumns(r,n){if(0===r.length)return;let e=0;const i=r[0],s=this.flatRecords.map(a=>a.data),o={};if(s.forEach(a=>{const l=a[i.name];o[l]||(o[l]=[]),o[l].push(a)}),n){const a=[...this.pivotGridKeyValueMap.keys()],l=[...this.pivotGridKeyValueMap.values()];for(const c of Object.keys(o))o[c]=o[c].filter(d=>a.every(g=>Object.keys(d).includes(g))&&l.every(g=>Object.values(d).includes(g))),0===o[c].length&&delete o[c]}for(const a of Object.keys(o)){const l=o[a].length,c={rowSpan:l,field:a,header:a,startIndex:e,skip:!1,pinnedIndex:0,level:i.level,dataType:"string",headerType:o[a].length>1?Ri.MultiRowHeader:Ri.RowHeader};if(n?c.columnGroupParent=n:c.columnGroup=a,this.pivotGridColumns.push(c),r.length>1){this.pivotGridKeyValueMap.set(i.name,a);const d=r.filter(g=>g!==i);this.preparePivotGridColumns(d,a),this.pivotGridKeyValueMap.delete(i.name)}e+=l}}addLevelColumns(){this.options.exportSummaries&&this.summaries.size>0&&this._ownersMap.forEach(r=>{r.columns.push({header:Gs,dataType:"number",field:Gs,skip:!1,skipFormatter:!1,headerType:Ri.ColumnHeader,columnSpan:1,level:0}),r.columnWidths.push(20)})}addLevelData(){if(this.options.exportSummaries&&this.summaries.size>0)for(const r of this.flatRecords)(r.type===Ct.DataRecord||r.type===Ct.TreeGridRecord||r.type===Ct.HierarchicalGridRecord)&&(r.data[Gs]=r.level)}resetDefaults(){this._sort=null,this.flatRecords=[],this.options={},this._ownersMap.clear(),this.rowIslandCounter=0}}class SV{constructor(r,n,e=[]){this._data=r,this.columns=e,this._headerRecord="",this._dataRecords="",this._eor="\r\n",this._escapeCharacters=["\r","\n","\r\n"],this._delimiterLength=1,this._isSpecialData=!1,this.setDelimiter(n)}prepareData(r){if(!this._data||0===this._data.length)return"";let n=[];return n=r||jn.getKeysFromData(this._data),0===n.length?"":(this._isSpecialData=jn.isSpecialData(this._data[0]),this._escapeCharacters.push(this._delimiter),this._headerRecord=this.processHeaderRecord(n,this._data.length),this._dataRecords=this.processDataRecords(this._data,n),this._headerRecord+this._dataRecords)}prepareDataAsync(r){const n=this.columns?.filter(s=>!s.skip).sort((s,o)=>s.startIndex-o.startIndex).sort((s,o)=>s.pinnedIndex-o.pinnedIndex),e=n&&n.length?n.map(s=>s.field):jn.getKeysFromData(this._data);this._isSpecialData=jn.isSpecialData(this._data[0]),this._escapeCharacters.push(this._delimiter);const i=n&&n.length?n.map(s=>s.header??s.field):e;this._headerRecord=this.processHeaderRecord(i,this._data.length),0!==e.length&&(this._data&&0!==this._data.length||0!==e.length)?this.processDataRecordsAsync(this._data,e,s=>{r(this._headerRecord+s)}):r("")}processField(r,n){let e=jn.hasValue(r)?String(r):"";return n.some(i=>e.includes(i))&&(e=`"${e}"`),e+this._delimiter}processHeaderRecord(r,n){let e="";for(const s of r)e+=this.processField(s,this._escapeCharacters);const i=e.slice(0,-this._delimiterLength);return n>0?i+this._eor:i}processRecord(r,n){const e=new Array(n.length);for(let i=0;i{i[s]=this.processRecord(r[s],n)},()=>{e(i.join(""))})}setDelimiter(r){this._delimiter=r,this._delimiterLength=r.length}}class TV{constructor(r,n){this._fileExtension=n,this.ignoreColumnsVisibility=!1,this.ignoreFiltering=!1,this.ignoreColumnsOrder=!1,this.ignoreSorting=!1,this.ignoreGrouping=!1,this.ignoreMultiColumnHeaders=!1,this.exportSummaries=!0,this.freezeHeaders=!1,this.alwaysExportHeaders=!0,this.setFileName(r)}setFileName(r){this._fileName=r+(!1===r.endsWith(this._fileExtension)?this._fileExtension:"")}get fileName(){return this._fileName}set fileName(r){this.setFileName(r)}}class ay extends TV{constructor(r,n){super(r,ay.getExtensionFromFileType(n)),this.setFileType(n),this.setDelimiter()}static getExtensionFromFileType(r){let n="";switch(r){case Hs.CSV:n=".csv";break;case Hs.TSV:n=".tsv";break;case Hs.TAB:n=".tab";break;default:throw Error("Unsupported CSV file type!")}return n}get valueDelimiter(){return this._valueDelimiter}set valueDelimiter(r){this.setDelimiter(r)}get fileType(){return this._fileType}set fileType(r){this.setFileType(r)}setFileType(r){if(null!=r&&r!==this._fileType){this._fileType=r;const n=ay.getExtensionFromFileType(r);if(!this.fileName.endsWith(n)){const e="."+this.fileName.split(".").pop(),i=this.fileName.replace(e,n);this._fileExtension=n,this.fileName=i}}}setDelimiter(r){if(void 0!==r&&""!==r&&null!==r)this._valueDelimiter=r;else switch(this.fileType){case Hs.CSV:this._valueDelimiter=",";break;case Hs.TSV:case Hs.TAB:this._valueDelimiter="\t"}}}var Hs=function(t){return t[t.CSV=0]="CSV",t[t.TSV=1]="TSV",t[t.TAB=2]="TAB",t}(Hs||{});let FEe=(()=>{var t;class r extends DV{constructor(){super(...arguments),this.exportEnded=new A}exportDataImplementation(e,i,s){e=e.map(l=>l.data);const o=this._ownersMap.get(go);new SV(e,i.valueDelimiter,o?.columns).prepareDataAsync(l=>{this._stringData=l,this.saveFile(i),this.exportEnded.emit({csvData:this._stringData}),s()})}saveFile(e){switch(e.fileType){case Hs.CSV:this.exportFile(this._stringData,e.fileName,"text/csv;charset=utf-8;");break;case Hs.TSV:case Hs.TAB:this.exportFile(this._stringData,e.fileName,"text/tab-separated-values;charset=utf-8;")}}exportFile(e,i,s){const o=new Blob([e?"\ufeff":"",e],{type:s});jn.saveBlobToFile(o,i)}}return(t=r).\u0275fac=(()=>{let n;return function(i){return(n||(n=Ae(t)))(i||t)}})(),t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();var Sn=function(t){return t[t.RootExcelFolder=0]="RootExcelFolder",t[t.RootRelsExcelFolder=1]="RootRelsExcelFolder",t[t.DocPropsExcelFolder=2]="DocPropsExcelFolder",t[t.XLExcelFolder=3]="XLExcelFolder",t[t.XLRelsExcelFolder=4]="XLRelsExcelFolder",t[t.ThemeExcelFolder=5]="ThemeExcelFolder",t[t.WorksheetsExcelFolder=6]="WorksheetsExcelFolder",t[t.WorksheetsRelsExcelFolder=7]="WorksheetsRelsExcelFolder",t[t.TablesExcelFolder=8]="TablesExcelFolder",t}(Sn||{}),Li=function(t){return t[t.RootRelsFile=0]="RootRelsFile",t[t.AppFile=1]="AppFile",t[t.CoreFile=2]="CoreFile",t[t.WorkbookRelsFile=3]="WorkbookRelsFile",t[t.ThemeFile=4]="ThemeFile",t[t.WorksheetFile=5]="WorksheetFile",t[t.StyleFile=6]="StyleFile",t[t.WorkbookFile=7]="WorkbookFile",t[t.ContentTypesFile=8]="ContentTypesFile",t[t.SharedStringsFile=9]="SharedStringsFile",t[t.WorksheetRelsFile=10]="WorksheetRelsFile",t[t.TablesFile=11]="TablesFile",t}(Li||{});let ui=(()=>{var t;class r{static getRels(){return r.XML_STRING+''}static getApp(e){return r.XML_STRING+`Microsoft Excel0falseWorksheets1${e}falsefalsefalse16.0300`}static getCore(){return r.XML_STRING+'2015-06-05T18:17:20Z2015-06-05T18:17:26Z'}static getTheme(){return r.XML_STRING+''}static getStyles(){return r.XML_STRING+''}static getWorkbook(e){return r.XML_STRING+``}static getWorksheetRels(){return r.XML_STRING+''}static getWorkbookRels(e){let i=r.XML_STRING+'';return e&&(i+=r.SHARED_STRING_RELATIONSHIP),i+="",i}static getSheetXML(e,i,s,o,a,l=0,c){const d=l>0;return`${r.XML_STRING}\n\n${d?'':""}\n${c?"":``}\n${i}\n\n${s}\n${o}\n\n${a?'':""}`}static getSharedStringXML(e,i,s){return r.XML_STRING+''+s+""}static getContentTypesXML(e,i){let s=r.XML_STRING+'\n \n \n \n \n \n \n \n ';return s+=e?'\t':"",s+=i?'':"",s+="",s}static getTablesXML(e,i,s,o){return`${r.XML_STRING}\n ${o}${s}\n
`}static getExcelColumn(e){let i="";for(;e>=0;)i=String.fromCharCode(65+e%26)+i,e=Math.floor(e/26)-1;return i}}return(t=r).XML_STRING='\r\n',t.SHARED_STRING_RELATIONSHIP='',r})();class OEe{writeElement(r){r[".rels"]=or(ui.getRels())}}class NEe{writeElement(r,n){r["app.xml"]=or(ui.getApp(n.options.worksheetName))}}class VEe{writeElement(r){r["core.xml"]=or(ui.getCore())}}class LEe{writeElement(r,n){r["workbook.xml.rels"]=or(ui.getWorkbookRels(!n.isEmpty||n.options.alwaysExportHeaders))}}class GEe{writeElement(r){r["theme1.xml"]=or(ui.getTheme())}}let EV=(()=>{class r{constructor(){this.maxOutlineLevel=0,this.sheetData="",this.dimension="",this.freezePane="",this.rowHeight="",this.mergeCellStr="",this.mergeCellsCounter=0,this.rowIndex=0,this.pivotGridRowHeadersMap=new Map,this.dimensionMap=new Map,this.hierarchicalDimensionMap=new Map,this.currentSummaryOwner="",this.currentHierarchicalOwner="",this.firstColumn=Number.MAX_VALUE,this.firstDataRow=Number.MAX_VALUE,this.currencyStyleMap=new Map([["USD",{styleXf:5,symbol:"$"}],["GBP",{styleXf:6,symbol:"\xa3"}],["CNY",{styleXf:7,symbol:"\xa5"}],["EUR",{styleXf:8,symbol:"\u20ac"}],["JPY",{styleXf:9,symbol:"\xa5"}]])}writeElement(){}writeElementAsync(e,i){var s=this;return yl(function*(){return new Promise(o=>{s.prepareDataAsync(i,(a,l)=>{e["sheet1.xml"]=or(ui.getSheetXML(s.dimension,s.freezePane,a,l,(!i.isEmpty||i.options.alwaysExportHeaders)&&i.options.exportAsTable,s.maxOutlineLevel,i.isHierarchical)),o()})})})()}prepareDataAsync(e,i){this.sheetData="";let s="";const o=e.dataDictionary;if(this.rowIndex=0,!e.isEmpty||e.options.alwaysExportHeaders&&0!==e.owner.columns.length){const a=e.owner,l=e.isHierarchical,c=e.hasMultiColumnHeader,d=e.hasMultiRowHeader,g=a.columns.some(M=>void 0!==M.exportIndex),_=e.options.rowHeight;this.isValidGrid=e.isHierarchical||e.isTreeGrid||e.isGroupedGrid,this.rowHeight=_?` ht="${_}" customHeight="1"`:"",this.sheetData+="";let x=[];for(let M=0;M<=a.maxRowLevel;M++)x=a.columns.filter(k=>k.level===M&&k.rowSpan>0&&!k.skip),this.printHeaders(e,x,M,!0),this.rowIndex++;this.rowIndex=0;for(let M=0;M<=a.maxLevel;M++){this.rowIndex++;const k=this.pivotGridRowHeadersMap.get(this.rowIndex)??"";this.sheetData+=`${k}`;const N=a.columns.filter(q=>q.headerType!==Ri.RowHeader&&q.headerType!==Ri.MultiRowHeader);x=c?N.filter(q=>(q.level0&&!q.skip).sort((q,$)=>q.startIndex-$.startIndex).sort((q,$)=>q.pinnedIndex-$.pinnedIndex):g?N.filter(q=>!q.skip):N.filter(q=>!q.skip).sort((q,$)=>q.startIndex-$.startIndex).sort((q,$)=>q.pinnedIndex-$.pinnedIndex),this.printHeaders(e,x,M,!1),this.sheetData+=""}const E=e.options.freezeHeaders?2+(e.options.ignoreMultiColumnHeaders?0:a.maxLevel):1;if(l){if(s+=``,e.options.freezeHeaders){const k=ui.getExcelColumn(0)+E;this.freezePane=``}}else{if(this.dimension="A1:"+ui.getExcelColumn(e.hasSummaries?e.columnCount+1:e.columnCount-1)+e.rowCount,s+="",c)s+=``;else for(let $=0;$0||(ge=r.MIN_WIDTH),s+=``}const k=e.indexOfLastPinnedColumn,N=k+1;let q=ui.getExcelColumn(N)+E;void 0===k||-1===k||e.options.ignorePinning||e.options.ignoreColumnsOrder?e.options.freezeHeaders&&(q=ui.getExcelColumn(0)+E,this.freezePane=``):this.freezePane=``}e.hasSummaries&&(s+=``),s+="",this.processDataRecordsAsync(e,M=>{this.sheetData+=M,this.sheetData+="",(c||d)&&this.mergeCellsCounter>0&&(this.sheetData+=`${this.mergeCellStr}`),i(s,this.sheetData)})}else this.sheetData+="",this.dimension="A1",i("",this.sheetData)}processDataRecordsAsync(e,i){const s=[],o=e.options.rowHeight;this.rowHeight=o?' ht="'+o+'" customHeight="1"':"";const a=e.isHierarchical,l=e.owner.columns.some(d=>void 0!==d.exportIndex);let c=[];JD(e.rowCount-e.multiColumnHeaderRows-1,1e3,d=>{if(!e.isEmpty){if(a){const g=e.data[d];if(g.type===Ct.HeaderRecord){const _=e.owners.get(g.owner);_.columns.some(w=>!w.skip&&w.headerType===Ri.MultiColumnHeader)&&this.hGridPrintMultiColHeaders(e,s,g,_)}c=Object.keys(e.data[d].data)}else c=l?e.rootKeys:e.owner.columns.filter(g=>g.headerType===Ri.ColumnHeader&&!g.skip).sort((g,_)=>g.startIndex-_.startIndex).sort((g,_)=>g.pinnedIndex-_.pinnedIndex).map(g=>g.field);s.push(this.processRow(e,d,c,a))}},()=>{i(s.join(""))})}hGridPrintMultiColHeaders(e,i,s,o){for(let a=0;a0?` outlineLevel="${l}"`:"";this.maxOutlineLevel=this.maxOutlineLevel
Cookies and You\r\n \r\n \r\n\r\n```\r\n\r\n## Result \r\n![image](https://user-images.githubusercontent.com/1472513/215043215-a60897a2-82d7-47ad-94d2-4c726f597eff.png)\r\n\r\n## Expected result \r\n![image](https://user-images.githubusercontent.com/1472513/215043345-5b16cdd9-9886-45b4-8eb5-f9e561b71fda.png)\r\n\r\n\r\n\r\n',title:"igx-banner-actions no longer align vertically",number:12594,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12594",id:1559371382,pullRequest:null},{createdAt:"2023-01-26T14:07:00Z",assignee:{id:4118303,avatarUrl:"https://avatars.githubusercontent.com/u/4118303?v=4",login:"simeonoff",email:null,url:"https://api.github.com/users/simeonoff"},labels:[{id:324654935,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:question:%20question",name:":question: question",color:"cc317c",default:!1,description:""},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:"## Description \r\nHi, I've got some issues with the ignite package when trying to upgrade out package from 14 to 15. Not sure if this is a bug or something related to my configuration, but I belive ive done the updates as per the documentation, and I'm not really sure whats wrong.\r\n\r\nI've run ng update igniteui-angular without any issues. \r\nIn my theme file, I've replaced our previous import:\r\n![image](https://user-images.githubusercontent.com/12936286/214850731-64cdf55c-b015-4f1a-9e71-7d3ae8c24087.png)\r\n\r\nand replaced it with use mentioned in the upgrade guide and theming guide:\r\n![image](https://user-images.githubusercontent.com/12936286/214850895-d3911288-ac95-4b77-8f2c-91fab35cedee.png)\r\n\r\nStill I'm getting the errors below. Oddly enough, the old import seems to work on the dev server, but when building the application for production, this fails as well. \r\n\r\n * igniteui-angular version: 15.0.8\r\n * browser: Chrome\r\n\r\n\r\n## Result \r\n![image](https://user-images.githubusercontent.com/12936286/214850081-e8ad9fcc-7710-4192-a9d9-ac175bcc27e0.png)\r\n\r\n\r\n\r\n\r\n",title:"Theme issues in igx 15 upgrade",number:12590,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12590",id:1558195166,pullRequest:null},{createdAt:"2023-01-26T08:42:48Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:438360283,nodeId:"MDU6TGFiZWw0MzgzNjAyODM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/checkbox",name:"checkbox",color:"fef200",default:!1,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:"## Description \r\nIf inputs are invalid they get a red border.\r\nIf checkboxes are invalid they get no special styling.\r\n\r\n * igniteui-angular version: 15.0.8\r\n\r\n## Expected result \r\nCheckboxes should have an invalid styling so you can see that they are invalid.\r\n",title:"Checkbox: missing validation styling",number:12585,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12585",id:1557789089,pullRequest:null},{createdAt:"2023-01-26T07:33:26Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:1284891436,nodeId:"MDU6TGFiZWwxMjg0ODkxNDM2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20multi-row-layout",name:"grid: multi-row-layout",color:"7fefd3",default:!1,description:""}],body:"## Description \r\nCurrently the columns are initialized async are not aware of setting the filteringMode option on ContentInit hook.\r\n\r\n * igniteui-angular version: 15.0.x\r\n * browser: N/A\r\n\r\n## Steps to reproduce \r\n\r\n1. [Go to following sample](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/grids/grid/multi-row-layout) \r\n\r\n## Result \r\nHeader of the grid is misaligned.\r\nNote: The simple filtering mode is not supported for MRL scenarios.\r\n\r\n## Expected result \r\nMRL headers should render normally and excelStyle filtering should be applied in this cases\r\n\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/1182001/214780607-5678553c-1ae9-457f-bbc0-4250617110dd.png)\r\n\r\n",title:"Grid should infer excelStyle filtering for MRL in different way",number:12584,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12584",id:1557728793,pullRequest:null},{createdAt:"2023-01-25T14:23:38Z",assignee:{id:49060557,avatarUrl:"https://avatars.githubusercontent.com/u/49060557?v=4",login:"igdmdimitrov",email:null,url:"https://api.github.com/users/igdmdimitrov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:897946909,nodeId:"MDU6TGFiZWw4OTc5NDY5MDk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/excel-exporter",name:"excel-exporter",color:"49d156",default:!1,description:""},{id:3982407566,nodeId:"MDU6TGFiZWwzOTgyNDA3NTY2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid",name:"grid",color:"95f9d5",default:!1,description:null}],body:"## Description \r\n`Time` and `DateTime` columns are exported in excel as `m/d/yy`. Excel exporter should export `Time` and `DateTime` columns in the corresponding formats `h:mm:ss` and `m/d/yy h:mm:ss`\r\n\r\n * igniteui-angular version: \r\n * browser: \r\n\r\n## Steps to reproduce \r\n\r\n1. Open [Stackblitz sample](https://stackblitz.com/edit/angular-xwwb75-u1abib?file=src%2Fapp%2Fservices%2Fexcel-export-sample-1%2Fexcel-export-sample-1.component.ts)\r\n2. Click `Export`\r\n\r\n## Result \r\n![image](https://user-images.githubusercontent.com/49060557/214588025-1e3ea89a-ed47-4525-855e-7fffde7d87d9.png)\r\n\r\n## Expected result \r\n![image](https://user-images.githubusercontent.com/49060557/214586809-81fbb875-820f-4f84-8104-ea7796cc4eee.png)\r\n\r\n\r\n",title:"Export Time and DateTime columns in the corresponding formats",number:12581,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12581",id:1556743911,pullRequest:null},{createdAt:"2023-01-25T07:54:29Z",assignee:{id:52001020,avatarUrl:"https://avatars.githubusercontent.com/u/52001020?v=4",login:"radomirchev",email:null,url:"https://api.github.com/users/radomirchev"},labels:[{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nAs discussed in https://github.com/IgniteUI/igniteui-angular/discussions/12500 it would be a nice feature be able to easily choose which field to focus when row adding or row editing starts. Our use case was that we have a column at index 0 determining if the entity is considered active or not. The column at index 1 is the name of this entity. In 99% of cases, when adding a new entity, the user would want that entity to be active, hence it makes a lot more sense to just start the edit at the name column.\r\n\r\n## Describe the solution you'd like\r\nAn input providing the field of the column in which to focus when adding or editing starts. I'm unsure if there is a use case for differentiating (having two inputs) between add and edit, but my guess is that its not.\r\n\r\n## Describe alternatives you've considered\r\nAn alternative is outlined in the linked discussion, and does work, but locking and unlocking edit of a column feels a bit \"hackish\" to me.\r\n",title:"Choose column to focus when starting add/edit of row in igx grids.",number:12579,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12579",id:1556204633,pullRequest:null},{createdAt:"2023-01-24T00:59:29Z",assignee:{id:49060557,avatarUrl:"https://avatars.githubusercontent.com/u/49060557?v=4",login:"igdmdimitrov",email:null,url:"https://api.github.com/users/igdmdimitrov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:'## Description \r\nChanging condition by clicking condition border, it doesn\'t work.\r\n\r\n * igniteui-angular version: 15.0.0\r\n * browser: Chrome\r\n\r\n## Steps to reproduce \r\n\r\nThere are the steps that can be reproduced.\r\nIt can be reproduced in this sample.\r\nhttps://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/advanced-filtering\r\n\r\n1) Open the Advanced Filtering dialog and set some "AND" condition logic, then apply.\r\n2) Open the dialog again, then change condition to "OR" by clicking blue border, then apply.\r\n3) Changed logic does not reflected, if I open the dialog, it shows as "AND" condition\r\n\r\n## Attachments \r\n![f7042176ea49a2b2823087af3a8fd6d8](https://user-images.githubusercontent.com/5829221/214191061-f07ff7e8-92ca-49ea-b118-a38c81366449.gif)\r\n',title:"IgxGrid - Condition Changing doesn't work in Advanced Filtering Dialog",number:12570,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12570",id:1554086182,pullRequest:null},{createdAt:"2023-01-23T22:21:17Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:"## Description \r\nEditing the primary key in a pinned row unpins the row\r\n\r\n## Steps to reproduce \r\nin the following sample edit the ID column in one of the pinned rows\r\nhttps://stackblitz.com/edit/angular-ujej8f?file=src/app/grid/grid-row-pinning/grid-row-pinning.component.html\r\n\r\n\r\n## Result \r\nAfter the edit is complete the row is no longer pinned\r\n\r\n## Expected result \r\nThe row remains pinned after editing the primary key\r\n\r\n\r\n",title:"Grid - Editing the primary key in a pinned row unpins the row",number:12569,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12569",id:1553925367,pullRequest:null},{createdAt:"2023-01-23T14:40:59Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531441843,nodeId:"MDU6TGFiZWw1MzE0NDE4NDM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:fire:%20severity:%20high",name:":fire: severity: high",color:"d93f0b",default:!1,description:""},{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."},{id:651042855,nodeId:"MDU6TGFiZWw2NTEwNDI4NTU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:date:%20date-picker",name:":date: date-picker",color:"afea6b",default:!1,description:""},{id:858962961,nodeId:"MDU6TGFiZWw4NTg5NjI5NjE=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:chart_with_downwards_trend:%20regression",name:":chart_with_downwards_trend: regression",color:"041791",default:!1,description:""}],body:"## Description \r\nWhen the IgxDatePicker is clicked or tab over, that is, when the focus event fires, the IgxDatePicker is not selected. For example the\r\nIgxTimePicker is selected as expected.\r\n\r\n * igniteui-angular version: 14.2.x 15.0.x\r\n\r\n## Steps to reproduce \r\n\r\nOpen [this sample](https://stackblitz.com/edit/angular-agmzk2?file=src/app/datepicker-sample/datepicker-sample.component.html).\r\n\r\n1. Click or tab navigate to the igx-date-picker.\r\n\r\n## Result \r\nIgxDatePicker is not selected on focus.\r\n\r\n## Expected result \r\nIgxDatePicker should be selected on focus.\r\n\r\n## Attachments \r\n![issue](https://user-images.githubusercontent.com/48180072/214029250-b7c27a65-2ffb-4bf5-88cc-c325432fbe78.gif)\r\n\r\n",title:"IgxDatePicker is not selected on focus",number:12566,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12566",id:1553217761,pullRequest:null},{createdAt:"2023-01-20T18:53:26Z",assignee:{id:4118303,avatarUrl:"https://avatars.githubusercontent.com/u/4118303?v=4",login:"simeonoff",email:null,url:"https://api.github.com/users/simeonoff"},labels:[{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:'## Is your feature request related to a problem? Please describe.\r\nIn the current version, the height of the card is determined by its content. This by itself is fine, but also creates a problem when multiple cards are added to a flex container (`flex-direction: row`) and bound to data. You end up with cards with different heights and no way to give them the same height. Moreover, setting `align-items:stretch` will have no effect.\r\n\r\nimage\r\n\r\nEven if we manually add a height via CSS, the card content area does not look right.\r\nimage\r\n\r\n## Describe the solution you\'d like\r\nCard should support height, and when resizing, position content as expected. That is, card-actions remain anchored to the bottom, and the rest stay put. \r\n\r\n## Describe alternatives you\'ve considered\r\nMy solution may not be accurate as I\'m not that experienced with web-layouts. So any alternate suggestions are welcome.\r\n\r\n## Additional context\r\nAdd any other context or screenshots about the feature request here.\r\n',title:"Support height for card component",number:12555,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12555",id:1551304578,pullRequest:null},{createdAt:"2023-01-19T16:14:06Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:3535663847,nodeId:"LA_kwDOAxIT487SvfLn",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/simple-combo",name:"simple-combo",color:"D5F8FB",default:!1,description:""}],body:"## Describe the solution you'd like\r\nI would like to be able to jump to the next item in the list after it has been filtered instead of going over the first active item.\r\n\r\nThis is the solution I'm looking for:\r\n\r\n\r\nhttps://user-images.githubusercontent.com/4118303/213494468-d45c3ebd-2cce-469e-a38b-d1e7d1c49118.mov\r\n\r\n",title:"[Simple Combo] - Improve item navigation using keyboard after filtering",number:12547,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12547",id:1549480931,pullRequest:null},{createdAt:"2023-01-19T16:06:19Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."},{id:3535663847,nodeId:"LA_kwDOAxIT487SvfLn",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/simple-combo",name:"simple-combo",color:"D5F8FB",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nI would like to have the simple combo's dropdown menu stay open even after the filtering input is focused using keyboard navigation, similar to how it works in the standard `igx-combo` component.\r\n\r\nTo be specific, this is the behavior I'm looking for:\r\n\r\nhttps://user-images.githubusercontent.com/4118303/213492493-ad66191e-23b2-4b61-bda6-ecafeef1572a.mov\r\n\r\n",title:"[Simple Combo] - Consistent keyboard navigation",number:12546,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12546",id:1549465665,pullRequest:null},{createdAt:"2023-01-19T15:52:35Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:531438875,nodeId:"MDU6TGFiZWw1MzE0Mzg4NzU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development",name:":hammer_and_wrench: status: in-development",color:"0052cc",default:!1,description:"Issues and PRs with active development on them"},{id:3535663847,nodeId:"LA_kwDOAxIT487SvfLn",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/simple-combo",name:"simple-combo",color:"D5F8FB",default:!1,description:""}],body:"## Describe the solution you'd like\r\nI would like to have the simple combo dropdown open when I click the input so that I can quickly scan the available options before I start typing.\r\n\r\n\r\nhttps://user-images.githubusercontent.com/4118303/213488652-f08c9820-98a6-48ef-831f-b9def3158ffc.mov\r\n\r\n",title:"[Simple Combo] - Open dropdown on input click",number:12544,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12544",id:1549439170,pullRequest:null},{createdAt:"2023-01-19T12:29:32Z",assignee:{id:59446295,avatarUrl:"https://avatars.githubusercontent.com/u/59446295?v=4",login:"SisIvanova",email:null,url:"https://api.github.com/users/SisIvanova"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:438338013,nodeId:"MDU6TGFiZWw0MzgzMzgwMTM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/radio-button",name:"radio-button",color:"0052cc",default:!1,description:null},{id:531438875,nodeId:"MDU6TGFiZWw1MzE0Mzg4NzU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development",name:":hammer_and_wrench: status: in-development",color:"0052cc",default:!1,description:"Issues and PRs with active development on them"}],body:"## Description \r\n\r\nUse the attachment as a reference for the missing error state.\r\n\r\n## Attachments \r\n\r\n\r\n![Reference](https://user-images.githubusercontent.com/91875400/214243404-c56acf55-871b-4244-b853-f1b768bd9eeb.png)\r\n\r\n",title:"Fluent Radio Button missing error state",number:12543,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12543",id:1549062181,pullRequest:null},{createdAt:"2023-01-19T09:16:06Z",assignee:{id:59446295,avatarUrl:"https://avatars.githubusercontent.com/u/59446295?v=4",login:"SisIvanova",email:null,url:"https://api.github.com/users/SisIvanova"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:438338013,nodeId:"MDU6TGFiZWw0MzgzMzgwMTM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/radio-button",name:"radio-button",color:"0052cc",default:!1,description:null},{id:531438875,nodeId:"MDU6TGFiZWw1MzE0Mzg4NzU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development",name:":hammer_and_wrench: status: in-development",color:"0052cc",default:!1,description:"Issues and PRs with active development on them"},{id:1290006335,nodeId:"MDU6TGFiZWwxMjkwMDA2MzM1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/radio-group",name:"radio-group",color:"e87971",default:!1,description:""}],body:'## Description \r\nThe space between the Radio Button and the label should be 2px. and the space between each Radio Button should be 16px for horizontal orientation and 0px for vertical orientation\r\n\r\n-The hover state background should be grays.600 with 6% opacity for the light theme and 12% opacity for the dark one.\r\n-The focus state background should be grays.600 with 12% opacity for the light theme and 24% opacity for the dark one.\r\n\r\n**Missing error state:**\r\n\r\n-The hover state background should be error.500 with 6% opacity for the light theme and 12% opacity for the dark one.\r\n-The focus state background should be error.500 with 12% opacity for the light theme and 24% opacity for the dark one. \r\n-Labels are error.500 color always\r\n\r\n## Attachments \r\n212893146-65c5b648-c9cd-41ea-89f8-1b268a946b7a\r\n\r\n\r\n',title:"Design amendments in Radio Button / Radio Button Group for Material Design",number:12541,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12541",id:1548774972,pullRequest:null},{createdAt:"2023-01-18T14:47:42Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."}],body:'## Description \r\n\r\nAdd a custom cell template.\r\n\r\nTry to use anything from "cell" context:\r\n![image](https://user-images.githubusercontent.com/12942794/213201992-25d32e7b-66e7-4008-be4e-3335e25d1f79.png)\r\n\r\n * igniteui-angular version: 15.0.6\r\n * browser: N/A\r\n\r\n## Steps to reproduce \r\n\r\n1. Add a grid with custom cell template:\r\n ```html\r\n \r\n \r\n \r\n \x3c!-- Implement row deleting inside the cell template itself --\x3e\r\n {{ cell.value | titlecase }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ```\r\n2. Try to use anything from `let-cell`\r\n\r\n## Result \r\n\r\n> Object is possibly \'undefined\'.ngtsc(2532)\r\n![image](https://user-images.githubusercontent.com/12942794/213201971-dfa24aaa-5fe1-4070-b181-a84014e095c2.png)\r\n\r\n## Expected result \r\nSince this is a cell template, my understanding is that "cell" should always be defined.\r\n',title:'igxCell template directive exposes "cell" as possibly undefined',number:12538,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12538",id:1538126308,pullRequest:null},{createdAt:"2023-01-18T09:24:54Z",assignee:{id:48180072,avatarUrl:"https://avatars.githubusercontent.com/u/48180072?v=4",login:"georgianastasov",email:null,url:"https://api.github.com/users/georgianastasov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438875,nodeId:"MDU6TGFiZWw1MzE0Mzg4NzU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development",name:":hammer_and_wrench: status: in-development",color:"0052cc",default:!1,description:"Issues and PRs with active development on them"}],body:'## Description \r\nWhenever a dialog is already opened, the close behavior cannot be changed anymore.\r\n"closeOnEscape" and "closeOnOutsideSelect" are ignoring new incoming values.\r\n\r\n * igniteui-angular version: "@infragistics/igniteui-angular": "14.1.1",\r\n * browser: Version 109.0.5414.74 (64-Bit)\r\n\r\n## Steps to reproduce \r\n\r\n1. Click the button to open the dialog\r\n2. In the dialog, click the button to disable the close behavior\r\n3. Press ESC-Key or click besides the dialog\r\n\r\n## Result \r\nThe dialog closes\r\n\r\n## Expected result \r\nThe dialog shouldn\'t close\r\n\r\n\r\n## Attachments \r\nCode sample of the template part (html)\r\n```\r\n\r\n\r\n\r\n \r\n\r\n```\r\n\r\nin the .ts part you just need to declare the var\r\n```\r\n...\r\nexport class MyComponent {\r\n disableActions: boolean = false;\r\n ...\r\n}\r\n```\r\n\r\n',title:"Dialog: Change close configuration after opening is not working",number:12537,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12537",id:1537666495,pullRequest:null},{createdAt:"2023-01-18T07:53:04Z",assignee:{id:54146583,avatarUrl:"https://avatars.githubusercontent.com/u/54146583?v=4",login:"randriova",email:null,url:"https://api.github.com/users/randriova"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:531439920,nodeId:"MDU6TGFiZWw1MzE0Mzk5MjA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20pending-localization",name:"status: pending-localization",color:"fbca44",default:!1,description:null}],body:'## Description \r\nIn a support case it was suggested by a native French speaker that the `igx_grid_filter_row_close` string is not correctly translated in French as "Fermer" and could be replaced by "\xc9teindre".\r\nThis is the current French translation of the `igx_grid_filter_row_reset` string, though, which means it also has to be reconsidered.\r\nWe currently do not have a suggestion from them on this, however it could probably be "R\xe9initialiser"\r\n\r\n * igniteui-angular version: any\r\n * browser: -\r\n\r\n## Steps to reproduce \r\n\r\n1. [Sample](https://stackblitz.com/edit/igx-grid-filter-fr?file=src/app/grid/grid-filtering-sample/grid-filtering-sample.component.ts) with French i18n\r\n\r\n## Result \r\n\r\n\r\n## Expected result \r\n\r\n\r\n\r\n## Attachments \r\n![1](https://user-images.githubusercontent.com/35433937/213114102-c28c06cd-cd2e-48d4-90f9-95dd364aa57c.png)\r\n\r\n\r\n',title:"i18n: Filter row strings in French reported as incorrect",number:12536,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12536",id:1537549029,pullRequest:null},{createdAt:"2023-01-13T09:50:04Z",assignee:{id:59446295,avatarUrl:"https://avatars.githubusercontent.com/u/59446295?v=4",login:"SisIvanova",email:null,url:"https://api.github.com/users/SisIvanova"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:1040274972,nodeId:"MDU6TGFiZWwxMDQwMjc0OTcy",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20tree-grid",name:"grid: tree-grid",color:"d4c5f9",default:!1,description:""},{id:1221520389,nodeId:"MDU6TGFiZWwxMjIxNTIwMzg5",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20excel-style-filtering",name:"grid: excel-style-filtering",color:"fef2c0",default:!1,description:""}],body:"## Description \r\nA redundant scrollbar is displayed when you expand a tree node inside the filtering dialog\r\n\r\n * igniteui-angular version: 15\r\n * browser: \r\n\r\n## Steps to reproduce \r\n\r\n1. Create a project with the attached files or run the samples browser and navigate to `samples/tree-grid/treegrid-excel-style-filtering-sample-1`\r\n2. Open the filtering dialog for column `Product Name`\r\n3. Expand the `Food` node\r\n\r\n## Result \r\nTwo scrollbars are visible\r\n![screenshot](https://user-images.githubusercontent.com/2778393/212288296-51d06bed-5982-4f8a-a5e1-fecd0a51a489.png)\r\n\r\n## Expected result \r\nNo second scrollbar should be visible\r\n\r\n\r\n## Attachments \r\n[tree-grid-excel-style-filtering-sample-1.zip](https://github.com/IgniteUI/igniteui-angular/files/10410285/tree-grid-excel-style-filtering-sample-1.zip)\r\n\r\n",title:"Redundant scrollbar is displayed in filtering dialog",number:12526,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12526",id:1532014276,pullRequest:null},{createdAt:"2023-01-12T22:03:21Z",assignee:{id:47036441,avatarUrl:"https://avatars.githubusercontent.com/u/47036441?v=4",login:"MonikaKirkova",email:null,url:"https://api.github.com/users/MonikaKirkova"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nAfter selecting a bunch of cells in the grid there is no easy way to deselect one cell while leaving the other cells selected\r\n\r\n## Describe the solution you'd like\r\nAfter selecting multiple cells using CNTL / click should be able to deselect an individual cell using CNTL / click\r\n\r\n\r\n",title:"IgxGrid: after selecting multiple cells using CNTL / click should be able to deselect an individual cell using CNTL / click",number:12522,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12522",id:1531425768,pullRequest:null},{createdAt:"2023-01-12T09:27:48Z",assignee:{id:49060557,avatarUrl:"https://avatars.githubusercontent.com/u/49060557?v=4",login:"igdmdimitrov",email:null,url:"https://api.github.com/users/igdmdimitrov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:"## Description \r\nWhen you filter a date column by selecting a date and then change the filter to a unary filter like today then the filter disappears.\r\n\r\n * igniteui-angular version: 15.0.6\r\n\r\n## Steps to reproduce \r\nhttps://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/filtering\r\n1. filter the date column with equals some date\r\n2. change the filter to today\r\n\r\n## Result \r\nThe filter disappears.\r\n\r\n## Expected result \r\nThe today filter should be set.\r\n\r\n## Attachments \r\n![2023-01-12_10h24_30](https://user-images.githubusercontent.com/46870283/212028750-cb122c54-6394-42f8-ad5e-b3688b90b52c.gif)\r\n",title:"IgxGid: date filter disappears when changing to unary filter",number:12519,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12519",id:1530383145,pullRequest:null},{createdAt:"2023-01-11T16:06:11Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nThe IgxDatePicker converts the selected date in a javascript `Date` object.\r\nWhen you serialize this for a http request the time and timezone is included and converted to UTC.\r\nFor example if you are in the timezone UTC+1 and you select the date 2023-01-01 it gets serialized to '2022-12-31T23:00:00.000Z'.\r\nThis is a problem when the backend only expects a iso date string (YYYY-MM-DD).\r\n\r\n## Describe the solution you'd like\r\nIt would be nice if there was a input like `[useIsoString]=\"true\"` so that the date picker uses an iso date string (YYYY-MM-DD) as model instead of a `Date` object.\r\n",title:"IgxDatePicker: ability to use an iso date string as model",number:12512,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12512",id:1529306486,pullRequest:null},{createdAt:"2023-01-10T15:31:45Z",assignee:{id:49060557,avatarUrl:"https://avatars.githubusercontent.com/u/49060557?v=4",login:"igdmdimitrov",email:null,url:"https://api.github.com/users/igdmdimitrov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:"## Description \r\nWhen using special character (ie &) as header text the excel export will produce an invalid file. The user will then be prompted by a warning if the excel content should be recovered.\r\n\r\n * igniteui-angular version: v15\r\n * browser: Chrome 108\r\n\r\n## Steps to reproduce \r\n1. See Stackblitz Example https://stackblitz.com/edit/angular-qvznmb\r\n2. Export grid data to excel\r\n3. Open exported file\r\n\r\n## Result \r\nExcel will prompt a warning regarding issue with the content. A deep dive will narrow it down to the special character & in the column header\r\n![image](https://user-images.githubusercontent.com/264579/211591444-974afba6-45db-402b-8b77-f8d7ce52dc00.png)\r\n\r\nWhen removing the char & from the grid column header the warning will disappear.\r\n\r\n## Expected result \r\nThe exported content should produce a valid file.\r\n\r\n",title:"Grid excel export produce invalid content when using special char",number:12510,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12510",id:1527596364,pullRequest:null},{createdAt:"2023-01-09T12:33:21Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:531438875,nodeId:"MDU6TGFiZWw1MzE0Mzg4NzU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development",name:":hammer_and_wrench: status: in-development",color:"0052cc",default:!1,description:"Issues and PRs with active development on them"},{id:970329408,nodeId:"MDU6TGFiZWw5NzAzMjk0MDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20cell-editing",name:"grid: cell-editing",color:"70e5df",default:!1,description:""},{id:1102774151,nodeId:"MDU6TGFiZWwxMTAyNzc0MTUx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-editing",name:"grid: row-editing",color:"77d86a",default:!1,description:""},{id:1105153503,nodeId:"MDU6TGFiZWwxMTA1MTUzNTAz",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/batch-editing",name:"batch-editing",color:"73eea4",default:!1,description:""},{id:3982407566,nodeId:"MDU6TGFiZWwzOTgyNDA3NTY2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid",name:"grid",color:"95f9d5",default:!1,description:null}],body:"## Description \r\nRow transactions and grid validation service are not sync when using transaction clear method to clear multiple invalid cells\r\n\r\n * igniteui-angular version: \r\n * browser: \r\n\r\n## Steps to reproduce \r\n\r\n1. Open editing dev sample\r\n2. In the second sample add additional action button at the end\r\n```\r\n \r\n```\r\n3. Create the handler\r\n\r\n```\r\n public clear(gridID) {\r\n const currentGrid: IgxGridComponent = this.getGridById(gridID);\r\n currentGrid.transactions.clear();\r\n }\r\n```\r\n4. Make multiple rows to be invalid (ProductName column is required)\r\n5. Clear all transactions\r\n6. Observe\r\n\r\n## Result \r\nThe values in the cells are cleared as the last value but the cell is still invalid.\r\n\r\n## Expected result \r\nThey should be synced correctly.\r\n\r\n\r\n## Attachments \r\nAttach a sample if available, and screenshots, if applicable. \r\n\r\n",title:"Row transactions and grid validation service are not sync when using transaction clear method to clear multiple invalid cells",number:12505,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12505",id:1525513722,pullRequest:null},{createdAt:"2023-01-08T18:42:40Z",assignee:{id:34240583,avatarUrl:"https://avatars.githubusercontent.com/u/34240583?v=4",login:"ddincheva",email:null,url:"https://api.github.com/users/ddincheva"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438875,nodeId:"MDU6TGFiZWw1MzE0Mzg4NzU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development",name:":hammer_and_wrench: status: in-development",color:"0052cc",default:!1,description:"Issues and PRs with active development on them"},{id:531441843,nodeId:"MDU6TGFiZWw1MzE0NDE4NDM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:fire:%20severity:%20high",name:":fire: severity: high",color:"d93f0b",default:!1,description:""},{id:906940495,nodeId:"MDU6TGFiZWw5MDY5NDA0OTU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-selection",name:"grid: row-selection",color:"d4c5f9",default:!1,description:""},{id:987998812,nodeId:"MDU6TGFiZWw5ODc5OTg4MTI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20selection",name:"grid: selection",color:"2f52bc",default:!1,description:""},{id:4540898149,nodeId:"LA_kwDOAxIT488AAAABDqibZQ",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x",name:"version: 15.0.x",color:"FA5965",default:!1,description:""}],body:"## Description \r\nWhen handling grid's `rowSelectionChanging` event the owner of the event arguments is always undefined.\r\n\r\n * igniteui-angular version: 15.0.0\r\n * browser: all\r\n\r\n## Steps to reproduce \r\nIn [this](https://stackblitz.com/edit/angular-5qggu6?file=package.json) demo I am logging the owner in `rowSelectionChanging` like this:\r\n``` typescript\r\n public handleRowSelection(event: IRowSelectionEventArgs) {\r\n console.log(event.owner);\r\n this.selectedRowsCount = event.newSelection.length;\r\n this.selectedRowIndex = event.newSelection[0];\r\n this.snackbarRowCount.open();\r\n this.snackbar.close();\r\n }\r\n```\r\nOpen the demo, change the selection of any row, and observe the console. It is always logs `undefinde`.\r\n\r\n## Result \r\n`owner` is `undefined`.\r\n\r\n## Expected result \r\n`owner` should point to the grid component.\r\n",title:"owner of rowSelectionChanging is always undefined",number:12502,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12502",id:1524629810,pullRequest:null},{createdAt:"2023-01-03T11:12:29Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:963379072,nodeId:"MDU6TGFiZWw5NjMzNzkwNzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/overlay",name:"overlay",color:"a9fcf2",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nIn the IgxOverlayService there are -ing and -ed events for open and close actions, but for contentAppend is currently provided only an -ed event. Please expose contentAppend -ing event, which should be emitted before the content is moved to the overlay. \r\nFor example: In this way, it will allow us to make some modifications to the element which will be transferred to the overlay, and apply some additional classes and attributes based on its current position in the DOM, for example, its parent element and so on.\r\n\r\n\r\n\r\n",title:"Introduce contentAppending event in the IgxOverlayService",number:12480,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12480",id:1517245039,pullRequest:null},{createdAt:"2023-01-03T10:57:57Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:3113485838,nodeId:"MDU6TGFiZWwzMTEzNDg1ODM4",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot",name:"grid: pivot",color:"177099",default:!1,description:""}],body:"## Description \r\nThe issue is related to this https://github.com/IgniteUI/igniteui-angular/issues/12413 but only reproducible when zoomed in or zoomed out.\r\n\r\n * igniteui-angular version: all supported\r\n * browser: \r\n\r\n## Steps to reproduce \r\n\r\n1. Use the sample from the above mentioned issue\r\n2. Zoom in or Zoom out the page to 90% or 110%\r\n3. Observe\r\n\r\n## Result \r\nObserve that when zoomed out to 90% the grid columns keep growing.\r\nObserve that when zoomed in to 110% the grid columns keep shrinking.\r\n\r\n## Expected result \r\nThe grid should not resize even when the zoomed percentage is changed.\r\n\r\n\r\n## Attachments \r\nAttach a sample if available, and screenshots, if applicable. \r\n\r\n",title:"Pivot grid columns keep resizing themselves when zoomed in or zoomed out",number:12479,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12479",id:1517228531,pullRequest:null},{createdAt:"2022-12-20T14:24:05Z",assignee:{id:35433937,avatarUrl:"https://avatars.githubusercontent.com/u/35433937?v=4",login:"ddaribo",email:null,url:"https://api.github.com/users/ddaribo"},labels:[{id:858884153,nodeId:"MDU6TGFiZWw4NTg4ODQxNTM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20not-a-bug",name:"status: not-a-bug",color:"ea85ce",default:!1,description:""}],body:"## Description \r\nFor some reason, the excel style filter doesn't seem to use the regular igx-overlay, and this causes issues when we render two grids next to each other, as the filter will render below the other grid:\r\n![image](https://user-images.githubusercontent.com/12936286/208688553-1ad828e6-3512-4c73-ae07-7eaae76a492e.png)\r\n\r\n\r\n * igniteui-angular version: 14\r\n * browser: Chrome\r\n\r\n## Steps to reproduce \r\n\r\n1. Go to https://stackblitz.com/edit/angular-gp1fk2?file=src%2Fapp%2Fgrid%2Fgrid-excel-style-filtering-sample-1%2Fgrid-excel-style-filtering-sample-1.component.html\r\n2. Open the excel style filter on the left grid\r\n## Result \r\nThe filter is partially rendered below the right grid.\r\n\r\n## Expected result \r\nThe filter should not be blocked by the right grid.\r\n\r\n\r\n",title:"Excel filter rendering below neighboring grid",number:12473,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12473",id:1504644715,pullRequest:null},{createdAt:"2022-12-15T15:38:37Z",assignee:{id:4118303,avatarUrl:"https://avatars.githubusercontent.com/u/4118303?v=4",login:"simeonoff",email:null,url:"https://api.github.com/users/simeonoff"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:877031119,nodeId:"MDU6TGFiZWw4NzcwMzExMTk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/input-group",name:"input-group",color:"f79bb1",default:!1,description:""},{id:1411516510,nodeId:"MDU6TGFiZWwxNDExNTE2NTEw",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:runner:%20priority:%20high",name:":runner: priority: high",color:"ce2f51",default:!1,description:""}],body:"## Description \r\nThe input group does not inherit the correct density class from its parent, for example, when the grid is set to compact the input stays comfortable. This is happening only if the input-group is inside another form component, for example, date-picker or select.\r\n\r\nThere is [an old issue in the sample repo](https://github.com/IgniteUI/igniteui-angular-samples/issues/3006)\r\n\r\n * igniteui-angular version: \r\n * browser: all\r\n\r\n## Steps to reproduce \r\n1. Open this [gridCellEditing](http://localhost:4200/gridCellEditing) sample in dev demos\r\n2. Select compact density\r\n3. Edit any of the date-picker inputs and compare with one that is pure input-group\r\n\r\n## Result\r\nThe input-group does not inherit the correct density\r\n\r\n## Expected result\r\nThe input-group should inherit the correct density\r\n\r\n",title:"Input group not inheriting the correct density",number:12467,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12467",id:1498654777,pullRequest:null},{createdAt:"2022-12-14T11:05:58Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:1605262456,nodeId:"MDU6TGFiZWwxNjA1MjYyNDU2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-adding",name:"grid: row-adding",color:"f9c5c0",default:!1,description:""},{id:3982407566,nodeId:"MDU6TGFiZWwzOTgyNDA3NTY2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid",name:"grid",color:"95f9d5",default:!1,description:null}],body:"## Description \r\nWhen a new row is added from the action strip of the bottom pinned row in pinning position set to bottom in igxGrid, if we cancel the addition of the row by pressing the 'Cancel' button, the grid content is cut.\r\n\r\n * igniteui-angular version: 14.2 15.0\r\n * browser: all\r\n\r\n## Steps to reproduce \r\n\r\nOpen the following [sample](https://stackblitz.com/edit/angular-n9b1f1?file=src/app/grid/grid-add-row-sample/grid-add-row-sample.component.html)\r\n1. Pin just one row or pin multiple rows. \r\n2. Go to last bottom pinned row and click Add icon from the action strip.\r\n3. When the overlay for adding a row opens, press the 'Cancel' button to cancel the addition of the row.\r\n\r\n## Result \r\nGrid content is cut off.\r\n\r\n## Expected result \r\nCorrectly rerender the grid without cutting the content.\r\n\r\n\r\n## Attachments \r\n![content cut off](https://user-images.githubusercontent.com/48180072/207577992-d2c8087d-8363-4f37-b247-0068f7ba1b5c.gif)\r\n\r\n\r\n",title:"Grid content cut off",number:12454,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12454",id:1496363326,pullRequest:null},{createdAt:"2022-12-13T11:23:41Z",assignee:{id:16020256,avatarUrl:"https://avatars.githubusercontent.com/u/16020256?v=4",login:"jackofdiamond5",email:null,url:"https://api.github.com/users/jackofdiamond5"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:"## Description \r\nIf you manually set errors on a form control that has no validators then the css class `igx-input-group--invalid` is not set and the input doesn't turn red.\r\n\r\n * igniteui-angular version: 15.0.2\r\n * browser: Chrome\r\n\r\n## Steps to reproduce \r\nhttps://stackblitz.com/edit/angular-wqcpu7\r\n\r\n1. Open example\r\n2. Click on 'set invalid' button\r\n\r\n## Result \r\nThe first input turns red because it has a validator.\r\nThe second input does not turn red because is has no validator.\r\n\r\n## Expected result \r\nThe second input should turn red because it is invalid.\r\n\r\n",title:"IgxInputGroup doesn't turn red when invalid",number:12452,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12452",id:1494033741,pullRequest:null},{createdAt:"2022-12-12T19:53:40Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:651042855,nodeId:"MDU6TGFiZWw2NTEwNDI4NTU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:date:%20date-picker",name:":date: date-picker",color:"afea6b",default:!1,description:""},{id:1221520389,nodeId:"MDU6TGFiZWwxMjIxNTIwMzg5",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20excel-style-filtering",name:"grid: excel-style-filtering",color:"fef2c0",default:!1,description:""},{id:1659256343,nodeId:"MDU6TGFiZWwxNjU5MjU2MzQz",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-range-picker",name:"date-range-picker",color:"3ec9c4",default:!1,description:""}],body:'## Description \r\n\r\nSome Ignite components use module injector instead of current injector to instantiate components, ignoring any custom providers that the developer might have set.\r\n\r\n * igniteui-angular version: 14.1.1\r\n * browser: any\r\n\r\n## Steps to reproduce \r\n\r\nProvide my custom overlay Service:\r\n`{ providers: IgxOverlayService, useClass: IgxOverlayService }`\r\n\r\nThen instantiate a grid with excel style filters\r\n```\r\n \r\n \r\n```\r\n\r\nthen try to set a custom text filter:\r\n![image](https://user-images.githubusercontent.com/12942794/207116964-a710ba56-1cdf-4f55-801f-95c88c5469fe.png)\r\n\r\n## Result \r\nThe custom text dialog doesn\'t open.\r\nSee line where Grid is using moduleRef injector over current one:\r\nhttps://github.com/IgniteUI/igniteui-angular/blob/9861f2c87bcfecbb3ede9e1ef9e49b44223d4176/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts#L3833-L3838\r\n\r\n## Expected result \r\nThe custom text dialog should open.\r\n\r\n## Attachments \r\n[Stackblitz example](https://stackblitz.com/edit/angular-hws9fs?file=src%2Fapp%2Fgrid%2Fgrid-excel-style-filtering-sample-1%2Fgrid-excel-style-filtering-sample-1.component.ts)\r\n\r\n',title:"Ignite favors module injector over current injector ",number:12450,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12450",id:1492637692,pullRequest:null},{createdAt:"2022-12-07T15:38:21Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."}],body:"## Description \r\nAfter putting the date picker in edit mode the cursor is jumping to the end of the text when I perform a select all and then try to type a value.\r\n\r\n![datepicker-select-issue](https://user-images.githubusercontent.com/18489991/206222785-69bc7f58-bfd2-4f81-a0d4-402f0a14a4d1.gif)\r\n\r\n * igniteui-angular version: 15.0.2\r\n * browser: Chrome 108.0.5359.94\r\n\r\n## Steps to reproduce \r\n\r\n1. Go to (https://www.infragistics.com/products/ignite-ui-angular/angular/components/date-picker#angular-datepicker-example)\r\n2. Click inside date picker to go into edit mode\r\n3. Press Ctrl + A keys to select all text\r\n4. Start typing a number\r\n\r\n## Result \r\nThe typed number is placed at the start of the date and the cursor immediately moves to the end making it impossible to finish typing the date. The user has to manually position the cursor with the mouse or arrow keys in order to complete the date.\r\n\r\n## Expected result \r\nThe cursor should remain next to the typed number so users can finish typing the date.\r\n\r\n\r\n",title:"Date picker cursor jumps to end",number:12438,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12438",id:1482214403,pullRequest:null},{createdAt:"2022-12-05T14:45:54Z",assignee:{id:21260963,avatarUrl:"https://avatars.githubusercontent.com/u/21260963?v=4",login:"desig9stein",email:null,url:"https://api.github.com/users/desig9stein"},labels:[{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"The UI needs to be updated to reflect the latest design changes\r\n\r\n[Prototype](https://www.figma.com/proto/kJxlQPb78W2C4S2g0gDjbs/Combo-Design-Handoff?node-id=1%3A3251&scaling=min-zoom&page-id=0%3A1&starting-point-node-id=1%3A3209&show-proto-sidebar=1)\r\n[Design handoff](https://www.figma.com/file/kJxlQPb78W2C4S2g0gDjbs/Combo-Design-Handoff?node-id=97%3A2157&t=zpAKFmnHJYXT9Fh7-0)\r\n",title:"Refactor(Combo) Update the UI according to the new design.",number:12421,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12421",id:1476731382,pullRequest:null},{createdAt:"2022-12-05T12:12:01Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."},{id:749009988,nodeId:"MDU6TGFiZWw3NDkwMDk5ODg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/refactoring",name:"refactoring",color:"bcd8f4",default:!1,description:null},{id:3113485838,nodeId:"MDU6TGFiZWwzMTEzNDg1ODM4",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot",name:"grid: pivot",color:"177099",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nCurrently the `IgxPivotDateDimension` has constructor parameters that are also exposed as public props:\r\nhttps://github.com/IgniteUI/igniteui-angular/blob/9861f2c87bcfecbb3ede9e1ef9e49b44223d4176/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid-dimensions.ts#L95\r\n\r\nThis might be a leftover of some sort, but it does make a suggestion such options are possible:\r\n```ts\r\nconst base = dateDimension.inBaseDimension;\r\ndateDimension.inBaseDimension = { ... };\r\ndateDimension.inOptions= { ... };\r\n```\r\nWhich might actually be of use to us, except those do not work as far as I can tell due to the way the dimension initializes. There's actually a adaptation made for this in the Elements branch https://github.com/IgniteUI/igniteui-angular/pull/12125/files#diff-f9012319362951afa13f4dc681a642a6957f2f08cf3a89250f2461315ffb9f45 that moved the initialize logic into a separate method so it can be called when setting those props.\r\n\r\n## Describe the solution you'd like\r\nAt the very least, drop the `in-` prefix, consider the approach linked above - if it makes sense to be adopted. Oh, and keep the old names as deprecated proxies to the new ones so there would be no breaking.\r\n\r\n",title:"Pivot Date Dimension constructor args",number:12417,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12417",id:1476423588,pullRequest:null},{createdAt:"2022-11-30T08:17:39Z",assignee:{id:59446295,avatarUrl:"https://avatars.githubusercontent.com/u/59446295?v=4",login:"SisIvanova",email:null,url:"https://api.github.com/users/SisIvanova"},labels:[{id:531438875,nodeId:"MDU6TGFiZWw1MzE0Mzg4NzU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development",name:":hammer_and_wrench: status: in-development",color:"0052cc",default:!1,description:"Issues and PRs with active development on them"},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Description \r\nIf inputs are invalid they get a red border.\r\nIf RadioButtons are invalid they get no special styling.\r\n\r\n * igniteui-angular version: 15.0.0\r\n\r\n## Expected result \r\nRadioButtons should have an invalid styling so you can see that they are invalid.\r\n",title:"RadioButtons: missing validation styling",number:12402,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12402",id:1469227217,pullRequest:null},{createdAt:"2022-11-25T12:10:24Z",assignee:{id:14248932,avatarUrl:"https://avatars.githubusercontent.com/u/14248932?v=4",login:"hanastasov",email:null,url:"https://api.github.com/users/hanastasov"},labels:[{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:1102774151,nodeId:"MDU6TGFiZWwxMTAyNzc0MTUx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-editing",name:"grid: row-editing",color:"77d86a",default:!1,description:""},{id:1411516510,nodeId:"MDU6TGFiZWwxNDExNTE2NTEw",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:runner:%20priority:%20high",name:":runner: priority: high",color:"ce2f51",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"}],body:"## Is your feature request related to a problem? Please describe.\r\nRight now, `rowDeleted` emits `IRowDataEventArgs`. This argument has no information about the id of the deleted row.\r\n\r\n## Describe the solution you'd like\r\nExtend the `rowDeleted` event arguments to include at least the deleted row id.\r\n\r\n## Describe alternatives you've considered\r\nI can search through the grid's data and find the row id, but it is common scenario to send to the backend the id of the item you need to delete. This is why it should present in the event arguments.\r\n",title:"Extend rowDeleted event arguments",number:12380,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12380",id:1464461374,pullRequest:null},{createdAt:"2022-11-24T13:18:33Z",assignee:{id:4118303,avatarUrl:"https://avatars.githubusercontent.com/u/4118303?v=4",login:"simeonoff",email:null,url:"https://api.github.com/users/simeonoff"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:2236014987,nodeId:"MDU6TGFiZWwyMjM2MDE0OTg3",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:sparkles:%20themes",name:":sparkles: themes",color:"ceef86",default:!1,description:""},{id:4540898149,nodeId:"LA_kwDOAxIT488AAAABDqibZQ",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x",name:"version: 15.0.x",color:"FA5965",default:!1,description:""},{id:4861501935,nodeId:"LA_kwDOAxIT488AAAABIcSh7w",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.1.x",name:"version: 15.1.x",color:"DC40EA",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nIt is the same as #12200 but there are still usages of px in components.\r\n\r\nFor example `@HostBinding('style.height.px')` , `[style.min-height.px]=\"cellHeight\"`",title:"Use `rem` instead of `px`",number:12377,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12377",id:1463337840,pullRequest:null},{createdAt:"2022-11-23T13:19:26Z",assignee:{id:14248932,avatarUrl:"https://avatars.githubusercontent.com/u/14248932?v=4",login:"hanastasov",email:null,url:"https://api.github.com/users/hanastasov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:531441949,nodeId:"MDU6TGFiZWw1MzE0NDE5NDk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:boom:%20severity:%20critical",name:":boom: severity: critical",color:"b60205",default:!1,description:""},{id:625766429,nodeId:"MDU6TGFiZWw2MjU3NjY0Mjk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general",name:"grid: general",color:"5319e7",default:!1,description:""},{id:906940495,nodeId:"MDU6TGFiZWw5MDY5NDA0OTU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-selection",name:"grid: row-selection",color:"d4c5f9",default:!1,description:""},{id:1040274972,nodeId:"MDU6TGFiZWwxMDQwMjc0OTcy",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20tree-grid",name:"grid: tree-grid",color:"d4c5f9",default:!1,description:""},{id:1168801769,nodeId:"MDU6TGFiZWwxMTY4ODAxNzY5",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20hierarchical-grid",name:"grid: hierarchical-grid",color:"fc92a5",default:!1,description:""},{id:3113485838,nodeId:"MDU6TGFiZWwzMTEzNDg1ODM4",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot",name:"grid: pivot",color:"177099",default:!1,description:""},{id:4479155364,nodeId:"LA_kwDOAxIT488AAAABCvp8pA",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2014.2.x",name:"version: 14.2.x",color:"D32276",default:!1,description:""},{id:4540898149,nodeId:"LA_kwDOAxIT488AAAABDqibZQ",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x",name:"version: 15.0.x",color:"FA5965",default:!1,description:""},{id:4697147300,nodeId:"LA_kwDOAxIT488AAAABF_jHpA",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:diamond_shape_with_a_dot_inside:%20grid:%20elements",name:":diamond_shape_with_a_dot_inside: grid: elements",color:"C5297B",default:!1,description:""}],body:"## Description \r\nSelection API returns different types of data depending on whether `primaryKey` is set to `igx-grid`, `igx-tree-grid`, `igx-hierarchical-grid`, etc. In the case of `primaryKey` set, I get an array of primitive values. In the case of `primaryKey` not being set, I get an array of data objects behind the grid.\r\n\r\n * igniteui-angular version: 15.0.0\r\n * browser: all\r\n\r\n## Steps to reproduce \r\n\r\n1. Create an app with any grid\r\n2. Turn row selection on\r\n3. Log `args.newSelection` on selection changing\r\n4. Set a `primaryKey`\r\n5. Log `args.newSelection` on selection changing\r\n\r\n## Result \r\nInconsistent results between `primaryKey` and no `primaryKey`.\r\n\r\n## Expected result \r\nConsistent results. Data members should be provided in both cases.\r\n\r\n\r\n",title:"Grid row selection is inconsistent with and without primaryKey",number:12371,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12371",id:1461753481,pullRequest:null},{createdAt:"2022-11-22T15:14:47Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3113485838,nodeId:"MDU6TGFiZWwzMTEzNDg1ODM4",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot",name:"grid: pivot",color:"177099",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nType checking of the fields when autogenerated dimensions and values and a proper indication for the users in pivot data selector\r\n\r\n## Describe the solution you'd like\r\nIndicate if the values in a dimensions/value are strings, numbers, dates, etc. So the users can better understand what can be used as a value or as a dimension(row/column/filter)\r\n\r\n## Describe alternatives you've considered\r\nA clear and concise description of any alternative solutions or features you've considered.\r\n\r\n## Additional context\r\nAdd any other context or screenshots about the feature request here.\r\n\r\nrelated to #12366\r\n",title:"type checking of the fields when autogenerated dimensions and values and a proper indication for the users in pivot data selector",number:12367,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12367",id:1460065181,pullRequest:null},{createdAt:"2022-11-22T15:10:51Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:3113485838,nodeId:"MDU6TGFiZWwzMTEzNDg1ODM4",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot",name:"grid: pivot",color:"177099",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nPivot configuration can be difficult to be defined. Autogenerating simple non-hierarchical dimensions and values from fields of the data when no pivot configuration is defined would be a great benefit for the users. \r\n\r\n## Describe the solution you'd like\r\nAdditional field or a place in the data selector where those fields can be populated along side with an empty pivot grid and allow the users to pivot with the data using those autogenerated dimensions/values.\r\n\r\n## Describe alternatives you've considered\r\nA clear and concise description of any alternative solutions or features you've considered.\r\n\r\n## Additional context\r\nAdd any other context or screenshots about the feature request here.\r\n",title:"Autogenerate dimensions and values from the data when no pivot configuration is defined",number:12366,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12366",id:1460059081,pullRequest:null},{createdAt:"2022-11-21T08:46:49Z",assignee:{id:21260963,avatarUrl:"https://avatars.githubusercontent.com/u/21260963?v=4",login:"desig9stein",email:null,url:"https://api.github.com/users/desig9stein"},labels:[{id:531438875,nodeId:"MDU6TGFiZWw1MzE0Mzg4NzU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development",name:":hammer_and_wrench: status: in-development",color:"0052cc",default:!1,description:"Issues and PRs with active development on them"},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:2236014987,nodeId:"MDU6TGFiZWwyMjM2MDE0OTg3",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:sparkles:%20themes",name:":sparkles: themes",color:"ceef86",default:!1,description:""}],body:"Use the theming package when sizing components in place of the current approach.",title:"[Themes] - Use the sizable mixins and functions to size components",number:12347,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12347",id:1457546036,pullRequest:null},{createdAt:"2022-11-18T16:30:12Z",assignee:{id:2188411,avatarUrl:"https://avatars.githubusercontent.com/u/2188411?v=4",login:"ChronosSF",email:null,url:"https://api.github.com/users/ChronosSF"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:625766429,nodeId:"MDU6TGFiZWw2MjU3NjY0Mjk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general",name:"grid: general",color:"5319e7",default:!1,description:""},{id:749009988,nodeId:"MDU6TGFiZWw3NDkwMDk5ODg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/refactoring",name:"refactoring",color:"bcd8f4",default:!1,description:null},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3982407566,nodeId:"MDU6TGFiZWwzOTgyNDA3NTY2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid",name:"grid",color:"95f9d5",default:!1,description:null}],body:"Logging this as a starting point, might need to break down into separate tasks as we iron out details.\r\nAlso see https://github.com/IgniteUI/igniteui-angular/pull/12275#discussion_r1023700303\r\n\r\nAFAIK, the initial version of `GridType` was probably intended as an internal interface to allow dependent components/pipes/etc to reference grids without resulting in circular dependency issues. As such it probably contained some internal/internal props even from the get go.\r\nAt some point the interface became part of public API shared across grids, like the `RowType` /`CellType` grid property, some base event arguments and so on. As such it also includes optional props for specific grid types. But then the interface is still not exposed proper. And the use for circular resolution is ongoing too.\r\n\r\nSo a quick brief of things I think are initially needed:\r\n\r\n- [ ] Cleanup the internal properties on the interface. This includes evaluating their use first - perhaps some are used in strategies that can be overridden and could make sense as official public props too. Remaining internal props we could move to an internal grid type, would need to consider if implementing it explicitly by the components pollutes the API docs though.\r\n- [ ] Consider if want to keep the separate grid-specific types. We can either drop them and maintain the current direction with `GridType` having optional props for all grids (Pivot _excluded_) or clean up the base type even further and expose the per-grid types. The only downside to that is to do with all the shared API from base (event/template args, common cell/row types, etc) will require casting.\r\nNo idea if the properties on the interface currently cover all critical paths even, so not sure how much of a loss that'd be. There's also _some_ chance we could throw some generics in the mix and have some of those self-describe better, but likely not all the bits external to the grid components. So some convenience cost.\r\n- [ ] properly export the `GridType` itself as public API. Might want to do some doc comments too\r\n- [ ] Adjust component interfaces accordingly",title:"Grid public interface(s) review and cleanup",number:12342,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12342",id:1455428747,pullRequest:null},{createdAt:"2022-11-17T14:23:26Z",assignee:{id:11231206,avatarUrl:"https://avatars.githubusercontent.com/u/11231206?v=4",login:"mtsvyatkova",email:null,url:"https://api.github.com/users/mtsvyatkova"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."},{id:967701619,nodeId:"MDU6TGFiZWw5Njc3MDE2MTk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20global-filtering",name:"grid: global-filtering",color:"30db30",default:!1,description:""},{id:3982407566,nodeId:"MDU6TGFiZWwzOTgyNDA3NTY2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid",name:"grid",color:"95f9d5",default:!1,description:null}],body:"## Description \r\nGlobal Filtering doesn't respect column's pipeArgs/formatter and filters by the underlying data source.\r\n\r\n * igniteui-angular version: 13.2.x, 14.2.x\r\n * browser: any\r\n\r\n## Steps to reproduce \r\n\r\n1. Open the following [sample](https://stackblitz.com/edit/angular-xf26na-jssnnx?file=src%2Fapp%2Fdata%2Fcustom.data.ts,src%2Fapp%2Fsample%2Figx-sample%2Figx-sample.component.html,src%2Fapp%2Fsample%2Figx-sample%2Figx-sample.component.ts)\r\n2. Within the Search field type Nov 9\r\n\r\n## Result \r\nAll records are filtered out\r\n\r\n## Expected result \r\nThe record with ProductID 1 should remain\r\n\r\n\r\n## Attachments \r\n![global_filtering](https://user-images.githubusercontent.com/44684385/202471101-8f050dab-9e91-4a5d-ba70-8f87c3810639.gif)\r\n\r\n\r\n",title:"Global Filtering doesn't respect column's pipeArgs/formatter",number:12329,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12329",id:1453439337,pullRequest:null},{createdAt:"2022-11-07T12:40:28Z",assignee:{id:49126110,avatarUrl:"https://avatars.githubusercontent.com/u/49126110?v=4",login:"RivaIvanova",email:null,url:"https://api.github.com/users/RivaIvanova"},labels:[{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"Hi,\r\nIf change the value of a cell in edit mode, the dropdown menu tells me i have 1 change like expected. If i then change the value back to the original value before i entered edit mode(still in the same edit mode, same row), it still tells me i have 1 change. \r\n\r\nIf possible it would be nice to have the cell remember the value in the cell from before entering edit mode so that it shows the changes from how it used to be before editing. \r\n\r\nRegards",title:"Change detection cell value in cellEditor",number:12270,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12270",id:1438301158,pullRequest:null},{createdAt:"2022-11-03T06:18:06Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:1659256343,nodeId:"MDU6TGFiZWwxNjU5MjU2MzQz",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-range-picker",name:"date-range-picker",color:"3ec9c4",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nI am using `igx-date-picker` and `igx-date-range-picker`. I use `igxCalendarSubheader` directive for `igx-date-picker` to customize subheader like photo below:\r\n\r\n![image](https://user-images.githubusercontent.com/29648335/199660287-8f12025d-e713-4a3c-a9d0-2c6d2b97e167.png)\r\n\r\nBut `igx-date-range-picker` don't support. I can not use `igxCalendarSubheader` directive to customize the subheader of this one.\r\n\r\n![image](https://user-images.githubusercontent.com/29648335/199660233-5cd0dce4-1749-45d5-a1f8-4f4fd3ddb8bb.png)\r\n\r\n\r\n## Describe the solution you'd like\r\nI want to use `igxCalendarSubheader` directive for `igx-date-range-picker` as well. Or can you suggest me other way to customize subheader of this one?\r\n",title:"Customizing subheader for igx-date-range-picker",number:12265,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12265",id:1434167784,pullRequest:null},{createdAt:"2022-10-31T12:16:23Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:1168801769,nodeId:"MDU6TGFiZWwxMTY4ODAxNzY5",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20hierarchical-grid",name:"grid: hierarchical-grid",color:"fc92a5",default:!1,description:""},{id:2069855364,nodeId:"MDU6TGFiZWwyMDY5ODU1MzY0",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/priority:%20low",name:"priority: low",color:"d7e25a",default:!1,description:""}],body:"## Description \r\nIf the top level H Grid is loaded with auto-generated columns and row layouts are added with delay, their possible columns trigger the columns list update handling, and since the root list is empty - the empty list gets assigned to the internal grid collection, essentially deleting the generated columns.\r\n\r\nThis is related to #12251 and to do with the same handling block. Still, quite a lot of stars to align for this one, thus the low prio.\r\n\r\n * igniteui-angular version: 15.0.x\r\n * browser: N/A\r\n\r\n## Steps to reproduce \r\n\r\n1. Use the sample attached to #12251\r\n3. Set `autoGenerate` to true on the HGrid so the grid renders all columns initially\r\n4. Open the sample\r\n5. Hit the Toggle child layouts button\r\n\r\n## Result \r\nAfter child layouts are enabled the grid ends up empty\r\n\r\n## Expected result \r\nThe grid columns and layouts should render correctly\r\n\r\n",title:"Hierarchical Grid dynamic row islands can remove auto-generated columns",number:12252,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12252",id:1429749890,pullRequest:null},{createdAt:"2022-10-28T13:27:50Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:1168801769,nodeId:"MDU6TGFiZWwxMTY4ODAxNzY5",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20hierarchical-grid",name:"grid: hierarchical-grid",color:"fc92a5",default:!1,description:""}],body:"## Description \r\nThere's a resizeNotifyHandler in the hierarchical grid that does not seem to be used. \r\nhttps://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts#L1052\r\nCheck if it is needed and if not remove it.",title:"Check the unused resizeNotifyHandler in the hierarchical grid.",number:12246,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12246",id:1427265793,pullRequest:null},{createdAt:"2022-10-24T07:21:49Z",assignee:{id:21260963,avatarUrl:"https://avatars.githubusercontent.com/u/21260963?v=4",login:"desig9stein",email:null,url:"https://api.github.com/users/desig9stein"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."},{id:877031119,nodeId:"MDU6TGFiZWw4NzcwMzExMTk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/input-group",name:"input-group",color:"f79bb1",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nThe outlined material button doesn't support changing of the label value at runtime as the styles/markup are not well suited for such changes.\r\n\r\n## Describe the solution you'd like\r\nRefactor the markup and styles of the component to more closely match the Ignite UI for Web Components implementation.\r\n",title:"Improve Material Outlined Input markup to allow for runtime label changes",number:12221,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12221",id:1420343776,pullRequest:null},{createdAt:"2022-10-20T06:05:02Z",assignee:{id:4118303,avatarUrl:"https://avatars.githubusercontent.com/u/4118303?v=4",login:"simeonoff",email:null,url:"https://api.github.com/users/simeonoff"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531440033,nodeId:"MDU6TGFiZWw1MzE0NDAwMzM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20third-party-issue",name:"status: third-party-issue",color:"f9d0c4",default:!1,description:null}],body:"## Description \r\nSlides do not transition properly by pan gesture.\r\n\r\n * igniteui-angular version: 14.2.2\r\n * browser: Safari, iOS 15.7\r\n\r\n## Steps to reproduce \r\n\r\n1. Run the attached sample on iPhone.\r\n2. Scroll the slides left and right continuously by pan gesture.\r\n\r\n\r\n## Result \r\nScrolling sometime stops in the middle of the slides transition.\r\n\r\n## Expected result \r\nScrolling do not stop in the middle of the slides transition.\r\n\r\n\r\n## Attachments \r\n[carousel.zip](https://github.com/IgniteUI/igniteui-angular/files/9826741/carousel.zip)\r\n\r\n\r\n",title:"IgxCarousel - Slides do not transition properly by pan gesture.",number:12208,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12208",id:1416017152,pullRequest:null},{createdAt:"2022-10-13T14:54:41Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."},{id:1102774151,nodeId:"MDU6TGFiZWwxMTAyNzc0MTUx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-editing",name:"grid: row-editing",color:"77d86a",default:!1,description:""}],body:"## Description \r\nWhen the `rowEdit` event is canceled, the row's new data is cleared, however the cells' edit values remain. This is not related to the validation feature and is visible in the [\"Event cancelation\"](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/editing#event-cancelation) demo in the docs:\r\n\r\n![rowEdit-cancel-clel-editValues-remain](https://user-images.githubusercontent.com/35433937/195616884-b4bb8b8e-5745-4e67-945b-f28cc4502d53.gif)\r\n\r\nIn a grid validation scenario, it is expected that canceling the `rowEdit` event prevents the user from adding/editing an invalid row.\r\nHowever, due to the above behavior, the grid accepts an invalid row.\r\n\r\nTo an extent related to #12127.\r\n\r\n * igniteui-angular version: latest (& any)\r\n * browser: any\r\n\r\n## Steps to reproduce \r\n\r\n1. Open [this sample](https://stackblitz.com/edit/igx-grid-validation-cancel-rowedit?file=src/app/sample/igx-sample/igx-sample.component.html)\r\n2. Observe that the `ProductName` and `CategoryName` fields are required\r\n3. Click the \"Add\" button on the action strip to add a new row\r\n4. Type something only in the `ProductName` field\r\n5. Click `Done` in attempt to finalize the row edit while the `CategoryName` field is left empty\r\n6. You will see the error message and the `ProductName` cell's value reset. (At this point, if you double click on `ProductName` you will see its edit value remains as before clicking `Done`)\r\n8. Fill a value in `CategoryName`\r\n9. Click `Done`\r\n\r\n## Result \r\nThe row is added, however, with an invalid state, event though the `rowEdit` event is canceled with the intention not to add/edit an invalid row:\r\n```\r\npublic rowEdit(args: IGridEditEventArgs) {\r\n if (!args.valid) {\r\n args.cancel = true;\r\n }\r\n }\r\n```\r\n\r\n## Expected result \r\nReset the cell edit values to the cells' previous values when row editing is canceled?\r\nProperly recalculate the row's validity state.\r\n\r\n## Attachments ",title:"rowEdit cancel not working as expected with row validation",number:12189,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12189",id:1407950910,pullRequest:null},{createdAt:"2022-10-11T22:26:50Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\n\r\nWhen using igxForOf my items are inferred as type any.\r\n\r\ne.g. `
`\r\n\r\n![image](https://user-images.githubusercontent.com/12942794/195209553-b730da14-fece-4a4b-99e6-713c7b5f1a11.png)\r\n\r\n## Describe the solution you'd like\r\nI'd like the directive to take advantage of generics to get proper types in my items.\r\n\r\n## Describe alternatives you've considered\r\nNone",title:"[IgxForOfDirective] use generic types",number:12182,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12182",id:1405300143,pullRequest:null},{createdAt:"2022-10-06T20:12:59Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:"## Description \r\n\r\nWe are encountering an exception from within the IgxGridForOfDirective._calcMaxChunkSize after loading a datagrid.\r\n\r\n * igniteui-angular version: 13.2.5\r\n * browser: Google Chrome 105.0.5195.127 (Official Build) (64-bit)\r\n\r\n## Steps to reproduce \r\n\r\nWe created a component with an IGX datagrid and a resize observer that is set in the ngAfterViewInit. The columns and data properties are initially set and then we make an asynchronous call to check if there is additional data, then we update the columns and data accordingly.\r\n\r\n## Result \r\nIn IgxGridForOfDirective._calcMaxChunkSize the prevIndex variable on line 10333 (see screenshot) comes up as -1. \r\nThis makes `const prevIndex = this.igxForOf[prevIndex];` come back as undefined. \r\nThe prevItem[dimension] will throw an exception:\r\n\r\n```\r\ncore.mjs:6494 ERROR TypeError: Cannot read properties of undefined (reading 'calcPixelWidth')\r\n at IgxGridForOfDirective._calcMaxChunkSize (igniteui-angular.mjs:10337:46)\r\n at IgxGridForOfDirective._calcMaxChunkSize (igniteui-angular.mjs:10902:30)\r\n at IgxGridForOfDirective._calculateChunkSize (igniteui-angular.mjs:10247:30)\r\n at IgxGridForOfDirective.applyChunkSizeChange (igniteui-angular.mjs:10467:93)\r\n at IgxGridForOfDirective._applyChanges (igniteui-angular.mjs:10892:14)\r\n at IgxGridForOfDirective.ngDoCheck (igniteui-angular.mjs:10701:22)\r\n at callHook (core.mjs:2561:1)\r\n at callHooks (core.mjs:2520:1)\r\n at executeCheckHooks (core.mjs:2452:1)\r\n at selectIndexInternal (core.mjs:8410:1)\r\n```\r\n\r\n## Expected result \r\nWe expect the code to handle `prevIndex = -1` and skip the code block below. \r\n\r\nE.g. see the `if (prevIndex > 0) {` below:\r\n```typescript\r\n while (prevIndex >= 0 && sum <= availableSize) {\r\n curItem = dimension === 'height' ? arr[0].value : arr[0];\r\n prevIndex = this.igxForOf.indexOf(curItem) - 1;\r\n \r\n if (prevIndex > 0) { // <== Adding something like this if statement could avoid the exception from occurring\r\n const prevItem = this.igxForOf[prevIndex];\r\n const prevSize = dimension === 'height' ?\r\n this.heightCache[prevIndex] :\r\n parseInt(prevItem[dimension], 10);\r\n sum = arr.reduce(reducer, prevSize);\r\n arr.unshift(prevItem);\r\n length = arr.length;\r\n }\r\n }\r\n``` \r\nRefer to https://github.com/IgniteUI/igniteui-angular/blob/e05b38d13ab2bc530dbe81c9b688b9c5b1d123e7/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.ts#L1231-L1241\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/78883698/194409348-7f0d7cc9-e73d-4b01-8249-3d2840c035dc.png)\r\n\r\n\r\n",title:"Undefined exception from IgxGridForOfDirective._calcMaxChunkSize",number:12164,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12164",id:1400244699,pullRequest:null},{createdAt:"2022-09-26T13:39:01Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:749010965,nodeId:"MDU6TGFiZWw3NDkwMTA5NjU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/virtualization",name:"virtualization",color:"e85a19",default:!1,description:null},{id:926278753,nodeId:"MDU6TGFiZWw5MjYyNzg3NTM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/combo",name:"combo",color:"152872",default:!1,description:""},{id:3518092453,nodeId:"LA_kwDOAxIT487RsdSl",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2012.3.x",name:"version: 12.3.x",color:"BF8F0D",default:!1,description:""},{id:3535663847,nodeId:"LA_kwDOAxIT487SvfLn",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/simple-combo",name:"simple-combo",color:"D5F8FB",default:!1,description:""},{id:3893988156,nodeId:"LA_kwDOAxIT487oGYs8",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2013.2.x",name:"version: 13.2.x",color:"744395",default:!1,description:""},{id:4231882952,nodeId:"LA_kwDOAxIT4878PWjI",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2014.1.x",name:"version: 14.1.x",color:"DB866C",default:!1,description:""}],body:"## Description \r\nWhen having an IgxCombo or IgxSimpleCombo with data set to a primitive data array, e.g. arr = [ 1, 2, undefined, 3, 4 ], only the first two items are displayed in the dropdown. If the data is as follows: arr = [ undefined, 1, 2, 3, 4 ], nothing will be displayed in the dropdown. \r\n\r\n * igniteui-angular version: 14.1.x, 13.2.x, 12.3.x\r\n * browser: all\r\n\r\n## Steps to reproduce \r\n\r\n1. Open this [demo](https://stackblitz.com/edit/angular-l1sty4-bqrth9?file=src%2Fapp%2Fsample%2Figx-sample%2Figx-sample.component.ts).\r\n2. Open the combo and simple-combo dropdowns, only two items are displayed, but the data is arr = [ 1, 2, undefined, 3, 4 ].\r\n3. Uncomment `this.comboData = [undefined, 1, 2, 3, 4];` and open the combos again - nothing is displayed.\r\n\r\nThis is due to the `this.igxForOf[i] !== undefined` check in the for loop of IgxForOfDirective (line 413).\r\n\r\n![forOf](https://user-images.githubusercontent.com/49126110/192288690-8369c367-e561-4e88-be43-d431a5d02e0a.JPG)\r\n\r\n\r\n## Result \r\nThe items are not shown in the dropdowns.\r\n\r\n## Expected result \r\nAll items except 'undefined' should be shown in the dropdowns. \r\n\r\n",title:"[IgxForOfDirective] having undefined in primitive data array removes other items in combo/simple-combo dropdown",number:12133,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12133",id:1386103737,pullRequest:null},{createdAt:"2022-09-26T11:53:15Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:438337761,nodeId:"MDU6TGFiZWw0MzgzMzc3NjE=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/input",name:"input",color:"a950c4",default:!1,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:877031119,nodeId:"MDU6TGFiZWw4NzcwMzExMTk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/input-group",name:"input-group",color:"f79bb1",default:!1,description:""},{id:1775129274,nodeId:"MDU6TGFiZWwxNzc1MTI5Mjc0",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-time-editor",name:"date-time-editor",color:"47a31a",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nIf we have a two-way binding used in an `IgxInputGroup` element and if the `igxInput` directive is placed before the `igxDateTimeEditor` directive, an error will pop-up stating that the event and property halves of the binding are bound to different targets. The reason is that the `igxInput` directive has a `value` property which is a `string` and because Angular resolves directives in the order of placement on the element, the `value` of the `igxInput` is taken into account. It seems to me like `Angular` only takes into account the first occurrence of a property and if a property with the same name is later encountered in the template, it is ignored. If you put the `igxDateTimeEditor` before the `igxInput` then the error does not occur for the same reason - Angular takes the `value` property of the date-time directive and later uses it to construct the two way binding. Now because in the second scenario the target for the property and the event is the same - the date-time directive, the error does not occur.\r\n\r\n## Describe the solution you'd like\r\nWe should be able to fix this by making the `IgxDateTimeEditorDirective` usable in the context of an `IgxInputGroup`, without the need of an `igxInput` directive.\r\n\r\n## Describe alternatives you've considered\r\nn/a\r\n\r\n## Additional context\r\n![image](https://user-images.githubusercontent.com/16020256/192269605-25890074-28d1-497a-8fdb-3bd2e844c63f.png)\r\n\r\n",title:"Have igxDateTimeEditor be usable inside of an IgxInputGroup without the need of an igxInput directive",number:12132,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12132",id:1385944342,pullRequest:null},{createdAt:"2022-09-23T20:09:02Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:3113485838,nodeId:"MDU6TGFiZWwzMTEzNDg1ODM4",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot",name:"grid: pivot",color:"177099",default:!1,description:""},{id:3982407566,nodeId:"MDU6TGFiZWwzOTgyNDA3NTY2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid",name:"grid",color:"95f9d5",default:!1,description:null}],body:"The problems are not from the samples but rather in the library :)\r\n\r\n1. If we go the to the samples **gridColumnActions** click **Group by all** in Custom Group Action and error is thrown:\r\n\r\n![image](https://user-images.githubusercontent.com/41373491/192044287-674dec05-e064-4fc7-8ccb-295980aba4f1.png)\r\n\r\n2. In samples **gridRowAPI** In the Add Filter value add some number then click the red button ADD ROW and you will get: \r\n\r\n![image](https://user-images.githubusercontent.com/41373491/192045800-c3e9c2a6-cde1-458a-adf1-b39eb06b9bf4.png)\r\n\r\n3. In **pivot** grid sample there are soo many bugs there if you just start clicking like crazy. \u{1f92a} One is right when the sample loads, click **newConfig** button then **filterDim** button and you will get \r\n![image](https://user-images.githubusercontent.com/41373491/192047586-601b9e4e-a013-45a5-99a7-791944fd33c6.png)\r\n\r\nAnother one is if you unselect right checkboxes and select them again: \r\n![image](https://user-images.githubusercontent.com/41373491/192048138-489e1e0e-eee1-4c7c-ad0f-8f6f65eaa539.png)\r\n\r\n\r\nKeep the amazing work you are doing, thanks to your library many devs can code faster and more fluently \u{1f499}\r\n",title:"Grid miscellaneous bugs \u{1f41b}",number:12128,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12128",id:1384253421,pullRequest:null},{createdAt:"2022-09-16T12:56:40Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:1605262456,nodeId:"MDU6TGFiZWwxNjA1MjYyNDU2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-adding",name:"grid: row-adding",color:"f9c5c0",default:!1,description:""},{id:3518092453,nodeId:"LA_kwDOAxIT487RsdSl",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2012.3.x",name:"version: 12.3.x",color:"BF8F0D",default:!1,description:""},{id:4540898149,nodeId:"LA_kwDOAxIT488AAAABDqibZQ",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x",name:"version: 15.0.x",color:"FA5965",default:!1,description:""}],body:"## Description \r\nThe most obvious way to support changing the dummy PK is by handling the rowEditStart event (if you don't want for the end-user to see the dummy negative numbers). However, changing the rowData from the event args like this throws an error.\r\n\r\n * igniteui-angular version: 12.3.x +\r\n * browser: n/a\r\n\r\n## Steps to reproduce \r\n\r\n1. Open the sample\r\n2. Start adding a row\r\n3. Observe the console\r\n\r\n## Expected result \r\nThe sample should either work or there should be a different mechanism to achieve this such as the generatePK event in jQuery.\r\n\r\n## Attachments \r\n[stoxrz--run.zip](https://github.com/IgniteUI/igniteui-angular/files/9585396/stoxrz--run.zip)\r\n\r\n\r\n\r\n",title:"During row add, the dummy PK cannot be changed to a user-specified one",number:12091,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12091",id:1375914130,pullRequest:null},{createdAt:"2022-09-16T12:50:47Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:1605262456,nodeId:"MDU6TGFiZWwxNjA1MjYyNDU2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-adding",name:"grid: row-adding",color:"f9c5c0",default:!1,description:""},{id:4540898149,nodeId:"LA_kwDOAxIT488AAAABDqibZQ",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x",name:"version: 15.0.x",color:"FA5965",default:!1,description:""}],body:"Currently the row adding snackbar has two issues:\r\n\r\n1. It cannot be disabled\r\n2. It shows even when the added row is in view (only its button is hidden)\r\n\r\nChange the current UX by adding an option to disable the snackbar and also make the whole snackbar not appear when the row is in view",title:"Make the row adding snackbar optional. ",number:12090,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12090",id:1375906154,pullRequest:null},{createdAt:"2022-09-16T12:48:30Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:1605262456,nodeId:"MDU6TGFiZWwxNjA1MjYyNDU2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-adding",name:"grid: row-adding",color:"f9c5c0",default:!1,description:""},{id:4540898149,nodeId:"LA_kwDOAxIT488AAAABDqibZQ",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x",name:"version: 15.0.x",color:"FA5965",default:!1,description:""}],body:"Currently row adding transactions include the dummy negative values. Actually attempting to create EF entities with the objects from these transactions throws errors server-side.\r\n\r\nThese dummy values should be omitted from the transactions for users' convenience.\r\n",title:"Row adding transaction should not include the dummy PKs",number:12089,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12089",id:1375903530,pullRequest:null},{createdAt:"2022-09-16T12:45:26Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:1605262456,nodeId:"MDU6TGFiZWwxNjA1MjYyNDU2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20row-adding",name:"grid: row-adding",color:"f9c5c0",default:!1,description:""},{id:4540898149,nodeId:"LA_kwDOAxIT488AAAABDqibZQ",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2015.0.x",name:"version: 15.0.x",color:"FA5965",default:!1,description:""}],body:'The event sequence for row adding should be reworked as to not include "editing" events which means enhancing the event arguments around adding events so that the same level of extensibility can be achieved.',title:"Rework row-adding event sequence ",number:12088,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12088",id:1375900038,pullRequest:null},{createdAt:"2022-09-02T13:52:34Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:"## Description \r\nRelated to this: https://github.com/IgniteUI/igniteui-angular/pull/11923#discussion_r960460313\r\n\r\nMove tooltip close somewhere else since there it might cause issues in more complex templates.\r\n",title:"Move logic out of focusOut handler on the cell.",number:12042,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12042",id:1360227455,pullRequest:null},{createdAt:"2022-09-01T21:05:52Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:"## Description \r\nBased on Accessibility Insights for Web, the following elements are not compliant.\r\n\r\nelement.\r\nigniteui-angular version: 13.2.9\r\nbrowser: any\r\n\r\n * igniteui-angular version: \r\n * browser: \r\n\r\n## Steps to reproduce \r\n\r\n1. Install the Accessibility Insights extension for chrome\r\n2. Create an example igx-grid table with columns, paginator and toolbar\r\n3. Run the FastPass check from the notification Launch Pad\r\n\r\n## Result \r\nWhat is the actual result after following the steps to reproduce?\r\n![image](https://user-images.githubusercontent.com/112661337/188011688-2bae2602-0e4d-44ea-82ac-77ce89055d81.png)\r\n\r\n\r\n## Expected result \r\nWhat is the expected result after following the steps to reproduce?\r\nThere should not be failed instances\r\n\r\n\r\n## Attachments \r\nExample igx-grid\r\n![image](https://user-images.githubusercontent.com/112661337/188012868-1b9e73da-7597-4699-8c0d-f6fd3cce38bf.png)\r\n\r\n\r\n",title:".igx-grid__tbody-content: aria-activedescendant attribute not allowed for an element's role",number:12038,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12038",id:1359409063,pullRequest:null},{createdAt:"2022-08-19T20:37:07Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:'## Is your feature request related to a problem? Please describe.\r\nI\'m frustrated with UX of the Date Range Picker component, some issues with it are the following. They aren\'t much of an problem when seeing them as individual issues, they are frustrating when seeing as a whole:\r\n1. Extra clicks when I mistakenly clicked the wrong start date, as I have to select "end" and then start again\r\n2. Extra clicks when I want to modify only the end date, as I have to always select both dates, same goes for start date.\r\n3. I\'m never sure if the first click I do is going to modify the "start" or "end" value, for some reason I intuitively always expect the wrong date to be modified.\r\n\r\n## Describe the solution you\'d like\r\nPlease take a look to [this example component from Mui X](https://mui.com/x/react-date-pickers/date-range-picker/) built using fluent guidelines as a base. The issues I listed are addressed as follows:\r\n1. There\'s a rule that the "end" must always be greater than the "start". So, that means that if I click a smaller one is considered as a "start". This rule might be related to language, as english and spanish are read from left to right. So, selection is being done in that same order.\r\n2. There\'s separated fields for "start" and "end". So, the first modified date is the field I clicked\r\n3. There\'s a "preview" of the dates being selected before the click is done. \r\n\r\nAlso, a desired effect would be able to "drag and drop" the already selected dates as It would improve even more the UX of the second issue I mentioned.\r\n\r\n## Describe alternatives you\'ve considered\r\nIn some cases I prefer to add two normal separated date pickers and add validations myself.\r\n\r\n**Edit**: I mistakenly thought fluent had already a definition for date-range components as I saw all fluent based date-range pickers always implemented the set rules I listed. Now I know they don\'t. [Is a work in progress though](https://github.com/microsoft/fluentui/pull/23313).\r\n\r\n',title:"IgxDateRangePicker UX improvement",number:11994,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11994",id:1344875555,pullRequest:null},{createdAt:"2022-08-16T04:15:37Z",assignee:{id:4264873,avatarUrl:"https://avatars.githubusercontent.com/u/4264873?v=4",login:"gmurray81",email:null,url:"https://api.github.com/users/gmurray81"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"}],body:"## Description \r\nFinancial chart - Volumes pane disappears when an item is selected from indicators dropdown.\r\n\r\n * igniteui-angular version: 14.1.1\r\n * browser: Chrome\u3001Edge\r\n\r\n## Steps to reproduce \r\n\r\n1. Go to the sample: https://stackblitz.com/edit/angular-8jphuj-albr7f?file=src/app/stock-index-chart/financial-chart-stock-index-chart.component.html\r\n2. Click 'Indicators' dropdown and select any item other than ones under 'Volumes'.\r\n\r\n## Result \r\nVolumes pane disappears.\r\n\r\n## Expected result \r\nVolumes pane stays visible.\r\n\r\n\r\n",title:"Financial chart - Volumes pane disappears when an item is selected from indicators dropdown.",number:11975,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11975",id:1339786487,pullRequest:null},{createdAt:"2022-07-16T00:03:17Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:354680432,nodeId:"MDU6TGFiZWwzNTQ2ODA0MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/list",name:"list",color:"1d76db",default:!1,description:null},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing Lists, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n## Expected result \r\n37. List item hover color should be a lighter transparency of white. 8% white is better, and it matches the dropdown item hover.\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179325946-69c4c680-c3f5-4666-a354-af94ae0a4a2f.png)\r\n",title:"List Theming Issues",number:11883,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11883",id:1306637501,pullRequest:null},{createdAt:"2022-07-16T00:00:41Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:868440495,nodeId:"MDU6TGFiZWw4Njg0NDA0OTU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/tabs",name:"tabs",color:"efc377",default:!1,description:""},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing Tabs, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n\r\n## Expected result \r\n35. Tab hover color should be a lighter transparency of white. 4% or 5% white can look better.\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179325867-72839417-e22c-41bb-a4a3-98c4289cdd29.png)\r\n\r\n\r\n",title:"Tabs Theming Issues",number:11882,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11882",id:1306636722,pullRequest:null},{createdAt:"2022-07-15T23:54:06Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:402717485,nodeId:"MDU6TGFiZWw0MDI3MTc0ODU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/nav-bar",name:"nav-bar",color:"d93f0b",default:!1,description:null},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing a NavBar with a Nav icon and action icons, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n## Expected result \r\n34. Nav and action icons when pressed or focused should not be gray. That does not look good. Maybe they should have a similar style as the focused and pressed state of the raised button, with the primary color.\r\nThe hover state seems fine, but maybe it's rather dark. I would suggest different opacity for the hover (around 20% black), 38% black for pressed and 28% black for focused. I couldn't find a material ui reference, so this is my personal opinion.\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179325512-8295babd-d096-479e-804c-16f3102d6d00.png)\r\n\r\n",title:"NavBar Theming Issues",number:11881,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11881",id:1306634892,pullRequest:null},{createdAt:"2022-07-15T23:22:05Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:680707239,nodeId:"MDU6TGFiZWw2ODA3MDcyMzk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/slider",name:"slider",color:"d4c5f9",default:!1,description:null},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing Sliders, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n## Expected result \r\n32. Tickmarks & labels should match the same colors applied to the [chart component](https://github.com/IgniteUI/igniteui-angular/issues/11872) in dark mode. \r\n33. Disabled State: should look exactly like the default state but with 38% opacity applied to the entire component.\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179323594-66284216-9af4-4c14-8e5e-cb30e70e9b7f.png)\r\n\r\n\r\n",title:"Slider Theming Issues",number:11880,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11880",id:1306621582,pullRequest:null},{createdAt:"2022-07-15T22:47:33Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:354680490,nodeId:"MDU6TGFiZWwzNTQ2ODA0OTA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/nav-drawer",name:"nav-drawer",color:"64c599",default:!1,description:null},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:455636069,nodeId:"MDU6TGFiZWw0NTU2MzYwNjk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dialog",name:"dialog",color:"2078bc",default:!1,description:""},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing a Nav Drawer in Overlay mode, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n## Expected result \r\n29. Hover state background be a transparency of white. Around 2-3% white is what Material UI has for theirs.\r\n30. **ALL OVERLAYS** background colors should be a transparency of black. Material uses 32% black. But maybe 40% black would look better in our case. This applies to **DIALOG** too.\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179321586-20f94e6d-04d1-4f8a-bc05-7d3c4ff442ae.png)\r\n\r\n\r\n",title:"Nav Drawer Theming & Overlays Issues",number:11879,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11879",id:1306606025,pullRequest:null},{createdAt:"2022-07-15T21:38:40Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:438338013,nodeId:"MDU6TGFiZWw0MzgzMzgwMTM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/radio-button",name:"radio-button",color:"0052cc",default:!1,description:null},{id:1290006335,nodeId:"MDU6TGFiZWwxMjkwMDA2MzM1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/radio-group",name:"radio-group",color:"e87971",default:!1,description:""},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing RadioButton Group, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n\r\n## Expected result \r\n26. RadioButton CHECKED - Disabled: should look exactly like the default state (which uses the primary color) but with 38% opacity applied to the entire component.\r\n27. RadioButton UNCHECKED - Default / Hover: the outline should be 60% white.\r\n28. RadioButton UNCHECKED - Disabled: should look exactly like the default state (which uses the primary color) but with 38% opacity applied to the entire component.\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179317320-f75ffec7-7a92-45b7-9035-15f447fee30b.png)\r\n\r\n",title:"RadioButton & RadioButton Group Theming Issues",number:11878,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11878",id:1306556499,pullRequest:null},{createdAt:"2022-07-15T21:12:36Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:438360283,nodeId:"MDU6TGFiZWw0MzgzNjAyODM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/checkbox",name:"checkbox",color:"fef200",default:!1,description:null},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing Checkboxes, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n## Expected result \r\n42. Checkbox **CHECKED** - Disabled: should look exactly like the default state (which uses the primary color) but with 38% opacity applied to the entire component.\r\n43. Checkbox **UNCHECKED** - Default / Hover: the outline should be 60% white.\r\n44. Checkbox **UNCHECKED** - Disabled: should look exactly like the default state but with 38% opacity applied to the entire component.\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179311225-7b5e2cc2-5068-400b-960f-10e50d80d2bc.png)\r\n",title:"Checkbox Theming Issues",number:11877,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11877",id:1306527975,pullRequest:null},{createdAt:"2022-07-15T20:51:48Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:821413899,nodeId:"MDU6TGFiZWw4MjE0MTM4OTk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/toggle",name:"toggle",color:"0052cc",default:!1,description:null},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing Switches, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\nAll states are inconsistent with Material UI switches. \r\n\r\n## Expected result \r\n38. Switch **ON** - Default / Hover: the track should be 38% primary color.\r\n39. Switch **ON** - disabled state: should look exactly like the default state but with 38% opacity applied to the entire component.\r\n40. Switch **OFF** - Default / Hover: the track should be 38% white.\r\n41. Switch **OFF** - disabled state: should look exactly like the default state but with 38% opacity applied to the entire component.\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179311183-1f01df2e-260b-4dfc-8e08-46f07c505a3a.png)\r\n\r\n\r\n",title:"Switch Theming Issues",number:11876,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11876",id:1306490677,pullRequest:null},{createdAt:"2022-07-15T18:55:43Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:842555014,nodeId:"MDU6TGFiZWw4NDI1NTUwMTQ=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/button-group",name:"button-group",color:"db579d",default:!1,description:null},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing the Button Group component, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n## Expected result \r\n25. Button group background color should be the same as the outlined button background. And the outline should be 12% white.\r\nAs an example i'm showing the expected result (which is missing the elevation).\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179292911-551b270e-20d4-4252-9997-da96f07088e7.png)\r\n\r\n\r\n",title:"Button Group Theming Issues",number:11875,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11875",id:1306383840,pullRequest:null},{createdAt:"2022-07-15T18:42:45Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""},{id:3982407566,nodeId:"MDU6TGFiZWwzOTgyNDA3NTY2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid",name:"grid",color:"95f9d5",default:!1,description:null}],body:"\r\n## Description \r\nThis is an AppBuilder app showing Grid, using a custom dark theme based on material dark, with custom surface background color (blue).\r\nThe grid component does not look good when used against a custom surface color, different from the default theme surface (#222).\r\n\r\n## Expected result \r\n21. Grid **HEADER** background could look better with 12% white.\r\n22. Grid **CELLS** background color should be the same color as the cards and expansion panel's background color.\r\n23. Adv. Filtering **Dialog** (and similar ones): header could be like the grid header bg. color, and background like the cells bg. color.\r\n24. Should the **dialog** have inner padding so the buttons are not touching the edges?\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179288204-dcc90c5d-d322-4f9d-8566-de5b5c3535dd.png)\r\n\r\n\r\n",title:"Grid Theming Issues",number:11874,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11874",id:1306372758,pullRequest:null},{createdAt:"2022-07-15T18:20:55Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing Input Group, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n\r\n## Expected result \r\n13. When label is missing, outline looks broken.\r\n14. Outline: same [recommendations I made for date picker](https://github.com/IgniteUI/igniteui-angular/issues/11865).\r\n15. All text labels: same recommendations I made for date picker.\r\n16. Inactive state (background): same recommendations I made for date picker.\r\n17. Disabled state (background): same recommendations I made for date picker.\r\n18. Dropdown items hover and focused background colors should be a 8% white. \r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179285490-ff67eac1-49d0-4cee-9878-2f54b18dd94e.png)\r\n\r\n",title:"Input Group Theming Issues",number:11873,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11873",id:1306354290,pullRequest:null},{createdAt:"2022-07-15T18:06:39Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:1437635681,nodeId:"MDU6TGFiZWwxNDM3NjM1Njgx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/fluent-theme",name:"fluent-theme",color:"22e864",default:!1,description:""},{id:1738947086,nodeId:"MDU6TGFiZWwxNzM4OTQ3MDg2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/bootstrap-theme",name:"bootstrap-theme",color:"a666e2",default:!1,description:""},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing Category Charts, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n## Expected result \r\n9. Gridlines should be 8% white. Axis and tickmarks should be 38% white (compared to our light theme ui kit).\r\n10. Titles should be 87% white, and axis labels 60% white.\r\n11. Tooltip should not have white bg, maybe it could match surface and have 12% white stroke.\r\n12. CHARTS in all themes (Material, Fluent & Bootstrap) should support dark mode.\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179284506-24160115-acc1-4f4a-ab70-901d1222f248.png)\r\n",title:"Dark Mode for Charts ",number:11872,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11872",id:1306343058,pullRequest:null},{createdAt:"2022-07-15T14:48:12Z",assignee:{id:48180072,avatarUrl:"https://avatars.githubusercontent.com/u/48180072?v=4",login:"georgianastasov",email:null,url:"https://api.github.com/users/georgianastasov"},labels:[{id:602972382,nodeId:"MDU6TGFiZWw2MDI5NzIzODI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:white_check_mark:%20status:%20resolved",name:":white_check_mark: status: resolved",color:"0e8a16",default:!1,description:"Applies to issues that have pending PRs resolving them, or PRs that have already merged."},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nWhen you clear a IgxSimpleCombo then the dropdown opens.\r\nWhen you clear a IgxCombo then the dropdown doesn't open.\r\n\r\n## Describe the solution you'd like\r\nIt should be possible to configure the IgxSimpleCombo to not open the dropdown on clear.",title:"IgxSimpleCombo: possibility to not open dropdown on clear",number:11871,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11871",id:1306127607,pullRequest:null},{createdAt:"2022-07-14T22:18:15Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:941968977,nodeId:"MDU6TGFiZWw5NDE5Njg5Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/card",name:"card",color:"5df4b0",default:!1,description:""},{id:1072582019,nodeId:"MDU6TGFiZWwxMDcyNTgyMDE5",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/expansion-panel",name:"expansion-panel",color:"d8720d",default:!1,description:""},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing Cards & expansion panel, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n## Expected result \r\n7. Card Subtitle: color should be 60% white and font weight should be regular. \r\n8. Card Outline should be 12% white\r\n20. Expansion Panel Subtitle: color should be 60% white and font weight should be regular. \r\n\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179287319-f2b3d88b-5553-404c-9cea-7376fa5d4cdd.png)\r\n![image](https://user-images.githubusercontent.com/86068582/179097850-f54a3456-8a92-4233-bd67-afc828facb87.png)\r\n\r\n",title:"Card Theming Issues",number:11866,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11866",id:1305343497,pullRequest:null},{createdAt:"2022-07-14T22:08:22Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is an AppBuilder app showing Date Pickers, using a custom dark theme based on material dark, with custom surface background color (blue).\r\n\r\n**ALL ISSUES** described here in Date Picker also apply to [Input Group](https://github.com/IgniteUI/igniteui-angular/issues/11873), Combo, Select components and Text Area.\r\nAll my recommendations are based on the colors used in the Material UI kit Dark Theme from Google.\r\n\r\n## Expected result \r\n2. Label should be 60% white\r\n3. Outline should be 38% white\r\n4. Icon should be 87% white\r\n5. Inactive box input: background color should be 4% white \r\n6. Disabled box input: should have 4% white background and only the text and prefix / suffix icons look disabled. \r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179097142-55280aec-9339-4ae8-83d8-6926a7d8256e.png)\r\n![image](https://user-images.githubusercontent.com/86068582/179097179-d732395d-95d5-4b16-8f25-48829dab14cd.png)\r\n",title:"Date Picker / Input Group / Combo / Select / Text Area: Theming Issues",number:11865,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11865",id:1305337422,pullRequest:null},{createdAt:"2022-07-14T22:06:26Z",assignee:{id:15327632,avatarUrl:"https://avatars.githubusercontent.com/u/15327632?v=4",login:"sdimchevski",email:null,url:"https://api.github.com/users/sdimchevski"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:406864577,nodeId:"MDU6TGFiZWw0MDY4NjQ1Nzc=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/material-theme",name:"material-theme",color:"fef2c0",default:!1,description:""},{id:674809506,nodeId:"MDU6TGFiZWw2NzQ4MDk1MDY=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:calendar:%20calendar",name:":calendar: calendar",color:"d4c5f9",default:!1,description:""},{id:1844773161,nodeId:"MDU6TGFiZWwxODQ0NzczMTYx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dark-theme",name:"dark-theme",color:"0052cc",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:"## Description \r\nThis is a calendar in AppBuilder, using a custom dark theme based on material dark, with custom surface background color (blue).\r\nThe hover state circle has incorrect background and size.\r\n\r\n## Expected result \r\nThe hover circle size should be the same size as the selected state.\r\nThe hover background color should be a 8% white or 8% primary color. \r\n\r\n\r\n## Attachments \r\n![image](https://user-images.githubusercontent.com/86068582/179096502-98e9e4a4-a499-428b-96dd-23813c9e4b3e.png)\r\n\r\n\r\n",title:"Calendar Theming Issues - Material Dark",number:11864,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11864",id:1305336223,pullRequest:null},{createdAt:"2022-07-08T18:44:06Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\n\r\nWhen using an igx-combo or an input field, it's pretty common to want to use autocompletion. However, at least in my case, it's rare that I already have the data. As they type it hits a remote server to pull the next 50ish entries or so that match the text. That's very complicated to setup today.\r\n\r\n## Describe the solution you'd like\r\n\r\nSome type of `(onNeedAutocomplete)=\"remoteServerLookup($event)` ability where I then simply do something like:\r\n\r\n```typescript\r\nremoteServerLookup(event: AutocompleteEvent): Observable {\r\n return this.myService.filteredValues(event.text)\r\n}\r\n```\r\n\r\n## Describe alternatives you've considered\r\n\r\nI'm doing it today via a pipe that calls the service, but those pipes then become repetitive and it's confusing later when looking back as to why I need a pipe and how it's actually triggering the lookup. It also then adds complexity because now I'm having to mix reactive and template-based forms. The input/combo suddenly has to use an `ngModelChange` for validity and an `[(ngModel)]` to drive the pipe, and then tie that back to the reactive form.\r\n\r\nIt's all doable, it's just really messy.\r\n\r\n## Additional context\r\n\r\nWe have to tie an `ngModelChange` to something like this method. When I look at it later I'm wondering what that pipeString is for. That's what triggers the pipe value.\r\n\r\n```typescript\r\n onTextFieldChanged(event: string): void {\r\n // If they type into the field, then they didn't pick from the drop-down, that means it's just not valid.\r\n this.value = null\r\n this.onChange?.(null)\r\n this.onTouched?.()\r\n this.pipeString = event\r\n }\r\n```\r\n\r\nThen we end up doing some type of pipe, which might be getting a string back if it's data from the server, but if I had a selected thing already, then it's probably an actual object.\r\n\r\n```typescript\r\n transform(_collection: Observable, input: string | Employee | undefined): Observable {\r\n if (!input)\r\n return of([])\r\n\r\n if (typeof input !== 'string')\r\n return of([input])\r\n\r\n return of(input).pipe(\r\n debounceTime(500),\r\n distinctUntilChanged(),\r\n switchMap(term => this.service.find(term)),\r\n catchError((err: unknown) => {\r\n console.error(err as HttpErrorResponse)\r\n return of([])\r\n })\r\n )\r\n }\r\n```",title:"Support remote load on IgxAutocompleteModule",number:11842,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11842",id:1299338544,pullRequest:null},{createdAt:"2022-07-04T08:21:38Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:926278753,nodeId:"MDU6TGFiZWw5MjYyNzg3NTM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/combo",name:"combo",color:"152872",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nAt the moment, we do not have a mechanism for clearing the `IgxCombo`'s selection through the keyboard. This is because there are two inputs in the component, one of which allows filtering and is editable and the other is only a container for already selected values, it is not editable. By default, once the dropdown is closed with `ArrowUp`, the readonly input receives focus and at that point it is not possible to clear all of the values that have been selected. Attempting `TAB` navigation will move the focus to the next focusable element on the page, i.e. we cannot use that to target the clear icon and focus it as it is not focusable. As is if you're only using a keyboard, through the component, you can only deselect items while navigating the dropdown menu and manually deselecting each item.\r\n\r\n## Describe the solution you'd like\r\nA mechanism that allows for all items to be deselected simultaneously. This could include making the clear icon focusable or coming up with a keyboard combination that clears the combo, the latter should only work when the readonly input has the focus.\r\n\r\n## Describe alternatives you've considered\r\nA possible alternative for developers is to create a separate element on the page, such as a button and call the `combo.deselectAllItems` method in its click handler. This, however, is not ideal since it introduces a possibly redundant element on the page for a functionality that the combo should provide out of the box.\r\n",title:"Consider clearing the selection of the IgxCombo using only the keyboard",number:11813,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11813",id:1292807649,pullRequest:null},{createdAt:"2022-06-22T14:36:15Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:3113485838,nodeId:"MDU6TGFiZWwzMTEzNDg1ODM4",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20pivot",name:"grid: pivot",color:"177099",default:!1,description:""},{id:3893988156,nodeId:"LA_kwDOAxIT487oGYs8",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2013.2.x",name:"version: 13.2.x",color:"744395",default:!1,description:""},{id:4169772772,nodeId:"LA_kwDOAxIT4874ia7k",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2014.0.x",name:"version: 14.0.x",color:"76BCC6",default:!1,description:""}],body:"## Description \r\nDescribe the issue.\r\n\r\n * igniteui-angular version: \r\n * browser: \r\n\r\n## Steps to reproduce \r\n\r\n1. Open hierarchical dev pivot sample\r\n2. Resize `All products` to the right\r\n3. Observe\r\n\r\n## Result \r\nThe column header row is misplaced\r\n\r\n## Expected result \r\nThe column header row should not change\r\n\r\n\r\n## Attachments \r\n\r\nhttps://user-images.githubusercontent.com/37667452/175056219-60fba4c8-bc62-4d6b-86a8-96cf8e0fd25d.mov\r\n\r\n\r\n",title:"[Pivot] Resizing row dimensions causes column dimensions to break its layout",number:11764,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11764",id:1280258836,pullRequest:null},{createdAt:"2022-06-09T16:48:52Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Question \r\nI am using the igx-grid component.\r\nI have set the cellSelection property as 'multiple'.\r\nI want to allow cell selection on specific columns.\r\n\r\nAlso, I want to be notified when a cell is selected. \r\nI tried to find an event emitter but couldn't.\r\n \r\n is there a way to achieve these in igx-grid.\r\n \r\n * igniteui-angular version: \r\n * browser: \r\n",title:"Igx Grid allow cell selection on specific columns",number:11704,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11704",id:1266406564,pullRequest:null},{createdAt:"2022-06-03T22:21:54Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:"## Description \r\nI think there is a core element in Ignite, maybe the igxOverlayService, causing all these memory leaks I have been reporting lately.\r\n\r\nThe reason why I think the problem resides in a core element is because it is really easy to replicate serious memory leaks just by placing different ignite controls inside a component and then destroy such component.\r\nI started with tooltips, then combos, then overlays, even with Grids like this example below.\r\n\r\nThe grid component causes a memory leak when being consumed from child components that are later destroyed. See below to reproduce the issue:\r\n\r\n * igniteui-angular version: 13.1.18\r\n * browser: Tested in Microsoft Edge, but happens in Chrome as well\r\n\r\n## Steps to reproduce \r\n\r\n1. Use Microsoft Edge as its DevTools contain the Detached Elements panel\r\n1. Open [this stackblitz](https://stackblitz.com/edit/angular-k7pshd-fmwjey?file=package.json)\r\n1. Click the **CREATE NESTED COMPONENT** button\r\n1. Click the grid's combo to select how many rows to see\r\n1. Click the **DESTROY NESTED COMPONENT** button\r\n1. Open the Detached Elements in DevTools\r\n1. You will realize that the component cannot be garbage collected \r\n\r\n## Result \r\nAny child components that contain grids, such as the **** component in this example, are not properly disposed.\r\n\r\nThis memory leak only happens when user opens the grid's combo to select how many rows to see.\r\n\r\n## Expected result \r\nChild components should be properly disposed, no Detached Elements should be left behind.\r\n\r\n\r\n## Attachments \r\nTake a look at this gif that also demonstrates the issue\r\n![MemoryLeakGrid](https://user-images.githubusercontent.com/4580348/171961184-d1f2ace1-9b68-4d02-a298-e6576d7f0233.gif)\r\n\r\n",title:"Memory Leak in igx-grid (please test with all controls)",number:11672,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11672",id:1260441441,pullRequest:null},{createdAt:"2022-06-03T12:32:31Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438875,nodeId:"MDU6TGFiZWw1MzE0Mzg4NzU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:hammer_and_wrench:%20status:%20in-development",name:":hammer_and_wrench: status: in-development",color:"0052cc",default:!1,description:"Issues and PRs with active development on them"},{id:749009988,nodeId:"MDU6TGFiZWw3NDkwMDk5ODg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/refactoring",name:"refactoring",color:"bcd8f4",default:!1,description:null},{id:963379072,nodeId:"MDU6TGFiZWw5NjMzNzkwNzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/overlay",name:"overlay",color:"a9fcf2",default:!1,description:""},{id:4169772772,nodeId:"LA_kwDOAxIT4874ia7k",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2014.0.x",name:"version: 14.0.x",color:"76BCC6",default:!1,description:""}],body:"Since the `ComponentFactory` is deprecated and the new way of creating dynamic components in Angular is done through the `viewContainerRef` I think we should update our Overlay's `attach` with an overload that accepts a viewContainerRef. The current overload:\r\nhttps://github.com/IgniteUI/igniteui-angular/blob/a7aebb080a8563ad32b0c09aa93ed538c5c65dfc/projects/igniteui-angular/src/lib/services/overlay/overlay.ts#L321-L322\r\nShould be deprecated - the sooner the better, so we can have a transition period before the old API is dropped.",title:"Update overlay attach dynamic component overload ",number:11671,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11671",id:1259857586,pullRequest:null},{createdAt:"2022-05-31T08:41:48Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nWhen using the group by feature, you can set the sorting direction to alphabetical asc og desc, but you can sort by the number of occurrences in each group.\r\n\r\n## Describe the solution you'd like\r\nA new sort direction for count, or perhaps this could be default sorting if the sorting direction is set to None?\r\n![image](https://user-images.githubusercontent.com/12936286/171131552-52c9abcb-547b-44f8-9e3c-6221a5d1fbc3.png)\r\n\r\n\r\n",title:"Order by count in igx-grid group by",number:11642,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11642",id:1253535526,pullRequest:null},{createdAt:"2022-05-25T13:19:33Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:3982407566,nodeId:"MDU6TGFiZWwzOTgyNDA3NTY2",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid",name:"grid",color:"95f9d5",default:!1,description:null}],body:'### Description \r\nDescribe the issue.\r\n\r\n### Steps to reproduce \r\n\r\n1. Please go to https://staging.infragistics.com/products/ignite-ui-angular/angular/components/pivotGrid/pivot-grid\r\n2. Open dev tool and deselect all the checkbox on the left\r\n3. Now Select "Country" checkbox and observe\r\n\r\n### Result \r\n![image](https://user-images.githubusercontent.com/41373491/170271556-cf34694e-c53e-4976-b43d-f8875ce7a6bc.png)\r\n\r\n',title:"TypeError: Cannot read properties of undefined (reading 'headerGroupClasses') on Pivot Grid",number:12504,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12504",id:1525444496,pullRequest:null},{createdAt:"2022-05-20T13:33:38Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:926278753,nodeId:"MDU6TGFiZWw5MjYyNzg3NTM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/combo",name:"combo",color:"152872",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nCurrently I'm trying to set uppercase to the input value, but without success because of missing template for the input.\r\n\r\n## Describe the solution you'd like\r\nThere should be a template for rendering the input so it can be used to modify the value of the input.\r\n\r\nRight now if the values in the combo are with capital letters, it looks like this:\r\n\r\n![image](https://user-images.githubusercontent.com/35975071/169539045-795cef50-599c-4c0b-ba3e-85ef2359531c.png)\r\n",title:"IgxComboComponent missing input template",number:11601,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11601",id:1243157823,pullRequest:null},{createdAt:"2022-05-20T13:17:51Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:926278753,nodeId:"MDU6TGFiZWw5MjYyNzg3NTM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/combo",name:"combo",color:"152872",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nWhen the combo is used only to display items without the need to search in the list we can't set a readonly property to the input, because there isn't any property in order to set that without disabling the whole input.\r\n\r\n## Describe the solution you'd like\r\nI think we should be able to set a property to disable the search when it isn't needed.\r\n\r\n## Describe alternatives you've considered\r\nSo far the solution is to handle **keydown** event when it's emitted and to add prevent the event from triggering.\r\n\r\n",title:"Add readonly option to the input in IgxComboComponent ",number:11600,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11600",id:1243138330,pullRequest:null},{createdAt:"2022-05-11T13:09:11Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:1157969302,nodeId:"MDU6TGFiZWwxMTU3OTY5MzAy",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/transaction",name:"transaction",color:"006b75",default:!1,description:"igxTransactionService"}],body:"### Description \r\nIn the Hierarchical Grid Batch Editing and Transactions sample in the documentation demo ([here](https://www.infragistics.com/products/ignite-ui-angular/angular/components/hierarchicalgrid/batch-editing#angular-hierarchical-grid-batch-editing-and-transactions-example)), when editing both parent and a child grid rows, the child grid changes are not commited, even though the corresponding transactions are shown in the log - gif below.\r\n\r\nWhen editing only a row from the child grid, it seems that the changes are properly committed.\r\n\r\n### Steps to reproduce \r\n\r\n1. Open the[ demo ](https://www.infragistics.com/products/ignite-ui-angular/angular/components/hierarchicalgrid/batch-editing#angular-hierarchical-grid-batch-editing-and-transactions-example)from the docs.\r\n2. Edit any row from the parent grid.\r\n3. Edit any row from the corresponding child grid.\r\n4. Exit row editing mode the edited rows to add the transactions to the log.\r\n5. Click \"Commit\" button.\r\n6. Observe the transactions log dialog.\r\n7. Confirm commit.\r\n\r\n### Result \r\nWhile the parent grid's edits are reflected, the child grid's are not.\r\n\r\nAn approach that currently seems to solve the issue in the sample is wrapping the `grid.transactions.commit(grid.data);` in a requestAnimationFrame callback. Sample [here.](https://stackblitz.com/edit/igx-hierarchical-grid-batch-editing-commit-child-grid-2?file=src/app/hierarchical-grid/hierarchical-grid-batch-editing/hierarchical-grid-batch-editing.component.ts)\r\n\r\n### Expected result \r\nAll edits to be committed.\r\n\r\n### Attachments \r\n![hgrid-batch-edit-demo-issue](https://user-images.githubusercontent.com/35433937/167847690-a37d6ef1-7ffe-4df8-81d6-2de410764018.gif)\r\n\r\n",title:"HGrid Batch Editing and Transactions sample - child grid transactions are not committed when parent grid also has transactions",number:12456,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/12456",id:1496593368,pullRequest:null},{createdAt:"2022-04-13T21:15:29Z",assignee:{id:52001020,avatarUrl:"https://avatars.githubusercontent.com/u/52001020?v=4",login:"radomirchev",email:null,url:"https://api.github.com/users/radomirchev"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:'I\'m constantly finding the need to have single select drop-down, with autocomplete filtering, where I display a grid. Essentially I want the igx-simple-combo that displays a grid. For example, I\'m picking some software from a list, but I have multiple versions. So now I\'m forced to concatenate the name and version string together to display, which is not ideal. What I really want is something like so:\r\n\r\n```html\r\n\r\n \r\n \r\n \r\n\r\n```\r\n\r\nNow I have a nice clean interface for my customers. Some items I\'d want:\r\n\r\n1. Should be triggered from an igx-input-group\'s input field. \r\n2. Should allow typing text into the input to filter the igx-grid-combo (by the filterKey property, for example)\r\n3. When leaving the input field, should clear out the contents if it\'s not a selection. Prevents them from thinking they have valid data when they didn\'t actually pick one of the items.\r\n4. Should provide a way to specify a template for what is displayed in the input field after something is selected. The selected "value" is the object, and that\'s what gets assigned to the form control, but in the input field I want something else displayed.\r\n5. Should allow an optional "clear" button icon on the input field if there\'s a value set. Would like it optional because if the field isn\'t editable at the moment, it really shouldn\'t show a clear button.',title:"Single select grid dropdown",number:11396,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11396",id:1203798554,pullRequest:null},{createdAt:"2022-03-31T14:06:33Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:"## Description \r\nThe ignite Splitter is showing empty space when there's a grid in the upper pane, happening in v13.1.0, the issue is not present in v12.2.3 though\r\n\r\n * igniteui-angular version: 13.1.0\r\n * browser: Microsoft Edge Version 99.0.1150.55 (Official build) (64-bit)\r\n\r\n## Steps to reproduce \r\n1. Open [this stackblitz](https://stackblitz.com/edit/angular-k7pshd-6qsmdk)\r\n1. Since the initial load, you can see that the upper splitter pane is displaying the grid with empty space in the middle, just above the grid\u2019s footer (in blue color)\r\n1. Manually change the size of the upper pane by dragging and dropping the pane\u2019s edge, you will see that the empty blue space goes away\r\n1. The splitter bar that separates panes has 2 small arrows on the sides to immediately expand/collapse the panes, please click them in the following order: UP arrow, DOWN arrow, DOWN arrow, UP arrow. You will see that the blue space is displayed again in the upper pane\r\n\r\nThese steps are also recorded here:\r\n![Issue](https://user-images.githubusercontent.com/4580348/161072900-f444965f-20b8-47f8-b825-159a3a6761f9.gif)\r\n\r\nThis issue doesn\u2019t happen in v12.2.3, you can follow the same steps in [this stackblitz](https://stackblitz.com/edit/github-hwzhn1-kpyka6)\r\n\r\n## Result \r\nThe grid shows an empty space just above the grid's footer \r\n\r\n## Expected result \r\nGrid's contents should not be cropped, in other words, there should not be empty space above the grid's footer\r\n\r\n",title:"Splitter showing empty space for grid in upper pane",number:11323,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11323",id:1188140100,pullRequest:null},{createdAt:"2022-03-11T18:39:36Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""}],body:'## Description \r\nWhen I set the `[rowDraggable]` attribute on my igx-grid, the row widths are not correctly calculating unless ALL columns have the width attribute set. There is no way to have a column that "fills" the remaining space in the grid. Since I have the igx-grid within a css grid container, I cannot set the width of the grid statically.\r\n\r\n * igniteui-angular version: 13.0.11\r\n * browser: Chrome 99.0.4844.51\r\n\r\n## Steps to reproduce \r\n\r\n1. Create a grid where only 2/3 columns have a width attribute set\r\n2. Verify that the column without the width attribute correctly resizes when the parent container resizes based on available space\r\n3. Add the `[rowDraggable]="true"` attribute to the grid\r\n\r\n## Result \r\nThe width of the grid rows is incorrectly calculated (almost as if it doesn\'t take into account the width of the row drag cell). No horizontal scrollbar is shown neither.\r\n\r\n## Expected result \r\nThe grid row widths are correctly calculated and all rows can be seen. The column without the width attribute will correctly resize based on available space\r\n\r\n\r\n## Attachments \r\nBefore adding the `[rowDraggable]` attribute:\r\n![image](https://user-images.githubusercontent.com/18708788/157931308-815f61fe-9642-46fe-9957-19a5845fc55c.png)\r\n\r\nAfter adding the `[rowDraggable]` attribute (the delete column is not shown anymore):\r\n![image](https://user-images.githubusercontent.com/18708788/157931421-0c376e68-de23-4080-8b82-3ebad1948dcd.png)\r\n\r\n\r\n',title:"igx-grid rowDraggable - Row widths not calculating properly",number:11227,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11227",id:1166738958,pullRequest:null},{createdAt:"2022-03-11T10:35:53Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nIgxCombo and IgxSimpleCombo are the only components I'm using which doesn't have a possibility to add a tabindex.\r\n\r\n## Describe the solution you'd like\r\nPlease add a tabIndex property to the components.\r\n",title:"IgxCombo, IgxSimpleCombo: missing tabIndex property",number:11226,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11226",id:1166258645,pullRequest:null},{createdAt:"2022-03-11T10:28:16Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:651042855,nodeId:"MDU6TGFiZWw2NTEwNDI4NTU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:date:%20date-picker",name:":date: date-picker",color:"afea6b",default:!1,description:""},{id:835103025,nodeId:"MDU6TGFiZWw4MzUxMDMwMjU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/time-picker",name:"time-picker",color:"97f4a2",default:!1,description:null},{id:1659256343,nodeId:"MDU6TGFiZWwxNjU5MjU2MzQz",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-range-picker",name:"date-range-picker",color:"3ec9c4",default:!1,description:""}],body:"## Description \r\nInput `tabIndex` doesn't work for IgxDatePicker, IgxTimePicker, IgxDateRangePicker\r\n\r\n * igniteui-angular version: 13.1.4\r\n * browser: Chrome\r\n\r\n## Steps to reproduce \r\nhttps://stackblitz.com/edit/angular-x8zlxx\r\n\r\n1. Click in first input.\r\n2. Press tab.\r\n\r\n## Result \r\nYou can tab through all components despite `[tabIndex]=\"-1\"`.\r\n\r\n## Expected result \r\nYou shouldn't be able to tab through components with tabIndex = -1.",title:"IgxDatePicker, IgxTimePicker, IgxDateRangePicker: tabIndex not working",number:11225,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11225",id:1166250938,pullRequest:null},{createdAt:"2022-03-01T23:33:29Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:3535663847,nodeId:"LA_kwDOAxIT487SvfLn",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/simple-combo",name:"simple-combo",color:"D5F8FB",default:!1,description:""},{id:3893988156,nodeId:"LA_kwDOAxIT487oGYs8",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2013.2.x",name:"version: 13.2.x",color:"744395",default:!1,description:""}],body:"## Description \r\nIf the user selects the currently selected item from the dropdown, the selection is cleared.\r\nI can reproduce this in the demo.\r\n\r\n * igniteui-angular version: 13.0.11 -> current\r\n * browser: Chrome\r\n\r\n## Steps to reproduce \r\n\r\n1. Open Ignite [Simple ComboBox demo](https://www.infragistics.com/products/ignite-ui-angular/angular/components/simple-combo#angular-simple-combobox-example)\r\n2. Open the control in the first example\r\n3. Select the 'CubicFit' item (or whatever is currently selected)\r\n\r\n## Result \r\nSelection is cleared.\r\n\r\n## Expected result \r\nSelection is not cleared.\r\n\r\n\r\n## Attachments \r\n[Ignite demo](https://www.infragistics.com/products/ignite-ui-angular/angular/components/simple-combo#angular-simple-combobox-example) \r\n\r\n## Note\r\nThe `(selectionChanging)` event returns `undefined` for the newSelection.\r\n\r\n",title:" selection cleared when selecting the currently selected item.",number:11141,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11141",id:1155949938,pullRequest:null},{createdAt:"2022-02-28T15:15:27Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:625766429,nodeId:"MDU6TGFiZWw2MjU3NjY0Mjk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general",name:"grid: general",color:"5319e7",default:!1,description:""},{id:749010965,nodeId:"MDU6TGFiZWw3NDkwMTA5NjU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/virtualization",name:"virtualization",color:"e85a19",default:!1,description:null},{id:1665536927,nodeId:"MDU6TGFiZWwxNjY1NTM2OTI3",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20collapsible-column-groups",name:"grid: collapsible-column-groups",color:"75cc47",default:!1,description:""}],body:"## Description \r\nDescribe the issue.\r\n\r\n * igniteui-angular version: 3.0.x\r\n * browser: any\r\n\r\n## Steps to reproduce \r\n\r\n1. Open https://www.infragistics.com/angular-demos/grid/grid-collapsible-groups\r\n2. Resize window so there is horizontal scrollbar\r\n3. Scroll to the end\r\n4. Expand the last collapsible column group\r\n\r\n## Result \r\nOnly 3 child header are visible after expanding for `Product Details`\r\n\r\n## Expected result \r\nThere should be 4 child headers visible\r\n\r\n\r\n",title:"Expanding a collapsible column group when scrolled to the end does not update scrollbar",number:11119,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11119",id:1154212973,pullRequest:null},{createdAt:"2022-02-12T14:55:49Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:749010965,nodeId:"MDU6TGFiZWw3NDkwMTA5NjU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/virtualization",name:"virtualization",color:"e85a19",default:!1,description:null},{id:2636303240,nodeId:"MDU6TGFiZWwyNjM2MzAzMjQw",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20performance",name:"grid: performance",color:"296A82",default:!1,description:""}],body:"Hi! I would like to virtualize one billion records that are lazily created as the user scrolls their grid. Think, a vertical grid with one billion rows that each display their row number.\r\n\r\nHowever, I'm hitting some performance problems around the 2.5 million mark. \r\n\r\nI've pinpointed the bottlenecks to interactions with `heightCache` and `sizeCache` in methods like `initSizesCache`, `_updateSizeCache`, `_calcHeight`, and `recalcUpdateSizes`. All of my rows are the same fixed size (50px the default), and I was wondering if it were possible to optimize the grid implementation to perform well in this use case. Thanks!\r\n\r\n * igniteui-angular version: 12.3.11\r\n * browser: Chrome 94\r\n\r\nPS: As a proof-of-concept, I actually overrode the functions I listed above to calculate row heights with multiplication instead of looking the sizes up, and I was able to see an amazing performance improvement way up to 50 million. Beyond 50 million or so, I get `ERROR RangeError: Invalid array length` on `this.sizesCache.push(totalSize)` in `IgxGridForOfDirective.initSizesCache`, and I was wondering if you could allow me to opt out of per-row storage entirely for massive datasets like this. Thanks! ",title:"Performance issues at massive scale",number:11002,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/11002",id:1134150212,pullRequest:null},{createdAt:"2022-02-08T09:41:13Z",assignee:{id:14248932,avatarUrl:"https://avatars.githubusercontent.com/u/14248932?v=4",login:"hanastasov",email:null,url:"https://api.github.com/users/hanastasov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:762261742,nodeId:"MDU6TGFiZWw3NjIyNjE3NDI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/circular-progress",name:"circular-progress",color:"f9b8c4",default:!1,description:null},{id:771293723,nodeId:"MDU6TGFiZWw3NzEyOTM3MjM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/progress-bar",name:"progress-bar",color:"4ed352",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:1299108257,nodeId:"MDU6TGFiZWwxMjk5MTA4MjU3",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/linear-progress",name:"linear-progress",color:"9fb3f2",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nAdd UI tests for progressbar animation\r\n",title:"Add UI tests for progressbar animation",number:10965,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10965",id:1127011664,pullRequest:null},{createdAt:"2021-11-23T13:54:28Z",assignee:{id:14248932,avatarUrl:"https://avatars.githubusercontent.com/u/14248932?v=4",login:"hanastasov",email:null,url:"https://api.github.com/users/hanastasov"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:625766429,nodeId:"MDU6TGFiZWw2MjU3NjY0Mjk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general",name:"grid: general",color:"5319e7",default:!1,description:""},{id:3520634791,nodeId:"LA_kwDOAxIT487R2J-n",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2013.1.x",name:"version: 13.1.x",color:"A2E656",default:!1,description:""}],body:"Following the removal of `rowID` and `rowData` properties from `IgxRowDirective` and all public classes implementing the `RowType` interface, considering the following:\r\n\r\nDeprecate the old `rowID` and `rowData` from any or all of the following:\r\n\r\n- [x] context object of [`rowSelectorTemplate`](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/grids/grid/grid-row.component.html#L18)\r\n- [ ] [`IGridEditDoneEventArgs`](https://github.com/IgniteUI/igniteui-angular/blob/13d82c111d668dfdc8c0f4ec9e1498d0d3e32667/projects/igniteui-angular/src/lib/grids/common/events.ts#L20)\r\n- [ ] [`IRowToggleEventArgs`](https://github.com/IgniteUI/igniteui-angular/blob/13d82c111d668dfdc8c0f4ec9e1498d0d3e32667/projects/igniteui-angular/src/lib/grids/common/events.ts#L151)\r\n- [ ] [ `IPinRowEventArgs`](https://github.com/IgniteUI/igniteui-angular/blob/13d82c111d668dfdc8c0f4ec9e1498d0d3e32667/projects/igniteui-angular/src/lib/grids/common/events.ts#L165)\r\n- [ ] [`HierarchicalStateRecord`](https://github.com/IgniteUI/igniteui-angular/blob/13d82c111d668dfdc8c0f4ec9e1498d0d3e32667/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts#L48)\r\n- [ ] [`IPathSegment`](https://github.com/IgniteUI/igniteui-angular/blob/13d82c111d668dfdc8c0f4ec9e1498d0d3e32667/projects/igniteui-angular/src/lib/grids/common/grid.interface.ts#L42)\r\n\r\nand introduce the new `key` and `rowData`\r\n",title:"Deprecate rowID and rowData in interfaces",number:10617,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10617",id:1061315242,pullRequest:null},{createdAt:"2021-11-23T13:36:18Z",assignee:{id:16020256,avatarUrl:"https://avatars.githubusercontent.com/u/16020256?v=4",login:"jackofdiamond5",email:null,url:"https://api.github.com/users/jackofdiamond5"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nAdd custom theme attribute for igx-date-picker theme.\r\n\r\n## Describe the solution you'd like\r\nigx-date-picker has a igx-input-group that allows to customize the theme with a attribute but it is not exposed by the date picker API.\r\n\r\n## Describe alternatives you've considered\r\nThe theme is inferred in runtime but it not cached [https://www.infragistics.com/products/ignite-ui-angular/angular/components/input-group#input-group-theme](https://www.infragistics.com/products/ignite-ui-angular/angular/components/input-group#input-group-theme)\r\n\r\n## Additional context\r\n[https://github.com/IgniteUI/igniteui-angular/blob/24f16983758056cea3b30c32bef836153adcff2c/projects/igniteui-angular/src/lib/input-group/input-group.component.ts#L453](https://github.com/IgniteUI/igniteui-angular/blob/24f16983758056cea3b30c32bef836153adcff2c/projects/igniteui-angular/src/lib/input-group/input-group.component.ts#L453)\r\n\r\n[https://www.infragistics.com/products/ignite-ui-angular/docs/typescript/latest/classes/IgxInputGroupComponent.html#theme](https://www.infragistics.com/products/ignite-ui-angular/docs/typescript/latest/classes/IgxInputGroupComponent.html#theme)\r\n",title:"igx-date-picker - Add custom theme attribute",number:10614,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10614",id:1061296512,pullRequest:null},{createdAt:"2021-11-22T13:16:41Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:967825069,nodeId:"MDU6TGFiZWw5Njc4MjUwNjk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/migrations",name:"migrations",color:"99e50d",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nAt the moment we do not support fully migrating union or intersection types. Methods or properties that return such types will not be resolved properly and any migration that attempts to modify such members will be ignored.\r\n\r\n## Describe the solution you'd like\r\nWe should consider extending our existing functionality to allow the migration of union and intersection types. These types can also be a part of a generic declaration, so we need to account for that as well.\r\n\r\n## Additional context\r\nSome variations may include:\r\n```typescript\r\nmethod1(arg1: A, arg2: B, ...args): A | B\r\n\r\nmethod2(predicate: (value: A, ...args) => value is B): B | undefined\r\n\r\nmethod3(...args): B | undefined\r\n\r\n\r\nprop1: A | B | undefined\r\n\r\nprop2: A & B\r\n```\r\n\r\nA common case is the `Array.find` method. One of its overloads is a generic union between `S` and `undefined`. At the moment any member `K` accessed from the type `S` returned by `Array.find` will not be migrated. \r\nFor example - `grid.rowList.toArray().find(r => r.rowID === someRowID).rowID` - `r.rowID` will be migrated successfully (providing everything is strictly typed) while `find(...).rowID` will not be migrated.\r\n",title:"Allow migrating of union and intersection types",number:10597,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10597",id:1060145465,pullRequest:null},{createdAt:"2021-11-17T15:40:58Z",assignee:{id:16817847,avatarUrl:"https://avatars.githubusercontent.com/u/16817847?v=4",login:"gedinakova",email:null,url:"https://api.github.com/users/gedinakova"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:'## Is your feature request related to a problem? Please describe.\r\nI have a toolbar that I want to reuse in a bunch of different `IgxGrid` implementations, currently, I have to duplicate that code every time\r\n\r\n## Describe the solution you\'d like\r\nI want to reuse the same `` code on different `IgxGrid` or `IgxTreeGrid`, so I don\'t have to duplicate code on all my implementations, seems to me that the most natural way would be to use Angular [content](https://angular.io/guide/content-projection) or inline [template](https://angular.io/api/core/ng-template). the following example would be ideal:\r\n```\r\n \r\n \r\n ... \r\n ... custom elements\r\n \r\n \r\n \r\n \r\n \r\n \r\n ... more custom elements \r\n \r\n \r\n\r\n ... and more \r\n ... and a lot more \r\n```\r\n\r\n## Describe alternatives you\'ve considered\r\nThe only alternative I currently have seems to duplicate my code, an alternative expected result for this FR could be to print the template directly and receive additional parameters using a directive:\r\n```\r\n \r\n \r\n ... \r\n ... custom elements\r\n \r\n \r\n \r\n \r\n \r\n \r\n ... more custom elements \r\n \r\n \r\n\r\n \r\n \r\n ... and more\r\n\r\n\r\n \r\n ... and a lot more\r\n\r\n```\r\n\r\n## Additional context\r\nBreaking changes or new features might need to be replicated in a lot of places, this FR might solve version upgrade issues. Also, this issue is related [to this discussion](https://github.com/IgniteUI/igniteui-angular/discussions/10455) where I explain a lot more my use case.\r\n',title:"Add [toolbarTemplate] parameter to IgxGrid and IgxTreeGrid",number:10537,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10537",id:1056278477,pullRequest:null},{createdAt:"2021-10-01T05:29:47Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"\r\n## Is your feature request related to a problem? Please describe.\r\nCurrently we are using one option for show and hide the grid columns explicitly for that implementation we used Igx Column Actions .\r\nIgnite version: 12.1.5\r\n\r\nhttps://stackblitz.com/github/IgniteUI/igniteui-live-editing-samples/tree/master/angular-demos/grid/grid-column-hiding-sample?file=src%2Fapp%2Fgrid%2Fgrid-column-hiding-sample%2Fgrid-column-hiding-sample.component.html\r\n\r\n## Describe the solution you'd like\r\n Need the igx-colum-action column items dragable vertically to change the postion of the items and relatively change the column position of the igx-grid..\r\n\r\n\r\n",title:"Drag and Drop columns in igx-column-action ",number:10221,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10221",id:1012915118,pullRequest:null},{createdAt:"2021-09-29T07:06:55Z",assignee:{id:46093564,avatarUrl:"https://avatars.githubusercontent.com/u/46093564?v=4",login:"dobromirts",email:null,url:"https://api.github.com/users/dobromirts"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:625766429,nodeId:"MDU6TGFiZWw2MjU3NjY0Mjk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general",name:"grid: general",color:"5319e7",default:!1,description:""},{id:3399979682,nodeId:"LA_kwDOAxIT487Kp5Ki",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/source:%20appbuilder",name:"source: appbuilder",color:"8E48B0",default:!1,description:""}],body:" * igniteui-angular version: 12.2.0-alpha.3\r\n\r\n## Steps to reproduce \r\n\r\nGrid alignment issues - add paging and group by. Do the following actions \u2013 gif below.\r\n\r\nhttps://www.screencast.com/t/bH2NBAmkk \r\n\r\nMake sure to watch the entire video.\r\n\r\n\r\n## Result \r\n![4](https://user-images.githubusercontent.com/14248932/135219642-721d0453-8478-4e2b-8607-ccd8b9cb4b87.png)\r\n\r\n",title:"Grid alignment issues ",number:10208,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10208",id:1010575213,pullRequest:null},{createdAt:"2021-09-23T14:21:54Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:1105153503,nodeId:"MDU6TGFiZWwxMTA1MTUzNTAz",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/batch-editing",name:"batch-editing",color:"73eea4",default:!1,description:""}],body:"## Question \r\nHi -- the scenario I'm targeting is, a user makes a bunch of edits to multiple rows in a grid, clicks save, and realizes they made a mistake--so they want to click undo. Currently, my save button calls `TransactionService.commit()`, which seems to wipe the undo stack. Is it possible to keep the undos so my user can revert to the state before the save? Thanks!\r\n\r\n * igniteui-angular version: \r\n * browser: ",title:"`TransactionService.commit()` but keep undos? ",number:10181,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10181",id:1005497498,pullRequest:null},{createdAt:"2021-08-20T15:35:58Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:749010965,nodeId:"MDU6TGFiZWw3NDkwMTA5NjU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/virtualization",name:"virtualization",color:"e85a19",default:!1,description:null}],body:"If the for-of container receives padding, the last item gets cut off with that amount - padding is not taken into account.\r\n\r\nReproducing samples - 2nd two from this:\r\n\r\n[github-kpsvt9-djhsue.zip](https://github.com/IgniteUI/igniteui-angular/files/7022641/github-kpsvt9-djhsue.zip)\r\n",title:"Allow for padded containers with igxForOf (supported with ngFor)",number:10040,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/10040",id:975717758,pullRequest:null},{createdAt:"2021-08-12T09:46:20Z",assignee:{id:14248932,avatarUrl:"https://avatars.githubusercontent.com/u/14248932?v=4",login:"hanastasov",email:null,url:"https://api.github.com/users/hanastasov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531441726,nodeId:"MDU6TGFiZWw1MzE0NDE3MjY=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:firecracker:%20severity:%20medium",name:":firecracker: severity: medium",color:"fbca04",default:!1,description:""},{id:983537039,nodeId:"MDU6TGFiZWw5ODM1MzcwMzk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20paging",name:"grid: paging",color:"f96398",default:!1,description:""},{id:3048421571,nodeId:"MDU6TGFiZWwzMDQ4NDIxNTcx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2012.1.x",name:"version: 12.1.x",color:"74F034",default:!1,description:""}],body:"## Description \r\nGrid provides incorrect slice of data on last page, when remote data with batch editing \r\n\r\n * igniteui-angular version: 12.1.x\r\n\r\n## Steps to reproduce \r\n\r\n1. Go to https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/remote-data-operations#remote-paging-with-batch-editing\r\n2. Go to last page\r\n3. Click Add Row several times, until grid pages increment from 8 to 9\r\n4. Go to last 9th page\r\n\r\n## Result:\r\nGrid Shows records from page 8 as well\r\n\r\n## Expect:\r\nGrid to display only records for page 9\r\n",title:"Grid provides incorrect slice of data on last page, when remote data with batch editing ",number:9990,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9990",id:968470941,pullRequest:null},{createdAt:"2021-07-23T10:10:26Z",assignee:{id:9549439,avatarUrl:"https://avatars.githubusercontent.com/u/9549439?v=4",login:"valadzhov",email:null,url:"https://api.github.com/users/valadzhov"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:967825069,nodeId:"MDU6TGFiZWw5Njc4MjUwNjk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/migrations",name:"migrations",color:"99e50d",default:!1,description:""}],body:"Currently, it is not possible to run migration unit tests for .ts files. This leads to problems like this: https://github.com/IgniteUI/igniteui-angular/pull/9910\r\n",title:"Execute migrations tests for .ts files",number:9912,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9912",id:951440516,pullRequest:null},{createdAt:"2021-06-14T07:00:24Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:926278753,nodeId:"MDU6TGFiZWw5MjYyNzg3NTM=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/combo",name:"combo",color:"152872",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nI have an editable grid, where the data the user can select from is hierarchical. So esentially, I need something like this, only with support for hierarchical data:\r\n![image](https://user-images.githubusercontent.com/12936286/121851505-81fc2400-ccee-11eb-873b-3f4485b9fecd.png)\r\n\r\nI have looked briefly into other solutions, like for instance using the new tree component with a drop down.\r\n![image](https://user-images.githubusercontent.com/12936286/121851625-a3f5a680-ccee-11eb-8e1f-20ca25ecf8d8.png)\r\nBut while this works, there are some issues, like I would prefer that the trigger for the drop down looked like the combo:\r\n \r\n![image](https://user-images.githubusercontent.com/12936286/121851758-ca1b4680-ccee-11eb-9ed1-11f45d0e1f06.png)\r\n\r\nAlso, I would manually have to implement the filter already present in the combo.\r\n\r\n\r\n\r\n\r\n",title:"Support for hierarchical data in igx-combo",number:9707,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9707",id:920087416,pullRequest:null},{createdAt:"2021-06-08T15:12:48Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:651042855,nodeId:"MDU6TGFiZWw2NTEwNDI4NTU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:date:%20date-picker",name:":date: date-picker",color:"afea6b",default:!1,description:""},{id:674809506,nodeId:"MDU6TGFiZWw2NzQ4MDk1MDY=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:calendar:%20calendar",name:":calendar: calendar",color:"d4c5f9",default:!1,description:""},{id:835103025,nodeId:"MDU6TGFiZWw4MzUxMDMwMjU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/time-picker",name:"time-picker",color:"97f4a2",default:!1,description:null},{id:1775129274,nodeId:"MDU6TGFiZWwxNzc1MTI5Mjc0",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-time-editor",name:"date-time-editor",color:"47a31a",default:!1,description:""}],body:"Some examples of UI experience on desktop and mobile devices that I expected to behave differently. Just for the sake of discussing if this is the right way or another would be better.\r\n\r\n### Updating the calendar while editing the input\r\n![MicrosoftTeams-image (22)](https://user-images.githubusercontent.com/14248932/121205515-6624f800-c880-11eb-91f0-6ec44d0cb431.png)\r\n\r\n1) Open https://infragistics.com/angular-demos/scheduling/datepicker-sample-1\r\n2) Open the calendar to select a date\r\n3) Update the input value and press Enter\r\n\r\nExpectations:\r\nThe calendar to respect the value in the input\r\n\r\nResult\r\nCalendar view did not change accordingly\r\n\r\n### Clearing the input value using the `Delete` key on the mobile Chrome keyboard for IgxDatePicker and IgxTimePicker\r\n1) Open https://www.infragistics.com/angular-demos/data-entries/reactive-forms on mobile\r\n2) Select a date in the `Date` input\r\n3) After selecting the date, the value in the input is selected.\r\n4) Press `Delete`\r\n\r\nExpectations:\r\nvalue to be cleared\r\n\r\nResult:\r\nCursor was moved to first position\r\n\r\n### Writing in the date picker input\r\n1) Focus the IgxDatePicker input on Mobile in order to write in the input\r\n\r\nExpectation:\r\nA mobile keyboard to be brought to the user\r\n\r\nResult\r\nThe default keyboard is brought to the user.",title:"IgxCalendar and IgxDatePicker UX experience on desktop and mobile",number:9685,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9685",id:915160557,pullRequest:null},{createdAt:"2021-05-06T14:44:30Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:963379072,nodeId:"MDU6TGFiZWw5NjMzNzkwNzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/overlay",name:"overlay",color:"a9fcf2",default:!1,description:""}],body:"Our designs need to change based on whether a panel has opened above or below the anchor point.\r\n\r\nHere is what we have:\r\n![image](https://user-images.githubusercontent.com/9682964/117309774-bc051b00-ae50-11eb-9fea-914666889d5a.png)\r\n\r\nWe need the top border and bottom border-radius to be swapped when the panel opens to the top like this.\r\n\r\nIdeally, there could be a class to indicate that the panel is flipping up.\r\n",title:"Classes to indicate position of auto overlay",number:9481,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9481",id:877575652,pullRequest:null},{createdAt:"2021-04-29T08:35:31Z",assignee:{id:14248932,avatarUrl:"https://avatars.githubusercontent.com/u/14248932?v=4",login:"hanastasov",email:null,url:"https://api.github.com/users/hanastasov"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:674809506,nodeId:"MDU6TGFiZWw2NzQ4MDk1MDY=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:calendar:%20calendar",name:":calendar: calendar",color:"d4c5f9",default:!1,description:""},{id:2518122248,nodeId:"MDU6TGFiZWwyNTE4MTIyMjQ4",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2011.1.x",name:"version: 11.1.x",color:"e99695",default:!1,description:""},{id:2685585222,nodeId:"MDU6TGFiZWwyNjg1NTg1MjIy",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2012.0.x",name:"version: 12.0.x",color:"08F0E5",default:!1,description:""}],body:"## Description \r\nMulti-view calendar scrolls to next month even if that month is already in the view\r\n\r\n * igniteui-angular version: all\r\n * browser: all\r\n\r\n## Steps to reproduce \r\n\r\n1. Run dev demos\r\n2. Open this [sample](http://localhost:4200/calendar) and scroll to the multi-view calendar\r\n3. Inside for example **April** pick **first** of **May**\r\n\r\n## Result \r\nThe multi-view moves **April** outside of the view and sets **May** as a first calendar in the view.\r\n\r\n## Expected result \r\nThe multi-view should not move **April** outside of the view and set **May** as the first calendar since **May** is already in the view.",title:"Multi-view calendar unnecessarily scrolls months",number:9473,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9473",id:870760593,pullRequest:null},{createdAt:"2021-03-31T18:38:57Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nWhen i want to drop a row inside collapsed row, right now there is no option to expand the row on hover after sometime.\r\n\r\n## Describe the solution you'd like\r\nMy solution would be introduce a property which will expand the drop row on hover by default if the property is set to true.\r\nset the default time to 2secs or 3secs.\r\n\r\n## Describe alternatives you've considered\r\ni tried some alternatives but it is not working as expected.\r\nsome other row is getting moved instead of drag row.\r\n\r\n## Additional context\r\nAbove Description is more than sufficient.\r\n",title:"Expand Target row on hover after 2secs, if the target row is collapsed in Drag and Drop",number:9236,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9236",id:847116363,pullRequest:null},{createdAt:"2021-02-26T12:19:12Z",assignee:{id:14248932,avatarUrl:"https://avatars.githubusercontent.com/u/14248932?v=4",login:"hanastasov",email:null,url:"https://api.github.com/users/hanastasov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\nWhen selecting a cell or row, it doesn't seem to be a way deselect the cell or row again with the mouse. \r\n\r\n## Describe the solution you'd like\r\nIt would be nice to have a mode for the grid, where clicking the selection removed the selection again.\r\n",title:"Deselect when clicking selection",number:9086,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9086",id:817311283,pullRequest:null},{createdAt:"2021-02-25T23:51:04Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""}],body:'## Is your feature request related to a problem? Please describe.\r\nThis is related to question [9064](https://github.com/IgniteUI/igniteui-angular/issues/9064), If I can\'t add recursive templates, it would be nice to at least reuse the same columns at each row island level.\r\n\r\n\r\n## Describe the solution you\'d like\r\nI would like to implement something similar to this:\r\n ```\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n```\r\n\r\n## Describe alternatives you\'ve considered\r\nCurrently I\'m being forced to define every level even though they are all the same.\r\n\r\n## Additional context\r\nAny alternative to encapsulate columns definitions would be ok. \r\n',title:"Add [igxColumnTemplate] to and ",number:9080,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/9080",id:816902086,pullRequest:null},{createdAt:"2021-01-12T14:27:07Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:324654932,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/enhancement",name:"enhancement",color:"84b6eb",default:!0,description:null},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:963379072,nodeId:"MDU6TGFiZWw5NjMzNzkwNzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/overlay",name:"overlay",color:"a9fcf2",default:!1,description:""},{id:2069855364,nodeId:"MDU6TGFiZWwyMDY5ODU1MzY0",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/priority:%20low",name:"priority: low",color:"d7e25a",default:!1,description:""},{id:2518122248,nodeId:"MDU6TGFiZWwyNTE4MTIyMjQ4",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2011.1.x",name:"version: 11.1.x",color:"e99695",default:!1,description:""}],body:"`IgxOverlayService` is using now angular animations package to animate content shown in the overlay. However this package has some limitations, e.g. during animation you cannot take how much of the animation has elapsed, as well as some bugs like #6581 and #8450. Switching to native Web Animations will allow us to fix the issues we have and control better animation flow.\r\n\r\nStop using angular animation package in overlay service and animate content via [Web Animations](https://developer.mozilla.org/en-US/docs/Web/API/Animation)\r\n\r\nFor some of the issues we are using work arounds in our code and for other we are waiting for angular to fix their package. However this is not good as we are depending on third party while with Web Animations we can depend on ourselves.\r\n\r\n- [x] add animation service - #11628 \r\n- [ ] implement animation service with Web Animations",title:"Switch overlay service from angular animations to native Web Animations",number:8780,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/8780",id:784285210,pullRequest:null},{createdAt:"2020-11-16T15:15:50Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:963379072,nodeId:"MDU6TGFiZWw5NjMzNzkwNzI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/overlay",name:"overlay",color:"a9fcf2",default:!1,description:""},{id:2273176771,nodeId:"MDU6TGFiZWwyMjczMTc2Nzcx",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%2010.2.x",name:"version: 10.2.x",color:"b631e2",default:!1,description:""}],body:"### Description \r\nDescribe the issue.\r\n\r\n * igniteui-angular version: 10.2.x\r\n * browser: any\r\n\r\n### Steps to reproduce \r\n\r\n1. The viewport fit calculation is based on the document instead of the provided outlet thus resulting in strange behavior sometimes:\r\n\r\n![image](https://user-images.githubusercontent.com/47364572/99269747-196bc800-282f-11eb-87d2-b076a72f7181.png)\r\n\r\ncan be useful in cases like this one:\r\n\r\n![image](https://user-images.githubusercontent.com/47364572/99270255-3b654a80-282f-11eb-92db-085423a4da4e.png)\r\n\r\nProvide a way to choose whether to make the calculations based on the outlet or the document.\r\n\r\n\r\n",title:"Overlay doesn't calculate its position fit based on the outlet but based on the document",number:8595,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/8595",id:743919089,pullRequest:null},{createdAt:"2020-10-27T06:34:46Z",assignee:{id:16817847,avatarUrl:"https://avatars.githubusercontent.com/u/16817847?v=4",login:"gedinakova",email:null,url:"https://api.github.com/users/gedinakova"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:850290880,nodeId:"MDU6TGFiZWw4NTAyOTA4ODA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20filter-ui",name:"grid: filter-ui",color:"f484f1",default:!1,description:""},{id:1221520389,nodeId:"MDU6TGFiZWwxMjIxNTIwMzg5",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20excel-style-filtering",name:"grid: excel-style-filtering",color:"fef2c0",default:!1,description:""},{id:2043077405,nodeId:"MDU6TGFiZWwyMDQzMDc3NDA1",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/status:%20inactive",name:"status: inactive",color:"bdc442",default:!1,description:"Used to stale issues and pull requests"}],body:'ESF does not respect custom column filters\r\n\r\n * igniteui-angular version: 9.1.x\r\n\r\n## Steps to reproduce \r\n\r\n1. Set an `IgxStringFilteringOperand` custom filter to a column of `number` data type.\r\n```typescript\r\npublic unitFilters = IgxStringFilteringOperand.instance();,\r\n```\r\n```html\r\n\r\n\r\n```\r\n2. Open ESF dialog\r\n\r\nNote that if quick filtering is used, instead of ESF, custom column filters are respected.\r\n\r\n## Result \r\nDefault numeric filters are rendered in the UI, instead of the custom ones\r\n\r\n## Expected result \r\nCustom filters to be rendered in the UI\r\n\r\nNote:\r\nOnly the list item that expands the filters is not changed:\r\n![Untitled](https://user-images.githubusercontent.com/14248932/97999097-950f5300-1df3-11eb-91c6-c20a08c1ce28.png)\r\n\r\n\r\n',title:"ESF does not respect custom column filters",number:8462,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/8462",id:730157145,pullRequest:null},{createdAt:"2020-08-05T13:35:49Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:455636069,nodeId:"MDU6TGFiZWw0NTU2MzYwNjk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/dialog",name:"dialog",color:"2078bc",default:!1,description:""},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:674809506,nodeId:"MDU6TGFiZWw2NzQ4MDk1MDY=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:calendar:%20calendar",name:":calendar: calendar",color:"d4c5f9",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:1659256343,nodeId:"MDU6TGFiZWwxNjU5MjU2MzQz",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-range-picker",name:"date-range-picker",color:"3ec9c4",default:!1,description:""}],body:"I would like to be able to template the range picker's dialog container of the calendar, in order to provide additional actions/elements.\r\n\r\nCurrently the dialog container has only one action button, which applies the range and it will be nice if the user could add more actions (e.g. Undo, Redo, Selected Dates count, etc).\r\n\r\n",title:"Support for templating date range picker's calendar dialog container ",number:7939,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/7939",id:673545914,pullRequest:null},{createdAt:"2020-04-29T08:13:27Z",assignee:{id:2621802,avatarUrl:"https://avatars.githubusercontent.com/u/2621802?v=4",login:"Lipata",email:null,url:"https://api.github.com/users/Lipata"},labels:[{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:1659256343,nodeId:"MDU6TGFiZWwxNjU5MjU2MzQz",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/date-range-picker",name:"date-range-picker",color:"3ec9c4",default:!1,description:""},{id:1843355790,nodeId:"MDU6TGFiZWwxODQzMzU1Nzkw",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%209.1.x",name:"version: 9.1.x",color:"0be554",default:!1,description:""}],body:"## Is your feature request related to a problem? Please describe.\r\n`IgxDatePicker` allows developer to set `vertical` mode. `IgxDateRangePicker` should has same option\r\n\r\n## Describe the solution you'd like\r\nAdd `vertical` mode to `IgxDateRangePicker`.\r\n\r\n## Describe alternatives you've considered\r\nThere is no way to achieve this in `IgxDateRangePicker` now.\r\n",title:"IgxDateRangePicker should allow vertical mode",number:7231,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/7231",id:608863706,pullRequest:null},{createdAt:"2020-04-09T09:18:49Z",assignee:{id:20106115,avatarUrl:"https://avatars.githubusercontent.com/u/20106115?v=4",login:"rkaraivanov",email:null,url:"https://api.github.com/users/rkaraivanov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:839132075,nodeId:"MDU6TGFiZWw4MzkxMzIwNzU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/mask-editor",name:"mask-editor",color:"d13bd3",default:!1,description:null},{id:1628732209,nodeId:"MDU6TGFiZWwxNjI4NzMyMjA5",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/size:%20L",name:"size: L",color:"dd3989",default:!1,description:""},{id:1843355790,nodeId:"MDU6TGFiZWwxODQzMzU1Nzkw",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%209.1.x",name:"version: 9.1.x",color:"0be554",default:!1,description:""}],body:"## Description \r\nIf the mask is set to \"'(966) #### ####'\" when you enter into edit mode the symbol '9' is always treated as a fillable spot.\r\n\r\n * igniteui-angular version: 9.0.1 \r\n\r\n## Steps to reproduce \r\n\r\n1. Run the sample\r\n2. Click on the input\r\n\r\n## Result \r\nThe digit 9 is replaced as fillable spot.\r\n\r\n## Expected result \r\nTo be able to set some indication in case you want the symbol '9' to be treated as a digit, not special symbol and after the input is clicked to looks like (966) _ _ _ _ _ _ _ _.\r\n\r\n\r\n## Attachments \r\nhttps://stackblitz.com/edit/angular-9kocto\r\n\r\n",title:"igxMask always set the symbol '9' as a fillable spot ",number:7089,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/7089",id:597143445,pullRequest:null},{createdAt:"2019-12-03T14:20:19Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:1714752892,nodeId:"MDU6TGFiZWwxNzE0NzUyODky",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/resizable",name:"resizable",color:"b7f99f",default:!1,description:""}],body:"## Question \r\nIs there a plan to add a resizing functionality to [IgxDrag]?\r\n\r\nThank you.",title:"Resizing [IgxDrag]",number:6283,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/6283",id:532019100,pullRequest:null},{createdAt:"2019-08-27T04:48:39Z",assignee:{id:1472513,avatarUrl:"https://avatars.githubusercontent.com/u/1472513?v=4",login:"kdinev",email:null,url:"https://api.github.com/users/kdinev"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:881145265,nodeId:"MDU6TGFiZWw4ODExNDUyNjU=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/exporters",name:"exporters",color:"c2e0c6",default:!1,description:""},{id:2993683250,nodeId:"MDU6TGFiZWwyOTkzNjgzMjUw",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/pdf-exporter",name:"pdf-exporter",color:"351F48",default:!1,description:""}],body:"pdf export is very common requirement from client side. we like Angular grid but missing export to pdf is annoying customers. Please provide export to pdf fetaure along with Excel & csv. \r\n\r\n**## Describe the solution you'd like**\r\nPlease provide export to pdf fetaure along with Excel & csv on Angular Grid. \r\n\r\n",title:"pdf Export feature on Angular Grid",number:5696,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/5696",id:485580657,pullRequest:null},{createdAt:"2019-01-03T12:31:04Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:625766429,nodeId:"MDU6TGFiZWw2MjU3NjY0Mjk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general",name:"grid: general",color:"5319e7",default:!1,description:""},{id:823505669,nodeId:"MDU6TGFiZWw4MjM1MDU2Njk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:toolbox:%20feature-request",name:":toolbox: feature-request",color:"dd449e",default:!1,description:""},{id:1628732209,nodeId:"MDU6TGFiZWwxNjI4NzMyMjA5",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/size:%20L",name:"size: L",color:"dd3989",default:!1,description:""}],body:"### Description \r\n\r\nThere is a request from a customer to implement a Cell Merging similar to the igGrid one: https://www.igniteui.com/help/iggrid-cellmerging-overview\r\n\r\n * igniteui-angular version: 7.x\r\n * browser: *\r\n\r\n\r\n",title:"Grid Cell Merging",number:3514,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/3514",id:395556832,pullRequest:null},{createdAt:"2018-04-19T11:18:05Z",assignee:{id:1182001,avatarUrl:"https://avatars.githubusercontent.com/u/1182001?v=4",login:"dkamburov",email:null,url:"https://api.github.com/users/dkamburov"},labels:[{id:324654930,nodeId:"MDU6TGFiZWwzMjQ2NTQ5MzA=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:bug:%20bug",name:":bug: bug",color:"fc2929",default:!1,description:"Any issue that describes a bug"},{id:531438748,nodeId:"MDU6TGFiZWw1MzE0Mzg3NDg=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:eyes:%20status:%20in-review",name:":eyes: status: in-review",color:"c5def5",default:!1,description:""},{id:531441726,nodeId:"MDU6TGFiZWw1MzE0NDE3MjY=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/:firecracker:%20severity:%20medium",name:":firecracker: severity: medium",color:"fbca04",default:!1,description:""},{id:625766429,nodeId:"MDU6TGFiZWw2MjU3NjY0Mjk=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20general",name:"grid: general",color:"5319e7",default:!1,description:""},{id:857640642,nodeId:"MDU6TGFiZWw4NTc2NDA2NDI=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/version:%205.3.x",name:"version: 5.3.x",color:"77b3d6",default:!1,description:""},{id:909237881,nodeId:"MDU6TGFiZWw5MDkyMzc4ODE=",url:"https://api.github.com/repos/IgniteUI/igniteui-angular/labels/grid:%20resizing",name:"grid: resizing",color:"2e2ef7",default:!1,description:""}],body:'### Description \r\nResizing a column to the rightmost of the igxGrid hides all the columns that are on right of the resized column.\r\n\r\n**NOTES:**\r\n- Performing an operation like **pinning/unpinning** fixes the issue and the columns become visible again.\r\n- The issue is **not** reproduced when resizing analogically to the left.\r\n\r\n### Steps to reproduce \r\n\r\n1. Run the "Grid Column Resizing" demo app.\r\n2. Scroll horizontally to the rightmost of the grid.\r\n3. Resize the "Region" column to the rightmost of the grid.\r\n\r\n### Result \r\nThe columns that were next to the "Region" column on the right are now **not** visible.\r\n\r\n### Expected result \r\nThe columns that were next to the "Region" column on the right are still visible.\r\n\r\n\r\n### Attachments \r\n\r\n![columnresize](https://user-images.githubusercontent.com/12784974/38988554-43bb7ee6-43dc-11e8-9225-b9769aea314a.gif)\r\n\r\n',title:"Resizing a column to the rightmost of the igxGrid hides all the columns that are on right of the resized column",number:1069,url:"https://api.github.com/repos/IgniteUI/igniteui-angular/issues/1069",id:315833423,pullRequest:null}];function u3e(t,r){if(1&t){const n=z();f(0,"igx-suffix",12),T("click",function(){return I(n),b(p().taskSearchString="")}),f(1,"igx-icon"),C(2,"clear"),m()()}}function h3e(t,r){if(1&t){const n=z();f(0,"igx-list-item")(1,"div",13)(2,"div",14,15),T("ghostCreate",function(){const s=I(n).$implicit;return b(p().onActionTriggered("drag",s))})("dragEnd",function(){return I(n),b(p().onActionTriggered("release",{}))}),f(4,"igx-icon",16),C(5,"drag_indicator"),m(),f(6,"div",17)(7,"h1",18),C(8),m(),f(9,"h2",19),C(10),m()(),f(11,"button",20),T("click",function(){const s=I(n).$implicit;return b(p().onActionTriggered("edit",s))}),f(12,"igx-icon"),C(13,"edit"),m()(),f(14,"button",20),T("click",function(){const i=I(n),s=i.$implicit,o=i.index;return b(p().deleteItem(s,o))}),f(15,"igx-icon"),C(16,"delete"),m()()()()()}if(2&t){const n=r.$implicit,e=p(),i=P(20);u(2),h("ghostHost",i.nativeElement)("ghostClass","tp-app__backlog-dragged-item"),u(5),h("title",n.issue),u(),Q(" ",n.title," "),u(),gn(e.getPriority(n)),u(),Q(" ",e.getPriority(n)," ")}}function g3e(t,r){}function p3e(t,r){1&t&&C(0," No tasks found ")}let RT=(()=>{var t;class r{set data(e){this.tasks=e}constructor(){this.overlaySettings={modal:!1,closeOnOutsideClick:!0},this.listItemAction=new A}ngOnInit(){this.overlaySettings.outlet=this.outlet}onActionTriggered(e,i){this.listItemAction.emit({action:e,issue:i})}deleteItem(e,i){i=i||this.tasks.findIndex(s=>s.id===e.id),this.tasks.splice(i,1)}get filterTasks(){const e=new vMe;return e.key="title",e.inputValue=this.taskSearchString,e}getPriority(e){const i=e.labels.filter(s=>0===s.name.indexOf("severity:"));return i.length?i[0].name.substring(10).toLowerCase():"low"}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275cmp=ie({type:t,selectors:[["app-backlog"]],viewQuery:function(e,i){if(1&e&&(F(kc,7,kc),F($n,7)),2&e){let s;D(s=S())&&(i.tasksList=s.first),D(s=S())&&(i.outlet=s.first)}},inputs:{data:"data"},outputs:{listItemAction:"listItemAction"},standalone:!0,features:[re],decls:21,vars:6,consts:[["elevated","",1,"tp-app__backlog-card"],["igxCardHeaderTitle",""],["type","search",1,"tp-app__task-search"],["ngDefaultControl","","name","search","igxInput","","placeholder","Search",3,"ngModel","ngModelChange"],["taskSearch",""],[3,"click",4,"ngIf"],[1,"tp-app__list-scroll"],[4,"ngFor","ngForOf"],["igxDataLoading",""],["igxEmptyList",""],["igxOverlayOutlet",""],["outlet","overlay-outlet"],[3,"click"],[1,"tp-app__backlog-list-template"],["igxDrag","",1,"tp-app__backlog-list-template-row",3,"ghostHost","ghostClass","ghostCreate","dragEnd"],["dragRef",""],["igxDragHandle","",1,"tp-app__backlog-list-button","tp-app__backlog-list-button--drag"],[1,"tp-app__backlog-list-template-text"],["igxListLineTitle","",3,"title"],["igxListLineSubTitle",""],["igxIconButton","flat","igxRipple","","igxRippleCentered","true","draggable","false",1,"tp-app__backlog-list-button","tp-app__backlog-list-button--action",3,"click"]],template:function(e,i){if(1&e&&(f(0,"igx-card",0)(1,"igx-card-header")(2,"h1",1),C(3,"Master Backlog"),m()(),V(4,"igx-divider"),f(5,"igx-card-content")(6,"igx-input-group",2)(7,"input",3,4),it("ngModelChange",function(o){return tt(i.taskSearchString,o)||(i.taskSearchString=o),o}),m(),f(9,"igx-prefix")(10,"igx-icon"),C(11,"search"),m()(),y(12,u3e,3,0,"igx-suffix",5),m(),f(13,"div",6)(14,"igx-list"),y(15,h3e,17,7,"igx-list-item",7),R(16,"igxFilter"),y(17,g3e,0,0,"ng-template",8)(18,p3e,1,0,"ng-template",9),m()()()(),V(19,"div",10,11)),2&e){const s=P(8);u(7),Je("ngModel",i.taskSearchString),u(5),h("ngIf",s.value.length>0),u(3),h("ngForOf",Gt(16,3,i.tasks,i.filterTasks))}},dependencies:[RS,JV,e6,mMe,t6,bi,Fs,Mr,Wr,Ps,Qt,zt,Fe,ye,Kt,kc,pt,Tf,Zo,Kp,A6,k6,Sf,Df,$n,xMe,Bs],styles:[".tp-app .igx-list-empty{display:block;text-align:center} .tp-app__task-search{margin:1rem!important;height:3.125rem} .tp-app__backlog-dragged-item{padding:.5rem 1rem;box-shadow:0 4px 18px 3px #00000014,0 10px 14px 1px #0000001f,0 6px 6px -3px #00000042;z-index:10;max-width:250px} .tp-app__backlog-list-template-text{max-width:252px;overflow:hidden} .tp-app__backlog-list-template-text h1, .tp-app__backlog-list-template-text h2{white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .tp-app__backlog-list-template{display:flex;align-items:center;width:100%} .tp-app__backlog-list-template-row{flex:1;display:flex;align-items:center;width:100%;overflow:hidden} .tp-app .igx-list__item-thumbnail{align-self:center} .tp-app .igx-list__item-content{width:100%} .tp-app__backlog-list-button--action{display:none!important;min-width:2.25rem} .tp-app__backlog-list-button--drag{margin-right:1rem} .tp-app__backlog{min-width:100px;width:18.75rem;margin-right:1.5rem} .tp-app__backlog .igx-card-header{min-height:3.5625rem} .tp-app__backlog .igx-tabs__header-menu-item--selected, .tp-app__backlog .igx-tabs__header-menu-item{min-height:3.625rem} .tp-app__backlog-card, .tp-app__backlog .igx-card-content, .tp-app__backlog .igx-tabs>div, .tp-app__backlog .igx-tabs, .tp-app__backlog .igx-tabs__content-fluid, .tp-app__backlog .igx-tabs__group{height:100%;overflow:hidden} .tp-app__backlog .igx-tabs__content-fixed{height:100%} .tp-app__backlog .tp-app__list-scroll{height:calc(100% - 8.7rem);overflow-x:auto} .igx-list__item-base:hover .tp-app__backlog-list-button--action, .igx-list__item-base:focus .tp-app__backlog-list-button--action{display:flex!important;padding:9px} .tp-app-dark-theme .tp-app__backlog-list-button{color:#bdbdbd!important} .tp-app-dark-theme .tp-app__backlog-list-button igx-icon{color:#bdbdbd} .tp-app-dark-theme .tp-app__backlog-list-button:hover, .tp-app-dark-theme .tp-app__backlog-list-button:focus{cursor:pointer;color:#ffb79a!important} .tp-app-dark-theme .tp-app__backlog-list-button:hover igx-icon, .tp-app-dark-theme .tp-app__backlog-list-button:focus igx-icon{cursor:pointer;color:#ffb79a} .tp-app-dark-theme .tp-app__backlog-dragged-item{background:#212533;color:#fff;border-radius:.5rem} .tp-app-light-theme .tp-app__backlog-list-button{color:#9e9e9e!important} .tp-app-light-theme .tp-app__backlog-list-button igx-icon{color:#9e9e9e} .tp-app-light-theme .tp-app__backlog-list-button:hover, .tp-app-light-theme .tp-app__backlog-list-button:focus{cursor:pointer;color:#e41c77!important} .tp-app-light-theme .tp-app__backlog-list-button:hover igx-icon, .tp-app-light-theme .tp-app__backlog-list-button:focus igx-icon{cursor:pointer;color:#e41c77} .tp-app-light-theme .tp-app__backlog-dragged-item{background:#f8f8f8;color:#000}"]}),r})(),jf=(()=>{var t;class r{transform(e){if(!e)return;if("string"==typeof e)return e;const i=e.filter(s=>s.name.includes("status:"));if(i.length){const s=i[0].name,o=s.indexOf("status:");return s.substring(o+8)}}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275pipe=Te({name:"statusLabel",type:t,pure:!0,standalone:!0}),r})(),PL=(()=>{var t;class r{transform(e){if(e.value)return e.value;const i=e.row.data?e.row.data:e;let s;return i.labels&&"function"==typeof i.labels.filter&&(s=i.labels.filter(o=>0===o.name.indexOf("severity:"))),s&&s.length>0&&s.length>0?s[0].name.substring(10):void 0}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275pipe=Te({name:"priorityLabel",type:t,pure:!0,standalone:!0}),r})(),f3e=(()=>{var t;class r{transform(e){return e?e+"h":"Enter value..."}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275pipe=Te({name:"placeholder",type:t,pure:!0,standalone:!0}),r})(),m3e=(()=>{var t;class r{transform(e,i){const s=new xr(i?.grid.locale),o=i?.column.pipeArgs,a=new Date(e.createdAt);return a.setMonth(a.getMonth()+3),s.transform(a,o?.format,o?.timezone)}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275pipe=Te({name:"deadline",type:t,pure:!0,standalone:!0}),r})(),_3e=(()=>{var t;class r{transform(e){const i=new Date(e.createdAt);i.setMonth(i.getMonth()+3);const s=i.getFullYear();return`Q${Math.floor(i.getMonth()/3)+1} ${s}`}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275pipe=Te({name:"milestone",type:t,pure:!0,standalone:!0}),r})(),v3e=(()=>{var t;class r{transform(e,i){return e.filter(o=>o.milestone===i).reduce((o,a)=>{const l=(new jf).transform(a.labels),c=l?.replace(/\s/g,"").toLowerCase(),d=o.findIndex(g=>g.name===l);return-1===d?(o.push({name:l,items:1,cssClass:c}),o):(o[d].items=o[d].items+1,o)},[])}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275pipe=Te({name:"filterTasks",type:t,pure:!0,standalone:!0}),r})(),x3e=(()=>{var t;class r{constructor(){this.themeChanged=new A,this.createIssueClicked=new A,this.icon="palette"}ngOnInit(){}onCreateIssueClicked(){this.createIssueClicked.emit()}onToggleTheme(){this.themeChanged.emit()}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275cmp=ie({type:t,selectors:[["app-header"]],outputs:{themeChanged:"themeChanged",createIssueClicked:"createIssueClicked"},standalone:!0,features:[re],decls:80,vars:1,consts:[["title","Task planner"],[1,"tp-app__logo-holder"],["version","1.1","id","Layer_1","xmlns","http://www.w3.org/2000/svg",0,"xmlns","xlink","http://www.w3.org/1999/xlink","x","0px","y","0px","viewBox","0 0 459 132.3",0,"xml","space","preserve",1,"tp-app__logo","tp-app__logo--dark",2,"enable-background","new 0 0 459 132.3"],["type","text/css"],["d","M130.3,16.1h9.3V87h-9.3V16.1z",1,"st1","text"],["d","M154.3,96.6c4.6,3,9.9,5,15.3,5c9.2,0,15.4-5.5,15.4-14.6v-3.5l-0.2-0.1c-3.3,2.3-8,3.7-13.1,3.7\n c-13.1,0-23.6-9.9-23.6-24.1c0-13.6,9.3-25.2,25-25.2c5,0,9,1.2,12.2,2.7l8.5-1.5v47.8c0,14.1-9.4,22.8-24.2,22.8\n c-5.9,0-11.3-1.6-15.3-3.6V96.6z M172.9,79.4c4.4,0,9.1-1.6,12-3.9V48.9c-3-1.9-7.7-3.3-12.1-3.3c-9.7,0-15.9,7.4-15.9,16.8\n C156.9,72.1,163.4,79.4,172.9,79.4z",1,"st1","text"],["d","M202.4,38.9h8.8v6.1l0.2,0.1c4.2-4.2,10.1-7.2,16.8-7.2c5.3,0,9.8,1.9,12.8,5.3c2.6,3,4,6.8,4,14.2V87h-8.8\n V58.9c0-5-0.7-7.9-2.3-9.8c-2-2.3-5.1-3.1-7.7-3.1c-5.5,0-11.6,3.4-15.1,8v33h-8.8V38.9z",1,"st1","text"],["d","M258.3,16.1c3.4,0,6.2,2.7,6.2,6.2s-2.7,6.2-6.2,6.2c-3.4,0-6.2-2.7-6.2-6.2S254.9,16.1,258.3,16.1z\n M253.9,38.9h8.8V87h-8.8V38.9z",1,"st1","text"],["d","M279.9,70.3V46.8H271v-7.9h8.9V25.7l8.8-1.5v14.6h14.5v7.9h-14.5v21.8c0,6,0.9,11.5,7.2,11.5\n c2.5,0,5.4-0.9,7.2-2.1v8.3c-2,1-5.4,1.8-8.7,1.8c-3.5,0-7.8-0.9-11-4.5C281.2,80.9,279.9,77,279.9,70.3z",1,"st1","text"],["d","M319.8,65.5c1.3,9.5,8.3,14.7,17.8,14.7c6.7,0,12.2-2.6,16.6-6v9.4c-4.3,2.7-11,4.5-17.2,4.5\n c-14.9,0-26-10-26-25.2c0-15.2,11.1-25.2,24-25.2c11.7,0,21.9,8.2,21.9,23.3c0,1.5-0.1,3.2-0.3,4.4H319.8z M320,58.5h28.4\n c-0.8-9.6-7.8-12.8-13.6-12.8C328.5,45.7,321.6,49.6,320,58.5z",1,"st1","text"],["d","M378,53.6V16.1h9.3v36.5c0,8.7,0.6,14.2,2.7,18.3c2.4,4.6,7.5,8.5,16.8,8.5c8.6,0,13.9-3.3,16.6-8.5\n c2.3-4.2,2.6-9.9,2.6-17.9V16.1h9v36.4c0,10.3-0.6,18.2-4.7,24.5c-4.5,6.9-13,11.1-24,11.1c-11.1,0-19.4-4.3-23.8-11.1\n C378.6,70.7,378,62.4,378,53.6z",1,"st1","text"],["d","M443.7,16.1h9.3V87h-9.3V16.1z",1,"st1","text"],[1,"tp-app__logo-graphic"],["cx","56.9","cy","61.5","r","52.6",1,"st10"],["d","M58.8,3.6C58,3.2,57.2,3,56.4,3.2c-2.1,0.5-4.6,4.2-6,5.8c-1.9,2.2-3.5,4.6-4.9,7.1\n c-7.1,12.6-6.8,27.5-3.8,41.3c1.9,8.9,4.9,17.5,8.2,25.8l14,0.1c0.6,0,2.8-7.2,3.1-8c0.9-2.6,1.8-5.2,2.6-7.8\n c1.4-4.6,2.6-9.3,3.5-14c1.4-7.4,1.9-15.1,0.7-22.6c-0.9-5.8-2.9-11.4-6-16.5C66.3,12,62.6,5.3,58.8,3.6z M57,41.9\n c-4.4,0-7.9-3.6-7.9-8c0-4.4,3.6-7.9,8-7.9c4.4,0,7.9,3.6,7.9,8C65,38.4,61.4,41.9,57,41.9z",1,"st1"],["d","M67.5,84.4C67.5,84.4,67.5,84.4,67.5,84.4c2.6-6.1,4.6-11.9,6.1-17.3c2.2,1.3,5.3,7.5,6.8,11.3\n c0.6,1.6,0.8,4.3,0.6,6c-0.5,3.5-1.7,9.7-4.9,14.1c-0.3,0.4-1,0.2-1-0.3c0.1-1.4,0.1-2.9,0-4.1c-0.1-2.3-1.2-4.5-2.9-6.1\n C70.6,86.4,68.7,84.9,67.5,84.4z",1,"st1"],["d","M38.7,93.8c-0.1,1.3-0.1,2.7,0,4.1c0,0.5-0.7,0.8-1,0.3c-3.2-4.4-4.4-10.6-4.8-14.1c-0.2-1.7,0-4.4,0.6-5.9\n c1.5-3.7,4.6-9.9,6.9-11.2c1.4,5.4,3.4,11.2,5.9,17.3c0,0,0,0,0,0c-1.3,0.5-3.2,2-4.7,3.4C39.9,89.3,38.8,91.5,38.7,93.8z",1,"st2"],["d","M55,3.8c0,0-21.5,23,1,79.5h-6.1C49.9,83.3,22,30,55,3.8z",1,"st2"],["points","57.8,104.2 57.8,104.2 57.8,104.2 \t\t\t\t"],["d","M44.2,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4\n c0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3\n c-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1\n c0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1\n C43,110.1,43.7,110.9,44.2,111.8z",1,"st3"],["id","SVGID_27_","d","M44.2,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4\n c0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3\n c-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1\n c0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1\n C43,110.1,43.7,110.9,44.2,111.8z"],["id","SVGID_2_"],[0,"xlink","href","#SVGID_27_",2,"overflow","visible"],["d","M52,111.6c0,0,15.5-11.3,6-25.2L77,87.5l-0.2,44.8l-26.5-0.1C50.3,132.2,44.1,115.7,52,111.6z",1,"st4"],["id","SVGID_29_","d","M44.2,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4\n c0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3\n c-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1\n c0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1\n C43,110.1,43.7,110.9,44.2,111.8z"],["id","SVGID_4_"],[0,"xlink","href","#SVGID_29_",2,"overflow","visible"],["version","1.1","id","Layer_1","xmlns","http://www.w3.org/2000/svg",0,"xmlns","xlink","http://www.w3.org/1999/xlink","x","0px","y","0px","viewBox","0 0 459 132.3",0,"xml","space","preserve",1,"tp-app__logo","tp-app__logo--light",2,"enable-background","new 0 0 459 132.3"],["d","M131.1,16.1h9.3V87h-9.3V16.1z",1,"st0"],["d","M155.1,96.6c4.6,3,9.9,5,15.3,5c9.2,0,15.4-5.5,15.4-14.6v-3.5l-0.2-0.1c-3.3,2.3-8,3.7-13.1,3.7\n\t\t\t\tc-13.1,0-23.6-9.9-23.6-24.1c0-13.6,9.3-25.2,25-25.2c5,0,9,1.2,12.2,2.7l8.5-1.5v47.8c0,14.1-9.4,22.8-24.2,22.8\n\t\t\t\tc-5.9,0-11.3-1.6-15.3-3.6V96.6z M173.7,79.4c4.4,0,9.1-1.6,12-3.9V48.9c-3-1.9-7.7-3.3-12.1-3.3c-9.7,0-15.9,7.4-15.9,16.8\n\t\t\t\tC157.8,72.1,164.2,79.4,173.7,79.4z",1,"st0"],["d","M203.3,38.9h8.8v6.1l0.2,0.1c4.2-4.2,10.1-7.2,16.8-7.2c5.3,0,9.8,1.9,12.8,5.3c2.6,3,4,6.8,4,14.2V87h-8.8\n\t\t\t\tV58.9c0-5-0.7-7.9-2.3-9.8c-2-2.3-5.1-3.1-7.7-3.1c-5.5,0-11.6,3.4-15.1,8v33h-8.8V38.9z",1,"st0"],["d","M259.1,16.1c3.4,0,6.2,2.7,6.2,6.2s-2.7,6.2-6.2,6.2c-3.4,0-6.2-2.7-6.2-6.2S255.7,16.1,259.1,16.1z\n\t\t\t\t M254.7,38.9h8.8V87h-8.8V38.9z",1,"st0"],["d","M280.8,70.3V46.8h-8.9v-7.9h8.9V25.7l8.8-1.5v14.6h14.5v7.9h-14.5v21.8c0,6,0.9,11.5,7.2,11.5\n\t\t\t\tc2.5,0,5.4-0.9,7.2-2.1v8.3c-2,1-5.4,1.8-8.7,1.8c-3.5,0-7.8-0.9-11-4.5C282,80.9,280.8,77,280.8,70.3z",1,"st0"],["d","M320.7,65.5c1.3,9.5,8.3,14.7,17.8,14.7c6.7,0,12.2-2.6,16.6-6v9.4c-4.3,2.7-11,4.5-17.2,4.5\n\t\t\t\tc-14.9,0-26-10-26-25.2c0-15.2,11.1-25.2,24-25.2c11.7,0,21.9,8.2,21.9,23.3c0,1.5-0.1,3.2-0.3,4.4H320.7z M320.9,58.5h28.4\n\t\t\t\tc-0.8-9.6-7.8-12.8-13.6-12.8C329.3,45.7,322.5,49.6,320.9,58.5z",1,"st0"],["d","M378.9,53.6V16.1h9.3v36.5c0,8.7,0.6,14.2,2.7,18.3c2.4,4.6,7.5,8.5,16.8,8.5c8.6,0,13.9-3.3,16.6-8.5\n\t\t\t\tc2.3-4.2,2.6-9.9,2.6-17.9V16.1h9v36.4c0,10.3-0.6,18.2-4.7,24.5c-4.5,6.9-13,11.1-24,11.1c-11.1,0-19.4-4.3-23.8-11.1\n\t\t\t\tC379.5,70.7,378.9,62.4,378.9,53.6z",1,"st0"],["d","M444.6,16.1h9.3V87h-9.3V16.1z",1,"st0"],["cx","57.8","cy","61.5","r","52.6",1,"st0"],["d","M59.7,3.6C58.9,3.2,58,3,57.2,3.2c-2.1,0.5-4.6,4.2-6,5.8c-1.9,2.2-3.5,4.6-4.9,7.1\n\t\t\t\t\tc-7.1,12.6-6.8,27.5-3.8,41.3c1.9,8.9,4.9,17.5,8.2,25.8l14,0.1c0.6,0,2.8-7.2,3.1-8c0.9-2.6,1.8-5.2,2.6-7.8\n\t\t\t\t\tc1.4-4.6,2.6-9.3,3.5-14c1.4-7.4,1.9-15.1,0.7-22.6c-0.9-5.8-2.9-11.4-6-16.5C67.1,12,63.4,5.3,59.7,3.6z M57.9,41.9\n\t\t\t\t\tc-4.4,0-7.9-3.6-7.9-8c0-4.4,3.6-7.9,8-7.9c4.4,0,7.9,3.6,7.9,8C65.9,38.4,62.3,41.9,57.9,41.9z",1,"st1"],["d","M68.3,84.4C68.3,84.4,68.3,84.4,68.3,84.4c2.6-6.1,4.6-11.9,6.1-17.3c2.2,1.3,5.3,7.5,6.8,11.3\n\t\t\t\t\tc0.6,1.6,0.8,4.3,0.6,6c-0.5,3.5-1.7,9.7-4.9,14.1c-0.3,0.4-1,0.2-1-0.3c0.1-1.4,0.1-2.9,0-4.1c-0.1-2.3-1.2-4.5-2.9-6.1\n\t\t\t\t\tC71.5,86.4,69.6,84.9,68.3,84.4z",1,"st1"],["d","M39.5,93.8c-0.1,1.3-0.1,2.7,0,4.1c0,0.5-0.7,0.8-1,0.3c-3.2-4.4-4.4-10.6-4.8-14.1c-0.2-1.7,0-4.4,0.6-5.9\n\t\t\t\t\tc1.5-3.7,4.6-9.9,6.9-11.2c1.4,5.4,3.4,11.2,5.9,17.3c0,0,0,0,0,0c-1.3,0.5-3.2,2-4.7,3.4C40.8,89.3,39.7,91.5,39.5,93.8z",1,"st2"],["d","M55.9,3.8c0,0-21.5,23,1,79.5h-6.1C50.8,83.3,22.9,30,55.9,3.8z",1,"st2"],["points","58.6,104.2 58.6,104.2 58.6,104.2 \t\t\t\t"],["d","M45.1,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4\n\t\t\t\t\tc0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3\n\t\t\t\t\tc-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1\n\t\t\t\t\tc0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1\n\t\t\t\t\tC43.9,110.1,44.6,110.9,45.1,111.8z",1,"st3"],["id","SVGID_15_","d","M45.1,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4\n\t\t\t\t\t\t\tc0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3\n\t\t\t\t\t\t\tc-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1\n\t\t\t\t\t\t\tc0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1\n\t\t\t\t\t\t\tC43.9,110.1,44.6,110.9,45.1,111.8z"],[0,"xlink","href","#SVGID_15_",2,"overflow","visible"],["d","M52.9,111.6c0,0,15.5-11.3,6-25.2l18.9,1.1l-0.2,44.8l-26.5-0.1C51.1,132.2,44.9,115.7,52.9,111.6z",1,"st4"],["id","SVGID_17_","d","M45.1,111.8c-0.5-0.9-0.7-1.9-0.5-3c0.4-1.9,1.9-3.3,3.8-3.5c2.7-0.3,4.9,1.8,4.9,4.4\n\t\t\t\t\t\t\tc0,1.3-0.7,2.2-1.2,3.3c-0.7,1.5-1.1,2.9-1.2,4.4c0,0.3,0,0.6,0,1c0,4.8,2.9,9,7.1,10.8c0.2,0.1,0.4-0.1,0.3-0.3\n\t\t\t\t\t\t\tc-0.3-0.8-0.4-1.6-0.4-2.4c0-2.4,1.2-4.3,3-5.8c1.9-1.6,3.8-3.1,5.5-4.8c1.8-1.7,3.7-3.3,4.9-5.4c1.4-2.4,2.2-5.1,2.2-8.1\n\t\t\t\t\t\t\tc0-6.2-3.7-12-9.4-14.6c-2.8-1.3-5.9-1.7-9-1.2c-6.4,1-11.7,6.1-13.1,12.4c-0.5,2.3-0.4,4.7,0.1,7c0.3,1.1,0.6,2.1,1.1,3.1\n\t\t\t\t\t\t\tC43.9,110.1,44.6,110.9,45.1,111.8z"],[0,"xlink","href","#SVGID_17_",2,"overflow","visible"],["igxButton","contained","igxRipple","","igxRippleCentered","true",3,"click"],["igxIconButton","flat",3,"click"]],template:function(e,i){1&e&&(f(0,"igx-navbar",0)(1,"igx-navbar-action")(2,"div",1),Po(),f(3,"svg",2)(4,"style",3),C(5," .st0{fill:#27265F;} .st1{fill:#FFFFFF;} .st2{fill:#0099FF;} .st3{fill:#F49021;} .st4{clip-path:url(#SVGID_2_);fill:#F05A2B;} .st5{fill:#6E6F71;} .st6{clip-path:url(#SVGID_6_);fill:#6E6F71;} .st7{clip-path:url(#SVGID_6_);fill:#0099FF;} .st8{clip-path:url(#SVGID_6_);fill:#FFFFFF;} .st9{clip-path:url(#SVGID_8_);fill:#F05A2B;} .st10{opacity:0.22;fill:#FFFFFF;} .st11{clip-path:url(#SVGID_12_);fill:#F05A2B;} .st12{clip-path:url(#SVGID_16_);fill:#F05A2B;} .st13{clip-path:url(#SVGID_20_);fill:#F05A2B;} .st14{clip-path:url(#SVGID_24_);fill:#F05A2B;} .st15{clip-path:url(#SVGID_28_);fill:#F05A2B;} .st16{clip-path:url(#SVGID_32_);fill:#F05A2B;} .st17{fill:#CCCBCB;} .st18{clip-path:url(#SVGID_36_);fill:#CCCBCB;} .st19{clip-path:url(#SVGID_36_);fill:#0099FF;} .st20{clip-path:url(#SVGID_36_);fill:#FFFFFF;}\n"),m(),f(6,"g")(7,"g")(8,"g"),V(9,"path",4)(10,"path",5)(11,"path",6)(12,"path",7)(13,"path",8)(14,"path",9)(15,"path",10)(16,"path",11),m()(),f(17,"g",12),V(18,"circle",13),f(19,"g")(20,"g"),V(21,"path",14)(22,"path",15)(23,"path",16)(24,"path",17),m(),f(25,"g"),V(26,"polygon",18)(27,"path",19),f(28,"g")(29,"defs"),V(30,"path",20),m(),f(31,"clipPath",21),V(32,"use",22),m(),V(33,"path",23),m(),f(34,"g")(35,"defs"),V(36,"path",24),m(),f(37,"clipPath",25),V(38,"use",26),m()()()()()()(),f(39,"svg",27)(40,"style",3),C(41," .st0{fill:#222;} .st1{fill:#FFFFFF;} .st2{fill:#0099FF;} .st3{fill:#F49021;} .st4{clip-path:url(#SVGID_2_);fill:#F05A2B;} .st5{fill:#6E6F71;} .st6{clip-path:url(#SVGID_6_);fill:#6E6F71;} .st7{clip-path:url(#SVGID_6_);fill:#0099FF;} .st8{clip-path:url(#SVGID_6_);fill:#FFFFFF;} .st9{clip-path:url(#SVGID_8_);fill:#F05A2B;} .st10{opacity:0.22;fill:#FFFFFF;} .st11{clip-path:url(#SVGID_12_);fill:#F05A2B;} .st12{clip-path:url(#SVGID_16_);fill:#F05A2B;} .st13{clip-path:url(#SVGID_20_);fill:#F05A2B;} .st14{clip-path:url(#SVGID_24_);fill:#F05A2B;} .st15{clip-path:url(#SVGID_28_);fill:#F05A2B;} .st16{clip-path:url(#SVGID_32_);fill:#F05A2B;} .st17{fill:#CCCBCB;} .st18{clip-path:url(#SVGID_36_);fill:#CCCBCB;} .st19{clip-path:url(#SVGID_36_);fill:#0099FF;} .st20{clip-path:url(#SVGID_36_);fill:#FFFFFF;}\n"),m(),f(42,"g")(43,"g")(44,"g"),V(45,"path",28)(46,"path",29)(47,"path",30)(48,"path",31)(49,"path",32)(50,"path",33)(51,"path",34)(52,"path",35),m()(),f(53,"g",12),V(54,"circle",36),f(55,"g")(56,"g"),V(57,"path",37)(58,"path",38)(59,"path",39)(60,"path",40),m(),f(61,"g"),V(62,"polygon",41)(63,"path",42),f(64,"g")(65,"defs"),V(66,"path",43),m(),f(67,"clipPath",21),V(68,"use",44),m(),V(69,"path",45),m(),f(70,"g")(71,"defs"),V(72,"path",46),m(),f(73,"clipPath",25),V(74,"use",47),m()()()()()()()()(),Zh(),f(75,"button",48),T("click",function(){return i.onCreateIssueClicked()}),C(76,"CREATE ISSUE"),m(),f(77,"button",49),T("click",function(){return i.onToggleTheme()}),f(78,"igx-icon"),C(79),m()()()),2&e&&(u(79),Y(i.icon))},dependencies:[cL,sw,Ut,Fe,Bs],styles:[".tp-app__logo-holder{position:relative;height:30px;width:100px;margin-top:5px} .tp-app__logo{position:absolute;top:0;left:0;height:30px;width:100px;transition:opacity .24s ease-in-out;opacity:1} .tp-app-light-theme .tp-app__logo--dark{opacity:0} .tp-app-dark-theme .tp-app__logo--light{opacity:0}"]}),r})();const y3e=["tasksGrid"],w3e=["editModeDropdown"],C3e=["legend"],I3e=["addTaskDialog"],b3e=["editTaskDialog"],D3e=["transactionsDialog"],S3e=["transactionsGrid"],T3e=["batchEditingGrid"],E3e=["batchEditDialog"];function M3e(t,r){if(1&t&&(f(0,"igx-drop-down-item",61),C(1),m()),2&t){const n=r.$implicit,e=r.index;h("selected",p().isEditModeSelected(e)),u(),Q(" ",n," ")}}function A3e(t,r){if(1&t){const n=z();f(0,"div",62)(1,"div",63)(2,"div",64)(3,"div",65)(4,"span",66),C(5,"Task Comments"),m(),f(6,"igx-input-group",67)(7,"textarea",68),it("ngModelChange",function(i){const o=I(n).$implicit;return tt(o.body,i)||(o.body=i),b(i)}),m()()()(),f(8,"div",64)(9,"div",65)(10,"span",69),C(11,"Acceptance criteria"),m(),f(12,"igx-checkbox",70),C(13,"Includes API & Docs"),m(),f(14,"igx-checkbox",70),C(15,"Includes unit tests"),m(),f(16,"igx-checkbox",70),C(17,"All checks passed"),m()()()()()}if(2&t){const n=r.$implicit,e=p();u(6),h("type",e.inputType),u(),Je("ngModel",n.body)}}function k3e(t,r){if(1&t&&(f(0,"div",73),V(1,"igx-badge",74),m()),2&t){const n=r.$implicit;u(),gn(n.cssClass),h("value",n.name+" "+n.items)}}function R3e(t,r){if(1&t&&(f(0,"div",71)(1,"span"),C(2),m(),y(3,k3e,2,3,"div",72),R(4,"filterTasks"),m()),2&t){const n=r.$implicit,e=p();u(2),Y(n.value),u(),h("ngForOf",Gt(4,2,e.tasks,n.value))}}function P3e(t,r){1&t&&(C(0),R(1,"statusLabel")),2&t&&Q(" ",ht(1,1,r.$implicit)," ")}function F3e(t,r){1&t&&y(0,P3e,2,3,"ng-template",52)}function O3e(t,r){if(1&t&&(f(0,"igx-select-item",74),C(1),m()),2&t){const n=r.$implicit;h("value",n.value),u(),Y(n.value)}}function N3e(t,r){if(1&t){const n=z();f(0,"igx-select",78),it("ngModelChange",function(i){const o=I(n).cell;return tt(o.editValue,i)||(o.editValue=i),b(i)}),R(1,"statusLabel"),y(2,O3e,2,2,"igx-select-item",30),m()}if(2&t){const n=r.cell,e=r.$implicit,i=p(3);h("placeholder",ht(1,4,e)),Je("ngModel",n.editValue),h("overlaySettings",i.overlaySettings),u(2),h("ngForOf",i.statuses)}}function V3e(t,r){1&t&&y(0,N3e,3,6,"ng-template",77)}function L3e(t,r){if(1&t&&(f(0,"div",79),V(1,"igx-avatar",80),f(2,"span")(3,"span",81),C(4),m()()()),2&t){const n=r.cell,e=p(3);u(),h("src",e.setAvatarUrl(n.row.data.assignee)),u(3),Y(e.getValue(n.row.data.assignee))}}function G3e(t,r){1&t&&y(0,L3e,5,2,"ng-template",52)}function H3e(t,r){if(1&t&&(f(0,"igx-select-item",74)(1,"div",83),V(2,"igx-avatar",80),f(3,"span")(4,"span",81),C(5),m()()()()),2&t){const n=r.$implicit;h("value",n.login),u(2),h("src",n.avatarUrl),u(3),Y(n.login)}}function B3e(t,r){if(1&t){const n=z();f(0,"igx-select",82),it("ngModelChange",function(i){const o=I(n).cell;return tt(o.editValue,i)||(o.editValue=i),b(i)}),y(1,H3e,6,3,"igx-select-item",30),m()}if(2&t){const n=r.cell,e=r.$implicit,i=p(3);h("placeholder",e),Je("ngModel",n.editValue),h("overlaySettings",i.overlaySettings),u(),h("ngForOf",i.teamMembers)}}function z3e(t,r){1&t&&y(0,B3e,2,4,"ng-template",77)}function U3e(t,r){if(1&t&&(C(0),R(1,"deadline")),2&t){const n=r.cell;Q(" ",Gt(1,1,n.row.data,n)," ")}}function j3e(t,r){1&t&&y(0,U3e,2,4,"ng-template",52)}function W3e(t,r){if(1&t&&V(0,"igx-linear-bar",84),2&t){const n=r.cell,e=p(3);h("max",100)("value",e.calcProgress(n.row.data))("animate",!1)}}function $3e(t,r){1&t&&y(0,W3e,1,3,"ng-template",52)}function q3e(t,r){1&t&&(C(0),R(1,"priorityLabel")),2&t&&Q(" ",ht(1,1,r.cell)," ")}function K3e(t,r){1&t&&y(0,q3e,2,3,"ng-template",52)}function Z3e(t,r){if(1&t&&(f(0,"igx-select-item",74),C(1),m()),2&t){const n=r.$implicit;h("value",n.value),u(),Y(n.value)}}function Y3e(t,r){if(1&t){const n=z();f(0,"igx-select",78),it("ngModelChange",function(i){const o=I(n).cell;return tt(o.editValue,i)||(o.editValue=i),b(i)}),R(1,"priorityLabel"),y(2,Z3e,2,2,"igx-select-item",30),m()}if(2&t){const n=r.cell,e=p(3);h("placeholder",ht(1,4,n)),Je("ngModel",n.editValue),h("overlaySettings",e.overlaySettings),u(2),h("ngForOf",e.priority)}}function Q3e(t,r){1&t&&y(0,Y3e,3,6,"ng-template",77)}function X3e(t,r){if(1&t&&(f(0,"div",86)(1,"span")(2,"strong"),C(3),m(),f(4,"span"),C(5),m()(),f(6,"span")(7,"strong"),C(8),m(),f(9,"span"),C(10),R(11,"date"),m()()()),2&t){const n=r.$implicit;u(3),Y(n[0].label),u(2),Y(n[0].summaryResult),u(3),Y(n[1].label),u(2),Y(Gt(11,4,n[1].summaryResult,"mediumDate"))}}function J3e(t,r){1&t&&y(0,X3e,12,7,"ng-template",85)}function ePe(t,r){1&t&&(C(0),R(1,"placeholder")),2&t&&Q(" ",ht(1,1,r.$implicit)," ")}function tPe(t,r){1&t&&y(0,ePe,2,3,"ng-template",52)}function iPe(t,r){if(1&t&&(f(0,"span",88),C(1),R(2,"placeholder"),m()),2&t){const n=p().$implicit;u(),Q(" ",ht(2,1,n)," ")}}function nPe(t,r){if(1&t&&(j(0),C(1),R(2,"placeholder"),W()),2&t){const n=p().$implicit;u(),Q(" ",ht(2,1,n)," ")}}function rPe(t,r){if(1&t&&y(0,iPe,3,3,"span",87)(1,nPe,3,3,"ng-container",76),2&t){const n=r.$implicit;h("ngIf",!n),u(),h("ngIf",n)}}function sPe(t,r){1&t&&y(0,rPe,2,2,"ng-template",52)}function oPe(t,r){if(1&t&&(f(0,"span",88),C(1),R(2,"placeholder"),m()),2&t){const n=p().$implicit;u(),Q(" ",ht(2,1,n)," ")}}function aPe(t,r){if(1&t&&(j(0),C(1),R(2,"placeholder"),W()),2&t){const n=p().$implicit;u(),Q(" ",ht(2,1,n)," ")}}function lPe(t,r){if(1&t&&y(0,oPe,3,3,"span",87)(1,aPe,3,3,"ng-container",76),2&t){const n=r.$implicit;h("ngIf",!n),u(),h("ngIf",n)}}function cPe(t,r){1&t&&y(0,lPe,2,2,"ng-template",52)}function dPe(t,r){if(1&t&&(f(0,"span",88),C(1),R(2,"placeholder"),m()),2&t){const n=p().$implicit;u(),Q(" ",ht(2,1,n)," ")}}function uPe(t,r){if(1&t&&(j(0),C(1),W()),2&t){const n=p().$implicit;u(),Q(" ",n," ")}}function hPe(t,r){if(1&t&&y(0,dPe,3,3,"span",87)(1,uPe,2,1,"ng-container",76),2&t){const n=r.$implicit;h("ngIf",!n),u(),h("ngIf",n)}}function gPe(t,r){1&t&&y(0,hPe,2,2,"ng-template",52)}function pPe(t,r){if(1&t&&(f(0,"igx-column",75),y(1,F3e,1,0,null,76)(2,V3e,1,0,null,76)(3,G3e,1,0,null,76)(4,z3e,1,0,null,76)(5,j3e,1,0,null,76)(6,$3e,1,0,null,76)(7,K3e,1,0,null,76)(8,Q3e,1,0,null,76)(9,J3e,1,0,null,76)(10,tPe,1,0,null,76)(11,sPe,1,0,null,76)(12,cPe,1,0,null,76)(13,gPe,1,0,null,76),m()),2&t){const n=r.$implicit,e=p();h("width",n.width)("sortable",n.sortable)("required",n.required)("resizable",n.resizable)("minlength",n.minlength)("editable",n.editable&&e.isEditingEnabled)("hasSummary",n.hasSummary)("filterable",n.filterable)("formatter",n.formatter)("groupable",n.groupable)("sortStrategy",n.sortStrategy)("cellClasses",n.cellClasses)("field",n.field)("header",n.header)("dataType",n.dataType)("pinned",n.pinned)("hidden",n.hidden)("hasSummary",n.hasSummary),u(),h("ngIf","labels"===n.field),u(),h("ngIf","labels"===n.field),u(),h("ngIf","assignee.login"===n.field),u(),h("ngIf","assignee.login"===n.field),u(),h("ngIf","deadline"===n.field),u(),h("ngIf","progress"===n.field),u(),h("ngIf","priority"===n.field),u(),h("ngIf","priority"===n.field),u(),h("ngIf","createdAt"===n.field),u(),h("ngIf","deadline"===n.field),u(),h("ngIf","estimation"===n.field),u(),h("ngIf","hours_spent"===n.field),u(),h("ngIf","progress"===n.field)}}function fPe(t,r){1&t&&(f(0,"igx-icon"),C(1,"unfold_more_double"),m())}function mPe(t,r){1&t&&(f(0,"igx-icon"),C(1,"keyboard_double_arrow_up"),m())}function _Pe(t,r){1&t&&(f(0,"igx-icon"),C(1,"keyboard_double_arrow_down"),m())}function vPe(t,r){if(1&t&&(f(0,"igx-select-item",74)(1,"div",83),V(2,"igx-avatar",80),f(3,"span")(4,"span",81),C(5),m()()()()),2&t){const n=r.$implicit;h("value",n.login),u(2),h("src",n.avatarUrl),u(3),Y(n.login)}}function xPe(t,r){if(1&t&&(f(0,"igx-select-item",74),C(1),m()),2&t){const n=r.$implicit;h("value",n.value),u(),Y(n.value)}}function yPe(t,r){if(1&t){const n=z();f(0,"igx-input-group",89),T("click",function(){return b((0,I(n).openDialog)())}),f(1,"label",90),C(2,"Deadline"),m(),V(3,"input",91),f(4,"igx-prefix")(5,"igx-icon"),C(6,"today"),m()()()}if(2&t){const n=r.displayData;h("type",p().inputType),u(3),h("value",n)}}function wPe(t,r){if(1&t&&(f(0,"igx-select-item",74)(1,"div",83),V(2,"igx-avatar",80),f(3,"span")(4,"span",81),C(5),m()()()()),2&t){const n=r.$implicit;h("value",n),u(2),h("src",n.avatarUrl),u(3),Y(n.login)}}function CPe(t,r){if(1&t&&(f(0,"igx-select-item",74),C(1),m()),2&t){const n=r.$implicit;h("value",n.value),u(),Y(n.value)}}function IPe(t,r){if(1&t){const n=z();f(0,"igx-input-group",89),T("click",function(){return b((0,I(n).openDialog)())}),f(1,"label",90),C(2,"Deadline"),m(),V(3,"input",91),f(4,"igx-prefix")(5,"igx-icon"),C(6,"today"),m()()()}if(2&t){const n=r.displayData;h("type",p().inputType),u(3),h("value",n)}}function bPe(t,r){if(1&t&&(f(0,"span"),C(1),m()),2&t){const n=r.$implicit,e=p();gn(e.classFromType(n)),u(),Y(e.typeFormatter(n))}}function DPe(t,r){if(1&t&&(f(0,"span",92),C(1),m()),2&t){const n=r.$implicit,e=p();u(),Y(e.stateFormatter(n))}}function SPe(t,r){1&t&&(C(0),R(1,"statusLabel")),2&t&&Q(" ",ht(1,1,r.$implicit)," ")}function TPe(t,r){1&t&&y(0,SPe,2,3,"ng-template",52)}function EPe(t,r){if(1&t&&(f(0,"igx-select-item",74),C(1),m()),2&t){const n=r.$implicit;h("value",n.value),u(),Y(n.value)}}function MPe(t,r){if(1&t){const n=z();f(0,"igx-select",82),it("ngModelChange",function(i){const o=I(n).cell;return tt(o.editValue,i)||(o.editValue=i),b(i)}),R(1,"statusLabel"),y(2,EPe,2,2,"igx-select-item",30),m()}if(2&t){const n=r.cell,e=r.$implicit,i=p(3);h("placeholder",ht(1,4,e)),Je("ngModel",n.editValue),h("overlaySettings",i.overlaySettings),u(2),h("ngForOf",i.statuses)}}function APe(t,r){1&t&&y(0,MPe,3,6,"ng-template",77)}function kPe(t,r){if(1&t&&(f(0,"div",79),V(1,"igx-avatar",80),f(2,"span")(3,"span",81),C(4),m()()()),2&t){const n=r.cell,e=r.$implicit;u(),h("src",n.value.avatarUrl),u(3),Y(e.login)}}function RPe(t,r){1&t&&y(0,kPe,5,2,"ng-template",52)}function PPe(t,r){if(1&t&&(f(0,"igx-select-item",74)(1,"div",83),V(2,"igx-avatar",80),f(3,"span")(4,"span",81),C(5),m()()()()),2&t){const n=r.$implicit;h("value",n.login),u(2),h("src",n.avatarUrl),u(3),Y(n.login)}}function FPe(t,r){if(1&t){const n=z();f(0,"igx-select",82),it("ngModelChange",function(i){const o=I(n).cell;return tt(o.editValue,i)||(o.editValue=i),b(i)}),y(1,PPe,6,3,"igx-select-item",30),m()}if(2&t){const n=r.cell,e=r.$implicit,i=p(3);h("placeholder",e.login),Je("ngModel",n.editValue),h("overlaySettings",i.overlaySettings),u(),h("ngForOf",i.teamMembers)}}function OPe(t,r){1&t&&y(0,FPe,2,4,"ng-template",77)}function NPe(t,r){if(1&t&&(C(0),R(1,"deadline")),2&t){const n=r.cell;Q(" ",Gt(1,1,n.row.data,n)," ")}}function VPe(t,r){1&t&&y(0,NPe,2,4,"ng-template",52)}function LPe(t,r){if(1&t&&(C(0),R(1,"percent")),2&t){const n=r.cell;Q(" ",ht(1,1,p(3).calcProgress(n.row.data)/100)," ")}}function GPe(t,r){1&t&&y(0,LPe,2,3,"ng-template",52)}function HPe(t,r){1&t&&(C(0),R(1,"priorityLabel")),2&t&&Q(" ",ht(1,1,r.cell)," ")}function BPe(t,r){1&t&&y(0,HPe,2,3,"ng-template",52)}function zPe(t,r){if(1&t&&(f(0,"igx-select-item",74),C(1),m()),2&t){const n=r.$implicit;h("value",n.value),u(),Y(n.value)}}function UPe(t,r){if(1&t){const n=z();f(0,"igx-select",82),it("ngModelChange",function(i){const o=I(n).cell;return tt(o.editValue,i)||(o.editValue=i),b(i)}),R(1,"priorityLabel"),y(2,zPe,2,2,"igx-select-item",30),m()}if(2&t){const n=r.cell,e=p(3);h("placeholder",ht(1,4,n)),Je("ngModel",n.editValue),h("overlaySettings",e.overlaySettings),u(2),h("ngForOf",e.priority)}}function jPe(t,r){1&t&&y(0,UPe,3,6,"ng-template",77)}function WPe(t,r){if(1&t&&(f(0,"igx-column",93),y(1,TPe,1,0,null,76)(2,APe,1,0,null,76)(3,RPe,1,0,null,76)(4,OPe,1,0,null,76)(5,VPe,1,0,null,76)(6,GPe,1,0,null,76)(7,BPe,1,0,null,76)(8,jPe,1,0,null,76),m()),2&t){const n=r.$implicit,e=p();h("width",n.width)("sortable",n.sortable)("resizable",n.resizable)("editable",n.editable&&e.isEditingEnabled)("hasSummary",n.hasSummary)("filterable",n.filterable)("formatter",n.formatter)("groupable",n.groupable)("sortStrategy",n.sortStrategy)("cellClasses",n.cellClasses)("field",n.field)("header",n.header)("dataType",n.dataType)("pinned",n.pinned)("hidden",n.hidden),u(),h("ngIf","labels"===n.field),u(),h("ngIf","labels"===n.field),u(),h("ngIf","assignee"===n.field),u(),h("ngIf","assignee"===n.field),u(),h("ngIf","deadline"===n.field),u(),h("ngIf","progress"===n.field),u(),h("ngIf","priority"===n.field),u(),h("ngIf","priority"===n.field)}}var PT=function(t){return t[t.cellEditing=0]="cellEditing",t[t.rowEditing=1]="rowEditing",t[t.none=2]="none",t}(PT||{});let FL=(()=>{var t;class r{constructor(e){this.datePipe=e,this.darkTheme=!0,this.editMode=0,this.editModes=["Cell Editing","Row Editing","No Editing"],this.addTaskForm={},this.editTaskForm={},this.transactionsData=[],this.inputType="material",this.selectOptions=[5,15,20,50],this.disabledDates=[{dateRange:[new Date],type:Or.Before}],this.gridIsLoading=!0,this.statuses=[{value:"in-review"},{value:"in-development"},{value:"resolved"},{value:"not-a-bug"}],this.priority=[{value:"low"},{value:"medium"},{value:"high"},{value:"critical"}],this.dialogOverlaySettings={modal:!0,closeOnOutsideClick:!0},this.overlaySettings={modal:!1,closeOnOutsideClick:!0},this.sortingOptions={mode:"single"},this.calcProgress=FT,this.dayFormatter=new Intl.DateTimeFormat("en",{weekday:"long"}),this.monthFormatter=new Intl.DateTimeFormat("en",{month:"long"}),this.isResolved=(i,s)=>"resolved"===this.getStatusLabel(i.labels),this.isNew=(i,s)=>"in-review"===this.getStatusLabel(i.labels),this.isInDevelopment=(i,s)=>"in-development"===this.getStatusLabel(i.labels),this.notABug=(i,s)=>"not-a-bug"===this.getStatusLabel(i.labels),this.isCritical=(i,s)=>"critical"===i[s],this.isLow=(i,s)=>"low"===i[s],this.isHigh=(i,s)=>"high"===i[s],this.isDelayed=(i,s)=>i.hours_spent>i.estimation,this.statusClasses={resolved:this.isResolved,inreview:this.isNew,indevelopment:this.isInDevelopment,notabug:this.notABug},this.priorityClasses={critical:this.isCritical,low:this.isLow,high:this.isHigh},this.delayedClasses={delayed:this.isDelayed},this.milestoneSort=$Pe.instance(),this.progressSort=qPe.instance(),this.filterStrategy=ZPe.instance(),this.statusSort=KPe.instance(),this.defaultSort=ho.instance(),this.columns=[{field:"pullRequest",header:"Type",width:"120px",dataType:"string",filterable:!0,hidden:!0,sortStrategy:this.defaultSort},{field:"number",header:"ID",width:"120px",dataType:"number",formatter:this.formatID,sortable:!1,sortStrategy:this.defaultSort},{field:"title",header:"Issue",width:"380px",dataType:"string",filterable:!0,editable:!0,sortStrategy:this.defaultSort,required:!0,minlength:4},{field:"milestone",header:"Milestone",width:"120px",dataType:"string",editable:!0,sortable:!0,sortStrategy:this.milestoneSort,hidden:!0},{field:"labels",header:"Status",width:"130px",dataType:"string",sortable:!0,filterable:!0,editable:!0,cellClasses:this.statusClasses,sortStrategy:this.statusSort},{field:"assignee.login",header:"Assignee",width:"180px",dataType:"string",editable:!0,filterable:!0,sortable:!0,sortStrategy:this.defaultSort},{field:"createdAt",header:"Created",width:"130px",dataType:"date",sortable:!0,filterable:!0,editable:!1,sortStrategy:this.defaultSort,hasSummary:!0},{field:"deadline",header:"Deadline",width:"130px",dataType:"date",sortable:!0,filterable:!0,editable:!0,sortStrategy:this.defaultSort},{field:"estimation",header:"Estimation",width:"120px",dataType:"number",editable:!0,cellClasses:this.delayedClasses,sortStrategy:this.defaultSort},{field:"hours_spent",header:"Hours Spent",width:"120px",dataType:"number",editable:!0,cellClasses:this.delayedClasses,sortStrategy:this.defaultSort},{field:"progress",header:"Progress",width:"95px",dataType:"number",sortable:!0,sortStrategy:this.progressSort},{field:"priority",header:"Priority",width:"125px",dataType:"string",sortable:!0,filterable:!0,editable:!0,cellClasses:this.priorityClasses,sortStrategy:this.defaultSort}],this._filteringStrategy=new Eu,this.formatDate=i=>`${this.dayFormatter.format(i)}, ${i.getDate()} ${this.monthFormatter.format(i)}, ${i.getFullYear()}`,this.columnValuesStrategy=(i,s,o)=>{this.getColumnData(i,s,a=>o(a))}}ngOnInit(){this.overlaySettings.outlet=this.outlet,this.dialogOverlaySettings.outlet=this.outlet;const e=d3e.map(a=>{const l=(new _3e).transform(a);return a.milestone=l,a});this.populateDataComponents(e),this.teamMembers=kT,this.transactionsData=this.grid.transactions.getAggregatedChanges(!0),this.grid.transactions.onStateUpdate.subscribe(()=>{this.transactionsData=this.grid.transactions.getAggregatedChanges(!0)}),this.grid.groupingExpressions=[{dir:dt.Desc,fieldName:"milestone",ignoreCase:!1,strategy:this.milestoneSort}];const i=new Date,o=`Q${Math.floor(i.getMonth()/3)+1} ${i.getFullYear()}`;this.grid.groupingExpansionState=[{expanded:!0,hierarchy:[{fieldName:"milestone",value:o}]}]}formatID(e){return"#"+e}stateFormatter(e){return JSON.stringify(e)}typeFormatter(e){return e.toUpperCase()}classFromType(e){return`transaction--${e.toLowerCase()}`}formatHours(e){return e?e+"h":""}formatPieLabel(e){return e.item.Value+" "+e.item.Label}formatDateLabel(e){return e.date.toLocaleDateString(void 0,{month:"short"})}undo(){this.grid.transactions.undo()}redo(){this.grid.transactions.redo()}commit(){this.grid.transactions.commit(this.tasks),this.transactionsDialog.close()}commitBatchEdits(){const e=this.batchEditingGrid.data;for(let i=0;is.index===e.cellID.columnID).field&&e.oldValue&&(e.cancel=!0)}onCellEdit(e){switch(this.grid.columnList.find(s=>s.index===e.cellID.columnID).field){case"started_on":{const s=this.grid.getRowByIndex(e.cellID.rowIndex).data.deadline;e.newValue>s&&(e.cancel=!0,this.toast.open("Started date cannot exceed Deadline date !"));break}case"deadline":{const s=this.grid.getRowByIndex(e.cellID.rowIndex).data.createdAt;e.newValues.login===e.login).avatarUrl:kT.find(s=>s.login===e).avatarUrl,i}getValue(e){let i;if(e)return i=e.login?e.login:e,i}openCommitDialog(){this.transactionsDialog.open(this.dialogOverlaySettings),this.transactionsGrid.reflow()}openAddTaskDialog(){this.addTaskDialog.open(this.dialogOverlaySettings)}openBatchEditDialog(){const e=this.grid.selectedRows,i=this.tasks.filter(s=>e.indexOf(s.id)>-1);this.batchEditingData=i,this.batchEditDialog.open(this.dialogOverlaySettings)}populateDataComponents(e){const i=e.filter(s=>null===s.pullRequest).map(s=>this.parseDate(s));this.tasks=i.filter(s=>s.labels.filter(o=>o.name.includes("status")).length>0),this.gridIsLoading=!1,this.unassignedTasks=i.filter(s=>0===s.labels.filter(o=>o.name.includes("status")).length)}emptyFieldMessage(){this.toast.open("Please fill out all required fields (Issue and Deadline).")}toggleTheme(){this.darkTheme=!this.darkTheme,this.inputType=this.darkTheme?"material":"fluent"}onBacklogItemAction(e){switch(e.action){case"edit":this.editTaskForm=e.issue,this.editTaskForm.deadline=null,this.editTaskForm.milestone=null,this.editTaskDialog.open(this.dialogOverlaySettings);break;case"drag":case"release":this.editTaskForm=e.issue,this.toggleGridBodyHighlight()}}onDropContainerEnterLeave(e){this.toggleGroupRowHighlight()}toggleGroupRowHighlight(){this.grid.tbody.nativeElement.querySelectorAll("igx-grid-groupby-row").forEach(i=>{i.querySelector(".igx-group-label").firstElementChild.innerText===this.editTaskForm.milestone&&i.classList.toggle("tp-app__groupby-row-highlight")})}toggleGridBodyHighlight(){this.grid.tbody.nativeElement.classList.toggle("tp-app__drop-area-entered")}onItemDropped(e){this.toggleGridBodyHighlight(),this.addBacklogItem(this.editTaskForm)}addBacklogItem(e){this.grid.addRow(e),this.backlog.deleteItem(e)}deadlineChanged(e,i){const s=e.getFullYear(),a=`Q${Math.ceil((e.getMonth()+1)/3)} ${s}`;i.milestone=a}getDeadlineValue(e){const i=e.column.pipeArgs,s=new Date(e.row.data);s.setMonth(s.getMonth()+3);const o=this.datePipe.transform(s,i.format,i.timezone,e.grid.locale);return console.log(o),o}getStatusLabel(e){return(new jf).transform(e)}getAssignee(e){return e.login}get undoEnabled(){return this.grid.transactions.canUndo}get redoEnabled(){return this.grid.transactions.canRedo}get hasTransactions(){return this.grid.transactions.getAggregatedChanges(!1).length>0}get hasSelection(){return this.grid.selectedRows.length>0}get isRowEditingEnabled(){return this.editMode===PT.rowEditing}get isEditingEnabled(){return this.editMode!==PT.none}get selectedEditMode(){return this.editModes[this.editMode]}getColumnData(e,i,s){setTimeout(()=>{let o=[];return"labels"===e.field?(o=this.statuses.map(l=>l.value),void s(o)):"assignee.login"===e.field?(o=this.teamMembers.map(l=>l.login),void s(o)):"priority"===e.field?(o=this.priority.map(l=>l.value),void s(o)):(o=this._filteringStrategy.filter(this.tasks,i,null,null).map(l=>l[e.field]),void s(o))},1e3)}parseDate(e){return e.createdAt=e.createdAt?new Date(e.createdAt):null,e}}return(t=r).\u0275fac=function(e){return new(e||t)(v(xr))},t.\u0275cmp=ie({type:t,selectors:[["app-taskplanner"]],viewQuery:function(e,i){if(1&e&&(F(y3e,7,Gc),F(w3e,7,Kr),F(C3e,7),F(ET,7,ET),F(I3e,7),F(b3e,7),F(D3e,7),F(S3e,7),F(T3e,7),F(E3e,7),F($n,7),F(RT,7,RT)),2&e){let s;D(s=S())&&(i.grid=s.first),D(s=S())&&(i.editModeDropdown=s.first),D(s=S())&&(i.legend=s.first),D(s=S())&&(i.toast=s.first),D(s=S())&&(i.addTaskDialog=s.first),D(s=S())&&(i.editTaskDialog=s.first),D(s=S())&&(i.transactionsDialog=s.first),D(s=S())&&(i.transactionsGrid=s.first),D(s=S())&&(i.batchEditingGrid=s.first),D(s=S())&&(i.batchEditDialog=s.first),D(s=S())&&(i.outlet=s.first),D(s=S())&&(i.backlog=s.first)}},hostVars:2,hostBindings:function(e,i){2&e&&ee("tp-app",i.grid)},standalone:!0,features:[pe([RL,xr,{provide:sr,useExisting:Pv}]),re],decls:114,vars:92,consts:[[3,"themeChanged","createIssueClicked"],[1,"tp-app__inner"],[1,"tp-app__backlog",3,"data","listItemAction"],["id","tasksGrid","igxDrop","",3,"isLoading","height","batchEditing","data","autoGenerate","primaryKey","rowEditable","groupsExpanded","allowFiltering","allowAdvancedFiltering","filterMode","uniqueColumnValuesStrategy","filterStrategy","cellSelection","rowSelection","moving","sortingOptions","sortHeaderIconTemplate","sortAscendingHeaderIconTemplate","sortDescendingHeaderIconTemplate","cellEditEnter","cellEdit","dropped","enter","leave"],["tasksGrid",""],[3,"page","totalRecords","perPage","selectOptions","displayDensity","pageChange","perPageChange"],["paginator",""],[1,"tp-app__grid-heading"],["igxIconButton","flat",1,"button",3,"disabled","click"],["igxButton","flat",1,"button",3,"igxToggleAction","igxToggleOutlet","igxDropDownItemNavigation"],[3,"width","selectionChanging"],["editModeDropdown",""],[3,"selected",4,"ngFor","ngForOf"],["igxButton","outlined",1,"button",3,"disabled","click"],["igxGridDetail",""],["igxGroupByRow",""],[3,"width","sortable","required","resizable","minlength","editable","hasSummary","filterable","formatter","groupable","sortStrategy","cellClasses","field","header","dataType","pinned","hidden",4,"ngFor","ngForOf"],["sortIcon",""],["sortAscIcon",""],["sortDescIcon",""],["igxOverlayOutlet",""],["outlet","overlay-outlet"],["title","Create Issue","leftButtonLabel","Cancel","rightButtonLabel","Add task",3,"closeOnOutsideSelect","leftButtonSelect","rightButtonSelect"],["addTaskDialog",""],[1,"tp-app__dialog-content"],["type","border",3,"type"],["MyInputGroup",""],["igxLabel","","for","issue"],["ngDefaultControl","","igxInput","","id","issue","type","text","required","",3,"ngModel","ngModelChange"],["type","border","ngDefaultControl","","placeholder","Owner",3,"ngModel","overlaySettings","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],["igxLabel","","for","description"],["rows","4","cols","50","igxInput","","ngDefaultControl","","name","desc",3,"ngModel","ngModelChange"],["type","border","ngDefaultControl","","placeholder","Priority",3,"ngModel","overlaySettings","ngModelChange"],["igxLabel","","for","milestone"],["igxInput","","ngDefaultControl","","id","milestone","type","text",3,"ngModel","igxMask","disabled","ngModelChange"],["name","deadline","ngDefaultControl","","aria-required","required","required","","mode","dialog",3,"ngModel","outlet","formatter","disabledDates","ngModelChange","valueChange"],["igxDatePickerTemplate",""],["title","Edit Issue","leftButtonLabel","Cancel","rightButtonLabel","Edit",3,"closeOnOutsideSelect","leftButtonSelect","rightButtonSelect"],["editTaskDialog",""],["igxLabel","","for","newIssue"],["igxInput","","id","newIssue","ngDefaultControl","","type","text","required","",3,"ngModel","ngModelChange"],["type","border","ngDefaultControl","","placeholder","Owner","required","",3,"ngModel","overlaySettings","ngModelChange"],["rows","4","cols","50","ngDefaultControl","","igxInput","","name","desc",3,"ngModel","ngModelChange"],["igxLabel","","for","newMilestone"],["igxInput","","id","newMilestone","ngDefaultControl","","type","text",3,"ngModel","igxMask","disabled","ngModelChange"],["title","Submit the following transactions?"],["transactionsDialog",""],["id","transactionsGrid","width","600px","height","300px",3,"data","rowHeight","primaryKey","emptyGridMessage"],["transactionsGrid",""],["field","id","header","ID","width","100px",3,"dataType"],["field","type","header","Type","width","150px",3,"sortable"],["igxCell",""],["field","newValue","header","Value","width","900px"],[1,"tp-app__dialog-buttons-wrapper"],["igxButton","",3,"click"],["title","Batch Row Editing","leftButtonLabel","Cancel","rightButtonLabel","Commit",3,"closeOnOutsideSelect","leftButtonSelect","rightButtonSelect"],["batchEditDialog",""],["id","tasksGrid",3,"height","data","autoGenerate","primaryKey","rowEditable"],["batchEditingGrid",""],[3,"width","sortable","resizable","editable","hasSummary","filterable","formatter","groupable","sortStrategy","cellClasses","field","header","dataType","pinned","hidden",4,"ngFor","ngForOf"],[3,"selected"],[1,"tp-app__row-details"],[1,"tp-app__row-details-inner"],[1,"tp-app__row-details-col"],[1,"tp-app__row-details-col-item"],[1,"tp-app__row-details-title","tp-app__row-details-title--comments"],[3,"type"],["readonly","","name","description","ngDefaultControl","","igxInput","","rows","8","cols","50","placeholder","Enter any details here.",3,"ngModel","ngModelChange"],[1,"tp-app__row-details-title"],[1,"tp-app__row-details-checkbox"],[1,"igx-group-label"],["class","tp-app__row-badges",4,"ngFor","ngForOf"],[1,"tp-app__row-badges"],[3,"value"],[3,"width","sortable","required","resizable","minlength","editable","hasSummary","filterable","formatter","groupable","sortStrategy","cellClasses","field","header","dataType","pinned","hidden"],[4,"ngIf"],["igxCellEditor",""],["ngDefaultControl","",3,"placeholder","ngModel","overlaySettings","ngModelChange"],[1,"tp-app__owner-col"],["shape","circle","size","small",1,"tp-app__owner-col-avatar",3,"src"],[1,"tp-app__owner-col-name"],[3,"placeholder","ngModel","overlaySettings","ngModelChange"],[1,"item"],["type","default",3,"max","value","animate"],["igxSummary",""],[1,"summary-temp"],["class","tp-app__estimation-col",4,"ngIf"],[1,"tp-app__estimation-col"],["type","border",3,"type","click"],["igxLabel",""],["igxInput","",3,"value"],[1,"transaction-log"],[3,"width","sortable","resizable","editable","hasSummary","filterable","formatter","groupable","sortStrategy","cellClasses","field","header","dataType","pinned","hidden"]],template:function(e,i){if(1&e){const s=z();f(0,"div")(1,"app-header",0),T("themeChanged",function(){return i.toggleTheme()})("createIssueClicked",function(){return i.openAddTaskDialog()}),m(),f(2,"div",1)(3,"app-backlog",2),T("listItemAction",function(a){return i.onBacklogItemAction(a)}),m(),f(4,"igx-grid",3,4),T("cellEditEnter",function(a){return i.editStart(a)})("cellEdit",function(a){return i.onCellEdit(a)})("dropped",function(a){return i.onItemDropped(a)})("enter",function(a){return i.onDropContainerEnterLeave(a)})("leave",function(a){return i.onDropContainerEnterLeave(a)}),f(6,"igx-paginator",5,6),it("pageChange",function(a){return tt(i.grid.page,a)||(i.grid.page=a),a})("perPageChange",function(a){return tt(i.grid.perPage,a)||(i.grid.perPage=a),a}),m(),f(8,"igx-grid-toolbar")(9,"igx-grid-toolbar-title"),C(10,"Project Issues"),m(),f(11,"igx-grid-toolbar-actions"),V(12,"igx-grid-toolbar-hiding")(13,"igx-grid-toolbar-pinning")(14,"igx-grid-toolbar-exporter"),m(),V(15,"div",7),f(16,"div")(17,"button",8),T("click",function(){return i.openCommitDialog()}),f(18,"igx-icon"),C(19,"check"),m()(),f(20,"button",8),T("click",function(){return i.undo()}),f(21,"igx-icon"),C(22,"undo"),m()(),f(23,"button",8),T("click",function(){return i.redo()}),f(24,"igx-icon"),C(25,"redo"),m()()(),f(26,"button",9),C(27),f(28,"igx-icon"),C(29,"arrow_drop_down"),m()(),f(30,"igx-drop-down",10,11),T("selectionChanging",function(a){return i.onEditingModeChanged(a)}),y(32,M3e,2,2,"igx-drop-down-item",12),m(),f(33,"button",13),T("click",function(){return i.openBatchEditDialog()}),C(34,"Batch Edit"),m()(),y(35,A3e,18,2,"ng-template",14)(36,R3e,5,5,"ng-template",15)(37,pPe,14,31,"igx-column",16),m()(),y(38,fPe,2,0,"ng-template",null,17,L)(40,mPe,2,0,"ng-template",null,18,L)(42,_Pe,2,0,"ng-template",null,19,L),V(44,"igx-toast"),f(45,"div",20,21)(47,"igx-dialog",22,23),T("leftButtonSelect",function(){return I(s),b(P(48).close())})("rightButtonSelect",function(a){return i.addTask(a)}),f(49,"div",24)(50,"igx-input-group",25,26)(52,"label",27),C(53,"Issue Title"),m(),f(54,"input",28),it("ngModelChange",function(a){return tt(i.addTaskForm.title,a)||(i.addTaskForm.title=a),a}),m()(),f(55,"igx-select",29),it("ngModelChange",function(a){return tt(i.addTaskForm.assignee,a)||(i.addTaskForm.assignee=a),a}),y(56,vPe,6,3,"igx-select-item",30),m(),f(57,"igx-input-group",25)(58,"label",31),C(59,"Description"),m(),f(60,"textarea",32),it("ngModelChange",function(a){return tt(i.addTaskForm.body,a)||(i.addTaskForm.body=a),a}),m()(),f(61,"igx-select",33),it("ngModelChange",function(a){return tt(i.addTaskForm.priority,a)||(i.addTaskForm.priority=a),a}),y(62,xPe,2,2,"igx-select-item",30),m(),f(63,"igx-input-group",25)(64,"label",34),C(65,"Milestone"),m(),f(66,"input",35),it("ngModelChange",function(a){return tt(i.addTaskForm.milestone,a)||(i.addTaskForm.milestone=a),a}),m()(),f(67,"igx-date-picker",36),it("ngModelChange",function(a){return tt(i.addTaskForm.deadline,a)||(i.addTaskForm.deadline=a),a}),T("valueChange",function(a){return i.deadlineChanged(a,i.addTaskForm)}),y(68,yPe,7,2,"ng-template",37),m()()(),f(69,"igx-dialog",38,39),T("leftButtonSelect",function(){return I(s),b(P(70).close())})("rightButtonSelect",function(a){return i.editTask(a)}),f(71,"div",24)(72,"igx-input-group",25,26)(74,"label",40),C(75,"Issue Title"),m(),f(76,"input",41),it("ngModelChange",function(a){return tt(i.editTaskForm.title,a)||(i.editTaskForm.title=a),a}),m()(),f(77,"igx-select",42),it("ngModelChange",function(a){return tt(i.editTaskForm.assignee,a)||(i.editTaskForm.assignee=a),a}),y(78,wPe,6,3,"igx-select-item",30),m(),f(79,"igx-input-group",25)(80,"label",31),C(81,"Description"),m(),f(82,"textarea",43),it("ngModelChange",function(a){return tt(i.editTaskForm.body,a)||(i.editTaskForm.body=a),a}),m()(),f(83,"igx-select",33),it("ngModelChange",function(a){return tt(i.editTaskForm.priority,a)||(i.editTaskForm.priority=a),a}),y(84,CPe,2,2,"igx-select-item",30),m(),f(85,"igx-input-group",25)(86,"label",44),C(87,"Milestone"),m(),f(88,"input",45),it("ngModelChange",function(a){return tt(i.editTaskForm.milestone,a)||(i.editTaskForm.milestone=a),a}),m()(),f(89,"igx-date-picker",36),it("ngModelChange",function(a){return tt(i.editTaskForm.deadline,a)||(i.editTaskForm.deadline=a),a}),T("valueChange",function(a){return i.deadlineChanged(a,i.editTaskForm)}),y(90,IPe,7,2,"ng-template",37),m()()(),f(91,"igx-dialog",46,47)(93,"div",24)(94,"igx-grid",48,49),V(96,"igx-column",50),f(97,"igx-column",51),y(98,bPe,2,3,"ng-template",52),m(),f(99,"igx-column",53),y(100,DPe,2,1,"ng-template",52),m()()(),f(101,"div",54)(102,"button",55),T("click",function(){return i.commit()}),C(103,"Commit"),m(),f(104,"button",55),T("click",function(){return i.discard()}),C(105,"Discard"),m(),f(106,"button",55),T("click",function(){return i.cancel()}),C(107,"Cancel"),m()()(),f(108,"igx-dialog",56,57),T("leftButtonSelect",function(){return I(s),b(P(109).close())})("rightButtonSelect",function(){return i.commitBatchEdits()}),f(110,"div",24)(111,"igx-grid",58,59),y(113,WPe,9,23,"igx-column",60),m()()()()()}if(2&e){const s=P(31),o=P(39),a=P(41),l=P(43),c=P(46);ee("tp-app-dark-theme",i.darkTheme)("tp-app-light-theme",!i.darkTheme),u(3),h("data",i.unassignedTasks),u(),h("isLoading",i.gridIsLoading)("height","100%")("batchEditing",!0)("data",i.tasks)("autoGenerate",!1)("primaryKey","id")("rowEditable",i.isRowEditingEnabled)("groupsExpanded",!1)("allowFiltering",!0)("allowAdvancedFiltering",!0)("filterMode","excelStyleFilter")("uniqueColumnValuesStrategy",i.columnValuesStrategy)("filterStrategy",i.filterStrategy)("cellSelection","none")("rowSelection","multiple")("moving",!0)("sortingOptions",i.sortingOptions)("sortHeaderIconTemplate",o)("sortAscendingHeaderIconTemplate",a)("sortDescendingHeaderIconTemplate",l),u(2),Je("page",i.grid.page),h("totalRecords",i.grid.totalRecords),Je("perPage",i.grid.perPage),h("selectOptions",i.selectOptions)("displayDensity",i.grid.displayDensity),u(11),h("disabled",!i.hasTransactions),u(3),h("disabled",!i.undoEnabled),u(3),h("disabled",!i.redoEnabled),u(3),h("igxToggleAction",s)("igxToggleOutlet",c)("igxDropDownItemNavigation",s),u(),Q(" ",i.selectedEditMode," "),u(3),h("width","100px"),u(2),h("ngForOf",i.editModes),u(),h("disabled",!i.hasSelection||2===i.editMode),u(4),h("ngForOf",i.columns),u(10),h("closeOnOutsideSelect",!1),u(3),h("type",i.inputType),u(4),Je("ngModel",i.addTaskForm.title),u(),Je("ngModel",i.addTaskForm.assignee),h("overlaySettings",i.overlaySettings),u(),h("ngForOf",i.teamMembers),u(),h("type",i.inputType),u(3),Je("ngModel",i.addTaskForm.body),u(),Je("ngModel",i.addTaskForm.priority),h("overlaySettings",i.overlaySettings),u(),h("ngForOf",i.priority),u(),h("type",i.inputType),u(3),Je("ngModel",i.addTaskForm.milestone),h("igxMask","L#?####")("disabled",!0),u(),Je("ngModel",i.addTaskForm.deadline),h("outlet",c)("formatter",i.formatDate)("disabledDates",i.disabledDates),u(2),h("closeOnOutsideSelect",!1),u(3),h("type",i.inputType),u(4),Je("ngModel",i.editTaskForm.title),u(),Je("ngModel",i.editTaskForm.assignee),h("overlaySettings",i.overlaySettings),u(),h("ngForOf",i.teamMembers),u(),h("type",i.inputType),u(3),Je("ngModel",i.editTaskForm.body),u(),Je("ngModel",i.editTaskForm.priority),h("overlaySettings",i.overlaySettings),u(),h("ngForOf",i.priority),u(),h("type",i.inputType),u(3),Je("ngModel",i.editTaskForm.milestone),h("igxMask","L#?####")("disabled",!0),u(),Je("ngModel",i.editTaskForm.deadline),h("outlet",c)("formatter",i.formatDate)("disabledDates",i.disabledDates),u(5),h("data",i.transactionsData)("rowHeight",64)("primaryKey","id")("emptyGridMessage","No available transactions"),u(2),h("dataType","string"),u(),h("sortable",!0),u(11),h("closeOnOutsideSelect",!1),u(3),h("height","100%")("data",i.batchEditingData)("autoGenerate",!1)("primaryKey","id")("rowEditable",!0),u(2),h("ngForOf",i.columns)}},dependencies:[x3e,RT,Gc,Yo,gl,ph,uh,hl,zc,Uc,fh,Ut,Fe,wS,mo,Kr,pt,zs,tT,bi,Fs,Mr,Wr,ap,Ps,Qt,nn,By,my,Di,_f,vf,ye,rl,sl,ta,Tc,qMe,Vy,ol,ET,$n,h6,Fr,LV,ea,zt,jl,xr,jf,PL,f3e,m3e,v3e,Bs],styles:[".tp-app{height:100%;overflow:hidden} .tp-app igx-list{height:auto!important} .tp-app__row-details{width:100%} .tp-app__row-details-inner{display:flex;justify-content:flex-start} .tp-app__row-details-col-item{display:flex;flex-direction:column;margin-bottom:.5rem} .tp-app__row-details-col-item:last-of-type{margin-bottom:0} .tp-app__estimation-col{opacity:.3} .tp-app__inner{display:flex;height:100%;overflow:hidden;padding:1.5rem} .tp-app__row-details-checkbox{margin-bottom:.5rem} .tp-app__row-details-checkbox:last-of-type{margin-bottom:0} .tp-app__row-details-title{margin-bottom:1rem;line-height:normal;font-size:14px} .tp-app__row-details-col{display:flex;flex-grow:1;flex-direction:column;margin-right:2rem;padding:1rem;border-radius:8px} .tp-app__row-details-col:last-of-type{margin-right:0} .tp-app__config{height:4.25rem;padding:1.5rem} .tp-app__config-buttons{display:flex} .tp-app__grid-heading{display:flex;align-items:center;flex:1;font-size:18px} .tp-app__grid{flex:1} .tp-app__dialog-content{padding:0 1.5rem} .tp-app__dialog-content>*{margin-bottom:1rem} .tp-app .igx-dialog__window{max-width:90vw} .tp-app .igx-dialog__window-actions, .tp-app__dialog-buttons-wrapper{padding:.5rem 1.5rem 1.5rem} .tp-app__dialog-buttons-wrapper{display:flex;justify-content:flex-end} .tp-app .igx-grid-toolbar__actions{display:none} .tp-app__owner-col{display:flex;flex:1;align-items:center;justify-content:flex-start;overflow:hidden} .tp-app__owner-col>span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .tp-app__owner-col-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .tp-app__owner-col-avatar.igx-avatar--small{width:1.875rem;height:1.875rem;min-width:1.875rem;margin-right:.5rem} .tp-app__row-badges{margin-left:.5rem} .tp-app__row-badges .igx-badge__circle-value{padding:0 1rem}@media only screen and (max-width: 1024px){ .tp-app .content{padding:0}}.summary-temp[_ngcontent-%COMP%]{display:flex;flex-direction:column;margin:0 1px;font-size:14px;line-height:24px;height:100%;overflow-y:auto;overflow-x:hidden}.summary-temp[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:4px;justify-content:space-between;color:hsla(var(--igx-gray-900))}.summary-temp[_ngcontent-%COMP%] span[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{-webkit-user-select:all;user-select:all;max-width:300px;padding-right:8px}.summary-temp[_ngcontent-%COMP%] span[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:12px;text-transform:uppercase;min-width:70px;justify-self:flex-start;text-align:left;color:hsla(var(--ig-secondary-600));-webkit-user-select:none;user-select:none}.summary-temp[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{padding:8px 0;line-height:18px;border-bottom:1px dashed hsla(var(--igx-gray-400))}.summary-temp[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:last-child{border-bottom:none}[_ngcontent-%COMP%]::-webkit-scrollbar{width:5px!important;height:5px!important}"]}),r})();class $Pe extends ho{compareObjects(r,n,e,i,s,o){const a=r[e].split(" "),l=n[e].split(" "),c=a[1],d=l[1],g=a[0].slice(-1),_=l[0].slice(-1),x=parseInt(c+g,10),w=parseInt(d+_,10);return i*this.compareValues(x,w)}}class qPe extends ho{compareObjects(r,n,e,i){const s=FT(r),o=FT(n);return i*this.compareValues(s,o)}}class KPe extends ho{compareObjects(r,n,e,i){const s=new jf,o=s.transform(r.labels),a=s.transform(n.labels);return i*this.compareValues(o,a)}}class ZPe extends Eu{findMatchByExpression(r,n){const e=n.condition;let i=this.getFieldValue(r,n.fieldName);return"labels"===n.fieldName&&(i=(new jf).transform(i)),!i&&"priority"===n.fieldName&&(i=(new PL).transform(r)),e.logic(i,n.searchVal,n.ignoreCase)}}function FT(t){return(t.hours_spent?t.hours_spent:0)/(t.estimation?t.estimation:0)*100}function VL(t){return new se(3e3,!1)}function vl(t){switch(t.length){case 0:return new bp;case 1:return t[0];default:return new h5(t)}}function LL(t,r,n=new Map,e=new Map){const i=[],s=[];let o=-1,a=null;if(r.forEach(l=>{const c=l.get("offset"),d=c==o,g=d&&a||new Map;l.forEach((_,x)=>{let w=x,E=_;if("offset"!==x)switch(w=t.normalizePropertyName(w,i),E){case"!":E=n.get(x);break;case Uo:E=e.get(x);break;default:E=t.normalizeStyleValue(x,w,E,i)}g.set(w,E)}),d||s.push(g),a=g,o=c}),i.length)throw function vFe(t){return new se(3502,!1)}();return s}function OT(t,r,n,e){switch(r){case"start":t.onStart(()=>e(n&&NT(n,"start",t)));break;case"done":t.onDone(()=>e(n&&NT(n,"done",t)));break;case"destroy":t.onDestroy(()=>e(n&&NT(n,"destroy",t)))}}function NT(t,r,n){const s=VT(t.element,t.triggerName,t.fromState,t.toState,r||t.phaseName,n.totalTime??t.totalTime,!!n.disabled),o=t._data;return null!=o&&(s._data=o),s}function VT(t,r,n,e,i="",s=0,o){return{element:t,triggerName:r,fromState:n,toState:e,phaseName:i,totalTime:s,disabled:!!o}}function Xr(t,r,n){let e=t.get(r);return e||t.set(r,e=n),e}function GL(t){const r=t.indexOf(":");return[t.substring(1,r),t.slice(r+1)]}const AFe=typeof document>"u"?null:document.documentElement;function LT(t){const r=t.parentNode||t.host||null;return r===AFe?null:r}let jc=null,HL=!1;function BL(t,r){for(;r;){if(r===t)return!0;r=LT(r)}return!1}function zL(t,r,n){if(n)return Array.from(t.querySelectorAll(r));const e=t.querySelector(r);return e?[e]:[]}let GT=(()=>{var t;class r{validateStyleProperty(e){return function RFe(t){jc||(jc=function PFe(){return typeof document<"u"?document.body:null}()||{},HL=!!jc.style&&"WebkitAppearance"in jc.style);let r=!0;return jc.style&&!function kFe(t){return"ebkit"==t.substring(1,6)}(t)&&(r=t in jc.style,!r&&HL&&(r="Webkit"+t.charAt(0).toUpperCase()+t.slice(1)in jc.style)),r}(e)}matchesElement(e,i){return!1}containsElement(e,i){return BL(e,i)}getParentElement(e){return LT(e)}query(e,i,s){return zL(e,i,s)}computeStyle(e,i,s){return s||""}animate(e,i,s,o,a,l=[],c){return new bp(s,o)}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();class dw{}dw.NOOP=new GT;class HT{}const OFe=1e3,BT="ng-enter",uw="ng-leave",hw="ng-trigger",gw=".ng-trigger",jL="ng-animating",zT=".ng-animating";function da(t){if("number"==typeof t)return t;const r=t.match(/^(-?[\.\d]+)(m?s)/);return!r||r.length<2?0:UT(parseFloat(r[1]),r[2])}function UT(t,r){return"s"===r?t*OFe:t}function pw(t,r,n){return t.hasOwnProperty("duration")?t:function VFe(t,r,n){let i,s=0,o="";if("string"==typeof t){const a=t.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===a)return r.push(VL()),{duration:0,delay:0,easing:""};i=UT(parseFloat(a[1]),a[2]);const l=a[3];null!=l&&(s=UT(parseFloat(l),a[4]));const c=a[5];c&&(o=c)}else i=t;if(!n){let a=!1,l=r.length;i<0&&(r.push(function YPe(){return new se(3100,!1)}()),a=!0),s<0&&(r.push(function QPe(){return new se(3101,!1)}()),a=!0),a&&r.splice(l,0,VL())}return{duration:i,delay:s,easing:o}}(t,r,n)}function Co(t,r,n){r.forEach((e,i)=>{const s=WT(i);n&&!n.has(i)&&n.set(i,t.style[s]),t.style[s]=e})}function Wc(t,r){r.forEach((n,e)=>{const i=WT(e);t.style[i]=""})}function Wf(t){return Array.isArray(t)?1==t.length?t[0]:d5(t):t}const jT=new RegExp("{{\\s*(.+?)\\s*}}","g");function $L(t){let r=[];if("string"==typeof t){let n;for(;n=jT.exec(t);)r.push(n[1]);jT.lastIndex=0}return r}function $f(t,r,n){const e=`${t}`,i=e.replace(jT,(s,o)=>{let a=r[o];return null==a&&(n.push(function JPe(t){return new se(3003,!1)}()),a=""),a.toString()});return i==e?t:i}const HFe=/-+([a-z0-9])/g;function WT(t){return t.replace(HFe,(...r)=>r[1].toUpperCase())}function Jr(t,r,n){switch(r.type){case et.Trigger:return t.visitTrigger(r,n);case et.State:return t.visitState(r,n);case et.Transition:return t.visitTransition(r,n);case et.Sequence:return t.visitSequence(r,n);case et.Group:return t.visitGroup(r,n);case et.Animate:return t.visitAnimate(r,n);case et.Keyframes:return t.visitKeyframes(r,n);case et.Style:return t.visitStyle(r,n);case et.Reference:return t.visitReference(r,n);case et.AnimateChild:return t.visitAnimateChild(r,n);case et.AnimateRef:return t.visitAnimateRef(r,n);case et.Query:return t.visitQuery(r,n);case et.Stagger:return t.visitStagger(r,n);default:throw function eFe(t){return new se(3004,!1)}()}}function $T(t,r){return window.getComputedStyle(t)[r]}const UFe=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]);class qL extends HT{normalizePropertyName(r,n){return WT(r)}normalizeStyleValue(r,n,e,i){let s="";const o=e.toString().trim();if(UFe.has(n)&&0!==e&&"0"!==e)if("number"==typeof e)s="px";else{const a=e.match(/^[+-]?[\d\.]+([a-z]*)$/);a&&0==a[1].length&&i.push(function tFe(t,r){return new se(3005,!1)}())}return o+s}}const fw="*";const mw=new Set(["true","1"]),_w=new Set(["false","0"]);function KL(t,r){const n=mw.has(t)||_w.has(t),e=mw.has(r)||_w.has(r);return(i,s)=>{let o=t==fw||t==i,a=r==fw||r==s;return!o&&n&&"boolean"==typeof i&&(o=i?mw.has(t):_w.has(t)),!a&&e&&"boolean"==typeof s&&(a=s?mw.has(r):_w.has(r)),o&&a}}const qFe=new RegExp("s*:selfs*,?","g");function qT(t,r,n,e){return new KFe(t).build(r,n,e)}class KFe{constructor(r){this._driver=r}build(r,n,e){const i=new QFe(n);return this._resetContextStyleTimingState(i),Jr(this,Wf(r),i)}_resetContextStyleTimingState(r){r.currentQuerySelector="",r.collectedStyles=new Map,r.collectedStyles.set("",new Map),r.currentTime=0}visitTrigger(r,n){let e=n.queryCount=0,i=n.depCount=0;const s=[],o=[];return"@"==r.name.charAt(0)&&n.errors.push(function iFe(){return new se(3006,!1)}()),r.definitions.forEach(a=>{if(this._resetContextStyleTimingState(n),a.type==et.State){const l=a,c=l.name;c.toString().split(/\s*,\s*/).forEach(d=>{l.name=d,s.push(this.visitState(l,n))}),l.name=c}else if(a.type==et.Transition){const l=this.visitTransition(a,n);e+=l.queryCount,i+=l.depCount,o.push(l)}else n.errors.push(function nFe(){return new se(3007,!1)}())}),{type:et.Trigger,name:r.name,states:s,transitions:o,queryCount:e,depCount:i,options:null}}visitState(r,n){const e=this.visitStyle(r.styles,n),i=r.options&&r.options.params||null;if(e.containsDynamicStyles){const s=new Set,o=i||{};e.styles.forEach(a=>{a instanceof Map&&a.forEach(l=>{$L(l).forEach(c=>{o.hasOwnProperty(c)||s.add(c)})})}),s.size&&n.errors.push(function rFe(t,r){return new se(3008,!1)}(0,s.values()))}return{type:et.State,name:r.name,style:e,options:i?{params:i}:null}}visitTransition(r,n){n.queryCount=0,n.depCount=0;const e=Jr(this,Wf(r.animation),n),i=function jFe(t,r){const n=[];return"string"==typeof t?t.split(/\s*,\s*/).forEach(e=>function WFe(t,r,n){if(":"==t[0]){const l=function $Fe(t,r){switch(t){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(n,e)=>parseFloat(e)>parseFloat(n);case":decrement":return(n,e)=>parseFloat(e) *"}}(t,n);if("function"==typeof l)return void r.push(l);t=l}const e=t.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/);if(null==e||e.length<4)return n.push(function gFe(t){return new se(3015,!1)}()),r;const i=e[1],s=e[2],o=e[3];r.push(KL(i,o)),"<"==s[0]&&(i!=fw||o!=fw)&&r.push(KL(o,i))}(e,n,r)):n.push(t),n}(r.expr,n.errors);return{type:et.Transition,matchers:i,animation:e,queryCount:n.queryCount,depCount:n.depCount,options:$c(r.options)}}visitSequence(r,n){return{type:et.Sequence,steps:r.steps.map(e=>Jr(this,e,n)),options:$c(r.options)}}visitGroup(r,n){const e=n.currentTime;let i=0;const s=r.steps.map(o=>{n.currentTime=e;const a=Jr(this,o,n);return i=Math.max(i,n.currentTime),a});return n.currentTime=i,{type:et.Group,steps:s,options:$c(r.options)}}visitAnimate(r,n){const e=function JFe(t,r){if(t.hasOwnProperty("duration"))return t;if("number"==typeof t)return KT(pw(t,r).duration,0,"");const n=t;if(n.split(/\s+/).some(s=>"{"==s.charAt(0)&&"{"==s.charAt(1))){const s=KT(0,0,"");return s.dynamic=!0,s.strValue=n,s}const i=pw(n,r);return KT(i.duration,i.delay,i.easing)}(r.timings,n.errors);n.currentAnimateTimings=e;let i,s=r.styles?r.styles:ft({});if(s.type==et.Keyframes)i=this.visitKeyframes(s,n);else{let o=r.styles,a=!1;if(!o){a=!0;const c={};e.easing&&(c.easing=e.easing),o=ft(c)}n.currentTime+=e.duration+e.delay;const l=this.visitStyle(o,n);l.isEmptyStep=a,i=l}return n.currentAnimateTimings=null,{type:et.Animate,timings:e,style:i,options:null}}visitStyle(r,n){const e=this._makeStyleAst(r,n);return this._validateStyleAst(e,n),e}_makeStyleAst(r,n){const e=[],i=Array.isArray(r.styles)?r.styles:[r.styles];for(let a of i)"string"==typeof a?a===Uo?e.push(a):n.errors.push(new se(3002,!1)):e.push(new Map(Object.entries(a)));let s=!1,o=null;return e.forEach(a=>{if(a instanceof Map&&(a.has("easing")&&(o=a.get("easing"),a.delete("easing")),!s))for(let l of a.values())if(l.toString().indexOf("{{")>=0){s=!0;break}}),{type:et.Style,styles:e,easing:o,offset:r.offset,containsDynamicStyles:s,options:null}}_validateStyleAst(r,n){const e=n.currentAnimateTimings;let i=n.currentTime,s=n.currentTime;e&&s>0&&(s-=e.duration+e.delay),r.styles.forEach(o=>{"string"!=typeof o&&o.forEach((a,l)=>{const c=n.collectedStyles.get(n.currentQuerySelector),d=c.get(l);let g=!0;d&&(s!=i&&s>=d.startTime&&i<=d.endTime&&(n.errors.push(function oFe(t,r,n,e,i){return new se(3010,!1)}()),g=!1),s=d.startTime),g&&c.set(l,{startTime:s,endTime:i}),n.options&&function GFe(t,r,n){const e=r.params||{},i=$L(t);i.length&&i.forEach(s=>{e.hasOwnProperty(s)||n.push(function XPe(t){return new se(3001,!1)}())})}(a,n.options,n.errors)})})}visitKeyframes(r,n){const e={type:et.Keyframes,styles:[],options:null};if(!n.currentAnimateTimings)return n.errors.push(function aFe(){return new se(3011,!1)}()),e;let s=0;const o=[];let a=!1,l=!1,c=0;const d=r.steps.map(k=>{const N=this._makeStyleAst(k,n);let q=null!=N.offset?N.offset:function XFe(t){if("string"==typeof t)return null;let r=null;if(Array.isArray(t))t.forEach(n=>{if(n instanceof Map&&n.has("offset")){const e=n;r=parseFloat(e.get("offset")),e.delete("offset")}});else if(t instanceof Map&&t.has("offset")){const n=t;r=parseFloat(n.get("offset")),n.delete("offset")}return r}(N.styles),$=0;return null!=q&&(s++,$=N.offset=q),l=l||$<0||$>1,a=a||$0&&s{const q=_>0?N==x?1:_*N:o[N],$=q*M;n.currentTime=w+E.delay+$,E.duration=$,this._validateStyleAst(k,n),k.offset=q,e.styles.push(k)}),e}visitReference(r,n){return{type:et.Reference,animation:Jr(this,Wf(r.animation),n),options:$c(r.options)}}visitAnimateChild(r,n){return n.depCount++,{type:et.AnimateChild,options:$c(r.options)}}visitAnimateRef(r,n){return{type:et.AnimateRef,animation:this.visitReference(r.animation,n),options:$c(r.options)}}visitQuery(r,n){const e=n.currentQuerySelector,i=r.options||{};n.queryCount++,n.currentQuery=r;const[s,o]=function ZFe(t){const r=!!t.split(/\s*,\s*/).find(n=>":self"==n);return r&&(t=t.replace(qFe,"")),t=t.replace(/@\*/g,gw).replace(/@\w+/g,n=>gw+"-"+n.slice(1)).replace(/:animating/g,zT),[t,r]}(r.selector);n.currentQuerySelector=e.length?e+" "+s:s,Xr(n.collectedStyles,n.currentQuerySelector,new Map);const a=Jr(this,Wf(r.animation),n);return n.currentQuery=null,n.currentQuerySelector=e,{type:et.Query,selector:s,limit:i.limit||0,optional:!!i.optional,includeSelf:o,animation:a,originalSelector:r.selector,options:$c(r.options)}}visitStagger(r,n){n.currentQuery||n.errors.push(function uFe(){return new se(3013,!1)}());const e="full"===r.timings?{duration:0,delay:0,easing:"full"}:pw(r.timings,n.errors,!0);return{type:et.Stagger,animation:Jr(this,Wf(r.animation),n),timings:e,options:null}}}class QFe{constructor(r){this.errors=r,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles=new Map,this.options=null,this.unsupportedCSSPropertiesFound=new Set}}function $c(t){return t?(t={...t}).params&&(t.params=function YFe(t){return t?{...t}:null}(t.params)):t={},t}function KT(t,r,n){return{duration:t,delay:r,easing:n}}function ZT(t,r,n,e,i,s,o=null,a=!1){return{type:1,element:t,keyframes:r,preStyleProps:n,postStyleProps:e,duration:i,delay:s,totalTime:i+s,easing:o,subTimeline:a}}class vw{constructor(){this._map=new Map}get(r){return this._map.get(r)||[]}append(r,n){let e=this._map.get(r);e||this._map.set(r,e=[]),e.push(...n)}has(r){return this._map.has(r)}clear(){this._map.clear()}}const i4e=new RegExp(":enter","g"),r4e=new RegExp(":leave","g");function YT(t,r,n,e,i,s=new Map,o=new Map,a,l,c=[]){return(new s4e).buildKeyframes(t,r,n,e,i,s,o,a,l,c)}class s4e{buildKeyframes(r,n,e,i,s,o,a,l,c,d=[]){c=c||new vw;const g=new QT(r,n,c,i,s,d,[]);g.options=l;const _=l.delay?da(l.delay):0;g.currentTimeline.delayNextStep(_),g.currentTimeline.setStyles([o],null,g.errors,l),Jr(this,e,g);const x=g.timelines.filter(w=>w.containsAnimation());if(x.length&&a.size){let w;for(let E=x.length-1;E>=0;E--){const M=x[E];if(M.element===n){w=M;break}}w&&!w.allowOnlyTimelineStyles()&&w.setStyles([a],null,g.errors,l)}return x.length?x.map(w=>w.buildKeyframes()):[ZT(n,[],[],[],0,_,"",!1)]}visitTrigger(r,n){}visitState(r,n){}visitTransition(r,n){}visitAnimateChild(r,n){const e=n.subInstructions.get(n.element);if(e){const i=n.createSubContext(r.options),s=n.currentTimeline.currentTime,o=this._visitSubInstructions(e,i,i.options);s!=o&&n.transformIntoNewTimeline(o)}n.previousNode=r}visitAnimateRef(r,n){const e=n.createSubContext(r.options);e.transformIntoNewTimeline(),this._applyAnimationRefDelays([r.options,r.animation.options],n,e),this.visitReference(r.animation,e),n.transformIntoNewTimeline(e.currentTimeline.currentTime),n.previousNode=r}_applyAnimationRefDelays(r,n,e){for(const i of r){const s=i?.delay;if(s){const o="number"==typeof s?s:da($f(s,i?.params??{},n.errors));e.delayNextStep(o)}}}_visitSubInstructions(r,n,e){let s=n.currentTimeline.currentTime;const o=null!=e.duration?da(e.duration):null,a=null!=e.delay?da(e.delay):null;return 0!==o&&r.forEach(l=>{const c=n.appendInstructionToTimeline(l,o,a);s=Math.max(s,c.duration+c.delay)}),s}visitReference(r,n){n.updateOptions(r.options,!0),Jr(this,r.animation,n),n.previousNode=r}visitSequence(r,n){const e=n.subContextCount;let i=n;const s=r.options;if(s&&(s.params||s.delay)&&(i=n.createSubContext(s),i.transformIntoNewTimeline(),null!=s.delay)){i.previousNode.type==et.Style&&(i.currentTimeline.snapshotCurrentStyles(),i.previousNode=xw);const o=da(s.delay);i.delayNextStep(o)}r.steps.length&&(r.steps.forEach(o=>Jr(this,o,i)),i.currentTimeline.applyStylesToKeyframe(),i.subContextCount>e&&i.transformIntoNewTimeline()),n.previousNode=r}visitGroup(r,n){const e=[];let i=n.currentTimeline.currentTime;const s=r.options&&r.options.delay?da(r.options.delay):0;r.steps.forEach(o=>{const a=n.createSubContext(r.options);s&&a.delayNextStep(s),Jr(this,o,a),i=Math.max(i,a.currentTimeline.currentTime),e.push(a.currentTimeline)}),e.forEach(o=>n.currentTimeline.mergeTimelineCollectedStyles(o)),n.transformIntoNewTimeline(i),n.previousNode=r}_visitTiming(r,n){if(r.dynamic){const e=r.strValue;return pw(n.params?$f(e,n.params,n.errors):e,n.errors)}return{duration:r.duration,delay:r.delay,easing:r.easing}}visitAnimate(r,n){const e=n.currentAnimateTimings=this._visitTiming(r.timings,n),i=n.currentTimeline;e.delay&&(n.incrementTime(e.delay),i.snapshotCurrentStyles());const s=r.style;s.type==et.Keyframes?this.visitKeyframes(s,n):(n.incrementTime(e.duration),this.visitStyle(s,n),i.applyStylesToKeyframe()),n.currentAnimateTimings=null,n.previousNode=r}visitStyle(r,n){const e=n.currentTimeline,i=n.currentAnimateTimings;!i&&e.hasCurrentStyleProperties()&&e.forwardFrame();const s=i&&i.easing||r.easing;r.isEmptyStep?e.applyEmptyStep(s):e.setStyles(r.styles,s,n.errors,n.options),n.previousNode=r}visitKeyframes(r,n){const e=n.currentAnimateTimings,i=n.currentTimeline.duration,s=e.duration,a=n.createSubContext().currentTimeline;a.easing=e.easing,r.styles.forEach(l=>{a.forwardTime((l.offset||0)*s),a.setStyles(l.styles,l.easing,n.errors,n.options),a.applyStylesToKeyframe()}),n.currentTimeline.mergeTimelineCollectedStyles(a),n.transformIntoNewTimeline(i+s),n.previousNode=r}visitQuery(r,n){const e=n.currentTimeline.currentTime,i=r.options||{},s=i.delay?da(i.delay):0;s&&(n.previousNode.type===et.Style||0==e&&n.currentTimeline.hasCurrentStyleProperties())&&(n.currentTimeline.snapshotCurrentStyles(),n.previousNode=xw);let o=e;const a=n.invokeQuery(r.selector,r.originalSelector,r.limit,r.includeSelf,!!i.optional,n.errors);n.currentQueryTotal=a.length;let l=null;a.forEach((c,d)=>{n.currentQueryIndex=d;const g=n.createSubContext(r.options,c);s&&g.delayNextStep(s),c===n.element&&(l=g.currentTimeline),Jr(this,r.animation,g),g.currentTimeline.applyStylesToKeyframe(),o=Math.max(o,g.currentTimeline.currentTime)}),n.currentQueryIndex=0,n.currentQueryTotal=0,n.transformIntoNewTimeline(o),l&&(n.currentTimeline.mergeTimelineCollectedStyles(l),n.currentTimeline.snapshotCurrentStyles()),n.previousNode=r}visitStagger(r,n){const e=n.parentContext,i=n.currentTimeline,s=r.timings,o=Math.abs(s.duration),a=o*(n.currentQueryTotal-1);let l=o*n.currentQueryIndex;switch(s.duration<0?"reverse":s.easing){case"reverse":l=a-l;break;case"full":l=e.currentStaggerTime}const d=n.currentTimeline;l&&d.delayNextStep(l);const g=d.currentTime;Jr(this,r.animation,n),n.previousNode=r,e.currentStaggerTime=i.currentTime-g+(i.startTime-e.currentTimeline.startTime)}}const xw={};class QT{constructor(r,n,e,i,s,o,a,l){this._driver=r,this.element=n,this.subInstructions=e,this._enterClassName=i,this._leaveClassName=s,this.errors=o,this.timelines=a,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=xw,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=l||new yw(this._driver,n,0),a.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(r,n){if(!r)return;const e=r;let i=this.options;null!=e.duration&&(i.duration=da(e.duration)),null!=e.delay&&(i.delay=da(e.delay));const s=e.params;if(s){let o=i.params;o||(o=this.options.params={}),Object.keys(s).forEach(a=>{(!n||!o.hasOwnProperty(a))&&(o[a]=$f(s[a],o,this.errors))})}}_copyOptions(){const r={};if(this.options){const n=this.options.params;if(n){const e=r.params={};Object.keys(n).forEach(i=>{e[i]=n[i]})}}return r}createSubContext(r=null,n,e){const i=n||this.element,s=new QT(this._driver,i,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(i,e||0));return s.previousNode=this.previousNode,s.currentAnimateTimings=this.currentAnimateTimings,s.options=this._copyOptions(),s.updateOptions(r),s.currentQueryIndex=this.currentQueryIndex,s.currentQueryTotal=this.currentQueryTotal,s.parentContext=this,this.subContextCount++,s}transformIntoNewTimeline(r){return this.previousNode=xw,this.currentTimeline=this.currentTimeline.fork(this.element,r),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(r,n,e){const i={duration:n??r.duration,delay:this.currentTimeline.currentTime+(e??0)+r.delay,easing:""},s=new o4e(this._driver,r.element,r.keyframes,r.preStyleProps,r.postStyleProps,i,r.stretchStartingKeyframe);return this.timelines.push(s),i}incrementTime(r){this.currentTimeline.forwardTime(this.currentTimeline.duration+r)}delayNextStep(r){r>0&&this.currentTimeline.delayNextStep(r)}invokeQuery(r,n,e,i,s,o){let a=[];if(i&&a.push(this.element),r.length>0){r=(r=r.replace(i4e,"."+this._enterClassName)).replace(r4e,"."+this._leaveClassName);let c=this._driver.query(this.element,r,1!=e);0!==e&&(c=e<0?c.slice(c.length+e,c.length):c.slice(0,e)),a.push(...c)}return!s&&0==a.length&&o.push(function hFe(t){return new se(3014,!1)}()),a}}class yw{constructor(r,n,e,i){this._driver=r,this.element=n,this.startTime=e,this._elementTimelineStylesLookup=i,this.duration=0,this.easing=null,this._previousKeyframe=new Map,this._currentKeyframe=new Map,this._keyframes=new Map,this._styleSummary=new Map,this._localTimelineStyles=new Map,this._pendingStyles=new Map,this._backFill=new Map,this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(n),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(n,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(r){const n=1===this._keyframes.size&&this._pendingStyles.size;this.duration||n?(this.forwardTime(this.currentTime+r),n&&this.snapshotCurrentStyles()):this.startTime+=r}fork(r,n){return this.applyStylesToKeyframe(),new yw(this._driver,r,n||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(r){this.applyStylesToKeyframe(),this.duration=r,this._loadKeyframe()}_updateStyle(r,n){this._localTimelineStyles.set(r,n),this._globalTimelineStyles.set(r,n),this._styleSummary.set(r,{time:this.currentTime,value:n})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(r){r&&this._previousKeyframe.set("easing",r);for(let[n,e]of this._globalTimelineStyles)this._backFill.set(n,e||Uo),this._currentKeyframe.set(n,Uo);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(r,n,e,i){n&&this._previousKeyframe.set("easing",n);const s=i&&i.params||{},o=function a4e(t,r){const n=new Map;let e;return t.forEach(i=>{if("*"===i){e??=r.keys();for(let s of e)n.set(s,Uo)}else for(let[s,o]of i)n.set(s,o)}),n}(r,this._globalTimelineStyles);for(let[a,l]of o){const c=$f(l,s,e);this._pendingStyles.set(a,c),this._localTimelineStyles.has(a)||this._backFill.set(a,this._globalTimelineStyles.get(a)??Uo),this._updateStyle(a,c)}}applyStylesToKeyframe(){0!=this._pendingStyles.size&&(this._pendingStyles.forEach((r,n)=>{this._currentKeyframe.set(n,r)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((r,n)=>{this._currentKeyframe.has(n)||this._currentKeyframe.set(n,r)}))}snapshotCurrentStyles(){for(let[r,n]of this._localTimelineStyles)this._pendingStyles.set(r,n),this._updateStyle(r,n)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const r=[];for(let n in this._currentKeyframe)r.push(n);return r}mergeTimelineCollectedStyles(r){r._styleSummary.forEach((n,e)=>{const i=this._styleSummary.get(e);(!i||n.time>i.time)&&this._updateStyle(e,n.value)})}buildKeyframes(){this.applyStylesToKeyframe();const r=new Set,n=new Set,e=1===this._keyframes.size&&0===this.duration;let i=[];this._keyframes.forEach((a,l)=>{const c=new Map([...this._backFill,...a]);c.forEach((d,g)=>{"!"===d?r.add(g):d===Uo&&n.add(g)}),e||c.set("offset",l/this.duration),i.push(c)});const s=[...r.values()],o=[...n.values()];if(e){const a=i[0],l=new Map(a);a.set("offset",0),l.set("offset",1),i=[a,l]}return ZT(this.element,i,s,o,this.duration,this.startTime,this.easing,!1)}}class o4e extends yw{constructor(r,n,e,i,s,o,a=!1){super(r,n,o.delay),this.keyframes=e,this.preStyleProps=i,this.postStyleProps=s,this._stretchStartingKeyframe=a,this.timings={duration:o.duration,delay:o.delay,easing:o.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let r=this.keyframes,{delay:n,duration:e,easing:i}=this.timings;if(this._stretchStartingKeyframe&&n){const s=[],o=e+n,a=n/o,l=new Map(r[0]);l.set("offset",0),s.push(l);const c=new Map(r[0]);c.set("offset",QL(a)),s.push(c);const d=r.length-1;for(let g=1;g<=d;g++){let _=new Map(r[g]);const x=_.get("offset");_.set("offset",QL((n+x*e)/o)),s.push(_)}e=o,n=0,i="",r=s}return ZT(this.element,r,this.preStyleProps,this.postStyleProps,e,n,i,!0)}}function QL(t,r=3){const n=Math.pow(10,r-1);return Math.round(t*n)/n}function XL(t,r,n,e,i,s,o,a,l,c,d,g,_){return{type:0,element:t,triggerName:r,isRemovalTransition:i,fromState:n,fromStyles:s,toState:e,toStyles:o,timelines:a,queriedElements:l,preStyleProps:c,postStyleProps:d,totalTime:g,errors:_}}const XT={};class JL{constructor(r,n,e){this._triggerName=r,this.ast=n,this._stateStyles=e}match(r,n,e,i){return function l4e(t,r,n,e,i){return t.some(s=>s(r,n,e,i))}(this.ast.matchers,r,n,e,i)}buildStyles(r,n,e){let i=this._stateStyles.get("*");return void 0!==r&&(i=this._stateStyles.get(r?.toString())||i),i?i.buildStyles(n,e):new Map}build(r,n,e,i,s,o,a,l,c,d){const g=[],_=this.ast.options&&this.ast.options.params||XT,w=this.buildStyles(e,a&&a.params||XT,g),E=l&&l.params||XT,M=this.buildStyles(i,E,g),k=new Set,N=new Map,q=new Map,$="void"===i,ce={params:e8(E,_),delay:this.ast.options?.delay},ge=d?[]:YT(r,n,this.ast.animation,s,o,w,M,ce,c,g);let De=0;return ge.forEach(be=>{De=Math.max(be.duration+be.delay,De)}),g.length?XL(n,this._triggerName,e,i,$,w,M,[],[],N,q,De,g):(ge.forEach(be=>{const Re=be.element,Vt=Xr(N,Re,new Set);be.preStyleProps.forEach(ti=>Vt.add(ti));const jt=Xr(q,Re,new Set);be.postStyleProps.forEach(ti=>jt.add(ti)),Re!==n&&k.add(Re)}),XL(n,this._triggerName,e,i,$,w,M,ge,[...k.values()],N,q,De))}}function e8(t,r){const n={...r};return Object.entries(t).forEach(([e,i])=>{null!=i&&(n[e]=i)}),n}class c4e{constructor(r,n,e){this.styles=r,this.defaultParams=n,this.normalizer=e}buildStyles(r,n){const e=new Map,i=e8(r,this.defaultParams);return this.styles.styles.forEach(s=>{"string"!=typeof s&&s.forEach((o,a)=>{o&&(o=$f(o,i,n));const l=this.normalizer.normalizePropertyName(a,n);o=this.normalizer.normalizeStyleValue(a,l,o,n),e.set(a,o)})}),e}}class u4e{constructor(r,n,e){this.name=r,this.ast=n,this._normalizer=e,this.transitionFactories=[],this.states=new Map,n.states.forEach(i=>{this.states.set(i.name,new c4e(i.style,i.options&&i.options.params||{},e))}),t8(this.states,"true","1"),t8(this.states,"false","0"),n.transitions.forEach(i=>{this.transitionFactories.push(new JL(r,i,this.states))}),this.fallbackTransition=function h4e(t,r,n){return new JL(t,{type:et.Transition,animation:{type:et.Sequence,steps:[],options:null},matchers:[(o,a)=>!0],options:null,queryCount:0,depCount:0},r)}(r,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(r,n,e,i){return this.transitionFactories.find(o=>o.match(r,n,e,i))||null}matchStyles(r,n,e){return this.fallbackTransition.buildStyles(r,n,e)}}function t8(t,r,n){t.has(r)?t.has(n)||t.set(n,t.get(r)):t.has(n)&&t.set(r,t.get(n))}const g4e=new vw;class p4e{constructor(r,n,e){this.bodyNode=r,this._driver=n,this._normalizer=e,this._animations=new Map,this._playersById=new Map,this.players=[]}register(r,n){const e=[],s=qT(this._driver,n,e,[]);if(e.length)throw function xFe(t){return new se(3503,!1)}();this._animations.set(r,s)}_buildPlayer(r,n,e){const i=r.element,s=LL(this._normalizer,r.keyframes,n,e);return this._driver.animate(i,s,r.duration,r.delay,r.easing,[],!0)}create(r,n,e={}){const i=[],s=this._animations.get(r);let o;const a=new Map;if(s?(o=YT(this._driver,n,s,BT,uw,new Map,new Map,e,g4e,i),o.forEach(d=>{const g=Xr(a,d.element,new Map);d.postStyleProps.forEach(_=>g.set(_,null))})):(i.push(function yFe(){return new se(3300,!1)}()),o=[]),i.length)throw function wFe(t){return new se(3504,!1)}();a.forEach((d,g)=>{d.forEach((_,x)=>{d.set(x,this._driver.computeStyle(g,x,Uo))})});const c=vl(o.map(d=>{const g=a.get(d.element);return this._buildPlayer(d,new Map,g)}));return this._playersById.set(r,c),c.onDestroy(()=>this.destroy(r)),this.players.push(c),c}destroy(r){const n=this._getPlayer(r);n.destroy(),this._playersById.delete(r);const e=this.players.indexOf(n);e>=0&&this.players.splice(e,1)}_getPlayer(r){const n=this._playersById.get(r);if(!n)throw function CFe(t){return new se(3301,!1)}();return n}listen(r,n,e,i){const s=VT(n,"","","");return OT(this._getPlayer(r),e,s,i),()=>{}}command(r,n,e,i){if("register"==e)return void this.register(r,i[0]);if("create"==e)return void this.create(r,n,i[0]||{});const s=this._getPlayer(r);switch(e){case"play":s.play();break;case"pause":s.pause();break;case"reset":s.reset();break;case"restart":s.restart();break;case"finish":s.finish();break;case"init":s.init();break;case"setPosition":s.setPosition(parseFloat(i[0]));break;case"destroy":this.destroy(r)}}}const i8="ng-animate-queued",JT="ng-animate-disabled",x4e=[],n8={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},y4e={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},Ws="__ng_removed";class e2{get params(){return this.options.params}constructor(r,n=""){this.namespaceId=n;const e=r&&r.hasOwnProperty("value");if(this.value=function b4e(t){return t??null}(e?r.value:r),e){const{value:s,...o}=r;this.options=o}else this.options={};this.options.params||(this.options.params={})}absorbOptions(r){const n=r.params;if(n){const e=this.options.params;Object.keys(n).forEach(i=>{null==e[i]&&(e[i]=n[i])})}}}const qf="void",t2=new e2(qf);class w4e{constructor(r,n,e){this.id=r,this.hostElement=n,this._engine=e,this.players=[],this._triggers=new Map,this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+r,xs(n,this._hostClassName)}listen(r,n,e,i){if(!this._triggers.has(n))throw function IFe(t,r){return new se(3302,!1)}();if(null==e||0==e.length)throw function bFe(t){return new se(3303,!1)}();if(!function D4e(t){return"start"==t||"done"==t}(e))throw function DFe(t,r){return new se(3400,!1)}();const s=Xr(this._elementListeners,r,[]),o={name:n,phase:e,callback:i};s.push(o);const a=Xr(this._engine.statesByElement,r,new Map);return a.has(n)||(xs(r,hw),xs(r,hw+"-"+n),a.set(n,t2)),()=>{this._engine.afterFlush(()=>{const l=s.indexOf(o);l>=0&&s.splice(l,1),this._triggers.has(n)||a.delete(n)})}}register(r,n){return!this._triggers.has(r)&&(this._triggers.set(r,n),!0)}_getTrigger(r){const n=this._triggers.get(r);if(!n)throw function SFe(t){return new se(3401,!1)}();return n}trigger(r,n,e,i=!0){const s=this._getTrigger(n),o=new i2(this.id,n,r);let a=this._engine.statesByElement.get(r);a||(xs(r,hw),xs(r,hw+"-"+n),this._engine.statesByElement.set(r,a=new Map));let l=a.get(n);const c=new e2(e,this.id);if(!(e&&e.hasOwnProperty("value"))&&l&&c.absorbOptions(l.options),a.set(n,c),l||(l=t2),c.value!==qf&&l.value===c.value){if(!function E4e(t,r){const n=Object.keys(t),e=Object.keys(r);if(n.length!=e.length)return!1;for(let i=0;i{Wc(r,M),Co(r,k)})}return}const _=Xr(this._engine.playersByElement,r,[]);_.forEach(E=>{E.namespaceId==this.id&&E.triggerName==n&&E.queued&&E.destroy()});let x=s.matchTransition(l.value,c.value,r,c.params),w=!1;if(!x){if(!i)return;x=s.fallbackTransition,w=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:r,triggerName:n,transition:x,fromState:l,toState:c,player:o,isFallbackTransition:w}),w||(xs(r,i8),o.onStart(()=>{_h(r,i8)})),o.onDone(()=>{let E=this.players.indexOf(o);E>=0&&this.players.splice(E,1);const M=this._engine.playersByElement.get(r);if(M){let k=M.indexOf(o);k>=0&&M.splice(k,1)}}),this.players.push(o),_.push(o),o}deregister(r){this._triggers.delete(r),this._engine.statesByElement.forEach(n=>n.delete(r)),this._elementListeners.forEach((n,e)=>{this._elementListeners.set(e,n.filter(i=>i.name!=r))})}clearElementCache(r){this._engine.statesByElement.delete(r),this._elementListeners.delete(r);const n=this._engine.playersByElement.get(r);n&&(n.forEach(e=>e.destroy()),this._engine.playersByElement.delete(r))}_signalRemovalForInnerTriggers(r,n){const e=this._engine.driver.query(r,gw,!0);e.forEach(i=>{if(i[Ws])return;const s=this._engine.fetchNamespacesByElement(i);s.size?s.forEach(o=>o.triggerLeaveAnimation(i,n,!1,!0)):this.clearElementCache(i)}),this._engine.afterFlushAnimationsDone(()=>e.forEach(i=>this.clearElementCache(i)))}triggerLeaveAnimation(r,n,e,i){const s=this._engine.statesByElement.get(r),o=new Map;if(s){const a=[];if(s.forEach((l,c)=>{if(o.set(c,l.value),this._triggers.has(c)){const d=this.trigger(r,c,qf,i);d&&a.push(d)}}),a.length)return this._engine.markElementAsRemoved(this.id,r,!0,n,o),e&&vl(a).onDone(()=>this._engine.processLeaveNode(r)),!0}return!1}prepareLeaveAnimationListeners(r){const n=this._elementListeners.get(r),e=this._engine.statesByElement.get(r);if(n&&e){const i=new Set;n.forEach(s=>{const o=s.name;if(i.has(o))return;i.add(o);const l=this._triggers.get(o).fallbackTransition,c=e.get(o)||t2,d=new e2(qf),g=new i2(this.id,o,r);this._engine.totalQueuedPlayers++,this._queue.push({element:r,triggerName:o,transition:l,fromState:c,toState:d,player:g,isFallbackTransition:!0})})}}removeNode(r,n){const e=this._engine;if(r.childElementCount&&this._signalRemovalForInnerTriggers(r,n),this.triggerLeaveAnimation(r,n,!0))return;let i=!1;if(e.totalAnimations){const s=e.players.length?e.playersByQueriedElement.get(r):[];if(s&&s.length)i=!0;else{let o=r;for(;o=o.parentNode;)if(e.statesByElement.get(o)){i=!0;break}}}if(this.prepareLeaveAnimationListeners(r),i)e.markElementAsRemoved(this.id,r,!1,n);else{const s=r[Ws];(!s||s===n8)&&(e.afterFlush(()=>this.clearElementCache(r)),e.destroyInnerAnimations(r),e._onRemovalComplete(r,n))}}insertNode(r,n){xs(r,this._hostClassName)}drainQueuedTransitions(r){const n=[];return this._queue.forEach(e=>{const i=e.player;if(i.destroyed)return;const s=e.element,o=this._elementListeners.get(s);o&&o.forEach(a=>{if(a.name==e.triggerName){const l=VT(s,e.triggerName,e.fromState.value,e.toState.value);l._data=r,OT(e.player,a.phase,l,a.callback)}}),i.markedForDestroy?this._engine.afterFlush(()=>{i.destroy()}):n.push(e)}),this._queue=[],n.sort((e,i)=>{const s=e.transition.ast.depCount,o=i.transition.ast.depCount;return 0==s||0==o?s-o:this._engine.driver.containsElement(e.element,i.element)?1:-1})}destroy(r){this.players.forEach(n=>n.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,r)}}class C4e{_onRemovalComplete(r,n){this.onRemovalComplete(r,n)}constructor(r,n,e,i){this.bodyNode=r,this.driver=n,this._normalizer=e,this.scheduler=i,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=(s,o)=>{}}get queuedPlayers(){const r=[];return this._namespaceList.forEach(n=>{n.players.forEach(e=>{e.queued&&r.push(e)})}),r}createNamespace(r,n){const e=new w4e(r,n,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,n)?this._balanceNamespaceList(e,n):(this.newHostElements.set(n,e),this.collectEnterElement(n)),this._namespaceLookup[r]=e}_balanceNamespaceList(r,n){const e=this._namespaceList,i=this.namespacesByHostElement;if(e.length-1>=0){let o=!1,a=this.driver.getParentElement(n);for(;a;){const l=i.get(a);if(l){const c=e.indexOf(l);e.splice(c+1,0,r),o=!0;break}a=this.driver.getParentElement(a)}o||e.unshift(r)}else e.push(r);return i.set(n,r),r}register(r,n){let e=this._namespaceLookup[r];return e||(e=this.createNamespace(r,n)),e}registerTrigger(r,n,e){let i=this._namespaceLookup[r];i&&i.register(n,e)&&this.totalAnimations++}destroy(r,n){r&&(this.afterFlush(()=>{}),this.afterFlushAnimationsDone(()=>{const e=this._fetchNamespace(r);this.namespacesByHostElement.delete(e.hostElement);const i=this._namespaceList.indexOf(e);i>=0&&this._namespaceList.splice(i,1),e.destroy(n),delete this._namespaceLookup[r]}))}_fetchNamespace(r){return this._namespaceLookup[r]}fetchNamespacesByElement(r){const n=new Set,e=this.statesByElement.get(r);if(e)for(let i of e.values())if(i.namespaceId){const s=this._fetchNamespace(i.namespaceId);s&&n.add(s)}return n}trigger(r,n,e,i){if(ww(n)){const s=this._fetchNamespace(r);if(s)return s.trigger(n,e,i),!0}return!1}insertNode(r,n,e,i){if(!ww(n))return;const s=n[Ws];if(s&&s.setForRemoval){s.setForRemoval=!1,s.setForMove=!0;const o=this.collectedLeaveElements.indexOf(n);o>=0&&this.collectedLeaveElements.splice(o,1)}if(r){const o=this._fetchNamespace(r);o&&o.insertNode(n,e)}i&&this.collectEnterElement(n)}collectEnterElement(r){this.collectedEnterElements.push(r)}markElementAsDisabled(r,n){n?this.disabledNodes.has(r)||(this.disabledNodes.add(r),xs(r,JT)):this.disabledNodes.has(r)&&(this.disabledNodes.delete(r),_h(r,JT))}removeNode(r,n,e){if(ww(n)){this.scheduler?.notify();const i=r?this._fetchNamespace(r):null;i?i.removeNode(n,e):this.markElementAsRemoved(r,n,!1,e);const s=this.namespacesByHostElement.get(n);s&&s.id!==r&&s.removeNode(n,e)}else this._onRemovalComplete(n,e)}markElementAsRemoved(r,n,e,i,s){this.collectedLeaveElements.push(n),n[Ws]={namespaceId:r,setForRemoval:i,hasAnimation:e,removedBeforeQueried:!1,previousTriggersValues:s}}listen(r,n,e,i,s){return ww(n)?this._fetchNamespace(r).listen(n,e,i,s):()=>{}}_buildInstruction(r,n,e,i,s){return r.transition.build(this.driver,r.element,r.fromState.value,r.toState.value,e,i,r.fromState.options,r.toState.options,n,s)}destroyInnerAnimations(r){let n=this.driver.query(r,gw,!0);n.forEach(e=>this.destroyActiveAnimationsForElement(e)),0!=this.playersByQueriedElement.size&&(n=this.driver.query(r,zT,!0),n.forEach(e=>this.finishActiveQueriedAnimationOnElement(e)))}destroyActiveAnimationsForElement(r){const n=this.playersByElement.get(r);n&&n.forEach(e=>{e.queued?e.markedForDestroy=!0:e.destroy()})}finishActiveQueriedAnimationOnElement(r){const n=this.playersByQueriedElement.get(r);n&&n.forEach(e=>e.finish())}whenRenderingDone(){return new Promise(r=>{if(this.players.length)return vl(this.players).onDone(()=>r());r()})}processLeaveNode(r){const n=r[Ws];if(n&&n.setForRemoval){if(r[Ws]=n8,n.namespaceId){this.destroyInnerAnimations(r);const e=this._fetchNamespace(n.namespaceId);e&&e.clearElementCache(r)}this._onRemovalComplete(r,n.setForRemoval)}r.classList?.contains(JT)&&this.markElementAsDisabled(r,!1),this.driver.query(r,".ng-animate-disabled",!0).forEach(e=>{this.markElementAsDisabled(e,!1)})}flush(r=-1){let n=[];if(this.newHostElements.size&&(this.newHostElements.forEach((e,i)=>this._balanceNamespaceList(e,i)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let e=0;ee()),this._flushFns=[],this._whenQuietFns.length){const e=this._whenQuietFns;this._whenQuietFns=[],n.length?vl(n).onDone(()=>{e.forEach(i=>i())}):e.forEach(i=>i())}}reportError(r){throw function TFe(t){return new se(3402,!1)}()}_flushAnimations(r,n){const e=new vw,i=[],s=new Map,o=[],a=new Map,l=new Map,c=new Map,d=new Set;this.disabledNodes.forEach(Se=>{d.add(Se);const Me=this.driver.query(Se,".ng-animate-queued",!0);for(let Ne=0;Ne{const Ne=BT+E++;w.set(Me,Ne),Se.forEach($e=>xs($e,Ne))});const M=[],k=new Set,N=new Set;for(let Se=0;Sek.add($e)):N.add(Me))}const q=new Map,$=o8(_,Array.from(k));$.forEach((Se,Me)=>{const Ne=uw+E++;q.set(Me,Ne),Se.forEach($e=>xs($e,Ne))}),r.push(()=>{x.forEach((Se,Me)=>{const Ne=w.get(Me);Se.forEach($e=>_h($e,Ne))}),$.forEach((Se,Me)=>{const Ne=q.get(Me);Se.forEach($e=>_h($e,Ne))}),M.forEach(Se=>{this.processLeaveNode(Se)})});const ce=[],ge=[];for(let Se=this._namespaceList.length-1;Se>=0;Se--)this._namespaceList[Se].drainQueuedTransitions(n).forEach(Ne=>{const $e=Ne.player,Gi=Ne.element;if(ce.push($e),this.collectedEnterElements.length){const Qi=Gi[Ws];if(Qi&&Qi.setForMove){if(Qi.previousTriggersValues&&Qi.previousTriggersValues.has(Ne.triggerName)){const Vr=Qi.previousTriggersValues.get(Ne.triggerName),Yn=this.statesByElement.get(Ne.element);if(Yn&&Yn.has(Ne.triggerName)){const ha=Yn.get(Ne.triggerName);ha.value=Vr,Yn.set(Ne.triggerName,ha)}}return void $e.destroy()}}const Ui=!g||!this.driver.containsElement(g,Gi),Yi=q.get(Gi),rn=w.get(Gi),kt=this._buildInstruction(Ne,e,rn,Yi,Ui);if(kt.errors&&kt.errors.length)return void ge.push(kt);if(Ui)return $e.onStart(()=>Wc(Gi,kt.fromStyles)),$e.onDestroy(()=>Co(Gi,kt.toStyles)),void i.push($e);if(Ne.isFallbackTransition)return $e.onStart(()=>Wc(Gi,kt.fromStyles)),$e.onDestroy(()=>Co(Gi,kt.toStyles)),void i.push($e);const Hi=[];kt.timelines.forEach(Qi=>{Qi.stretchStartingKeyframe=!0,this.disabledNodes.has(Qi.element)||Hi.push(Qi)}),kt.timelines=Hi,e.append(Gi,kt.timelines),o.push({instruction:kt,player:$e,element:Gi}),kt.queriedElements.forEach(Qi=>Xr(a,Qi,[]).push($e)),kt.preStyleProps.forEach((Qi,Vr)=>{if(Qi.size){let Yn=l.get(Vr);Yn||l.set(Vr,Yn=new Set),Qi.forEach((ha,ga)=>Yn.add(ga))}}),kt.postStyleProps.forEach((Qi,Vr)=>{let Yn=c.get(Vr);Yn||c.set(Vr,Yn=new Set),Qi.forEach((ha,ga)=>Yn.add(ga))})});if(ge.length){const Se=[];ge.forEach(Me=>{Se.push(function EFe(t,r){return new se(3505,!1)}())}),ce.forEach(Me=>Me.destroy()),this.reportError(Se)}const De=new Map,be=new Map;o.forEach(Se=>{const Me=Se.element;e.has(Me)&&(be.set(Me,Me),this._beforeAnimationBuild(Se.player.namespaceId,Se.instruction,De))}),i.forEach(Se=>{const Me=Se.element;this._getPreviousPlayers(Me,!1,Se.namespaceId,Se.triggerName,null).forEach($e=>{Xr(De,Me,[]).push($e),$e.destroy()})});const Re=M.filter(Se=>l8(Se,l,c)),Vt=new Map;s8(Vt,this.driver,N,c,Uo).forEach(Se=>{l8(Se,l,c)&&Re.push(Se)});const ti=new Map;x.forEach((Se,Me)=>{s8(ti,this.driver,new Set(Se),l,"!")}),Re.forEach(Se=>{const Me=Vt.get(Se),Ne=ti.get(Se);Vt.set(Se,new Map([...Me?.entries()??[],...Ne?.entries()??[]]))});const gr=[],Ki=[],Zi={};o.forEach(Se=>{const{element:Me,player:Ne,instruction:$e}=Se;if(e.has(Me)){if(d.has(Me))return Ne.onDestroy(()=>Co(Me,$e.toStyles)),Ne.disabled=!0,Ne.overrideTotalTime($e.totalTime),void i.push(Ne);let Gi=Zi;if(be.size>1){let Yi=Me;const rn=[];for(;Yi=Yi.parentNode;){const kt=be.get(Yi);if(kt){Gi=kt;break}rn.push(Yi)}rn.forEach(kt=>be.set(kt,Gi))}const Ui=this._buildAnimation(Ne.namespaceId,$e,De,s,ti,Vt);if(Ne.setRealPlayer(Ui),Gi===Zi)gr.push(Ne);else{const Yi=this.playersByElement.get(Gi);Yi&&Yi.length&&(Ne.parentPlayer=vl(Yi)),i.push(Ne)}}else Wc(Me,$e.fromStyles),Ne.onDestroy(()=>Co(Me,$e.toStyles)),Ki.push(Ne),d.has(Me)&&i.push(Ne)}),Ki.forEach(Se=>{const Me=s.get(Se.element);if(Me&&Me.length){const Ne=vl(Me);Se.setRealPlayer(Ne)}}),i.forEach(Se=>{Se.parentPlayer?Se.syncPlayerEvents(Se.parentPlayer):Se.destroy()});for(let Se=0;Se!Ui.destroyed);Gi.length?S4e(this,Me,Gi):this.processLeaveNode(Me)}return M.length=0,gr.forEach(Se=>{this.players.push(Se),Se.onDone(()=>{Se.destroy();const Me=this.players.indexOf(Se);this.players.splice(Me,1)}),Se.play()}),gr}afterFlush(r){this._flushFns.push(r)}afterFlushAnimationsDone(r){this._whenQuietFns.push(r)}_getPreviousPlayers(r,n,e,i,s){let o=[];if(n){const a=this.playersByQueriedElement.get(r);a&&(o=a)}else{const a=this.playersByElement.get(r);if(a){const l=!s||s==qf;a.forEach(c=>{c.queued||!l&&c.triggerName!=i||o.push(c)})}}return(e||i)&&(o=o.filter(a=>!(e&&e!=a.namespaceId||i&&i!=a.triggerName))),o}_beforeAnimationBuild(r,n,e){const s=n.element,o=n.isRemovalTransition?void 0:r,a=n.isRemovalTransition?void 0:n.triggerName;for(const l of n.timelines){const c=l.element,d=c!==s,g=Xr(e,c,[]);this._getPreviousPlayers(c,d,o,a,n.toState).forEach(x=>{const w=x.getRealPlayer();w.beforeDestroy&&w.beforeDestroy(),x.destroy(),g.push(x)})}Wc(s,n.fromStyles)}_buildAnimation(r,n,e,i,s,o){const a=n.triggerName,l=n.element,c=[],d=new Set,g=new Set,_=n.timelines.map(w=>{const E=w.element;d.add(E);const M=E[Ws];if(M&&M.removedBeforeQueried)return new bp(w.duration,w.delay);const k=E!==l,N=function T4e(t){const r=[];return a8(t,r),r}((e.get(E)||x4e).map(De=>De.getRealPlayer())).filter(De=>!!De.element&&De.element===E),q=s.get(E),$=o.get(E),ce=LL(this._normalizer,w.keyframes,q,$),ge=this._buildPlayer(w,ce,N);if(w.subTimeline&&i&&g.add(E),k){const De=new i2(r,a,E);De.setRealPlayer(ge),c.push(De)}return ge});c.forEach(w=>{Xr(this.playersByQueriedElement,w.element,[]).push(w),w.onDone(()=>function I4e(t,r,n){let e=t.get(r);if(e){if(e.length){const i=e.indexOf(n);e.splice(i,1)}0==e.length&&t.delete(r)}return e}(this.playersByQueriedElement,w.element,w))}),d.forEach(w=>xs(w,jL));const x=vl(_);return x.onDestroy(()=>{d.forEach(w=>_h(w,jL)),Co(l,n.toStyles)}),g.forEach(w=>{Xr(i,w,[]).push(x)}),x}_buildPlayer(r,n,e){return n.length>0?this.driver.animate(r.element,n,r.duration,r.delay,r.easing,e):new bp(r.duration,r.delay)}}class i2{constructor(r,n,e){this.namespaceId=r,this.triggerName=n,this.element=e,this._player=new bp,this._containsRealPlayer=!1,this._queuedCallbacks=new Map,this.destroyed=!1,this.parentPlayer=null,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}setRealPlayer(r){this._containsRealPlayer||(this._player=r,this._queuedCallbacks.forEach((n,e)=>{n.forEach(i=>OT(r,e,void 0,i))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(r.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(r){this.totalTime=r}syncPlayerEvents(r){const n=this._player;n.triggerCallback&&r.onStart(()=>n.triggerCallback("start")),r.onDone(()=>this.finish()),r.onDestroy(()=>this.destroy())}_queueEvent(r,n){Xr(this._queuedCallbacks,r,[]).push(n)}onDone(r){this.queued&&this._queueEvent("done",r),this._player.onDone(r)}onStart(r){this.queued&&this._queueEvent("start",r),this._player.onStart(r)}onDestroy(r){this.queued&&this._queueEvent("destroy",r),this._player.onDestroy(r)}init(){this._player.init()}hasStarted(){return!this.queued&&this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(r){this.queued||this._player.setPosition(r)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(r){const n=this._player;n.triggerCallback&&n.triggerCallback(r)}}function ww(t){return t&&1===t.nodeType}function r8(t,r){const n=t.style.display;return t.style.display=r??"none",n}function s8(t,r,n,e,i){const s=[];n.forEach(l=>s.push(r8(l)));const o=[];e.forEach((l,c)=>{const d=new Map;l.forEach(g=>{const _=r.computeStyle(c,g,i);d.set(g,_),(!_||0==_.length)&&(c[Ws]=y4e,o.push(c))}),t.set(c,d)});let a=0;return n.forEach(l=>r8(l,s[a++])),o}function o8(t,r){const n=new Map;if(t.forEach(a=>n.set(a,[])),0==r.length)return n;const i=new Set(r),s=new Map;function o(a){if(!a)return 1;let l=s.get(a);if(l)return l;const c=a.parentNode;return l=n.has(c)?c:i.has(c)?1:o(c),s.set(a,l),l}return r.forEach(a=>{const l=o(a);1!==l&&n.get(l).push(a)}),n}function xs(t,r){t.classList?.add(r)}function _h(t,r){t.classList?.remove(r)}function S4e(t,r,n){vl(n).onDone(()=>t.processLeaveNode(r))}function a8(t,r){for(let n=0;ni.add(s)):r.set(t,e),n.delete(t),!0}class Kf{constructor(r,n,e,i){this._driver=n,this._normalizer=e,this._triggerCache={},this.onRemovalComplete=(s,o)=>{},this._transitionEngine=new C4e(r.body,n,e,i),this._timelineEngine=new p4e(r.body,n,e),this._transitionEngine.onRemovalComplete=(s,o)=>this.onRemovalComplete(s,o)}registerTrigger(r,n,e,i,s){const o=r+"-"+i;let a=this._triggerCache[o];if(!a){const l=[],d=qT(this._driver,s,l,[]);if(l.length)throw function _Fe(t,r){return new se(3404,!1)}();a=function d4e(t,r,n){return new u4e(t,r,n)}(i,d,this._normalizer),this._triggerCache[o]=a}this._transitionEngine.registerTrigger(n,i,a)}register(r,n){this._transitionEngine.register(r,n)}destroy(r,n){this._transitionEngine.destroy(r,n)}onInsert(r,n,e,i){this._transitionEngine.insertNode(r,n,e,i)}onRemove(r,n,e){this._transitionEngine.removeNode(r,n,e)}disableAnimations(r,n){this._transitionEngine.markElementAsDisabled(r,n)}process(r,n,e,i){if("@"==e.charAt(0)){const[s,o]=GL(e);this._timelineEngine.command(s,n,o,i)}else this._transitionEngine.trigger(r,n,e,i)}listen(r,n,e,i,s){if("@"==e.charAt(0)){const[o,a]=GL(e);return this._timelineEngine.listen(o,n,a,s)}return this._transitionEngine.listen(r,n,e,i,s)}flush(r=-1){this._transitionEngine.flush(r)}get players(){return[...this._transitionEngine.players,...this._timelineEngine.players]}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}afterFlushAnimationsDone(r){this._transitionEngine.afterFlushAnimationsDone(r)}}class vh{constructor(r,n,e){this._element=r,this._startStyles=n,this._endStyles=e,this._state=0;let i=vh.initialStylesByElement.get(r);i||vh.initialStylesByElement.set(r,i=new Map),this._initialStyles=i}start(){this._state<1&&(this._startStyles&&Co(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(Co(this._element,this._initialStyles),this._endStyles&&(Co(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(vh.initialStylesByElement.delete(this._element),this._startStyles&&(Wc(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(Wc(this._element,this._endStyles),this._endStyles=null),Co(this._element,this._initialStyles),this._state=3)}}function n2(t){let r=null;return t.forEach((n,e)=>{(function A4e(t){return"display"===t||"position"===t})(e)&&(r=r||new Map,r.set(e,n))}),r}vh.initialStylesByElement=new WeakMap;class c8{constructor(r,n,e,i){this.element=r,this.keyframes=n,this.options=e,this._specialStyles=i,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this._originalOnDoneFns=[],this._originalOnStartFns=[],this.time=0,this.parentPlayer=null,this.currentSnapshot=new Map,this._duration=e.duration,this._delay=e.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(r=>r()),this._onDoneFns=[])}init(){this._buildPlayer(),this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return;this._initialized=!0;const r=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,r,this.options),this._finalKeyframe=r.length?r[r.length-1]:new Map;const n=()=>this._onFinish();this.domPlayer.addEventListener("finish",n),this.onDestroy(()=>{this.domPlayer.removeEventListener("finish",n)})}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()}_convertKeyframesToObject(r){const n=[];return r.forEach(e=>{n.push(Object.fromEntries(e))}),n}_triggerWebAnimation(r,n,e){return r.animate(this._convertKeyframesToObject(n),e)}onStart(r){this._originalOnStartFns.push(r),this._onStartFns.push(r)}onDone(r){this._originalOnDoneFns.push(r),this._onDoneFns.push(r)}onDestroy(r){this._onDestroyFns.push(r)}play(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(r=>r()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()}pause(){this.init(),this.domPlayer.pause()}finish(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer&&this.domPlayer.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(r=>r()),this._onDestroyFns=[])}setPosition(r){void 0===this.domPlayer&&this.init(),this.domPlayer.currentTime=r*this.time}getPosition(){return+(this.domPlayer.currentTime??0)/this.time}get totalTime(){return this._delay+this._duration}beforeDestroy(){const r=new Map;this.hasStarted()&&this._finalKeyframe.forEach((e,i)=>{"offset"!==i&&r.set(i,this._finished?e:$T(this.element,i))}),this.currentSnapshot=r}triggerCallback(r){const n="start"===r?this._onStartFns:this._onDoneFns;n.forEach(e=>e()),n.length=0}}class d8{validateStyleProperty(r){return!0}validateAnimatableStyleProperty(r){return!0}matchesElement(r,n){return!1}containsElement(r,n){return BL(r,n)}getParentElement(r){return LT(r)}query(r,n,e){return zL(r,n,e)}computeStyle(r,n,e){return $T(r,n)}animate(r,n,e,i,s,o=[]){const l={duration:e,delay:i,fill:0==i?"both":"forwards"};s&&(l.easing=s);const c=new Map,d=o.filter(x=>x instanceof c8);(function BFe(t,r){return 0===t||0===r})(e,i)&&d.forEach(x=>{x.currentSnapshot.forEach((w,E)=>c.set(E,w))});let g=function LFe(t){return t.length?t[0]instanceof Map?t:t.map(r=>new Map(Object.entries(r))):[]}(n).map(x=>new Map(x));g=function zFe(t,r,n){if(n.size&&r.length){let e=r[0],i=[];if(n.forEach((s,o)=>{e.has(o)||i.push(o),e.set(o,s)}),i.length)for(let s=1;so.set(a,$T(t,a)))}}return r}(r,g,c);const _=function M4e(t,r){let n=null,e=null;return Array.isArray(r)&&r.length?(n=n2(r[0]),r.length>1&&(e=n2(r[r.length-1]))):r instanceof Map&&(n=n2(r)),n||e?new vh(t,n,e):null}(r,g);return new c8(r,g,l,_)}}const u8="@.disabled";class h8{constructor(r,n,e,i){this.namespaceId=r,this.delegate=n,this.engine=e,this._onDestroy=i,this.\u0275type=0}get data(){return this.delegate.data}destroyNode(r){this.delegate.destroyNode?.(r)}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.engine.afterFlushAnimationsDone(()=>{queueMicrotask(()=>{this.delegate.destroy()})}),this._onDestroy?.()}createElement(r,n){return this.delegate.createElement(r,n)}createComment(r){return this.delegate.createComment(r)}createText(r){return this.delegate.createText(r)}appendChild(r,n){this.delegate.appendChild(r,n),this.engine.onInsert(this.namespaceId,n,r,!1)}insertBefore(r,n,e,i=!0){this.delegate.insertBefore(r,n,e),this.engine.onInsert(this.namespaceId,n,r,i)}removeChild(r,n,e){this.engine.onRemove(this.namespaceId,n,this.delegate)}selectRootElement(r,n){return this.delegate.selectRootElement(r,n)}parentNode(r){return this.delegate.parentNode(r)}nextSibling(r){return this.delegate.nextSibling(r)}setAttribute(r,n,e,i){this.delegate.setAttribute(r,n,e,i)}removeAttribute(r,n,e){this.delegate.removeAttribute(r,n,e)}addClass(r,n){this.delegate.addClass(r,n)}removeClass(r,n){this.delegate.removeClass(r,n)}setStyle(r,n,e,i){this.delegate.setStyle(r,n,e,i)}removeStyle(r,n,e){this.delegate.removeStyle(r,n,e)}setProperty(r,n,e){"@"==n.charAt(0)&&n==u8?this.disableAnimations(r,!!e):this.delegate.setProperty(r,n,e)}setValue(r,n){this.delegate.setValue(r,n)}listen(r,n,e){return this.delegate.listen(r,n,e)}disableAnimations(r,n){this.engine.disableAnimations(r,n)}}class k4e extends h8{constructor(r,n,e,i,s){super(n,e,i,s),this.factory=r,this.namespaceId=n}setProperty(r,n,e){"@"==n.charAt(0)?"."==n.charAt(1)&&n==u8?this.disableAnimations(r,e=void 0===e||!!e):this.engine.process(this.namespaceId,r,n.slice(1),e):this.delegate.setProperty(r,n,e)}listen(r,n,e){if("@"==n.charAt(0)){const i=function R4e(t){switch(t){case"body":return document.body;case"document":return document;case"window":return window;default:return t}}(r);let s=n.slice(1),o="";return"@"!=s.charAt(0)&&([s,o]=function P4e(t){const r=t.indexOf(".");return[t.substring(0,r),t.slice(r+1)]}(s)),this.engine.listen(this.namespaceId,i,s,o,a=>{this.factory.scheduleListenerCallback(a._data||-1,e,a)})}return this.delegate.listen(r,n,e)}}class F4e{constructor(r,n,e){this.delegate=r,this.engine=n,this._zone=e,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,n.onRemovalComplete=(i,s)=>{const o=s?.parentNode(i);o&&s.removeChild(o,i)}}createRenderer(r,n){const i=this.delegate.createRenderer(r,n);if(!r||!n?.data?.animation){const c=this._rendererCache;let d=c.get(i);return d||(d=new h8("",i,this.engine,()=>c.delete(i)),c.set(i,d)),d}const s=n.id,o=n.id+"-"+this._currentId;this._currentId++,this.engine.register(o,r);const a=c=>{Array.isArray(c)?c.forEach(a):this.engine.registerTrigger(s,o,r,c.name,c)};return n.data.animation.forEach(a),new k4e(this,o,i,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){queueMicrotask(()=>{this._microtaskId++})}scheduleListenerCallback(r,n,e){if(r>=0&&rn(e));const i=this._animationCallbacksBuffer;0==i.length&&queueMicrotask(()=>{this._zone.run(()=>{i.forEach(s=>{const[o,a]=s;o(a)}),this._animationCallbacksBuffer=[]})}),i.push([n,e])}end(){this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}}let O4e=(()=>{var t;class r extends Kf{constructor(e,i,s){super(e,i,s,fe(BC,{optional:!0}))}ngOnDestroy(){this.flush()}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(St),ve(dw),ve(HT))},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();const g8=[{provide:HT,useFactory:function N4e(){return new qL}},{provide:Kf,useClass:O4e},{provide:S_,useFactory:function V4e(t,r,n){return new F4e(t,r,n)},deps:[fD,Kf,Oe]}],L4e=[{provide:dw,useFactory:()=>new d8},{provide:m0,useValue:"BrowserAnimations"},...g8];class z4e extends Zt{notifyNext(r,n,e,i,s){this.destination.next(n)}notifyError(r,n){this.destination.error(r)}notifyComplete(r){this.destination.complete()}}class U4e extends Zt{constructor(r,n,e){super(),this.parent=r,this.outerValue=n,this.outerIndex=e,this.index=0}_next(r){this.parent.notifyNext(this.outerValue,r,this.outerIndex,this.index++,this)}_error(r){this.parent.notifyError(r,this),this.unsubscribe()}_complete(){this.parent.notifyComplete(this),this.unsubscribe()}}function j4e(t,r,n,e,i=new U4e(t,n,e)){if(!i.closed)return r instanceof wi?r.subscribe(i):v1(r)(i)}const p8={};function r2(...t){let r,n;return au(t[t.length-1])&&(n=t.pop()),"function"==typeof t[t.length-1]&&(r=t.pop()),1===t.length&&Yc(t[0])&&(t=t[0]),$1(t,n).lift(new W4e(r))}class W4e{constructor(r){this.resultSelector=r}call(r,n){return n.subscribe(new $4e(r,this.resultSelector))}}class $4e extends z4e{constructor(r,n){super(r),this.resultSelector=n,this.active=0,this.values=[],this.observables=[]}_next(r){this.values.push(p8),this.observables.push(r)}_complete(){const r=this.observables,n=r.length;if(0===n)this.destination.complete();else{this.active=n,this.toRespond=n;for(let e=0;e{let n;try{n=t()}catch(i){return void r.error(i)}return(n?Dn(n):Nv()).subscribe(r)})}function s2(){return function(r){return r.lift(new q4e(r))}}class q4e{constructor(r){this.connectable=r}call(r,n){const{connectable:e}=this;e._refCount++;const i=new K4e(r,e),s=n.subscribe(i);return i.closed||(i.connection=e.connect()),s}}class K4e extends Zt{constructor(r,n){super(r),this.connectable=n}_unsubscribe(){const{connectable:r}=this;if(!r)return void(this.connection=null);this.connectable=null;const n=r._refCount;if(n<=0)return void(this.connection=null);if(r._refCount=n-1,n>1)return void(this.connection=null);const{connection:e}=this,i=r._connection;this.connection=null,i&&(!e||i===e)&&i.unsubscribe()}}class o2 extends wi{constructor(r,n){super(),this.source=r,this.subjectFactory=n,this._refCount=0,this._isComplete=!1}_subscribe(r){return this.getSubject().subscribe(r)}getSubject(){const r=this._subject;return(!r||r.isStopped)&&(this._subject=this.subjectFactory()),this._subject}connect(){let r=this._connection;return r||(this._isComplete=!1,r=this._connection=new yi,r.add(this.source.subscribe(new Z4e(this.getSubject(),this))),r.closed&&(this._connection=null,r=yi.EMPTY)),r}refCount(){return s2()(this)}}class Z4e extends J2{constructor(r,n){super(r),this.connectable=n}_error(r){this._unsubscribe(),super._error(r)}_complete(){this.connectable._isComplete=!0,this._unsubscribe(),super._complete()}_unsubscribe(){const r=this.connectable;if(r){this.connectable=null;const n=r._connection;r._refCount=0,r._subject=null,r._connection=null,n&&n.unsubscribe()}}}function Zf(t){return function(n){const e=new Q4e(t),i=n.lift(e);return e.caught=i}}class Q4e{constructor(r){this.selector=r}call(r,n){return n.subscribe(new X4e(r,this.selector,this.caught))}}class X4e extends cu{constructor(r,n,e){super(r),this.selector=n,this.caught=e}error(r){if(!this.isStopped){let n;try{n=this.selector(r,this.caught)}catch(s){return void super.error(s)}this._unsubscribeAndRecycle();const e=new lu(this);this.add(e);const i=du(n,e);i!==e&&this.add(i)}}}class eOe{constructor(r,n,e=!1){this.accumulator=r,this.seed=n,this.hasSeed=e}call(r,n){return n.subscribe(new tOe(r,this.accumulator,this.seed,this.hasSeed))}}class tOe extends Zt{constructor(r,n,e,i){super(r),this.accumulator=n,this._seed=e,this.hasSeed=i,this.index=0}get seed(){return this._seed}set seed(r){this.hasSeed=!0,this._seed=r}_next(r){if(this.hasSeed)return this._tryNext(r);this.seed=r,this.destination.next(r)}_tryNext(r){const n=this.index++;let e;try{e=this.accumulator(this.seed,r,n)}catch(i){this.destination.error(i)}this.seed=e,this.destination.next(e)}}function a2(t){return function(n){return 0===t?Nv():n.lift(new iOe(t))}}class iOe{constructor(r){if(this.total=r,this.total<0)throw new q1}call(r,n){return n.subscribe(new nOe(r,this.total))}}class nOe extends Zt{constructor(r,n){super(r),this.total=n,this.ring=new Array,this.count=0}_next(r){const n=this.ring,e=this.total,i=this.count++;n.length0){const e=this.count>=this.total?this.total:this.count,i=this.ring;for(let s=0;st.length||"full"===n.pathMatch&&(r.hasChildren()||e.lengthe[s]===i)}return t===r}function _8(t){return t.length>0?t[t.length-1]:null}function xl(t){return function B4e(t){return!!t&&(t instanceof wi||"function"==typeof t.lift&&"function"==typeof t.subscribe)}(t)?t:Ug(t)?Dn(Promise.resolve(t)):Ke(t)}const uOe={exact:function y8(t,r,n){if(!qc(t.segments,r.segments)||!Iw(t.segments,r.segments,n)||t.numberOfChildren!==r.numberOfChildren)return!1;for(const e in r.children)if(!t.children[e]||!y8(t.children[e],r.children[e],n))return!1;return!0},subset:w8},v8={exact:function hOe(t,r){return Io(t,r)},subset:function gOe(t,r){return Object.keys(r).length<=Object.keys(t).length&&Object.keys(r).every(n=>m8(t[n],r[n]))},ignored:()=>!0};function x8(t,r,n){return uOe[n.paths](t.root,r.root,n.matrixParams)&&v8[n.queryParams](t.queryParams,r.queryParams)&&!("exact"===n.fragment&&t.fragment!==r.fragment)}function w8(t,r,n){return C8(t,r,r.segments,n)}function C8(t,r,n,e){if(t.segments.length>n.length){const i=t.segments.slice(0,n.length);return!(!qc(i,n)||r.hasChildren()||!Iw(i,n,e))}if(t.segments.length===n.length){if(!qc(t.segments,n)||!Iw(t.segments,n,e))return!1;for(const i in r.children)if(!t.children[i]||!w8(t.children[i],r.children[i],e))return!1;return!0}{const i=n.slice(0,t.segments.length),s=n.slice(t.segments.length);return!!(qc(t.segments,i)&&Iw(t.segments,i,e)&&t.children[mt])&&C8(t.children[mt],r,s,e)}}function Iw(t,r,n){return r.every((e,i)=>v8[n](t[i].parameters,e.parameters))}class yh{constructor(r=new xi([],{}),n={},e=null){this.root=r,this.queryParams=n,this.fragment=e}get queryParamMap(){return this._queryParamMap??=xh(this.queryParams),this._queryParamMap}toString(){return mOe.serialize(this)}}class xi{constructor(r,n){this.segments=r,this.children=n,this.parent=null,Object.values(n).forEach(e=>e.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return bw(this)}}class Qf{constructor(r,n){this.path=r,this.parameters=n}get parameterMap(){return this._parameterMap??=xh(this.parameters),this._parameterMap}toString(){return D8(this)}}function qc(t,r){return t.length===r.length&&t.every((n,e)=>n.path===r[e].path)}let wh=(()=>{var t;class r{}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:()=>new c2,providedIn:"root"}),r})();class c2{parse(r){const n=new TOe(r);return new yh(n.parseRootSegment(),n.parseQueryParams(),n.parseFragment())}serialize(r){const n=`/${Xf(r.root,!0)}`,e=function xOe(t){const r=Object.entries(t).map(([n,e])=>Array.isArray(e)?e.map(i=>`${Dw(n)}=${Dw(i)}`).join("&"):`${Dw(n)}=${Dw(e)}`).filter(n=>n);return r.length?`?${r.join("&")}`:""}(r.queryParams),i="string"==typeof r.fragment?`#${function _Oe(t){return encodeURI(t)}(r.fragment)}`:"";return`${n}${e}${i}`}}const mOe=new c2;function bw(t){return t.segments.map(r=>D8(r)).join("/")}function Xf(t,r){if(!t.hasChildren())return bw(t);if(r){const n=t.children[mt]?Xf(t.children[mt],!1):"",e=[];return Object.entries(t.children).forEach(([i,s])=>{i!==mt&&e.push(`${i}:${Xf(s,!1)}`)}),e.length>0?`${n}(${e.join("//")})`:n}{const n=function fOe(t,r){let n=[];return Object.entries(t.children).forEach(([e,i])=>{e===mt&&(n=n.concat(r(i,e)))}),Object.entries(t.children).forEach(([e,i])=>{e!==mt&&(n=n.concat(r(i,e)))}),n}(t,(e,i)=>i===mt?[Xf(t.children[mt],!1)]:[`${i}:${Xf(e,!1)}`]);return 1===Object.keys(t.children).length&&null!=t.children[mt]?`${bw(t)}/${n[0]}`:`${bw(t)}/(${n.join("//")})`}}function I8(t){return encodeURIComponent(t).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Dw(t){return I8(t).replace(/%3B/gi,";")}function d2(t){return I8(t).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function Sw(t){return decodeURIComponent(t)}function b8(t){return Sw(t.replace(/\+/g,"%20"))}function D8(t){return`${d2(t.path)}${function vOe(t){return Object.entries(t).map(([r,n])=>`;${d2(r)}=${d2(n)}`).join("")}(t.parameters)}`}const yOe=/^[^\/()?;#]+/;function u2(t){const r=t.match(yOe);return r?r[0]:""}const wOe=/^[^\/()?;=#]+/,IOe=/^[^=?&#]+/,DOe=/^[^&#]+/;class TOe{constructor(r){this.url=r,this.remaining=r}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new xi([],{}):new xi([],this.parseChildren())}parseQueryParams(){const r={};if(this.consumeOptional("?"))do{this.parseQueryParam(r)}while(this.consumeOptional("&"));return r}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const r=[];for(this.peekStartsWith("(")||r.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),r.push(this.parseSegment());let n={};this.peekStartsWith("/(")&&(this.capture("/"),n=this.parseParens(!0));let e={};return this.peekStartsWith("(")&&(e=this.parseParens(!1)),(r.length>0||Object.keys(n).length>0)&&(e[mt]=new xi(r,n)),e}parseSegment(){const r=u2(this.remaining);if(""===r&&this.peekStartsWith(";"))throw new se(4009,!1);return this.capture(r),new Qf(Sw(r),this.parseMatrixParams())}parseMatrixParams(){const r={};for(;this.consumeOptional(";");)this.parseParam(r);return r}parseParam(r){const n=function COe(t){const r=t.match(wOe);return r?r[0]:""}(this.remaining);if(!n)return;this.capture(n);let e="";if(this.consumeOptional("=")){const i=u2(this.remaining);i&&(e=i,this.capture(e))}r[Sw(n)]=Sw(e)}parseQueryParam(r){const n=function bOe(t){const r=t.match(IOe);return r?r[0]:""}(this.remaining);if(!n)return;this.capture(n);let e="";if(this.consumeOptional("=")){const o=function SOe(t){const r=t.match(DOe);return r?r[0]:""}(this.remaining);o&&(e=o,this.capture(e))}const i=b8(n),s=b8(e);if(r.hasOwnProperty(i)){let o=r[i];Array.isArray(o)||(o=[o],r[i]=o),o.push(s)}else r[i]=s}parseParens(r){const n={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const e=u2(this.remaining),i=this.remaining[e.length];if("/"!==i&&")"!==i&&";"!==i)throw new se(4010,!1);let s;e.indexOf(":")>-1?(s=e.slice(0,e.indexOf(":")),this.capture(s),this.capture(":")):r&&(s=mt);const o=this.parseChildren();n[s]=1===Object.keys(o).length?o[mt]:new xi([],o),this.consumeOptional("//")}return n}peekStartsWith(r){return this.remaining.startsWith(r)}consumeOptional(r){return!!this.peekStartsWith(r)&&(this.remaining=this.remaining.substring(r.length),!0)}capture(r){if(!this.consumeOptional(r))throw new se(4011,!1)}}function S8(t){return t.segments.length>0?new xi([],{[mt]:t}):t}function T8(t){const r={};for(const[e,i]of Object.entries(t.children)){const s=T8(i);if(e===mt&&0===s.segments.length&&s.hasChildren())for(const[o,a]of Object.entries(s.children))r[o]=a;else(s.segments.length>0||s.hasChildren())&&(r[e]=s)}return function EOe(t){if(1===t.numberOfChildren&&t.children[mt]){const r=t.children[mt];return new xi(t.segments.concat(r.segments),r.children)}return t}(new xi(t.segments,r))}function Ch(t){return t instanceof yh}function E8(t){let r;const i=S8(function n(s){const o={};for(const l of s.children){const c=n(l);o[l.outlet]=c}const a=new xi(s.url,o);return s===t&&(r=a),a}(t.root));return r??i}function M8(t,r,n,e){let i=t;for(;i.parent;)i=i.parent;if(0===r.length)return h2(i,i,i,n,e);const s=function AOe(t){if("string"==typeof t[0]&&1===t.length&&"/"===t[0])return new k8(!0,0,t);let r=0,n=!1;const e=t.reduce((i,s,o)=>{if("object"==typeof s&&null!=s){if(s.outlets){const a={};return Object.entries(s.outlets).forEach(([l,c])=>{a[l]="string"==typeof c?c.split("/"):c}),[...i,{outlets:a}]}if(s.segmentPath)return[...i,s.segmentPath]}return"string"!=typeof s?[...i,s]:0===o?(s.split("/").forEach((a,l)=>{0==l&&"."===a||(0==l&&""===a?n=!0:".."===a?r++:""!=a&&i.push(a))}),i):[...i,s]},[]);return new k8(n,r,e)}(r);if(s.toRoot())return h2(i,i,new xi([],{}),n,e);const o=function kOe(t,r,n){if(t.isAbsolute)return new Ew(r,!0,0);if(!n)return new Ew(r,!1,NaN);if(null===n.parent)return new Ew(n,!0,0);const e=Tw(t.commands[0])?0:1;return function ROe(t,r,n){let e=t,i=r,s=n;for(;s>i;){if(s-=i,e=e.parent,!e)throw new se(4005,!1);i=e.segments.length}return new Ew(e,!1,i-s)}(n,n.segments.length-1+e,t.numberOfDoubleDots)}(s,i,t),a=o.processChildren?em(o.segmentGroup,o.index,s.commands):R8(o.segmentGroup,o.index,s.commands);return h2(i,o.segmentGroup,a,n,e)}function Tw(t){return"object"==typeof t&&null!=t&&!t.outlets&&!t.segmentPath}function Jf(t){return"object"==typeof t&&null!=t&&t.outlets}function h2(t,r,n,e,i){let o,s={};e&&Object.entries(e).forEach(([l,c])=>{s[l]=Array.isArray(c)?c.map(d=>`${d}`):`${c}`}),o=t===r?n:A8(t,r,n);const a=S8(T8(o));return new yh(a,s,i)}function A8(t,r,n){const e={};return Object.entries(t.children).forEach(([i,s])=>{e[i]=s===r?n:A8(s,r,n)}),new xi(t.segments,e)}class k8{constructor(r,n,e){if(this.isAbsolute=r,this.numberOfDoubleDots=n,this.commands=e,r&&e.length>0&&Tw(e[0]))throw new se(4003,!1);const i=e.find(Jf);if(i&&i!==_8(e))throw new se(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class Ew{constructor(r,n,e){this.segmentGroup=r,this.processChildren=n,this.index=e}}function R8(t,r,n){if(t??=new xi([],{}),0===t.segments.length&&t.hasChildren())return em(t,r,n);const e=function FOe(t,r,n){let e=0,i=r;const s={match:!1,pathIndex:0,commandIndex:0};for(;i=n.length)return s;const o=t.segments[i],a=n[e];if(Jf(a))break;const l=`${a}`,c=e0&&void 0===l)break;if(l&&c&&"object"==typeof c&&void 0===c.outlets){if(!F8(l,c,o))return s;e+=2}else{if(!F8(l,{},o))return s;e++}i++}return{match:!0,pathIndex:i,commandIndex:e}}(t,r,n),i=n.slice(e.commandIndex);if(e.match&&e.pathIndexs!==mt)&&t.children[mt]&&1===t.numberOfChildren&&0===t.children[mt].segments.length){const s=em(t.children[mt],r,n);return new xi(t.segments,s.children)}return Object.entries(e).forEach(([s,o])=>{"string"==typeof o&&(o=[o]),null!==o&&(i[s]=R8(t.children[s],r,o))}),Object.entries(t.children).forEach(([s,o])=>{void 0===e[s]&&(i[s]=o)}),new xi(t.segments,i)}}function g2(t,r,n){const e=t.segments.slice(0,r);let i=0;for(;i{"string"==typeof e&&(e=[e]),null!==e&&(r[n]=g2(new xi([],{}),0,e))}),r}function P8(t){const r={};return Object.entries(t).forEach(([n,e])=>r[n]=`${e}`),r}function F8(t,r,n){return t==n.path&&Io(r,n.parameters)}const tm="imperative";var Nt=function(t){return t[t.NavigationStart=0]="NavigationStart",t[t.NavigationEnd=1]="NavigationEnd",t[t.NavigationCancel=2]="NavigationCancel",t[t.NavigationError=3]="NavigationError",t[t.RoutesRecognized=4]="RoutesRecognized",t[t.ResolveStart=5]="ResolveStart",t[t.ResolveEnd=6]="ResolveEnd",t[t.GuardsCheckStart=7]="GuardsCheckStart",t[t.GuardsCheckEnd=8]="GuardsCheckEnd",t[t.RouteConfigLoadStart=9]="RouteConfigLoadStart",t[t.RouteConfigLoadEnd=10]="RouteConfigLoadEnd",t[t.ChildActivationStart=11]="ChildActivationStart",t[t.ChildActivationEnd=12]="ChildActivationEnd",t[t.ActivationStart=13]="ActivationStart",t[t.ActivationEnd=14]="ActivationEnd",t[t.Scroll=15]="Scroll",t[t.NavigationSkipped=16]="NavigationSkipped",t}(Nt||{});class bo{constructor(r,n){this.id=r,this.url=n}}class Mw extends bo{constructor(r,n,e="imperative",i=null){super(r,n),this.type=Nt.NavigationStart,this.navigationTrigger=e,this.restoredState=i}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class ua extends bo{constructor(r,n,e){super(r,n),this.urlAfterRedirects=e,this.type=Nt.NavigationEnd}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}var ys=function(t){return t[t.Redirect=0]="Redirect",t[t.SupersededByNewNavigation=1]="SupersededByNewNavigation",t[t.NoDataFromResolver=2]="NoDataFromResolver",t[t.GuardRejected=3]="GuardRejected",t}(ys||{}),Aw=function(t){return t[t.IgnoredSameUrlNavigation=0]="IgnoredSameUrlNavigation",t[t.IgnoredByUrlHandlingStrategy=1]="IgnoredByUrlHandlingStrategy",t}(Aw||{});class Ih extends bo{constructor(r,n,e,i){super(r,n),this.reason=e,this.code=i,this.type=Nt.NavigationCancel}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class bh extends bo{constructor(r,n,e,i){super(r,n),this.reason=e,this.code=i,this.type=Nt.NavigationSkipped}}class kw extends bo{constructor(r,n,e,i){super(r,n),this.error=e,this.target=i,this.type=Nt.NavigationError}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class O8 extends bo{constructor(r,n,e,i){super(r,n),this.urlAfterRedirects=e,this.state=i,this.type=Nt.RoutesRecognized}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class NOe extends bo{constructor(r,n,e,i){super(r,n),this.urlAfterRedirects=e,this.state=i,this.type=Nt.GuardsCheckStart}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class VOe extends bo{constructor(r,n,e,i,s){super(r,n),this.urlAfterRedirects=e,this.state=i,this.shouldActivate=s,this.type=Nt.GuardsCheckEnd}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class LOe extends bo{constructor(r,n,e,i){super(r,n),this.urlAfterRedirects=e,this.state=i,this.type=Nt.ResolveStart}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class GOe extends bo{constructor(r,n,e,i){super(r,n),this.urlAfterRedirects=e,this.state=i,this.type=Nt.ResolveEnd}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class HOe{constructor(r){this.route=r,this.type=Nt.RouteConfigLoadStart}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class BOe{constructor(r){this.route=r,this.type=Nt.RouteConfigLoadEnd}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class zOe{constructor(r){this.snapshot=r,this.type=Nt.ChildActivationStart}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class UOe{constructor(r){this.snapshot=r,this.type=Nt.ChildActivationEnd}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class jOe{constructor(r){this.snapshot=r,this.type=Nt.ActivationStart}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class WOe{constructor(r){this.snapshot=r,this.type=Nt.ActivationEnd}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class N8{constructor(r,n,e){this.routerEvent=r,this.position=n,this.anchor=e,this.type=Nt.Scroll}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}class p2{}class f2{constructor(r){this.url=r}}class $Oe{constructor(){this.outlet=null,this.route=null,this.injector=null,this.children=new im,this.attachRef=null}}let im=(()=>{var t;class r{constructor(){this.contexts=new Map}onChildOutletCreated(e,i){const s=this.getOrCreateContext(e);s.outlet=i,this.contexts.set(e,s)}onChildOutletDestroyed(e){const i=this.getContext(e);i&&(i.outlet=null,i.attachRef=null)}onOutletDeactivated(){const e=this.contexts;return this.contexts=new Map,e}onOutletReAttached(e){this.contexts=e}getOrCreateContext(e){let i=this.getContext(e);return i||(i=new $Oe,this.contexts.set(e,i)),i}getContext(e){return this.contexts.get(e)||null}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();class V8{constructor(r){this._root=r}get root(){return this._root.value}parent(r){const n=this.pathFromRoot(r);return n.length>1?n[n.length-2]:null}children(r){const n=m2(r,this._root);return n?n.children.map(e=>e.value):[]}firstChild(r){const n=m2(r,this._root);return n&&n.children.length>0?n.children[0].value:null}siblings(r){const n=_2(r,this._root);return n.length<2?[]:n[n.length-2].children.map(i=>i.value).filter(i=>i!==r)}pathFromRoot(r){return _2(r,this._root).map(n=>n.value)}}function m2(t,r){if(t===r.value)return r;for(const n of r.children){const e=m2(t,n);if(e)return e}return null}function _2(t,r){if(t===r.value)return[r];for(const n of r.children){const e=_2(t,n);if(e.length)return e.unshift(r),e}return[]}class $s{constructor(r,n){this.value=r,this.children=n}toString(){return`TreeNode(${this.value})`}}function Dh(t){const r={};return t&&t.children.forEach(n=>r[n.value.outlet]=n),r}class L8 extends V8{constructor(r,n){super(r),this.snapshot=n,y2(this,r)}toString(){return this.snapshot.toString()}}function G8(t){const r=function qOe(t){const s=new x2([],{},{},"",{},mt,t,null,{});return new H8("",new $s(s,[]))}(t),n=new es([new Qf("",{})]),e=new es({}),i=new es({}),s=new es({}),o=new es(""),a=new Sh(n,e,s,o,i,mt,t,r.root);return a.snapshot=r.root,new L8(new $s(a,[]),r)}class Sh{constructor(r,n,e,i,s,o,a,l){this.urlSubject=r,this.paramsSubject=n,this.queryParamsSubject=e,this.fragmentSubject=i,this.dataSubject=s,this.outlet=o,this.component=a,this._futureSnapshot=l,this.title=this.dataSubject?.pipe(It(c=>c[Yf]))??Ke(void 0),this.url=r,this.params=n,this.queryParams=e,this.fragment=i,this.data=s}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=this.params.pipe(It(r=>xh(r))),this._paramMap}get queryParamMap(){return this._queryParamMap??=this.queryParams.pipe(It(r=>xh(r))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function v2(t,r,n="emptyOnly"){let e;const{routeConfig:i}=t;return e=null===r||"always"!==n&&""!==i?.path&&(r.component||r.routeConfig?.loadComponent)?{params:{...t.params},data:{...t.data},resolve:{...t.data,...t._resolvedData??{}}}:{params:{...r.params,...t.params},data:{...r.data,...t.data},resolve:{...t.data,...r.data,...i?.data,...t._resolvedData}},i&&z8(i)&&(e.resolve[Yf]=i.title),e}class x2{get title(){return this.data?.[Yf]}constructor(r,n,e,i,s,o,a,l,c){this.url=r,this.params=n,this.queryParams=e,this.fragment=i,this.data=s,this.outlet=o,this.component=a,this.routeConfig=l,this._resolve=c}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=xh(this.params),this._paramMap}get queryParamMap(){return this._queryParamMap??=xh(this.queryParams),this._queryParamMap}toString(){return`Route(url:'${this.url.map(e=>e.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class H8 extends V8{constructor(r,n){super(n),this.url=r,y2(this,n)}toString(){return B8(this._root)}}function y2(t,r){r.value._routerState=t,r.children.forEach(n=>y2(t,n))}function B8(t){const r=t.children.length>0?` { ${t.children.map(B8).join(", ")} } `:"";return`${t.value}${r}`}function w2(t){if(t.snapshot){const r=t.snapshot,n=t._futureSnapshot;t.snapshot=n,Io(r.queryParams,n.queryParams)||t.queryParamsSubject.next(n.queryParams),r.fragment!==n.fragment&&t.fragmentSubject.next(n.fragment),Io(r.params,n.params)||t.paramsSubject.next(n.params),function dOe(t,r){if(t.length!==r.length)return!1;for(let n=0;nIo(n.parameters,r[e].parameters))}(t.url,r.url);return n&&!(!t.parent!=!r.parent)&&(!t.parent||C2(t.parent,r.parent))}function z8(t){return"string"==typeof t.title||null===t.title}let U8=(()=>{var t;class r{constructor(){this.activated=null,this._activatedRoute=null,this.name=mt,this.activateEvents=new A,this.deactivateEvents=new A,this.attachEvents=new A,this.detachEvents=new A,this.parentContexts=fe(im),this.location=fe(bt),this.changeDetector=fe(Ee),this.environmentInjector=fe(un),this.inputBinder=fe(Rw,{optional:!0}),this.supportsBindingToComponentInputs=!0}get activatedComponentRef(){return this.activated}ngOnChanges(e){if(e.name){const{firstChange:i,previousValue:s}=e.name;if(i)return;this.isTrackedInParentContexts(s)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(s)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(e){return this.parentContexts.getContext(e)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const e=this.parentContexts.getContext(this.name);e?.route&&(e.attachRef?this.attach(e.attachRef,e.route):this.activateWith(e.route,e.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new se(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new se(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new se(4012,!1);this.location.detach();const e=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(e.instance),e}attach(e,i){this.activated=e,this._activatedRoute=i,this.location.insert(e.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(e.instance)}deactivate(){if(this.activated){const e=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(e)}}activateWith(e,i){if(this.isActivated)throw new se(4013,!1);this._activatedRoute=e;const s=this.location,a=e.snapshot.component,l=this.parentContexts.getOrCreateContext(this.name).children,c=new KOe(e,l,s.injector);this.activated=s.createComponent(a,{index:s.length,injector:c,environmentInjector:i??this.environmentInjector}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275dir=H({type:t,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[Ci]}),r})();class KOe{constructor(r,n,e){this.route=r,this.childContexts=n,this.parent=e}get(r,n){return r===Sh?this.route:r===im?this.childContexts:this.parent.get(r,n)}}const Rw=new Ce("");let j8=(()=>{var t;class r{constructor(){this.outletDataSubscriptions=new Map}bindActivatedRouteToOutletComponent(e){this.unsubscribeFromRouteData(e),this.subscribeToRouteData(e)}unsubscribeFromRouteData(e){this.outletDataSubscriptions.get(e)?.unsubscribe(),this.outletDataSubscriptions.delete(e)}subscribeToRouteData(e){const{activatedRoute:i}=e,s=r2([i.queryParams,i.params,i.data]).pipe(Ar(([o,a,l],c)=>(l={...o,...a,...l},0===c?Ke(l):Promise.resolve(l)))).subscribe(o=>{if(!e.isActivated||!e.activatedComponentRef||e.activatedRoute!==i||null===i.component)return void this.unsubscribeFromRouteData(e);const a=function $g(t){const r=vt(t);if(!r)return null;const n=new Dg(r);return{get selector(){return n.selector},get type(){return n.componentType},get inputs(){return n.inputs},get outputs(){return n.outputs},get ngContentSelectors(){return n.ngContentSelectors},get isStandalone(){return r.standalone},get isSignal(){return r.signals}}}(i.component);if(a)for(const{templateName:l}of a.inputs)e.activatedComponentRef.setInput(l,o[l]);else this.unsubscribeFromRouteData(e)});this.outletDataSubscriptions.set(e,s)}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();function nm(t,r,n){if(n&&t.shouldReuseRoute(r.value,n.value.snapshot)){const e=n.value;e._futureSnapshot=r.value;const i=function YOe(t,r,n){return r.children.map(e=>{for(const i of n.children)if(t.shouldReuseRoute(e.value,i.value.snapshot))return nm(t,e,i);return nm(t,e)})}(t,r,n);return new $s(e,i)}{if(t.shouldAttach(r.value)){const s=t.retrieve(r.value);if(null!==s){const o=s.route;return o.value._futureSnapshot=r.value,o.children=r.children.map(a=>nm(t,a)),o}}const e=function QOe(t){return new Sh(new es(t.url),new es(t.params),new es(t.queryParams),new es(t.fragment),new es(t.data),t.outlet,t.component,t)}(r.value),i=r.children.map(s=>nm(t,s));return new $s(e,i)}}const W8="ngNavigationCancelingError";function $8(t,r){const{redirectTo:n,navigationBehaviorOptions:e}=Ch(r)?{redirectTo:r,navigationBehaviorOptions:void 0}:r,i=q8(!1,ys.Redirect);return i.url=n,i.navigationBehaviorOptions=e,i}function q8(t,r){const n=new Error(`NavigationCancelingError: ${t||""}`);return n[W8]=!0,n.cancellationCode=r,n}function K8(t){return!!t&&t[W8]}let Z8=(()=>{var t;class r{}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275cmp=ie({type:t,selectors:[["ng-component"]],standalone:!0,features:[re],decls:1,vars:0,template:function(e,i){1&e&&V(0,"router-outlet")},dependencies:[U8],encapsulation:2}),r})();function I2(t){const r=t.children&&t.children.map(I2),n=r?{...t,children:r}:{...t};return!n.component&&!n.loadComponent&&(r||n.loadChildren)&&n.outlet&&n.outlet!==mt&&(n.component=Z8),n}function Do(t){return t.outlet||mt}function rm(t){if(!t)return null;if(t.routeConfig?._injector)return t.routeConfig._injector;for(let r=t.parent;r;r=r.parent){const n=r.routeConfig;if(n?._loadedInjector)return n._loadedInjector;if(n?._injector)return n._injector}return null}class s5e{constructor(r,n,e,i,s){this.routeReuseStrategy=r,this.futureState=n,this.currState=e,this.forwardEvent=i,this.inputBindingEnabled=s}activate(r){const n=this.futureState._root,e=this.currState?this.currState._root:null;this.deactivateChildRoutes(n,e,r),w2(this.futureState.root),this.activateChildRoutes(n,e,r)}deactivateChildRoutes(r,n,e){const i=Dh(n);r.children.forEach(s=>{const o=s.value.outlet;this.deactivateRoutes(s,i[o],e),delete i[o]}),Object.values(i).forEach(s=>{this.deactivateRouteAndItsChildren(s,e)})}deactivateRoutes(r,n,e){const i=r.value,s=n?n.value:null;if(i===s)if(i.component){const o=e.getContext(i.outlet);o&&this.deactivateChildRoutes(r,n,o.children)}else this.deactivateChildRoutes(r,n,e);else s&&this.deactivateRouteAndItsChildren(n,e)}deactivateRouteAndItsChildren(r,n){r.value.component&&this.routeReuseStrategy.shouldDetach(r.value.snapshot)?this.detachAndStoreRouteSubtree(r,n):this.deactivateRouteAndOutlet(r,n)}detachAndStoreRouteSubtree(r,n){const e=n.getContext(r.value.outlet),i=e&&r.value.component?e.children:n,s=Dh(r);for(const o of Object.values(s))this.deactivateRouteAndItsChildren(o,i);if(e&&e.outlet){const o=e.outlet.detach(),a=e.children.onOutletDeactivated();this.routeReuseStrategy.store(r.value.snapshot,{componentRef:o,route:r,contexts:a})}}deactivateRouteAndOutlet(r,n){const e=n.getContext(r.value.outlet),i=e&&r.value.component?e.children:n,s=Dh(r);for(const o of Object.values(s))this.deactivateRouteAndItsChildren(o,i);e&&(e.outlet&&(e.outlet.deactivate(),e.children.onOutletDeactivated()),e.attachRef=null,e.route=null)}activateChildRoutes(r,n,e){const i=Dh(n);r.children.forEach(s=>{this.activateRoutes(s,i[s.value.outlet],e),this.forwardEvent(new WOe(s.value.snapshot))}),r.children.length&&this.forwardEvent(new UOe(r.value.snapshot))}activateRoutes(r,n,e){const i=r.value,s=n?n.value:null;if(w2(i),i===s)if(i.component){const o=e.getOrCreateContext(i.outlet);this.activateChildRoutes(r,n,o.children)}else this.activateChildRoutes(r,n,e);else if(i.component){const o=e.getOrCreateContext(i.outlet);if(this.routeReuseStrategy.shouldAttach(i.snapshot)){const a=this.routeReuseStrategy.retrieve(i.snapshot);this.routeReuseStrategy.store(i.snapshot,null),o.children.onOutletReAttached(a.contexts),o.attachRef=a.componentRef,o.route=a.route.value,o.outlet&&o.outlet.attach(a.componentRef,a.route.value),w2(a.route.value),this.activateChildRoutes(r,null,o.children)}else{const a=rm(i.snapshot);o.attachRef=null,o.route=i,o.injector=a,o.outlet&&o.outlet.activateWith(i,o.injector),this.activateChildRoutes(r,null,o.children)}}else this.activateChildRoutes(r,null,e)}}class Y8{constructor(r){this.path=r,this.route=this.path[this.path.length-1]}}class Pw{constructor(r,n){this.component=r,this.route=n}}function o5e(t,r,n){const e=t._root;return sm(e,r?r._root:null,n,[e.value])}function Th(t,r){const n=Symbol(),e=r.get(t,n);return e===n?"function"!=typeof t||function TH(t){return null!==Mm(t)}(t)?r.get(t):t:e}function sm(t,r,n,e,i={canDeactivateChecks:[],canActivateChecks:[]}){const s=Dh(r);return t.children.forEach(o=>{(function l5e(t,r,n,e,i={canDeactivateChecks:[],canActivateChecks:[]}){const s=t.value,o=r?r.value:null,a=n?n.getContext(t.value.outlet):null;if(o&&s.routeConfig===o.routeConfig){const l=function c5e(t,r,n){if("function"==typeof n)return n(t,r);switch(n){case"pathParamsChange":return!qc(t.url,r.url);case"pathParamsOrQueryParamsChange":return!qc(t.url,r.url)||!Io(t.queryParams,r.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!C2(t,r)||!Io(t.queryParams,r.queryParams);default:return!C2(t,r)}}(o,s,s.routeConfig.runGuardsAndResolvers);l?i.canActivateChecks.push(new Y8(e)):(s.data=o.data,s._resolvedData=o._resolvedData),sm(t,r,s.component?a?a.children:null:n,e,i),l&&a&&a.outlet&&a.outlet.isActivated&&i.canDeactivateChecks.push(new Pw(a.outlet.component,o))}else o&&om(r,a,i),i.canActivateChecks.push(new Y8(e)),sm(t,null,s.component?a?a.children:null:n,e,i)})(o,s[o.value.outlet],n,e.concat([o.value]),i),delete s[o.value.outlet]}),Object.entries(s).forEach(([o,a])=>om(a,n.getContext(o),i)),i}function om(t,r,n){const e=Dh(t),i=t.value;Object.entries(e).forEach(([s,o])=>{om(o,i.component?r?r.children.getContext(s):null:r,n)}),n.canDeactivateChecks.push(new Pw(i.component&&r&&r.outlet&&r.outlet.isActivated?r.outlet.component:null,i))}function am(t){return"function"==typeof t}function Q8(t){return t instanceof Ov||"EmptyError"===t?.name}const Fw=Symbol("INITIAL_VALUE");function Eh(){return Ar(t=>r2(t.map(r=>r.pipe(Pa(1),function nO(...t){const r=t[t.length-1];return au(r)?(t.pop(),n=>K1(t,n,r)):n=>K1(t,n)}(Fw)))).pipe(It(r=>{for(const n of r)if(!0!==n){if(n===Fw)return Fw;if(!1===n||n instanceof yh)return n}return!0}),Ai(r=>r!==Fw),Pa(1)))}function X8(t){return Z2(Hn(r=>{if(Ch(r))throw $8(0,r)}),It(r=>!0===r))}class b2{constructor(r){this.segmentGroup=r||null}}class D2 extends Error{constructor(r){super(),this.urlTree=r}}function Mh(t){return up(new b2(t))}class E5e{constructor(r,n){this.urlSerializer=r,this.urlTree=n}lineralizeSegments(r,n){let e=[],i=n.root;for(;;){if(e=e.concat(i.segments),0===i.numberOfChildren)return Ke(e);if(i.numberOfChildren>1||!i.children[mt])return up(new se(4e3,!1));i=i.children[mt]}}applyRedirectCommands(r,n,e){const i=this.applyRedirectCreateUrlTree(n,this.urlSerializer.parse(n),r,e);if(n.startsWith("/"))throw new D2(i);return i}applyRedirectCreateUrlTree(r,n,e,i){const s=this.createSegmentGroup(r,n.root,e,i);return new yh(s,this.createQueryParams(n.queryParams,this.urlTree.queryParams),n.fragment)}createQueryParams(r,n){const e={};return Object.entries(r).forEach(([i,s])=>{if("string"==typeof s&&s.startsWith(":")){const a=s.substring(1);e[i]=n[a]}else e[i]=s}),e}createSegmentGroup(r,n,e,i){const s=this.createSegments(r,n.segments,e,i);let o={};return Object.entries(n.children).forEach(([a,l])=>{o[a]=this.createSegmentGroup(r,l,e,i)}),new xi(s,o)}createSegments(r,n,e,i){return n.map(s=>s.path.startsWith(":")?this.findPosParam(r,s,i):this.findOrReturn(s,e))}findPosParam(r,n,e){const i=e[n.path.substring(1)];if(!i)throw new se(4001,!1);return i}findOrReturn(r,n){let e=0;for(const i of n){if(i.path===r.path)return n.splice(e),i;e++}return r}}const S2={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function M5e(t,r,n,e,i){const s=T2(t,r,n);return s.matched?(e=function JOe(t,r){return t.providers&&!t._injector&&(t._injector=oI(t.providers,r,`Route: ${t.path}`)),t._injector??r}(r,e),function D5e(t,r,n,e){const i=r.canMatch;return i&&0!==i.length?Ke(i.map(o=>{const a=Th(o,t);return xl(function f5e(t){return t&&am(t.canMatch)}(a)?a.canMatch(r,n):ya(t,()=>a(r,n)))})).pipe(Eh(),X8()):Ke(!0)}(e,r,n).pipe(It(o=>!0===o?s:{...S2}))):Ke(s)}function T2(t,r,n){if("**"===r.path)return function A5e(t){return{matched:!0,parameters:t.length>0?_8(t).parameters:{},consumedSegments:t,remainingSegments:[],positionalParamSegments:{}}}(n);if(""===r.path)return"full"===r.pathMatch&&(t.hasChildren()||n.length>0)?{...S2}:{matched:!0,consumedSegments:[],remainingSegments:n,parameters:{},positionalParamSegments:{}};const i=(r.matcher||cOe)(n,t,r);if(!i)return{...S2};const s={};Object.entries(i.posParams??{}).forEach(([a,l])=>{s[a]=l.path});const o=i.consumed.length>0?{...s,...i.consumed[i.consumed.length-1].parameters}:s;return{matched:!0,consumedSegments:i.consumed,remainingSegments:n.slice(i.consumed.length),parameters:o,positionalParamSegments:i.posParams??{}}}function J8(t,r,n,e){return n.length>0&&function P5e(t,r,n){return n.some(e=>Ow(t,r,e)&&Do(e)!==mt)}(t,n,e)?{segmentGroup:new xi(r,R5e(e,new xi(n,t.children))),slicedSegments:[]}:0===n.length&&function F5e(t,r,n){return n.some(e=>Ow(t,r,e))}(t,n,e)?{segmentGroup:new xi(t.segments,k5e(t,n,e,t.children)),slicedSegments:n}:{segmentGroup:new xi(t.segments,t.children),slicedSegments:n}}function k5e(t,r,n,e){const i={};for(const s of n)if(Ow(t,r,s)&&!e[Do(s)]){const o=new xi([],{});i[Do(s)]=o}return{...e,...i}}function R5e(t,r){const n={};n[mt]=r;for(const e of t)if(""===e.path&&Do(e)!==mt){const i=new xi([],{});n[Do(e)]=i}return n}function Ow(t,r,n){return(!(t.hasChildren()||r.length>0)||"full"!==n.pathMatch)&&""===n.path}class V5e{}class H5e{constructor(r,n,e,i,s,o,a){this.injector=r,this.configLoader=n,this.rootComponentType=e,this.config=i,this.urlTree=s,this.paramsInheritanceStrategy=o,this.urlSerializer=a,this.applyRedirects=new E5e(this.urlSerializer,this.urlTree),this.absoluteRedirectCount=0,this.allowRedirects=!0}noMatchError(r){return new se(4002,`'${r.segmentGroup}'`)}recognize(){const r=J8(this.urlTree.root,[],[],this.config).segmentGroup;return this.match(r).pipe(It(n=>{const e=new x2([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},mt,this.rootComponentType,null,{}),i=new $s(e,n),s=new H8("",i),o=function MOe(t,r,n=null,e=null){return M8(E8(t),r,n,e)}(e,[],this.urlTree.queryParams,this.urlTree.fragment);return o.queryParams=this.urlTree.queryParams,s.url=this.urlSerializer.serialize(o),this.inheritParamsAndData(s._root,null),{state:s,tree:o}}))}match(r){return this.processSegmentGroup(this.injector,this.config,r,mt).pipe(Zf(e=>{if(e instanceof D2)return this.urlTree=e.urlTree,this.match(e.urlTree.root);throw e instanceof b2?this.noMatchError(e):e}))}inheritParamsAndData(r,n){const e=r.value,i=v2(e,n,this.paramsInheritanceStrategy);e.params=Object.freeze(i.params),e.data=Object.freeze(i.data),r.children.forEach(s=>this.inheritParamsAndData(s,e))}processSegmentGroup(r,n,e,i){return 0===e.segments.length&&e.hasChildren()?this.processChildren(r,n,e):this.processSegment(r,n,e,e.segments,i,!0).pipe(It(s=>s instanceof $s?[s]:[]))}processChildren(r,n,e){const i=[];for(const s of Object.keys(e.children))"primary"===s?i.unshift(s):i.push(s);return Dn(i).pipe(bu(s=>{const o=e.children[s],a=function n5e(t,r){const n=t.filter(e=>Do(e)===r);return n.push(...t.filter(e=>Do(e)!==r)),n}(n,s);return this.processSegmentGroup(r,a,o,s)}),function J4e(t,r){let n=!1;return arguments.length>=2&&(n=!0),function(i){return i.lift(new eOe(t,r,n))}}((s,o)=>(s.push(...o),s)),Vv(null),function rOe(t,r){const n=arguments.length>=2;return e=>e.pipe(t?Ai((i,s)=>t(i,s,e)):fm,a2(1),n?Vv(r):tO(()=>new Ov))}(),yr(s=>{if(null===s)return Mh(e);const o=eG(s);return function B5e(t){t.sort((r,n)=>r.value.outlet===mt?-1:n.value.outlet===mt?1:r.value.outlet.localeCompare(n.value.outlet))}(o),Ke(o)}))}processSegment(r,n,e,i,s,o){return Dn(n).pipe(bu(a=>this.processSegmentAgainstRoute(a._injector??r,n,a,e,i,s,o).pipe(Zf(l=>{if(l instanceof b2)return Ke(null);throw l}))),nt(a=>!!a),Zf(a=>{if(Q8(a))return function N5e(t,r,n){return 0===r.length&&!t.children[n]}(e,i,s)?Ke(new V5e):Mh(e);throw a}))}processSegmentAgainstRoute(r,n,e,i,s,o,a){return function O5e(t,r,n,e){return!!(Do(t)===e||e!==mt&&Ow(r,n,t))&&T2(r,t,n).matched}(e,i,s,o)?void 0===e.redirectTo?this.matchSegmentAgainstRoute(r,i,e,s,o):this.allowRedirects&&a?this.expandSegmentAgainstRouteUsingRedirect(r,i,n,e,s,o):Mh(i):Mh(i)}expandSegmentAgainstRouteUsingRedirect(r,n,e,i,s,o){const{matched:a,consumedSegments:l,positionalParamSegments:c,remainingSegments:d}=T2(n,i,s);if(!a)return Mh(n);i.redirectTo.startsWith("/")&&(this.absoluteRedirectCount++,this.absoluteRedirectCount>31&&(this.allowRedirects=!1));const g=this.applyRedirects.applyRedirectCommands(l,i.redirectTo,c);return this.applyRedirects.lineralizeSegments(i,g).pipe(yr(_=>this.processSegment(r,e,n,_.concat(d),o,!1)))}matchSegmentAgainstRoute(r,n,e,i,s){const o=M5e(n,e,i,r);return"**"===e.path&&(n.children={}),o.pipe(Ar(a=>a.matched?this.getChildConfig(r=e._injector??r,e,i).pipe(Ar(({routes:l})=>{const c=e._loadedInjector??r,{consumedSegments:d,remainingSegments:g,parameters:_}=a,x=new x2(d,_,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,function U5e(t){return t.data||{}}(e),Do(e),e.component??e._loadedComponent??null,e,function j5e(t){return t.resolve||{}}(e)),{segmentGroup:w,slicedSegments:E}=J8(n,d,g,l);if(0===E.length&&w.hasChildren())return this.processChildren(c,l,w).pipe(It(k=>null===k?null:new $s(x,k)));if(0===l.length&&0===E.length)return Ke(new $s(x,[]));const M=Do(e)===s;return this.processSegment(c,l,w,E,M?mt:s,!0).pipe(It(k=>new $s(x,k instanceof $s?[k]:[])))})):Mh(n)))}getChildConfig(r,n,e){return n.children?Ke({routes:n.children,injector:r}):n.loadChildren?void 0!==n._loadedRoutes?Ke({routes:n._loadedRoutes,injector:n._loadedInjector}):function b5e(t,r,n,e){const i=r.canLoad;return void 0===i||0===i.length?Ke(!0):Ke(i.map(o=>{const a=Th(o,t);return xl(function u5e(t){return t&&am(t.canLoad)}(a)?a.canLoad(r,n):ya(t,()=>a(r,n)))})).pipe(Eh(),X8())}(r,n,e).pipe(yr(i=>i?this.configLoader.loadChildren(r,n).pipe(Hn(s=>{n._loadedRoutes=s.routes,n._loadedInjector=s.injector})):function T5e(t){return up(q8(!1,ys.GuardRejected))}())):Ke({routes:[],injector:r})}}function z5e(t){const r=t.value.routeConfig;return r&&""===r.path}function eG(t){const r=[],n=new Set;for(const e of t){if(!z5e(e)){r.push(e);continue}const i=r.find(s=>e.value.routeConfig===s.value.routeConfig);void 0!==i?(i.children.push(...e.children),n.add(i)):r.push(e)}for(const e of n){const i=eG(e.children);r.push(new $s(e.value,i))}return r.filter(e=>!n.has(e))}function tG(t){const r=t.children.map(n=>tG(n)).flat();return[t,...r]}function E2(t){return Ar(r=>{const n=t(r);return n?Dn(n).pipe(It(()=>r)):Ke(r)})}let iG=(()=>{var t;class r{buildTitle(e){let i,s=e.root;for(;void 0!==s;)i=this.getResolvedTitleForRoute(s)??i,s=s.children.find(o=>o.outlet===mt);return i}getResolvedTitleForRoute(e){return e.data[Yf]}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:()=>fe(Y5e),providedIn:"root"}),r})(),Y5e=(()=>{var t;class r extends iG{constructor(e){super(),this.title=e}updateTitle(e){const i=this.buildTitle(e);void 0!==i&&this.title.setTitle(i)}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(wne))},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();const Ah=new Ce("",{providedIn:"root",factory:()=>({})}),kh=new Ce("");let M2=(()=>{var t;class r{constructor(){this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap,this.compiler=fe(jP)}loadComponent(e){if(this.componentLoaders.get(e))return this.componentLoaders.get(e);if(e._loadedComponent)return Ke(e._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(e);const i=xl(e.loadComponent()).pipe(It(nG),Hn(o=>{this.onLoadEndListener&&this.onLoadEndListener(e),e._loadedComponent=o}),Ap(()=>{this.componentLoaders.delete(e)})),s=new o2(i,()=>new Ie).pipe(s2());return this.componentLoaders.set(e,s),s}loadChildren(e,i){if(this.childrenLoaders.get(i))return this.childrenLoaders.get(i);if(i._loadedRoutes)return Ke({routes:i._loadedRoutes,injector:i._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(i);const o=function Q5e(t,r,n,e){return xl(t.loadChildren()).pipe(It(nG),yr(i=>i instanceof oR||Array.isArray(i)?Ke(i):Dn(r.compileModuleAsync(i))),It(i=>{e&&e(t);let s,o,a=!1;return Array.isArray(i)?(o=i,!0):(s=i.create(n).injector,o=s.get(kh,[],{optional:!0,self:!0}).flat()),{routes:o.map(I2),injector:s}}))}(i,this.compiler,e,this.onLoadEndListener).pipe(Ap(()=>{this.childrenLoaders.delete(i)})),a=new o2(o,()=>new Ie).pipe(s2());return this.childrenLoaders.set(i,a),a}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();function nG(t){return function X5e(t){return t&&"object"==typeof t&&"default"in t}(t)?t.default:t}let A2=(()=>{var t;class r{}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:()=>fe(J5e),providedIn:"root"}),r})(),J5e=(()=>{var t;class r{shouldProcessUrl(e){return!0}extract(e){return e}merge(e,i){return e}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();const rG=new Ce(""),sG=new Ce("");function eNe(t,r,n){const e=t.get(sG),i=t.get(St);return t.get(Oe).runOutsideAngular(()=>{if(!i.startViewTransition||e.skipNextTransition)return e.skipNextTransition=!1,Promise.resolve();let s;const o=new Promise(c=>{s=c}),a=i.startViewTransition(()=>(s(),function tNe(t){return new Promise(r=>{Sk(r,{injector:t})})}(t))),{onViewTransitionCreated:l}=e;return l&&ya(t,()=>l({transition:a,from:r,to:n})),o})}let Nw=(()=>{var t;class r{get hasRequestedNavigation(){return 0!==this.navigationId}constructor(){this.currentNavigation=null,this.currentTransition=null,this.lastSuccessfulNavigation=null,this.events=new Ie,this.transitionAbortSubject=new Ie,this.configLoader=fe(M2),this.environmentInjector=fe(un),this.urlSerializer=fe(wh),this.rootContexts=fe(im),this.location=fe(qg),this.inputBindingEnabled=null!==fe(Rw,{optional:!0}),this.titleStrategy=fe(iG),this.options=fe(Ah,{optional:!0})||{},this.paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly",this.urlHandlingStrategy=fe(A2),this.createViewTransition=fe(rG,{optional:!0}),this.navigationId=0,this.afterPreactivation=()=>Ke(void 0),this.rootComponentType=null,this.configLoader.onLoadEndListener=s=>this.events.next(new BOe(s)),this.configLoader.onLoadStartListener=s=>this.events.next(new HOe(s))}complete(){this.transitions?.complete()}handleNavigationRequest(e){const i=++this.navigationId;this.transitions?.next({...this.transitions.value,...e,id:i})}setupNavigations(e,i,s){return this.transitions=new es({id:0,currentUrlTree:i,currentRawUrl:i,extractedUrl:this.urlHandlingStrategy.extract(i),urlAfterRedirects:this.urlHandlingStrategy.extract(i),rawUrl:i,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:tm,restoredState:null,currentSnapshot:s.snapshot,targetSnapshot:null,currentRouterState:s,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.transitions.pipe(Ai(o=>0!==o.id),It(o=>({...o,extractedUrl:this.urlHandlingStrategy.extract(o.rawUrl)})),Ar(o=>{this.currentTransition=o;let a=!1,l=!1;return Ke(o).pipe(Hn(c=>{this.currentNavigation={id:c.id,initialUrl:c.rawUrl,extractedUrl:c.extractedUrl,trigger:c.source,extras:c.extras,previousNavigation:this.lastSuccessfulNavigation?{...this.lastSuccessfulNavigation,previousNavigation:null}:null}}),Ar(c=>{const d=!e.navigated||this.isUpdatingInternalState()||this.isUpdatedBrowserUrl();if(!d&&"reload"!==(c.extras.onSameUrlNavigation??e.onSameUrlNavigation)){const _="";return this.events.next(new bh(c.id,this.urlSerializer.serialize(c.rawUrl),_,Aw.IgnoredSameUrlNavigation)),c.resolve(null),Yl}if(this.urlHandlingStrategy.shouldProcessUrl(c.rawUrl))return Ke(c).pipe(Ar(_=>{const x=this.transitions?.getValue();return this.events.next(new Mw(_.id,this.urlSerializer.serialize(_.extractedUrl),_.source,_.restoredState)),x!==this.transitions?.getValue()?Yl:Promise.resolve(_)}),function W5e(t,r,n,e,i,s){return yr(o=>function L5e(t,r,n,e,i,s,o="emptyOnly"){return new H5e(t,r,n,e,i,o,s).recognize()}(t,r,n,e,o.extractedUrl,i,s).pipe(It(({state:a,tree:l})=>({...o,targetSnapshot:a,urlAfterRedirects:l}))))}(this.environmentInjector,this.configLoader,this.rootComponentType,e.config,this.urlSerializer,this.paramsInheritanceStrategy),Hn(_=>{o.targetSnapshot=_.targetSnapshot,o.urlAfterRedirects=_.urlAfterRedirects,this.currentNavigation={...this.currentNavigation,finalUrl:_.urlAfterRedirects};const x=new O8(_.id,this.urlSerializer.serialize(_.extractedUrl),this.urlSerializer.serialize(_.urlAfterRedirects),_.targetSnapshot);this.events.next(x)}));if(d&&this.urlHandlingStrategy.shouldProcessUrl(c.currentRawUrl)){const{id:_,extractedUrl:x,source:w,restoredState:E,extras:M}=c,k=new Mw(_,this.urlSerializer.serialize(x),w,E);this.events.next(k);const N=G8(this.rootComponentType).snapshot;return this.currentTransition=o={...c,targetSnapshot:N,urlAfterRedirects:x,extras:{...M,skipLocationChange:!1,replaceUrl:!1}},this.currentNavigation.finalUrl=x,Ke(o)}{const _="";return this.events.next(new bh(c.id,this.urlSerializer.serialize(c.extractedUrl),_,Aw.IgnoredByUrlHandlingStrategy)),c.resolve(null),Yl}}),Hn(c=>{const d=new NOe(c.id,this.urlSerializer.serialize(c.extractedUrl),this.urlSerializer.serialize(c.urlAfterRedirects),c.targetSnapshot);this.events.next(d)}),It(c=>(this.currentTransition=o={...c,guards:o5e(c.targetSnapshot,c.currentSnapshot,this.rootContexts)},o)),function m5e(t,r){return yr(n=>{const{targetSnapshot:e,currentSnapshot:i,guards:{canActivateChecks:s,canDeactivateChecks:o}}=n;return 0===o.length&&0===s.length?Ke({...n,guardsResult:!0}):function _5e(t,r,n,e){return Dn(t).pipe(yr(i=>function I5e(t,r,n,e,i){const s=r&&r.routeConfig?r.routeConfig.canDeactivate:null;return s&&0!==s.length?Ke(s.map(a=>{const l=rm(r)??i,c=Th(a,l);return xl(function p5e(t){return t&&am(t.canDeactivate)}(c)?c.canDeactivate(t,r,n,e):ya(l,()=>c(t,r,n,e))).pipe(nt())})).pipe(Eh()):Ke(!0)}(i.component,i.route,n,r,e)),nt(i=>!0!==i,!0))}(o,e,i,t).pipe(yr(a=>a&&function d5e(t){return"boolean"==typeof t}(a)?function v5e(t,r,n,e){return Dn(r).pipe(bu(i=>K1(function y5e(t,r){return null!==t&&r&&r(new zOe(t)),Ke(!0)}(i.route.parent,e),function x5e(t,r){return null!==t&&r&&r(new jOe(t)),Ke(!0)}(i.route,e),function C5e(t,r,n){const e=r[r.length-1],s=r.slice(0,r.length-1).reverse().map(o=>function a5e(t){const r=t.routeConfig?t.routeConfig.canActivateChild:null;return r&&0!==r.length?{node:t,guards:r}:null}(o)).filter(o=>null!==o).map(o=>f8(()=>Ke(o.guards.map(l=>{const c=rm(o.node)??n,d=Th(l,c);return xl(function g5e(t){return t&&am(t.canActivateChild)}(d)?d.canActivateChild(e,t):ya(c,()=>d(e,t))).pipe(nt())})).pipe(Eh())));return Ke(s).pipe(Eh())}(t,i.path,n),function w5e(t,r,n){const e=r.routeConfig?r.routeConfig.canActivate:null;if(!e||0===e.length)return Ke(!0);const i=e.map(s=>f8(()=>{const o=rm(r)??n,a=Th(s,o);return xl(function h5e(t){return t&&am(t.canActivate)}(a)?a.canActivate(r,t):ya(o,()=>a(r,t))).pipe(nt())}));return Ke(i).pipe(Eh())}(t,i.route,n))),nt(i=>!0!==i,!0))}(e,s,t,r):Ke(a)),It(a=>({...n,guardsResult:a})))})}(this.environmentInjector,c=>this.events.next(c)),Hn(c=>{if(o.guardsResult=c.guardsResult,Ch(c.guardsResult))throw $8(0,c.guardsResult);const d=new VOe(c.id,this.urlSerializer.serialize(c.extractedUrl),this.urlSerializer.serialize(c.urlAfterRedirects),c.targetSnapshot,!!c.guardsResult);this.events.next(d)}),Ai(c=>!!c.guardsResult||(this.cancelNavigationTransition(c,"",ys.GuardRejected),!1)),E2(c=>{if(c.guards.canActivateChecks.length)return Ke(c).pipe(Hn(d=>{const g=new LOe(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects),d.targetSnapshot);this.events.next(g)}),Ar(d=>{let g=!1;return Ke(d).pipe(function $5e(t,r){return yr(n=>{const{targetSnapshot:e,guards:{canActivateChecks:i}}=n;if(!i.length)return Ke(n);const s=new Set(i.map(l=>l.route)),o=new Set;for(const l of s)if(!o.has(l))for(const c of tG(l))o.add(c);let a=0;return Dn(o).pipe(bu(l=>s.has(l)?function q5e(t,r,n,e){const i=t.routeConfig,s=t._resolve;return void 0!==i?.title&&!z8(i)&&(s[Yf]=i.title),function K5e(t,r,n,e){const i=l2(t);if(0===i.length)return Ke({});const s={};return Dn(i).pipe(yr(o=>function Z5e(t,r,n,e){const i=rm(r)??e,s=Th(t,i);return xl(s.resolve?s.resolve(r,n):ya(i,()=>s(r,n)))}(t[o],r,n,e).pipe(nt(),Hn(a=>{s[o]=a}))),a2(1),function sOe(t){return r=>r.lift(new oOe(t))}(s),Zf(o=>Q8(o)?Yl:up(o)))}(s,t,r,e).pipe(It(o=>(t._resolvedData=o,t.data=v2(t,t.parent,n).resolve,null)))}(l,e,t,r):(l.data=v2(l,l.parent,t).resolve,Ke(void 0))),Hn(()=>a++),a2(1),yr(l=>a===o.size?Ke(n):Yl))})}(this.paramsInheritanceStrategy,this.environmentInjector),Hn({next:()=>g=!0,complete:()=>{g||this.cancelNavigationTransition(d,"",ys.NoDataFromResolver)}}))}),Hn(d=>{const g=new GOe(d.id,this.urlSerializer.serialize(d.extractedUrl),this.urlSerializer.serialize(d.urlAfterRedirects),d.targetSnapshot);this.events.next(g)}))}),E2(c=>{const d=g=>{const _=[];g.routeConfig?.loadComponent&&!g.routeConfig._loadedComponent&&_.push(this.configLoader.loadComponent(g.routeConfig).pipe(Hn(x=>{g.component=x}),It(()=>{})));for(const x of g.children)_.push(...d(x));return _};return r2(d(c.targetSnapshot.root)).pipe(Vv(null),Pa(1))}),E2(()=>this.afterPreactivation()),Ar(()=>{const{currentSnapshot:c,targetSnapshot:d}=o,g=this.createViewTransition?.(this.environmentInjector,c.root,d.root);return g?Dn(g).pipe(It(()=>o)):Ke(o)}),It(c=>{const d=function ZOe(t,r,n){const e=nm(t,r._root,n?n._root:void 0);return new L8(e,r)}(e.routeReuseStrategy,c.targetSnapshot,c.currentRouterState);return this.currentTransition=o={...c,targetRouterState:d},this.currentNavigation.targetRouterState=d,o}),Hn(()=>{this.events.next(new p2)}),((t,r,n,e)=>It(i=>(new s5e(r,i.targetRouterState,i.currentRouterState,n,e).activate(t),i)))(this.rootContexts,e.routeReuseStrategy,c=>this.events.next(c),this.inputBindingEnabled),Pa(1),Hn({next:c=>{a=!0,this.lastSuccessfulNavigation=this.currentNavigation,this.events.next(new ua(c.id,this.urlSerializer.serialize(c.extractedUrl),this.urlSerializer.serialize(c.urlAfterRedirects))),this.titleStrategy?.updateTitle(c.targetRouterState.snapshot),c.resolve(!0)},complete:()=>{a=!0}}),K(this.transitionAbortSubject.pipe(Hn(c=>{throw c}))),Ap(()=>{!a&&!l&&this.cancelNavigationTransition(o,"",ys.SupersededByNewNavigation),this.currentTransition?.id===o.id&&(this.currentNavigation=null,this.currentTransition=null)}),Zf(c=>{if(l=!0,K8(c))this.events.next(new Ih(o.id,this.urlSerializer.serialize(o.extractedUrl),c.message,c.cancellationCode)),function XOe(t){return K8(t)&&Ch(t.url)}(c)?this.events.next(new f2(c.url)):o.resolve(!1);else{this.events.next(new kw(o.id,this.urlSerializer.serialize(o.extractedUrl),c,o.targetSnapshot??void 0));try{o.resolve(e.errorHandler(c))}catch(d){this.options.resolveNavigationPromiseOnError?o.resolve(!1):o.reject(d)}}return Yl}))}))}cancelNavigationTransition(e,i,s){const o=new Ih(e.id,this.urlSerializer.serialize(e.extractedUrl),i,s);this.events.next(o),e.resolve(!1)}isUpdatingInternalState(){return this.currentTransition?.extractedUrl.toString()!==this.currentTransition?.currentUrlTree.toString()}isUpdatedBrowserUrl(){return this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(!0))).toString()!==this.currentTransition?.extractedUrl.toString()&&!this.currentTransition?.extras.skipLocationChange}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();function iNe(t){return t!==tm}let nNe=(()=>{var t;class r{}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:()=>fe(sNe),providedIn:"root"}),r})();class rNe{shouldDetach(r){return!1}store(r,n){}shouldAttach(r){return!1}retrieve(r){return null}shouldReuseRoute(r,n){return r.routeConfig===n.routeConfig}}let sNe=(()=>{var t;class r extends rNe{}return(t=r).\u0275fac=(()=>{let n;return function(i){return(n||(n=Ae(t)))(i||t)}})(),t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})(),oG=(()=>{var t;class r{}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:()=>fe(oNe),providedIn:"root"}),r})(),oNe=(()=>{var t;class r extends oG{constructor(){super(...arguments),this.location=fe(qg),this.urlSerializer=fe(wh),this.options=fe(Ah,{optional:!0})||{},this.canceledNavigationResolution=this.options.canceledNavigationResolution||"replace",this.urlHandlingStrategy=fe(A2),this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.currentUrlTree=new yh,this.rawUrlTree=this.currentUrlTree,this.currentPageId=0,this.lastSuccessfulId=-1,this.routerState=G8(null),this.stateMemento=this.createStateMemento()}getCurrentUrlTree(){return this.currentUrlTree}getRawUrlTree(){return this.rawUrlTree}restoredState(){return this.location.getState()}get browserPageId(){return"computed"!==this.canceledNavigationResolution?this.currentPageId:this.restoredState()?.\u0275routerPageId??this.currentPageId}getRouterState(){return this.routerState}createStateMemento(){return{rawUrlTree:this.rawUrlTree,currentUrlTree:this.currentUrlTree,routerState:this.routerState}}registerNonRouterCurrentEntryChangeListener(e){return this.location.subscribe(i=>{"popstate"===i.type&&e(i.url,i.state)})}handleRouterEvent(e,i){if(e instanceof Mw)this.stateMemento=this.createStateMemento();else if(e instanceof bh)this.rawUrlTree=i.initialUrl;else if(e instanceof O8){if("eager"===this.urlUpdateStrategy&&!i.extras.skipLocationChange){const s=this.urlHandlingStrategy.merge(i.finalUrl,i.initialUrl);this.setBrowserUrl(s,i)}}else e instanceof p2?(this.currentUrlTree=i.finalUrl,this.rawUrlTree=this.urlHandlingStrategy.merge(i.finalUrl,i.initialUrl),this.routerState=i.targetRouterState,"deferred"===this.urlUpdateStrategy&&(i.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,i))):e instanceof Ih&&(e.code===ys.GuardRejected||e.code===ys.NoDataFromResolver)?this.restoreHistory(i):e instanceof kw?this.restoreHistory(i,!0):e instanceof ua&&(this.lastSuccessfulId=e.id,this.currentPageId=this.browserPageId)}setBrowserUrl(e,i){const s=this.urlSerializer.serialize(e);if(this.location.isCurrentPathEqualTo(s)||i.extras.replaceUrl){const a={...i.extras.state,...this.generateNgRouterState(i.id,this.browserPageId)};this.location.replaceState(s,"",a)}else{const o={...i.extras.state,...this.generateNgRouterState(i.id,this.browserPageId+1)};this.location.go(s,"",o)}}restoreHistory(e,i=!1){if("computed"===this.canceledNavigationResolution){const o=this.currentPageId-this.browserPageId;0!==o?this.location.historyGo(o):this.currentUrlTree===e.finalUrl&&0===o&&(this.resetState(e),this.resetUrlToCurrentUrlTree())}else"replace"===this.canceledNavigationResolution&&(i&&this.resetState(e),this.resetUrlToCurrentUrlTree())}resetState(e){this.routerState=this.stateMemento.routerState,this.currentUrlTree=this.stateMemento.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,e.finalUrl??this.rawUrlTree)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(e,i){return"computed"===this.canceledNavigationResolution?{navigationId:e,\u0275routerPageId:i}:{navigationId:e}}}return(t=r).\u0275fac=(()=>{let n;return function(i){return(n||(n=Ae(t)))(i||t)}})(),t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();var lm=function(t){return t[t.COMPLETE=0]="COMPLETE",t[t.FAILED=1]="FAILED",t[t.REDIRECTING=2]="REDIRECTING",t}(lm||{});function aG(t,r){t.events.pipe(Ai(n=>n instanceof ua||n instanceof Ih||n instanceof kw||n instanceof bh),It(n=>n instanceof ua||n instanceof bh?lm.COMPLETE:n instanceof Ih&&(n.code===ys.Redirect||n.code===ys.SupersededByNewNavigation)?lm.REDIRECTING:lm.FAILED),Ai(n=>n!==lm.REDIRECTING),Pa(1)).subscribe(()=>{r()})}function aNe(t){throw t}const lNe={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},cNe={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};let qs=(()=>{var t;class r{get currentUrlTree(){return this.stateManager.getCurrentUrlTree()}get rawUrlTree(){return this.stateManager.getRawUrlTree()}get events(){return this._events}get routerState(){return this.stateManager.getRouterState()}constructor(){this.disposed=!1,this.isNgZoneEnabled=!1,this.console=fe(Y_),this.stateManager=fe(oG),this.options=fe(Ah,{optional:!0})||{},this.pendingTasks=fe(Ol),this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.navigationTransitions=fe(Nw),this.urlSerializer=fe(wh),this.location=fe(qg),this.urlHandlingStrategy=fe(A2),this._events=new Ie,this.errorHandler=this.options.errorHandler||aNe,this.navigated=!1,this.routeReuseStrategy=fe(nNe),this.onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore",this.config=fe(kh,{optional:!0})?.flat()??[],this.componentInputBindingEnabled=!!fe(Rw,{optional:!0}),this.eventsSubscription=new yi,this.isNgZoneEnabled=fe(Oe)instanceof Oe&&Oe.isInAngularZone(),this.resetConfig(this.config),this.navigationTransitions.setupNavigations(this,this.currentUrlTree,this.routerState).subscribe({error:e=>{this.console.warn(e)}}),this.subscribeToNavigationEvents()}subscribeToNavigationEvents(){const e=this.navigationTransitions.events.subscribe(i=>{try{const s=this.navigationTransitions.currentTransition,o=this.navigationTransitions.currentNavigation;if(null!==s&&null!==o)if(this.stateManager.handleRouterEvent(i,o),i instanceof Ih&&i.code!==ys.Redirect&&i.code!==ys.SupersededByNewNavigation)this.navigated=!0;else if(i instanceof ua)this.navigated=!0;else if(i instanceof f2){const a=this.urlHandlingStrategy.merge(i.url,s.currentRawUrl),l={info:s.extras.info,skipLocationChange:s.extras.skipLocationChange,replaceUrl:"eager"===this.urlUpdateStrategy||iNe(s.source)};this.scheduleNavigation(a,tm,null,l,{resolve:s.resolve,reject:s.reject,promise:s.promise})}(function uNe(t){return!(t instanceof p2||t instanceof f2)})(i)&&this._events.next(i)}catch(s){this.navigationTransitions.transitionAbortSubject.next(s)}});this.eventsSubscription.add(e)}resetRootComponentType(e){this.routerState.root.component=e,this.navigationTransitions.rootComponentType=e}initialNavigation(){this.setUpLocationChangeListener(),this.navigationTransitions.hasRequestedNavigation||this.navigateToSyncWithBrowser(this.location.path(!0),tm,this.stateManager.restoredState())}setUpLocationChangeListener(){this.nonRouterCurrentEntryChangeSubscription??=this.stateManager.registerNonRouterCurrentEntryChangeListener((e,i)=>{setTimeout(()=>{this.navigateToSyncWithBrowser(e,"popstate",i)},0)})}navigateToSyncWithBrowser(e,i,s){const o={replaceUrl:!0},a=s?.navigationId?s:null;if(s){const c={...s};delete c.navigationId,delete c.\u0275routerPageId,0!==Object.keys(c).length&&(o.state=c)}const l=this.parseUrl(e);this.scheduleNavigation(l,i,a,o)}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(e){this.config=e.map(I2),this.navigated=!1}ngOnDestroy(){this.dispose()}dispose(){this.navigationTransitions.complete(),this.nonRouterCurrentEntryChangeSubscription&&(this.nonRouterCurrentEntryChangeSubscription.unsubscribe(),this.nonRouterCurrentEntryChangeSubscription=void 0),this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(e,i={}){const{relativeTo:s,queryParams:o,fragment:a,queryParamsHandling:l,preserveFragment:c}=i,d=c?this.currentUrlTree.fragment:a;let _,g=null;switch(l){case"merge":g={...this.currentUrlTree.queryParams,...o};break;case"preserve":g=this.currentUrlTree.queryParams;break;default:g=o||null}null!==g&&(g=this.removeEmptyProps(g));try{_=E8(s?s.snapshot:this.routerState.snapshot.root)}catch{("string"!=typeof e[0]||!e[0].startsWith("/"))&&(e=[]),_=this.currentUrlTree.root}return M8(_,e,g,d??null)}navigateByUrl(e,i={skipLocationChange:!1}){const s=Ch(e)?e:this.parseUrl(e),o=this.urlHandlingStrategy.merge(s,this.rawUrlTree);return this.scheduleNavigation(o,tm,null,i)}navigate(e,i={skipLocationChange:!1}){return function dNe(t){for(let r=0;r(null!=o&&(i[s]=o),i),{})}scheduleNavigation(e,i,s,o,a){if(this.disposed)return Promise.resolve(!1);let l,c,d;a?(l=a.resolve,c=a.reject,d=a.promise):d=new Promise((_,x)=>{l=_,c=x});const g=this.pendingTasks.add();return aG(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(g))}),this.navigationTransitions.handleNavigationRequest({source:i,restoredState:s,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:e,extras:o,resolve:l,reject:c,promise:d,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),d.catch(_=>Promise.reject(_))}}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();class lG{}let pNe=(()=>{var t;class r{constructor(e,i,s,o,a){this.router=e,this.injector=s,this.preloadingStrategy=o,this.loader=a}setUpPreloading(){this.subscription=this.router.events.pipe(Ai(e=>e instanceof ua),bu(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(e,i){const s=[];for(const o of i){o.providers&&!o._injector&&(o._injector=oI(o.providers,e,`Route: ${o.path}`));const a=o._injector??e,l=o._loadedInjector??a;(o.loadChildren&&!o._loadedRoutes&&void 0===o.canLoad||o.loadComponent&&!o._loadedComponent)&&s.push(this.preloadConfig(a,o)),(o.children||o._loadedRoutes)&&s.push(this.processRoutes(l,o.children??o._loadedRoutes))}return Dn(s).pipe(uu())}preloadConfig(e,i){return this.preloadingStrategy.preload(i,()=>{let s;s=i.loadChildren&&void 0===i.canLoad?this.loader.loadChildren(e,i):Ke(null);const o=s.pipe(yr(a=>null===a?Ke(void 0):(i._loadedRoutes=a.routes,i._loadedInjector=a.injector,this.processRoutes(a.injector??e,a.routes))));return i.loadComponent&&!i._loadedComponent?Dn([o,this.loader.loadComponent(i)]).pipe(uu()):o})}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(qs),ve(jP),ve(un),ve(lG),ve(M2))},t.\u0275prov=ue({token:t,factory:t.\u0275fac,providedIn:"root"}),r})();const R2=new Ce("");let cG=(()=>{var t;class r{constructor(e,i,s,o,a={}){this.urlSerializer=e,this.transitions=i,this.viewportScroller=s,this.zone=o,this.options=a,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},a.scrollPositionRestoration||="disabled",a.anchorScrolling||="disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(e=>{e instanceof Mw?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=e.navigationTrigger,this.restoredId=e.restoredState?e.restoredState.navigationId:0):e instanceof ua?(this.lastId=e.id,this.scheduleScrollEvent(e,this.urlSerializer.parse(e.urlAfterRedirects).fragment)):e instanceof bh&&e.code===Aw.IgnoredSameUrlNavigation&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(e,this.urlSerializer.parse(e.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(e=>{e instanceof N8&&(e.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(e.position):e.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(e.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(e,i){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.transitions.events.next(new N8(e,"popstate"===this.lastSource?this.store[this.restoredId]:null,i))})},0)})}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}}return(t=r).\u0275fac=function(e){!function RA(){throw new Error("invalid")}()},t.\u0275prov=ue({token:t,factory:t.\u0275fac}),r})();function So(t,r){return{\u0275kind:t,\u0275providers:r}}function uG(){const t=fe(ci);return r=>{const n=t.get(Ea);if(r!==n.components[0])return;const e=t.get(qs),i=t.get(hG);1===t.get(P2)&&e.initialNavigation(),t.get(gG,null,Et.Optional)?.setUpPreloading(),t.get(R2,null,Et.Optional)?.init(),e.resetRootComponentType(n.componentTypes[0]),i.closed||(i.next(),i.complete(),i.unsubscribe())}}const hG=new Ce("",{factory:()=>new Ie}),P2=new Ce("",{providedIn:"root",factory:()=>1}),gG=new Ce("");function vNe(t){return So(0,[{provide:gG,useExisting:pNe},{provide:lG,useExisting:t}])}function yNe(t){return So(9,[{provide:rG,useValue:eNe},{provide:sG,useValue:{skipNextTransition:!!t?.skipInitialTransition,...t}}])}const pG=new Ce("ROUTER_FORROOT_GUARD"),wNe=[qg,{provide:wh,useClass:c2},qs,im,{provide:Sh,useFactory:function dG(t){return t.routerState.root},deps:[qs]},M2,[]];let fG=(()=>{var t;class r{constructor(e){}static forRoot(e,i){return{ngModule:r,providers:[wNe,[],{provide:kh,multi:!0,useValue:e},{provide:pG,useFactory:DNe,deps:[[qs,new fd,new Bm]]},{provide:Ah,useValue:i||{}},i?.useHash?{provide:Ul,useClass:TK}:{provide:Ul,useClass:DF},{provide:R2,useFactory:()=>{const t=fe(OZ),r=fe(Oe),n=fe(Ah),e=fe(Nw),i=fe(wh);return n.scrollOffset&&t.setOffset(n.scrollOffset),new cG(i,e,t,r,n)}},i?.preloadingStrategy?vNe(i.preloadingStrategy).\u0275providers:[],i?.initialNavigation?SNe(i):[],i?.bindToComponentInputs?So(8,[j8,{provide:Rw,useExisting:j8}]).\u0275providers:[],i?.enableViewTransitions?yNe().\u0275providers:[],[{provide:mG,useFactory:uG},{provide:$I,multi:!0,useExisting:mG}]]}}static forChild(e){return{ngModule:r,providers:[{provide:kh,multi:!0,useValue:e}]}}}return(t=r).\u0275fac=function(e){return new(e||t)(ve(pG,8))},t.\u0275mod=Lt({type:t}),t.\u0275inj=Ot({}),r})();function DNe(t){return"guarded"}function SNe(t){return["disabled"===t.initialNavigation?So(3,[{provide:jI,multi:!0,useFactory:()=>{const r=fe(qs);return()=>{r.setUpLocationChangeListener()}}},{provide:P2,useValue:2}]).\u0275providers:[],"enabledBlocking"===t.initialNavigation?So(2,[{provide:P2,useValue:0},{provide:jI,multi:!0,deps:[ci],useFactory:r=>{const n=r.get(DK,Promise.resolve());return()=>n.then(()=>new Promise(e=>{const i=r.get(qs),s=r.get(hG);aG(i,()=>{e(!0)}),r.get(Nw).afterPreactivation=()=>(e(!0),s.closed?Ke(void 0):s),i.initialNavigation()}))}}]).\u0275providers:[]]}const mG=new Ce(""),ENe=[{path:"",component:FL,data:{text:"TaskPlannerGrid"}}];let MNe=(()=>{var t;class r{}return(t=r).\u0275fac=function(e){return new(e||t)},t.\u0275mod=Lt({type:t}),t.\u0275inj=Ot({imports:[fG.forRoot(ENe),fG]}),r})();(function pne(t,r){return lK({rootComponent:t,...J5(r)})})(FL,{providers:[cM(yne,MNe,qRe,KRe,e3e,AL,kL,BRe,t3e,QRe,r3e,ZRe,l3e,kL,Fs,AL,i3e,URe,a3e,jRe,n3e,Tne,o3e,$Re,YRe,$n,WRe,JRe,XRe,zRe,s3e),RL,function H4e(){return Ca("NgEagerAnimations"),[...L4e]}(),function ire(...t){const r=[wD,_N,fN,{provide:Wx,useExisting:fN},{provide:$x,useExisting:_N},{provide:Pp,useValue:tre,multi:!0},{provide:bD,useValue:!0},{provide:yN,useClass:ere}];for(const n of t)r.push(...n.\u0275providers);return Um(r)}(function nre(){return function nc(t,r){return{\u0275kind:t,\u0275providers:r}}(za.LegacyInterceptors,[{provide:wN,useFactory:Wne},{provide:Pp,useExisting:wN,multi:!0}])}())]}).catch(t=>console.error(t))}},Ph=>{Ph(Ph.s=988)}]); \ No newline at end of file diff --git a/docs/polyfills.9f7423acfeff3aa5.js b/docs/polyfills.9f7423acfeff3aa5.js deleted file mode 100644 index a57e194..0000000 --- a/docs/polyfills.9f7423acfeff3aa5.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunktaskplanner=self.webpackChunktaskplanner||[]).push([[260],{432:(Ie,ye,se)=>{"use strict";se(792),se(728)},728:()=>{"use strict";!function(o){const l=o.performance;function T(ve){l&&l.mark&&l.mark(ve)}function g(ve,Z){l&&l.measure&&l.measure(ve,Z)}T("Zone");const w=o.__Zone_symbol_prefix||"__zone_symbol__";function C(ve){return w+ve}const U=!0===o[C("forceDuplicateZoneCheck")];if(o.Zone){if(U||"function"!=typeof o.Zone.__symbol__)throw new Error("Zone already loaded.");return o.Zone}let W=(()=>{class Z{static assertZonePatched(){if(o.Promise!==Ke.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let s=Z.current;for(;s.parent;)s=s.parent;return s}static get current(){return be.zone}static get currentTask(){return Ge}static __load_patch(s,F,re=!1){if(Ke.hasOwnProperty(s)){if(!re&&U)throw Error("Already loaded patch: "+s)}else if(!o["__Zone_disable_"+s]){const _e="Zone:"+s;T(_e),Ke[s]=F(o,Z,Le),g(_e,_e)}}get parent(){return this._parent}get name(){return this._name}constructor(s,F){this._parent=s,this._name=F?F.name||"unnamed":"",this._properties=F&&F.properties||{},this._zoneDelegate=new J(this,this._parent&&this._parent._zoneDelegate,F)}get(s){const F=this.getZoneWith(s);if(F)return F._properties[s]}getZoneWith(s){let F=this;for(;F;){if(F._properties.hasOwnProperty(s))return F;F=F._parent}return null}fork(s){if(!s)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,s)}wrap(s,F){if("function"!=typeof s)throw new Error("Expecting function got: "+s);const re=this._zoneDelegate.intercept(this,s,F),_e=this;return function(){return _e.runGuarded(re,this,arguments,F)}}run(s,F,re,_e){be={parent:be,zone:this};try{return this._zoneDelegate.invoke(this,s,F,re,_e)}finally{be=be.parent}}runGuarded(s,F=null,re,_e){be={parent:be,zone:this};try{try{return this._zoneDelegate.invoke(this,s,F,re,_e)}catch(D){if(this._zoneDelegate.handleError(this,D))throw D}}finally{be=be.parent}}runTask(s,F,re){if(s.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(s.zone||He).name+"; Execution: "+this.name+")");if(s.state===Ee&&(s.type===We||s.type===te))return;const _e=s.state!=B;_e&&s._transitionTo(B,ge),s.runCount++;const D=Ge;Ge=s,be={parent:be,zone:this};try{s.type==te&&s.data&&!s.data.isPeriodic&&(s.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,s,F,re)}catch(O){if(this._zoneDelegate.handleError(this,O))throw O}}finally{s.state!==Ee&&s.state!==I&&(s.type==We||s.data&&s.data.isPeriodic?_e&&s._transitionTo(ge,B):(s.runCount=0,this._updateTaskCount(s,-1),_e&&s._transitionTo(Ee,B,Ee))),be=be.parent,Ge=D}}scheduleTask(s){if(s.zone&&s.zone!==this){let re=this;for(;re;){if(re===s.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${s.zone.name}`);re=re.parent}}s._transitionTo(Ae,Ee);const F=[];s._zoneDelegates=F,s._zone=this;try{s=this._zoneDelegate.scheduleTask(this,s)}catch(re){throw s._transitionTo(I,Ae,Ee),this._zoneDelegate.handleError(this,re),re}return s._zoneDelegates===F&&this._updateTaskCount(s,1),s.state==Ae&&s._transitionTo(ge,Ae),s}scheduleMicroTask(s,F,re,_e){return this.scheduleTask(new q(pe,s,F,re,_e,void 0))}scheduleMacroTask(s,F,re,_e,D){return this.scheduleTask(new q(te,s,F,re,_e,D))}scheduleEventTask(s,F,re,_e,D){return this.scheduleTask(new q(We,s,F,re,_e,D))}cancelTask(s){if(s.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(s.zone||He).name+"; Execution: "+this.name+")");if(s.state===ge||s.state===B){s._transitionTo(Pe,ge,B);try{this._zoneDelegate.cancelTask(this,s)}catch(F){throw s._transitionTo(I,Pe),this._zoneDelegate.handleError(this,F),F}return this._updateTaskCount(s,-1),s._transitionTo(Ee,Pe),s.runCount=0,s}}_updateTaskCount(s,F){const re=s._zoneDelegates;-1==F&&(s._zoneDelegates=null);for(let _e=0;_eve.hasTask(P,s),onScheduleTask:(ve,Z,P,s)=>ve.scheduleTask(P,s),onInvokeTask:(ve,Z,P,s,F,re)=>ve.invokeTask(P,s,F,re),onCancelTask:(ve,Z,P,s)=>ve.cancelTask(P,s)};class J{constructor(Z,P,s){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=Z,this._parentDelegate=P,this._forkZS=s&&(s&&s.onFork?s:P._forkZS),this._forkDlgt=s&&(s.onFork?P:P._forkDlgt),this._forkCurrZone=s&&(s.onFork?this.zone:P._forkCurrZone),this._interceptZS=s&&(s.onIntercept?s:P._interceptZS),this._interceptDlgt=s&&(s.onIntercept?P:P._interceptDlgt),this._interceptCurrZone=s&&(s.onIntercept?this.zone:P._interceptCurrZone),this._invokeZS=s&&(s.onInvoke?s:P._invokeZS),this._invokeDlgt=s&&(s.onInvoke?P:P._invokeDlgt),this._invokeCurrZone=s&&(s.onInvoke?this.zone:P._invokeCurrZone),this._handleErrorZS=s&&(s.onHandleError?s:P._handleErrorZS),this._handleErrorDlgt=s&&(s.onHandleError?P:P._handleErrorDlgt),this._handleErrorCurrZone=s&&(s.onHandleError?this.zone:P._handleErrorCurrZone),this._scheduleTaskZS=s&&(s.onScheduleTask?s:P._scheduleTaskZS),this._scheduleTaskDlgt=s&&(s.onScheduleTask?P:P._scheduleTaskDlgt),this._scheduleTaskCurrZone=s&&(s.onScheduleTask?this.zone:P._scheduleTaskCurrZone),this._invokeTaskZS=s&&(s.onInvokeTask?s:P._invokeTaskZS),this._invokeTaskDlgt=s&&(s.onInvokeTask?P:P._invokeTaskDlgt),this._invokeTaskCurrZone=s&&(s.onInvokeTask?this.zone:P._invokeTaskCurrZone),this._cancelTaskZS=s&&(s.onCancelTask?s:P._cancelTaskZS),this._cancelTaskDlgt=s&&(s.onCancelTask?P:P._cancelTaskDlgt),this._cancelTaskCurrZone=s&&(s.onCancelTask?this.zone:P._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const F=s&&s.onHasTask;(F||P&&P._hasTaskZS)&&(this._hasTaskZS=F?s:ee,this._hasTaskDlgt=P,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=Z,s.onScheduleTask||(this._scheduleTaskZS=ee,this._scheduleTaskDlgt=P,this._scheduleTaskCurrZone=this.zone),s.onInvokeTask||(this._invokeTaskZS=ee,this._invokeTaskDlgt=P,this._invokeTaskCurrZone=this.zone),s.onCancelTask||(this._cancelTaskZS=ee,this._cancelTaskDlgt=P,this._cancelTaskCurrZone=this.zone))}fork(Z,P){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,Z,P):new W(Z,P)}intercept(Z,P,s){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,Z,P,s):P}invoke(Z,P,s,F,re){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,Z,P,s,F,re):P.apply(s,F)}handleError(Z,P){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,Z,P)}scheduleTask(Z,P){let s=P;if(this._scheduleTaskZS)this._hasTaskZS&&s._zoneDelegates.push(this._hasTaskDlgtOwner),s=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,Z,P),s||(s=P);else if(P.scheduleFn)P.scheduleFn(P);else{if(P.type!=pe)throw new Error("Task is missing scheduleFn.");oe(P)}return s}invokeTask(Z,P,s,F){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,Z,P,s,F):P.callback.apply(s,F)}cancelTask(Z,P){let s;if(this._cancelTaskZS)s=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,Z,P);else{if(!P.cancelFn)throw Error("Task is not cancelable");s=P.cancelFn(P)}return s}hasTask(Z,P){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,Z,P)}catch(s){this.handleError(Z,s)}}_updateTaskCount(Z,P){const s=this._taskCounts,F=s[Z],re=s[Z]=F+P;if(re<0)throw new Error("More tasks executed then were scheduled.");0!=F&&0!=re||this.hasTask(this.zone,{microTask:s.microTask>0,macroTask:s.macroTask>0,eventTask:s.eventTask>0,change:Z})}}class q{constructor(Z,P,s,F,re,_e){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=Z,this.source=P,this.data=F,this.scheduleFn=re,this.cancelFn=_e,!s)throw new Error("callback is not defined");this.callback=s;const D=this;this.invoke=Z===We&&F&&F.useG?q.invokeTask:function(){return q.invokeTask.call(o,D,this,arguments)}}static invokeTask(Z,P,s){Z||(Z=this),Ue++;try{return Z.runCount++,Z.zone.runTask(Z,P,s)}finally{1==Ue&&z(),Ue--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(Ee,Ae)}_transitionTo(Z,P,s){if(this._state!==P&&this._state!==s)throw new Error(`${this.type} '${this.source}': can not transition to '${Z}', expecting state '${P}'${s?" or '"+s+"'":""}, was '${this._state}'.`);this._state=Z,Z==Ee&&(this._zoneDelegates=null)}toString(){return this.data&&typeof this.data.handleId<"u"?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}const me=C("setTimeout"),fe=C("Promise"),de=C("then");let Fe,xe=[],Te=!1;function Ce(ve){if(Fe||o[fe]&&(Fe=o[fe].resolve(0)),Fe){let Z=Fe[de];Z||(Z=Fe.then),Z.call(Fe,ve)}else o[me](ve,0)}function oe(ve){0===Ue&&0===xe.length&&Ce(z),ve&&xe.push(ve)}function z(){if(!Te){for(Te=!0;xe.length;){const ve=xe;xe=[];for(let Z=0;Zbe,onUnhandledError:De,microtaskDrainDone:De,scheduleMicroTask:oe,showUncaughtError:()=>!W[C("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:De,patchMethod:()=>De,bindArguments:()=>[],patchThen:()=>De,patchMacroTask:()=>De,patchEventPrototype:()=>De,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>De,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>De,wrapWithCurrentZone:()=>De,filterProperties:()=>[],attachOriginToPatched:()=>De,_redefineProperty:()=>De,patchCallbacks:()=>De,nativeScheduleMicroTask:Ce};let be={parent:null,zone:new W(null,null)},Ge=null,Ue=0;function De(){}g("Zone","Zone"),o.Zone=W}(globalThis);const Ie=Object.getOwnPropertyDescriptor,ye=Object.defineProperty,se=Object.getPrototypeOf,Oe=Object.create,r=Array.prototype.slice,L="addEventListener",b="removeEventListener",N=Zone.__symbol__(L),f=Zone.__symbol__(b),h="true",E="false",p=Zone.__symbol__("");function m(o,l){return Zone.current.wrap(o,l)}function e(o,l,T,g,w){return Zone.current.scheduleMacroTask(o,l,T,g,w)}const t=Zone.__symbol__,c=typeof window<"u",n=c?window:void 0,i=c&&n||globalThis,u="removeAttribute";function y(o,l){for(let T=o.length-1;T>=0;T--)"function"==typeof o[T]&&(o[T]=m(o[T],l+"_"+T));return o}function _(o){return!o||!1!==o.writable&&!("function"==typeof o.get&&typeof o.set>"u")}const a=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,d=!("nw"in i)&&typeof i.process<"u"&&"[object process]"==={}.toString.call(i.process),x=!d&&!a&&!(!c||!n.HTMLElement),M=typeof i.process<"u"&&"[object process]"==={}.toString.call(i.process)&&!a&&!(!c||!n.HTMLElement),G={},$=function(o){if(!(o=o||i.event))return;let l=G[o.type];l||(l=G[o.type]=t("ON_PROPERTY"+o.type));const T=this||o.target||i,g=T[l];let w;return x&&T===n&&"error"===o.type?(w=g&&g.call(this,o.message,o.filename,o.lineno,o.colno,o.error),!0===w&&o.preventDefault()):(w=g&&g.apply(this,arguments),null!=w&&!w&&o.preventDefault()),w};function j(o,l,T){let g=Ie(o,l);if(!g&&T&&Ie(T,l)&&(g={enumerable:!0,configurable:!0}),!g||!g.configurable)return;const w=t("on"+l+"patched");if(o.hasOwnProperty(w)&&o[w])return;delete g.writable,delete g.value;const C=g.get,U=g.set,W=l.slice(2);let ee=G[W];ee||(ee=G[W]=t("ON_PROPERTY"+W)),g.set=function(J){let q=this;!q&&o===i&&(q=i),q&&("function"==typeof q[ee]&&q.removeEventListener(W,$),U&&U.call(q,null),q[ee]=J,"function"==typeof J&&q.addEventListener(W,$,!1))},g.get=function(){let J=this;if(!J&&o===i&&(J=i),!J)return null;const q=J[ee];if(q)return q;if(C){let me=C.call(this);if(me)return g.set.call(this,me),"function"==typeof J[u]&&J.removeAttribute(l),me}return null},ye(o,l,g),o[w]=!0}function R(o,l,T){if(l)for(let g=0;gfunction(U,W){const ee=T(U,W);return ee.cbIdx>=0&&"function"==typeof W[ee.cbIdx]?e(ee.name,W[ee.cbIdx],ee,w):C.apply(U,W)})}function we(o,l){o[t("OriginalDelegate")]=l}let Ze=!1,je=!1;function Je(){if(Ze)return je;Ze=!0;try{const o=n.navigator.userAgent;(-1!==o.indexOf("MSIE ")||-1!==o.indexOf("Trident/")||-1!==o.indexOf("Edge/"))&&(je=!0)}catch{}return je}Zone.__load_patch("ZoneAwarePromise",(o,l,T)=>{const g=Object.getOwnPropertyDescriptor,w=Object.defineProperty,U=T.symbol,W=[],ee=!1!==o[U("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],J=U("Promise"),q=U("then"),me="__creationTrace__";T.onUnhandledError=D=>{if(T.showUncaughtError()){const O=D&&D.rejection;O?console.error("Unhandled Promise rejection:",O instanceof Error?O.message:O,"; Zone:",D.zone.name,"; Task:",D.task&&D.task.source,"; Value:",O,O instanceof Error?O.stack:void 0):console.error(D)}},T.microtaskDrainDone=()=>{for(;W.length;){const D=W.shift();try{D.zone.runGuarded(()=>{throw D.throwOriginal?D.rejection:D})}catch(O){de(O)}}};const fe=U("unhandledPromiseRejectionHandler");function de(D){T.onUnhandledError(D);try{const O=l[fe];"function"==typeof O&&O.call(this,D)}catch{}}function xe(D){return D&&D.then}function Te(D){return D}function Fe(D){return P.reject(D)}const Ce=U("state"),oe=U("value"),z=U("finally"),He=U("parentPromiseValue"),Ee=U("parentPromiseState"),Ae="Promise.then",ge=null,B=!0,Pe=!1,I=0;function pe(D,O){return v=>{try{Le(D,O,v)}catch(A){Le(D,!1,A)}}}const te=function(){let D=!1;return function(v){return function(){D||(D=!0,v.apply(null,arguments))}}},We="Promise resolved with itself",Ke=U("currentTaskTrace");function Le(D,O,v){const A=te();if(D===v)throw new TypeError(We);if(D[Ce]===ge){let Y=null;try{("object"==typeof v||"function"==typeof v)&&(Y=v&&v.then)}catch(ie){return A(()=>{Le(D,!1,ie)})(),D}if(O!==Pe&&v instanceof P&&v.hasOwnProperty(Ce)&&v.hasOwnProperty(oe)&&v[Ce]!==ge)Ge(v),Le(D,v[Ce],v[oe]);else if(O!==Pe&&"function"==typeof Y)try{Y.call(v,A(pe(D,O)),A(pe(D,!1)))}catch(ie){A(()=>{Le(D,!1,ie)})()}else{D[Ce]=O;const ie=D[oe];if(D[oe]=v,D[z]===z&&O===B&&(D[Ce]=D[Ee],D[oe]=D[He]),O===Pe&&v instanceof Error){const X=l.currentTask&&l.currentTask.data&&l.currentTask.data[me];X&&w(v,Ke,{configurable:!0,enumerable:!1,writable:!0,value:X})}for(let X=0;X{try{const ae=D[oe],ue=!!v&&z===v[z];ue&&(v[He]=ae,v[Ee]=ie);const ce=O.run(X,void 0,ue&&X!==Fe&&X!==Te?[]:[ae]);Le(v,!0,ce)}catch(ae){Le(v,!1,ae)}},v)}const ve=function(){},Z=o.AggregateError;class P{static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(O){return O instanceof P?O:Le(new this(null),B,O)}static reject(O){return Le(new this(null),Pe,O)}static withResolvers(){const O={};return O.promise=new P((v,A)=>{O.resolve=v,O.reject=A}),O}static any(O){if(!O||"function"!=typeof O[Symbol.iterator])return Promise.reject(new Z([],"All promises were rejected"));const v=[];let A=0;try{for(let X of O)A++,v.push(P.resolve(X))}catch{return Promise.reject(new Z([],"All promises were rejected"))}if(0===A)return Promise.reject(new Z([],"All promises were rejected"));let Y=!1;const ie=[];return new P((X,ae)=>{for(let ue=0;ue{Y||(Y=!0,X(ce))},ce=>{ie.push(ce),A--,0===A&&(Y=!0,ae(new Z(ie,"All promises were rejected")))})})}static race(O){let v,A,Y=new this((ae,ue)=>{v=ae,A=ue});function ie(ae){v(ae)}function X(ae){A(ae)}for(let ae of O)xe(ae)||(ae=this.resolve(ae)),ae.then(ie,X);return Y}static all(O){return P.allWithCallback(O)}static allSettled(O){return(this&&this.prototype instanceof P?this:P).allWithCallback(O,{thenCallback:A=>({status:"fulfilled",value:A}),errorCallback:A=>({status:"rejected",reason:A})})}static allWithCallback(O,v){let A,Y,ie=new this((ce,Re)=>{A=ce,Y=Re}),X=2,ae=0;const ue=[];for(let ce of O){xe(ce)||(ce=this.resolve(ce));const Re=ae;try{ce.then(Se=>{ue[Re]=v?v.thenCallback(Se):Se,X--,0===X&&A(ue)},Se=>{v?(ue[Re]=v.errorCallback(Se),X--,0===X&&A(ue)):Y(Se)})}catch(Se){Y(Se)}X++,ae++}return X-=2,0===X&&A(ue),ie}constructor(O){const v=this;if(!(v instanceof P))throw new Error("Must be an instanceof Promise.");v[Ce]=ge,v[oe]=[];try{const A=te();O&&O(A(pe(v,B)),A(pe(v,Pe)))}catch(A){Le(v,!1,A)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return P}then(O,v){let A=this.constructor?.[Symbol.species];(!A||"function"!=typeof A)&&(A=this.constructor||P);const Y=new A(ve),ie=l.current;return this[Ce]==ge?this[oe].push(ie,Y,O,v):Ue(this,ie,Y,O,v),Y}catch(O){return this.then(null,O)}finally(O){let v=this.constructor?.[Symbol.species];(!v||"function"!=typeof v)&&(v=P);const A=new v(ve);A[z]=z;const Y=l.current;return this[Ce]==ge?this[oe].push(Y,A,O,O):Ue(this,Y,A,O,O),A}}P.resolve=P.resolve,P.reject=P.reject,P.race=P.race,P.all=P.all;const s=o[J]=o.Promise;o.Promise=P;const F=U("thenPatched");function re(D){const O=D.prototype,v=g(O,"then");if(v&&(!1===v.writable||!v.configurable))return;const A=O.then;O[q]=A,D.prototype.then=function(Y,ie){return new P((ae,ue)=>{A.call(this,ae,ue)}).then(Y,ie)},D[F]=!0}return T.patchThen=re,s&&(re(s),ke(o,"fetch",D=>function _e(D){return function(O,v){let A=D.apply(O,v);if(A instanceof P)return A;let Y=A.constructor;return Y[F]||re(Y),A}}(D))),Promise[l.__symbol__("uncaughtPromiseErrors")]=W,P}),Zone.__load_patch("toString",o=>{const l=Function.prototype.toString,T=t("OriginalDelegate"),g=t("Promise"),w=t("Error"),C=function(){if("function"==typeof this){const J=this[T];if(J)return"function"==typeof J?l.call(J):Object.prototype.toString.call(J);if(this===Promise){const q=o[g];if(q)return l.call(q)}if(this===Error){const q=o[w];if(q)return l.call(q)}}return l.call(this)};C[T]=l,Function.prototype.toString=C;const U=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":U.call(this)}});let k=!1;if(typeof window<"u")try{const o=Object.defineProperty({},"passive",{get:function(){k=!0}});window.addEventListener("test",o,o),window.removeEventListener("test",o,o)}catch{k=!1}const K={useG:!0},H={},ne={},Q=new RegExp("^"+p+"(\\w+)(true|false)$"),Ne=t("propagationStopped");function Me(o,l){const T=(l?l(o):o)+E,g=(l?l(o):o)+h,w=p+T,C=p+g;H[o]={},H[o][E]=w,H[o][h]=C}function qe(o,l,T,g){const w=g&&g.add||L,C=g&&g.rm||b,U=g&&g.listeners||"eventListeners",W=g&&g.rmAll||"removeAllListeners",ee=t(w),J="."+w+":",q="prependListener",me="."+q+":",fe=function(oe,z,He){if(oe.isRemoved)return;const Ee=oe.callback;let Ae;"object"==typeof Ee&&Ee.handleEvent&&(oe.callback=B=>Ee.handleEvent(B),oe.originalDelegate=Ee);try{oe.invoke(oe,z,[He])}catch(B){Ae=B}const ge=oe.options;return ge&&"object"==typeof ge&&ge.once&&z[C].call(z,He.type,oe.originalDelegate?oe.originalDelegate:oe.callback,ge),Ae};function de(oe,z,He){if(!(z=z||o.event))return;const Ee=oe||z.target||o,Ae=Ee[H[z.type][He?h:E]];if(Ae){const ge=[];if(1===Ae.length){const B=fe(Ae[0],Ee,z);B&&ge.push(B)}else{const B=Ae.slice();for(let Pe=0;Pe{throw Pe})}}}const xe=function(oe){return de(this,oe,!1)},Te=function(oe){return de(this,oe,!0)};function Fe(oe,z){if(!oe)return!1;let He=!0;z&&void 0!==z.useG&&(He=z.useG);const Ee=z&&z.vh;let Ae=!0;z&&void 0!==z.chkDup&&(Ae=z.chkDup);let ge=!1;z&&void 0!==z.rt&&(ge=z.rt);let B=oe;for(;B&&!B.hasOwnProperty(w);)B=se(B);if(!B&&oe[w]&&(B=oe),!B||B[ee])return!1;const Pe=z&&z.eventNameToString,I={},pe=B[ee]=B[w],te=B[t(C)]=B[C],We=B[t(U)]=B[U],Ke=B[t(W)]=B[W];let Le;z&&z.prepend&&(Le=B[t(z.prepend)]=B[z.prepend]);const P=He?function(v){if(!I.isExisting)return pe.call(I.target,I.eventName,I.capture?Te:xe,I.options)}:function(v){return pe.call(I.target,I.eventName,v.invoke,I.options)},s=He?function(v){if(!v.isRemoved){const A=H[v.eventName];let Y;A&&(Y=A[v.capture?h:E]);const ie=Y&&v.target[Y];if(ie)for(let X=0;X{Ye.zone.cancelTask(Ye)},{once:!0})),I.target=null,at&&(at.taskData=null),dt&&(ze.once=!0),!k&&"boolean"==typeof Ye.options||(Ye.options=ze),Ye.target=ue,Ye.capture=ft,Ye.eventName=ce,Se&&(Ye.originalDelegate=Re),ae?rt.unshift(Ye):rt.push(Ye),X?ue:void 0}};return B[w]=O(pe,J,P,s,ge),Le&&(B[q]=O(Le,me,function(v){return Le.call(I.target,I.eventName,v.invoke,I.options)},s,ge,!0)),B[C]=function(){const v=this||o;let A=arguments[0];z&&z.transferEventName&&(A=z.transferEventName(A));const Y=arguments[2],ie=!!Y&&("boolean"==typeof Y||Y.capture),X=arguments[1];if(!X)return te.apply(this,arguments);if(Ee&&!Ee(te,X,v,arguments))return;const ae=H[A];let ue;ae&&(ue=ae[ie?h:E]);const ce=ue&&v[ue];if(ce)for(let Re=0;Refunction(w,C){w[Ne]=!0,g&&g.apply(w,C)})}function et(o,l,T,g,w){const C=Zone.__symbol__(g);if(l[C])return;const U=l[C]=l[g];l[g]=function(W,ee,J){return ee&&ee.prototype&&w.forEach(function(q){const me=`${T}.${g}::`+q,fe=ee.prototype;try{if(fe.hasOwnProperty(q)){const de=o.ObjectGetOwnPropertyDescriptor(fe,q);de&&de.value?(de.value=o.wrapWithCurrentZone(de.value,me),o._redefineProperty(ee.prototype,q,de)):fe[q]&&(fe[q]=o.wrapWithCurrentZone(fe[q],me))}else fe[q]&&(fe[q]=o.wrapWithCurrentZone(fe[q],me))}catch{}}),U.call(l,W,ee,J)},o.attachOriginToPatched(l[g],U)}function it(o,l,T){if(!T||0===T.length)return l;const g=T.filter(C=>C.target===o);if(!g||0===g.length)return l;const w=g[0].ignoreProperties;return l.filter(C=>-1===w.indexOf(C))}function ut(o,l,T,g){o&&R(o,it(o,l,T),g)}function ot(o){return Object.getOwnPropertyNames(o).filter(l=>l.startsWith("on")&&l.length>2).map(l=>l.substring(2))}Zone.__load_patch("util",(o,l,T)=>{const g=ot(o);T.patchOnProperties=R,T.patchMethod=ke,T.bindArguments=y,T.patchMacroTask=he;const w=l.__symbol__("BLACK_LISTED_EVENTS"),C=l.__symbol__("UNPATCHED_EVENTS");o[C]&&(o[w]=o[C]),o[w]&&(l[w]=l[C]=o[w]),T.patchEventPrototype=Qe,T.patchEventTarget=qe,T.isIEOrEdge=Je,T.ObjectDefineProperty=ye,T.ObjectGetOwnPropertyDescriptor=Ie,T.ObjectCreate=Oe,T.ArraySlice=r,T.patchClass=le,T.wrapWithCurrentZone=m,T.filterProperties=it,T.attachOriginToPatched=we,T._redefineProperty=Object.defineProperty,T.patchCallbacks=et,T.getGlobalObjects=()=>({globalSources:ne,zoneSymbolEventNames:H,eventNames:g,isBrowser:x,isMix:M,isNode:d,TRUE_STR:h,FALSE_STR:E,ZONE_SYMBOL_PREFIX:p,ADD_EVENT_LISTENER_STR:L,REMOVE_EVENT_LISTENER_STR:b})});const ct=t("zoneTask");function nt(o,l,T,g){let w=null,C=null;T+=g;const U={};function W(J){const q=J.data;return q.args[0]=function(){return J.invoke.apply(this,arguments)},q.handleId=w.apply(o,q.args),J}function ee(J){return C.call(o,J.data.handleId)}w=ke(o,l+=g,J=>function(q,me){if("function"==typeof me[0]){const fe={isPeriodic:"Interval"===g,delay:"Timeout"===g||"Interval"===g?me[1]||0:void 0,args:me},de=me[0];me[0]=function(){try{return de.apply(this,arguments)}finally{fe.isPeriodic||("number"==typeof fe.handleId?delete U[fe.handleId]:fe.handleId&&(fe.handleId[ct]=null))}};const xe=e(l,me[0],fe,W,ee);if(!xe)return xe;const Te=xe.data.handleId;return"number"==typeof Te?U[Te]=xe:Te&&(Te[ct]=xe),Te&&Te.ref&&Te.unref&&"function"==typeof Te.ref&&"function"==typeof Te.unref&&(xe.ref=Te.ref.bind(Te),xe.unref=Te.unref.bind(Te)),"number"==typeof Te||Te?Te:xe}return J.apply(o,me)}),C=ke(o,T,J=>function(q,me){const fe=me[0];let de;"number"==typeof fe?de=U[fe]:(de=fe&&fe[ct],de||(de=fe)),de&&"string"==typeof de.type?"notScheduled"!==de.state&&(de.cancelFn&&de.data.isPeriodic||0===de.runCount)&&("number"==typeof fe?delete U[fe]:fe&&(fe[ct]=null),de.zone.cancelTask(de)):J.apply(o,me)})}Zone.__load_patch("legacy",o=>{const l=o[Zone.__symbol__("legacyPatch")];l&&l()}),Zone.__load_patch("timers",o=>{const l="set",T="clear";nt(o,l,T,"Timeout"),nt(o,l,T,"Interval"),nt(o,l,T,"Immediate")}),Zone.__load_patch("requestAnimationFrame",o=>{nt(o,"request","cancel","AnimationFrame"),nt(o,"mozRequest","mozCancel","AnimationFrame"),nt(o,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(o,l)=>{const T=["alert","prompt","confirm"];for(let g=0;gfunction(ee,J){return l.current.run(C,o,J,W)})}),Zone.__load_patch("EventTarget",(o,l,T)=>{(function Et(o,l){l.patchEventPrototype(o,l)})(o,T),function Tt(o,l){if(Zone[l.symbol("patchEventTarget")])return;const{eventNames:T,zoneSymbolEventNames:g,TRUE_STR:w,FALSE_STR:C,ZONE_SYMBOL_PREFIX:U}=l.getGlobalObjects();for(let ee=0;ee{le("MutationObserver"),le("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",(o,l,T)=>{le("IntersectionObserver")}),Zone.__load_patch("FileReader",(o,l,T)=>{le("FileReader")}),Zone.__load_patch("on_property",(o,l,T)=>{!function Ve(o,l){if(d&&!M||Zone[o.symbol("patchEvents")])return;const T=l.__Zone_ignore_on_properties;let g=[];if(x){const w=window;g=g.concat(["Document","SVGElement","Element","HTMLElement","HTMLBodyElement","HTMLMediaElement","HTMLFrameSetElement","HTMLFrameElement","HTMLIFrameElement","HTMLMarqueeElement","Worker"]);const C=function Be(){try{const o=n.navigator.userAgent;if(-1!==o.indexOf("MSIE ")||-1!==o.indexOf("Trident/"))return!0}catch{}return!1}()?[{target:w,ignoreProperties:["error"]}]:[];ut(w,ot(w),T&&T.concat(C),se(w))}g=g.concat(["XMLHttpRequest","XMLHttpRequestEventTarget","IDBIndex","IDBRequest","IDBOpenDBRequest","IDBDatabase","IDBTransaction","IDBCursor","WebSocket"]);for(let w=0;w{!function yt(o,l){const{isBrowser:T,isMix:g}=l.getGlobalObjects();(T||g)&&o.customElements&&"customElements"in o&&l.patchCallbacks(l,o.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback","formAssociatedCallback","formDisabledCallback","formResetCallback","formStateRestoreCallback"])}(o,T)}),Zone.__load_patch("XHR",(o,l)=>{!function ee(J){const q=J.XMLHttpRequest;if(!q)return;const me=q.prototype;let de=me[N],xe=me[f];if(!de){const I=J.XMLHttpRequestEventTarget;if(I){const pe=I.prototype;de=pe[N],xe=pe[f]}}const Te="readystatechange",Fe="scheduled";function Ce(I){const pe=I.data,te=pe.target;te[C]=!1,te[W]=!1;const We=te[w];de||(de=te[N],xe=te[f]),We&&xe.call(te,Te,We);const Ke=te[w]=()=>{if(te.readyState===te.DONE)if(!pe.aborted&&te[C]&&I.state===Fe){const be=te[l.__symbol__("loadfalse")];if(0!==te.status&&be&&be.length>0){const Ge=I.invoke;I.invoke=function(){const Ue=te[l.__symbol__("loadfalse")];for(let De=0;Defunction(I,pe){return I[g]=0==pe[2],I[U]=pe[1],He.apply(I,pe)}),Ae=t("fetchTaskAborting"),ge=t("fetchTaskScheduling"),B=ke(me,"send",()=>function(I,pe){if(!0===l.current[ge]||I[g])return B.apply(I,pe);{const te={target:I,url:I[U],isPeriodic:!1,args:pe,aborted:!1},We=e("XMLHttpRequest.send",oe,te,Ce,z);I&&!0===I[W]&&!te.aborted&&We.state===Fe&&We.invoke()}}),Pe=ke(me,"abort",()=>function(I,pe){const te=function fe(I){return I[T]}(I);if(te&&"string"==typeof te.type){if(null==te.cancelFn||te.data&&te.data.aborted)return;te.zone.cancelTask(te)}else if(!0===l.current[Ae])return Pe.apply(I,pe)})}(o);const T=t("xhrTask"),g=t("xhrSync"),w=t("xhrListener"),C=t("xhrScheduled"),U=t("xhrURL"),W=t("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",o=>{o.navigator&&o.navigator.geolocation&&function S(o,l){const T=o.constructor.name;for(let g=0;g{const ee=function(){return W.apply(this,y(arguments,T+"."+w))};return we(ee,W),ee})(C)}}}(o.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(o,l)=>{function T(g){return function(w){Xe(o,g).forEach(U=>{const W=o.PromiseRejectionEvent;if(W){const ee=new W(g,{promise:w.promise,reason:w.rejection});U.invoke(ee)}})}}o.PromiseRejectionEvent&&(l[t("unhandledPromiseRejectionHandler")]=T("unhandledrejection"),l[t("rejectionHandledHandler")]=T("rejectionhandled"))}),Zone.__load_patch("queueMicrotask",(o,l,T)=>{!function vt(o,l){l.patchMethod(o,"queueMicrotask",T=>function(g,w){Zone.current.scheduleMicroTask("queueMicrotask",w[0])})}(o,T)})},792:()=>{var se,Oe,Ie,ye;ye={},function(se,Oe){function L(){this._delay=0,this._endDelay=0,this._fill="none",this._iterationStart=0,this._iterations=1,this._duration=0,this._playbackRate=1,this._direction="normal",this._easing="linear",this._easingFunction=M}function b(){return se.isDeprecated("Invalid timing inputs","2016-03-02","TypeError exceptions will be thrown instead.",!0)}function N(k,K,H){var ne=new L;return K&&(ne.fill="both",ne.duration="auto"),"number"!=typeof k||isNaN(k)?void 0!==k&&Object.getOwnPropertyNames(k).forEach(function(Q){if("auto"!=k[Q]){if(("number"==typeof ne[Q]||"duration"==Q)&&("number"!=typeof k[Q]||isNaN(k[Q]))||"fill"==Q&&-1==d.indexOf(k[Q])||"direction"==Q&&-1==x.indexOf(k[Q])||"playbackRate"==Q&&1!==k[Q]&&se.isDeprecated("AnimationEffectTiming.playbackRate","2014-11-28","Use Animation.playbackRate instead."))return;ne[Q]=k[Q]}}):ne.duration=k,ne}function E(k,K,H,ne){return k<0||k>1||H<0||H>1?M:function(Q){function Ne(ut,ot,Ve){return 3*ut*(1-Ve)*(1-Ve)*Ve+3*ot*(1-Ve)*Ve*Ve+Ve*Ve*Ve}if(Q<=0){var Me=0;return k>0?Me=K/k:!K&&H>0&&(Me=ne/H),Me*Q}if(Q>=1){var qe=0;return H<1?qe=(ne-1)/(H-1):1==H&&k<1&&(qe=(K-1)/(k-1)),1+qe*(Q-1)}for(var Xe=0,Qe=1;Xe=1)return 1;var ne=1/k;return(H+=K*ne)-H%ne}}function m(k){V||(V=document.createElement("div").style),V.animationTimingFunction="",V.animationTimingFunction=k;var K=V.animationTimingFunction;if(""==K&&b())throw new TypeError(k+" is not a valid value for easing");return K}function e(k){if("linear"==k)return M;var K=ke.exec(k);if(K)return E.apply(this,K.slice(1).map(Number));var H=he.exec(k);if(H)return p(Number(H[1]),j);var ne=we.exec(k);return ne?p(Number(ne[1]),{start:G,middle:$,end:j}[ne[2]]):R[k]||M}function n(k,K,H){if(null==K)return Ze;var ne=H.delay+k+H.endDelay;return K=Math.min(H.delay+k,ne)?Be:Je}var d="backwards|forwards|both|none".split("|"),x="reverse|alternate|alternate-reverse".split("|"),M=function(k){return k};L.prototype={_setMember:function(k,K){this["_"+k]=K,this._effect&&(this._effect._timingInput[k]=K,this._effect._timing=se.normalizeTimingInput(this._effect._timingInput),this._effect.activeDuration=se.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(k){this._setMember("delay",k)},get delay(){return this._delay},set endDelay(k){this._setMember("endDelay",k)},get endDelay(){return this._endDelay},set fill(k){this._setMember("fill",k)},get fill(){return this._fill},set iterationStart(k){if((isNaN(k)||k<0)&&b())throw new TypeError("iterationStart must be a non-negative number, received: "+k);this._setMember("iterationStart",k)},get iterationStart(){return this._iterationStart},set duration(k){if("auto"!=k&&(isNaN(k)||k<0)&&b())throw new TypeError("duration must be non-negative or auto, received: "+k);this._setMember("duration",k)},get duration(){return this._duration},set direction(k){this._setMember("direction",k)},get direction(){return this._direction},set easing(k){this._easingFunction=e(m(k)),this._setMember("easing",k)},get easing(){return this._easing},set iterations(k){if((isNaN(k)||k<0)&&b())throw new TypeError("iterations must be non-negative, received: "+k);this._setMember("iterations",k)},get iterations(){return this._iterations}};var G=1,$=.5,j=0,R={ease:E(.25,.1,.25,1),"ease-in":E(.42,0,1,1),"ease-out":E(0,0,.58,1),"ease-in-out":E(.42,0,.58,1),"step-start":p(1,G),"step-middle":p(1,$),"step-end":p(1,j)},V=null,le="\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*",ke=new RegExp("cubic-bezier\\("+le+","+le+","+le+","+le+"\\)"),he=/steps\(\s*(\d+)\s*\)/,we=/steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/,Ze=0,je=1,Be=2,Je=3;se.cloneTimingInput=function r(k){if("number"==typeof k)return k;var K={};for(var H in k)K[H]=k[H];return K},se.makeTiming=N,se.numericTimingToObject=function f(k){return"number"==typeof k&&(k=isNaN(k)?{duration:0}:{duration:k}),k},se.normalizeTimingInput=function h(k,K){return N(k=se.numericTimingToObject(k),K)},se.calculateActiveDuration=function t(k){return Math.abs(function c(k){return 0===k.duration||0===k.iterations?0:k.duration*k.iterations}(k)/k.playbackRate)},se.calculateIterationProgress=function a(k,K,H){var ne=n(k,K,H),Q=function i(k,K,H,ne,Q){switch(ne){case je:return"backwards"==K||"both"==K?0:null;case Je:return H-Q;case Be:return"forwards"==K||"both"==K?k:null;case Ze:return null}}(k,H.fill,K,ne,H.delay);if(null===Q)return null;var Ne=function u(k,K,H,ne,Q){var Ne=Q;return 0===k?K!==je&&(Ne+=H):Ne+=ne/k,Ne}(H.duration,ne,H.iterations,Q,H.iterationStart),Me=function y(k,K,H,ne,Q,Ne){var Me=k===1/0?K%1:k%1;return 0!==Me||H!==Be||0===ne||0===Q&&0!==Ne||(Me=1),Me}(Ne,H.iterationStart,ne,H.iterations,Q,H.duration),qe=function S(k,K,H,ne){return k===Be&&K===1/0?1/0:1===H?Math.floor(ne)-1:Math.floor(ne)}(ne,H.iterations,Me,Ne),Xe=function _(k,K,H){var ne=k;if("normal"!==k&&"reverse"!==k){var Q=K;"alternate-reverse"===k&&(Q+=1),ne="normal",Q!==1/0&&Q%2!=0&&(ne="reverse")}return"normal"===ne?H:1-H}(H.direction,qe,Me);return H._easingFunction(Xe)},se.calculatePhase=n,se.normalizeEasing=m,se.parseEasingFunction=e}(Ie={}),function(se,Oe){function r(e,t){return e in m&&m[e][t]||t}function b(e,t,c){if(!function L(e){return"display"===e||0===e.lastIndexOf("animation",0)||0===e.lastIndexOf("transition",0)}(e)){var n=h[e];if(n)for(var i in E.style[e]=t,n){var u=n[i];c[u]=r(u,E.style[u])}else c[e]=r(e,t)}}function N(e){var t=[];for(var c in e)if(!(c in["easing","offset","composite"])){var n=e[c];Array.isArray(n)||(n=[n]);for(var i,u=n.length,y=0;y1)throw new TypeError("Keyframe offsets must be between 0 and 1.")}}else if("composite"==a){if("add"==d||"accumulate"==d)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"add compositing is not supported"};if("replace"!=d)throw new TypeError("Invalid composite mode "+d+".")}else d="easing"==a?se.normalizeEasing(d):""+d;b(a,d,_)}return null==_.offset&&(_.offset=null),null==_.easing&&(_.easing="linear"),_}),n=!0,i=-1/0,u=0;u=0&&S.offset<=1}),n||function t(){var S=c.length;null==c[S-1].offset&&(c[S-1].offset=1),S>1&&null==c[0].offset&&(c[0].offset=0);for(var _=0,a=c[0].offset,d=1;d=n.applyFrom&&tthis._surrogateStyle.length;)this._length--,Object.defineProperty(this,this._length,{configurable:!0,enumerable:!1,value:void 0})},_set:function(n,i){this._style[n]=i,this._isAnimatedProperty[n]=!0,this._updateSvgTransformAttr&&"transform"==r.unprefixedPropertyName(n)&&(null==this._savedTransformAttr&&(this._savedTransformAttr=this._element.getAttribute("transform")),this._element.setAttribute("transform",r.transformToSvgMatrix(i)))},_clear:function(n){this._style[n]=this._surrogateStyle[n],this._updateSvgTransformAttr&&"transform"==r.unprefixedPropertyName(n)&&(this._savedTransformAttr?this._element.setAttribute("transform",this._savedTransformAttr):this._element.removeAttribute("transform"),this._savedTransformAttr=null),delete this._isAnimatedProperty[n]}},m)f.prototype[t]=function(n,i){return function(){var u=this._surrogateStyle[n].apply(this._surrogateStyle,arguments);return i&&(this._isAnimatedProperty[arguments[0]]||this._style[n].apply(this._style,arguments),this._updateIndices()),u}}(t,t in e);for(var c in document.documentElement.style)c in p||c in m||function(n){N(f.prototype,n,{get:function(){return this._surrogateStyle[n]},set:function(i){this._surrogateStyle[n]=i,this._updateIndices(),this._isAnimatedProperty[n]||(this._style[n]=i)}})}(c);r.apply=function(n,i,u){(function h(n){if(!n._webAnimationsPatchedStyle){var i=new f(n);try{N(n,"style",{get:function(){return i}})}catch{n.style._set=function(y,S){n.style[y]=S},n.style._clear=function(y){n.style[y]=""}}n._webAnimationsPatchedStyle=n.style}})(n),n.style._set(r.propertyName(i),u)},r.clear=function(n,i){n._webAnimationsPatchedStyle&&n.style._clear(r.propertyName(i))}}(ye),function(r){window.Element.prototype.animate=function(L,b){var N="";return b&&b.id&&(N=b.id),r.timeline._play(r.KeyframeEffect(this,L,b,N))}}(ye),function(r,L){function b(N,f,h){if("number"==typeof N&&"number"==typeof f)return N*(1-h)+f*h;if("boolean"==typeof N&&"boolean"==typeof f)return h<.5?N:f;if(N.length==f.length){for(var E=[],p=0;p0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(f){f=+f,isNaN(f)||(L.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-f/this._playbackRate),this._currentTimePending=!1,this._currentTime!=f&&(this._idle&&(this._idle=!1,this._paused=!0),this._tickCurrentTime(f,!0),L.applyDirtiedAnimation(this)))},get startTime(){return this._startTime},set startTime(f){f=+f,isNaN(f)||this._paused||this._idle||(this._startTime=f,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),L.applyDirtiedAnimation(this))},get playbackRate(){return this._playbackRate},set playbackRate(f){if(f!=this._playbackRate){var h=this.currentTime;this._playbackRate=f,this._startTime=null,"paused"!=this.playState&&"idle"!=this.playState&&(this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),L.applyDirtiedAnimation(this)),null!=h&&(this.currentTime=h)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?"idle":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?"pending":this._paused?"paused":this._isFinished?"finished":"running"},_rewind:function(){if(this._playbackRate>=0)this._currentTime=0;else{if(!(this._totalDuration<1/0))throw new DOMException("Unable to rewind negative playback rate animation with infinite duration","InvalidStateError");this._currentTime=this._totalDuration}},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._rewind(),this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),L.applyDirtiedAnimation(this)},pause:function(){this._isFinished||this._paused||this._idle?this._idle&&(this._rewind(),this._idle=!1):this._currentTimePending=!0,this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1,L.applyDirtiedAnimation(this))},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._paused=!1,this._finishedFlag=!0,this._currentTime=0,this._startTime=null,this._effect._update(null),L.applyDirtiedAnimation(this))},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(f,h){"function"==typeof h&&"finish"==f&&this._finishHandlers.push(h)},removeEventListener:function(f,h){if("finish"==f){var E=this._finishHandlers.indexOf(h);E>=0&&this._finishHandlers.splice(E,1)}},_fireEvents:function(f){if(this._isFinished){if(!this._finishedFlag){var h=new N(this,this._currentTime,f),E=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);setTimeout(function(){E.forEach(function(p){p.call(h.target,h)})},0),this._finishedFlag=!0}}else this._finishedFlag=!1},_tick:function(f,h){this._idle||this._paused||(null==this._startTime?h&&(this.startTime=f-this._currentTime/this.playbackRate):this._isFinished||this._tickCurrentTime((f-this._startTime)*this.playbackRate)),h&&(this._currentTimePending=!1,this._fireEvents(f))},get _needsTick(){return this.playState in{pending:1,running:1}||!this._finishedFlag},_targetAnimations:function(){var f=this._effect._target;return f._activeAnimations||(f._activeAnimations=[]),f._activeAnimations},_markTarget:function(){var f=this._targetAnimations();-1===f.indexOf(this)&&f.push(this)},_unmarkTarget:function(){var f=this._targetAnimations(),h=f.indexOf(this);-1!==h&&f.splice(h,1)}}}(Ie,ye),function(r,L,b){function N(_){var a=e;e=[],_1e-4?(he=.5/Math.sqrt(Ze),we=[(R[2][1]-R[1][2])*he,(R[0][2]-R[2][0])*he,(R[1][0]-R[0][1])*he,.25/he]):R[0][0]>R[1][1]&&R[0][0]>R[2][2]?we=[.25*(he=2*Math.sqrt(1+R[0][0]-R[1][1]-R[2][2])),(R[0][1]+R[1][0])/he,(R[0][2]+R[2][0])/he,(R[2][1]-R[1][2])/he]:R[1][1]>R[2][2]?(he=2*Math.sqrt(1+R[1][1]-R[0][0]-R[2][2]),we=[(R[0][1]+R[1][0])/he,.25*he,(R[1][2]+R[2][1])/he,(R[0][2]-R[2][0])/he]):(he=2*Math.sqrt(1+R[2][2]-R[0][0]-R[1][1]),we=[(R[0][2]+R[2][0])/he,(R[1][2]+R[2][1])/he,.25*he,(R[1][0]-R[0][1])/he]),[j,V,le,we,G]}}();r.dot=b,r.makeMatrixDecomposition=function p(e){return[m(E(e))]},r.transformListToMatrix=E}(ye),function(r){function L(c,n){var i=c.exec(n);if(i)return[i=c.ignoreCase?i[0].toLowerCase():i[0],n.substr(i.length)]}function b(c,n){var i=c(n=n.replace(/^\s*/,""));if(i)return[i[0],i[1].replace(/^\s*/,"")]}function e(c,n,i,u,y){for(var S=[],_=[],a=[],d=function h(c,n){for(var i=c,u=n;i&&u;)i>u?i%=u:u%=i;return c*n/(i+u)}(u.length,y.length),x=0;x=1?f:"visible"}]},["visibility"])}(ye),function(r,L){function b(E){E=E.trim(),h.fillStyle="#000",h.fillStyle=E;var p=h.fillStyle;if(h.fillStyle="#fff",h.fillStyle=E,p==h.fillStyle){h.fillRect(0,0,1,1);var m=h.getImageData(0,0,1,1).data;h.clearRect(0,0,1,1);var e=m[3]/255;return[m[0]*e,m[1]*e,m[2]*e,e]}}function N(E,p){return[E,p,function(m){if(m[3])for(var t=0;t<3;t++)m[t]=Math.round(Math.max(0,Math.min(255,m[t]/m[3])));return m[3]=r.numberToString(r.clamp(0,1,m[3])),"rgba("+m.join(",")+")"}]}var f=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");f.width=f.height=1;var h=f.getContext("2d");r.addPropertiesHandler(b,N,["background-color","border-bottom-color","border-left-color","border-right-color","border-top-color","color","fill","flood-color","lighting-color","outline-color","stop-color","stroke","text-decoration-color"]),r.consumeColor=r.consumeParenthesised.bind(null,b),r.mergeColors=N}(ye),function(r,L){function b(S){function _(){var j=$.exec(S);G=j?j[0]:void 0}function d(){if("("!==G)return function a(){var j=Number(G);return _(),j}();_();var j=M();return")"!==G?NaN:(_(),j)}function x(){for(var j=d();"*"===G||"/"===G;){var R=G;_();var V=d();"*"===R?j*=V:j/=V}return j}function M(){for(var j=x();"+"===G||"-"===G;){var R=G;_();var V=x();"+"===R?j+=V:j-=V}return j}var G,$=/([\+\-\w\.]+|[\(\)\*\/])/g;return _(),M()}function N(S,_){if("0"==(_=_.trim().toLowerCase())&&"px".search(S)>=0)return{px:0};if(/^[^(]*$|^calc/.test(_)){_=_.replace(/calc\(/g,"(");var a={};_=_.replace(S,function(R){return a[R]=null,"U"+R});for(var d="U("+S.source+")",x=_.replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g,"N").replace(new RegExp("N"+d,"g"),"D").replace(/\s[+-]\s/g,"O").replace(/\s/g,""),M=[/N\*(D)/g,/(N|D)[*\/]N/g,/(N|D)O\1/g,/\((N|D)\)/g],G=0;G1?"calc("+G+")":G}]}var E="px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc",p=N.bind(null,new RegExp(E,"g")),m=N.bind(null,new RegExp(E+"|%","g")),e=N.bind(null,/deg|rad|grad|turn/g);r.parseLength=p,r.parseLengthOrPercent=m,r.consumeLengthOrPercent=r.consumeParenthesised.bind(null,m),r.parseAngle=e,r.mergeDimensions=h;var t=r.consumeParenthesised.bind(null,p),c=r.consumeRepeated.bind(void 0,t,/^/),n=r.consumeRepeated.bind(void 0,c,/^,/);r.consumeSizePairList=n;var u=r.mergeNestedRepeated.bind(void 0,f," "),y=r.mergeNestedRepeated.bind(void 0,u,",");r.mergeNonNegativeSizePair=u,r.addPropertiesHandler(function(S){var _=n(S);if(_&&""==_[1])return _[0]},y,["background-size"]),r.addPropertiesHandler(m,f,["border-bottom-width","border-image-width","border-left-width","border-right-width","border-top-width","flex-basis","font-size","height","line-height","max-height","max-width","outline-width","width"]),r.addPropertiesHandler(m,h,["border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","bottom","left","letter-spacing","margin-bottom","margin-left","margin-right","margin-top","min-height","min-width","outline-offset","padding-bottom","padding-left","padding-right","padding-top","perspective","right","shape-margin","stroke-dashoffset","text-indent","top","vertical-align","word-spacing"])}(ye),function(r,L){function b(p){return r.consumeLengthOrPercent(p)||r.consumeToken(/^auto/,p)}function N(p){var m=r.consumeList([r.ignore(r.consumeToken.bind(null,/^rect/)),r.ignore(r.consumeToken.bind(null,/^\(/)),r.consumeRepeated.bind(null,b,/^,/),r.ignore(r.consumeToken.bind(null,/^\)/))],p);if(m&&4==m[0].length)return m[0]}var E=r.mergeWrappedNestedRepeated.bind(null,function h(p){return"rect("+p+")"},function f(p,m){return"auto"==p||"auto"==m?[!0,!1,function(e){var t=e?p:m;if("auto"==t)return"auto";var c=r.mergeDimensions(t,t);return c[2](c[0])}]:r.mergeDimensions(p,m)},", ");r.parseBox=N,r.mergeBoxes=E,r.addPropertiesHandler(N,E,["clip"])}(ye),function(r,L){function b(u){return function(y){var S=0;return u.map(function(_){return _===t?y[S++]:_})}}function N(u){return u}function f(u){if("none"==(u=u.toLowerCase().trim()))return[];for(var y,S=/\s*(\w+)\(([^)]*)\)/g,_=[],a=0;y=S.exec(u);){if(y.index!=a)return;a=y.index+y[0].length;var d=y[1],x=i[d];if(!x)return;var M=y[2].split(","),G=x[0];if(G.length900||h%100!=0))return h},function N(f,h){return[f,h,b]},["font-weight"])}(ye),function(r){function L(e){var t={};for(var c in e)t[c]=-e[c];return t}function b(e){return r.consumeToken(/^(left|center|right|top|bottom)\b/i,e)||r.consumeLengthOrPercent(e)}function N(e,t){var c=r.consumeRepeated(b,/^/,t);if(c&&""==c[1]){var n=c[0];if(n[0]=n[0]||"center",n[1]=n[1]||"center",3==e&&(n[2]=n[2]||{px:0}),n.length==e){if(/top|bottom/.test(n[0])||/left|right/.test(n[1])){var i=n[0];n[0]=n[1],n[1]=i}if(/left|right|center|Object/.test(n[0])&&/top|bottom|center|Object/.test(n[1]))return n.map(function(u){return"object"==typeof u?u:E[u]})}}}function f(e){var t=r.consumeRepeated(b,/^/,e);if(t){for(var c=t[0],n=[{"%":50},{"%":50}],i=0,u=!1,y=0;y=0&&this._cancelHandlers.splice(e,1)}else E.call(this,p,m)},N}}}(),function(se){var Oe=document.documentElement,r=null,L=!1;try{var N="0"==getComputedStyle(Oe).getPropertyValue("opacity")?"1":"0";(r=Oe.animate({opacity:[N,N]},{duration:1})).currentTime=0,L=getComputedStyle(Oe).getPropertyValue("opacity")==N}catch{}finally{r&&r.cancel()}if(!L){var f=window.Element.prototype.animate;window.Element.prototype.animate=function(h,E){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&h[Symbol.iterator]&&(h=Array.from(h)),Array.isArray(h)||null===h||(h=se.convertToArrayForm(h)),f.call(this,h,E)}}}(Ie)}},Ie=>{Ie(Ie.s=432)}]); \ No newline at end of file diff --git a/docs/prerendered-routes.json b/docs/prerendered-routes.json new file mode 100644 index 0000000..3226541 --- /dev/null +++ b/docs/prerendered-routes.json @@ -0,0 +1,3 @@ +{ + "routes": {} +} \ No newline at end of file diff --git a/docs/runtime.70a8e1dd74829026.js b/docs/runtime.70a8e1dd74829026.js deleted file mode 100644 index 6128330..0000000 --- a/docs/runtime.70a8e1dd74829026.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,_={},p={};function n(e){var a=p[e];if(void 0!==a)return a.exports;var r=p[e]={exports:{}};return _[e](r,r.exports,n),r.exports}n.m=_,e=[],n.O=(a,r,u,l)=>{if(!r){var c=1/0;for(f=0;f=l)&&Object.keys(n.O).every(h=>n.O[h](r[t]))?r.splice(t--,1):(o=!1,l0&&e[f-1][2]>l;f--)e[f]=e[f-1];e[f]=[r,u,l]},n.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return n.d(a,{a}),a},n.d=(e,a)=>{for(var r in a)n.o(a,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},n.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),(()=>{var e={688:0};n.O.j=u=>0===e[u];var a=(u,l)=>{var t,s,[f,c,o]=l,v=0;if(f.some(d=>0!==e[d])){for(t in c)n.o(c,t)&&(n.m[t]=c[t]);if(o)var b=o(n)}for(u&&u(l);v\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",o=c.console&&(c.console.warn||c.console.log);return o&&o.call(c.console,i,s),t.apply(this,arguments)}}function f(t,e,n){var i,r=e.prototype;(i=t.prototype=Object.create(r)).constructor=t,i._super=r,n&&S(i,n)}function ut(t,e){return function(){return t.apply(e,arguments)}}function ht(t,e){return typeof t==pe?t.apply(e&&e[0]||l,e):t}function _t(t,e){return t===l?e:t}function j(t,e,n){A(Z(e),function(i){t.addEventListener(i,n,!1)})}function G(t,e,n){A(Z(e),function(i){t.removeEventListener(i,n,!1)})}function Ct(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function x(t,e){return t.indexOf(e)>-1}function Z(t){return t.trim().split(/\s+/g)}function N(t,e,n){if(t.indexOf&&!n)return t.indexOf(e);for(var i=0;iT[e]}):i.sort()),i}function b(t,e){for(var n,i,r=e[0].toUpperCase()+e.slice(1),s=0;s1&&!n.firstMultiple?n.firstMultiple=Dt(e):1===r&&(n.firstMultiple=!1);var s=n.firstInput,o=n.firstMultiple,u=o?o.center:s.center,T=e.center=xt(i);e.timeStamp=Tt(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=ct(u,T),e.distance=$(u,T),function te(t,e){var n=e.center,i=t.offsetDelta||{},r=t.prevDelta||{},s=t.prevInput||{};e.eventType!==a&&s.eventType!==h||(r=t.prevDelta={x:s.deltaX||0,y:s.deltaY||0},i=t.offsetDelta={x:n.x,y:n.y}),e.deltaX=r.x+(n.x-i.x),e.deltaY=r.y+(n.y-i.y)}(n,e),e.offsetDirection=Ot(e.deltaX,e.deltaY);var v=wt(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=v.x,e.overallVelocityY=v.y,e.overallVelocity=w(v.x)>w(v.y)?v.x:v.y,e.scale=o?function ie(t,e){return $(e[0],e[1],it)/$(t[0],t[1],it)}(o.pointers,i):1,e.rotation=o?function ne(t,e){return ct(e[1],e[0],it)+ct(t[1],t[0],it)}(o.pointers,i):0,e.maxPointers=n.prevInput?e.pointers.length>n.prevInput.maxPointers?e.pointers.length:n.prevInput.maxPointers:e.pointers.length,function ee(t,e){var n,i,r,s,o=t.lastInterval||e,u=e.timeStamp-o.timeStamp;if(e.eventType!=p&&(u>Ee||o.velocity===l)){var T=e.deltaX-o.deltaX,v=e.deltaY-o.deltaY,I=wt(u,T,v);i=I.x,r=I.y,n=w(I.x)>w(I.y)?I.x:I.y,s=Ot(T,v),t.lastInterval=e}else n=o.velocity,i=o.velocityX,r=o.velocityY,s=o.direction;e.velocity=n,e.velocityX=i,e.velocityY=r,e.direction=s}(n,e);var I=t.element;Ct(e.srcEvent.target,I)&&(I=e.srcEvent.target),e.target=I}(t,n),t.emit("hammer.input",n),t.recognize(n),t.session.prevInput=n}function Dt(t){for(var e=[],n=0;nr;)n+=t[r].clientX,i+=t[r].clientY,r++;return{x:X(n/e),y:X(i/e)}}function wt(t,e,n){return{x:e/t||0,y:n/t||0}}function Ot(t,e){return t===e?nt:w(t)>=w(e)?0>t?q:W:0>e?k:H}function $(t,e,n){n||(n=kt);var i=e[n[0]]-t[n[0]],r=e[n[1]]-t[n[1]];return Math.sqrt(i*i+r*r)}function ct(t,e,n){return n||(n=kt),180*Math.atan2(e[n[1]]-t[n[1]],e[n[0]]-t[n[0]])/Math.PI}function J(){this.evEl=Ae,this.evWin=_e,this.pressed=!1,d.apply(this,arguments)}function at(){this.evEl=Ht,this.evWin=Lt,d.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Rt(){this.evTarget=De,this.evWin=xe,this.started=!1,d.apply(this,arguments)}function re(t,e){var n=B(t.touches),i=B(t.changedTouches);return e&(h|p)&&(n=St(n.concat(i),"identifier",!0)),[n,i]}function K(){this.evTarget=Oe,this.targetIds={},d.apply(this,arguments)}function se(t,e){var n=B(t.touches),i=this.targetIds;if(e&(a|O)&&1===n.length)return i[n[0].identifier]=!0,[n,n];var r,s,o=B(t.changedTouches),u=[],T=this.target;if(s=n.filter(function(v){return Ct(v.target,T)}),e===a)for(r=0;r-1&&i.splice(s,1)},Re)}}function ue(t){for(var e=t.srcEvent.clientX,n=t.srcEvent.clientY,i=0;i=s&&Ut>=o)return!0}return!1}function pt(t,e){this.manager=t,this.set(e)}function _(t){this.options=S({},this.defaults,t||{}),this.id=function $t(){return ve++}(),this.manager=null,this.options.enable=_t(this.options.enable,!0),this.state=st,this.simultaneous={},this.requireFail=[]}function zt(t){return t&V?"cancel":t&D?"end":t&Y?"move":t&m?"start":""}function Nt(t){return t==H?"down":t==k?"up":t==q?"left":t==W?"right":""}function Q(t,e){var n=e.manager;return n?n.get(t):t}function g(){_.apply(this,arguments)}function tt(){g.apply(this,arguments),this.pX=null,this.pY=null}function ft(){g.apply(this,arguments)}function vt(){_.apply(this,arguments),this._timer=null,this._input=null}function dt(){g.apply(this,arguments)}function mt(){g.apply(this,arguments)}function et(){_.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function C(t,e){return(e=e||{}).recognizers=_t(e.recognizers,C.defaults.preset),new gt(t,e)}function gt(t,e){this.options=S({},C.defaults,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=function Jt(t){return new(t.options.inputClass||(me?at:ge?K:qt?lt:J))(t,Kt)}(this),this.touchAction=new pt(this,this.options.touchAction),Xt(this,!0),A(this.options.recognizers,function(n){var i=this.add(new n[0](n[1]));n[2]&&i.recognizeWith(n[2]),n[3]&&i.requireFailure(n[3])},this)}function Xt(t,e){var i,n=t.element;n.style&&(A(t.options.cssProps,function(r,s){i=b(n.style,s),e?(t.oldCssProps[i]=n.style[i],n.style[i]=r):n.style[i]=t.oldCssProps[i]||""}),e||(t.oldCssProps={}))}var S,Yt=["","webkit","Moz","MS","ms","o"],le=It.createElement("div"),pe="function",X=Math.round,w=Math.abs,Tt=Date.now;S="function"!=typeof Object.assign?function(t){if(t===l||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;nu&&(e.push(t),u=e.length-1):r&(h|p)&&(n=!0),0>u||(e[u]=t,this.callback(this.manager,r,{pointers:e,changedPointers:[t],pointerType:s,srcEvent:t}),n&&e.splice(u,1))}});var Pe={touchstart:a,touchmove:O,touchend:h,touchcancel:p},De="touchstart",xe="touchstart touchmove touchend touchcancel";f(Rt,d,{handler:function(t){var e=Pe[t.type];if(e===a&&(this.started=!0),this.started){var n=re.call(this,t,e);e&(h|p)&&n[0].length-n[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:n[0],changedPointers:n[1],pointerType:F,srcEvent:t})}}});var we={touchstart:a,touchmove:O,touchend:h,touchcancel:p},Oe="touchstart touchmove touchend touchcancel";f(K,d,{handler:function(t){var e=we[t.type],n=se.call(this,t,e);n&&this.callback(this.manager,e,{pointers:n[0],changedPointers:n[1],pointerType:F,srcEvent:t})}});var Re=2500,Ut=25;f(lt,d,{handler:function(t,e,n){var r=n.pointerType==yt;if(!(r&&n.sourceCapabilities&&n.sourceCapabilities.firesTouchEvents)){if(n.pointerType==F)oe.call(this,e,n);else if(r&&ue.call(this,n))return;this.callback(t,e,n)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Vt=b(le.style,"touchAction"),jt=Vt!==l,Gt="compute",Et="manipulation",M="none",L="pan-x",U="pan-y",rt=function ce(){if(!jt)return!1;var t={},e=c.CSS&&c.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(n){t[n]=!e||c.CSS.supports("touch-action",n)}),t}();pt.prototype={set:function(t){t==Gt&&(t=this.compute()),jt&&this.manager.element.style&&rt[t]&&(this.manager.element.style[Vt]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return A(this.manager.recognizers,function(e){ht(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),function he(t){if(x(t,M))return M;var e=x(t,L),n=x(t,U);return e&&n?M:e||n?e?L:U:x(t,Et)?Et:"auto"}(t.join(" "))},preventDefaults:function(t){var e=t.srcEvent,n=t.offsetDirection;if(!this.manager.session.prevented){var i=this.actions,r=x(i,M)&&!rt[M],s=x(i,U)&&!rt[U],o=x(i,L)&&!rt[L];if(r&&1===t.pointers.length&&t.distance<2&&t.deltaTime<250)return;return o&&s?void 0:r||s&&n&y||o&&n&R?this.preventSrc(e):void 0}e.preventDefault()},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var st=1,m=2,Y=4,D=8,P=D,V=16,E=32;_.prototype={defaults:{},set:function(t){return S(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(z(t,"recognizeWith",this))return this;var e=this.simultaneous;return e[(t=Q(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return z(t,"dropRecognizeWith",this)||(t=Q(t,this),delete this.simultaneous[t.id]),this},requireFailure:function(t){if(z(t,"requireFailure",this))return this;var e=this.requireFail;return-1===N(e,t=Q(t,this))&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(z(t,"dropRequireFailure",this))return this;t=Q(t,this);var e=N(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(r){n.manager.emit(r,t)}var n=this,i=this.state;D>i&&e(n.options.event+zt(i)),e(n.options.event),t.additionalEvent&&e(t.additionalEvent),i>=D&&e(n.options.event+zt(i))},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=E)},canEmit:function(){for(var t=0;ts?q:W,n=s!=this.pX,i=Math.abs(t.deltaX)):(r=0===o?nt:0>o?k:H,n=o!=this.pY,i=Math.abs(t.deltaY))),t.direction=r,n&&i>e.threshold&&r&e.direction},attrTest:function(t){return g.prototype.attrTest.call(this,t)&&(this.state&m||!(this.state&m)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=Nt(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),f(ft,g,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[M]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&m)},emit:function(t){1!==t.scale&&(t.additionalEvent=this.options.event+(t.scale<1?"in":"out")),this._super.emit.call(this,t)}}),f(vt,_,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return["auto"]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distancee.time;if(this._input=t,!i||!n||t.eventType&(h|p)&&!r)this.reset();else if(t.eventType&a)this.reset(),this._timer=ot(function(){this.state=P,this.tryEmit()},e.time,this);else if(t.eventType&h)return P;return E},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===P&&(t&&t.eventType&h?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=Tt(),this.manager.emit(this.options.event,this._input)))}}),f(dt,g,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[M]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&m)}}),f(mt,g,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:y|R,pointers:1},getTouchAction:function(){return tt.prototype.getTouchAction.call(this)},attrTest:function(t){var e,n=this.options.direction;return n&(y|R)?e=t.overallVelocity:n&y?e=t.overallVelocityX:n&R&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&n&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&w(e)>this.options.velocity&&t.eventType&h},emit:function(t){var e=Nt(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),f(et,_,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[Et]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distance | "; initial-value: 1; inherits: true;}@property --ig-size-medium{syntax: " | "; initial-value: 2; inherits: true;}@property --ig-size-large{syntax: " | "; initial-value: 3; inherits: true;}@property --ig-spacing{syntax: " | "; initial-value: 1; inherits: true;}:root{--ig-spacing-inline-small: var(--ig-spacing-inline, var(--ig-spacing-small));--ig-spacing-inline-medium: var(--ig-spacing-inline, var(--ig-spacing-medium));--ig-spacing-inline-large: var(--ig-spacing-inline, var(--ig-spacing-large));--ig-spacing-block-small: var(--ig-spacing-block, var(--ig-spacing-small));--ig-spacing-block-medium: var(--ig-spacing-block, var(--ig-spacing-medium));--ig-spacing-block-large: var(--ig-spacing-block, var(--ig-spacing-large))}@property --_transition-delay{syntax: "
- -
- - - - - - - - - - Project Issues - - - - - - -
-
- -
- - - -
- - - - - - {{ item }} - - - - -
- - - - - -
-
-
-
- Task Comments - - - -
-
-
-
- Acceptance criteria - Includes API & Docs - Includes unit tests - All checks passed -
-
-
+
+ +
+ + + + + + + + + + Project Issues + + + + + + +
+
+ +
+ + + +
+ + + + + @for (item of editModes; track item; let i = $index) { + + {{ item }} + + } + + + +
+ + + + + +
+
+
+
+ Task Comments + + + +
+
+
+
+ Acceptance criteria + Includes API & Docs + Includes unit tests + All checks passed +
+
+
+
+
+ + + +
+ {{ groupRow.value }} + @for (task of tasks() | filterTasks:groupRow.value; track task) { +
+ +
+ } +
+
+ + + @for (c of columns; track c) { + + + @if (c.field === 'labels') { + + {{ value | statusLabel }} + + } + @if (c.field === 'labels') { + + + + @for (s of statuses; track s) { + {{ s.value }} + } + + + } + + @if (c.field === 'assignee.login') { + +
+ + + {{ getValue(cell.row.data.assignee) }} + +
+
+ } + @if (c.field === 'assignee.login') { + + + + @for (m of teamMembers(); track m) { + +
+ + + {{ m.login }} +
+
+ } +
+
+ } + + @if (c.field === 'deadline'; as cell) { + + {{ cell.row.data | deadline:cell }} + + } + + @if (c.field === 'progress') { + + + + } + + @if (c.field === 'priority') { + + {{ cell | priorityLabel }} + + } + @if (c.field === 'priority') { + + + + @for (p of priority; track p) { + {{ p.value }} + } + + + } + + @if (c.field === 'createdAt'; as summaryResults) { + +
+ {{ summaryResults[0].label }}{{ summaryResults[0].summaryResult }} + {{ summaryResults[1].label }}{{ summaryResults[1].summaryResult | date: 'mediumDate' }} +
+
+ } + @if (c.field === 'labels'; as summaryResults) { + +
+ {{ summaryResults[0].label }}{{ summaryResults[0].summaryResult }} + {{ summaryResults[1].label }}{{ summaryResults[1].summaryResult }} + {{ summaryResults[2].label }}{{ summaryResults[2].summaryResult }} +
+
+ } + + @if (c.field === 'deadline') { + + {{ value | placeholder }} + + } + + @if (c.field === 'estimation') { + + @if (!value) { + + {{ value | placeholder }} + + } + @if (value) { + {{ value | placeholder }} + } + + } + + @if (c.field === 'hours_spent') { + + @if (!value) { + + {{ value | placeholder }} + + } + @if (value) { + {{ value | placeholder }} + } + + } + + @if (c.field === 'progress') { + + @if (!value) { + + {{ value | placeholder }} + + } + @if (value) { + {{ value }} + } + + } +
+ } + + +
+
+ + + + unfold_more_double + + + + keyboard_double_arrow_up + + + + keyboard_double_arrow_down + + + + + + +
+ + + +
+ + + + + + + + @for (m of teamMembers(); track m) { + +
+ + + {{ m.login }} + +
+
+ } +
+ + + + + + + + + @for (p of priority; track p) { + {{ p.value }} + } + + + + + + + + + + + + + + today + + +
+
+ + + + +
+ + + + + + + + @for (m of teamMembers(); track m) { + +
+ + + {{ m.login }} + +
+
+ } +
+ + + + + + + + + @for (p of priority; track p) { + {{ p.value }} + } + + + + + + + + + + + + + + today + + +
+ +
+ + + +
+ + + + + + {{ typeFormatter(val) }} + + + + + {{ stateFormatter(val) }} + + + +
+
+ + + +
+
+ + + + +
+ + + + @for (c of columns; track c) { + + + @if (c.field === 'labels') { + + {{ value | statusLabel }} - - - -
- {{ groupRow.value }} -
- -
-
+ } + @if (c.field === 'labels') { + + + + @for (s of statuses; track s) { + {{ s.value }} + } + - - - - - - - {{ value | statusLabel }} - - - - {{ s.value }} - - - - - -
- - - {{ getValue(cell.row.data.assignee) }} - -
-
- - - - -
- - - {{ m.login }} - -
-
-
-
- - - - {{ cell.row.data | deadline:cell }} - - - - - - - - - - {{ cell | priorityLabel }} - - - - {{ p.value }} - - - - - -
- {{ summaryResults[0].label }}{{ summaryResults[0].summaryResult }} - {{ summaryResults[1].label }}{{ summaryResults[1].summaryResult | date: 'mediumDate' }} -
-
- - -
- {{ summaryResults[0].label }}{{ summaryResults[0].summaryResult }} - {{ summaryResults[1].label }}{{ summaryResults[1].summaryResult }} - {{ summaryResults[2].label }}{{ summaryResults[2].summaryResult }} -
-
- - - - {{ value | placeholder }} - - - - - - {{ value | placeholder }} - - - {{ value | placeholder }} - - - - - - - {{ value | placeholder }} - - - {{ value | placeholder }} - - - - - - - {{ value | placeholder }} - - - {{ value }} - - -
- - -
-
- - - - unfold_more_double - - - - keyboard_double_arrow_up - - - - keyboard_double_arrow_down - - - - - - -
- - - -
- - - - - - - + } + + @if (c.field === 'assignee') { + +
+ + + {{ value.login }} + +
+
+ } + @if (c.field === 'assignee') { + + + + @for (m of teamMembers(); track m) { +
- {{ m.login }} + {{ m.login }}
-
- - - - - - - - {{ p.value }} - - - - - - - - - - - - - - - - - - - - today - - - - -
-
- - - - -
- - - - - - - -
- - - {{ m.login }} - -
-
-
- - - - - - - - {{ p.value }} - - - - - - - - - - - - - - - - - - - - today - - - - -
- -
- - - -
- - - - - - {{ typeFormatter(val) }} - - - - - {{ stateFormatter(val) }} - - - -
-
- - - -
-
- - - - -
- - - - - - - - {{ value | statusLabel }} - - - - {{ s.value }} - - - - - -
- - - {{ value.login }} - -
-
- - - - -
- - - {{ m.login }} - -
-
-
-
- - - - {{ cell.row.data | deadline:cell }} - - - - - {{ calcProgress(cell.row.data) / 100 | percent }} - - - - - {{ cell | priorityLabel }} - - - - {{ p.value }} - - -
-
-
-
-
+ } + + + } + + @if (c.field === 'deadline'; as cell) { + + {{ cell.row.data | deadline:cell }} + + } + + @if (c.field === 'progress') { + + {{ calcProgress(cell.row.data) / 100 | percent }} + + } + + @if (c.field === 'priority') { + + {{ cell | priorityLabel }} + + } + @if (c.field === 'priority') { + + + + @for (p of priority; track p) { + {{ p.value }} + } + + + } + + } + +
+ +
diff --git a/src/app/taskplanner/taskplanner.component.scss b/src/app/taskplanner/taskplanner.component.scss index 2b7a57e..5285dd1 100644 --- a/src/app/taskplanner/taskplanner.component.scss +++ b/src/app/taskplanner/taskplanner.component.scss @@ -1,4 +1,4 @@ -@import "../tp-theme/vars"; +@use "../tp-theme/vars" as *; ::ng-deep { .tp-app { height: 100%; @@ -173,7 +173,7 @@ align-items: center; gap: 4px; justify-content: space-between; - color: hsla(var(--igx-gray-900)); + color: hsla(var(--ig-gray-900)); span { user-select: all; @@ -187,7 +187,7 @@ min-width: 70px; justify-self: flex-start; text-align: left; - color: hsla(var(--ig-secondary-600)); + color: var(--ig-secondary-600); user-select: none; } } @@ -195,7 +195,7 @@ > * { padding: 8px 0; line-height: 18px; - border-bottom: 1px dashed hsla(var(--igx-gray-400)); + border-bottom: 1px dashed hsla(var(--ig-gray-400)); &:last-child { border-bottom: none; diff --git a/src/app/taskplanner/taskplanner.component.ts b/src/app/taskplanner/taskplanner.component.ts index 9965bda..523a972 100644 --- a/src/app/taskplanner/taskplanner.component.ts +++ b/src/app/taskplanner/taskplanner.component.ts @@ -1,37 +1,33 @@ -import { Component, OnInit, ViewChild, HostBinding } from '@angular/core'; -import { ControlContainer, NgForm, FormsModule } from '@angular/forms'; -import { - DefaultSortingStrategy, - IGridEditEventArgs, - IgxDialogComponent, - IgxDropDownComponent, - IgxGridComponent, - IgxToastComponent, - ISelectionEventArgs, - Transaction, - OverlaySettings, - IgxOverlayOutletDirective, - IDropDroppedEventArgs, - DateRangeType, - FilteringStrategy, - IgxColumnComponent, - IFilteringExpressionsTree, - IFilteringExpression, - CellType, - SortingDirection, - ISortingOptions, - IgxIconButtonDirective, - IgxSummaryOperand, - IgxSummaryResult -} from 'igniteui-angular'; +import { AfterViewInit, ChangeDetectionStrategy, Component, OnInit, signal, viewChild, inject } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { ColumnType, IgxTheme, IFilteringStrategy, DateRangeType, DefaultSortingStrategy, FilteringStrategy, IFilteringExpression, IFilteringExpressionsTree, ISortingOptions, IgxOverlayOutletDirective, IgxOverlayOutletDirective as IgxOverlayOutletDirective_1, IgxSummaryOperand, IgxSummaryResult, OverlaySettings, SortingDirection, Transaction } from '@infragistics/igniteui-angular/core'; +import { CellType, IGridEditEventArgs } from '@infragistics/igniteui-angular/grids/core'; +import { IgxDialogComponent } from '@infragistics/igniteui-angular/dialog'; +import { ISelectionEventArgs } from '@infragistics/igniteui-angular/drop-down'; +import { IgxGridComponent } from '@infragistics/igniteui-angular/grids/grid'; +import { IgxToastComponent } from '@infragistics/igniteui-angular/toast'; +import { IgxIconButtonDirective } from '@infragistics/igniteui-angular/directives'; import { TasksDataService } from '../services/tasks.service'; import { MEMBERS, GITHUB_TASKS } from '../services/tasksData'; -import { IgxLegendComponent } from 'igniteui-angular-charts'; import { BacklogComponent, IListItemAction } from '../backlog/backlog.component'; -import { ITask, ITeamMember } from '../interfaces'; +import { ILabel, ITask, ITaskColumn, ITeamMember } from '../interfaces'; import { StatusLabelPipe, PriorityLabelPipe, MilestonePipe, PlaceholderPipe, DeadlinePipe, FilterTasksPipe } from '../pipes/taskplanner.pipes'; -import { DatePipe, NgFor, NgIf, PercentPipe } from '@angular/common'; -import { IgxGridComponent as IgxGridComponent_1, IgxDropDirective, IgxPaginatorComponent, IgxGridToolbarComponent, IgxGridToolbarTitleComponent, IgxGridToolbarActionsComponent, IgxGridToolbarHidingComponent, IgxGridToolbarPinningComponent, IgxGridToolbarExporterComponent, IgxButtonDirective, IgxIconComponent, IgxToggleActionDirective, IgxDropDownItemNavigationDirective, IgxDropDownComponent as IgxDropDownComponent_1, IgxDropDownItemComponent, IgxGridDetailTemplateDirective, IgxInputGroupComponent, IgxInputDirective, IgxCheckboxComponent, IgxGroupByRowTemplateDirective, IgxBadgeComponent, IgxColumnComponent as IgxColumnComponent_1, IgxColumnRequiredValidatorDirective, IgxColumnMinLengthValidatorDirective, IgxCellTemplateDirective, IgxCellEditorTemplateDirective, IgxSelectComponent, IgxSelectItemComponent, IgxAvatarComponent, IgxLinearProgressBarComponent, IgxSummaryTemplateDirective, IgxToastComponent as IgxToastComponent_1, IgxOverlayOutletDirective as IgxOverlayOutletDirective_1, IgxDialogComponent as IgxDialogComponent_1, IgxLabelDirective, IgxMaskDirective, IgxDatePickerComponent, IgxPrefixDirective } from '@infragistics/igniteui-angular'; +import { DatePipe, PercentPipe } from '@angular/common'; +import { IgxGridComponent as IgxGridComponent_1 } from '@infragistics/igniteui-angular/grids/grid'; +import { IgxButtonDirective, IgxDropDirective, IgxMaskDirective, IgxToggleActionDirective } from '@infragistics/igniteui-angular/directives'; +import { IgxPaginatorComponent } from '@infragistics/igniteui-angular/paginator'; +import { IgxCellEditorTemplateDirective, IgxCellTemplateDirective, IgxColumnComponent as IgxColumnComponent_1, IgxColumnMinLengthValidatorDirective, IgxColumnRequiredValidatorDirective, IgxGridDetailTemplateDirective, IgxGridToolbarActionsComponent, IgxGridToolbarComponent, IgxGridToolbarExporterComponent, IgxGridToolbarHidingComponent, IgxGridToolbarPinningComponent, IgxGridToolbarTitleComponent, IgxGroupByRowTemplateDirective, IgxSummaryTemplateDirective } from '@infragistics/igniteui-angular/grids/core'; +import { IgxIconComponent } from '@infragistics/igniteui-angular/icon'; +import { IgxDropDownComponent as IgxDropDownComponent_1, IgxDropDownItemComponent, IgxDropDownItemNavigationDirective } from '@infragistics/igniteui-angular/drop-down'; +import { IgxInputDirective, IgxInputGroupComponent, IgxLabelDirective, IgxPrefixDirective } from '@infragistics/igniteui-angular/input-group'; +import { IgxCheckboxComponent } from '@infragistics/igniteui-angular/checkbox'; +import { IgxBadgeComponent } from '@infragistics/igniteui-angular/badge'; +import { IgxSelectComponent, IgxSelectItemComponent } from '@infragistics/igniteui-angular/select'; +import { IgxAvatarComponent } from '@infragistics/igniteui-angular/avatar'; +import { IgxLinearProgressBarComponent } from '@infragistics/igniteui-angular/progressbar'; +import { IgxToastComponent as IgxToastComponent_1 } from '@infragistics/igniteui-angular/toast'; +import { IgxDialogComponent as IgxDialogComponent_1 } from '@infragistics/igniteui-angular/dialog'; +import { IgxDatePickerComponent } from '@infragistics/igniteui-angular/date-picker'; import { HeaderComponent } from '../header/header.component'; export enum editMode { @@ -40,102 +36,101 @@ export enum editMode { none = 2 } -// tslint:disable:max-line-length -// tslint:disable:member-ordering @Component({ - providers: [TasksDataService, DatePipe, { provide: ControlContainer, useExisting: NgForm }], + providers: [TasksDataService, DatePipe], selector: 'app-taskplanner', templateUrl: './taskplanner.component.html', styleUrls: ['./taskplanner.component.scss'], - standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + host: { 'class': 'tp-app' }, imports: [ - HeaderComponent, - BacklogComponent, - IgxGridComponent_1, - IgxDropDirective, - IgxPaginatorComponent, - IgxGridToolbarComponent, - IgxGridToolbarTitleComponent, - IgxGridToolbarActionsComponent, - IgxGridToolbarHidingComponent, - IgxGridToolbarPinningComponent, - IgxGridToolbarExporterComponent, - IgxButtonDirective, - IgxIconComponent, - IgxToggleActionDirective, - IgxDropDownItemNavigationDirective, - IgxDropDownComponent_1, - NgFor, - IgxDropDownItemComponent, - IgxGridDetailTemplateDirective, - IgxInputGroupComponent, - FormsModule, - IgxInputDirective, - IgxCheckboxComponent, - IgxGroupByRowTemplateDirective, - IgxBadgeComponent, - IgxColumnComponent_1, - IgxColumnRequiredValidatorDirective, - IgxColumnMinLengthValidatorDirective, - NgIf, - IgxCellTemplateDirective, - IgxCellEditorTemplateDirective, - IgxSelectComponent, - IgxSelectItemComponent, - IgxAvatarComponent, - IgxLinearProgressBarComponent, - IgxSummaryTemplateDirective, - IgxToastComponent_1, - IgxOverlayOutletDirective_1, - IgxDialogComponent_1, - IgxLabelDirective, - IgxMaskDirective, - IgxDatePickerComponent, - IgxPrefixDirective, - PercentPipe, - DatePipe, - StatusLabelPipe, - PriorityLabelPipe, - PlaceholderPipe, - DeadlinePipe, - FilterTasksPipe, - IgxIconButtonDirective - ], + HeaderComponent, + BacklogComponent, + IgxGridComponent_1, + IgxDropDirective, + IgxPaginatorComponent, + IgxGridToolbarComponent, + IgxGridToolbarTitleComponent, + IgxGridToolbarActionsComponent, + IgxGridToolbarHidingComponent, + IgxGridToolbarPinningComponent, + IgxGridToolbarExporterComponent, + IgxButtonDirective, + IgxIconComponent, + IgxToggleActionDirective, + IgxDropDownItemNavigationDirective, + IgxDropDownComponent_1, + IgxDropDownItemComponent, + IgxGridDetailTemplateDirective, + IgxInputGroupComponent, + FormsModule, + IgxInputDirective, + IgxCheckboxComponent, + IgxGroupByRowTemplateDirective, + IgxBadgeComponent, + IgxColumnComponent_1, + IgxColumnRequiredValidatorDirective, + IgxColumnMinLengthValidatorDirective, + IgxCellTemplateDirective, + IgxCellEditorTemplateDirective, + IgxSelectComponent, + IgxSelectItemComponent, + IgxAvatarComponent, + IgxLinearProgressBarComponent, + IgxSummaryTemplateDirective, + IgxToastComponent_1, + IgxOverlayOutletDirective_1, + IgxDialogComponent_1, + IgxLabelDirective, + IgxMaskDirective, + IgxDatePickerComponent, + IgxPrefixDirective, + PercentPipe, + DatePipe, + StatusLabelPipe, + PriorityLabelPipe, + PlaceholderPipe, + DeadlinePipe, + FilterTasksPipe, + IgxIconButtonDirective +] }) -export class TaskPlannerComponent implements OnInit { - @HostBinding('class.tp-app') - - @ViewChild('tasksGrid', { read: IgxGridComponent, static: true }) public grid: IgxGridComponent; - @ViewChild('editModeDropdown', { read: IgxDropDownComponent, static: true }) public editModeDropdown: IgxDropDownComponent; - @ViewChild('legend', { static: true }) public legend: IgxLegendComponent; - @ViewChild(IgxToastComponent, { read: IgxToastComponent, static: true }) public toast: IgxToastComponent; - @ViewChild('addTaskDialog', { static: true }) public addTaskDialog: IgxDialogComponent; - @ViewChild('editTaskDialog', { static: true }) public editTaskDialog: IgxDialogComponent; - @ViewChild('transactionsDialog', { static: true }) public transactionsDialog: IgxDialogComponent; - @ViewChild('transactionsGrid', { static: true }) public transactionsGrid: IgxGridComponent; - @ViewChild('batchEditingGrid', { static: true }) public batchEditingGrid: IgxGridComponent; - @ViewChild('batchEditDialog', { static: true }) public batchEditDialog: IgxDialogComponent; - - @ViewChild(IgxOverlayOutletDirective, { static: true }) public outlet: IgxOverlayOutletDirective; - @ViewChild(BacklogComponent, { read: BacklogComponent, static: true }) public backlog: BacklogComponent; - - public darkTheme = true; - public tasks: ITask[]; - public unassignedTasks: ITask[]; - public teamMembers: ITeamMember[]; - public editMode = 0; +export class TaskPlannerComponent implements OnInit, AfterViewInit { + private datePipe = inject(DatePipe); + + // `editModeDropdown` and `legend` were declared but never read in TypeScript + // (the template drives the dropdown through its own #editModeDropdown ref), + // so they are deleted rather than converted. + public readonly grid = viewChild.required('tasksGrid', { read: IgxGridComponent }); + public readonly toast = viewChild.required(IgxToastComponent, { read: IgxToastComponent }); + public readonly addTaskDialog = viewChild.required('addTaskDialog'); + public readonly editTaskDialog = viewChild.required('editTaskDialog'); + public readonly transactionsDialog = viewChild.required('transactionsDialog'); + public readonly transactionsGrid = viewChild.required('transactionsGrid'); + public readonly batchEditingGrid = viewChild.required('batchEditingGrid'); + public readonly batchEditDialog = viewChild.required('batchEditDialog'); + + public readonly outlet = viewChild.required(IgxOverlayOutletDirective); + public readonly backlog = viewChild.required(BacklogComponent, { read: BacklogComponent }); + + public readonly darkTheme = signal(true); + public readonly tasks = signal([]); + public readonly unassignedTasks = signal([]); + public readonly teamMembers = signal([]); + public readonly editMode = signal(0); public editModes = ['Cell Editing', 'Row Editing', 'No Editing']; public addTaskForm = {} as ITask; public editTaskForm = {} as ITask; - public transactionsData: Transaction[] = []; - public batchEditingData: ITask[]; - public inputType = 'material'; + public readonly transactionsData = signal([]); + public readonly batchEditingData = signal([]); + /** IgxTheme, not IgxInputGroupType - see the [theme] bindings in the template. */ + public readonly inputTheme = signal('material'); public selectOptions = [5, 15, 20, 50]; public disabledDates = [{ dateRange: [new Date()], type: DateRangeType.Before }]; - public gridIsLoading = true; + public readonly gridIsLoading = signal(true); public statuses = [ { @@ -178,36 +173,36 @@ export class TaskPlannerComponent implements OnInit { private monthFormatter = new Intl.DateTimeFormat('en', { month: 'long' }); /** IgxGrid cellClasses / cellStyles. */ - public isResolved = (rowData: ITask, columnKey: string): boolean => { - return this.getStatusLabel(rowData.labels) === 'resolved'; + public isResolved = (rowData: ITask): boolean => { + return this.getStatusLabel(rowData.labels ?? []) === 'resolved'; } - public isNew = (rowData: ITask, columnKey: string): boolean => { - return this.getStatusLabel(rowData.labels) === 'in-review'; + public isNew = (rowData: ITask): boolean => { + return this.getStatusLabel(rowData.labels ?? []) === 'in-review'; } - public isInDevelopment = (rowData: ITask, columnKey: string): boolean => { - return this.getStatusLabel(rowData.labels) === 'in-development'; + public isInDevelopment = (rowData: ITask): boolean => { + return this.getStatusLabel(rowData.labels ?? []) === 'in-development'; } - public notABug = (rowData: ITask, columnKey: string): boolean => { - return this.getStatusLabel(rowData.labels) === 'not-a-bug'; + public notABug = (rowData: ITask): boolean => { + return this.getStatusLabel(rowData.labels ?? []) === 'not-a-bug'; } public isCritical = (rowData: ITask, columnKey: string): boolean => { - return rowData[columnKey] === 'critical'; + return rowData[columnKey as keyof ITask] === 'critical'; } public isLow = (rowData: ITask, columnKey: string): boolean => { - return rowData[columnKey] === 'low'; + return rowData[columnKey as keyof ITask] === 'low'; } public isHigh = (rowData: ITask, columnKey: string): boolean => { - return rowData[columnKey] === 'high'; + return rowData[columnKey as keyof ITask] === 'high'; } - public isDelayed = (rowData: ITask, columnKey: string): boolean => { - return rowData.hours_spent > rowData.estimation; + public isDelayed = (rowData: ITask): boolean => { + return (rowData.hours_spent ?? 0) > (rowData.estimation ?? 0); } public statusClasses = { @@ -233,7 +228,7 @@ export class TaskPlannerComponent implements OnInit { public statusSort = StatusSortingStrategy.instance(); public defaultSort = DefaultSortingStrategy.instance(); - public columns: any[] = [ + public columns: ITaskColumn[] = [ { field: 'pullRequest', header: 'Type', width: '120px', dataType: 'string', filterable: true, hidden: true, sortStrategy: this.defaultSort }, { field: 'number', header: 'ID', width: '120px', dataType: 'number', formatter: this.formatID, sortable: false, sortStrategy: this.defaultSort }, { field: 'title', header: 'Issue', width: '380px', dataType: 'string', filterable: true, editable: true, sortStrategy: this.defaultSort, required: true, minlength: 4 }, @@ -247,13 +242,9 @@ export class TaskPlannerComponent implements OnInit { { field: 'progress', header: 'Progress', width: '95px', dataType: 'number', sortable: true, sortStrategy: this.progressSort }, { field: 'priority', header: 'Priority', width: '125px', dataType: 'string', sortable: true, filterable: true, editable: true, cellClasses: this.priorityClasses, sortStrategy: this.defaultSort } ]; - private _filteringStrategy = new FilteringStrategy(); - - constructor(private datePipe: DatePipe) { } + private _filteringStrategy: IFilteringStrategy = new FilteringStrategy(); public ngOnInit() { - this.overlaySettings.outlet = this.outlet; - this.dialogOverlaySettings.outlet = this.outlet; // this.dataService.getAllIssues().subscribe({ // next: (data: ITask[]) => { // // cache data @@ -275,14 +266,28 @@ export class TaskPlannerComponent implements OnInit { return rec; }) this.populateDataComponents(data); - this.teamMembers = MEMBERS; + this.teamMembers.set(MEMBERS); + + } + + /** + * Signal view queries resolve with this component's own view, i.e. after + * ngOnInit. Everything that reads grid() or outlet() lives here. + */ + public ngAfterViewInit(): void { + this.overlaySettings.outlet = this.outlet(); + this.dialogOverlaySettings.outlet = this.outlet(); + + const grid = this.grid(); - this.transactionsData = this.grid.transactions.getAggregatedChanges(true); - this.grid.transactions.onStateUpdate.subscribe(() => { - this.transactionsData = this.grid.transactions.getAggregatedChanges(true); + this.transactionsData.set(grid.transactions.getAggregatedChanges(true)); + grid.transactions.onStateUpdate?.subscribe(() => { + // Writing a signal notifies Angular; the previous plain-field + // assignment relied on a change-detection pass it never scheduled. + this.transactionsData.set(grid.transactions.getAggregatedChanges(true)); }); - this.grid.groupingExpressions = [{ + grid.groupingExpressions = [{ dir: SortingDirection.Desc, fieldName: 'milestone', ignoreCase: false, @@ -292,7 +297,7 @@ export class TaskPlannerComponent implements OnInit { const today = new Date(); const ms = Math.floor(today.getMonth() / 3) + 1; const currentMilestone = `Q${ms} ${today.getFullYear()}`; - this.grid.groupingExpansionState = [{ + grid.groupingExpansionState = [{ expanded: true, hierarchy: [{ fieldName: 'milestone', value: currentMilestone }] }]; @@ -307,11 +312,11 @@ export class TaskPlannerComponent implements OnInit { return '#' + value; } - public stateFormatter(value) { + public stateFormatter(value: unknown): string { return JSON.stringify(value); } - public typeFormatter(value) { + public typeFormatter(value: string): string { return value.toUpperCase(); } @@ -322,144 +327,142 @@ export class TaskPlannerComponent implements OnInit { return value ? value + 'h' : ''; } - public formatPieLabel(args): string { + public formatPieLabel(args: { item: { Value: string; Label: string } }): string { return args.item.Value + ' ' + args.item.Label; } - public formatDateLabel(item): string { + public formatDateLabel(item: { date: Date }): string { return item.date.toLocaleDateString(undefined, { month: 'short' }); } /** CRUD actions */ public undo() { - this.grid.transactions.undo(); + this.grid().transactions.undo(); } public redo() { - this.grid.transactions.redo(); + this.grid().transactions.redo(); } public commit() { - this.grid.transactions.commit(this.tasks); - this.transactionsDialog.close(); + this.grid().transactions.commit(this.tasks()); + this.transactionsDialog().close(); } public commitBatchEdits() { - const editedData = this.batchEditingGrid.data; - // transfer edited data to this.grid - for (let i = 0; i < editedData.length; i++) { - const id = editedData[i].id; - this.grid.updateRow(editedData[i], id); + const editedData = (this.batchEditingGrid().data ?? []) as ITask[]; + // transfer edited data to this.grid() + for (const edited of editedData) { + this.grid().updateRow(edited, edited.id); } - this.batchEditDialog.close(); + this.batchEditDialog().close(); } public cancel() { - this.transactionsDialog.close(); + this.transactionsDialog().close(); } public discard() { - this.grid.transactions.clear(); - this.transactionsDialog.close(); + this.grid().transactions.clear(); + this.transactionsDialog().close(); } public onEditingModeChanged(event: ISelectionEventArgs) { - this.editMode = event.newSelection.index; + this.editMode.set(event.newSelection.index); } public isEditModeSelected(i: number): boolean { - return i === this.editMode; + return i === this.editMode(); } - public editStart(event: IGridEditEventArgs) { - const field = this.grid.columnList.find(c => c.index === event.cellID.columnID).field; + public editStart(event: IGridEditEventArgs): void { + const field = this.grid().columnList.find(c => c.index === event.cellID?.columnID)?.field; if (field === 'started_on' && !!event.oldValue) { event.cancel = true; } } - public onCellEdit(event: IGridEditEventArgs) { - const field = this.grid.columnList.find(c => c.index === event.cellID.columnID).field; + public onCellEdit(event: IGridEditEventArgs): void { + const cellID = event.cellID; + if (!cellID) { + return; + } + const field = this.grid().columnList.find(c => c.index === cellID.columnID)?.field; switch (field) { case 'started_on': { - const deadlineDate = this.grid.getRowByIndex(event.cellID.rowIndex).data.deadline; + const deadlineDate = this.grid().getRowByIndex(cellID.rowIndex).data.deadline; if (event.newValue > deadlineDate) { event.cancel = true; - this.toast.open('Started date cannot exceed Deadline date !'); + this.toast().open('Started date cannot exceed Deadline date !'); } break; } case 'deadline': { - const startedDate = this.grid.getRowByIndex(event.cellID.rowIndex).data.createdAt; + const startedDate = this.grid().getRowByIndex(cellID.rowIndex).data.createdAt; if (event.newValue < startedDate) { event.cancel = true; - this.toast.open('Deadline date cannot be earlier than started date !'); + this.toast().open('Deadline date cannot be earlier than started date !'); } if (event.newValue < startedDate) { event.cancel = true; - this.toast.open('Deadline date cannot be earlier than started date !'); + this.toast().open('Deadline date cannot be earlier than started date !'); } break; } case 'status': { if (event.newValue === 'Completed') { - this.grid.getRowByKey(event.rowID).data.isActive = false; + this.grid().getRowByKey(event.rowID).data.isActive = false; } } } } - public addTask(event) { - if (this.addTaskForm.title && this.addTaskForm.title !== undefined - && this.addTaskForm.deadline) { - this.addTaskForm.id = this.grid.data[this.grid.data.length - 1].id + 1; - this.addTaskForm.number = this.grid.data[this.grid.data.length - 1].id + 1; + public addTask(): void { + if (this.addTaskForm.title && this.addTaskForm.deadline) { + const rows = (this.grid().data ?? []) as ITask[]; + const nextId = (rows.length ? (rows[rows.length - 1].id ?? 0) : 0) + 1; + this.addTaskForm.id = nextId; + this.addTaskForm.number = nextId; this.addTaskForm.status = 'New'; - this.addTaskForm.estimation = null; - this.addTaskForm.hours_spent = null; + this.addTaskForm.estimation = undefined; + this.addTaskForm.hours_spent = undefined; this.addTaskForm.createdAt = new Date().toDateString(); - this.grid.addRow(this.addTaskForm); - this.grid.transactions.commit(this.grid.data); + this.grid().addRow(this.addTaskForm); + this.grid().transactions.commit(rows); this.addTaskForm = {} as ITask; - this.addTaskDialog.close(); + this.addTaskDialog().close(); } else { this.emptyFieldMessage(); } } - public editTask(event) { + public editTask(): void { if (this.editTaskForm.title !== '' && this.editTaskForm.deadline) { - this.editTaskDialog.close(); + this.editTaskDialog().close(); } else { this.emptyFieldMessage(); } } - public deleteTask(rowID) { - this.grid.deleteRow(rowID); + public deleteTask(rowID: unknown): void { + this.grid().deleteRow(rowID); } - public setAvatarUrl(assignee) { - let avatar; + public setAvatarUrl(assignee: ITeamMember | string | null | undefined): string { if (!assignee) { - return; + return ''; } - if (assignee.login) { - avatar = MEMBERS.find(m => m.login === assignee.login).avatarUrl; - } else { - avatar = MEMBERS.find(m => m.login === assignee).avatarUrl; - } - - return avatar; + const login = typeof assignee === 'string' ? assignee : assignee.login; + return MEMBERS.find(m => m.login === login)?.avatarUrl ?? ''; } - public getValue(value) { + public getValue(value: ITeamMember | string | null | undefined): string | undefined { let assigneeName; if (!value) { return; } - if (value.login) { + if (typeof value !== 'string') { assigneeName = value.login; } else { assigneeName = value; @@ -469,19 +472,19 @@ export class TaskPlannerComponent implements OnInit { /** Open Dialogs */ public openCommitDialog() { - this.transactionsDialog.open(this.dialogOverlaySettings); - this.transactionsGrid.reflow(); + this.transactionsDialog().open(this.dialogOverlaySettings); + this.transactionsGrid().reflow(); } public openAddTaskDialog() { - this.addTaskDialog.open(this.dialogOverlaySettings); + this.addTaskDialog().open(this.dialogOverlaySettings); } public openBatchEditDialog() { - const selectedRows = this.grid.selectedRows; - const selectedData = this.tasks.filter(rec => selectedRows.indexOf(rec.id) > -1); - this.batchEditingData = selectedData; - this.batchEditDialog.open(this.dialogOverlaySettings); + const selectedRows = this.grid().selectedRows; + const selectedData = this.tasks().filter(rec => selectedRows.indexOf(rec.id) > -1); + this.batchEditingData.set(selectedData); + this.batchEditDialog().open(this.dialogOverlaySettings); } /** Methods and event handlers */ @@ -491,18 +494,18 @@ export class TaskPlannerComponent implements OnInit { */ public populateDataComponents(data: ITask[]) { const issues = data.filter(task => task.pullRequest === null).map(rec => this.parseDate(rec)); - this.tasks = issues.filter(t => t.labels.filter(l => l.name.includes('status')).length > 0); - this.gridIsLoading = false; - this.unassignedTasks = issues.filter(t => t.labels.filter(l => l.name.includes('status')).length === 0); + this.tasks.set(issues.filter(t => (t.labels ?? []).filter(l => l.name.includes('status')).length > 0)); + this.gridIsLoading.set(false); + this.unassignedTasks.set(issues.filter(t => (t.labels ?? []).filter(l => l.name.includes('status')).length === 0)); } public emptyFieldMessage() { - this.toast.open('Please fill out all required fields (Issue and Deadline).'); + this.toast().open('Please fill out all required fields (Issue and Deadline).'); } public toggleTheme() { - this.darkTheme = !this.darkTheme; - this.inputType = this.darkTheme ? 'material' : 'fluent'; + this.darkTheme.set(!this.darkTheme()); + this.inputTheme.set(this.darkTheme() ? 'material' : 'fluent'); } public onBacklogItemAction(event: IListItemAction) { @@ -511,7 +514,7 @@ export class TaskPlannerComponent implements OnInit { this.editTaskForm = event.issue; this.editTaskForm.deadline = null; this.editTaskForm.milestone = null; - this.editTaskDialog.open(this.dialogOverlaySettings); + this.editTaskDialog().open(this.dialogOverlaySettings); break; } case 'drag': @@ -523,25 +526,25 @@ export class TaskPlannerComponent implements OnInit { } } - public onDropContainerEnterLeave(event: IDropDroppedEventArgs) { + public onDropContainerEnterLeave(): void { this.toggleGroupRowHighlight(); } public toggleGroupRowHighlight() { - const groupRows = this.grid.tbody.nativeElement.querySelectorAll('igx-grid-groupby-row'); + const groupRows = this.grid().tbody.nativeElement.querySelectorAll('igx-grid-groupby-row'); (groupRows as HTMLElement[]).forEach(element => { - const labelElement = element.querySelector('.igx-group-label').firstElementChild as HTMLElement; - if (labelElement.innerText === this.editTaskForm.milestone) { + const labelElement = element.querySelector('.igx-group-label')?.firstElementChild as HTMLElement | null; + if (labelElement && labelElement.innerText === this.editTaskForm.milestone) { element.classList.toggle('tp-app__groupby-row-highlight'); } }); } public toggleGridBodyHighlight() { - this.grid.tbody.nativeElement.classList.toggle('tp-app__drop-area-entered'); + this.grid().tbody.nativeElement.classList.toggle('tp-app__drop-area-entered'); } - public onItemDropped(ev) { + public onItemDropped(): void { if (Object.keys(this.editTaskForm).length) { this.toggleGridBodyHighlight(); this.addBacklogItem(this.editTaskForm); @@ -549,8 +552,8 @@ export class TaskPlannerComponent implements OnInit { } public addBacklogItem(item: ITask) { - this.grid.addRow(item); - this.backlog.deleteItem(item); + this.grid().addRow(item); + this.backlog().deleteItem(item); } public deadlineChanged(event: Date, form: ITask) { @@ -564,14 +567,11 @@ export class TaskPlannerComponent implements OnInit { const pipeArgs = cell.column.pipeArgs; const deadline = new Date(cell.row.data); deadline.setMonth(deadline.getMonth() + 3); - const val = this.datePipe.transform(deadline, pipeArgs.format, pipeArgs.timezone, cell.grid.locale); - console.log(val); - return val; + return this.datePipe.transform(deadline, pipeArgs.format, pipeArgs.timezone, cell.grid.locale) ?? ''; } - public getStatusLabel(labels: any[]) { - const label = new StatusLabelPipe().transform(labels); - return label; + public getStatusLabel(labels: ILabel[] | string | undefined): string { + return new StatusLabelPipe().transform(labels); } public getAssignee(user: ITeamMember) { @@ -580,53 +580,55 @@ export class TaskPlannerComponent implements OnInit { /** Getters */ public get undoEnabled(): boolean { - return this.grid.transactions.canUndo; + return this.grid().transactions.canUndo; } public get redoEnabled(): boolean { - return this.grid.transactions.canRedo; + return this.grid().transactions.canRedo; } public get hasTransactions(): boolean { - return this.grid.transactions.getAggregatedChanges(false).length > 0; + return this.grid().transactions.getAggregatedChanges(false).length > 0; } public get hasSelection(): boolean { - return this.grid.selectedRows.length > 0; + return this.grid().selectedRows.length > 0; } public get isRowEditingEnabled() { - return this.editMode === editMode.rowEditing; + return this.editMode() === editMode.rowEditing; } public get isEditingEnabled() { - return this.editMode !== editMode.none; + return this.editMode() !== editMode.none; } public get selectedEditMode() { - return this.editModes[this.editMode]; + return this.editModes[this.editMode()]; } /** Unique column values strategy for Excel Style Filtering */ - public columnValuesStrategy = (column: IgxColumnComponent, + public columnValuesStrategy = (column: ColumnType, columnExprTree: IFilteringExpressionsTree, + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- mirrors IgxGrid uniqueColumnValuesStrategy done: (uniqueValues: any[]) => void) => { // Get specific column data. this.getColumnData(column, columnExprTree, uniqueValues => done(uniqueValues)); } - public getColumnData(column: IgxColumnComponent, + public getColumnData(column: ColumnType, columnExprTree: IFilteringExpressionsTree, + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- mirrors IgxGrid uniqueColumnValuesStrategy done: (colVals: any[]) => void) { setTimeout(() => { - let columnValues = []; + let columnValues: unknown[]; if (column.field === 'labels') { columnValues = this.statuses.map(rec => rec.value); done(columnValues); return; } if (column.field === 'assignee.login') { - columnValues = this.teamMembers.map(rec => rec.login); + columnValues = this.teamMembers().map(rec => rec.login); done(columnValues); return; } @@ -635,15 +637,15 @@ export class TaskPlannerComponent implements OnInit { done(columnValues); return; } - const filteredData = this._filteringStrategy.filter(this.tasks, columnExprTree, null, null); - columnValues = filteredData.map(record => record[column.field]); + const filteredData = this._filteringStrategy.filter(this.tasks(), columnExprTree); + columnValues = filteredData.map(record => (record as Record)[column.field]); done(columnValues); }, 1000); } /** Help utils */ - private parseDate(obj) { - obj.createdAt = obj.createdAt ? new Date(obj.createdAt) : null; + private parseDate(obj: ITask): ITask { + obj.createdAt = obj.createdAt ? new Date(obj.createdAt) : undefined; return obj; } @@ -651,7 +653,7 @@ export class TaskPlannerComponent implements OnInit { * Returns workload for corresponding team member. */ // public getAssigneeWorkload(ownerID: number) { - // const workloadData = this.tasks.filter(rec => rec.owner.id === ownerID); + // const workloadData = this.tasks().filter(rec => rec.owner.id === ownerID); // const newTasks = workloadData.filter(rec => rec.status === 'New').length; // const inprogressTasks = workloadData.filter(rec => rec.status === 'In Progress').length; // const doneTasks = workloadData.filter(rec => rec.status === 'Done').length; @@ -666,7 +668,7 @@ export class TaskPlannerComponent implements OnInit { * Returns workload for the corrssponding team. */ // public getTeamWorkload(team: string) { - // const workloadData = this.tasks.filter(rec => rec.owner.team === team); + // const workloadData = this.tasks().filter(rec => rec.owner.team === team); // const newTasks = workloadData.filter(rec => rec.status === 'New').length; // const inprogressTasks = workloadData.filter(rec => rec.status === 'In Progress').length; // const doneTasks = workloadData.filter(rec => rec.status === 'Done').length; @@ -680,14 +682,15 @@ export class TaskPlannerComponent implements OnInit { /** Sorting strategy for year quarters. */ export class MilestoneSortingStrategy extends DefaultSortingStrategy { - protected compareObjects(obj1: ITask, + protected override compareObjects(obj1: ITask, obj2: ITask, key: string, reverse: number, - ignoreCase: boolean, - valueResolver: (obj: any, key: string) => string) { - const objA = obj1[key].split(' '); - const objB = obj2[key].split(' '); + _ignoreCase: boolean, + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- matches DefaultSortingStrategy + _valueResolver: (obj: any, key: string) => string) { + const objA = String(obj1[key as keyof ITask] ?? '').split(' '); + const objB = String(obj2[key as keyof ITask] ?? '').split(' '); const yearA = objA[1]; const yearB = objB[1]; @@ -703,7 +706,7 @@ export class MilestoneSortingStrategy extends DefaultSortingStrategy { /** Sorting strategy for progress column. */ export class ProgressSortingStrategy extends DefaultSortingStrategy { - protected compareObjects(obj1: ITask, + protected override compareObjects(obj1: ITask, obj2: ITask, key: string, reverse: number) { @@ -716,7 +719,7 @@ export class ProgressSortingStrategy extends DefaultSortingStrategy { /** Sorting strategy for Status column. */ export class StatusSortingStrategy extends DefaultSortingStrategy { - protected compareObjects(obj1: ITask, + protected override compareObjects(obj1: ITask, obj2: ITask, key: string, reverse: number) { @@ -730,8 +733,11 @@ export class StatusSortingStrategy extends DefaultSortingStrategy { /** Filtering strategy for Priority and Status columns. */ export class LabelsFilteringStrategy extends FilteringStrategy { - public findMatchByExpression(rec: ITask, expr: IFilteringExpression): boolean { + public override findMatchByExpression(rec: ITask, expr: IFilteringExpression): boolean { const cond = expr.condition; + if (!cond) { + return false; + } let val = this.getFieldValue(rec, expr.fieldName); if (expr.fieldName === 'labels') { val = new StatusLabelPipe().transform(val); @@ -739,7 +745,7 @@ export class LabelsFilteringStrategy extends FilteringStrategy { if (!val && expr.fieldName === 'priority') { val = new PriorityLabelPipe().transform(rec); } - return cond.logic(val, expr.searchVal, expr.ignoreCase); + return !!cond.logic?.(val, expr.searchVal, expr.ignoreCase); } } @@ -749,7 +755,8 @@ export class StatusSummary extends IgxSummaryOperand { super(); } - operate(data?: any[]): IgxSummaryResult[] { + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- matches IgxSummaryOperand.operate + public override operate(data: any[] = []): IgxSummaryResult[] { const result = super.operate(data); const sl = new StatusLabelPipe(); result.push({ @@ -774,5 +781,3 @@ export function calcProgress(task: ITask) { const progress = (hoursSpent / estimation) * 100; return progress; } -// tslint:enable:max-line-length -// tslint:enable:member-ordering diff --git a/src/app/tp-theme/_index.scss b/src/app/tp-theme/_index.scss index 3e6619d..35f2b9c 100644 --- a/src/app/tp-theme/_index.scss +++ b/src/app/tp-theme/_index.scss @@ -1,15 +1,15 @@ -@import "vars"; -@import "tp-toolbar"; -@import "tp-grid"; -@import "tp-paginator"; -@import "tp-button"; -@import "tp-card"; -@import "tp-input-group"; -@import "tp-list"; -@import "tp-tabs"; -@import "tp-badge"; -@import "tp-icon"; -@import "tp-checkbox"; -@import "tp-navbar"; -@import "tp-dialog"; -@import "tp-drop-down"; \ No newline at end of file +@forward "vars"; +@forward "tp-toolbar"; +@forward "tp-grid"; +@forward "tp-paginator"; +@forward "tp-button"; +@forward "tp-card"; +@forward "tp-input-group"; +@forward "tp-list"; +@forward "tp-tabs"; +@forward "tp-badge"; +@forward "tp-icon"; +@forward "tp-checkbox"; +@forward "tp-navbar"; +@forward "tp-dialog"; +@forward "tp-drop-down"; diff --git a/src/app/tp-theme/_tp-badge.scss b/src/app/tp-theme/_tp-badge.scss index 29b22a4..115782a 100644 --- a/src/app/tp-theme/_tp-badge.scss +++ b/src/app/tp-theme/_tp-badge.scss @@ -1,3 +1,6 @@ +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-badge-radius: 11px; $tp-badge-shadow: none; diff --git a/src/app/tp-theme/_tp-button.scss b/src/app/tp-theme/_tp-button.scss index aae5260..b55dfc7 100644 --- a/src/app/tp-theme/_tp-button.scss +++ b/src/app/tp-theme/_tp-button.scss @@ -1,11 +1,43 @@ -$tp-button: button-theme( - $schema: $dark-schema, - $border-radius: 20px, - $foreground: #fff, - $background: transparent, - $hover-foreground: color($tp-palette, 'secondary') +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + +// button-theme() is deprecated: it built all four variants from a single call. +// The variant-specific functions each build one, so the same arguments are +// fanned out to all four and emitted together (see styles.scss). Keys are +// strings - that is what `$map...` keyword-spreading requires. +$tp-button-args: ( + "schema": $dark-schema, + "border-radius": 20px, + "foreground": #fff, + "background": transparent, + "hover-foreground": color($tp-palette, 'secondary') ); -$tp-light-header-button: button-theme( - $background: color($tp-light-palette, 'secondary') +$tp-button-variants: + flat-button-theme($tp-button-args...), + contained-button-theme($tp-button-args...), + outlined-button-theme($tp-button-args...), + fab-button-theme($tp-button-args...); + +$tp-light-header-button-args: ( + "background": color($tp-light-palette, 'secondary') +); + +$tp-light-header-button-variants: + flat-button-theme($tp-light-header-button-args...), + contained-button-theme($tp-light-header-button-args...), + outlined-button-theme($tp-light-header-button-args...), + fab-button-theme($tp-light-header-button-args...); + +$tp-light-header-icon-button: flat-icon-button-theme( + $background: color($tp-light-palette, 'secondary'), + $foreground: contrast-color($tp-light-palette, 'secondary'), + $hover-background: color($tp-light-palette, 'secondary', 600), + $hover-foreground: contrast-color($tp-light-palette, 'secondary', 600), + $focus-background: color($tp-light-palette, 'secondary', 600), + $focus-foreground: contrast-color($tp-light-palette, 'secondary', 600), + $focus-hover-background: color($tp-light-palette, 'secondary', 700), + $focus-hover-foreground: contrast-color($tp-light-palette, 'secondary', 700), + $active-background: color($tp-light-palette, 'secondary', 700), + $active-foreground: contrast-color($tp-light-palette, 'secondary', 700) ); diff --git a/src/app/tp-theme/_tp-card.scss b/src/app/tp-theme/_tp-card.scss index 91d7e67..8d44bfa 100644 --- a/src/app/tp-theme/_tp-card.scss +++ b/src/app/tp-theme/_tp-card.scss @@ -1,3 +1,6 @@ +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-card: card-theme( $schema: $dark-schema, $border-radius: 16px diff --git a/src/app/tp-theme/_tp-checkbox.scss b/src/app/tp-theme/_tp-checkbox.scss index fbca736..35e98be 100644 --- a/src/app/tp-theme/_tp-checkbox.scss +++ b/src/app/tp-theme/_tp-checkbox.scss @@ -1,3 +1,6 @@ +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-checkbox: checkbox-theme( $schema: $dark-schema, $tick-color: #000 diff --git a/src/app/tp-theme/_tp-dialog.scss b/src/app/tp-theme/_tp-dialog.scss index 3589be8..5ab298c 100644 --- a/src/app/tp-theme/_tp-dialog.scss +++ b/src/app/tp-theme/_tp-dialog.scss @@ -1,3 +1,6 @@ +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-dialog: dialog-theme( $schema: $dark-schema, $border-radius: $tp-radius diff --git a/src/app/tp-theme/_tp-drop-down.scss b/src/app/tp-theme/_tp-drop-down.scss index ce231fa..afd0ea5 100644 --- a/src/app/tp-theme/_tp-drop-down.scss +++ b/src/app/tp-theme/_tp-drop-down.scss @@ -1,3 +1,6 @@ +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-drop-down: drop-down-theme( $schema: $dark-schema, $hover-item-background: $row-selected-background--hover, diff --git a/src/app/tp-theme/_tp-grid.scss b/src/app/tp-theme/_tp-grid.scss index 8194c22..331c299 100644 --- a/src/app/tp-theme/_tp-grid.scss +++ b/src/app/tp-theme/_tp-grid.scss @@ -1,3 +1,7 @@ +@use 'sass:color'; +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-grid: grid-theme( $schema: $dark-schema, $header-background: $header-background, @@ -24,21 +28,36 @@ $tp-grid: grid-theme( $cell-edited-value-color: color($tp-palette, 'secondary', 400), $drop-area-background: $row-background, - $drop-area-on-drop-background: lighten($row-background, 10%), + $drop-area-on-drop-background: color.adjust($row-background, $lightness: 10%), $grouparea-background: $tp-grays-gradient, $ghost-header-background: color($tp-palette, 'surface'), $filtering-header-background: color($tp-palette, 'surface'), $filtering-row-background: color($tp-palette, 'surface'), - $body-summaries-background: color($tp-palette, 'surface'), - $root-summaries-background: color($tp-palette, 'surface'), $row-ghost-background: #4A4F64, - $pinned-border-color: transparentize(color($tp-palette, 'secondary'), .95), + $pinned-border-color: color.adjust(color($tp-palette, 'secondary'), $alpha: -.95), $edited-row-indicator: color($tp-palette, 'secondary'), ); +// The secondary Excel-filter overlay can render outside the grid element, so +// it cannot always inherit the grid-scoped foreground token. Theme the overlay +// directly to keep its labels and actions readable on the dark surface. +$tp-dark-excel-filtering: excel-filtering-theme( + $schema: $dark-schema, + $background: color($tp-palette, 'surface'), + $foreground: color($tp-palette, 'gray', 700), + $accent-color: color($tp-palette, 'secondary') +); + +$tp-dark-excel-filtering-progress: progress-circular-theme( + $schema: $dark-schema, + $track-color: color($tp-palette, 'gray', 300), + $fill-color-default: color($tp-palette, 'secondary'), + $text-color: color($tp-palette, 'gray', 700) +); + $tp-light-grid: grid-theme( $grid-shadow: none, $cell-edited-value-color: color($tp-light-palette, 'secondary'), diff --git a/src/app/tp-theme/_tp-icon.scss b/src/app/tp-theme/_tp-icon.scss index 0c0833e..999b744 100644 --- a/src/app/tp-theme/_tp-icon.scss +++ b/src/app/tp-theme/_tp-icon.scss @@ -1,3 +1,6 @@ +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-icon: icon-theme( $schema: $dark-schema, $color: color($tp-palette, 'secondary') diff --git a/src/app/tp-theme/_tp-input-group.scss b/src/app/tp-theme/_tp-input-group.scss index de59c12..b501451 100644 --- a/src/app/tp-theme/_tp-input-group.scss +++ b/src/app/tp-theme/_tp-input-group.scss @@ -1,3 +1,6 @@ +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-input-group: input-group-theme( $schema: $dark-schema, $box-border-radius: 20px, diff --git a/src/app/tp-theme/_tp-list.scss b/src/app/tp-theme/_tp-list.scss index fa6d6d0..5b125b1 100644 --- a/src/app/tp-theme/_tp-list.scss +++ b/src/app/tp-theme/_tp-list.scss @@ -1,3 +1,6 @@ +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-list: list-theme( $schema: $dark-schema, $item-background-hover: $row-background, diff --git a/src/app/tp-theme/_tp-navbar.scss b/src/app/tp-theme/_tp-navbar.scss index ddc3e6c..0108346 100644 --- a/src/app/tp-theme/_tp-navbar.scss +++ b/src/app/tp-theme/_tp-navbar.scss @@ -1,3 +1,6 @@ +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-navbar: navbar-theme( $schema: $dark-schema, $background: color($tp-palette, 'surface') diff --git a/src/app/tp-theme/_tp-paginator.scss b/src/app/tp-theme/_tp-paginator.scss index ca7429a..052dbe5 100644 --- a/src/app/tp-theme/_tp-paginator.scss +++ b/src/app/tp-theme/_tp-paginator.scss @@ -1,5 +1,8 @@ +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-paginator: paginator-theme( $schema: $dark-schema, - $background-color: $tp-grays-gradient, + $background: $tp-grays-gradient, $border-color: $header-background, ); diff --git a/src/app/tp-theme/_tp-tabs.scss b/src/app/tp-theme/_tp-tabs.scss index 8c47b47..a041a42 100644 --- a/src/app/tp-theme/_tp-tabs.scss +++ b/src/app/tp-theme/_tp-tabs.scss @@ -1,6 +1,10 @@ +@use 'sass:color'; +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-tabs: tabs-theme( $schema: $dark-schema, - $item-background: darken(color($tp-palette, 'surface'), 1%), + $item-background: color.adjust(color($tp-palette, 'surface'), $lightness: -1%), $indicator-color: color($tp-palette, 'secondary'), $item-active-color: color($tp-palette, 'secondary'), $item-active-icon-color: color($tp-palette, 'secondary'), diff --git a/src/app/tp-theme/_tp-toolbar.scss b/src/app/tp-theme/_tp-toolbar.scss index 0f31028..813c5bf 100644 --- a/src/app/tp-theme/_tp-toolbar.scss +++ b/src/app/tp-theme/_tp-toolbar.scss @@ -1,5 +1,8 @@ +@use '@infragistics/igniteui-angular/theming' as *; +@use "vars" as *; + $tp-toolbar: grid-toolbar-theme( $schema: $dark-schema, - $background-color: $tp-grays-gradient, + $background: $tp-grays-gradient, $dropdown-background: color($tp-palette, 'surface'), ) diff --git a/src/app/tp-theme/_vars.scss b/src/app/tp-theme/_vars.scss index 0b14d5f..233cfe3 100644 --- a/src/app/tp-theme/_vars.scss +++ b/src/app/tp-theme/_vars.scss @@ -1,6 +1,8 @@ @use '@infragistics/igniteui-angular/theming' as *; @forward '@infragistics/igniteui-angular/theming'; -@import "tp-palettes"; +@use "sass:color"; +@use "tp-palettes" as *; +@forward "tp-palettes"; $backlog-card-header-height: rem(57px); $backlog-tab-header-height: rem(58px); $header-height: rem(57px); @@ -24,7 +26,7 @@ $row-background: #343745; $row-col-background: #2e313c; $btn-icon-background: #262933; $header-background: $row-background; -$scrollbar-track: darken($row-background, 3%); +$scrollbar-track: color.adjust($row-background, $lightness: -3%); $row-selected-background: #423A43; $row-selected-background--hover: #5E4C4F; $scrollbar-thumb: rgba(65, 70, 92, 1); diff --git a/src/main.ts b/src/main.ts index 08226c7..1a51e82 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,16 +1,33 @@ -import { enableProdMode, importProvidersFrom } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { enableProdMode, importProvidersFrom, provideZonelessChangeDetection } from '@angular/core'; import { environment } from './environments/environment'; import { TaskPlannerComponent } from './app/taskplanner/taskplanner.component'; import { FormsModule } from '@angular/forms'; -import { withInterceptorsFromDi, provideHttpClient } from '@angular/common/http'; -import { IgxDialogModule, IgxButtonModule, IgxGridModule, IgxMaskModule, IgxToastModule, IgxAvatarModule, IgxIconModule, IgxFilterModule, IgxNavbarModule, IgxDividerModule, IgxTabsModule, IgxInputGroupModule, IgxButtonGroupModule, IgxSwitchModule, IgxCardModule, IgxListModule, IgxSelectModule, IgxDatePickerModule, IgxDragDropModule, IgxOverlayOutletDirective, IgxCheckboxModule, IgxDropDownModule, IgxToggleModule, IgxBadgeModule, IgxProgressBarModule } from '@infragistics/igniteui-angular'; +import { withInterceptorsFromDi, provideHttpClient, withXhr } from '@angular/common/http'; +import { IgxDialogModule } from '@infragistics/igniteui-angular/dialog'; +import { IgxButtonModule, IgxDividerModule, IgxDragDropModule, IgxFilterModule, IgxMaskModule, IgxToggleModule } from '@infragistics/igniteui-angular/directives'; +import { IgxGridModule } from '@infragistics/igniteui-angular/grids/grid'; +import { IgxToastModule } from '@infragistics/igniteui-angular/toast'; +import { IgxAvatarModule } from '@infragistics/igniteui-angular/avatar'; +import { IgxIconModule } from '@infragistics/igniteui-angular/icon'; +import { IgxNavbarModule } from '@infragistics/igniteui-angular/navbar'; +import { IgxTabsModule } from '@infragistics/igniteui-angular/tabs'; +import { IgxInputGroupModule } from '@infragistics/igniteui-angular/input-group'; +import { IgxButtonGroupModule } from '@infragistics/igniteui-angular/button-group'; +import { IgxSwitchModule } from '@infragistics/igniteui-angular/switch'; +import { IgxCardModule } from '@infragistics/igniteui-angular/card'; +import { IgxListModule } from '@infragistics/igniteui-angular/list'; +import { IgxSelectModule } from '@infragistics/igniteui-angular/select'; +import { IgxDatePickerModule } from '@infragistics/igniteui-angular/date-picker'; +import { IgxOverlayOutletDirective } from '@infragistics/igniteui-angular/core'; +import { IgxCheckboxModule } from '@infragistics/igniteui-angular/checkbox'; +import { IgxDropDownModule } from '@infragistics/igniteui-angular/drop-down'; +import { IgxBadgeModule } from '@infragistics/igniteui-angular/badge'; +import { IgxProgressBarModule } from '@infragistics/igniteui-angular/progressbar'; import { provideAnimations } from '@angular/platform-browser/animations'; import { AppRoutingModule } from './app/app-routing.module'; -import { BrowserModule, HammerModule, bootstrapApplication } from '@angular/platform-browser'; -import { TasksDataService } from './app/services/tasks.service'; +import { BrowserModule, bootstrapApplication } from '@angular/platform-browser'; if (environment.production) { enableProdMode(); @@ -18,10 +35,9 @@ if (environment.production) { bootstrapApplication(TaskPlannerComponent, { providers: [ - importProvidersFrom(BrowserModule, AppRoutingModule, IgxDialogModule, IgxButtonModule, IgxGridModule, IgxMaskModule, IgxToastModule, IgxAvatarModule, IgxIconModule, IgxFilterModule, IgxNavbarModule, IgxDividerModule, IgxTabsModule, IgxToastModule, FormsModule, IgxMaskModule, IgxInputGroupModule, IgxButtonGroupModule, IgxSwitchModule, IgxCardModule, IgxListModule, HammerModule, IgxSelectModule, IgxDatePickerModule, IgxDragDropModule, IgxOverlayOutletDirective, IgxCheckboxModule, IgxDropDownModule, IgxToggleModule, IgxBadgeModule, IgxProgressBarModule), - TasksDataService, + provideZonelessChangeDetection(),importProvidersFrom(BrowserModule, AppRoutingModule, IgxDialogModule, IgxButtonModule, IgxGridModule, IgxMaskModule, IgxToastModule, IgxAvatarModule, IgxIconModule, IgxFilterModule, IgxNavbarModule, IgxDividerModule, IgxTabsModule, IgxToastModule, FormsModule, IgxMaskModule, IgxInputGroupModule, IgxButtonGroupModule, IgxSwitchModule, IgxCardModule, IgxListModule, IgxSelectModule, IgxDatePickerModule, IgxDragDropModule, IgxOverlayOutletDirective, IgxCheckboxModule, IgxDropDownModule, IgxToggleModule, IgxBadgeModule, IgxProgressBarModule), provideAnimations(), - provideHttpClient(withInterceptorsFromDi()), + provideHttpClient(withXhr(), withInterceptorsFromDi()), ] }) .catch(err => console.error(err)); diff --git a/src/polyfills.ts b/src/polyfills.ts deleted file mode 100644 index ccd8c86..0000000 --- a/src/polyfills.ts +++ /dev/null @@ -1,74 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), - * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** IE10 and IE11 requires the following for NgClass support on SVG elements */ -// import 'classlist.js'; // Run `npm install --save classlist.js`. - -/** - * Web Animations `@angular/platform-browser/animations` - * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. - * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). - */ -import 'web-animations-js'; // Run `npm install --save web-animations-js`. - -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags.ts'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ -import 'zone.js'; // Included with Angular CLI. - - - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ - - /** - * Date formatting for igxCalendarComponent. - * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 - */ -// import 'intl'; // Run `npm install --save intl`. -/** - * Need to import at least one locale-data with intl. - */ -// import 'intl/locale-data/jsonp/en'; diff --git a/src/styles.scss b/src/styles.scss index 636f4e6..1c3660c 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -1,11 +1,23 @@ /* You can add global styles to this file, and also import other style files */ // Standard CSS normalize, comment out if not required or using a different module -@use "minireset.css/minireset" as *; -@forward "minireset.css/minireset"; - +@use 'sass:meta'; @use '@infragistics/igniteui-angular/theming' as *; @forward '@infragistics/igniteui-angular/theming'; +@use "app/tp-theme/index" as *; + +// Wrapped in the `ig.reset` layer: since 22.1.0 all Ignite UI styles live in +// @layer ig.*, and unlayered CSS outranks every layer regardless of +// specificity. Unlayered, this reset would win against component styles. +@layer ig.reset { + @include meta.load-css("minireset.css/minireset"); +} +// Specifies large size for all components to match the previous defaults +// This may not be needed for your project. Please consult https://www.infragistics.com/products/ignite-ui-angular/angular/components/general/update-guide for more details. +:root { + --ig-size: var(--ig-size-large); +} + html, body { @@ -15,25 +27,24 @@ body { -@import "app/tp-theme/index"; @include core(); @include typography(); .resolved { - @include badge($badge-resolved); + @include tokens($badge-resolved); } .inreview { - @include badge($badge-inreview); + @include tokens($badge-inreview); } .delayed { - @include badge($badge-delayed); + @include tokens($badge-delayed); } .indevelopment { - @include badge($badge-indevelopment); + @include tokens($badge-indevelopment); } .igx-button--raised { @@ -113,7 +124,16 @@ body { @include css-vars($tp-light-tabs); igx-navbar { - @include css-vars($tp-light-header-button); + @each $variant in $tp-light-header-button-variants { + @include css-vars($variant); + } + @include css-vars($tp-light-header-icon-button); + + .tp-app__theme-toggle { + // The app-wide icon theme is pink; use the palette contrast token on + // the pink toggle background so the glyph stays clearly visible. + --ig-icon-color: var(--ig-secondary-500-contrast); + } } [type="search"] { @@ -121,6 +141,10 @@ body { margin: 0 !important; } + .tp-app__task-search { + --ig-input-group-search-border-radius: 0; + } + background: $light-bg; color: $dark-text; @@ -193,9 +217,15 @@ body { color: #ccc; @include theme($palette: $tp-palette); @include css-vars($tp-grid); + @include css-vars($tp-dark-excel-filtering); + :where(igx-grid-excel-style-filtering, .igx-excel-filter__secondary) { + @include css-vars($tp-dark-excel-filtering-progress); + } @include css-vars($tp-toolbar); @include css-vars($tp-paginator); - @include css-vars($tp-button); + @each $variant in $tp-button-variants { + @include css-vars($variant); + } @include css-vars($tp-card); @include css-vars($tp-input-group); @include css-vars($tp-list); diff --git a/tsconfig-es5.app.json b/tsconfig-es5.app.json deleted file mode 100644 index f1396e3..0000000 --- a/tsconfig-es5.app.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "./tsconfig.app.json", - "compilerOptions": { - "target": "es5" - } -} diff --git a/tsconfig.app.json b/tsconfig.app.json index f758d98..1c300c0 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -5,10 +5,14 @@ "types": [] }, "files": [ - "src/main.ts", - "src/polyfills.ts" + "src/main.ts" ], "include": [ "src/**/*.d.ts" - ] + ], + "angularCompilerOptions": { + "strictTemplates": true, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true + } } diff --git a/tsconfig.json b/tsconfig.json index 45d259b..9b657de 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,27 +1,30 @@ { "compileOnSave": false, "compilerOptions": { - "baseUrl": "./", "outDir": "./dist/out-tsc", "sourceMap": true, + "esModuleInterop": true, "declaration": false, - "downlevelIteration": true, "experimentalDecorators": true, "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "bundler", "importHelpers": true, "target": "ES2022", "typeRoots": [ "node_modules/@types" ], - "lib": [ - "es2018", - "dom" - ], "paths": { - "igniteui-angular": ["./node_modules/@infragistics/igniteui-angular"] + "igniteui-angular": [ + "./node_modules/@infragistics/igniteui-angular" + ] }, - "useDefineForClassFields": false + "useDefineForClassFields": false, + "skipLibCheck": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true }, "angularCompilerOptions": { "fullTemplateTypeCheck": true, diff --git a/tsconfig.spec.json b/tsconfig.spec.json deleted file mode 100644 index 631b00b..0000000 --- a/tsconfig.spec.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/spec", - "types": [ - "jasmine", - "node" - ] - }, - "files": [ - "src/test.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} \ No newline at end of file diff --git a/tslint.json b/tslint.json deleted file mode 100644 index bf12905..0000000 --- a/tslint.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "extends": "tslint:latest", - "rules": { - "deprecation": { - "severity": "warning" - }, - "indent": [true, "spaces"], - "variable-name": [true, "allow-leading-underscore"], - "interface-name": [true, "always-prefix"], - "trailing-comma": [true, {"multiline": "never", "singleline": "never"}], - "no-empty": false, - "no-bitwise": false, - "no-object-literal-type-assertion": false, - "no-string-literal": false, - "no-submodule-imports": [false], - "max-classes-per-file": false, - "prefer-object-spread": false, - "no-console": false, - "prefer-conditional-expression": false, - "prefer-for-of": false, - "arrow-parens": false, - "object-literal-sort-keys": false - } -} From 6db159a44849fa86547fc4599cd6a8db44633f28 Mon Sep 17 00:00:00 2001 From: Viktor Kombov Date: Thu, 27 Aug 2026 12:36:34 +0300 Subject: [PATCH 2/3] chore: remove skills and mcp --- .../igniteui-angular-components/SKILL.md | 62 -- .../references/charts.md | 250 ------ .../references/data-display.md | 273 ------- .../references/directives.md | 162 ---- .../references/feedback.md | 141 ---- .../references/form-controls.md | 309 ------- .../references/layout-manager.md | 322 -------- .../references/layout.md | 209 ----- .../references/mcp-setup.md | 76 -- .../references/setup.md | 165 ---- .../igniteui-angular-figma-to-app/SKILL.md | 772 ------------------ .../references/asset-extraction.md | 393 --------- .../references/design-token-bridge.md | 324 -------- .../references/figma-component-map.md | 305 ------- .../references/mcp-setup.md | 455 ----------- .../references/validation-patterns.md | 326 -------- .../SKILL.md | 241 ------ .../references/component-mapping.md | 144 ---- .../references/gotchas.md | 189 ----- .../skills/igniteui-angular-grids/SKILL.md | 113 --- .../references/data-operations.md | 420 ---------- .../references/editing.md | 482 ----------- .../references/features.md | 221 ----- .../references/grid-migration.md | 479 ----------- .../references/paging-remote.md | 391 --------- .../references/sizing.md | 215 ----- .../references/state.md | 303 ------- .../references/structure.md | 283 ------- .../references/types.md | 486 ----------- .../skills/igniteui-angular-theming/SKILL.md | 383 --------- .../references/common-patterns.md | 45 - .../references/mcp-setup.md | 74 -- .claude/CLAUDE.md | 58 -- .../igniteui-angular-components/SKILL.md | 62 -- .../references/charts.md | 250 ------ .../references/data-display.md | 273 ------- .../references/directives.md | 162 ---- .../references/feedback.md | 141 ---- .../references/form-controls.md | 309 ------- .../references/layout-manager.md | 322 -------- .../references/layout.md | 209 ----- .../references/mcp-setup.md | 76 -- .../references/setup.md | 165 ---- .../igniteui-angular-figma-to-app/SKILL.md | 772 ------------------ .../references/asset-extraction.md | 393 --------- .../references/design-token-bridge.md | 324 -------- .../references/figma-component-map.md | 305 ------- .../references/mcp-setup.md | 455 ----------- .../references/validation-patterns.md | 326 -------- .../SKILL.md | 241 ------ .../references/component-mapping.md | 144 ---- .../references/gotchas.md | 189 ----- .../skills/igniteui-angular-grids/SKILL.md | 113 --- .../references/data-operations.md | 420 ---------- .../references/editing.md | 482 ----------- .../references/features.md | 221 ----- .../references/grid-migration.md | 479 ----------- .../references/paging-remote.md | 391 --------- .../references/sizing.md | 215 ----- .../references/state.md | 303 ------- .../references/structure.md | 283 ------- .../references/types.md | 486 ----------- .../skills/igniteui-angular-theming/SKILL.md | 383 --------- .../references/common-patterns.md | 45 - .../references/mcp-setup.md | 74 -- .mcp.json | 20 - AGENTS.md | 58 -- 67 files changed, 18162 deletions(-) delete mode 100644 .agents/skills/igniteui-angular-components/SKILL.md delete mode 100644 .agents/skills/igniteui-angular-components/references/charts.md delete mode 100644 .agents/skills/igniteui-angular-components/references/data-display.md delete mode 100644 .agents/skills/igniteui-angular-components/references/directives.md delete mode 100644 .agents/skills/igniteui-angular-components/references/feedback.md delete mode 100644 .agents/skills/igniteui-angular-components/references/form-controls.md delete mode 100644 .agents/skills/igniteui-angular-components/references/layout-manager.md delete mode 100644 .agents/skills/igniteui-angular-components/references/layout.md delete mode 100644 .agents/skills/igniteui-angular-components/references/mcp-setup.md delete mode 100644 .agents/skills/igniteui-angular-components/references/setup.md delete mode 100644 .agents/skills/igniteui-angular-figma-to-app/SKILL.md delete mode 100644 .agents/skills/igniteui-angular-figma-to-app/references/asset-extraction.md delete mode 100644 .agents/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md delete mode 100644 .agents/skills/igniteui-angular-figma-to-app/references/figma-component-map.md delete mode 100644 .agents/skills/igniteui-angular-figma-to-app/references/mcp-setup.md delete mode 100644 .agents/skills/igniteui-angular-figma-to-app/references/validation-patterns.md delete mode 100644 .agents/skills/igniteui-angular-generate-from-image-design/SKILL.md delete mode 100644 .agents/skills/igniteui-angular-generate-from-image-design/references/component-mapping.md delete mode 100644 .agents/skills/igniteui-angular-generate-from-image-design/references/gotchas.md delete mode 100644 .agents/skills/igniteui-angular-grids/SKILL.md delete mode 100644 .agents/skills/igniteui-angular-grids/references/data-operations.md delete mode 100644 .agents/skills/igniteui-angular-grids/references/editing.md delete mode 100644 .agents/skills/igniteui-angular-grids/references/features.md delete mode 100644 .agents/skills/igniteui-angular-grids/references/grid-migration.md delete mode 100644 .agents/skills/igniteui-angular-grids/references/paging-remote.md delete mode 100644 .agents/skills/igniteui-angular-grids/references/sizing.md delete mode 100644 .agents/skills/igniteui-angular-grids/references/state.md delete mode 100644 .agents/skills/igniteui-angular-grids/references/structure.md delete mode 100644 .agents/skills/igniteui-angular-grids/references/types.md delete mode 100644 .agents/skills/igniteui-angular-theming/SKILL.md delete mode 100644 .agents/skills/igniteui-angular-theming/references/common-patterns.md delete mode 100644 .agents/skills/igniteui-angular-theming/references/mcp-setup.md delete mode 100644 .claude/CLAUDE.md delete mode 100644 .claude/skills/igniteui-angular-components/SKILL.md delete mode 100644 .claude/skills/igniteui-angular-components/references/charts.md delete mode 100644 .claude/skills/igniteui-angular-components/references/data-display.md delete mode 100644 .claude/skills/igniteui-angular-components/references/directives.md delete mode 100644 .claude/skills/igniteui-angular-components/references/feedback.md delete mode 100644 .claude/skills/igniteui-angular-components/references/form-controls.md delete mode 100644 .claude/skills/igniteui-angular-components/references/layout-manager.md delete mode 100644 .claude/skills/igniteui-angular-components/references/layout.md delete mode 100644 .claude/skills/igniteui-angular-components/references/mcp-setup.md delete mode 100644 .claude/skills/igniteui-angular-components/references/setup.md delete mode 100644 .claude/skills/igniteui-angular-figma-to-app/SKILL.md delete mode 100644 .claude/skills/igniteui-angular-figma-to-app/references/asset-extraction.md delete mode 100644 .claude/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md delete mode 100644 .claude/skills/igniteui-angular-figma-to-app/references/figma-component-map.md delete mode 100644 .claude/skills/igniteui-angular-figma-to-app/references/mcp-setup.md delete mode 100644 .claude/skills/igniteui-angular-figma-to-app/references/validation-patterns.md delete mode 100644 .claude/skills/igniteui-angular-generate-from-image-design/SKILL.md delete mode 100644 .claude/skills/igniteui-angular-generate-from-image-design/references/component-mapping.md delete mode 100644 .claude/skills/igniteui-angular-generate-from-image-design/references/gotchas.md delete mode 100644 .claude/skills/igniteui-angular-grids/SKILL.md delete mode 100644 .claude/skills/igniteui-angular-grids/references/data-operations.md delete mode 100644 .claude/skills/igniteui-angular-grids/references/editing.md delete mode 100644 .claude/skills/igniteui-angular-grids/references/features.md delete mode 100644 .claude/skills/igniteui-angular-grids/references/grid-migration.md delete mode 100644 .claude/skills/igniteui-angular-grids/references/paging-remote.md delete mode 100644 .claude/skills/igniteui-angular-grids/references/sizing.md delete mode 100644 .claude/skills/igniteui-angular-grids/references/state.md delete mode 100644 .claude/skills/igniteui-angular-grids/references/structure.md delete mode 100644 .claude/skills/igniteui-angular-grids/references/types.md delete mode 100644 .claude/skills/igniteui-angular-theming/SKILL.md delete mode 100644 .claude/skills/igniteui-angular-theming/references/common-patterns.md delete mode 100644 .claude/skills/igniteui-angular-theming/references/mcp-setup.md delete mode 100644 .mcp.json delete mode 100644 AGENTS.md diff --git a/.agents/skills/igniteui-angular-components/SKILL.md b/.agents/skills/igniteui-angular-components/SKILL.md deleted file mode 100644 index 7551cdf..0000000 --- a/.agents/skills/igniteui-angular-components/SKILL.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -name: igniteui-angular-components -description: "Covers all non-grid Ignite UI for Angular UI components: application scaffolding and setup, form controls (inputs, combos, selects, date/time pickers, calendar, checkbox, radio, switch, slider), layout containers (tabs, stepper, accordion, splitter, navigation drawer), data-display components (list, tree, card, chips, carousel, paginator, progress indicators, chat), feedback overlays (dialog, snackbar, toast, banner), directives (button, icon button, button group, ripple, tooltip, drag-and-drop), Dock Manager, Layout Manager, Tile Manager, and Charts. Use when users ask about any Ignite UI Angular component that is NOT a data grid — such as forms, dropdowns, pickers, dialogs, navigation, lists, trees, cards, charts, or initial project setup. Do NOT use for data grids, tables, or tabular data — use igniteui-angular-grids instead. Do NOT use for theming or styling — use igniteui-angular-theming instead." -user-invocable: true ---- - -# Ignite UI for Angular — UI Components - -## Prerequisites -- An Angular project on the major version matching the installed `igniteui-angular` package (igniteui-angular majors track Angular majors) -- `@angular/cli` installed -- `igniteui-angular` or `@infragistics/igniteui-angular` added to the project via `ng add igniteui-angular` (or the `@infragistics` variant) or `npm install` — see [Package Variants](#package-variants) below. -- A theme applied to the application (see [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md)). -- `provideAnimations()` in `app.config.ts` — **required before using any overlay or animated component** - -## Ignite UI CLI MCP Server (recommended, not required) - -The `igniteui-cli` MCP server provides `list_components`, `get_doc`, `search_docs`, `search_api`, and `get_api_reference`. Its **full component docs cover a subset of components** (the catalog grows over releases — call `list_components` once to see what exists; e.g. Combo, Simple Combo, Chat, Tooltip, and grid toolbar/export docs). Where a `get_doc` doc exists, prefer it over the reference files below. `search_api`/`get_api_reference` cover API members (inputs, outputs, methods) for all components — use them for member-level lookups. For everything else, the reference files below are the primary guidance. - -If the tools are not available, do not block the task — use the reference files. Suggest that the user run `npx -y igniteui-cli ai-config` from the project root (it configures both the `igniteui-cli` and `igniteui-theming` MCP servers and copies the agent skill files) and reload the editor. MCP servers cannot be started mid-session; the configuration takes effect on the next session. Editor-specific details are in [`references/mcp-setup.md`](./references/mcp-setup.md). - -## Required Workflow - -**This file is a routing hub only. It contains no code examples and no API details.** Component APIs change between releases, so never write component selectors, import paths, input/output names, or directive names from memory — read the relevant reference files first. - -1. **Identify every component or feature involved.** Map the user's request to one or more rows in the Task → Reference File table below. A single request often spans multiple categories (e.g., a form inside a Dialog requires both `form-controls.md` and `feedback.md`). -2. **Read every identified reference file in full**, in a single parallel batch of file reads — even if you believe you already know the answer. -3. **Then produce output**, based only on what you read. If something is not covered by the reference files, look it up with `get_doc`/`search_docs` when the MCP tools are available; otherwise state explicitly that the detail is unverified instead of guessing. - -### Task → Reference File - -| Task | Reference file to read | -|---|---| -| App setup, `app.config.ts` providers, `provideAnimations()`, entry-point imports, convenience directive arrays | [`references/setup.md`](./references/setup.md) | -| Input Group, Combo, Simple Combo, Select, Date Picker, Date Range Picker, Time Picker, Calendar, Checkbox, Radio, Switch, Slider, Autocomplete, reactive/template-driven forms | [`references/form-controls.md`](./references/form-controls.md) | -| Tabs, Bottom Navigation, Stepper, Accordion, Expansion Panel, Splitter, Navigation Drawer | [`references/layout.md`](./references/layout.md) | -| List, Tree, Card, Chips, Avatar, Badge, Icon, Carousel, Paginator, Progress Indicators, Chat | [`references/data-display.md`](./references/data-display.md) | -| Dialog, Snackbar, Toast, Banner | [`references/feedback.md`](./references/feedback.md) | -| Button, Icon Button, Button Group, Ripple, Tooltip, Drag and Drop | [`references/directives.md`](./references/directives.md) | -| Layout Manager (`igxLayout`, `igxFlex` directives), Dock Manager (`igc-dockmanager` web component), Tile Manager (`igc-tile-manager` web component) | [`references/layout-manager.md`](./references/layout-manager.md) | -| Charts (Area, Bar, Column, Stock/Financial, Pie), chart configuration, chart features (animation, tooltips, markers, highlighting, zooming), data binding | [`references/charts.md`](./references/charts.md) | - -> **When in doubt, read more rather than fewer reference files.** The cost of an unnecessary file read is negligible; the cost of hallucinated API usage is a broken application. - ---- - -## Package Variants - -| Package | Install | Who uses it | -|---|---|---| -| `igniteui-angular` | `npm install igniteui-angular` | Open-source / community | -| `@infragistics/igniteui-angular` | Requires private `@infragistics` registry | Licensed / enterprise users | - -Both packages share **identical entry-point paths**. Check `package.json` and use that package name as the prefix for every import. Never import from the root barrel of either package. -Both packages can be added to the project using `@angular/cli` with the following commands: `ng add igniteui-angular` or `ng add @infragistics/igniteui-angular`. - ---- - -## Related Skills - -- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — Data Grids (Flat Grid, Tree Grid, Hierarchical Grid, Pivot Grid, Grid Lite) -- [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.agents/skills/igniteui-angular-components/references/charts.md b/.agents/skills/igniteui-angular-components/references/charts.md deleted file mode 100644 index 2e9bc6e..0000000 --- a/.agents/skills/igniteui-angular-components/references/charts.md +++ /dev/null @@ -1,250 +0,0 @@ -# Angular Charts Reference - -## Contents - -- [Overview](#overview) -- [General Chart Configuration](#general-chart-configuration) -- [Chart Types Reference](#chart-types-reference) -- [Standalone component example](#standalone-component-example) -- [Common errors and fixes](#common-errors-and-fixes) -- [Styling & Theming](#styling--theming) - -## Overview - -Ignite UI for Angular Charts provides 65+ chart types for data visualization. Charts are packaged separately in `igniteui-angular-charts` (or `@infragistics/igniteui-angular-charts` for licensed users). -This reference gives high-level guidance on when to use each chart type, their key features, and common API members. The MCP doc catalog currently has no chart docs — use `search_api` for member-level lookups. - -### Chart Component packages -- `igniteui-angular-charts` — Category Chart, Financial Chart, Data Chart, Pie Chart, and Sparkline components (NPM) -- `@infragistics/igniteui-angular-charts` — Licensed version with same API (ProGet) - -### Main Chart Components - -> **IMPORTANT — Not Standalone Components**: Chart components from `igniteui-angular-charts` are **NOT** Angular standalone components (they predate the standalone API). They must always be imported via their **NgModule**. Standalone Angular components (Angular 14+) can still import NgModules directly in their `imports` array — this is fully supported. - -| Component | NgModule to import | Description | -|---|---|---| -| `IgxCategoryChartComponent` | `IgxCategoryChartModule` | Simplified API for column, line, area, spline, StepLine/StepArea, point, waterfall | -| `IgxFinancialChartComponent` | `IgxFinancialChartModule` | Stock/candlestick charts with OHLC data | -| `IgxDataChartComponent` | `IgxDataChartModule` | Advanced: explicit axes, series, >65 chart types | -| `IgxPieChartComponent` | `IgxPieChartModule` | Part-to-whole pie and donut charts | -| `IgxDataPieChartComponent` | `IgxDataPieChartModule` | Simplified API for pie charts | -| `IgxLegendComponent` | `IgxLegendModule` | Shared legend component | -| `IgxSparklineComponent` | `IgxSparklineModule` | Compact inline chart for grid cells or small layouts | - -### When to use each: -- **Category Chart** → Use for simple area/column/line/spline/waterfall; let framework auto-configure -- **Financial Chart** → Use for stock data with time-series OHLC, indicators, volume -- **Data Chart** → Use for advanced scenarios: multiple axes, custom series combinations, stacked/scatter -- **Pie Chart** → Use for part-to-whole (segments sum to 100%) -- **Sparkline** → Use for compact inline visualization in grid cells, dashboards, or small-space layouts - ---- - -## General Chart Configuration - -### Chart Type Selection -- **Category Chart**: `chartType` property — type: `CategoryChartType` (Auto, Line, Area, Column, Spline, ...) -- **Financial Chart**: `chartType` property — type: `FinancialChartType` (Auto, Bar, Candle, ...) -- **Data Chart**: Configure explicit series (IgxAreaSeriesComponent, IgxBarSeriesComponent, IgxColumnSeriesComponent, etc.) -- **Sparkline**: `displayType` property — type: `SparklineDisplayType` (Line, Area, Column, WinLoss) -- **Pie Chart**: No chartType needed; inherent pie structure - -### Required Properties - -**IgxCategoryChartComponent** (simplest API; auto-detects numeric & string columns): -- `dataSource` — Data array (required) -- `chartType` — type: `CategoryChartType` -- Component auto-detects: first string column → X-axis labels, numeric columns → Y-axis data - -**IgxDataChartComponent** (advanced; requires explicit configuration): -- Data is bound on individual series via `itemsSource`, not on the chart itself -- `valueMemberPath` — Set on the series, not the chart -- Requires explicit axis and series components - -**IgxFinancialChartComponent** (stock data): -- `dataSource` — Data array with date + OHLC columns (chart auto-detects columns) -- `chartType` — type: `FinancialChartType` - -**IgxPieChartComponent**: -- `dataSource` — Data array -- `labelMemberPath` — Field with category labels -- `valueMemberPath` — Field with numeric values - -### Responsive & Sizing -- Set height/width on chart container (div, flexbox parent). The chart will render with 0px height if the container doesn't have a defined height. - ---- - -## Chart Types Reference - -### Area Chart (`IgxCategoryChartComponent`, `chartType: 'Area'`) -- **Use**: Trends over time, cumulative part-to-whole -- **Data**: X-axis categories, Y-axis numeric values -- **Variants**: Area, StepArea, Stacked Area, Stacked 100% Area -- **API**: `chartType`, `dataSource` (auto-detects numeric columns) -- **Best Practices**: - - Start Y-axis at 0 for accuracy - - Use transparent colors for overlaid series - - Order time-series left to right -- **Avoid**: More than 7-10 series (readability), when data values are similar (overlap) - -### Bar Chart (`IgxDataChartComponent`, `IgxBarSeriesComponent`) -- **Use**: Compare categories, show rankings, time-series changes -- **Data**: X-axis numeric, Y-axis categories (reversed from Column) -- **Variants**: Grouped Bar, Stacked Bar, Stacked 100% Bar, Polar Bar -- **Best Practices**: - - Start numeric axis at 0 - - Sort categories by value (ascending/descending) - - Right-align Y-axis labels -- **Avoid**: Too much data (axis becomes illegible), Time-series detail (use Line instead) - -### Column Chart (`IgxCategoryChartComponent`, `chartType: 'Column'`) -- **Use**: Compare categories, show distribution, time-series changes -- **Data**: X-axis categories, Y-axis numeric values -- **Variants**: Column, StackedColumn, Stacked100%Column, RangeColumn, WaterfallColumn -- **Best Practices**: - - Start Y-axis at 0 - - Order time-series left to right -- **Avoid**: Many series (>10) side-by-side (readability) -- **Related**: Bar Chart (horizontal equivalent, use `IgxDataChartComponent` + `IgxBarSeriesComponent`), Waterfall (show differences between values) - -### Stock Chart (`IgxFinancialChartComponent`) -- **Use**: Financial/OHLC data analysis, candlestick visualization, technical indicators -- **Data Structure**: - - **Required**: Date/time column, numeric value column(s) - - **For Candlestick**: Open, High, Low, Close (4 numeric columns) - - **With Volume**: Open, High, Low, Close, Volume (5 numeric columns) -- **Display Modes**: - - **Price Pane**: Show candlestick, OHLC bar, line (configurable via `chartType`) - - **Volume Pane**: Show trading volume (column, line, or area chart) - - **Indicator Pane**: Financial indicators (RSI, MACD, Bollinger Bands, etc.) - - **Zoom Pane**: Navigation slider to zoom/pan -- **Indicators**: RSI, MACD, Bollinger Bands, Force Index, Standard Deviation, and more -- **Features**: - - Crosshairs with value snapshots - - Trendlines and overlays - - Time-based filters (users can select 1M, 3M, 6M, YTD, 1Y, ALL) -- **Data Binding**: - - The Financial Chart auto-detects OHLC, Volume, and Date columns from the data source - - Data items should have properties named like `open`, `high`, `low`, `close`, `volume`, `date` (or similar) - - No explicit member path properties are needed on the chart component - -### Pie Chart (`IgxPieChartComponent` or `IgxDataPieChartComponent`) -- **Use**: Part-to-whole visualization (segments sum to 100%) -- **Data**: Category labels, numeric values -- **Variants**: Pie, Donut (ring), Radial Pie -- **Features**: - - Slice explosion (separate a slice from pie) - - Slice selection (single or multiple) - - Legends with custom item templates - - Animation on load - - "Others" category for small segments -- **Best Practices**: - - Use for small data sets (6-8 segments max) - - Arrange largest to smallest (clockwise from 12 o'clock) - - Ensure segments sum to 100% - - Use distinguishable colors -- **Avoid**: Many segments (>8), change over time (use Bar/Line instead), precise comparisons (Bar is better) - -### Sparkline (`IgxSparklineComponent`) -- **Use**: Compact inline data visualization in grid cells, dashboards, or small-space layouts -- **Data**: One-dimensional array with at least one numeric field -- **Variants**: Line, Area, Column, WinLoss -- **Features**: - - Configurable markers (All, Low, High, First, Last, Negative) - - Normal range — horizontal shaded band (`normalRangeMinimum`, `normalRangeMaximum`) - - Trendlines via `trendLineType` - - Unknown value plotting via `unknownValuePlotting` - - Tooltip support via `tooltipTemplate` -- **Best Practices**: - - Set explicit `height` and `width` on the component or its container (renders at 0px otherwise) - - Start Y-axis at 0 for accurate comparisons - - Use Line or Area type for trend visualization; Column for discrete comparisons; WinLoss for binary positive/negative - - When embedding in a grid cell, set compact dimensions (e.g. `height="40px"` `width="220px"`) -- **Avoid**: Detailed data analysis (use Category Chart or Data Chart), displaying many data labels (Sparkline only supports first/last X-axis labels and high/low Y-axis values) - ---- - -### Standalone component example - -```typescript -import { Component } from '@angular/core'; -import { - IgxCategoryChartModule, - CategoryChartType -} from 'igniteui-angular-charts'; - -@Component({ - selector: 'app-sales-chart', - imports: [ - IgxCategoryChartModule // ✅ Import the NgModule, NOT IgxCategoryChartComponent - ], - template: ` - - - ` -}) -export class SalesChartComponent { - data = [ - { month: 'Jan', revenue: 5000 }, - { month: 'Feb', revenue: 6500 }, - { month: 'Mar', revenue: 7200 } - ]; -} -``` - -### Common errors and fixes - -**Error 1: NG2011 — component not standalone** -``` -// ❌ WRONG: importing component directly -import { IgxCategoryChartComponent } from 'igniteui-angular-charts'; -@Component({ imports: [IgxCategoryChartComponent] }) - -// ✅ CORRECT: import the NgModule instead -import { IgxCategoryChartModule } from 'igniteui-angular-charts'; -@Component({ imports: [IgxCategoryChartModule] }) -``` - -**Error 2: NG8002 — can't bind to property (incorrect inputs)** -``` -// ❌ WRONG: using IgxDataChartComponent or generic property names - - [valueMemberPath]="'value'" - [showDefaultTooltip]="true" - [transitionDuration]="400"> - -// ✅ CORRECT: use Category Chart's actual inputs - -``` - -**Key difference**: IgxCategoryChartComponent **auto-detects** numeric columns and requires minimal configuration. For fine-grained control over field mapping and series types, use `IgxDataChartComponent` instead (but it requires explicit series and axis components). - ---- - -## Styling & Theming - -### Color Customization -- **Series colors**: `brushes` (fill), `outlines` (border) -- **Marker colors**: `markerBrushes`, `markerOutlines` -- **Axis styles**: `xAxisMajorStroke`, `yAxisMajorStroke`, `xAxisLabelTextColor`, `yAxisLabelTextColor` -- **Tooltip**: Controlled via `toolTipType` and custom tooltip templates -- **Highlight**: `highlightingFadeOpacity` (opacity for faded non-highlighted series) - -### CSS & Host Binding -- Chart containers inherit CSS flex/grid properties -- Use host element width/height for responsive sizing -- Theme colors via `IgxTheme` palette - diff --git a/.agents/skills/igniteui-angular-components/references/data-display.md b/.agents/skills/igniteui-angular-components/references/data-display.md deleted file mode 100644 index 5f0e510..0000000 --- a/.agents/skills/igniteui-angular-components/references/data-display.md +++ /dev/null @@ -1,273 +0,0 @@ -# Data Display & Other UI Components - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -## Contents - -- [List](#list) -- [Tree](#tree) -- [Card](#card) -- [Chips](#chips) -- [Avatar & Badge](#avatar--badge) -- [Icon](#icon) -- [Carousel](#carousel) -- [Paginator](#paginator) -- [Progress Indicators](#progress-indicators) -- [Chat (AI Chat Component)](#chat-ai-chat-component) - -## List - -```typescript -import { IGX_LIST_DIRECTIVES } from 'igniteui-angular/list'; -import { IgxAvatarComponent } from 'igniteui-angular/avatar'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - Contacts - @for (contact of contacts; track contact.id) { - - - {{ contact.name }} - {{ contact.phone }} - phone - - } - -``` - -Auxiliary directives for list items: `igxListThumbnail`, `igxListAction`, `igxListLine`, `igxListLineTitle`, `igxListLineSubTitle`. - -## Tree - -```typescript -import { IGX_TREE_DIRECTIVES } from 'igniteui-angular/tree'; -``` - -```html - - @for (node of treeData; track node.id) { - - folder - {{ node.label }} - @for (child of node.children; track child.id) { - - description - {{ child.label }} - - } - - } - -``` - -Selection modes: `'None'`, `'BiState'`, `'Cascading'`. - -## Card - -```typescript -import { IgxCardComponent, IgxCardHeaderComponent, IgxCardContentDirective, IgxCardActionsComponent, IgxCardMediaDirective, IgxCardHeaderTitleDirective, IgxCardHeaderSubtitleDirective, IgxCardThumbnailDirective } from 'igniteui-angular/card'; -import { IgxAvatarComponent } from 'igniteui-angular/avatar'; -import { IgxButtonDirective, IgxIconButtonDirective } from 'igniteui-angular/directives'; -import { IgxRippleDirective } from 'igniteui-angular/directives'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - - - - - - -

{{ article.title }}

-
{{ author.name }}
-
- -

{{ article.excerpt }}

-
- - - - -
-``` - -## Chips - -```typescript -import { IgxChipComponent, IgxChipsAreaComponent } from 'igniteui-angular/chips'; -``` - -```html - - @for (tag of tags; track tag) { - - {{ tag }} - - } - -``` - -## Avatar & Badge - -```typescript -import { IgxAvatarComponent } from 'igniteui-angular/avatar'; -import { IgxBadgeComponent } from 'igniteui-angular/badge'; -``` - -```html - -
- - -
- - - - - - - - - -``` - -```scss -// Required styles to position the badge as an overlay on the avatar -.avatar-badge-container { - position: relative; - display: inline-flex; - - igx-badge { - position: absolute; - bottom: 0; - right: 0; - transform: translate(25%, 25%); - } -} -``` - -Avatar shapes: `'circle'`, `'rounded'`, `'square'`. Sizes: `'small'`, `'medium'`, `'large'`, or custom CSS. -Badge types: `'primary'`, `'info'`, `'success'`, `'warning'`, `'error'`. - -## Icon - -```typescript -import { IgxIconComponent, IgxIconService } from 'igniteui-angular/icon'; -``` - -```html - -settings -favorite - - - -``` - -Register custom SVG icons in a service or component constructor: - -```typescript -export class AppComponent { - constructor() { - const iconService = inject(IgxIconService); - // From inline SVG string - iconService.addSvgIconFromText('logo', '...', 'my-icons'); - // From URL - iconService.addSvgIcon('arrow', '/assets/icons/arrow.svg', 'my-icons'); - } -} -``` - -## Carousel - -```typescript -import { IgxCarouselComponent, IgxSlideComponent } from 'igniteui-angular/carousel'; -``` - -```html - - @for (slide of slides; track slide.id) { - - -
{{ slide.caption }}
-
- } -
-``` - -> **Important:** Carousel uses Angular animations — ensure `provideAnimations()` is present in `app.config.ts`. - -## Paginator - -```typescript -import { IgxPaginatorComponent } from 'igniteui-angular/paginator'; -``` - -```html - - -``` - -> **NOTE:** For grid paging, attach `` inside the grid element. See [`../../igniteui-angular-grids/references/paging-remote.md`](../../igniteui-angular-grids/references/paging-remote.md) for grid-specific paging patterns. - -## Progress Indicators - -```typescript -import { IgxLinearProgressBarComponent } from 'igniteui-angular/progressbar'; -import { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar'; -``` - -```html - - - - - - - - - -``` - -Types for linear bar: `'default'`, `'info'`, `'success'`, `'warning'`, `'error'`. - -## Chat (AI Chat Component) - -> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "chat" })` covers messages, attachments, quick replies, typing indicators, templates, and styling. Prefer it over writing chat code from memory. - -```typescript -import { IgxChatComponent, IgxChatMessageContextDirective, type IgxChatOptions } from 'igniteui-angular/chat'; -import { MarkdownPipe } from 'igniteui-angular/chat-extras'; // template usage: message.text | fromMarkdown | async -``` - -Gotchas not obvious from the doc: - -- The markdown pipe class is `MarkdownPipe` (from `igniteui-angular/chat-extras`) but its template name is `fromMarkdown`, and it is async — combine with `AsyncPipe`. -- Custom templates (`messageHeader`, `messageContent`, `suggestionPrefix`, …) are passed as one object via the `[templates]` input — collect the `ng-template` refs with `viewChild` and assemble the object in an `effect()` (or `computed()`). - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner -- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop -- [`../../igniteui-angular-grids/references/paging-remote.md`](../../igniteui-angular-grids/references/paging-remote.md) — Grid-specific paginator usage diff --git a/.agents/skills/igniteui-angular-components/references/directives.md b/.agents/skills/igniteui-angular-components/references/directives.md deleted file mode 100644 index 3bfa990..0000000 --- a/.agents/skills/igniteui-angular-components/references/directives.md +++ /dev/null @@ -1,162 +0,0 @@ -# Directives - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -## Contents - -- [Button & Icon Button](#button--icon-button) -- [Button Group](#button-group) -- [Ripple Effect](#ripple-effect) -- [Tooltip](#tooltip) -- [Drag and Drop](#drag-and-drop) - -## Button & Icon Button - -```typescript -import { IgxButtonDirective, IgxIconButtonDirective } from 'igniteui-angular/directives'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - - - - - - - - - - - - -``` - -Button variants for `igxButton`: `'flat'`, `'contained'`, `'outlined'`, `'fab'`. -Button variants for `igxIconButton`: `'flat'`, `'outlined'`, `'contained'`. - -## Button Group - -```typescript -// Option A — convenience collection (includes IgxButtonGroupComponent + IgxButtonDirective) -import { IGX_BUTTON_GROUP_DIRECTIVES } from 'igniteui-angular/button-group'; - -// Option B — individual imports -import { IgxButtonGroupComponent } from 'igniteui-angular/button-group'; -import { IgxButtonDirective } from 'igniteui-angular/directives'; - -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - - - - -``` - -- `selectionMode`: `'single'` (default) | `'singleRequired'` (one always stays selected) | `'multi'` -- `alignment`: `'horizontal'` (default) | `'vertical'`; `[disabled]` on the group disables all buttons -- `(selected)`/`(deselected)` emit `IButtonGroupEventArgs` (`{ owner, button, index }`, from `igniteui-angular/button-group`) -- Programmatic: `selectButton(index)`, `deselectButton(index)`, `selectedButtons` on `IgxButtonGroupComponent` -- Further members: `search_api({ framework: "angular", query: "IgxButtonGroupComponent" })` - -## Ripple Effect - -```typescript -import { IgxRippleDirective } from 'igniteui-angular/directives'; -``` - -```html - - -
Interactive div
-``` - -Inputs: `[igxRipple]` (ripple color), `[igxRippleCentered]` (always start from center), `[igxRippleDisabled]`. - -```html - -``` - -## Tooltip - -> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "tooltip" })` covers triggers, overlay behavior, sticky/arrowed tooltips, styling, and accessibility. - -The at-a-glance pairing — `igxTooltipTarget` on the host references the `igxTooltip` element (both from `igniteui-angular/directives`): - -```html - -
Helpful tooltip text
-``` - -## Drag and Drop - -```typescript -import { IgxDragDirective, IgxDropDirective, IDragMoveEventArgs, IDropDroppedEventArgs } from 'igniteui-angular/directives'; -``` - -### Basic drag and drop - -```html - -
- drag_indicator - {{ item.name }} -
- - -
- Drop here -
-``` - -```typescript -onDrop(event: IDropDroppedEventArgs) { - const draggedItem = event.drag.data; - // Move draggedItem to this drop zone - event.cancel = false; // allow the drop -} -``` - -### Ghost element (custom drag preview) - -```html -
Drag me
- - -
- content_copy Moving... -
-
-``` - -### Reorderable list - -```html - - @for (item of items; track item.id) { - - drag_handle - {{ item.name }} - - } - -``` - -Key drag events: `(dragStart)`, `(dragMove)`, `(dragEnd)`, `(dragClick)`, `(ghostCreate)`, `(ghostDestroy)`, `(transitioned)`. -Key drop events: `(enter)`, `(leave)`, `(over)`, `(dropped)`. - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner diff --git a/.agents/skills/igniteui-angular-components/references/feedback.md b/.agents/skills/igniteui-angular-components/references/feedback.md deleted file mode 100644 index 5fcc509..0000000 --- a/.agents/skills/igniteui-angular-components/references/feedback.md +++ /dev/null @@ -1,141 +0,0 @@ -# Feedback & Overlay Components - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -> **Important:** All components in this file rely on Angular animations and the Ignite UI overlay system. Before using any of them, ensure `provideAnimations()` (or `provideAnimationsAsync()`) is present in `app.config.ts`. If it is missing, add it — these components will throw runtime errors or silently fail to animate without it. - -## Contents - -- [Dialog](#dialog) -- [Snackbar](#snackbar) -- [Toast](#toast) -- [Banner](#banner) -- [Key Rules](#key-rules) - -## Dialog - -```typescript -import { IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective } from 'igniteui-angular/dialog'; -import { IgxButtonDirective } from 'igniteui-angular/directives'; -``` - -```html - - Confirm Delete -

Are you sure you want to delete this item? This action cannot be undone.

-
- - -
-
- - -``` - -Programmatic control: - -```typescript -dialog = viewChild.required('confirmDialog'); - -open() { this.dialog().open(); } -close() { this.dialog().close(); } -``` - -Events: `(opening)`, `(opened)`, `(closing)`, `(closed)`, `(leftButtonSelect)`, `(rightButtonSelect)`. - -## Snackbar - -```typescript -import { IgxSnackbarComponent } from 'igniteui-angular/snackbar'; -import { IgxButtonDirective } from 'igniteui-angular/directives'; -``` - -```html - - Item saved successfully - -``` - -Trigger in TypeScript: - -```typescript -snackbar = viewChild.required('snackbar'); - -save() { - this.dataService.save(this.item); - this.snackbar().open('Item saved'); // optional: pass message text -} -``` - -## Toast - -```typescript -import { IgxToastComponent } from 'igniteui-angular/toast'; -``` - -```html -Operation complete - - -``` - -Toast vs Snackbar: Toast is non-interactive (no action button), always auto-hides. Snackbar supports an action button and can be persistent. - -## Banner - -```typescript -import { IgxBannerComponent, IgxBannerActionsDirective } from 'igniteui-angular/banner'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -import { IgxButtonDirective } from 'igniteui-angular/directives'; -``` - -```html - - wifi_off - You are offline. Some features may not be available. - - - - - -``` - -Trigger in TypeScript: - -```typescript -banner = viewChild.required('banner'); - -showOfflineWarning() { this.banner().open(); } -hideWarning() { this.banner().close(); } -``` - -Events: `(opening)`, `(opened)`, `(closing)`, `(closed)`. - -Banner always renders inline (not overlaid) — it pushes page content down when open. - -## Key Rules - -- **`provideAnimations()` is required** — add it to `app.config.ts` before using Dialog, Snackbar, Toast, or Banner -- **Dialog** uses the Ignite UI overlay system — set `[isModal]="true"` for blocking modals -- **Snackbar** vs **Toast**: Snackbar supports action buttons and can be persistent; Toast is always auto-hiding and non-interactive -- **Banner** renders **inline** (pushes content), not as an overlay — use Dialog for blocking prompts - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components -- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.agents/skills/igniteui-angular-components/references/form-controls.md b/.agents/skills/igniteui-angular-components/references/form-controls.md deleted file mode 100644 index e873b4e..0000000 --- a/.agents/skills/igniteui-angular-components/references/form-controls.md +++ /dev/null @@ -1,309 +0,0 @@ -# Form Controls & Reactive Forms Integration - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -## Contents - -- [Input Group](#input-group) -- [Combo (Multi-Select Dropdown)](#combo-multi-select-dropdown) -- [Simple Combo (Single-Select)](#simple-combo-single-select) -- [Select](#select) -- [Date Picker](#date-picker) -- [Date Range Picker](#date-range-picker) -- [Time Picker](#time-picker) -- [Calendar](#calendar) -- [Checkbox, Radio, Switch](#checkbox-radio-switch) -- [Slider](#slider) -- [Autocomplete](#autocomplete) -- [Reactive Forms Integration](#reactive-forms-integration) -- [Key Rules](#key-rules) - -## Input Group - -```typescript -import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - person - - - clear - Enter your username - -``` - -Types: `line` (default), `border`, `box`, `search`. - -## Combo (Multi-Select Dropdown) - -> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "combo" })` covers data binding, selection APIs, forms support, keyboard behavior, and known issues. Prefer it over this snippet when available. - -```typescript -import { IgxComboComponent } from 'igniteui-angular/combo'; -``` - -```html - -``` - -## Simple Combo (Single-Select) - -> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "simple-combo" })`. - -`IgxSimpleComboComponent` from `igniteui-angular/simple-combo` (its own entry point, not `/combo`). Same API as `igx-combo` but restricted to single selection. - -## Select - -```typescript -import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select'; -``` - -```html - - @for (role of roles; track role.id) { - {{ role.name }} - } - -``` - -## Date Picker - -```typescript -import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; -``` - -```html - - -``` - -Implements `ControlValueAccessor` and `Validator`. Works with both reactive and template-driven forms. - -## Date Range Picker - -```typescript -import { IgxDateRangePickerComponent, IgxDateRangeStartComponent, IgxDateRangeEndComponent } from 'igniteui-angular/date-picker'; -import { IgxDateTimeEditorDirective } from 'igniteui-angular/directives'; -import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -import { IgxPickerToggleComponent, IgxPickerClearComponent } from 'igniteui-angular/core'; -``` - -Two-input configuration rules — place the `input` directly inside `igx-date-range-start`/`igx-date-range-end` (no extra `igx-input-group` wrapper); use `igx-picker-toggle igxPrefix` for the calendar action and `igx-picker-clear igxSuffix` for the clear action on **both** inputs. A plain `igx-prefix`/`igx-suffix` icon is decorative only and does not trigger picker actions. - -```html - - - calendar_today - - - clear - - - calendar_today - - - clear - - -``` - -## Time Picker - -```typescript -import { IgxTimePickerComponent } from 'igniteui-angular/time-picker'; -``` - -```html - - -``` - -## Calendar - -```typescript -import { IgxCalendarComponent } from 'igniteui-angular/calendar'; -``` - -```html - - -``` - -Selection modes: `'single'`, `'multi'`, `'range'`. - -## Checkbox, Radio, Switch - -```typescript -import { IgxCheckboxComponent } from 'igniteui-angular/checkbox'; -import { IgxRadioComponent, IgxRadioGroupDirective } from 'igniteui-angular/radio'; -import { IgxSwitchComponent } from 'igniteui-angular/switch'; -``` - -```html -Remember me - - - Basic - Pro - - -Dark mode -``` - -## Slider - -```typescript -import { IgxSliderComponent, IgxSliderType } from 'igniteui-angular/slider'; - -public sliderType = IgxSliderType; - public priceRange = { - lower: 200, - upper: 800 - }; -``` - -```html - - - - - - -``` - -## Autocomplete - -```typescript -import { IgxAutocompleteDirective, IgxDropDownComponent, IgxDropDownItemComponent } from 'igniteui-angular/drop-down'; -import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; -``` - -```html - - - - - - @for (city of cities | startsWith:selectedCity; track city) { - - {{ city }} - - } - -``` - -The `igxAutocomplete` directive attaches to an input and displays a drop-down of suggestions as the user types. It references an `igx-drop-down` via a template variable. - -Filtering is **not** built in — use a pipe or filter the data in the component to control which items appear. - -## Reactive Forms Integration - -All form controls implement `ControlValueAccessor` and work with both reactive and template-driven forms. - -```typescript -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms'; -import { IgxComboComponent } from 'igniteui-angular/combo'; -import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; -import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; -import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select'; - -@Component({ - selector: 'app-my-form', - imports: [ - ReactiveFormsModule, - IGX_INPUT_GROUP_DIRECTIVES, - IgxComboComponent, - IgxDatePickerComponent, - IgxSelectComponent, - IgxSelectItemComponent - ], - changeDetection: ChangeDetectionStrategy.OnPush, - template: ` -
- - - - @if (form.controls.name.invalid && form.controls.name.touched) { - Name is required - } - - - - - - - - - @for (r of roles; track r.id) { - {{ r.name }} - } - -
- ` -}) -export class MyFormComponent { - form = new FormGroup({ - name: new FormControl('', Validators.required), - skills: new FormControl([]), - startDate: new FormControl(null), - role: new FormControl(null) - }); - - skills = [{ id: 1, name: 'Angular' }, { id: 2, name: 'TypeScript' }]; - roles = [{ id: 'admin', name: 'Admin' }, { id: 'user', name: 'User' }]; - - submit() { - if (this.form.valid) { - console.log(this.form.value); - } - } -} -``` - -## Key Rules - -- **Always check `app.config.ts` first** — add `provideAnimations()` before using Combo, Select, Date Picker, or any overlay component -- **Import from specific entry points** — avoid the root `igniteui-angular` barrel -- Date/Time pickers implement both `ControlValueAccessor` and `Validator` — they integrate with reactive forms natively -- How to choose between Combo, Simple Combo, Select, and Auto-complete: - - Use `igx-combo` for multi-select dropdowns with built-in filtering and grouping - - Use `igx-simple-combo` for single-select dropdowns with built-in filtering and grouping - - Use `igx-select` for simple single-select dropdowns without filtering or grouping (or when you want to provide custom filtering UI) - - Use `igxAutocomplete` for input fields with dynamic suggestions based on user input - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner -- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.agents/skills/igniteui-angular-components/references/layout-manager.md b/.agents/skills/igniteui-angular-components/references/layout-manager.md deleted file mode 100644 index 8a62972..0000000 --- a/.agents/skills/igniteui-angular-components/references/layout-manager.md +++ /dev/null @@ -1,322 +0,0 @@ -# Layout Manager, Dock Manager & Tile Manager - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -## Contents - -- [Layout Manager Directives](#layout-manager-directives) -- [Dock Manager](#dock-manager) -- [Tile Manager](#tile-manager) - ---- - -## Layout Manager Directives - -The Layout Manager is a pair of Angular directives (`igxLayout` / `igxFlex`) that wrap CSS Flexbox. Apply `igxLayout` to any container to control its children's flow; apply `igxFlex` to individual children to control their flex properties. - -```typescript -import { IgxLayoutDirective, IgxFlexDirective } from 'igniteui-angular/directives'; -``` - -```html - -
-
Item 1
-
Item 2
-
Item 3
-
-``` - -### Common Layout Patterns - -#### App Shell (Sidebar + Content) - -```html -
- - - - - -
-
Header
-
- -
-
Col 1
-
Col 2
-
Col 3
-
-
- -
- -
-``` - -Other patterns (centering, wrapping tile grids) follow directly from the directive inputs below — e.g. `igxLayoutJustify="center" igxLayoutItemAlign="center"` to center, `igxLayoutWrap="wrap"` + fixed `igxFlexBasis` children for tile grids. - -### `igxLayout` Directive Inputs - -| Input | Values | Default | Description | -|---|---|---|---| -| `igxLayoutDir` | `'row'` \| `'column'` | `'row'` | Flex direction | -| `igxLayoutReverse` | `true` \| `false` | `false` | Reverse flow order | -| `igxLayoutWrap` | `'nowrap'` \| `'wrap'` \| `'wrap-reverse'` | `'nowrap'` | Child wrapping | -| `igxLayoutJustify` | `'flex-start'` \| `'center'` \| `'flex-end'` \| `'space-between'` \| `'space-around'` | `'flex-start'` | Main axis alignment | -| `igxLayoutItemAlign` | `'flex-start'` \| `'center'` \| `'flex-end'` \| `'stretch'` \| `'baseline'` | `'stretch'` | Cross axis alignment | - -### `igxFlex` Directive Inputs - -| Input | Type | Default | Description | -|---|---|---|---| -| `igxFlexGrow` | `number` | `1` | How much the element grows to fill space | -| `igxFlexShrink` | `number` | `1` | How much the element shrinks when space is limited | -| `igxFlexBasis` | `string` | `'auto'` | Initial main-axis size (e.g., `'200px'`, `'30%'`) | -| `igxFlexOrder` | `number` | `0` | Visual order among siblings | - -### Key Rules for Layout Manager - -- `igxLayout` affects its **immediate children only** — nest multiple `igxLayout` containers for deeper control -- Combine `igxLayoutDir="column"` on the outer container with `igxFlex` on children to create page shells -- `igxFlexGrow="0"` on headers/footers/sidebars prevents them from stretching; leave it at `1` (default) for the main content area -- This is a thin CSS Flexbox wrapper — the container element gets `display: flex` applied - ---- - -## Dock Manager - -The Dock Manager is a **separate package** (`igniteui-dockmanager`) and is implemented as a **Web Component** (``). It provides IDE-style dockable, resizable, floating, and tabbed pane layouts. It is a **premium** (licensed) component. - -### Installation - -```bash -npm install igniteui-dockmanager -``` - -### Setup - -Because Dock Manager is a Web Component, it requires two one-time setup steps: - -**1. Register custom elements — `app.config.ts`:** - -```typescript -import { defineCustomElements } from 'igniteui-dockmanager/loader'; - -defineCustomElements(); -``` - -**2. Add `CUSTOM_ELEMENTS_SCHEMA` to every standalone component that uses ``:** - -```typescript -import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; - -@Component({ - selector: 'app-dock-manager', - templateUrl: './dock-manager.component.html', - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class DockManagerComponent { ... } -``` - -### Basic Usage - -```typescript -import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { - IgcDockManagerLayout, - IgcDockManagerPaneType, - IgcSplitPaneOrientation -} from 'igniteui-dockmanager'; - -@Component({ - selector: 'app-dock-manager', - templateUrl: './dock-manager.component.html', - schemas: [CUSTOM_ELEMENTS_SCHEMA], - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class DockManagerComponent { - layout: IgcDockManagerLayout = { - rootPane: { - type: IgcDockManagerPaneType.splitPane, - orientation: IgcSplitPaneOrientation.horizontal, - panes: [ - { - type: IgcDockManagerPaneType.contentPane, - contentId: 'sidebar', - header: 'Explorer' - }, - { - type: IgcDockManagerPaneType.documentHost, - rootPane: { - type: IgcDockManagerPaneType.splitPane, - orientation: IgcSplitPaneOrientation.horizontal, - allowEmpty: true, - panes: [ - { - type: IgcDockManagerPaneType.tabGroupPane, - panes: [ - { - type: IgcDockManagerPaneType.contentPane, - header: 'File 1', - contentId: 'doc1', - documentOnly: true - }, - { - type: IgcDockManagerPaneType.contentPane, - header: 'File 2', - contentId: 'doc2', - documentOnly: true - } - ] - } - ] - } - }, - { - type: IgcDockManagerPaneType.splitPane, - orientation: IgcSplitPaneOrientation.vertical, - size: 280, - panes: [ - { - type: IgcDockManagerPaneType.contentPane, - contentId: 'properties', - header: 'Properties' - }, - { - type: IgcDockManagerPaneType.contentPane, - contentId: 'output', - header: 'Output', - isPinned: false // starts unpinned (auto-hidden) - } - ] - } - ] - }, - floatingPanes: [ - { - type: IgcDockManagerPaneType.splitPane, - orientation: IgcSplitPaneOrientation.horizontal, - floatingWidth: 300, - floatingHeight: 200, - floatingLocation: { x: 200, y: 150 }, - panes: [ - { - type: IgcDockManagerPaneType.contentPane, - contentId: 'search', - header: 'Search' - } - ] - } - ] - }; -} -``` - -```html - - -
File explorer content
-
Document 1 content
-
Document 2 content
-
Properties panel
-
Output panel
-
Search panel
-
-``` - -### Key Rules for Dock Manager - -1. **Separate package** — `igniteui-dockmanager` is installed independently of `igniteui-angular` -2. **Call `defineCustomElements()` from `igniteui-dockmanager/loader` in `app.config.ts`** — without this the `` element renders as an unknown element -3. **Add `CUSTOM_ELEMENTS_SCHEMA`** to every standalone component or NgModule that uses `` -4. **Slot names = `contentId` values** — the `slot="..."` attribute on child elements must exactly match the `contentId` string in the layout -5. **Premium component** — requires a licensed Ignite UI subscription; verify availability before recommending to users -6. **Not part of `igniteui-angular`** — do not import from `igniteui-angular` entry points; all Dock Manager types come from `igniteui-dockmanager` - ---- - -## Tile Manager - -> **Docs:** [Tile Manager (Angular)](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tile-manager) -> **Full API Docs:** [Tile Manager Web Component](https://www.infragistics.com/products/ignite-ui-web-components/web-components/components/layouts/tile-manager.html) - -The Tile Manager is a **layout Web Component** that displays content in individual tiles users can **rearrange and resize**. It is implemented as an `igc-tile-manager` container with one or more `igc-tile` children. - -### Installation - -```bash -npm install igniteui-webcomponents -``` - -### Setup - -Register the Tile Manager Web Component before bootstrap: - -```typescript -import { defineComponents, IgcTileManagerComponent } from 'igniteui-webcomponents'; - -defineComponents(IgcTileManagerComponent); -``` - -Add `CUSTOM_ELEMENTS_SCHEMA` to any component using ``: - -```typescript -import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; - -@Component({ - selector: 'app-tile-manager', - templateUrl: './tile-manager.component.html', - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class TileManagerComponent { } -``` - -### Usage - -```html - - - Wide tile -

Content spanning two columns

-
- - Tall tile -

Content spanning two rows

-
-
-``` - -`igc-tile-manager` properties: - -- **`column-count`**: number of grid columns; if omitted or \<1, as many columns as fit with a minimum width (200px) are created -- **`gap`** / **`min-column-width`** / **`min-row-height`**: spacing and minimum track sizes (e.g., `"20px"`) -- **`resize-mode`**: `"none"` | `"hover"` | `"always"` — controls tile resizing -- **`drag-mode`**: `"tile"` | `"tile-header"` — enables reordering - -`igc-tile` properties: - -- **`row-start` / `col-start`** and **`row-span` / `col-span`**: grid placement and spanning -- **`disable-resize`**, **`disable-maximize`** / **`disable-fullscreen`**: opt out of resize / default header actions - -### Key Rules for Tile Manager - -1. **Web Component package** — Tile Manager ships via `igniteui-webcomponents`, not `igniteui-angular`. -2. **Register components** — call `defineComponents(IgcTileManagerComponent)` once before using ``. -3. **Use `CUSTOM_ELEMENTS_SCHEMA`** on Angular components that host the Tile Manager. -4. **Use slots** — header content goes into `slot="title"`; additional actions and custom adorners use the documented slots (`fullscreen-action`, `maximize-action`, `actions`, `side-adorner`, `corner-adorner`, `bottom-adorner`). -5. **Treat it as a layout container** — use Tile Manager when users need interactive, resizable and re-orderable tiles, not tabular data (use grids for that). - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner -- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.agents/skills/igniteui-angular-components/references/layout.md b/.agents/skills/igniteui-angular-components/references/layout.md deleted file mode 100644 index 96d4ed1..0000000 --- a/.agents/skills/igniteui-angular-components/references/layout.md +++ /dev/null @@ -1,209 +0,0 @@ -# Layout Components - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -## Contents - -- [Tabs](#tabs) -- [Bottom Navigation](#bottom-navigation) -- [Stepper](#stepper) -- [Accordion](#accordion) -- [Splitter](#splitter) -- [Navigation Drawer](#navigation-drawer) - -## Tabs - -```typescript -import { IGX_TABS_DIRECTIVES } from 'igniteui-angular/tabs'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - - - info - Info - - Content for Info tab - - - - Settings - - Settings content - - -``` - -Key inputs: `[(selectedIndex)]`, `[tabAlignment]` (`'start'` | `'end'` | `'center'` | `'justify'`), `[disableAnimation]`. - -## Bottom Navigation - -```typescript -import { IgxBottomNavComponent, IgxBottomNavItemComponent, IgxBottomNavHeaderComponent, IgxBottomNavContentComponent } from 'igniteui-angular/bottom-nav'; -``` - -```html - - - - home - Home - - Home content - - - - settings - Settings - - Settings content - - -``` - -## Stepper - -```typescript -import { IGX_STEPPER_DIRECTIVES } from 'igniteui-angular/stepper'; -``` - -```html - - -
Account
-
Create your account
-
- -
-
- -
Profile
-
Optional step
-
...
-
- -
Confirm
-
Review and submit
-
-
-``` - -Programmatic navigation: -```typescript -stepper = viewChild.required(IgxStepperComponent); - -next() { this.stepper().next(); } -prev() { this.stepper().prev(); } -navigateTo(index: number) { this.stepper().navigateTo(index); } -``` - -## Accordion - -```typescript -import { IgxAccordionComponent } from 'igniteui-angular/accordion'; -import { IGX_EXPANSION_PANEL_DIRECTIVES } from 'igniteui-angular/expansion-panel'; -``` - -```html - - - - Panel 1 - Subtitle text - - - Content for panel 1 - - - - - Panel 2 - - Content for panel 2 - - -``` - -Standalone `igx-expansion-panel` (without accordion): -```html - - - Settings - - Content - -``` - -## Splitter - -```typescript -import { IgxSplitterComponent, IgxSplitterPaneComponent, SplitterType } from 'igniteui-angular/splitter'; -``` - -```html - - - - Left panel content - - - Right panel content - - - - - - Top panel - Bottom panel - -``` - -## Navigation Drawer - -```typescript -import { IgxNavigationDrawerComponent, IgxNavDrawerItemDirective, IgxNavDrawerTemplateDirective, IgxNavDrawerMiniTemplateDirective } from 'igniteui-angular/navigation-drawer'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -import { IgxRippleDirective } from 'igniteui-angular/directives'; -``` - -```html - - - - - - - home - settings - - - - -``` - -Key inputs: `[isOpen]`, `[pin]` (dock to content), `[pinThreshold]` (auto-pin at viewport width), `[width]`, `[miniWidth]`. - -Events: `(opened)`, `(closed)`, `(pinChange)`. - -> **Important:** The Navigation Drawer uses the Ignite UI overlay/animation system — ensure `provideAnimations()` is in `app.config.ts`. - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider -- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner -- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.agents/skills/igniteui-angular-components/references/mcp-setup.md b/.agents/skills/igniteui-angular-components/references/mcp-setup.md deleted file mode 100644 index d855515..0000000 --- a/.agents/skills/igniteui-angular-components/references/mcp-setup.md +++ /dev/null @@ -1,76 +0,0 @@ -# Setting Up the Ignite UI CLI MCP Server - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** - -The Ignite UI CLI MCP server exposes `list_components`, `get_doc`, `search_docs`, and `search_api` so AI assistants can discover Ignite UI components and read version-accurate documentation. It must be configured in the editor/agent before these tools become available, and the editor or agent session must be restarted afterwards — MCP servers cannot be hot-loaded into a running session. - -> Depending on the client, MCP tool names may appear with a server prefix (e.g. `mcp__igniteui-cli__list_components` in Claude Code). This skill refers to tools by their bare names. - -## Recommended: One-Command Setup - -From the project root: - -```bash -npx -y igniteui-cli ai-config -``` - -This configures **both** the `igniteui-cli` and `igniteui-theming` MCP servers, copies the Ignite UI Agent Skills into the project, and preserves any existing server entries in the config files. Inline options such as `--agents claude copilot` and `--assistants vscode cursor` select which agents and editors to configure. - -Projects created with `npx igniteui-cli new` already have the `igniteui-cli` MCP entry configured. - -## Manual Configuration (fallback) - -Use these only when `ai-config` is unavailable or your editor is not covered by it. - -### VS Code — `.vscode/mcp.json` - -```json -{ - "servers": { - "igniteui-cli": { - "command": "npx", - "args": ["-y", "igniteui-cli", "mcp"] - } - } -} -``` - -`npx -y` works whether `igniteui-cli` is installed locally in `node_modules` or needs to be pulled from the npm registry. - -### Claude Code - -```bash -claude mcp add igniteui-cli -- npx -y igniteui-cli mcp -``` - -### Cursor — `.cursor/mcp.json` - -```json -{ - "mcpServers": { - "igniteui-cli": { - "command": "npx", - "args": ["-y", "igniteui-cli", "mcp"] - } - } -} -``` - -### Claude Desktop - -Edit the Claude Desktop config file (**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`, **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`) and add the same `mcpServers` entry as shown for Cursor above. - -### WebStorm / JetBrains IDEs - -1. Go to **Settings → Tools → AI Assistant → MCP Servers** -2. Click **+ Add MCP Server** -3. Set Command to `npx` and Arguments to `-y igniteui-cli mcp` -4. Click OK and restart the AI Assistant - -## Verifying the Setup - -After restarting the editor/session, ask the AI assistant: - -> "List all available Ignite UI components" - -If the MCP server is running, the `list_components` tool will return all available components for the detected framework. diff --git a/.agents/skills/igniteui-angular-components/references/setup.md b/.agents/skills/igniteui-angular-components/references/setup.md deleted file mode 100644 index a9e769d..0000000 --- a/.agents/skills/igniteui-angular-components/references/setup.md +++ /dev/null @@ -1,165 +0,0 @@ -# Application Setup & Architecture - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** - -## Contents - -- [Installation](#installation) -- [Required Providers (`app.config.ts`)](#required-providers-appconfigts) -- [Architecture — Standalone Components](#architecture--standalone-components) -- [Multi-Entry-Point Imports](#multi-entry-point-imports) - -## Installation - -```bash -# Open-source -npm install igniteui-angular - -# Licensed (requires @infragistics registry configured) -npm install @infragistics/igniteui-angular -``` - -Both packages share identical entry-point paths. Everywhere below, replace `igniteui-angular` with `@infragistics/igniteui-angular` if using the licensed package. - -## Required Providers (`app.config.ts`) - -> **Important:** Before adding any Ignite UI component, verify that `app.config.ts` contains the providers listed below. Missing `provideAnimations()` is the most common cause of runtime errors — all overlay and animated components (Dialog, Combo, Select, Date Picker, Snackbar, Toast, Banner, Navigation Drawer, Dropdown) will silently fail or throw without it. - -```typescript -import { ApplicationConfig } from '@angular/core'; -import { provideAnimations } from '@angular/platform-browser/animations'; -import { provideRouter } from '@angular/router'; -import { provideIgniteIntl } from 'igniteui-angular/core'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideAnimations(), // REQUIRED — all overlay and animated components - provideRouter(appRoutes), - provideIgniteIntl(), // recommended — localization for date/time pickers, grids, etc. - ] -}; -``` - -| Provider | Package | Required for | -|---|---|---| -| `provideAnimations()` | `@angular/platform-browser/animations` | **All overlay and animated components** — Dialog, Combo, Select, Dropdown, Date/Time Picker, Snackbar, Toast, Banner, Navigation Drawer, Carousel, Overlay service | - -> **`provideAnimationsAsync()`** lazy-loads the animations module — prefer it for SSR or when optimizing initial bundle size: -> ```typescript -> import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; -> ``` - -## Architecture — Standalone Components - -All Ignite UI components are **standalone** — no NgModules needed. Import them directly into your component's `imports` array: - -```typescript -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { IgxButtonDirective } from 'igniteui-angular/directives'; -import { IgxDialogComponent } from 'igniteui-angular/dialog'; - -@Component({ - selector: 'app-example', - imports: [IgxButtonDirective, IgxDialogComponent], - templateUrl: './example.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ExampleComponent {} -``` - -## Multi-Entry-Point Imports - -> **Important:** Always import from specific entry points, never from the root barrel. Check `package.json` to determine whether the project uses `igniteui-angular` or `@infragistics/igniteui-angular` — that prefix applies to every import path. - -```typescript -// CORRECT — tree-shakeable, specific entry point -import { IgxComboComponent } from 'igniteui-angular/combo'; -import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; - -// AVOID — pulls in entire library -import { IgxComboComponent } from 'igniteui-angular'; -``` - -### Common Entry Points - -| Component / Directive | Entry Point | -|---|---| -| Input Group | `igniteui-angular/input-group` | -| Combo | `igniteui-angular/combo` | -| Simple Combo | `igniteui-angular/simple-combo` | -| Select | `igniteui-angular/select` | -| Date Picker / Date Range Picker | `igniteui-angular/date-picker` | -| Time Picker | `igniteui-angular/time-picker` | -| Calendar | `igniteui-angular/calendar` | -| Checkbox | `igniteui-angular/checkbox` | -| Radio | `igniteui-angular/radio` | -| Switch | `igniteui-angular/switch` | -| Slider | `igniteui-angular/slider` | -| Tabs | `igniteui-angular/tabs` | -| Stepper | `igniteui-angular/stepper` | -| Accordion | `igniteui-angular/accordion` | -| Expansion Panel | `igniteui-angular/expansion-panel` | -| Splitter | `igniteui-angular/splitter` | -| Navigation Drawer | `igniteui-angular/navigation-drawer` | -| Bottom Navigation | `igniteui-angular/bottom-nav` | -| List | `igniteui-angular/list` | -| Tree | `igniteui-angular/tree` | -| Card | `igniteui-angular/card` | -| Dialog | `igniteui-angular/dialog` | -| Snackbar | `igniteui-angular/snackbar` | -| Toast | `igniteui-angular/toast` | -| Banner | `igniteui-angular/banner` | -| Chips | `igniteui-angular/chips` | -| Avatar | `igniteui-angular/avatar` | -| Badge | `igniteui-angular/badge` | -| Icon | `igniteui-angular/icon` | -| Carousel | `igniteui-angular/carousel` | -| Paginator | `igniteui-angular/paginator` | -| Linear Progress | `igniteui-angular/progressbar` | -| Circular Progress | `igniteui-angular/progressbar` | -| Chat | `igniteui-angular/chat` | -| Button / Icon Button | `igniteui-angular/directives` | -| Button Group | `igniteui-angular/button-group` | -| Ripple | `igniteui-angular/directives` | -| IgxTooltipDirective, IgxTooltipTargetDirective | `igniteui-angular/directives` | -| Drag & Drop | `igniteui-angular/directives` | -| Layout Manager (`igxLayout`, `igxFlex`) | `igniteui-angular/directives` | -| Core utilities, services, base types | `igniteui-angular/core` | -| Icon Service | `igniteui-angular/icon` | -| Overlay Service | `igniteui-angular/core` | -| **Dock Manager** | `igniteui-dockmanager` *(separate package — `npm install igniteui-dockmanager`)* | - -**Grid-specific entry points** (tree-shakable imports): - -| Component / Feature | Entry Point | -|---|---| -| Shared grid infrastructure (columns, toolbar, filtering, sorting, etc.) | `igniteui-angular/grids/core` | -| Standard grid (`IgxGridComponent`) | `igniteui-angular/grids/grid` | -| Tree grid (`IgxTreeGridComponent`) | `igniteui-angular/grids/tree-grid` | -| Hierarchical grid (`IgxHierarchicalGridComponent`, `IgxRowIslandComponent`) | `igniteui-angular/grids/hierarchical-grid` | -| Pivot grid (`IgxPivotGridComponent`, `IgxPivotDataSelectorComponent`) | `igniteui-angular/grids/pivot-grid` | - -### Convenience Directive Collections - -For complex components, use the bundled directive arrays instead of listing every sub-directive individually: - -| Token | Entry Point | Includes | -|---|---|---| -| `IGX_BUTTON_GROUP_DIRECTIVES` | `igniteui-angular/button-group` | Button group + button directive | -| `IGX_INPUT_GROUP_DIRECTIVES` | `igniteui-angular/input-group` | Input group + label, hint, prefix, suffix | -| `IGX_TABS_DIRECTIVES` | `igniteui-angular/tabs` | Tabs + tab item, header, content | -| `IGX_STEPPER_DIRECTIVES` | `igniteui-angular/stepper` | Stepper + step | -| `IGX_EXPANSION_PANEL_DIRECTIVES` | `igniteui-angular/expansion-panel` | Panel + header, body | -| `IGX_LIST_DIRECTIVES` | `igniteui-angular/list` | List + list item | -| `IGX_TREE_DIRECTIVES` | `igniteui-angular/tree` | Tree + tree node | - -## See Also - -- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider, forms integration -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`data-display.md`](./data-display.md) — List, Tree, Card, Chips, Avatar, Badge, Icon, Carousel, Paginator, Progress, Chat -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner -- [`directives.md`](./directives.md) — Button, Icon Button, Button Group, Ripple, Tooltip, Drag and Drop -- [`layout-manager.md`](./layout-manager.md) — Layout Manager directives, Dock Manager -- [`../../igniteui-angular-grids/SKILL.md`](../../igniteui-angular-grids/SKILL.md) — Data Grids -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.agents/skills/igniteui-angular-figma-to-app/SKILL.md b/.agents/skills/igniteui-angular-figma-to-app/SKILL.md deleted file mode 100644 index e7c07e8..0000000 --- a/.agents/skills/igniteui-angular-figma-to-app/SKILL.md +++ /dev/null @@ -1,772 +0,0 @@ ---- -name: igniteui-angular-figma-to-app -description: > - Translate Figma app screens designed using the Indigo.Design UI Kits into production - Angular applications with Ignite UI for Angular. The Indigo.Design UI Kits are Figma - component libraries available in four design-system variants — Material, Fluent, - Bootstrap, and Indigo — each with light and dark themes. Designers build their own - app frames in Figma using these kit libraries, and every kit component instance maps - 1:1 to an Ignite UI Angular control. The active kit variant also determines the - design system used in the Angular theme. Uses the Figma MCP for design data, the - Ignite UI CLI MCP for component docs, the Ignite UI Theming MCP for palette and - component-level styling, and the Playwright MCP for visual validation against the - original Figma design. Triggers on "implement this Figma design", "build from Figma", - "translate Figma to Angular", "implement this artboard", "generate app from Figma", - or when a Figma URL is shared with implementation intent in an Ignite UI Angular context. -user-invocable: true ---- - -# Ignite UI for Angular — Figma to App - -Translate Figma app screens built with the **Indigo.Design UI Kits** into production -Angular applications. Designers create their own frames in Figma using the Indigo.Design -component libraries as shared libraries — these kits come in four design-system variants -(**Material**, **Fluent**, **Bootstrap**, **Indigo**) with light and dark themes each. -Every component instance in the design maps 1:1 to an Ignite UI Angular control, and -the active kit variant directly determines which design system to use in the Angular -theme. - -This skill orchestrates four MCP servers: **Figma** (design data), **Ignite UI CLI** -(component docs), **Ignite UI Theming** (styles), and **Playwright** (visual validation). - ---- - -## Required Workflow - -Complete all phases in order — do not skip phases or generate component code from -memory. Every component selector, input name, and import path must come from -`get_doc` results or, where no doc exists in the catalog, from the -`igniteui-angular-components` / `igniteui-angular-grids` skill reference files — -never guessed. - -Read [references/figma-component-map.md](references/figma-component-map.md) before Phase 2. -Read [references/design-token-bridge.md](references/design-token-bridge.md) before Phase 3. -Read [references/asset-extraction.md](references/asset-extraction.md) before Phase 1h. -Read [references/validation-patterns.md](references/validation-patterns.md) before Phase 5. - ---- - -## Phase 0 — Prerequisites - -> **Tool naming:** this skill writes MCP tool names as `_` (e.g. -> `figma_get_metadata`, `theming_create_theme`). The exact name depends on the client — -> Claude Code exposes them as `mcp____` (e.g. `mcp__figma__get_metadata`). -> Match by the tool's base name on whatever server is connected. - -### 0a: Verify All Four MCP Servers - -Run these checks **silently** in parallel. Each verification call is a no-op if the -server is not connected; do not surface raw errors to the user at this point. - -| Server | Verification call | Success signal | -| --------------------- | ---------------------------------------------- | ----------------------------------- | -| **Figma** | `figma_get_metadata` with no `nodeId` | Returns page list or selection info | -| **Ignite UI CLI** | `list_components` with `framework: "angular"` | Returns component list | -| **Ignite UI Theming** | `theming_detect_platform` | Returns platform info | -| **Playwright** | `playwright_browser_navigate` to `about:blank` | Navigates without error | - -If **any server fails**, stop and guide the user through setup **for that server only** -before continuing. For `igniteui-cli` and `igniteui-theming`, the fastest path is -`npx -y igniteui-cli ai-config`, which configures both. Full setup instructions for all -servers are in [references/mcp-setup.md](references/mcp-setup.md). Newly configured MCP -servers require an editor/session reload before their tools appear. - -### 0b: Detect or Scaffold Angular Project - -Check whether the current working directory contains a valid Angular + Ignite UI project: - -``` -1. Does package.json exist? -2. Does it list "igniteui-angular" OR "@infragistics/igniteui-angular" in dependencies? -3. Is there a src/app/ directory? -``` - -**If a valid project is found:** - -- Note the package layout: `igniteui-angular` (open-source) or `@infragistics/igniteui-angular` (licensed) -- Note the Angular version from `package.json` -- **Check the MCP configuration for all four required server entries** — `figma`, `igniteui-cli`, - `igniteui-theming`, and `playwright` (in `.vscode/mcp.json` or the client's equivalent). - If `igniteui-cli` or `igniteui-theming` is missing, run `npx -y igniteui-cli ai-config` - from the project root — it configures both servers and copies the Agent Skills, preserving - existing entries. Add missing `figma` and `playwright` entries from - [references/mcp-setup.md](references/mcp-setup.md). Projects scaffolded with - `npx igniteui-cli new` have `igniteui-cli` pre-wired but typically lack the other three. - A reload is required before newly configured servers' tools appear. -- Inform the user: "Found existing Ignite UI Angular project. Proceeding with the Figma workflow." - -**If no valid project is found:** -Present this message and wait for the user’s choice: - -> “No Ignite UI Angular project found in the current directory. Would you like me to -> scaffold a new one using the Ignite UI CLI before implementing the Figma design? -> -> `npx -y igniteui-cli new` creates a project pre-configured with Ignite UI Angular, -> theming already applied in `styles.scss`, and the Ignite UI CLI MCP server auto-wired -> into `.vscode/mcp.json`. No global install required. -> -> Alternatively, point me at an existing project directory.” - -If the user confirms scaffolding: - -1. Ask for a project name. If the user has already shared a Figma URL, suggest a name - derived from the Figma file name; otherwise prompt. - -2. Choose the project template based on the artboard structure. Because Phase 1 has - not run yet, use the lightest signal available: - - | Signal | Template to use | - | -------------------------------------------------------------------- | ------------------------------------------------ | - | User mentions a sidebar, navigation drawer, or multiple routed views | `side-nav` | - | No strong signal — default | `empty` (routing + home page; easiest to extend) | - -3. Create the project: - - ```bash - npx -y igniteui-cli new --framework=angular --type=igx-ts --template= - ``` - - This produces a standard Angular workspace fully compatible with `ng` commands, - and additionally: - - Installs and configures `igniteui-angular` with a default theme in `styles.scss` - - Generates `.vscode/mcp.json` with the Ignite UI CLI MCP server entry already set - - Copies Ignite UI Agent Skills to `.claude/skills/` - -4. `cd ` - -5. Open the auto-generated `.vscode/mcp.json` and **append** the Figma, Ignite UI - Theming, and Playwright server entries from `references/mcp-setup.md`. The Ignite - UI CLI entry is already present — do not duplicate it. - -6. Confirm the project starts cleanly: - ```bash - npm start - ``` - Then continue to Phase 1. - ---- - -## Phase 1 — Figma Design Exploration - -**Goal:** understand the full design structure and capture all data needed for -implementation and validation before writing any code. - -> **Rate-limit awareness:** Figma MCP calls count against plan quotas -> (indicative, subject to change — verify against the user's current Figma plan: -> Starter **6 calls/month**, Organization 200/day, Enterprise 600/day). -> -> Estimated call budget for a 5-artboard design: -> `figma_get_metadata` ×2 + `figma_get_screenshot` ×5 + `figma_get_design_context` ×5 + `figma_get_variable_defs` ×1 + `figma_get_code_connect_map` ×5 = **~18 calls**. -> **Starter plan users will exceed their monthly quota in a single session.** Strategies: -> 1. Call `figma_get_variable_defs` only **once** for the root page (variables are file-scoped, not artboard-scoped — calling it per artboard wastes quota on duplicate data). -> 2. Prioritize `figma_get_design_context` over additional screenshots if quota is tight. -> 3. For large files, consider implementing one artboard per monthly budget cycle. -> -> Use `figma_get_metadata` first to discover structure cheaply, then call -> `figma_get_design_context` only for the artboards you will implement. - -### 1a: Discover Pages and Artboards - -Call `figma_get_metadata` with no `nodeId`. This returns the top-level page list. -Then call `figma_get_metadata` again for each page that looks relevant to get its -artboard tree. - -> If the user already shared a Figma URL, extract the `nodeId` from it: -> URL format: `https://figma.com/design/:fileKey/:name?node-id=1-2` → nodeId = `1:2` -> (replace `-` with `:`) - -### 1b: Select Target Artboards - -If there are multiple pages or artboards, show the user a list: - -> "I found these artboards in your Figma file: -> -> - Page 1: [list artboard names + node IDs] -> - Page 2: [list artboard names + node IDs] -> -> Which artboards should I implement? (You can say 'all' or list specific names.)" - -Wait for confirmation before proceeding. - -### 1c: Capture Reference Screenshots - -> **IMPORTANT — Figma MCP is session-bound.** The `figma_get_screenshot` tool returns a -> screenshot of the **currently selected node in the Figma desktop app**, regardless of any -> `nodeId` parameter passed. To capture each artboard, you must ask the user to navigate -> to it in Figma first. - -For each target artboard: - -1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* -2. Wait for confirmation, then call: - ``` - figma_get_screenshot({}) - // Store: { artboardName, screenshotFile, width: , height: } - ``` -3. Repeat for each artboard — do **not** batch these calls before the user navigates. - -After all artboards are captured, confirm the count: -> *"I have N reference screenshots: [list artboard names]. Proceeding to design context extraction." -> If any are missing, navigate to that artboard in Figma and recapture before continuing.* - -> Never skip this step. The screenshots are your ground truth for Phase 5 validation. - -### 1d: Extract Design Context - -> **IMPORTANT — Figma MCP is session-bound.** The `figma_get_design_context` tool returns -> context for the **currently selected node in the Figma desktop app**. You must ask the -> user to navigate to each artboard before calling this tool. -> -> **Output format:** `figma_get_design_context` returns **React + Tailwind CSS code**, not -> structured Angular metadata. The response is explicitly tagged *"SUPER CRITICAL: The -> generated React+Tailwind code MUST be converted to match the target project's technology -> stack."* Do **not** copy the React code into Angular files. Instead, read the JSX to extract -> the information below. Image localhost URLs in the output are session-scoped previews — -> do **not** use them as final assets (see Phase 1h and `references/asset-extraction.md`). - -For **each** target artboard: - -1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* -2. Wait for confirmation, then call: - ``` - figma_get_design_context({ - clientLanguages: "typescript", - clientFrameworks: "angular", - artifactType: "WEB_PAGE_OR_APP_SCREEN", - taskType: "CREATE_ARTIFACT" - }) - ``` -3. From the React+Tailwind output, extract: - - - **Component layer names** (`data-name` attributes in the JSX) — match against `references/figma-component-map.md` - - **Layout structure** — `flex`, `grid`, `gap-*`, `p-*`, `w-*`, `h-*` Tailwind classes on container divs - - **Typography** — `font-['...']`, `text-[...]`, `font-weight` classes - - **Surface colors** — `bg-[#XXXXXX]` classes on container `
` elements that wrap major sections - (these become plain `
` wrappers in Angular with `background: #XXXXXX`) - - **Border/roundness** — `rounded-[...]`, `border`, `border-[...]` classes on containers and cards - - **Input type variants** — look for hidden zero-size nodes (`size-[0.5px]`) whose `data-name` - contains a component type (e.g. `"Date Picker Type"`, `"Combo Input"`). These are the - Indigo.Design kit's **variant indicator nodes** — their name encodes which input variant - (border/line/box) is active for that component. - - **Chart series colors** — for any chart layer, note the fill colors on its series paths - - **Action controls** — list every button, icon button, and toolbar action visible in the artboard; - this is your authoritative inventory — do not add actions not present in the design - - **Active kit variant** — look for library component references whose source file name - contains "Material", "Fluent", "Bootstrap", or "Indigo". If not found here, defer to - Phase 1e variable names and [references/design-token-bridge.md](references/design-token-bridge.md). - -4. Record all surface containers in the **Surfaces Spec** (added to Phase 1g). - -### 1e: Extract Design Tokens - -> Figma variables are **file-scoped**, not artboard-scoped. Call `figma_get_variable_defs` -> **once** for the root page node — not once per artboard. Calling it multiple times returns -> identical data and wastes plan quota. - -Call once: - -``` -figma_get_variable_defs({}) -``` - -The response contains a map of variable names to values, e.g.: - -``` -"color/primary/500": "#6200EE" -"color/surface": "#FFFFFF" -"typography/body/font-family": "Roboto" -``` - -Use `references/design-token-bridge.md` to map color and typography variables to Ignite -UI theming inputs in Phase 3. Do **not** attempt to map Figma spacing or sizing values -— see `references/design-token-bridge.md § Spacing, Sizing, and Roundness` for why. - -### 1f: Check for Existing Code Connect Mappings - -Call `figma_get_code_connect_map` for each artboard. If mappings exist, they confirm -which Ignite UI Angular components correspond to which Figma nodes — use these to -validate or augment your component mapping in Phase 2. - -``` -figma_get_code_connect_map({ nodeId: "" }) -``` - -### 1g: Build the Decomposition Table - -Before writing any code, produce **two tables** for **each artboard**. - -#### Table A — Ignite UI Components - -| Figma Layer Name | Visual Role | Ignite UI Component | Design Tokens Used | Data Type | -| -------------------------- | ------------------ | ----------------------- | ------------------- | --------------- | -| _e.g._ `_NavBar` | Top navigation bar | `IgxNavbarComponent` | `color/primary/500` | n/a | -| _e.g._ `_Grid/Default` | Data table | `IgxGridComponent` | `color/surface` | Tabular records | -| _e.g._ `_Button/Contained` | Primary CTA | `igxButton="contained"` | `color/primary/500` | n/a | - -Fallback to plain semantic HTML only when no Ignite UI component can match the layer -after consulting `references/figma-component-map.md`. Document the reason inline. - -#### Table B — Layout Surfaces - -Record every **non-IgxXxx container** that carries visual properties (background color, -border, padding, shadow). These are plain `
` wrappers in Angular — not Ignite UI -components — but they are critical to visual fidelity. Populate this table from the -`bg-[...]`, `rounded-[...]`, `border`, `p-[...]`, and `shadow-[...]` Tailwind classes -observed on container divs in the Phase 1d design context output. - -| Figma Frame / Container Name | Background | Border-Radius | Padding | Border | Shadow | Encloses (child sections) | -| ---------------------------- | ---------- | ------------- | ------- | ------ | ------ | ------------------------- | -| _e.g._ `Budget Categories` | `#222222` | `4px` | `24px` | none | none | Categories list, Add button | -| _e.g._ `Friend Card` | `#222222` | `8px` | `24px 16px` | `1px solid #333` | none | Avatar, name, phone, email, buttons | - -> **Rule:** if a section appears on a surface in Figma (i.e. its container has a -> non-transparent background), it **must** have that background in the Angular implementation. -> If a section floats on the page background (transparent), do **not** add a surface wrapper. -> Never infer surface structure from another page — always derive it from the design context -> for the specific artboard being implemented. - -Present both tables to the user for review before proceeding. - -### 1h: Extract Image Assets - -Read [references/asset-extraction.md](references/asset-extraction.md) in full before -running any extraction. - -**Zero-placeholder policy:** every image visible in the Figma design must be extracted -and committed to `src/assets/` before Phase 4. Gradient placeholders are not acceptable. - -**Step 0 — Get the file key first.** Ask the user to share the Figma file URL or key -before attempting any extraction. In Figma desktop: right-click the file tab → -**Copy link**. Without it you fall back to Tier 2 or Tier 3 (see below). - -From the decomposition tables, identify every layer that is a **static image asset** -(photo, background, logo, custom icon, illustration) rather than an Ignite UI component. -Do **not** extract Indigo.Design UI Kit component instances. - -**Use the four-tier decision tree from `asset-extraction.md`:** - -| Tier | Method | When to use | -| ---- | ------ | ----------- | -| **1** | REST API `/v1/files/:key/images` (Method A) or `/v1/images/:key` (Method B) | File key available — always the highest fidelity | -| **2** | Download localhost URLs from `figma_get_design_context` with `curl` | No file key; Figma session is active; design context was already called | -| **3** | `figma_get_screenshot` per node (ask user to select each node) | No file key; no localhost URLs | -| **4** | CSS gradient/color placeholder with `// TODO` comment | Only for confirmed pure-color fills — never as a shortcut | - -After extraction, save assets to: -- `src/assets/images/` — raster images (PNG, JPG) -- `src/assets/icons/` — SVG icons and logos - -Build a concise asset manifest (see `asset-extraction.md § Build an Asset Manifest`) -so the implementation phase uses consistent paths. - -If you used Tier 2 or Tier 3 for any asset, tell the user which ones need re-export -once the file key becomes available. - ---- - -## Phase 2 — Component Discovery (Ignite UI CLI MCP) - -**Goal:** look up exact Angular selectors, inputs, outputs, and usage patterns for every -component identified in Phase 1. Never generate component code from memory. - -### 2a: Read the Component Map - -Read [references/figma-component-map.md](references/figma-component-map.md) in full. -Find the row for each Figma layer name from your Phase 1 decomposition table. -Each row gives you: - -- The Ignite UI Angular selector -- The `get_doc` key to call -- Key inputs and variants to configure - -### 2b: Fetch Component Docs - -Call `list_components({ framework: "angular" })` **once** to discover which component -families have full docs — **the catalog covers only a subset of components**. Then: - -- For families **with** a doc: call `get_doc({ framework: "angular", name: "" })`, - all in a single parallel batch — never sequentially. -- For families **without** a doc: read the matching reference files from the - [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) and - [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) skills, and use - `search_api` for member-level API lookups. - -Do **not** write any component code until you have read its doc or reference file. - -### 2c: Search for Feature Docs - -Use `search_docs` for feature-level questions raised by the artboard, for example: - -``` -search_docs({ framework: "angular", query: "row editing" }) -search_docs({ framework: "angular", query: "virtual scrolling" }) -search_docs({ framework: "angular", query: "column pinning" }) -``` - -Feature docs are mandatory when the artboard shows grid editing, filtering, sorting, -pinning, or other advanced feature states. - -### 2d: Document the Final Component Plan - -After reading all docs, confirm or revise the decomposition table from Phase 1g with: - -- Exact selectors (e.g. ``, ``) -- Exact import paths (never imported from the root barrel) -- Required peer modules or provider functions - -Present this updated plan to the user and wait for confirmation before Phase 3. - ---- - -## Phase 3 — Theme Generation (Ignite UI Theming MCP) - -**Goal:** produce Sass theming code that matches the Figma design's visual language -using design tokens extracted in Phase 1e. - -Read [references/design-token-bridge.md](references/design-token-bridge.md) in full -before running any theming tool. - -### 3a: Inspect Existing Theme (Guard) - -Open `src/styles.scss` (or the project's global stylesheet). Look for an active -`@include theme(...)` or `@include palette(...)` call. - -- **Theme found, but variant mismatch** — if the existing theme is **light** and the - Figma design is **dark** (or vice versa), treat this as a theme change and proceed with - 3b–3c. A light theme applied to a dark design produces wrong background colors on every - component and will fail every Phase 5 check. -- **Theme found, variant matches** → do **not** call `theming_create_theme` or - `theming_create_palette` unless the user explicitly asks for a global theme change. - Reuse the existing palette. Skip to step 3d. -- **No theme found** → proceed with 3b. - -Detect the Figma design's variant from Phase 1e: if a `color/mode` variable exists, -use its value. Otherwise, use the artboard background color: near-black (`#121212`, -`#1a1a1a`, `#000`) → `"dark"`; near-white (`#fff`, `#f5f5f5`) → `"light"`. - -### 3b: Resolve Design System - -You don't need to call `theming_detect_platform` to confirm the Angular package layout. We already did that in Phase 0. - -To determine the design system, use this **strict precedence order**. Stop at the first -signal that gives a clear answer: - -1. **Explicit user request** — "make it Material", "use Fluent", etc. -2. **Library source name in design context** — the `figma_get_design_context` or - `figma_get_metadata` response may reference the Figma source library file name - (e.g. `"Indigo.Design UI Kit for Material"` → `material`). -3. **Variable collection names from Phase 1e** — collection names like - `Material/color/primary` identify the kit variant directly. -4. **Elevation variable structure** — inspect the `Elevations/*` variables in - `figma_get_variable_defs` output: - - **Three-layer DROP_SHADOW** (umbra + penumbra + ambient) → **Material Design** - - **Single-layer DROP_SHADOW** → Indigo, Fluent, or Bootstrap -5. **Palette shade naming** — variables named `primary/500`, `primary/100`–`primary/900` - follow the Material 100–900 palette convention → likely **Material**. -6. **Visual heuristics** (use only when all above are inconclusive): - prominent shadows + ripple effects → `"material"`; - flat surfaces + sharp corners + Segoe/Inter font → `"fluent"`; - component borders + Bootstrap grid → `"bootstrap"`; - rounded purple/indigo accents without Material shadows → `"indigo"`. - -> **Never use font name as a primary signal.** "Titillium Web" is the default body font -> in the Indigo.Design UI Kit for Material — it is not exclusive to the Indigo design system. - -Supported values: `material` (default), `bootstrap`, `fluent`, `indigo`. - -### 3c: Generate Global Theme - -Extract the following from Phase 1e variables using -[references/design-token-bridge.md](references/design-token-bridge.md): - -``` -primaryColor ← from "color/primary/500" or "primary/500" -secondaryColor ← from "color/secondary/500" or "secondary/500" -surfaceColor ← from "color/surface" or "surface/default" -fontFamily ← from "typography/font-family" or "typography/body/font-family" -``` - -Then call in order: - -> **Parameter names differ between tools** — `theming_create_palette` uses `primary`, -> `secondary`, `surface` (not `primaryColor` etc.). `theming_create_theme` uses -> `primaryColor`, `secondaryColor`, `surfaceColor`. Do not mix them up. - -> **fontFamily double-quote bug** — `theming_create_theme` may double-wrap the fontFamily -> string (e.g. `""'Titillium Web', sans-serif""`) in its Sass output, producing invalid Sass. -> If you see double-quoted strings in the generated output, strip the outer quotes before -> applying to `styles.scss`. - -``` -theming_create_palette({ - primary: primaryColor, - secondary: secondaryColor, - surface: surfaceColor, - platform: "angular", - licensed: -}) - -theming_create_elevations({ - preset: "material" // or "indigo" if design system is Indigo -}) - -theming_create_typography({ - fontFamily, - platform: "angular" -}) - -theming_create_theme({ - palette: , - elevations: , - typography: , - variant: "", - designSystem: "", - platform: "angular", - licensed: -}) -``` - -Apply the generated output to `src/styles.scss` as instructed in the tool's response. - -### 3d: Per-Component Token Mapping - -> **Scope:** applies only to core Ignite UI Angular components (grid, navbar, card, -> inputs, chips, list, etc.). Charts, maps, and gauges have no Sass tokens — configure -> those via component inputs only. - -For **every** Ignite UI core component in your plan, run this loop: - -1. `theming_get_component_design_tokens({ component: "" })` - — review all token names, types, and descriptions -2. Go back to the Phase 1e variable map and find Figma variables that correspond to - this component's surfaces (background, text, border, hover state) -3. `theming_create_component_theme({ component: "", platform: "angular", tokens: { } })` -4. Apply the generated `@include tokens()` block to the component's SCSS or to a - scoped block in `styles.scss` - -When a specific component needs a different density or spacing from the global default, -use `theming_set_size` or `theming_set_spacing` with the `component` parameter — this -scopes `--ig-size` or `--ig-spacing` to that component’s selector rather than applying -globally. For compound components, use `scope` with a sub-component selector. Only -apply these globally (`:root`) when the entire app has a clearly distinct density. -Leave `theming_set_roundness` at its default unless the user explicitly requests a -change. Never derive multiplier values from Figma pixel values. -See `references/design-token-bridge.md § Spacing, Sizing, and Roundness`. - ---- - -## Phase 4 — Implementation - -**Goal:** build the Angular view(s) that match the artboard decomposition from Phase 2. - -### Implementation Rules - -1. **Never generate component code without reading its `get_doc` result first** (Phase 2b) -2. **Section by section** — layout → navigation → primary content → secondary → data -3. Follow Angular standalone component conventions and AGENTS.md coding standards -4. Import components from their specific entry points, never from the root barrel -5. Use CSS Grid first to match Figma frame proportions; add Flexbox for sub-regions -6. Apply theming via the SCSS classes and tokens generated in Phase 3 -7. Use typed mock data that matches the design's density and domain -8. Keep layout, spacing, and typography in SCSS files — not inline styles -9. For DV components (charts, maps, gauges), set visual properties via component inputs - as described in [references/figma-component-map.md](references/figma-component-map.md) -10. After implementing each major section, save and check in the browser (if dev server is running) -11. **Global input type:** if the Figma design uses `border`-type inputs globally (detected - via variant indicator nodes in Phase 1d), set the `IGX_INPUT_GROUP_TYPE` injection token - once in `app.config.ts` rather than `type="border"` on every component. This covers all - compound components that wrap `IgxInputGroup` internally (`IgxSimpleCombo`, - `IgxDatePickerComponent`, `IgxDateRangePickerComponent`, `IgxTimePickerComponent`, - `IgxSelectComponent`): - ```typescript - // app.config.ts - import { IGX_INPUT_GROUP_TYPE } from 'igniteui-angular/input-group'; - // in providers array: - { provide: IGX_INPUT_GROUP_TYPE, useValue: 'border' } - ``` -12. **Layout surfaces:** for every entry in the Phase 1g Surfaces table, add a CSS class - with the recorded `background`, `border-radius`, `padding`, `border`, and `box-shadow`. - Never leave a section transparent if the Figma surface has a background. Never add a - background to a section that floats on the page background in the Figma design. -13. **Implement only controls that appear in the Figma artboard.** Do not add toolbar - buttons, actions, or UI elements that look useful but are not visible in the design - context output for that artboard. - -### Layout Strategy - -Translate Figma frame dimensions into CSS Grid first: - -```scss -// Artboard: 1440×900px, sidebar 280px, content 1160px -.app-layout { - display: grid; - grid-template-columns: 280px 1fr; - grid-template-rows: 64px 1fr; - min-height: 100vh; -} -``` - -Match desktop proportions before adding responsive breakpoints. - -### Angular Project Structure - -For a new view or page generated from a Figma artboard, create: - -``` -src/app/ - / - .component.ts ← standalone component - .component.html ← template - .component.scss ← styles + component theme overrides -``` - -Register the route in `app.routes.ts` when the project uses routing. - ---- - -## Phase 5 — Visual Validation (Playwright MCP) - -**Goal:** measure and compare the running app against the Figma reference screenshots -from Phase 1c. Use the measurement-driven loop — compare numbers, not impressions. - -Read [references/validation-patterns.md](references/validation-patterns.md) in full -before running any Playwright tool. - -### 5a: Ensure the Dev Server Is Running - -Ask the user for the local dev URL if not already known (default: `http://localhost:4200`). -Navigate to confirm the app is running: - -``` -playwright_browser_navigate({ url: "http://localhost:4200" }) -playwright_browser_console_messages() // check for startup errors -``` - -### 5b: Match Viewport to Artboard Dimensions - -Resize the browser to match the Figma artboard dimensions captured in Phase 1c: - -``` -playwright_browser_resize({ width: , height: }) -playwright_browser_navigate({ url: "" }) // re-navigate after resize -``` - -> **Always re-navigate after resize.** The browser may reset to `about:blank` on -> viewport change. This is a known Playwright MCP pitfall. - -### 5c: Capture and Compare Screenshots - -> **IMPORTANT — Figma MCP is session-bound.** To get a fresh Figma reference screenshot -> for comparison, ask the user to select the artboard in Figma, then call -> `figma_get_screenshot({})`. Alternatively, use the Phase 1c reference screenshots -> already saved to disk. - -For **each target artboard** (run the full 5c–5f loop once per page): - -1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* -2. Navigate the browser to the corresponding route. -3. Take a browser screenshot: - ``` - playwright_browser_take_screenshot({ type: "png" }) - ``` -4. Do a **section-by-section** visual comparison against the Phase 1c reference: - - top bar → sidebar → **every section in the Phase 1g Surfaces table** → footer -5. Do **not** advance to the next artboard until no Critical/Major issues remain on the current one. - -### 5d: Measure Computed Styles - -For each section with visible differences — and **mandatorily for every entry in the -Phase 1g Surfaces table** — use `playwright_browser_evaluate` to extract exact values. -Pass code as a **plain JavaScript function string** using the `function` parameter -(see [references/validation-patterns.md](references/validation-patterns.md)): - -``` -playwright_browser_evaluate({ - function: "() => { var el = document.querySelector(''); if (!el) return { error: 'not found' }; var s = getComputedStyle(el); var r = el.getBoundingClientRect(); return { fontSize: s.fontSize, backgroundColor: s.backgroundColor, padding: s.padding, borderRadius: s.borderRadius, border: s.border, gap: s.gap, height: Math.round(r.height), width: Math.round(r.width) }; }" -}) -``` - -**Surfaces audit (mandatory for every page):** For every section in the Phase 1g Surfaces -table, assert: -- `backgroundColor` is **not** `rgba(0, 0, 0, 0)` when the surface has a background color -- `backgroundColor` **is** `rgba(0, 0, 0, 0)` when the design shows the section floating - on the page background (no card wrapper) -- All child elements shown inside the surface card in Figma are enclosed within the card's - bounding rect in the DOM - -**Action controls audit (mandatory for every page):** Count and name all visible action -buttons and toolbar controls. Compare against the Phase 1d inventory — any button not -recorded in the Figma design context is fabricated and must be removed. - -Compare all returned values against the Figma spec (from Phase 1d design context). - -### 5e: Classify and Report Mismatches - -| Severity | Category | Example | Action | -| ------------ | --------------- | ----------------------------------------- | --------------------------- | -| **Critical** | Missing element | Button in Figma, absent in code | Auto-fix | -| **Major** | Wrong component | Figma shows dropdown, code has text input | Auto-fix | -| **Minor** | Spacing off | 24px gap in Figma, 16px in code | Auto-fix if straightforward | -| **Cosmetic** | Color shade | `#333` vs `#2d2d2d` | Report only | - -For each mismatch, produce: - -``` -ISSUE: -LOCATION:
-FIGMA: -RENDERED: -SEVERITY: -FIX: -``` - -### 5f: Apply Corrections - -Fix Critical and Major issues immediately. After applying fixes, re-navigate and take a -fresh screenshot to confirm: - -``` -playwright_browser_navigate({ url: "" }) -playwright_browser_take_screenshot({ type: "png" }) -``` - -Repeat the measure → fix → re-verify loop until no Critical or Major issues remain. - -### 5g: Accessibility Snapshot - -Take an accessibility snapshot to verify the structural integrity of the view: - -``` -playwright_browser_snapshot() -``` - -Check that: - -- Interactive elements have accessible labels -- Headings follow a logical hierarchy -- Navigation landmarks are present - ---- - -## Critical Rules - -- **Phase 0 is not optional.** Never skip MCP verification. -- **Phase 2b before code.** Never write a selector you have not read from a doc. -- **Phase 1c screenshots are immutable ground truth.** Never overwrite them; always - compare against the original Figma state. -- **Re-navigate after resize** in Phase 5 to avoid Playwright's browser reset bug. -- **Rate-limit Figma MCP calls.** Use `figma_get_metadata` for discovery, then targeted - `figma_get_design_context` per artboard. Batch screenshot calls. -- **Fail fast on 3 retries.** If the same correction fails three times, stop, report - the issue to the user, and ask for guidance. -- **Do not modify dependency manifests or lock files without asking.** Identify the exact - packages and versions required, then get approval before installing. - ---- - -## Related Skills - -- [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) — deep reference for non-grid components -- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — deep reference for grid, tree-grid, hierarchical-grid, pivot-grid -- [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md) — theming system architecture and advanced palette patterns -- [`igniteui-angular-generate-from-image-design`](../igniteui-angular-generate-from-image-design/SKILL.md) — fallback when no Figma file is available (static image input) diff --git a/.agents/skills/igniteui-angular-figma-to-app/references/asset-extraction.md b/.agents/skills/igniteui-angular-figma-to-app/references/asset-extraction.md deleted file mode 100644 index 346135c..0000000 --- a/.agents/skills/igniteui-angular-figma-to-app/references/asset-extraction.md +++ /dev/null @@ -1,393 +0,0 @@ -# Asset Extraction from Figma - -> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** -> -> Use this file in Phase 1h to identify and extract image assets from Figma artboards -> before implementation. Read in full before calling any extraction tool. -> -> **Zero-placeholder policy:** every image asset visible in the Figma design must be -> extracted and committed to `src/assets/` before Phase 4 begins. Gradient placeholders -> and empty `
` boxes are not acceptable. If the highest-fidelity method is -> unavailable, use the next tier — but always extract something real. - ---- - -## Step 0 — Acquire the Figma File Key (Required for REST API) - -The Figma REST API requires a **file key** — the identifier embedded in every Figma -file URL. Without it, you can still extract assets using Tier 2 and Tier 3 methods -below, but the REST API (Tier 1) produces the highest quality output and should always -be the first attempt. - -**Ask the user for the file key at the start of Phase 1h:** - -> "To extract image assets at the highest quality, I need the Figma file key. -> In the Figma desktop app: -> -> 1. Right-click the file tab at the top → **Copy link** (or go to **File → Share** and copy the URL) -> 2. The URL looks like: `https://www.figma.com/design/ABCDEF1234567890/My-File-Name` -> 3. The file key is the segment after `/design/`: **`ABCDEF1234567890`** -> -> Please share that key (or the full URL). If you cannot access it right now, I will -> proceed with the desktop-app extraction methods and note which assets need to be -> re-exported at higher quality." - -**Extracting the key from a URL (if the user pastes it):** - -```bash -# URL format: https://www.figma.com/design//?... -# Extract key with sed: -echo "https://www.figma.com/design/ABCDEF1234567890/My-App" \ - | sed -E 's|.*/design/([^/]+)/.*|\1|' -# → ABCDEF1234567890 -export FILE_KEY="ABCDEF1234567890" -``` - -**Your Figma personal access token** (same one used for the MCP server) is needed for REST calls. Store it as an environment variable: - -```bash -export FIGMA_TOKEN="your-personal-access-token" -``` - ---- - -## Two Fundamentally Different Types of Image Assets - -Figma stores images in two distinct ways — understanding the difference is essential for choosing the right extraction method: - -| Type | What it is | Figma signal | Best extraction method | -| ---------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------- | ---------------------------------------- | -| **Image fill** | A photo, texture, or raster image dragged/pasted into Figma. Stored as an IMAGE fill on a RECTANGLE or FRAME node. | Layer has fill of type `IMAGE`; `imageRef` in node data | REST API Method A → original source file | -| **Vector asset** | A logo, icon, or illustration drawn in Figma using vector tools. | Node type `VECTOR`, `BOOLEAN_OPERATION`, or `GROUP` | REST API Method B → clean SVG | - -Do **not** confuse these with Ignite UI component instances — those become Angular components, not extracted assets. - ---- - -## Step 1 — Identify Image Nodes - -### Naming patterns to look for in `figma_get_metadata` - -Scan the XML returned by `figma_get_metadata` for layer names matching: - -| Naming pattern | Likely asset type | Action | -| -------------------------------------------------- | ----------------- | ----------------------------------------- | -| `_Image`, `_Photo`, `_Picture`, `image`, `photo` | Raster image fill | Extract as PNG | -| `_Hero`, `_Banner`, `_Cover`, `hero`, `banner` | Large raster fill | Extract as PNG (2× scale) | -| `_Thumbnail`, `_Avatar`, `_Illustration` | Raster image fill | Extract as PNG | -| `_Logo`, `_Brand`, `logo`, `brand` | Vector or raster | If vector: extract as SVG; if raster: PNG | -| `_Icon/` prefix (custom icons not in igx-icon set) | Custom SVG icon | Extract as SVG | -| `_Background`, `_Bg`, `bg`, `background` | Large raster fill | Extract as PNG | -| `_Illustration`, `_Art`, `_Pattern` | Vector or raster | Classify before extracting | - -> **Ignore these** — do NOT extract them as image assets: -> -> - Any layer whose name starts with `_Button`, `_Input`, `_Grid`, `_Card`, etc. -> (Indigo.Design UI Kit component instances → implement as IgxXxx components) -> - `igx-icon` glyph nodes (use `` in Angular instead) -> - Artboard/frame boundaries themselves - -### Size heuristic - -Large rectangles (width > 200px or height > 200px) at key layout positions (hero area, -sidebar background, card thumbnail slot) are almost always image fills. - -Small nodes (< 48×48px) named with icon-like names are usually SVG icons. - -### Confirm with design context - -For ambiguous nodes, look at the `figma_get_design_context` output for the artboard. -Each image asset appears as either: - -- An `` — confirms it is a raster fill; note the node ID -- Inline SVG or an `` with `.svg` extension — confirms it is a vector; note the node ID - -Note all localhost image URLs from the design context — these are needed for Tier 2 -extraction if the REST API is unavailable. - ---- - -## Step 2 — Extract at the Highest Available Fidelity - -Use this **four-tier decision tree**. Start at Tier 1. Move to the next tier only if -the previous one is unavailable for this specific asset. - -``` -Do you have the FILE_KEY? -├─ YES → Use Tier 1 (REST API). Always the best. -└─ NO → Did figma_get_design_context include a localhost URL for this asset? - ├─ YES → Use Tier 2 (download localhost URL to disk). - └─ NO → Can you get a clean node screenshot? - ├─ YES → Use Tier 3 (figma_get_screenshot per node). - └─ NO → Use Tier 4 (CSS gradient/color placeholder as last resort, - with a TODO comment to replace later). -``` - -**After completing Phase 4, if you used Tier 2 or Tier 3 for any asset:** - -> Tell the user: "The following assets were extracted at reduced quality because the -> Figma file key was not available: [list]. To replace them with the original -> source files, run the Tier 1 REST API commands in Step 2a once you have the file key." - ---- - -### Tier 1 — REST API (Highest Fidelity) - -**Requires:** `FILE_KEY` and `FIGMA_TOKEN`. - -#### Method A — Original Image Fills - -Use this to download **photos, textures, and raster images** that were uploaded to -Figma (identified by `imageRef` in node fill data). Returns the original source file -at its native resolution — never a re-render. - -```bash -# Step A.1 — Get all image fill URLs in the file -curl -s \ - -H "X-Figma-Token: $FIGMA_TOKEN" \ - "https://api.figma.com/v1/files/$FILE_KEY/images" \ - -o /tmp/figma_image_fills.json - -# Response: { "images": { "": "", ... } } - -# Step A.2 — Get node fill data to match imageRef → node -curl -s \ - -H "X-Figma-Token: $FIGMA_TOKEN" \ - "https://api.figma.com/v1/files/$FILE_KEY/nodes?ids=$NODE_IDS" \ - -o /tmp/figma_nodes.json -# In the response, look for: "fills": [{ "type": "IMAGE", "imageRef": "abc123" }] -# Match "abc123" → URL from figma_image_fills.json - -# Step A.3 — Download to assets folder -mkdir -p src/assets/images src/assets/icons -IMAGE_URL=$(jq -r '.images[""]' /tmp/figma_image_fills.json) -curl -sL "$IMAGE_URL" -o src/assets/images/hero-background.jpg -``` - -> **URL expiry:** image fill URLs expire in **14 days**. Download during the session. - -#### Method B — Node Export (SVG, PNG, JPG) - -Use this to export **any node** as SVG, PNG, or JPG. Best for logos, custom icons, -vector illustrations, and raster compositions. - -```bash -mkdir -p src/assets/images src/assets/icons - -# SVG export (vectors — logos, icons, illustrations) -curl -s \ - -H "X-Figma-Token: $FIGMA_TOKEN" \ - "https://api.figma.com/v1/images/$FILE_KEY?ids=$NODE_IDS&format=svg&svg_outline_text=false&contents_only=true" \ - -o /tmp/figma_svg_export.json - -jq -r '.images | to_entries[] | "\(.key)\t\(.value)"' /tmp/figma_svg_export.json | \ -while IFS=$'\t' read -r nodeId url; do - filename="$(echo "$nodeId" | tr ':' '-').svg" - curl -sL "$url" -o "src/assets/icons/$filename" - echo "Downloaded $nodeId → src/assets/icons/$filename" -done - -# PNG export at 2× (raster compositions, hero banners) -curl -s \ - -H "X-Figma-Token: $FIGMA_TOKEN" \ - "https://api.figma.com/v1/images/$FILE_KEY?ids=$NODE_IDS&format=png&scale=2&contents_only=true" \ - -o /tmp/figma_png_export.json - -jq -r '.images | to_entries[] | "\(.key)\t\(.value)"' /tmp/figma_png_export.json | \ -while IFS=$'\t' read -r nodeId url; do - filename="$(echo "$nodeId" | tr ':' '-').png" - curl -sL "$url" -o "src/assets/images/$filename" -done -``` - -**Key export parameters:** - -| Parameter | Value | When to use | -| ------------------ | ------- | ---------------------------------------------------- | -| `format` | `svg` | Logos, icons, vector illustrations | -| `format` | `png` | Hero backgrounds, thumbnails — always pair `scale=2` | -| `format` | `jpg` | Photos without transparency — use `scale=2` | -| `scale` | `2` | **Always for PNG/JPG** — retina-quality output | -| `svg_outline_text` | `false` | Keep text as `` elements (smaller, accessible) | -| `contents_only` | `true` | Render the node in isolation (default) | - -> **Export URL expiry:** export URLs expire in **30 days**. Download immediately. - ---- - -### Tier 2 — Localhost URL Download (Desktop MCP Fallback) - -**Use when:** the file key is unavailable and `figma_get_design_context` returned -localhost URLs (e.g. `http://localhost:3845/assets/abc123.png`). - -These URLs are served by the Figma desktop app's in-memory renderer and are accessible -via `curl` during the active Figma session. They are **not** the original source file -(they are a renderer output), but they are substantially better than placeholders and -can be committed to the repository. - -```bash -mkdir -p src/assets/images src/assets/icons - -# Extract localhost URLs from a design context output and download them -# Replace with the actual URL found in figma_get_design_context output -curl -sL "http://localhost:3845/assets/.png" -o src/assets/images/hero-background.png -curl -sL "http://localhost:3845/assets/.svg" -o src/assets/icons/logo.svg -``` - -**Finding localhost URLs in design context output:** - -In the React+Tailwind code returned by `figma_get_design_context`, look for: - -- `const imgXxx = "http://localhost:3845/assets/.";` at the top of the output -- `` or `background-image` references inline - -Each `const` at the top is an image asset. Note its variable name, the URL, and which -Figma node it belongs to (from context around the `` tag). - -**Limitations of Tier 2 assets:** - -- Raster renders — vectors become PNGs, not SVGs -- Renderer resolution (typically 2×) — adequate for most uses -- Expire when the Figma desktop app closes — **must be downloaded before closing Figma** -- Must be renamed from `.png` to descriptive names before committing - -**Commit as-is** — they are real assets. Add a comment in the asset manifest: - -```typescript -// TODO: Replace with Tier 1 REST API export once FILE_KEY is available -heroBg: 'assets/images/hero-background.png', // extracted from Figma session -``` - ---- - -### Tier 3 — `figma_get_screenshot` per Node - -**Use when:** no file key AND no localhost URLs were produced for a specific node. - -`figma_get_screenshot` renders any currently-selected Figma node as a PNG screenshot. -Ask the user to select each image node in Figma, then call the tool. - -``` -// 1. Ask: "In Figma, please click the [Hero Background] layer to select it." -// 2. After confirmation: -figma_get_screenshot({}) -// 3. The returned image is a 1× screen-capture PNG. Save it to src/assets/images/. -``` - -**Limitations:** - -- 1× resolution — suitable as a placeholder but blurry on retina screens -- Rasterizes all vectors — logos become PNGs -- May include surrounding canvas elements - -Label these assets clearly in the manifest: - -```typescript -// TODO: Re-export at 2× via Tier 1 or Tier 2 — current version is 1× screen capture -heroBg: 'assets/images/hero-background.png', -``` - ---- - -### Tier 4 — CSS Fallback (Last Resort Only) - -**Use only when** an asset is confirmed to be a pure color fill or a gradient — not when -an image exists in Figma but extraction failed. Never use Tier 4 because extraction -feels difficult. - -```scss -// Only acceptable when the Figma layer is genuinely a gradient, not a photo -.hero-banner { - // TODO: Replace with real asset — extraction blocked (no file key, no session URL) - background: linear-gradient(135deg, #0d1b3e 0%, #1a0533 100%); -} -``` - -If you use Tier 4, add the `TODO` comment and include it in the post-session handoff -notes to the user. - ---- - -## Step 3 — Build an Asset Manifest - -After extraction, create a manifest so the implementation phase uses consistent paths: - -```typescript -// src/app//_assets.ts — generated during Phase 1h - -export const PAGE_ASSETS = { - // Figma node 123:456 — "Hero/Background" layer - // Tier 1: REST API PNG export at 2× - heroBg: 'assets/images/hero-background.jpg', - - // Figma node 789:012 — "_Logo/Main" layer - // Tier 1: REST API SVG export - logo: 'assets/icons/logo.svg', - - // Figma node 345:678 — "Card/Thumbnail" layer - // Tier 2: localhost URL download (TODO: re-export via REST API) - cardThumbnail: 'assets/images/card-thumbnail.png', -} as const; -``` - -Name files by layer purpose, not by node ID. - ---- - -## Step 4 — Angular Usage Patterns - -### Static images via `NgOptimizedImage` - -```html - -Dashboard hero background -``` - -Import `NgOptimizedImage` in the component's `imports` array. Note: `NgOptimizedImage` -does **not** work for inline base64 images. - -### Background images via SCSS - -```scss -.dashboard-hero { - background-image: url('/assets/images/hero-background.jpg'); - background-size: cover; - background-position: center; -} -``` - -### Inline SVG logos - -```html -Company logo -``` - -### Igx-icon for kit icons (do NOT extract as assets) - -Standard Material icons and `imx-icons` (Material Icons Extended) are registered at -runtime — never extract them as image files: - -```html -settings -``` - -See `figma-component-map.md § Material Icons Extended` for setup. - ---- - -## Pitfalls - -| Pitfall | Consequence | Fix | -| ------------------------------------------------------------ | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| Skipping asset extraction entirely (gradient placeholders) | Implementation looks nothing like the design; Phase 5 fails | Always use at least Tier 2 or Tier 3 — never skip | -| Not asking for the file key before starting extraction | Defaults to Tier 2/3 when Tier 1 was actually possible | Ask for the file key at the start of Phase 1h (see Step 0) | -| Using localhost URLs without downloading them in the session | URLs expire when Figma closes; assets become broken | Download with `curl` immediately; commit the files | -| Naming assets by node ID ("node-123-456.png") | Unmaintainable; breaks if Figma is reorganized | Name by layer purpose: `hero-background.jpg`, `company-logo.svg` | -| Using `figma_get_screenshot` for SVG logos | Logo is rasterized to PNG; loses vector scalability | Use Tier 1 Method B with `format=svg` instead; fall back to Tier 2 only if unavailable | -| Exporting PNG at `scale=1` | Blurry on HiDPI/retina screens | Always use `scale=2` | -| Storing Figma CDN export URLs in source code | URLs expire in 14–30 days; breaks production | Only store local `src/assets/...` paths in code | -| Downloading SVG with `svg_outline_text=true` (default) | All text converted to paths; larger file; no accessibility | Set `svg_outline_text=false` | -| Extracting Ignite UI component instances as images | Produces a static screenshot instead of an interactive component | Identify layer names from `figma-component-map.md`; those are components, not assets | -| Extracting background colors or gradients as images | Inflates bundle size, breaks theming | Colors → CSS custom properties or Ignite UI theming tokens | -| Not creating asset directories before running curl | Writes fail silently or to the wrong path | Always run `mkdir -p src/assets/images src/assets/icons` first | -| Large SVGs from complex illustrations | Slow render, large bundle | Consider PNG for illustrations > 50KB as SVG; SVG is best for logos and icons | diff --git a/.agents/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md b/.agents/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md deleted file mode 100644 index 6ce6526..0000000 --- a/.agents/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md +++ /dev/null @@ -1,324 +0,0 @@ -# Figma Variables → Ignite UI Angular Theming Bridge - -> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** -> -> Use this file in Phase 3 to translate Figma variable values (from `figma_get_variable_defs`) -> into Ignite UI Theming MCP inputs. Read this file in full before calling any theming tool. - ---- - -## How the Indigo.Design UI Kits Organize Variables - -The **Indigo.Design UI Kits** are Figma component libraries published by Infragistics. -Designers build their own app frames in Figma using these kits as shared libraries. -The kits come in four design-system variants, each with light and dark themes: - -| Kit variant | Figma library name pattern | Ignite UI `designSystem` | -| ---------------------- | ----------------------------------------------- | ------------------------ | -| Material (most common) | `Indigo.Design UI Kit for Material` | `"material"` | -| Fluent | `Indigo.Design UI Kit for Fluent` | `"fluent"` | -| Bootstrap | `Indigo.Design UI Kit for Bootstrap` | `"bootstrap"` | -| Indigo | `Indigo.Design UI Kit` / `Indigo.Design System` | `"indigo"` | - -**Identifying the active kit variant** is the first task in Phase 3 because it sets -the `designSystem` parameter for `theming_create_theme`. Use these signals in **strict -precedence order** — stop at the first clear match: - -1. **Library source name** — `figma_get_design_context` and `figma_get_metadata` responses - may reference the source library file name (e.g. `"Indigo.Design UI Kit for Material"`). -2. **Variable collection name** — `figma_get_variable_defs` may return collection names - that include the design system (e.g. `Material/color/primary`). -3. **Elevation variable structure** — inspect the `Elevations/*` variables from - `figma_get_variable_defs`: - - **Three-layer DROP_SHADOW** (umbra + penumbra + ambient, `Elevations/Shadow 01-03`) → **Material** - - **Single-layer DROP_SHADOW** → Indigo, Fluent, or Bootstrap -4. **Palette shade naming** — variables named `primary/500`, `primary/100`–`primary/900` - follow the Material 100–900 convention → likely **Material**. -5. **Visual heuristics** (use only when all above are inconclusive) — see the - [Design System Detection table](#design-system-detection-from-figma) below. - -> **Never use font name as a primary signal.** "Titillium Web" is the default body font -> in the Indigo.Design UI Kit for Material — it is not exclusive to any single kit variant. - -All four kit variants share the same variable naming conventions described below. The Ignite UI theming system uses Figma variable collections that mirror its own token structure: - -``` -Primitives collection → raw palette values (e.g. blue/500 = #6200EE) -Semantic collection → role-based aliases (e.g. color/primary = alias → blue/500) -Component collection → per-component overrides (e.g. button/background = alias → color/primary) -``` - -The `figma_get_variable_defs` response returns a flat map of resolved variable names to values. Use the sections below to identify which variables map to which theming inputs. - ---- - -## Global Palette Mapping - -### Primary Color - -| Figma Variable Pattern | Theming Input | Notes | -| ---------------------- | ------------------------------------- | --------------------------------------- | -| `color/primary` | `primary` in `theming_create_palette` | Use the resolved hex value | -| `primary/500` | `primary` | The 500 shade is the seed color | -| `Primary/Default` | `primary` | Alternative naming in some kit versions | -| `palette/primary/500` | `primary` | Prefixed naming pattern | - -> **Parameter names:** `theming_create_palette` uses `primary`, `secondary`, `surface` -> (short names). `theming_create_theme` uses `primaryColor`, `secondaryColor`, -> `surfaceColor` (long names). Do **not** mix them up. - -### Secondary / Accent Color - -| Figma Variable Pattern | Theming Input | Notes | -| ---------------------- | --------------------------------------- | ---------------------------------- | -| `color/secondary` | `secondary` in `theming_create_palette` | — | -| `secondary/500` | `secondary` | — | -| `Secondary/Default` | `secondary` | — | -| `color/accent` | `secondary` | Some kit variants call it "accent" | - -### Surface / Background Color - -| Figma Variable Pattern | Theming Input | Notes | -| ---------------------- | ------------------------------------- | ------------------- | -| `color/surface` | `surface` in `theming_create_palette` | The main background | -| `surface/default` | `surface` | — | -| `Surface` | `surface` | — | -| `color/background` | `surface` | Alternative naming | - -### Gray / Neutral Palette - -The Ignite UI theming system derives the gray scale automatically from the surface color. -You do **not** need to pass gray values to `theming_create_palette` explicitly unless you -need a custom gray family. If the Figma file has explicit gray variables, compare them -against the auto-generated palette after calling `theming_create_palette` and only add -a custom gray override if they differ significantly. - -### Semantic Status Colors - -| Figma Variable Pattern | Theming Input | Notes | -| -------------------------------- | ------------------------------------------ | -------- | -| `color/success` or `success/500` | `successColor` in `theming_create_palette` | Optional | -| `color/warning` or `warning/500` | `warningColor` in `theming_create_palette` | Optional | -| `color/error` or `error/500` | `errorColor` in `theming_create_palette` | Optional | -| `color/info` or `info/500` | `infoColor` in `theming_create_palette` | Optional | - ---- - -## Typography Mapping - -| Figma Variable Pattern | Theming Input | Notes | -| -------------------------------- | --------------------------------------------------- | ------------------------------------- | -| `typography/font-family` | `fontFamily` in `theming_create_typography` | Primary font | -| `typography/body/font-family` | `fontFamily` | Body font family | -| `typography/heading/font-family` | `fontFamily` | Use if heading font differs from body | -| `font/primary` | `fontFamily` | Alternative naming | -| `font/display` | Pass as `displayFontFamily` if the tool supports it | Display/headline font | - -> **fontFamily double-quote bug:** `theming_create_theme` may double-wrap the fontFamily -> string in its Sass output, producing invalid Sass such as `""'Titillium Web', sans-serif""`. -> If you see this pattern, strip the outer quotes before applying to `styles.scss`: -> -> ```scss -> // BAD (generated with bug) -> $font-family: -> '' 'Titillium Web', -> sans-serif ''; -> // GOOD (manually corrected) -> $font-family: 'Titillium Web', sans-serif; -> ``` - -> **Comma-separated font families** must be wrapped in parentheses when used in Sass -> typography mixins: -> -> ```scss -> // BAD — parsed as multiple Sass arguments -> @include typography($font-family: 'Roboto', 'Arial', sans-serif); -> // GOOD -> @include typography( -> $font-family: ( -> 'Roboto', -> 'Arial', -> sans-serif, -> ) -> ); -> ``` - ---- - -## Spacing, Sizing, and Roundness — Do Not Map Directly - -> **These Ignite UI theming tools are NOT equivalent to Figma spacing values.** -> Do not create a mapping between Figma pixel values and these tools. - -`theming_set_spacing` and `theming_set_roundness` accept **multipliers**, not pixel values. Passing a Figma `spacing/md = 16` as `theming_set_spacing({ spacing: 16 })` would produce a 1600% increase over the default — a catastrophic result. - -`theming_set_size` accepts a **density enum** (`small`, `medium`, `large`) — it controls how tightly packed components render, not a pixel measurement. - -### When to touch these tools (sparingly) - -| Tool | Use only when | Never use because | -| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `theming_set_size` | The Figma design clearly and consistently uses a noticeably tighter or looser component density than the design system default — e.g. a data-dense admin UI vs a spacious marketing page | A Figma spacing variable happens to match the name "compact" | -| `theming_set_spacing` | Explicitly requested by the user or required to match a very specific density contract; default (1.0) should be the starting point | A Figma `spacing/*` pixel value looks similar to the multiplier number | -| `theming_set_roundness` | The entire app has a clearly distinct border-radius language from the design system default (e.g. fully squared off vs fully rounded) | A Figma `border-radius/md = 8` maps numerically to the multiplier | - -### The correct adjustment path - -When a specific component needs tighter or looser density or spacing, scope `--ig-size` -and `--ig-spacing` to that component’s selector — not raw CSS overrides, not -`::ng-deep`. Both `theming_set_size` and `theming_set_spacing` accept a `component` -parameter that generates exactly this scoped output: - -``` -// Scoped size for one component type -theming_set_size({ component: "calendar", size: "small", platform: "angular" }) -// → igx-calendar { --ig-size: var(--ig-size-small); } - -// Scoped spacing: 0.75 = 75% of default -theming_set_spacing({ component: "calendar", spacing: 0.75, platform: "angular" }) -// → igx-calendar { --ig-spacing: 0.75; } -``` - -For compound components, scope to a sub-component selector via the `scope` parameter: - -``` -theming_set_size({ scope: "igx-grid-toolbar", size: "small", platform: "angular" }) -``` - -Or set the CSS custom properties directly in SCSS: - -```scss -igx-calendar { - --ig-size: var(--ig-size-small); - --ig-spacing: 0.75; -} -``` - -The Indigo.Design kit’s component proportions are already calibrated for each design -system; start from the defaults and only adjust when there is a clear visual reason. - ---- - -## Light vs Dark Mode Detection - -Detect from the Figma artboard: - -| Figma Signal | Action | -| -------------------------------------------------------- | ---------------------------------------------------------------------- | -| Dark artboard background (`#121212`, `#1a1a1a`, similar) | Use `variant: "dark"` in `theming_create_theme` | -| Light artboard background (`#fff`, `#f5f5f5`, similar) | Use `variant: "light"` in `theming_create_theme` | -| Multiple artboards — one light, one dark | Generate both theme variants with a `prefers-color-scheme` media query | -| `color/mode` variable present | Its value (`light` or `dark`) is the authoritative signal | - ---- - -## Design System Detection from Figma - -| Figma Visual Signal | Likely Design System | `designSystem` Value | -| ------------------------------------------------------------------ | -------------------------- | ----------------------- | -| Three-layer `DROP_SHADOW` on elevation variables (`Shadow 01-03`) | Material Design | `"material"` | -| Prominent single-layer shadows, rounded cards, ripple effects | Material Design | `"material"` | -| Flat surfaces, sharp corners, Segoe/Inter font | Microsoft Fluent | `"fluent"` | -| Component borders, Bootstrap-like grid | Bootstrap | `"bootstrap"` | -| Heavy use of purple/indigo accents, rounded corners, single shadow | Infragistics Indigo | `"indigo"` | -| `primary/500`, `primary/900` palette shade naming | Material (100–900 palette) | `"material"` | -| Explicit `$light-material-schema` or similar in Figma descriptions | Match the schema name | Use corresponding value | - ---- - -## Per-Component Token Resolution - -For each Ignite UI Angular component you use, follow this lookup order: - -### Step 1: Discover component tokens - -``` -theming_get_component_design_tokens({ component: "" }) -``` - -The result lists every available token with its name, type, and description. - -### Step 2: Match Figma variables to token names - -The **Indigo.Design UI Kits** use component-level variables that follow the pattern: - -``` -// -``` - -Examples: - -- `button/background` → token `background` in the button component -- `button/foreground` or `button/text-color` → token `foreground-color` -- `chip/background/selected` → token `selected-chip-color` -- `grid/header-background` → token `header-background` -- `navbar/background` → token `background` - -**Lookup process:** - -1. Take the Figma variable name (e.g. `button/background`) -2. Strip the component prefix (`background`) -3. Match it against the token list from `theming_get_component_design_tokens` -4. If no exact match, find the token whose description mentions the same visual role - -### Step 3: Common component token patterns - -| Component | Figma Variable | Likely Token Name | Notes | -| --------- | -------------------------- | ----------------------- | ----------------------- | -| Button | `button/background` | `background` | For `contained` variant | -| Button | `button/foreground` | `foreground-color` | Text color | -| Button | `button/border` | `border-color` | For `outlined` variant | -| Chip | `chip/background` | `background` | Default state | -| Chip | `chip/selected-background` | `selected-chip-color` | — | -| Grid | `grid/header/background` | `header-background` | — | -| Grid | `grid/row/background` | `content-background` | — | -| Grid | `grid/row/hover` | `row-hover-background` | — | -| Navbar | `navbar/background` | `background` | — | -| Input | `input/background` | `box-background` | Box/filled variant | -| Input | `input/border` | `border-color` | Line/border variant | -| Card | `card/background` | `background` | — | -| Card | `card/border` | `border-color` | — | -| List | `list/item/background` | `item-background` | — | -| List | `list/item/hover` | `item-hover-background` | — | -| Dialog | `dialog/background` | `background` | — | - -### Step 4: Generate component theme - -Pass **only tokens that differ from the global theme** to avoid over-specification: - -``` -theming_create_component_theme({ - component: "", - platform: "angular", - licensed: , - tokens: { - "background": "", - "foreground-color": "" - // only include tokens whose value differs from the generated global palette - } -}) -``` - -Apply the result using the `@include tokens()` call returned by the tool. - ---- - -## Variable Resolution Priority - -When multiple Figma variables could map to the same theming input, use this priority: - -1. **Component-scoped variable** (e.g. `button/background`) → per-component token -2. **Semantic role variable** (e.g. `color/primary`) → global palette input -3. **Primitive variable** (e.g. `primary/500`) → global palette seed color -4. **Raw hex/rgb value** (no variable) → extract directly from the design context - ---- - -## What to Skip - -Do **not** call theming tools for: - -- Chart, gauge, and map DV components → configure via component `[input]` bindings only -- Tile Manager and Dock Manager → these are web components with their own CSS custom properties -- Pure layout CSS (margins, grid columns, flex gaps) → write directly in SCSS -- Icon SVG fill colors → use `color` CSS property or the custom `--foreground` CSS property on the `igx-icon` host or its parent diff --git a/.agents/skills/igniteui-angular-figma-to-app/references/figma-component-map.md b/.agents/skills/igniteui-angular-figma-to-app/references/figma-component-map.md deleted file mode 100644 index 636f03f..0000000 --- a/.agents/skills/igniteui-angular-figma-to-app/references/figma-component-map.md +++ /dev/null @@ -1,305 +0,0 @@ -# Indigo.Design UI Kit → Ignite UI Angular Component Map - -> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** -> -> The **Indigo.Design UI Kits** are Figma component libraries (Material, Fluent, Bootstrap, -> Indigo variants) that designers use to build their app screens. Every component instance -> in a design file is drawn from one of these libraries and maps 1:1 to an Ignite UI -> Angular control. -> -> Use this file in Phase 2a to map Figma layer names — as they appear in the kit -> library — to Ignite UI Angular selectors, `get_doc` keys, and key inputs. When a -> layer name is not in this table, call `list_components` then `get_doc` on the closest -> match. - ---- - -## How to Use This File - -1. Find the kit component name (as it appears in the Figma layers panel or the - Indigo.Design kit library) in the **Kit Component Name** column. -2. Read the **Angular Selector** and **IgxXxx Class** for the template. -3. Try the **`get_doc` Key** with `get_doc({ framework: "angular", name: "" })`. - **The doc catalog covers only a subset of components** (verify with `list_components` - once). When no doc exists for a key, use the - [`igniteui-angular-components`](../../igniteui-angular-components/SKILL.md) / - [`igniteui-angular-grids`](../../igniteui-angular-grids/SKILL.md) skill reference files - for usage patterns and `search_api` for member-level API lookups — do not guess. -4. Consult **Key Inputs / Variants** for the properties most commonly configured from - Figma variants. - -> The component names are identical across all four kit variants (Material, Fluent, -> Bootstrap, Indigo). The kit variant determines the theme style, not the component name. - ---- - -## Button Components - -| Kit Component Name | Angular Selector | IgxXxx Class | `get_doc` Key | Key Inputs / Variants | -| -------------------------------------- | ------------------------------------ | ------------------------- | -------------- | ---------------------------------------------------------- | -| `_Button/Flat` | ` -``` - -> **Key inputs summary:** -> - `[rowEditable]="true"` — enables the Done/Cancel overlay per row -> - `[editable]="true"` on each `igx-column` — marks which fields the user can change -> - `[primaryKey]` — **required** for editing to work -> - `[autoGenerate]="false"` — always define columns explicitly when editing is enabled so you control which fields are editable -> - `` with `` — adds hover Edit/Delete buttons and an optional Add Row button automatically - -### Programmatic Row Adding with Default Values - -When starting a new row programmatically, pre-populate fields using `(cellEditEnter)` on the new row: - -```typescript -onCellEditEnter(event: IGridEditEventArgs) { - if (event.isAddRow && event.column.field === 'available') { - event.newValue = true; // default new cars to available - } - if (event.isAddRow && event.column.field === 'year') { - event.newValue = new Date().getFullYear(); - } -} -``` - -```html - -``` - ---- - -## Batch Editing & Transactions - -> **Docs:** [Batch Editing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/batch-editing) (substitute URL prefix per grid type) - -> **Applies to**: Flat Grid, Tree Grid, and Hierarchical Grid. **Pivot Grid does NOT support batch editing.** -> Use batch editing when users need to **edit many rows at once** and commit or discard all changes together, with undo/redo support. - -### Enabling Batch Editing - -```html - - - - - - - - - - -``` - -### Managing Transactions - -```typescript -commitChanges() { - // Exit any active edit before committing - this.gridRef().endEdit(true); - this.gridRef().transactions.commit(this.gridRef().data); -} - -undoLast() { - // Must exit edit mode before undo/redo - this.gridRef().endEdit(true); - this.gridRef().transactions.undo(); -} - -redoLast() { - this.gridRef().endEdit(true); - this.gridRef().transactions.redo(); -} - -discardAll() { - this.gridRef().endEdit(false); - this.gridRef().transactions.clear(); -} -``` - -Use `canUndo` and `canRedo` to control button state: - -```html - - - - -``` - -### Transaction State - -```typescript -// Check if there are pending changes -const hasPendingChanges = this.gridRef().transactions.getAggregatedChanges(false).length > 0; - -// Get all pending transactions -const pending = this.gridRef().transactions.getAggregatedChanges(true); -// Each transaction has: { id, type ('add'|'update'|'delete'), newValue } -``` - -### Sending Batch Changes to Server - -```typescript -saveToServer() { - const changes = this.gridRef().transactions.getAggregatedChanges(true); - - const adds = changes.filter(t => t.type === 'add').map(t => t.newValue); - const updates = changes.filter(t => t.type === 'update').map(t => ({ id: t.id, ...t.newValue })); - const deletes = changes.filter(t => t.type === 'delete').map(t => t.id); - - this.dataService.saveBatch({ adds, updates, deletes }).subscribe(() => { - this.gridRef().transactions.commit(this.gridRef().data); - this.gridRef().transactions.clear(); - }); -} -``` - -## Excel-Style Editing Workflows - -### Inline Cell Editing with Validation - -```html - - - - - - -``` - -```typescript -import { Validators } from '@angular/forms'; - -emailValidators = [Validators.required, Validators.email]; -quantityValidators = [Validators.required, Validators.min(0), Validators.max(9999)]; - -onCellEditDone(event: IGridEditDoneEventArgs) { - // React to edits — e.g., recalculate totals - if (event.column.field === 'quantity' || event.column.field === 'unitPrice') { - this.recalculateRowTotal(event.rowID); - } -} -``` - -### Clipboard Paste for Bulk Edit - -Grids support paste from Excel/spreadsheets by default. Configure clipboard behavior: - -```html - - -``` - -### Row Adding via UI - -```typescript -// Flat Grid / Hierarchical Grid: -this.gridRef().beginAddRowByIndex(0); // at top -this.gridRef().beginAddRowById('ALFKI'); // under a specific row -this.gridRef().beginAddRowByIndex(this.gridRef().data.length); // at end - -// Tree Grid — add as child of a parent: -this.treeGridRef().addRow(newRowData, parentRowID); // add row as child of parentRowID -this.treeGridRef().beginAddRowByIndex(3, true); // add as child of row at index 3 -``` - -Use with Action Strip for visual add/edit actions: - -```html - - - - - - -``` - -## Editing Events Reference - -All grids fire a consistent sequence of events during cell and row editing: - -| Event | Fires When | Cancelable | -|---|---|---| -| `(rowEditEnter)` | Row enters edit mode | Yes | -| `(cellEditEnter)` | Cell enters edit mode (after `rowEditEnter`) | Yes | -| `(cellEdit)` | Cell value is about to be committed | Yes | -| `(cellEditDone)` | Cell value has been committed | No | -| `(cellEditExit)` | Cell exits edit mode | No | -| `(rowEdit)` | Row edit is about to be committed (Done button) | Yes | -| `(rowEditDone)` | Row edit has been committed | No | -| `(rowEditExit)` | Row exits edit mode | No | - -Canceling `(cellEdit)` keeps the cell in edit mode — the value won't commit until Cancel is clicked: - -```typescript -onCellEdit(event: IGridEditEventArgs) { - if (!event.valid) { - event.cancel = true; // prevent committing invalid values - } -} -``` - -## Validation - -### Template-Driven Validation - -Apply Angular validators directly on columns: - -```html - - -``` - -Supported built-in validators: `required`, `min`, `max`, `email`, `minlength`, `maxlength`, `pattern`. - -### Reactive Form Validation - -Use the `formGroupCreated` event to add custom validators when a row enters edit mode: - -```html - - -``` - -```typescript -onFormGroupCreated(event: IGridFormGroupCreatedEventArgs) { - const { formGroup } = event; - formGroup.get('endDate')?.addValidators(this.dateAfterValidator('startDate')); -} -``` - -### Validation Service - -The grid exposes a `validation` service: - -```typescript -// Check if the grid is in a valid state -const isValid = this.gridRef().validation.valid; - -// Get all records with validation errors -const invalid = this.gridRef().validation.getInvalid(); - -// Clear validation state for a specific record (or all if no id) -this.gridRef().validation.clear(recordId); -``` - -## Summaries - -### Built-In Summaries - -```html - -``` - -Default summaries by type: -- **number**: Count, Min, Max, Sum, Average -- **date**: Count, Earliest, Latest -- **string/boolean**: Count - -### Custom Summary Operand - -```typescript -import { IgxNumberSummaryOperand } from 'igniteui-angular/grids/core'; -import { IgxSummaryResult } from 'igniteui-angular/core'; - -class RevenueSummary extends IgxNumberSummaryOperand { - operate(data: number[]): IgxSummaryResult[] { - const result = super.operate(data); - result.push({ - key: 'margin', - label: 'Avg Margin', - summaryResult: data.length ? data.reduce((a, b) => a + b, 0) / data.length * 0.15 : 0 - }); - return result; - } -} - -// Use in component -revenueSummary = RevenueSummary; -``` - -```html - -``` - -### Summaries with Grouping - -When grouping is enabled, summaries appear for each group. Control this with: - -```html - - -``` - -## Key Rules - -1. **Choose the right editing mode** — cell editing (`[editable]` + `(cellEditDone)`) for immediate per-cell saves; row editing (`[rowEditable]="true"` + `(rowEditDone)`) for confirm/cancel per row (**recommended default for CRUD**); batch editing (`[batchEditing]="true"`) for accumulate-then-commit with undo/redo -2. **`[primaryKey]` is required for all editing** — row editing, batch editing, row adding, and row deletion all depend on it (Flat, Tree, Hierarchical, Pivot grids; NOT Grid Lite) -3. **Always set `[autoGenerate]="false"` when editing** — define columns explicitly and mark each with `[editable]="true"` to control exactly what users can change -4. **Batch editing requires `[primaryKey]`** — call `endEdit(true)` before `transactions.undo()`/`redo()`, commit via `transactions.commit(data)` -5. **Cancelable events** — use `event.cancel = true` in `(cellEdit)`, `(rowEdit)`, `(rowEditEnter)`, `(cellEditEnter)` to prevent the action -6. **Validation** — use template-driven validators on columns (`required`, `min`, `max`, `email`, `pattern`) or reactive validators via `(formGroupCreated)` - -Universal rules (viewChild types, directive bundles, signals) are in the [hub](../SKILL.md#universal-rules-every-grid-type). - -## See Also - -- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns -- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization -- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations -- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection -- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.agents/skills/igniteui-angular-grids/references/features.md b/.agents/skills/igniteui-angular-grids/references/features.md deleted file mode 100644 index 3d51203..0000000 --- a/.agents/skills/igniteui-angular-grids/references/features.md +++ /dev/null @@ -1,221 +0,0 @@ -# Grid Features — Grouping, Summaries, Toolbar, Export, Row Drag & More - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For grid setup, column config, sorting, filtering, selection — see [`structure.md`](./structure.md). -> For Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics — see [`types.md`](./types.md). -> For full editing coverage (cell/row/batch) — see [`editing.md`](./editing.md). - -## Contents - -- [Editing](#editing) -- [Grouping (Flat and Tree Grid only)](#grouping-flat-and-tree-grid-only) -- [Summaries](#summaries) -- [Cell Merging](#cell-merging) -- [Toolbar](#toolbar) -- [Export](#export) -- [Virtualization & Performance](#virtualization--performance) -- [Row Drag](#row-drag) -- [Action Strip](#action-strip) -- [Master-Detail (Grid only)](#master-detail-grid-only) -- [Clipboard](#clipboard) -- [Key Rules](#key-rules) - -## Editing - -> **Full editing coverage is in [`editing.md`](./editing.md)**, which includes cell editing, row editing, batch editing with transactions, row adding/deleting, validation, and summaries. Use that reference for any editing task. - -Quick reference: - -| Mode | Key properties | -|---|---| -| **Cell editing** | `[editable]="true"` on columns + `(cellEditDone)` | -| **Row editing** (recommended default) | `[rowEditable]="true"` + `[editable]="true"` on columns + `(rowEditDone)` | -| **Batch editing** | `[batchEditing]="true"` + `[rowEditable]="true"` + `transactions.commit(data)` | - -## Grouping (Flat and Tree Grid only) - -The two grids group differently: - -- **Flat Grid** has built-in GroupBy — `[groupable]="true"` on columns (not on the grid component itself) plus the `groupBy()`/`clearGrouping()` API. -- **Tree Grid** has no `groupBy()` API — it groups via `IgxTreeGridGroupByAreaComponent` (``) paired with the tree-grid grouping pipe that reshapes flat data into a grouped hierarchy. - -```html - - - - - - {{ groupRow.expression.fieldName }}: {{ groupRow.value }} ({{ groupRow.records.length }} items) - - -``` - -Programmatic (Flat Grid): - -```typescript -this.gridRef().groupBy({ fieldName: 'category', dir: SortingDirection.Asc }); -this.gridRef().clearGrouping('category'); -``` - -For advanced programmatic grouping patterns — see [`data-operations.md`](./data-operations.md). - -## Summaries - -> **Full summaries coverage — built-in summaries, custom summary operands, and summaries with grouping — is in [`editing.md`](./editing.md#summaries).** -> -> Quick reference: enable per-column summaries with `[hasSummary]="true"` on an `igx-column`. Default operands: **number** → Count/Min/Max/Sum/Average; **date** → Count/Earliest/Latest; **string/boolean** → Count. - -## Cell Merging - -Merge adjacent cells with equal values: - -```html - - - -``` - -Grid merge modes (`cellMergeMode`): -- `'onSort'` — merge only when the column is sorted **(default)** -- `'always'` — merge regardless of sort state - -Or apply a custom merge strategy at the **grid level** (not column): - -```html - - - -``` - -```typescript -import { DefaultMergeStrategy } from 'igniteui-angular/core'; -// import { DefaultMergeStrategy } from '@infragistics/igniteui-angular/core'; for licensed package - -// Extend DefaultMergeStrategy and override comparer -class PriceRangeMergeStrategy extends DefaultMergeStrategy { - public override comparer(prevRecord: any, record: any, field: string): boolean { - return Math.abs(prevRecord[field] - record[field]) < 10; - } -} - -customMerge = new PriceRangeMergeStrategy(); -``` - -## Toolbar - -> **Full docs in the MCP** — `get_doc` with `grid-toolbar`, `treegrid-toolbar`, or `hierarchicalgrid-toolbar` covers title, built-in actions (hiding, pinning, advanced filtering, exporter), custom content, progress indication, and theming. Prefer those over memory. - -Toolbar components (`IgxGridToolbarComponent` and the action components) import from `igniteui-angular/grids/core` and nest inside the grid element: - -```html - - - Products - - - - - - - - - -``` - -## Export - -> **Full docs in the MCP** — `get_doc` with `grid-export-excel`, `treegrid-export-excel`, `hierarchicalgrid-export-excel`, `pivotGrid-export-excel`, or `exporter-pdf` covers setup, full-data vs. visible exports, multi-column headers, customization events, and known limitations. Prefer those over memory. - -Quick reference — exporter services (`IgxExcelExporterService`, `IgxCsvExporterService`, and their `*ExporterOptions`) import from `igniteui-angular/grids/core`; `inject()` the service and call `export(grid, options)` (respects filtering/sorting) or `exportData(data, options)` (raw data). - -## Virtualization & Performance - -Grids use virtualization by default for both rows and columns — no setup needed. For remote data/paging: - -```html - - -``` - -For full remote virtualization patterns — see [`paging-remote.md`](./paging-remote.md). - -## Row Drag - -```html - - - - arrow_right_alt - - -``` - -Handle drops via `igxDrop` on the target: - -```typescript -import { IDropDroppedEventArgs } from 'igniteui-angular/directives'; - -onDropAllowed(args: IDropDroppedEventArgs) { - this.targetGrid.addRow(args.dragData.data); // row data - this.sourceGrid.deleteRow(args.dragData.key); // primary key -} -``` - -## Action Strip - -Overlay actions on a row: - -```html - - - - - - - -``` - -## Master-Detail (Grid only) - -Expand rows to show arbitrary detail content: - -```html - - - - - -
-

Order Items for {{ dataItem.customer }}

- - -
-
-
-``` - -## Clipboard - -Grids support copy to clipboard by default. Configure via: - -```html - - -``` - -## Key Rules - -1. **Cancelable events** — use `event.cancel = true` in `(rowEdit)`, `(cellEdit)`, `(sorting)`, `(filtering)` to prevent the action -2. **The `groupBy()` API is Flat Grid only** — Tree Grid groups via `igx-tree-grid-group-by-area` + grouping pipe; Hierarchical Grid uses row islands, Pivot Grid uses dimensions - -Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). - -## See Also - -- [`structure.md`](./structure.md) — Column config, sorting UI, filtering UI, selection -- [`types.md`](./types.md) — Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics -- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping -- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization -- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries -- [`state.md`](./state.md) — State persistence -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.agents/skills/igniteui-angular-grids/references/grid-migration.md b/.agents/skills/igniteui-angular-grids/references/grid-migration.md deleted file mode 100644 index ae77b8d..0000000 --- a/.agents/skills/igniteui-angular-grids/references/grid-migration.md +++ /dev/null @@ -1,479 +0,0 @@ -# Ignite UI for Angular - Grid Lite → Premium Data Grid Migration - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** - -## Purpose - -This skill automates the migration from the **open-source Grid Lite** (`igx-grid-lite`, MIT licensed) to the **Premium Data Grid** (`igx-grid`, commercially licensed). Use it when a project outgrows Grid Lite's read-only capabilities and needs enterprise features such as editing, selection, paging, grouping, summaries, export, or state persistence. - -## Required Workflow - -Grid APIs change between releases — do not write migration code from memory. Before producing migration code: - -1. **Identify the current Grid Lite usage** - read the user's existing component files to understand their column configuration, templates, data binding, and any `dataPipelineConfiguration` usage. -2. **Consult the grids skill** - read the relevant reference files from [`igniteui-angular-grids`](../SKILL.md) for the target features the user needs after migration. -3. **Use the MCP server when in doubt** - call `get_doc` or `search_docs` from the `igniteui-cli` MCP server (if available) for Angular to verify current API details. -4. **Only then produce output** - base all code on verified references, not memory. - ---- - -## When to Migrate - -Migrate from Grid Lite to the Premium Grid when the user needs **any** of these features: - -| Required Feature | Grid Lite | Premium Grid | -|---|---|---| -| Cell / Row / Batch editing | No | Yes | -| Row adding / deleting | No | Yes | -| Row / Cell / Column selection | No | Yes | -| Paging (client or remote) | No | Yes | -| GroupBy | No | Yes | -| Summaries (built-in & custom) | No | Yes | -| Column pinning | No | Yes | -| Column moving | No | Yes | -| Master-Detail rows | No | Yes (exclusive to flat grid) | -| Export (Excel / CSV) | No | Yes | -| Toolbar | No | Yes | -| State persistence | No | Yes | -| Advanced filtering | No | Yes | -| Action strip | No | Yes | -| Row drag | No | Yes | -| Clipboard support | No | Yes | -| Cell merging | No | Yes | - -> **IMPORTANT:** The upgrade path from Grid Lite is **always** to `igx-grid` (`IgxGridComponent`). Never recommend a different component type as a substitute. - ---- - -## Migration Checklist - -### Step 1 - Install / Verify the Premium Package - -Grid Lite uses the separate `igniteui-grid-lite` npm package. The Premium Grid is part of the main `igniteui-angular` (or `@infragistics/igniteui-angular`) package. - -> **Important:** Check `package.json` to determine which package variant is installed. If only `igniteui-grid-lite` is present, the user needs to install the full package. - -```bash -# Open-source package -npm install igniteui-angular - -# OR licensed package (requires private registry) -npm install @infragistics/igniteui-angular -``` - -The `igniteui-grid-lite` package can be removed after migration if no other Grid Lite instances remain: - -```bash -npm uninstall igniteui-grid-lite -``` - -### Step 2 - Update Imports - -**Before (Grid Lite):** - -```typescript -import { - IgxGridLiteComponent, - IgxGridLiteColumnComponent, - IgxGridLiteCellTemplateDirective, - IgxGridLiteHeaderTemplateDirective, -} from 'igniteui-angular/grids/lite'; -``` - -**After (Premium Grid):** - -```typescript -// Open-source -import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; - -// Licensed -// import { IgxGridComponent, IGX_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/grid'; -``` - -> **Key change:** The Premium Grid provides `IGX_GRID_DIRECTIVES` - a single convenience import that includes all grid directives (columns, templates, toolbar, paginator bindings, etc.). You no longer need to import each directive individually. - -### Step 3 - Update the Component Decorator - -**Before:** - -```typescript -@Component({ - selector: 'app-data-view', - imports: [ - IgxGridLiteComponent, - IgxGridLiteColumnComponent, - IgxGridLiteCellTemplateDirective, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA], // Optional: only needed when using the underlying web component directly - templateUrl: './data-view.component.html', - changeDetection: ChangeDetectionStrategy.OnPush, -}) -``` - -**After:** - -```typescript -@Component({ - selector: 'app-data-view', - imports: [IGX_GRID_DIRECTIVES], - // No CUSTOM_ELEMENTS_SCHEMA needed - Premium Grid is a native Angular component - templateUrl: './data-view.component.html', - changeDetection: ChangeDetectionStrategy.OnPush, -}) -``` - -**Changes:** -- Replace individual Grid Lite imports with `IGX_GRID_DIRECTIVES` -- If you previously added `CUSTOM_ELEMENTS_SCHEMA` for Grid Lite (e.g. when using the underlying web component directly), remove it after migrating — Premium Grid is a native Angular component -- Remove the `schemas` array entirely if it only contained `CUSTOM_ELEMENTS_SCHEMA` - -### Step 4 - Update the Component Class - -**Before:** - -```typescript -export class DataViewComponent { - gridRef = viewChild>('grid'); - data: Product[] = []; -} -``` - -**After:** - -```typescript -export class DataViewComponent { - gridRef = viewChild.required('grid'); - protected data = signal([]); -} -``` - -**Changes:** -- Replace `IgxGridLiteComponent` with `IgxGridComponent` -- Add `[primaryKey]` support - strongly recommended for editing, selection, and any row-targeted API (`getRowByKey`, transactions, row pinning, etc.). Without it the grid falls back to row indexes/object identity, which breaks across virtualization and remote data. -- Use `signal()` for reactive data (recommended but not required) - -### Step 5 - Update the Template - -#### Selector & Grid Element - -| Grid Lite | Premium Grid | -|---|---| -| `` | `` (needs an explicit `height` - or a parent with a fixed height - for row virtualization) | -| `` | `` | -| No `[primaryKey]` | `[primaryKey]="'id'"` (strongly recommended for editing/selection/row APIs) | -| `[sortingOptions]="{ mode: 'multiple' }"` | `[sortingOptions]="{ mode: 'multiple' }"` or per-column `[sortable]="true"` | - -**Before:** - -```html - - - - - - -``` - -**After:** - -```html - - - - - - - -``` - -#### Column Attribute Differences - -| Grid Lite attribute | Premium Grid equivalent | Notes | -|---|---|---| -| `sortable` (boolean HTML attr) | `[sortable]="true"` or bare `sortable` | Both styles work on `igx-column`; bracketed binding is preferred for clarity | -| `filterable` (boolean HTML attr) | `[filterable]="true"` or bare `filterable` | Same pattern | -| `resizable` (boolean HTML attr) | `[resizable]="true"` or bare `resizable` | Same pattern | -| `hidden` (boolean HTML attr) | `[hidden]="true"` | Use binding - bare `hidden` collides with the native HTML attribute | -| `field` | `field` | Identical | -| `header` | `header` | Identical | -| `dataType` | `dataType` | Premium supports additional types: `dateTime`, `time`, `currency`, `percent`, `image` | -| `width` | `width` | Identical (CSS value, e.g., `'250px'`) | - -#### Cell Template Migration - -**Before (Grid Lite):** - -```html - - - {{ value }} - - -``` - -**After (Premium Grid):** - -```html - - - {{ cell.value }} - - -``` - -**Key differences:** -- Template directive: `igxGridLiteCell` → `igxCell` -- Context object: Grid Lite exposes `let-value` directly; Premium exposes `let-cell="cell"` where you access `cell.value`, `cell.row`, `cell.column` -- Premium also supports `igxCellEditor` for edit templates (not available in Grid Lite) - -#### Header Template Migration - -**Before:** - -```html - - {{ column.header }} - -``` - -**After:** - -```html - - {{ column.header }} - -``` - -**Change:** `igxGridLiteHeader` → `igxHeader` - -### Step 6 - Migrate Remote Data Operations - -Grid Lite uses `dataPipelineConfiguration` (async callbacks). The Premium Grid uses **noop data operation strategies + events**. - -**Before (Grid Lite - `dataPipelineConfiguration`):** - -```typescript -dataPipeline: IgxGridLiteDataPipelineConfiguration = { - sort: async (params) => { - return await this.dataService.sortRemote(params.grid.sortingExpressions); - }, - filter: async (params) => { - return await this.dataService.filterRemote(params.grid.filteringExpressions); - }, -}; -``` - -```html - - -``` - -**After (Premium Grid - noop strategies + events):** - -```typescript -import { - NoopSortingStrategy, - NoopFilteringStrategy, -} from 'igniteui-angular/core'; -import { ISortingEventArgs } from 'igniteui-angular/grids/core'; - -export class DataViewComponent { - gridRef = viewChild.required('grid'); - noopSort = NoopSortingStrategy.instance(); - noopFilter = NoopFilteringStrategy.instance(); - - onSortingDone(event: ISortingEventArgs) { - this.dataService.sortRemote(this.gridRef().sortingExpressions).subscribe(data => this.data.set(data)); - } - - onFilteringDone() { - this.dataService.filterRemote(this.gridRef().filteringExpressionsTree).subscribe(data => this.data.set(data)); - } -} -``` - -```html - - -``` - -### Step 7 - Migrate Sort/Filter Events - -| Grid Lite Event | Premium Grid Event | Notes | -|---|---|---| -| `(sorting)` | `(sorting)` | Both cancelable | -| `(sorted)` | `(sortingDone)` | Name changed | -| `(filtering)` | `(filtering)` | Both cancelable | -| `(filtered)` | `(filteringDone)` | Name changed. For **remote** filtering, bind `(filteringExpressionsTreeChange)` instead — see Step 6 and [`paging-remote.md`](./paging-remote.md) | - -### Step 8 - Migrate Programmatic Sort/Filter API - -**Grid Lite API:** - -```typescript -this.gridRef().sort({ key: 'name', direction: 'ascending' }); -this.gridRef().filter({ key: 'age', condition: 'greaterThan', searchTerm: 21 }); -this.gridRef().clearSort(); -this.gridRef().clearFilter(); -``` - -**Premium Grid API:** - -```typescript -import { SortingDirection, IgxNumberFilteringOperand } from 'igniteui-angular/core'; - -// Sorting -this.gridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); -this.gridRef().clearSort('name'); - -// Filtering -this.gridRef().filter('age', 21, IgxNumberFilteringOperand.instance().condition('greaterThan')); -this.gridRef().clearFilter('age'); -``` - -**Key differences:** -- Sort expression: `key` → `fieldName`, `direction: 'ascending'` → `dir: SortingDirection.Asc` -- Filter: object-based → positional arguments with typed operand instances - -### Step 9 - Remove Grid Lite Artifacts - -After migration, clean up: - -1. Remove `CUSTOM_ELEMENTS_SCHEMA` from any component that only used it for Grid Lite -2. Remove `import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'` if no longer needed -3. Remove `igniteui-grid-lite` from `package.json` if no Grid Lite instances remain -4. Remove any `IgxGridLiteDataPipelineConfiguration` types and replace with noop strategies - ---- - -## Adding Enterprise Features Post-Migration - -Once on the Premium Grid, enable the features that motivated the migration: - -### Editing - -```html - - - - -``` - -### Selection - -```html - - - -``` - -### Paging - -```html - - - - -``` - -### GroupBy - -```html - - - -``` - -### Export - -```typescript -import { IgxExcelExporterService, IgxExcelExporterOptions } from 'igniteui-angular/grids/core'; - -export class DataViewComponent { - private excelExporter = inject(IgxExcelExporterService); - - exportToExcel() { - this.excelExporter.exportData(this.data(), new IgxExcelExporterOptions('export')); - } -} -``` - -### Toolbar - -```html - - - Products - - - - - - - - -``` - -### Summaries - -```html - -``` - -### Batch Editing - -```html - - - -``` - -```typescript -// Commit or discard all pending changes -this.gridRef().transactions.commit(this.data()); -this.gridRef().transactions.clear(); -``` - ---- - -## Quick Reference - Full Migration Map - -| Aspect | Grid Lite | Premium Grid | -|---|---|---| -| **Package** | `igniteui-grid-lite` (separate) | `igniteui-angular` or `@infragistics/igniteui-angular` | -| **Entry point** | `igniteui-angular/grids/lite` | `igniteui-angular/grids/grid` | -| **Component** | `IgxGridLiteComponent` | `IgxGridComponent` | -| **Selector** | `` | `` | -| **Column selector** | `` | `` | -| **Imports style** | Individual (`IgxGridLiteComponent`, `IgxGridLiteColumnComponent`, ...) | Bundle (`IGX_GRID_DIRECTIVES`) | -| **Schema** | `CUSTOM_ELEMENTS_SCHEMA` (optional; only if using the underlying web component directly) | Not needed | -| **Primary key** | Not supported | `[primaryKey]="'id'"` (required for editing/selection) | -| **Cell template** | `igxGridLiteCell` (exposes `let-value`) | `igxCell` (exposes `let-cell="cell"`, access `cell.value`) | -| **Header template** | `igxGridLiteHeader` | `igxHeader` | -| **Editor template** | Not available | `igxCellEditor` | -| **Column attributes** | Boolean HTML attrs (`sortable`, `filterable`) | Angular inputs (`[sortable]="true"`, `[filterable]="true"`) | -| **Remote data** | `dataPipelineConfiguration` (async callbacks) | Noop strategies + events | -| **Sort event (done)** | `(sorted)` | `(sortingDone)` | -| **Filter event (done)** | `(filtered)` | `(filteringDone)` | -| **Sort expression** | `{ key, direction }` | `{ fieldName, dir: SortingDirection }` | -| **License** | MIT (free) | Commercial (trial with watermark) | - ---- - -## Related Skills - -- **[`igniteui-angular-grids`](../SKILL.md)** - Full grid reference for all grid types (use after migration for feature details) -- **[`igniteui-angular-theming`](../../igniteui-angular-theming/SKILL.md)** - Theming and styling (works with both Grid Lite and Premium Grid) -- **[`igniteui-angular-components`](../../igniteui-angular-components/SKILL.md)** - Non-grid UI components diff --git a/.agents/skills/igniteui-angular-grids/references/paging-remote.md b/.agents/skills/igniteui-angular-grids/references/paging-remote.md deleted file mode 100644 index 0ddd40d..0000000 --- a/.agents/skills/igniteui-angular-grids/references/paging-remote.md +++ /dev/null @@ -1,391 +0,0 @@ -# Grid Paging, Remote Data & Virtualization - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For grid import patterns and `viewChild` access — see [`data-operations.md`](./data-operations.md). -> For editing and validation — see [`editing.md`](./editing.md). -> For state persistence — see [`state.md`](./state.md). - -## Contents - -- [Paging](#paging) -- [Remote Data Operations](#remote-data-operations) -- [Virtualization](#virtualization) -- [Multi-Grid Coordination](#multi-grid-coordination) -- [Key Rules](#key-rules) - -## Paging - -### Using the Paginator Component - -```html - - - - - - - -``` - -### Programmatic Paging - -```typescript -// Navigate pages -this.gridRef().paginator.page = 3; -this.gridRef().paginator.nextPage(); -this.gridRef().paginator.previousPage(); -this.gridRef().paginator.paginate(0); // go to first page - -// Change page size -this.gridRef().paginator.perPage = 25; -``` - -### Paging Events - -| Event | Description | -|---|---| -| `(paging)` | Fires before page changes (cancelable) | -| `(pagingDone)` | Fires after page has changed | -| `(perPageChange)` | Fires when page size changes | - -### Remote Paging - -```typescript -import { GridPagingMode } from 'igniteui-angular/grids/core'; -import { IPageEventArgs } from 'igniteui-angular/paginator'; - -export class RemotePagingComponent { - data = signal([]); - totalCount = signal(0); - perPage = signal(15); - pagingMode = GridPagingMode.Remote; - - gridRef = viewChild.required('grid'); - private dataService = inject(ProductService); - - constructor() { - this.loadPage(0); - } - - onPagingDone(event: IPageEventArgs) { - this.loadPage(event.current); - } - - onPerPageChange(perPage: number) { - this.perPage.set(perPage); - this.loadPage(0); - } - - private loadPage(pageIndex: number) { - const skip = pageIndex * this.perPage(); - this.dataService.getProducts({ skip, take: this.perPage() }).subscribe(result => { - this.data.set(result.data); - this.totalCount.set(result.totalCount); - }); - } -} -``` - -```html - - - - - - - -``` - -## Remote Data Operations - -### The Problem - -Grids perform sorting, filtering, and paging **client-side** by default. For large datasets, you must intercept these operations and delegate them to the server. - -### Complete Remote Data Pattern - -This is the canonical pattern for server-side sorting, filtering, and virtualization. **You must disable the built-in client-side sorting/filtering** by applying `NoopSortingStrategy` and `NoopFilteringStrategy` on the grid: - -```typescript -import { Component, ChangeDetectionStrategy, signal, viewChild, inject, DestroyRef } from '@angular/core'; -import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; -import { - IFilteringExpressionsTree, - ISortingExpression, - NoopSortingStrategy, - NoopFilteringStrategy -} from 'igniteui-angular/core'; -import { IForOfState } from 'igniteui-angular/directives'; -import { debounceTime, Subject } from 'rxjs'; - -@Component({ - selector: 'app-remote-grid', - imports: [IGX_GRID_DIRECTIVES], - templateUrl: './remote-grid.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class RemoteGridComponent { - data = signal([]); - totalCount = signal(0); - isLoading = signal(false); - - // Noop strategies — disable built-in client-side sort/filter - noopSort = NoopSortingStrategy.instance(); - noopFilter = NoopFilteringStrategy.instance(); - - gridRef = viewChild.required('grid'); - private dataService = inject(OrderService); - private destroyRef = inject(DestroyRef); - - private currentSort: ISortingExpression[] | undefined; - private currentFilter: IFilteringExpressionsTree | undefined; - - // Debounce rapid dataPreLoad events during fast scrolling - private dataPreLoad$ = new Subject(); - - constructor() { - this.dataPreLoad$.pipe( - debounceTime(150), - takeUntilDestroyed(this.destroyRef) - ).subscribe(event => { - // NOTE: The first chunkSize will always be 0 — use a reasonable default - const chunkSize = event.chunkSize || 15; - this.loadData(event.startIndex, chunkSize); - }); - - this.loadData(0, 15); - } - - onDataPreLoad(event: IForOfState) { - this.dataPreLoad$.next(event); - } - - onSortingDone() { - this.currentSort = this.gridRef().sortingExpressions; - this.loadData(0, 15); - } - - onFilteringExpressionsTreeChange() { - this.currentFilter = this.gridRef().filteringExpressionsTree; - this.loadData(0, 15); - } - - private loadData(skip: number, take: number) { - this.isLoading.set(true); - this.dataService.getOrders({ - skip, - take, - sort: this.currentSort, - filter: this.currentFilter - }).subscribe(result => { - this.data.set(result.data); - this.totalCount.set(result.total); - this.isLoading.set(false); - }); - } -} -``` - -```html - - - - - - - - -``` - -> **IMPORTANT**: `[sortStrategy]="noopSort"` and `[filterStrategy]="noopFilter"` prevent the grid from applying sort/filter operations client-side. The grid still fires events (allowing you to send them to the server), but the local data remains untouched until you replace it. - -### Excel-Style Filtering with Remote Unique Values - -When using Excel-style filtering with remote data, provide a strategy to fetch unique column values from the server: - -```typescript -// Tell the grid how to load unique values for Excel-style filter lists -uniqueValuesStrategy = (column: any, tree: any, done: (values: any[]) => void) => { - this.dataService.getUniqueValues(column.field).subscribe(values => done(values)); -}; -``` - -```html - - -``` - -### Remote Data Service Example - -```typescript -import { Injectable, inject } from '@angular/core'; -import { HttpClient, HttpParams } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -export interface RemoteDataResult { - data: T[]; - total: number; -} - -@Injectable({ providedIn: 'root' }) -export class OrderService { - private http = inject(HttpClient); - private apiUrl = '/api/orders'; - - getOrders(params: { - skip: number; - take: number; - sort?: any[]; - filter?: any; - }): Observable> { - let httpParams = new HttpParams() - .set('skip', params.skip) - .set('take', params.take); - - if (params.sort?.length) { - httpParams = httpParams.set('sort', JSON.stringify(params.sort)); - } - if (params.filter) { - httpParams = httpParams.set('filter', JSON.stringify(params.filter)); - } - - return this.http.get>(this.apiUrl, { params: httpParams }); - } -} -``` - -### Key Points for Remote Data - -1. **Set `[totalItemCount]`** — the grid needs the total record count for correct virtual scrollbar sizing -2. **Use `[isLoading]`** — shows a loading indicator while data is being fetched -3. **Apply `NoopSortingStrategy` and `NoopFilteringStrategy`** — prevents the grid from performing client-side sorting/filtering, so the server results are displayed as-is -4. **Listen to `(dataPreLoad)`** — fires when the user scrolls and the grid needs more rows; provides `startIndex` and `chunkSize` (first `chunkSize` will be 0 — use a fallback) -5. **Listen to `(sortingDone)` and `(filteringExpressionsTreeChange)`** — reset to the beginning and re-fetch with new parameters; `filteringExpressionsTreeChange` is the grid-level output that reflects the complete filter state (unlike the column-level `filteringDone`) -6. **Track current sort/filter state** — store them so every `loadData` call includes the active criteria -7. **Debounce `(dataPreLoad)`** — use `debounceTime` to avoid flooding the server during fast scrolling -8. **Use `[uniqueColumnValuesStrategy]`** — when using Excel-style filtering, supply a callback to load unique column values from the server - -## Virtualization - -### How It Works - -All Ignite UI grids use **row and column virtualization** by default. Only the visible rows and columns are rendered in the DOM, enabling smooth scrolling through millions of records. - -### Requirements - -- Set a fixed `height` on the grid (e.g., `height="600px"`) -- No additional configuration is needed — virtualization is automatic -- Do **not** wrap the grid in a virtual scroll container - -### Remote Virtualization - -For datasets too large to load entirely, combine virtualization with remote data: - -```html - - -``` - -The `(dataPreLoad)` event fires with an `IForOfState` containing: -- `startIndex` — the first visible row index -- `chunkSize` — number of rows the grid needs - -## Multi-Grid Coordination - -### Master-Detail Filtering - -When using a master grid to drive a detail grid: - -```typescript -export class MasterDetailComponent { - masterGrid = viewChild.required('masterGrid'); - orders = signal([]); - selectedCustomer = signal(null); - customerOrders = signal([]); - - onRowSelectionChanging(event: IRowSelectionEventArgs) { - const selectedId = event.newSelection[0]; - const customer = this.customers().find(c => c.id === selectedId); - this.selectedCustomer.set(customer ?? null); - - if (customer) { - this.dataService.getOrdersByCustomer(customer.id).subscribe(orders => { - this.customerOrders.set(orders); - }); - } - } -} -``` - -```html - - - - - - - - -``` - -## Key Rules - -1. **Remote data requires `[totalItemCount]`** — without it, the virtual scrollbar won't size correctly -2. **Remote data requires noop strategies** — apply `NoopSortingStrategy` and `NoopFilteringStrategy` to disable client-side operations when the server handles them -3. **Track sort/filter state for remote operations** — store current expressions and include them in every server request -4. **Debounce rapid virtual scroll** — use `debounceTime` on `(dataPreLoad)` to avoid flooding the server - -Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). - -## See Also - -- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns -- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries -- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations -- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection -- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.agents/skills/igniteui-angular-grids/references/sizing.md b/.agents/skills/igniteui-angular-grids/references/sizing.md deleted file mode 100644 index f693de6..0000000 --- a/.agents/skills/igniteui-angular-grids/references/sizing.md +++ /dev/null @@ -1,215 +0,0 @@ -# Grid Sizing — Width, Height, Column Sizing & Spacing - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For grid setup, column config, sorting, filtering, selection — see [`structure.md`](./structure.md). -> For virtualization and performance — see [`features.md`](./features.md). - -## Contents - -- [Overview](#overview) -- [Grid Width](#grid-width) -- [Grid Height](#grid-height) -- [Column Sizing](#column-sizing) -- [Grid Cell Spacing Control](#grid-cell-spacing-control) -- [Key Rules](#key-rules) - -## Overview - -The grid uses **border-box sizing** — border and padding are included in the width/height calculations. Do **not** override `box-sizing` on the grid element; doing so will break size calculations. - -The grid supports both component inputs (`width`/`height`) and regular CSS/layout sizing from the host or wrapping container (including flex/grid layouts). Use the inputs when you need explicit fixed or percentage grid sizing. - -## Grid Width - -> **Docs:** [Grid Sizing — Width](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#width) - -**Default:** `100%` — the grid fills available width of the parent/window. - -### `null` Width - -```html - -``` - -- All columns are rendered in the DOM — **horizontal column virtualization is disabled**. -- **Warning:** rendering many columns without virtualization can significantly impact performance. - -### Pixel Width - -```html - -``` - -- Grid is fixed at the specified size and does not react to browser/DOM resizing. -- A horizontal scrollbar appears inside the grid when the combined column widths exceed the grid `width`. -- If a parent element is narrower than the grid and has `overflow: auto | scroll`, the parent scrolls — the grid itself remains at its specified width. - -### Percentage Width - -```html - -``` - -- Grid sizes relative to its parent element (or the browser window if there is no parent with explicit width). -- Resizes responsively when the browser or parent is resized. -- Setting `width` above `100%` (e.g. `150%`) makes the grid wider than the parent; the parent renders a scrollbar only if it has `overflow: auto | scroll`. - -## Grid Height - -> **Docs:** [Grid Sizing — Height](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#height) - -**Default:** `100%` — see the Percentage Height section for how this behaves depending on the DOM structure. - -### `null` Height - -```html - -``` - -- All rows are rendered — **row virtualization is disabled**. -- Grid height expands to show every row with no vertical scrollbar inside the grid. -- If rows overflow the viewport, the browser renders a native scrollbar. -- A parent element with `overflow: auto | scroll` will scroll while the grid itself remains unshrunk. -- **Warning:** large data sets with `null` height can significantly impact browser performance due to no virtualization. - -### Pixel Height - -```html - -``` - -- Grid is fixed at the specified height. -- A vertical scrollbar appears when rows exceed the visible area. -- If the grid is taller than a parent with `overflow: auto | scroll`, the parent scrolls. - -### Percentage Height - -```html - -``` - -- Grid sizes relative to the **parent element's height**. -- **Parent has explicit height** (px or %): grid sizes to that percentage of the parent's height. -- **Parent has NO explicit height**: the browser cannot resolve a percentage, so the grid falls back to rendering a maximum of **10 rows** with a vertical scrollbar if there are more rows, or fits all rows if there are fewer. -- To fill the entire browser window: set both `body` and the parent container `height: 100%`, then use `height="100%"` on the grid. - -```css -/* Full-window grid */ -html, body, .grid-container { - height: 100%; -} -``` - -```html -
- -
-``` - -## Column Sizing - -> **Docs:** [Grid Sizing — Column Sizing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#column-sizing) - -### Default (no `width` set — auto-sized) - -- Auto-sized columns share the available grid width equally. -- Minimum column width is **`136px`**; if the equal share is less than `136px`, all auto-sized columns default to `136px` and the grid renders a horizontal scrollbar. -- Feature columns (row selector checkbox, etc.) consume space that reduces what is available for auto-sized columns. - -```html - - - -``` - -### Pixel Width - -```html - -``` - -- Column is fixed at the specified width regardless of grid size. -- If the combined column widths are less than the grid width, empty space appears on the right — this is expected. -- If the combined column widths exceed the grid width, a horizontal scrollbar is rendered. - -### `auto` Width - -```html - -``` - -- Column sizes to fit the longest visible cell value. -- May leave empty space if most values are short but one is very long. - -### Percentage Width - -```html - -``` - -- Column width is calculated as a percentage of the grid width. -- Responsive — resizes when the grid resizes. -- Combined percentages less than `100%` leave an empty area; greater than `100%` triggers a horizontal scrollbar. -- If the grid `width` is `null`, percentage-width columns fall back to `136px` each. - -## Grid Cell Spacing Control - -> **Docs:** [Grid Sizing — Cell Spacing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#grid-cell-spacing-control) - -The grid automatically adapts internal cell spacing based on the `size` (display density) setting. Fine-grained control is available through CSS custom properties. - -### Global Spacing (all grids in the app) - -```css -igx-grid { - --ig-spacing: 0.8; /* multiplier — reduces all grid spacing by 20% */ -} -``` - -### Instance-Specific Spacing - -```css -.my-compact-grid { - --ig-spacing: 0.6; -} -``` - -### Directional Spacing (horizontal vs vertical independently) - -```css -.my-grid { - --ig-spacing-inline: 0.5; /* horizontal padding */ - --ig-spacing-block: 1.0; /* vertical padding */ -} -``` - -### Density-Level Spacing - -```css -.my-grid { - --ig-spacing-small: 0.5; /* compact density */ - --ig-spacing-medium: 1.0; /* medium density */ - --ig-spacing-large: 1.3; /* comfortable density */ -} -``` - -### Header vs Body Cell Spacing - -```css -.my-grid igx-grid-header { - --ig-spacing: 0.7; -} - -.my-grid igx-grid-cell { - --ig-spacing: 0.9; -} -``` - -## Key Rules - -- Grid sizing can come from CSS/layout context (host/container sizing) or from `[width]`/`[height]` inputs. -- **Never** override `box-sizing` on the grid — it uses border-box and relies on this. -- Use `null` for height only when the data set is small; row virtualization is disabled and large data will hurt performance. -- When using percentage height, the parent **must** have an explicit height for the percentage to resolve correctly. Without it, the grid falls back to 10 visible rows. -- A mix of fixed-width and auto-sized columns is valid — auto-sized columns fill the remaining space after fixed-width columns are laid out. -- **Omit `width` on generated columns.** No `width` = columns equally share available grid width. Pixel widths leave empty space when their sum is less than the grid width. Only set `width` when the user explicitly asks for it. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. diff --git a/.agents/skills/igniteui-angular-grids/references/state.md b/.agents/skills/igniteui-angular-grids/references/state.md deleted file mode 100644 index 0b68aff..0000000 --- a/.agents/skills/igniteui-angular-grids/references/state.md +++ /dev/null @@ -1,303 +0,0 @@ -# Grid State Persistence & Grid-Type-Specific Operations - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For grid import patterns and `viewChild` access — see [`data-operations.md`](./data-operations.md). -> For Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite setup — see [`types.md`](./types.md). -> For paging and remote data — see [`paging-remote.md`](./paging-remote.md). - -## Contents - -- [State Persistence](#state-persistence) -- [Tree Grid Data Operations](#tree-grid-data-operations) -- [Hierarchical Grid Data Operations](#hierarchical-grid-data-operations) -- [Pivot Grid Data Operations](#pivot-grid-data-operations) -- [Grid Lite Data Operations](#grid-lite-data-operations) -- [Key Rules](#key-rules) - -## State Persistence - -### Saving and Restoring Grid State - -Use `IgxGridStateDirective` to persist sorting, filtering, grouping, paging, selection, and column state: - -```html - - - -``` - -```typescript -import { IgxGridStateDirective } from 'igniteui-angular/grids/core'; - -export class StatefulGridComponent { - gridState = viewChild.required(IgxGridStateDirective); - - saveState() { - const state = this.gridState().getState(); - localStorage.setItem('gridState', state); - } - - restoreState() { - const state = localStorage.getItem('gridState'); - if (state) { - this.gridState().setState(state); - } - } -} -``` - -### Selective State Features - -Control which features are persisted: - -```html - - -``` - -```typescript -stateOptions = { - sorting: true, - filtering: true, - groupBy: true, - paging: true, - columns: true, - cellSelection: false, // skip selection state - rowSelection: false, - columnSelection: false, - advancedFiltering: true, - rowPinning: true, - expansion: true -}; -``` - -### Restoring Custom Strategies - -`IgxGridState` does **not** persist functions — this includes sorting strategies, filtering strategies, column formatters, summaries, `cellClasses`, and `cellStyles`. Use the `stateParsed` event to reapply these after restoring state: - -```typescript -restoreState() { - const stateJson = localStorage.getItem('gridState'); - if (!stateJson) return; - - // Subscribe to stateParsed to reapply custom strategies before state is applied - this.gridState().stateParsed.pipe(take(1)).subscribe(parsedState => { - parsedState.sorting?.forEach(expr => expr.strategy = NoopSortingStrategy.instance()); - }); - - this.gridState().setState(stateJson); -} -``` - -### Restoring Column Templates - -Column templates are also not serialized. Use the `columnInit` event to reassign them: - -```typescript -activeTemplate = viewChild.required>('activeTemplate'); - -onColumnInit(column: IgxColumnComponent) { - if (column.field === 'IsActive') { - column.bodyTemplate = this.activeTemplate(); - } -} -``` - -```html - - - - - -``` - -## Tree Grid Data Operations - -### Recursive Filtering Behavior - -Tree Grid filtering is **inclusive** — when a child matches, all its ancestors are kept visible (marked as `isFilteredOutParent`) and auto-expanded. This is the default `TreeGridFilteringStrategy`. - -```html - - - - -``` - -When you filter for `title = 'Developer'`, all ancestor rows are shown even though they don't match, and they're auto-expanded so you can see the matching children in context. - -### Per-Level Sorting - -Tree Grid sorting is applied **within each parent level** — children are sorted among siblings, not globally flattened: - -```typescript -// This sorts employees within their respective manager, not globally -this.treeGridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); -``` - -### Tree Grid Batch Editing - -Tree Grid uses `HierarchicalTransactionService` — each transaction carries a `path` array tracing the parent hierarchy, enabling proper undo/redo of nested changes: - -```html - - - -``` - -```typescript -// Add a row as child of a specific parent -this.treeGridRef().addRow({ id: 100, name: 'New Employee', managerId: 2 }, 2); - -// Cascade delete — deleting a parent removes all descendants (default behavior) -this.treeGridRef().deleteRow(2); // deletes row 2 and all its children -``` - -## Hierarchical Grid Data Operations - -### Independent Grid Levels - -Each level of a hierarchical grid has its **own independent** sorting, filtering, and paging state. Configure features on the `` blueprint: - -```html - - - - - - - - - - - - -``` - -### Accessing Child Grid Instances - -To perform programmatic operations on child grids, use the `(gridCreated)` event: - -```typescript -onChildGridCreated(event: IGridCreatedEventArgs) { - const childGrid = event.grid; - // Example: apply a default sort to all child grids - childGrid.sort({ fieldName: 'orderId', dir: SortingDirection.Desc, ignoreCase: false }); -} -``` - -```html - - - -``` - -### Batch Editing Propagation - -Setting `[batchEditing]="true"` on the root hierarchical grid automatically propagates to all child grids: - -```html - - - - - - -``` - -> **NOTE**: Each child grid instance has its **own** `TransactionService`. Commits must be done per grid instance. - -## Pivot Grid Data Operations - -> **IMPORTANT**: The Pivot Grid does NOT use standard sorting, filtering, editing, or paging APIs. All data operations are controlled through `pivotConfiguration`. - -### Dimension-Based Filtering - -```typescript -import { FilteringExpressionsTree, FilteringLogic, IgxStringFilteringOperand } from 'igniteui-angular/core'; - -// Create a filter for a dimension -const regionFilter = new FilteringExpressionsTree(FilteringLogic.Or); -regionFilter.filteringOperands = [ - { - fieldName: 'Region', - condition: IgxStringFilteringOperand.instance().condition('equals'), - searchVal: 'North America' - }, - { - fieldName: 'Region', - condition: IgxStringFilteringOperand.instance().condition('equals'), - searchVal: 'Europe' - } -]; - -// Apply the filter to a dimension and notify the grid -this.pivotConfig.filters[0].filter = regionFilter; -this.pivotGridRef().notifyDimensionChange(true); -``` - -### Dimension-Based Sorting - -```typescript -// Sort a row dimension via the public API -this.pivotGridRef().sortDimension(this.pivotConfig.rows[0], SortingDirection.Desc); -``` - -### Key Pivot Grid Limitations - -- No cell/row editing, batch editing, or row adding -- No paging -- No column pinning, moving, or hiding (columns are auto-generated) -- No row dragging -- No standard filtering (`allowFiltering` is forced to `false`) -- No GroupBy (grouping is inherent via dimensions) -- State persistence serializes the full `pivotConfiguration` - -## Grid Lite Data Operations - -> **Grid Lite sorting, filtering, remote data, events, and limitations are fully documented in [`types.md`](./types.md#grid-lite).** Refer to that file for all Grid Lite data operations — this section intentionally avoids duplicating that content. -> -> Key differences from Flat/Tree/Hierarchical Grid APIs: -> - Uses `IgxGridLiteSortingExpression` / `IgxGridLiteFilteringExpression` (NOT `ISortingExpression` / `FilteringExpressionsTree`) -> - Uses `dataPipelineConfiguration` for remote ops (NOT noop strategies + events) -> - Has no editing, grouping, paging, summaries, selection, state persistence, or export - -## Key Rules - -1. **State persistence** — use `IgxGridStateDirective` to save/restore sort, filter, group, and column configuration; functions (formatters, strategies, summaries) must be reapplied via `stateParsed` event -2. **Tree Grid filtering is recursive** — parents of matching children are always shown and auto-expanded -3. **Hierarchical Grid levels are independent** — sorting/filtering/paging don't cascade; configure on `` -4. **Pivot Grid is read-only** — no editing, paging, or standard filtering/sorting; use `pivotConfiguration` for all data operations -5. **Grid Lite has its own API** — uses `IgxGridLiteSortingExpression`/`IgxGridLiteFilteringExpression` (NOT `ISortingExpression`/`FilteringExpressionsTree`), `dataPipelineConfiguration` for remote ops (NOT noop strategies), and has no editing, grouping, paging, summaries, or selection - -Universal rules (viewChild types, directive bundles, signals) are in the [hub](../SKILL.md#universal-rules-every-grid-type). - -## See Also - -- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns -- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization -- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries -- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection -- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.agents/skills/igniteui-angular-grids/references/structure.md b/.agents/skills/igniteui-angular-grids/references/structure.md deleted file mode 100644 index ba8a504..0000000 --- a/.agents/skills/igniteui-angular-grids/references/structure.md +++ /dev/null @@ -1,283 +0,0 @@ -# Grid Structure — Column Configuration, Sorting, Filtering & Selection - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For grid type selection, imports, and feature availability — see the hub. -> For editing, grouping, summaries, toolbar, export — see [`features.md`](./features.md). -> For Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics — see [`types.md`](./types.md). -> For programmatic data operations — see [`data-operations.md`](./data-operations.md). - -## Contents - -- [Quick Start](#quick-start) -- [Column Configuration](#column-configuration) -- [Sorting](#sorting) -- [Filtering](#filtering) -- [Selection](#selection) -- [Key Rules](#key-rules) - -## Quick Start - -### Imports - -> **Important:** Check `package.json` to determine whether the project uses `igniteui-angular` or `@infragistics/igniteui-angular`. Always import from the specific entry point of whichever package is installed. Never import from the root barrel of either package. - -```typescript -// Open-source package — import from specific entry points -import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; - -// Licensed package — same entry-point structure, different prefix -// import { IgxGridComponent, IGX_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/grid'; - -// AVOID — never import from the root barrel (wrong for BOTH variants) -// import { IgxGridComponent } from 'igniteui-angular'; -// import { IgxGridComponent } from '@infragistics/igniteui-angular'; - -import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; - -@Component({ - selector: 'app-users-grid', - imports: [IGX_GRID_DIRECTIVES], - templateUrl: './users-grid.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class UsersGridComponent { - // Signal-based view child — use #grid on the template element - gridRef = viewChild.required('grid'); - - protected users = signal([]); -} -``` - -### Basic Grid - -```html - - - - - - - - - - - -``` - -## Column Configuration - -### Data Types - -Set `dataType` to enable proper formatting, filtering, sorting, and editing: - -| dataType | Behavior | -|---|---| -| `string` | Text input, string filtering | -| `number` | Numeric input, number filtering, number summaries | -| `boolean` | Checkbox editor, boolean filtering | -| `date` | Date picker editor, date filtering | -| `dateTime` | Date+time editor | -| `time` | Time picker editor | -| `currency` | Currency formatting, number filtering | -| `percent` | Percentage formatting | -| `image` | Image rendering (read-only) | - -### Column Templates - -Override default rendering with template directives: - -```html - - - - - {{ cell.value }} - - - - - - verified {{ column.header }} - - - - - - Active - Inactive - - - - - - - - - - - Active: {{ getActiveCount(summaryResults) }} - - -``` - -### Column Groups - -Group columns under a shared header: - -```html - - - - - - - - - -``` - -### Multi-Row Layout (MRL) - -Create complex cell layouts spanning multiple rows/columns: - -```html - - - - - -``` - -### Column Pinning - -```html - -``` - -Or programmatically: `this.gridRef().pinColumn('name')`. - -### Column Moving - -Enable column moving (drag-to-reorder headers) with `[moving]="true"` on the grid. -There is no [movable] input on . - -```html - - - - - -```html - - - -``` - -Programmatic sorting: - -```typescript -this.gridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); -this.gridRef().clearSort(); -``` - -Events: `(sorting)` (cancelable), `(sortingDone)`. - -For advanced programmatic sorting patterns, custom sort strategies, and sorting events — see [`data-operations.md`](./data-operations.md). - -## Filtering - -### Quick Filter (Row Filter) - -```html - - - -``` - -### Excel-Style Filter - -```html - - - -``` - -### Advanced Filtering Dialog - -```html - - - -``` - -### Programmatic Filtering - -```typescript -this.gridRef().filter('name', 'John', IgxStringFilteringOperand.instance().condition('contains'), true); -this.gridRef().clearFilter('name'); -this.gridRef().clearFilter(); // clear all -``` - -Events: `(filtering)` (cancelable), `(filteringDone)`. - -For advanced programmatic filtering, complex AND/OR trees, and remote filtering patterns — see [`data-operations.md`](./data-operations.md). - -## Selection - -### Row Selection - -```html - - - - - - - -``` - -Modes: `'none'`, `'single'`, `'multiple'`, `'multipleCascade'` (tree grids). - -### Cell Selection - -```html - -``` - -### Column Selection - -```html - - - -``` - -Events: `(rowSelectionChanging)`, `(columnSelectionChanging)`, `(selected)` (cell). - -## Key Rules - -Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). - -1. **Pick the right grid type first** — see the [hub](../SKILL.md) for the decision guide -2. **Always set `[primaryKey]`** — required for editing, selection, row operations (Flat, Tree, Hierarchical, Pivot grids; NOT Grid Lite) -3. **Set `[autoGenerate]="false"`** and define columns explicitly for production grids (except Pivot Grid where columns are auto-generated) -4. **Set `dataType` on every column** for correct filtering, sorting, editing, and summaries -5. **Omit `width` on generated `` elements.** Columns without `width` equally share available grid width. Only set `width` when the user explicitly asks for fixed or percentage column sizing. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. - -## See Also - -- [`features.md`](./features.md) — Editing, grouping, summaries, toolbar, export, row drag, action strip, master-detail -- [`types.md`](./types.md) — Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics -- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping, canonical import patterns -- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization -- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries -- [`state.md`](./state.md) — State persistence, grid-type-specific operations -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.agents/skills/igniteui-angular-grids/references/types.md b/.agents/skills/igniteui-angular-grids/references/types.md deleted file mode 100644 index b95276e..0000000 --- a/.agents/skills/igniteui-angular-grids/references/types.md +++ /dev/null @@ -1,486 +0,0 @@ -# Grid Types — Tree Grid, Hierarchical Grid, Grid Lite & Pivot Grid - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For the grid type selection guide and feature availability — see the hub. -> For shared column config, sorting, filtering, selection — see [`structure.md`](./structure.md). -> For editing, grouping, toolbar, export — see [`features.md`](./features.md). - -## Contents - -- [Tree Grid](#tree-grid) -- [Hierarchical Grid](#hierarchical-grid) -- [Grid Lite](#grid-lite) -- [Pivot Grid](#pivot-grid) -- [Key Rules](#key-rules) - -## Tree Grid - -For data with parent-child relationships **within a single schema** (e.g., org charts, file systems, categories). - -### Two Data Binding Modes - -**Mode 1: Flat data with foreign key** — rows reference their parent via a foreign key: - -```typescript -import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; -import { IgxTreeGridComponent, IGX_TREE_GRID_DIRECTIVES } from 'igniteui-angular/grids/tree-grid'; - -@Component({ - selector: 'app-org-tree', - imports: [IGX_TREE_GRID_DIRECTIVES], - templateUrl: './org-tree.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class OrgTreeComponent { - treeGridRef = viewChild.required('treeGrid'); - employees = signal([ - { id: 1, name: 'CEO', managerId: -1, title: 'CEO' }, - { id: 2, name: 'VP Engineering', managerId: 1, title: 'VP' }, - { id: 3, name: 'Developer', managerId: 2, title: 'Dev' }, - ]); -} -``` - -```html - - - - -``` - -**Mode 2: Nested object data** — each row contains its children in an array property: - -```html - - - - -``` - -### Tree Grid Unique Features - -- **Cascade selection**: `[rowSelection]="'multipleCascade'"` — selecting a parent selects all children; indeterminate state propagates up -- **Cascade delete**: `[cascadeOnDelete]="true"` (default) — deleting a parent removes all descendants -- **Load on demand**: `[loadChildrenOnDemand]="loadChildren"` — lazy-load children when a row is expanded -- **Expansion depth**: `[expansionDepth]="2"` — control initial expansion level (`Infinity` by default) -- **Add child row**: `treeGridRef().addRow(data, parentRowID)` — add a row as a child of a specific parent - -### Tree Grid Data Operation Behavior - -- **Filtering is recursive**: when a child matches, its parent is always shown (even if the parent doesn't match). Matched parents are auto-expanded. -- **Sorting is per-level**: children are sorted within their parent, not globally flattened -- **Batch editing** uses `HierarchicalTransactionService` — transactions carry a `path` array tracing the parent hierarchy for proper undo/redo -- **Summaries** are computed per tree level - ---- - -## Hierarchical Grid - -For master-detail data where **each level has a different schema** (e.g., Companies → Departments → Employees). Each level is defined by a **Row Island** blueprint. - -```typescript -import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; -import { IgxHierarchicalGridComponent, IGX_HIERARCHICAL_GRID_DIRECTIVES } from 'igniteui-angular/grids/hierarchical-grid'; - -@Component({ - selector: 'app-company-grid', - imports: [IGX_HIERARCHICAL_GRID_DIRECTIVES], - templateUrl: './company-grid.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class CompanyGridComponent { - hGridRef = viewChild.required('hGrid'); - companies = signal([]); -} -``` - -```html - - - - - - - - - - - - - - - - -``` - -### How Row Islands Work - -- A `` defines the **blueprint** (columns, features, templates) for all child grids at that level -- The `[key]` property specifies which property of the parent row's data holds the child array -- Row islands can be **nested** — an `igx-row-island` can contain another for deeper levels -- Each expanded row creates a **full grid instance** — be aware of memory usage with very deep/wide hierarchies - -### Accessing Child Grid Instances - -Use the `(gridCreated)` event on the row island: - -```html - - - -``` - -```typescript -onChildGridCreated(event: IGridCreatedEventArgs) { - const childGrid = event.grid; - // Configure the child grid instance, load data, etc. -} -``` - -### Hierarchical Grid Data Operation Behavior - -- **Sorting and filtering do NOT cascade** — each grid level is independent with its own state -- **Configure features on the row island** and all child grids at that level inherit them -- **Batch editing propagates**: setting `[batchEditing]="true"` on the root automatically enables it on all child grids -- **State persistence** recursively saves/restores state for each child grid instance, keyed by row island ID + parent row ID - ---- - -## Grid Lite - -The **lightest grid option** — an open-source (MIT licensed) Web Component with an Angular wrapper. Use it for **read-only data display** with sorting, filtering, column hiding/resizing, and row virtualization. It has **no editing, no selection, no paging, no grouping, no summaries, no export**. - -> **When to recommend Grid Lite vs. Flat Grid**: If the user only needs to display data with basic sorting/filtering and doesn't need editing, batch operations, paging, grouping, summaries, or export, Grid Lite is the lighter, faster choice. If any of those enterprise features are needed, **upgrade strictly to `igx-grid` (`IgxGridComponent`)** from `igniteui-angular/grids/grid` — do NOT recommend other non-grid components as a substitute. - -> **Important — Grid Lite → Grid Upgrade**: When a user is working with `igx-grid-lite` and you identify that their requirements exceed Grid Lite's capabilities (e.g., they need editing, selection, paging, grouping, summaries, export, row operations, or any feature not available in Grid Lite), you MUST recommend upgrading to `igx-grid` (`IgxGridComponent`). Never suggest a different component type — the upgrade path from Grid Lite is always to `igx-grid`. Replace `IgxGridLiteComponent` with `IgxGridComponent`, update imports from `igniteui-angular/grids/lite` to `igniteui-angular/grids/grid`, use `IGX_GRID_DIRECTIVES` instead of individual Grid Lite imports, and remove `CUSTOM_ELEMENTS_SCHEMA` if it was added for direct web-component usage. See [`grid-migration.md`](./grid-migration.md) for the full migration checklist. - -### Installation - -Grid Lite requires a **separate npm package**: - -```bash -npm install igniteui-grid-lite -``` - -### Setup - -```typescript -import { Component, ChangeDetectionStrategy, viewChild } from '@angular/core'; -import { - IgxGridLiteComponent, - IgxGridLiteColumnComponent, - IgxGridLiteCellTemplateDirective, - IgxGridLiteHeaderTemplateDirective -} from 'igniteui-angular/grids/lite'; - -@Component({ - selector: 'app-users-lite', - imports: [ - IgxGridLiteComponent, - IgxGridLiteColumnComponent, - IgxGridLiteCellTemplateDirective, - IgxGridLiteHeaderTemplateDirective - ], - templateUrl: './users-lite.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class UsersLiteComponent { - gridRef = viewChild>('grid'); - data: User[] = []; -} -``` - -### Template - -```html - - - - - - - - - - - {{ value ? 'Yes' : 'No' }} - - - -``` - -### Column Configuration - -Columns use `` with these inputs: - -| Input | Type | Description | -|---|---|---| -| `field` | `string` | Data property key (required) | -| `dataType` | `'string' \| 'number' \| 'boolean' \| 'date'` | Column data type | -| `header` | `string` | Header text | -| `width` | `string` | CSS width — omit by default; columns auto-fill available grid space. Only set when a fixed or percentage width is explicitly needed (e.g. `'20%'`). | -| `hidden` | `boolean` | Hide the column | -| `resizable` | `boolean` | Allow column resizing | -| `sortable` | `boolean` | Enable sorting | -| `filterable` | `boolean` | Enable filtering | -| `sortingCaseSensitive` | `boolean` | Case-sensitive sorting | -| `filteringCaseSensitive` | `boolean` | Case-sensitive filtering | - -### Templates - -Use `igxGridLiteCell` for cell templates and `igxGridLiteHeader` for header templates: - -```html - - - ⭐ Rating - - - {{ value }} - - -``` - -> When a header template is provided, the `header` text property is ignored. - -### Sorting & Filtering API - -```typescript -// Sort programmatically -this.gridRef().sort({ key: 'name', direction: 'ascending' }); -this.gridRef().sort([ - { key: 'name', direction: 'ascending' }, - { key: 'age', direction: 'descending' } -]); -this.gridRef().clearSort('name'); -this.gridRef().clearSort(); // clear all - -// Filter programmatically -this.gridRef().filter({ key: 'age', condition: 'greaterThan', searchTerm: 21 }); -this.gridRef().clearFilter('age'); -this.gridRef().clearFilter(); // clear all -``` - -### Two-Way Binding for Sort/Filter State - -```html - - -``` - -Events: `(sorting)` (cancelable), `(sorted)`, `(filtering)` (cancelable), `(filtered)`. - -### Remote Data Operations - -Use `dataPipelineConfiguration` to intercept sort/filter and delegate to the server: - -```typescript -import { IgxGridLiteDataPipelineConfiguration } from 'igniteui-angular/grids/lite'; - -dataPipeline: IgxGridLiteDataPipelineConfiguration = { - sort: async (params) => { - // params.grid — the grid instance - // params.data — current data - // params.type — 'sort' - const sorted = await this.dataService.sortRemote(params.grid.sortingExpressions); - return sorted; - }, - filter: async (params) => { - const filtered = await this.dataService.filterRemote(params.grid.filteringExpressions); - return filtered; - } -}; -``` - -```html - - -``` - -### Grid Lite Events - -| Event | Cancelable | Payload | -|---|---|---| -| `(sorting)` | Yes (`event.preventDefault()`) | Sorting expression about to be applied | -| `(sorted)` | No | Sorting completed | -| `(filtering)` | Yes (`event.preventDefault()`) | Filter expression about to be applied | -| `(filtered)` | No | Filtering completed | - -### Grid Lite Limitations - -These features are **NOT available** in Grid Lite: -- Editing (cell, row, batch) — no `[editable]`, no `beginEdit()`, no transactions -- Grouping — no `groupBy()`, no `IgxGroupByRow` -- Paging — no `IgxPaginatorComponent` -- Summaries — no `IgxSummaryOperand` -- Selection — no `rowSelection`, `cellSelection`, or `columnSelection` -- State persistence — no `IgxGridStateDirective` -- Export — no `IgxExcelExporterService` or `IgxCsvExporterService` -- Advanced filtering — no `advancedFilteringExpressionsTree` - -### Grid Lite Key Differences from Flat Grid - -- **Separate package**: `npm install igniteui-grid-lite` -- **`CUSTOM_ELEMENTS_SCHEMA` is not required** — the `IgxGridLiteComponent` Angular wrapper declares it internally; add it to your component's `schemas` only when using the underlying web component tag directly -- **No directives bundle** — import `IgxGridLiteComponent`, `IgxGridLiteColumnComponent`, and template directives individually -- **No `[primaryKey]`** — not needed (no editing, selection, or row operations) -- **No editing** of any kind (cell, row, batch) -- **No selection** (row, cell, column) -- **No paging, grouping, summaries, pinning, moving, export** -- **Column config differs**: uses `field` (not `field` on ``), `sortable`/`filterable` are boolean attributes -- **Remote data**: uses `dataPipelineConfiguration` (async callback) instead of noop strategies + events - ---- - -## Pivot Grid - -For **pivot table analytics** where users reshape data by dragging dimensions between rows, columns, filters, and values. - -> **IMPORTANT**: The Pivot Grid is fundamentally different from the other three grids. Standard grid features like cell editing, row editing, batch editing, paging, column pinning, column moving, row dragging, and standard filtering/sorting are **disabled**. All data operations are driven by the `pivotConfiguration`. - -```typescript -import { Component } from "@angular/core"; -import { DATA } from '../../data/pivot-data'; - -import { IPivotConfiguration, IgxPivotNumericAggregate } from 'igniteui-angular/grids/core'; -import { IgxPivotGridComponent } from 'igniteui-angular/grids/pivot-grid'; - -@Component({ - selector: 'app-pivot-grid-basic-sample', - styleUrls: ['./pivot-grid-basic-sample.component.scss'], - templateUrl: './pivot-grid-basic-sample.component.html', - imports: [IgxPivotGridComponent] -}) -export class PivotGridBasicSampleComponent { - public data = DATA; - public pivotConfigHierarchy: IPivotConfiguration = { - columns: [ - { - - memberName: 'Product', - memberFunction: (data) => data.Product.Name, - enabled: true - } - - ], - rows: [ - { - memberName: 'Seller', - memberFunction: (data) => data.Seller.Name, - enabled: true - } - ], - values: [ - { - member: 'NumberOfUnits', - aggregate: { - aggregator: IgxPivotNumericAggregate.sum, - key: 'sum', - label: 'Sum' - }, - enabled: true - - } - ], - filters: null - }; -} -``` - -```html - - -``` - -```typescript -// Data shape — nested objects are flattened via memberFunction: -export const DATA = [ - { - Product: { Name: 'Clothing', UnitPrice: '12.81' }, - Seller: { Name: 'Stanley Brooker', City: 'Seattle' }, - Date: '2007-01-01T00:00:00', - Value: '94.27', - NumberOfUnits: '282' - }, - // ... -]; -``` - -### Pivot Data Selector - -Provide a drag-and-drop UI for users to reshape the pivot interactively: - -```typescript -// Component class — reference the pivot grid instance for the selector -pivotGridRef = viewChild.required('pivotGrid'); -``` - -```html - - -``` - -### Pivot Grid Data Operations - -- **Filtering**: Per-dimension only — set the `filter` property on an `IPivotDimension`, NOT `[allowFiltering]` -- **Sorting**: Per-dimension only — set `sortable: true` and `sortDirection` on an `IPivotDimension` -- **Aggregation**: Configured via `IPivotValue.aggregate` (e.g., `IgxPivotNumericAggregate.sum`, `.average`, `.min`, `.max`, `.count`) -- **Columns are auto-generated** from the pivot configuration — do not define `` manually -- **State persistence**: Serializes the entire `pivotConfiguration` (dimensions, values, filters) - ---- - -## Key Rules - -1. **Tree Grid**: use `[primaryKey]` + `[foreignKey]` for flat data or `[childDataKey]` for nested objects; filtering is recursive (parents of matching children are always shown) -2. **Hierarchical Grid**: sorting/filtering/paging are independent per level; configure features on the `` blueprint -3. **Pivot Grid is read-only** — editing, paging, pinning, column moving, row dragging are all disabled; use `pivotConfiguration` for all data operations -4. **Grid Lite requires the `igniteui-grid-lite` npm package** — it has no editing, selection, paging, or export; `CUSTOM_ELEMENTS_SCHEMA` is not needed when using the `IgxGridLiteComponent` wrapper -5. **Omit `width` on generated `` elements.** Columns without `width` equally share available grid width. Only set `width` when the user explicitly asks for it. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. - -## See Also - -- [`structure.md`](./structure.md) — Grid setup, column config, sorting UI, filtering UI, selection -- [`features.md`](./features.md) — Grouping, summaries, toolbar, export, row drag, action strip -- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping, canonical import patterns -- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization -- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries -- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.agents/skills/igniteui-angular-theming/SKILL.md b/.agents/skills/igniteui-angular-theming/SKILL.md deleted file mode 100644 index 43d40ee..0000000 --- a/.agents/skills/igniteui-angular-theming/SKILL.md +++ /dev/null @@ -1,383 +0,0 @@ ---- -name: igniteui-angular-theming -description: "Generates and customizes Ignite UI for Angular themes including color palettes, typography, elevations, and component-level styles using the Sass theming system and the igniteui-theming MCP server. Use when users ask to theme, restyle, or style Ignite UI components, change colors or the color palette, switch between light and dark themes, create or apply a global theme, customize typography or elevation shadows, adjust spacing, sizing, or roundness, or configure per-component design tokens. Do NOT use for component behavior, APIs, or data binding — use igniteui-angular-components or igniteui-angular-grids instead." -user-invocable: true ---- - -# Ignite UI for Angular — Theming Skill - -## Description - -This skill teaches AI agents how to theme Ignite UI for Angular applications using the Sass-based theming system and the **Ignite UI Theming MCP server**. It covers global themes, palettes, typography, elevations, component-level theming, layout controls (spacing, sizing, roundness), and how to use the MCP tools for code generation. - -## Prerequisites - -- An Angular project with `igniteui-angular` installed, **or** `@infragistics/igniteui-angular` for licensed users -- Sass support enabled in the project (default for Angular CLI projects) - -## Ignite UI Theming MCP Server (recommended, not required) - -The `igniteui-theming` MCP server generates production-ready theme code (`create_theme`, `create_palette`, `create_component_theme`, `get_component_design_tokens`, `get_color`, and more). When its tools are available, prefer them over writing theme Sass from memory — start by calling `detect_platform`. - -If the tools are not available, do not block the task — use the manual Sass workflow in this file. Suggest that the user run `npx -y igniteui-cli ai-config` from the project root (it configures both the `igniteui-cli` and `igniteui-theming` MCP servers) and reload the editor. MCP servers cannot be started mid-session; the configuration takes effect on the next session. Editor-specific details are in [`references/mcp-setup.md`](./references/mcp-setup.md). - -## Theming Architecture - -> **Docs:** [Theming Overview](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/index) · [Palette](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/palettes) · [Typography](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/typography) · [Elevations](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/elevations) - -The Ignite UI theming system is built on four pillars: - -| Concept | Purpose | -| -------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| **Palette** | Color system with primary, secondary, surface, gray, info, success, warn, error families, each with shades 50–900 + accents A100–A700 | -| **Typography** | Font family, type scale (h1–h6, subtitle, body, button, caption, overline) | -| **Elevations** | Box-shadow levels 0–24 for visual depth | -| **Schema** | Per-component recipes mapping palette colors to component tokens | - -### Design Systems - -Four built-in design systems are available: - -- **Material** (default) — Material Design 3 -- **Bootstrap** — Bootstrap-inspired -- **Fluent** — Microsoft Fluent Design -- **Indigo** — Infragistics Indigo Design - -Each has light and dark variants (e.g., `$light-material-schema`, `$dark-fluent-schema`). - -## Pre-built Themes - -The quickest way to theme an app is to include a pre-built CSS file in `angular.json`: - -```json -"styles": ["node_modules/igniteui-angular/styles/igniteui-angular.css"] -``` - -> **Licensed package users:** replace `igniteui-angular` with `@infragistics/igniteui-angular` in the path: -> ```json -> "styles": ["node_modules/@infragistics/igniteui-angular/styles/igniteui-angular.css"] -> ``` - -Available pre-built CSS files: - -| File | Theme | -| ------------------------------ | --------------- | -| `igniteui-angular.css` | Material Light | -| `igniteui-angular-dark.css` | Material Dark | -| `igniteui-fluent-light.css` | Fluent Light | -| `igniteui-fluent-dark.css` | Fluent Dark | -| `igniteui-bootstrap-light.css` | Bootstrap Light | -| `igniteui-bootstrap-dark.css` | Bootstrap Dark | -| `igniteui-indigo-light.css` | Indigo Light | -| `igniteui-indigo-dark.css` | Indigo Dark | - -All files are located under `node_modules/igniteui-angular/styles/` (or `node_modules/@infragistics/igniteui-angular/styles/` for the licensed package). - -## Custom Sass Theme (Manual) - -> **Important — Sass Theming Docs**: If the user explicitly asks to build a Sass-based theme or configure Sass, refer to the dedicated Sass documentation: -> -> - [Sass Theming Overview](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/index) -> - [Sass Configuration](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/configuration) -> - [Sass Palettes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/palettes) -> - [Sass Component Themes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/component-themes) - -Create a `styles.scss` file and include it in `angular.json`: - -```scss -// Open-source package -@use 'igniteui-angular/theming' as *; -// Licensed package — same Sass API, different import path -// @use '@infragistics/igniteui-angular/theming' as *; -$my-palette: palette( - $primary: #1976d2, - $secondary: #ff9800, - $surface: #fafafa, -); - -// 2. Typography (optional) -@include typography($font-family: $material-typeface, $type-scale: $material-type-scale); - -// 3. Core reset & base styles -@include core(); - -// 4. Apply theme -@include theme($palette: $my-palette, $schema: $light-material-schema); -``` - -For dark themes, use a dark surface color and a dark schema: - -```scss -$dark-palette: palette( - $primary: #90caf9, - $secondary: #ffb74d, - $surface: #121212, -); - -@include theme($palette: $dark-palette, $schema: $dark-material-schema); -``` - -## Component-Level Theming - -> **Docs:** [Component Themes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/component-themes) - -Override individual component appearance using component theme functions and the `tokens` mixin. - -All color values passed to component themes must be palette tokens, not raw hex/RGB/HSL — see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation) below. - -```scss -@use 'igniteui-angular/theming' as *; - -$custom-avatar: avatar-theme( - $schema: $light-material-schema, - $background: var(--ig-primary-500), - $color: var(--ig-primary-500-contrast), -); - -igx-avatar { - @include tokens($custom-avatar); -} -``` - -### Discovering Available Tokens - -Each component has its own set of design tokens (themeable CSS custom properties). Before theming a component, you must know which tokens exist. Use the **MCP tool** `get_component_design_tokens` to discover them. - -### Compound Components - -Some components (e.g., `combo`, `grid`, `date-picker`, `select`) are **compound** — they contain internal child components, each requiring their own theme. For example, `date-picker` uses `calendar`, `flat-button`, and `input-group` internally. - -Workflow for compound components: -1. Call `get_component_design_tokens` for the parent (e.g., `date-picker`) -2. The response lists related themes and scope selectors -3. Call `create_component_theme` for each child, using the parent's selector as the wrapper - -## Layout Controls - -### Sizing - -> **Docs:** [Display Density / Sizing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/display-density) - -Controls the size of components via `--ig-size` (values: 1 = small, 2 = medium, 3 = large): - -```css -/* Global */ -:root { - --ig-size: 2; -} - -/* Component-scoped */ -igx-grid { - --ig-size: 1; -} -``` - -### Spacing - -> **Docs:** [Spacing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/spacing) - -Controls internal padding via `--ig-spacing` (1 = default, 0.5 = compact, 2 = spacious): - -```css -:root { - --ig-spacing: 1; -} -.compact-section { - --ig-spacing: 0.75; -} -``` - -### Roundness - -Controls border-radius via `--ig-radius-factor` (0 = square, 1 = maximum radius): - -```css -:root { - --ig-radius-factor: 1; -} -igx-avatar { - --ig-radius-factor: 0.5; -} -``` - -## Using the Theming MCP Server - -The Ignite UI Theming MCP server provides tools for AI-assisted theme code generation. - -> **File safety**: When applying generated theme code to an existing style file, make targeted edits that preserve the user's existing custom styles — never wholesale-replace the file contents. If the environment does not gate file writes behind user approval, present the change as a diff for review before writing. - -Always follow this workflow: - -### Step 1 — Detect Platform - -``` -Tool: detect_platform -``` -This auto-detects `angular` from `package.json` and sets the correct import paths. - -### Step 2 — Generate a Full Theme - -``` -Tool: create_theme -Params: { - platform: "angular", - designSystem: "material", - primaryColor: "#1976D2", - secondaryColor: "#FF9800", - surfaceColor: "#FAFAFA", - variant: "light", - fontFamily: "'Roboto', sans-serif", - includeTypography: true, - includeElevations: true -} -``` - -Generates a complete Sass file with palette, typography, elevations, and the `theme()` mixin call. - -### Step 3 — Customize Individual Components - -``` -Tool: get_component_design_tokens -Params: { component: "grid" } -``` - -Then use **palette token references** (not hardcoded hex values) for every color: - -``` -Tool: create_component_theme -Params: { - platform: "angular", - designSystem: "material", - variant: "light", - component: "grid", - tokens: { - "header-background": "var(--ig-primary-50)", - "header-text-color": "var(--ig-primary-800)" - } -} -``` - -### Step 4 — Generate a Palette - -For simple mid-luminance base colors: - -``` -Tool: create_palette -Params: { - platform: "angular", - primary: "#1976D2", - secondary: "#FF9800", - surface: "#FAFAFA", - variant: "light" -} -``` - -For brand-specific exact shade values, use `create_custom_palette` with `mode: "explicit"` for full control over each shade. - -### Step 5 — Adjust Layout - -``` -Tool: set_size → { size: "medium" } -Tool: set_spacing → { spacing: 0.75, component: "grid" } -Tool: set_roundness → { radiusFactor: 0.8 } -``` - -### Step 6 — Reference Palette Colors via `get_color` - -After a palette is generated, use the `get_color` tool to obtain the correct CSS custom property reference for any color you need (see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation)): - -``` -Tool: get_color -Params: { color: "primary", variant: "600" } -→ var(--ig-primary-600) - -Params: { color: "primary", variant: "600", contrast: true } -→ var(--ig-primary-600-contrast) - -Params: { color: "primary", opacity: 0.5 } -→ hsl(from var(--ig-primary-500) h s l / 0.5) -``` - -### Loading Reference Data - -Use `read_resource` with these URIs for preset values and documentation: - -| URI | Content | -| --------------------------------- | ------------------------------ | -| `theming://presets/palettes` | Preset palette colors | -| `theming://presets/typography` | Typography presets | -| `theming://presets/elevations` | Elevation shadow presets | -| `theming://guidance/colors/usage` | Which shades for which purpose | -| `theming://guidance/colors/roles` | Semantic color roles | -| `theming://guidance/colors/rules` | Light/dark theme rules | -| `theming://platforms/angular` | Angular platform specifics | - -## No Hardcoded Colors After Palette Generation - -This is the single most important theming rule. Once a palette exists (via `palette()` in Sass or `create_palette` / `create_theme` via MCP), every color reference must come from the palette tokens, which are available as CSS custom properties on `:root`. This applies to all style code: component theme `tokens` values, custom CSS rules (`color`, `background`, `border-color`, `fill`, `stroke`), Sass variables for derived values, Angular `host` bindings, and inline styles. Hardcoded values break theme switching and drift out of sync when the palette changes. - -### Correct: Palette Tokens - -```scss -// All colors come from the theme — respects palette changes and dark/light switching -.sidebar { - background: var(--ig-surface-500); - color: var(--ig-gray-900); - border-right: 1px solid var(--ig-gray-200); -} - -.accent-badge { - background: var(--ig-secondary-500); - color: var(--ig-secondary-500-contrast); -} - -.hero-section { - // Semi-transparent primary overlay - background: hsl(from var(--ig-primary-500) h s l / 0.12); -} -``` - -### Incorrect: Hardcoded Values - -```scss -// WRONG — these break when the palette changes and ignore dark/light mode -$primary-color: #00838f; // ✗ hardcoded -$secondary-color: #3d5afe; // ✗ hardcoded -$surface-color: #f0f5fa; // ✗ hardcoded - -.sidebar { - background: $surface-color; // ✗ not a palette token - color: #333; // ✗ not a palette token -} -``` - -### When Raw Hex Values Are OK - -Raw hex values are acceptable **only** in these contexts: - -1. **`palette()` call** — the initial seed colors that generate the full palette -2. **`create_palette` / `create_theme` MCP tool inputs** — the base colors passed to the tool -3. **Non-palette decorative values** — e.g., a one-off SVG illustration color that intentionally stays fixed regardless of theme - -Everything else must use `var(--ig--)` tokens. - -## Common Patterns - -> **Light/dark theme switching, scoped themes, and licensed package configuration are in [`references/common-patterns.md`](./references/common-patterns.md).** Read that file for ready-to-use Sass patterns. - -## Key Rules - -1. **Preserve existing styles** — apply theme code as targeted edits to existing style files; never wholesale-replace a file the user has customized -2. **Always call `detect_platform` first** when using MCP tools -3. **Always call `get_component_design_tokens` before `create_component_theme`** to discover valid token names -4. **Palette shades 50 = lightest, 900 = darkest** for all chromatic colors — never invert for dark themes (only gray inverts) -5. **Surface color must match the variant** — light color for `light`, dark color for `dark` -6. **Use `@include core()` once** before `@include theme()` in your global styles -7. **Component themes use `@include tokens($theme)`** inside a selector to emit CSS custom properties -8. **For compound components**, follow the full checklist returned by `get_component_design_tokens` — theme each child component with its scoped selector -9. **No hardcoded colors after palette generation** — see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation); raw hex/RGB/HSL is only acceptable in the initial palette seed values - -## Related Skills - -- [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) — UI components (form controls, layout, data display, feedback/overlays, directives, charts) -- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — Data Grids (Flat Grid, Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid) diff --git a/.agents/skills/igniteui-angular-theming/references/common-patterns.md b/.agents/skills/igniteui-angular-theming/references/common-patterns.md deleted file mode 100644 index 9888eff..0000000 --- a/.agents/skills/igniteui-angular-theming/references/common-patterns.md +++ /dev/null @@ -1,45 +0,0 @@ -# Common Theming Patterns - -> **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.** - -## Contents - -- [Switching Between Light and Dark Themes](#switching-between-light-and-dark-themes) -- [Scoping a Theme to a Container](#scoping-a-theme-to-a-container) -- [Licensed Package Users](#licensed-package-users) - -## Switching Between Light and Dark Themes - -```scss -@use 'igniteui-angular/theming' as *; - -$light-palette: palette($primary: #1976D2, $secondary: #FF9800, $surface: #FAFAFA); -$dark-palette: palette($primary: #90CAF9, $secondary: #FFB74D, $surface: #121212); - -@include core(); -@include typography($font-family: $material-typeface, $type-scale: $material-type-scale); - -// Light is default -@include theme($palette: $light-palette, $schema: $light-material-schema); - -// Dark via class on or -.dark-theme { - @include theme($palette: $dark-palette, $schema: $dark-material-schema); -} -``` - -## Scoping a Theme to a Container - -```scss -.admin-panel { - @include theme($palette: $admin-palette, $schema: $light-indigo-schema); -} -``` - -## Licensed Package Users - -If using the licensed `@infragistics/igniteui-angular` package, set `licensed: true` on MCP tool calls and change the Sass import: - -```scss -@use '@infragistics/igniteui-angular/theming' as *; -``` diff --git a/.agents/skills/igniteui-angular-theming/references/mcp-setup.md b/.agents/skills/igniteui-angular-theming/references/mcp-setup.md deleted file mode 100644 index 1e69e24..0000000 --- a/.agents/skills/igniteui-angular-theming/references/mcp-setup.md +++ /dev/null @@ -1,74 +0,0 @@ -# Setting Up the Theming MCP Server - -> **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.** - -The Ignite UI Theming MCP server enables AI assistants to generate production-ready theming code. It must be configured in the editor/agent before the theming tools become available, and the editor or agent session must be restarted afterwards — MCP servers cannot be hot-loaded into a running session. - -> Depending on the client, MCP tool names may appear with a server prefix (e.g. `mcp__igniteui-theming__detect_platform` in Claude Code). This skill refers to tools by their bare names. - -## Recommended: One-Command Setup - -From the project root: - -```bash -npx -y igniteui-cli ai-config -``` - -This configures **both** the `igniteui-theming` and `igniteui-cli` MCP servers, copies the Ignite UI Agent Skills into the project, and preserves any existing server entries in the config files. Inline options such as `--agents claude copilot` and `--assistants vscode cursor` select which agents and editors to configure. - -## Manual Configuration (fallback) - -Use these only when `ai-config` is unavailable or your editor is not covered by it. - -### VS Code — `.vscode/mcp.json` - -```json -{ - "servers": { - "igniteui-theming": { - "command": "npx", - "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"] - } - } -} -``` - -`npx -y` works whether `igniteui-theming` is installed locally in `node_modules` or needs to be pulled from the npm registry. - -### Claude Code - -```bash -claude mcp add igniteui-theming -- npx -y igniteui-theming igniteui-theming-mcp -``` - -### Cursor — `.cursor/mcp.json` - -```json -{ - "mcpServers": { - "igniteui-theming": { - "command": "npx", - "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"] - } - } -} -``` - -### Claude Desktop - -Edit the Claude Desktop config file (**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`, **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`) and add the same `mcpServers` entry as shown for Cursor above. - -### WebStorm / JetBrains IDEs - -1. Go to **Settings → Tools → AI Assistant → MCP Servers** -2. Click **+ Add MCP Server** -3. Set Command to `npx` and Arguments to `-y igniteui-theming igniteui-theming-mcp` -4. Click OK and restart the AI Assistant - -## Verifying the Setup - -After restarting the editor/session, ask the AI assistant: - -> "Detect which Ignite UI platform my project uses" - -If the MCP server is running, the `detect_platform` tool will analyze `package.json` and return the detected platform (e.g., `angular`). diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md deleted file mode 100644 index 13b3007..0000000 --- a/.claude/CLAUDE.md +++ /dev/null @@ -1,58 +0,0 @@ -You are an expert in TypeScript, Angular, and scalable web application development. You write functional, maintainable, performant, and accessible code following Angular and TypeScript best practices. - -## TypeScript Best Practices - -- Use strict type checking -- Prefer type inference when the type is obvious -- Avoid the `any` type; use `unknown` when type is uncertain - -## Angular Best Practices - -- Always use standalone components over NgModules -- Must NOT set `standalone: true` inside Angular decorators. It's the default in Angular v20+. -- Use signals for state management -- Implement lazy loading for feature routes -- Do NOT use the `@HostBinding` and `@HostListener` decorators. Put host bindings inside the `host` object of the `@Component` or `@Directive` decorator instead -- Use `NgOptimizedImage` for all static images. - - `NgOptimizedImage` does not work for inline base64 images. - -## Accessibility Requirements - -- It MUST pass all AXE checks. -- It MUST follow all WCAG AA minimums, including focus management, color contrast, and ARIA attributes. - -### Components - -- Keep components small and focused on a single responsibility -- Use `input()` and `output()` functions instead of decorators -- Use `computed()` for derived state -- Set `changeDetection: ChangeDetectionStrategy.OnPush` in `@Component` decorator -- Prefer inline templates for small components -- Prefer Reactive forms instead of Template-driven ones -- Do NOT use `ngClass`, use `class` bindings instead -- Do NOT use `ngStyle`, use `style` bindings instead -- When using external templates/styles, use paths relative to the component TS file. - -## State Management - -- Use signals for local component state -- Use `computed()` for derived state -- Keep state transformations pure and predictable -- Do NOT use `mutate` on signals, use `update` or `set` instead - -## Templates - -- Keep templates simple and avoid complex logic -- Use native control flow (`@if`, `@for`, `@switch`) instead of `*ngIf`, `*ngFor`, `*ngSwitch` -- Use the async pipe to handle observables -- Do not assume globals like (`new Date()`) are available. - -## Services - -- Design services around a single responsibility -- Use the `providedIn: 'root'` option for singleton services -- Use the `inject()` function instead of constructor injection - -## UI components - -- Use `igniteui-angular`. diff --git a/.claude/skills/igniteui-angular-components/SKILL.md b/.claude/skills/igniteui-angular-components/SKILL.md deleted file mode 100644 index 7551cdf..0000000 --- a/.claude/skills/igniteui-angular-components/SKILL.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -name: igniteui-angular-components -description: "Covers all non-grid Ignite UI for Angular UI components: application scaffolding and setup, form controls (inputs, combos, selects, date/time pickers, calendar, checkbox, radio, switch, slider), layout containers (tabs, stepper, accordion, splitter, navigation drawer), data-display components (list, tree, card, chips, carousel, paginator, progress indicators, chat), feedback overlays (dialog, snackbar, toast, banner), directives (button, icon button, button group, ripple, tooltip, drag-and-drop), Dock Manager, Layout Manager, Tile Manager, and Charts. Use when users ask about any Ignite UI Angular component that is NOT a data grid — such as forms, dropdowns, pickers, dialogs, navigation, lists, trees, cards, charts, or initial project setup. Do NOT use for data grids, tables, or tabular data — use igniteui-angular-grids instead. Do NOT use for theming or styling — use igniteui-angular-theming instead." -user-invocable: true ---- - -# Ignite UI for Angular — UI Components - -## Prerequisites -- An Angular project on the major version matching the installed `igniteui-angular` package (igniteui-angular majors track Angular majors) -- `@angular/cli` installed -- `igniteui-angular` or `@infragistics/igniteui-angular` added to the project via `ng add igniteui-angular` (or the `@infragistics` variant) or `npm install` — see [Package Variants](#package-variants) below. -- A theme applied to the application (see [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md)). -- `provideAnimations()` in `app.config.ts` — **required before using any overlay or animated component** - -## Ignite UI CLI MCP Server (recommended, not required) - -The `igniteui-cli` MCP server provides `list_components`, `get_doc`, `search_docs`, `search_api`, and `get_api_reference`. Its **full component docs cover a subset of components** (the catalog grows over releases — call `list_components` once to see what exists; e.g. Combo, Simple Combo, Chat, Tooltip, and grid toolbar/export docs). Where a `get_doc` doc exists, prefer it over the reference files below. `search_api`/`get_api_reference` cover API members (inputs, outputs, methods) for all components — use them for member-level lookups. For everything else, the reference files below are the primary guidance. - -If the tools are not available, do not block the task — use the reference files. Suggest that the user run `npx -y igniteui-cli ai-config` from the project root (it configures both the `igniteui-cli` and `igniteui-theming` MCP servers and copies the agent skill files) and reload the editor. MCP servers cannot be started mid-session; the configuration takes effect on the next session. Editor-specific details are in [`references/mcp-setup.md`](./references/mcp-setup.md). - -## Required Workflow - -**This file is a routing hub only. It contains no code examples and no API details.** Component APIs change between releases, so never write component selectors, import paths, input/output names, or directive names from memory — read the relevant reference files first. - -1. **Identify every component or feature involved.** Map the user's request to one or more rows in the Task → Reference File table below. A single request often spans multiple categories (e.g., a form inside a Dialog requires both `form-controls.md` and `feedback.md`). -2. **Read every identified reference file in full**, in a single parallel batch of file reads — even if you believe you already know the answer. -3. **Then produce output**, based only on what you read. If something is not covered by the reference files, look it up with `get_doc`/`search_docs` when the MCP tools are available; otherwise state explicitly that the detail is unverified instead of guessing. - -### Task → Reference File - -| Task | Reference file to read | -|---|---| -| App setup, `app.config.ts` providers, `provideAnimations()`, entry-point imports, convenience directive arrays | [`references/setup.md`](./references/setup.md) | -| Input Group, Combo, Simple Combo, Select, Date Picker, Date Range Picker, Time Picker, Calendar, Checkbox, Radio, Switch, Slider, Autocomplete, reactive/template-driven forms | [`references/form-controls.md`](./references/form-controls.md) | -| Tabs, Bottom Navigation, Stepper, Accordion, Expansion Panel, Splitter, Navigation Drawer | [`references/layout.md`](./references/layout.md) | -| List, Tree, Card, Chips, Avatar, Badge, Icon, Carousel, Paginator, Progress Indicators, Chat | [`references/data-display.md`](./references/data-display.md) | -| Dialog, Snackbar, Toast, Banner | [`references/feedback.md`](./references/feedback.md) | -| Button, Icon Button, Button Group, Ripple, Tooltip, Drag and Drop | [`references/directives.md`](./references/directives.md) | -| Layout Manager (`igxLayout`, `igxFlex` directives), Dock Manager (`igc-dockmanager` web component), Tile Manager (`igc-tile-manager` web component) | [`references/layout-manager.md`](./references/layout-manager.md) | -| Charts (Area, Bar, Column, Stock/Financial, Pie), chart configuration, chart features (animation, tooltips, markers, highlighting, zooming), data binding | [`references/charts.md`](./references/charts.md) | - -> **When in doubt, read more rather than fewer reference files.** The cost of an unnecessary file read is negligible; the cost of hallucinated API usage is a broken application. - ---- - -## Package Variants - -| Package | Install | Who uses it | -|---|---|---| -| `igniteui-angular` | `npm install igniteui-angular` | Open-source / community | -| `@infragistics/igniteui-angular` | Requires private `@infragistics` registry | Licensed / enterprise users | - -Both packages share **identical entry-point paths**. Check `package.json` and use that package name as the prefix for every import. Never import from the root barrel of either package. -Both packages can be added to the project using `@angular/cli` with the following commands: `ng add igniteui-angular` or `ng add @infragistics/igniteui-angular`. - ---- - -## Related Skills - -- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — Data Grids (Flat Grid, Tree Grid, Hierarchical Grid, Pivot Grid, Grid Lite) -- [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.claude/skills/igniteui-angular-components/references/charts.md b/.claude/skills/igniteui-angular-components/references/charts.md deleted file mode 100644 index 2e9bc6e..0000000 --- a/.claude/skills/igniteui-angular-components/references/charts.md +++ /dev/null @@ -1,250 +0,0 @@ -# Angular Charts Reference - -## Contents - -- [Overview](#overview) -- [General Chart Configuration](#general-chart-configuration) -- [Chart Types Reference](#chart-types-reference) -- [Standalone component example](#standalone-component-example) -- [Common errors and fixes](#common-errors-and-fixes) -- [Styling & Theming](#styling--theming) - -## Overview - -Ignite UI for Angular Charts provides 65+ chart types for data visualization. Charts are packaged separately in `igniteui-angular-charts` (or `@infragistics/igniteui-angular-charts` for licensed users). -This reference gives high-level guidance on when to use each chart type, their key features, and common API members. The MCP doc catalog currently has no chart docs — use `search_api` for member-level lookups. - -### Chart Component packages -- `igniteui-angular-charts` — Category Chart, Financial Chart, Data Chart, Pie Chart, and Sparkline components (NPM) -- `@infragistics/igniteui-angular-charts` — Licensed version with same API (ProGet) - -### Main Chart Components - -> **IMPORTANT — Not Standalone Components**: Chart components from `igniteui-angular-charts` are **NOT** Angular standalone components (they predate the standalone API). They must always be imported via their **NgModule**. Standalone Angular components (Angular 14+) can still import NgModules directly in their `imports` array — this is fully supported. - -| Component | NgModule to import | Description | -|---|---|---| -| `IgxCategoryChartComponent` | `IgxCategoryChartModule` | Simplified API for column, line, area, spline, StepLine/StepArea, point, waterfall | -| `IgxFinancialChartComponent` | `IgxFinancialChartModule` | Stock/candlestick charts with OHLC data | -| `IgxDataChartComponent` | `IgxDataChartModule` | Advanced: explicit axes, series, >65 chart types | -| `IgxPieChartComponent` | `IgxPieChartModule` | Part-to-whole pie and donut charts | -| `IgxDataPieChartComponent` | `IgxDataPieChartModule` | Simplified API for pie charts | -| `IgxLegendComponent` | `IgxLegendModule` | Shared legend component | -| `IgxSparklineComponent` | `IgxSparklineModule` | Compact inline chart for grid cells or small layouts | - -### When to use each: -- **Category Chart** → Use for simple area/column/line/spline/waterfall; let framework auto-configure -- **Financial Chart** → Use for stock data with time-series OHLC, indicators, volume -- **Data Chart** → Use for advanced scenarios: multiple axes, custom series combinations, stacked/scatter -- **Pie Chart** → Use for part-to-whole (segments sum to 100%) -- **Sparkline** → Use for compact inline visualization in grid cells, dashboards, or small-space layouts - ---- - -## General Chart Configuration - -### Chart Type Selection -- **Category Chart**: `chartType` property — type: `CategoryChartType` (Auto, Line, Area, Column, Spline, ...) -- **Financial Chart**: `chartType` property — type: `FinancialChartType` (Auto, Bar, Candle, ...) -- **Data Chart**: Configure explicit series (IgxAreaSeriesComponent, IgxBarSeriesComponent, IgxColumnSeriesComponent, etc.) -- **Sparkline**: `displayType` property — type: `SparklineDisplayType` (Line, Area, Column, WinLoss) -- **Pie Chart**: No chartType needed; inherent pie structure - -### Required Properties - -**IgxCategoryChartComponent** (simplest API; auto-detects numeric & string columns): -- `dataSource` — Data array (required) -- `chartType` — type: `CategoryChartType` -- Component auto-detects: first string column → X-axis labels, numeric columns → Y-axis data - -**IgxDataChartComponent** (advanced; requires explicit configuration): -- Data is bound on individual series via `itemsSource`, not on the chart itself -- `valueMemberPath` — Set on the series, not the chart -- Requires explicit axis and series components - -**IgxFinancialChartComponent** (stock data): -- `dataSource` — Data array with date + OHLC columns (chart auto-detects columns) -- `chartType` — type: `FinancialChartType` - -**IgxPieChartComponent**: -- `dataSource` — Data array -- `labelMemberPath` — Field with category labels -- `valueMemberPath` — Field with numeric values - -### Responsive & Sizing -- Set height/width on chart container (div, flexbox parent). The chart will render with 0px height if the container doesn't have a defined height. - ---- - -## Chart Types Reference - -### Area Chart (`IgxCategoryChartComponent`, `chartType: 'Area'`) -- **Use**: Trends over time, cumulative part-to-whole -- **Data**: X-axis categories, Y-axis numeric values -- **Variants**: Area, StepArea, Stacked Area, Stacked 100% Area -- **API**: `chartType`, `dataSource` (auto-detects numeric columns) -- **Best Practices**: - - Start Y-axis at 0 for accuracy - - Use transparent colors for overlaid series - - Order time-series left to right -- **Avoid**: More than 7-10 series (readability), when data values are similar (overlap) - -### Bar Chart (`IgxDataChartComponent`, `IgxBarSeriesComponent`) -- **Use**: Compare categories, show rankings, time-series changes -- **Data**: X-axis numeric, Y-axis categories (reversed from Column) -- **Variants**: Grouped Bar, Stacked Bar, Stacked 100% Bar, Polar Bar -- **Best Practices**: - - Start numeric axis at 0 - - Sort categories by value (ascending/descending) - - Right-align Y-axis labels -- **Avoid**: Too much data (axis becomes illegible), Time-series detail (use Line instead) - -### Column Chart (`IgxCategoryChartComponent`, `chartType: 'Column'`) -- **Use**: Compare categories, show distribution, time-series changes -- **Data**: X-axis categories, Y-axis numeric values -- **Variants**: Column, StackedColumn, Stacked100%Column, RangeColumn, WaterfallColumn -- **Best Practices**: - - Start Y-axis at 0 - - Order time-series left to right -- **Avoid**: Many series (>10) side-by-side (readability) -- **Related**: Bar Chart (horizontal equivalent, use `IgxDataChartComponent` + `IgxBarSeriesComponent`), Waterfall (show differences between values) - -### Stock Chart (`IgxFinancialChartComponent`) -- **Use**: Financial/OHLC data analysis, candlestick visualization, technical indicators -- **Data Structure**: - - **Required**: Date/time column, numeric value column(s) - - **For Candlestick**: Open, High, Low, Close (4 numeric columns) - - **With Volume**: Open, High, Low, Close, Volume (5 numeric columns) -- **Display Modes**: - - **Price Pane**: Show candlestick, OHLC bar, line (configurable via `chartType`) - - **Volume Pane**: Show trading volume (column, line, or area chart) - - **Indicator Pane**: Financial indicators (RSI, MACD, Bollinger Bands, etc.) - - **Zoom Pane**: Navigation slider to zoom/pan -- **Indicators**: RSI, MACD, Bollinger Bands, Force Index, Standard Deviation, and more -- **Features**: - - Crosshairs with value snapshots - - Trendlines and overlays - - Time-based filters (users can select 1M, 3M, 6M, YTD, 1Y, ALL) -- **Data Binding**: - - The Financial Chart auto-detects OHLC, Volume, and Date columns from the data source - - Data items should have properties named like `open`, `high`, `low`, `close`, `volume`, `date` (or similar) - - No explicit member path properties are needed on the chart component - -### Pie Chart (`IgxPieChartComponent` or `IgxDataPieChartComponent`) -- **Use**: Part-to-whole visualization (segments sum to 100%) -- **Data**: Category labels, numeric values -- **Variants**: Pie, Donut (ring), Radial Pie -- **Features**: - - Slice explosion (separate a slice from pie) - - Slice selection (single or multiple) - - Legends with custom item templates - - Animation on load - - "Others" category for small segments -- **Best Practices**: - - Use for small data sets (6-8 segments max) - - Arrange largest to smallest (clockwise from 12 o'clock) - - Ensure segments sum to 100% - - Use distinguishable colors -- **Avoid**: Many segments (>8), change over time (use Bar/Line instead), precise comparisons (Bar is better) - -### Sparkline (`IgxSparklineComponent`) -- **Use**: Compact inline data visualization in grid cells, dashboards, or small-space layouts -- **Data**: One-dimensional array with at least one numeric field -- **Variants**: Line, Area, Column, WinLoss -- **Features**: - - Configurable markers (All, Low, High, First, Last, Negative) - - Normal range — horizontal shaded band (`normalRangeMinimum`, `normalRangeMaximum`) - - Trendlines via `trendLineType` - - Unknown value plotting via `unknownValuePlotting` - - Tooltip support via `tooltipTemplate` -- **Best Practices**: - - Set explicit `height` and `width` on the component or its container (renders at 0px otherwise) - - Start Y-axis at 0 for accurate comparisons - - Use Line or Area type for trend visualization; Column for discrete comparisons; WinLoss for binary positive/negative - - When embedding in a grid cell, set compact dimensions (e.g. `height="40px"` `width="220px"`) -- **Avoid**: Detailed data analysis (use Category Chart or Data Chart), displaying many data labels (Sparkline only supports first/last X-axis labels and high/low Y-axis values) - ---- - -### Standalone component example - -```typescript -import { Component } from '@angular/core'; -import { - IgxCategoryChartModule, - CategoryChartType -} from 'igniteui-angular-charts'; - -@Component({ - selector: 'app-sales-chart', - imports: [ - IgxCategoryChartModule // ✅ Import the NgModule, NOT IgxCategoryChartComponent - ], - template: ` - - - ` -}) -export class SalesChartComponent { - data = [ - { month: 'Jan', revenue: 5000 }, - { month: 'Feb', revenue: 6500 }, - { month: 'Mar', revenue: 7200 } - ]; -} -``` - -### Common errors and fixes - -**Error 1: NG2011 — component not standalone** -``` -// ❌ WRONG: importing component directly -import { IgxCategoryChartComponent } from 'igniteui-angular-charts'; -@Component({ imports: [IgxCategoryChartComponent] }) - -// ✅ CORRECT: import the NgModule instead -import { IgxCategoryChartModule } from 'igniteui-angular-charts'; -@Component({ imports: [IgxCategoryChartModule] }) -``` - -**Error 2: NG8002 — can't bind to property (incorrect inputs)** -``` -// ❌ WRONG: using IgxDataChartComponent or generic property names - - [valueMemberPath]="'value'" - [showDefaultTooltip]="true" - [transitionDuration]="400"> - -// ✅ CORRECT: use Category Chart's actual inputs - -``` - -**Key difference**: IgxCategoryChartComponent **auto-detects** numeric columns and requires minimal configuration. For fine-grained control over field mapping and series types, use `IgxDataChartComponent` instead (but it requires explicit series and axis components). - ---- - -## Styling & Theming - -### Color Customization -- **Series colors**: `brushes` (fill), `outlines` (border) -- **Marker colors**: `markerBrushes`, `markerOutlines` -- **Axis styles**: `xAxisMajorStroke`, `yAxisMajorStroke`, `xAxisLabelTextColor`, `yAxisLabelTextColor` -- **Tooltip**: Controlled via `toolTipType` and custom tooltip templates -- **Highlight**: `highlightingFadeOpacity` (opacity for faded non-highlighted series) - -### CSS & Host Binding -- Chart containers inherit CSS flex/grid properties -- Use host element width/height for responsive sizing -- Theme colors via `IgxTheme` palette - diff --git a/.claude/skills/igniteui-angular-components/references/data-display.md b/.claude/skills/igniteui-angular-components/references/data-display.md deleted file mode 100644 index 5f0e510..0000000 --- a/.claude/skills/igniteui-angular-components/references/data-display.md +++ /dev/null @@ -1,273 +0,0 @@ -# Data Display & Other UI Components - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -## Contents - -- [List](#list) -- [Tree](#tree) -- [Card](#card) -- [Chips](#chips) -- [Avatar & Badge](#avatar--badge) -- [Icon](#icon) -- [Carousel](#carousel) -- [Paginator](#paginator) -- [Progress Indicators](#progress-indicators) -- [Chat (AI Chat Component)](#chat-ai-chat-component) - -## List - -```typescript -import { IGX_LIST_DIRECTIVES } from 'igniteui-angular/list'; -import { IgxAvatarComponent } from 'igniteui-angular/avatar'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - Contacts - @for (contact of contacts; track contact.id) { - - - {{ contact.name }} - {{ contact.phone }} - phone - - } - -``` - -Auxiliary directives for list items: `igxListThumbnail`, `igxListAction`, `igxListLine`, `igxListLineTitle`, `igxListLineSubTitle`. - -## Tree - -```typescript -import { IGX_TREE_DIRECTIVES } from 'igniteui-angular/tree'; -``` - -```html - - @for (node of treeData; track node.id) { - - folder - {{ node.label }} - @for (child of node.children; track child.id) { - - description - {{ child.label }} - - } - - } - -``` - -Selection modes: `'None'`, `'BiState'`, `'Cascading'`. - -## Card - -```typescript -import { IgxCardComponent, IgxCardHeaderComponent, IgxCardContentDirective, IgxCardActionsComponent, IgxCardMediaDirective, IgxCardHeaderTitleDirective, IgxCardHeaderSubtitleDirective, IgxCardThumbnailDirective } from 'igniteui-angular/card'; -import { IgxAvatarComponent } from 'igniteui-angular/avatar'; -import { IgxButtonDirective, IgxIconButtonDirective } from 'igniteui-angular/directives'; -import { IgxRippleDirective } from 'igniteui-angular/directives'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - - - - - - -

{{ article.title }}

-
{{ author.name }}
-
- -

{{ article.excerpt }}

-
- - - - -
-``` - -## Chips - -```typescript -import { IgxChipComponent, IgxChipsAreaComponent } from 'igniteui-angular/chips'; -``` - -```html - - @for (tag of tags; track tag) { - - {{ tag }} - - } - -``` - -## Avatar & Badge - -```typescript -import { IgxAvatarComponent } from 'igniteui-angular/avatar'; -import { IgxBadgeComponent } from 'igniteui-angular/badge'; -``` - -```html - -
- - -
- - - - - - - - - -``` - -```scss -// Required styles to position the badge as an overlay on the avatar -.avatar-badge-container { - position: relative; - display: inline-flex; - - igx-badge { - position: absolute; - bottom: 0; - right: 0; - transform: translate(25%, 25%); - } -} -``` - -Avatar shapes: `'circle'`, `'rounded'`, `'square'`. Sizes: `'small'`, `'medium'`, `'large'`, or custom CSS. -Badge types: `'primary'`, `'info'`, `'success'`, `'warning'`, `'error'`. - -## Icon - -```typescript -import { IgxIconComponent, IgxIconService } from 'igniteui-angular/icon'; -``` - -```html - -settings -favorite - - - -``` - -Register custom SVG icons in a service or component constructor: - -```typescript -export class AppComponent { - constructor() { - const iconService = inject(IgxIconService); - // From inline SVG string - iconService.addSvgIconFromText('logo', '...', 'my-icons'); - // From URL - iconService.addSvgIcon('arrow', '/assets/icons/arrow.svg', 'my-icons'); - } -} -``` - -## Carousel - -```typescript -import { IgxCarouselComponent, IgxSlideComponent } from 'igniteui-angular/carousel'; -``` - -```html - - @for (slide of slides; track slide.id) { - - -
{{ slide.caption }}
-
- } -
-``` - -> **Important:** Carousel uses Angular animations — ensure `provideAnimations()` is present in `app.config.ts`. - -## Paginator - -```typescript -import { IgxPaginatorComponent } from 'igniteui-angular/paginator'; -``` - -```html - - -``` - -> **NOTE:** For grid paging, attach `` inside the grid element. See [`../../igniteui-angular-grids/references/paging-remote.md`](../../igniteui-angular-grids/references/paging-remote.md) for grid-specific paging patterns. - -## Progress Indicators - -```typescript -import { IgxLinearProgressBarComponent } from 'igniteui-angular/progressbar'; -import { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar'; -``` - -```html - - - - - - - - - -``` - -Types for linear bar: `'default'`, `'info'`, `'success'`, `'warning'`, `'error'`. - -## Chat (AI Chat Component) - -> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "chat" })` covers messages, attachments, quick replies, typing indicators, templates, and styling. Prefer it over writing chat code from memory. - -```typescript -import { IgxChatComponent, IgxChatMessageContextDirective, type IgxChatOptions } from 'igniteui-angular/chat'; -import { MarkdownPipe } from 'igniteui-angular/chat-extras'; // template usage: message.text | fromMarkdown | async -``` - -Gotchas not obvious from the doc: - -- The markdown pipe class is `MarkdownPipe` (from `igniteui-angular/chat-extras`) but its template name is `fromMarkdown`, and it is async — combine with `AsyncPipe`. -- Custom templates (`messageHeader`, `messageContent`, `suggestionPrefix`, …) are passed as one object via the `[templates]` input — collect the `ng-template` refs with `viewChild` and assemble the object in an `effect()` (or `computed()`). - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner -- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop -- [`../../igniteui-angular-grids/references/paging-remote.md`](../../igniteui-angular-grids/references/paging-remote.md) — Grid-specific paginator usage diff --git a/.claude/skills/igniteui-angular-components/references/directives.md b/.claude/skills/igniteui-angular-components/references/directives.md deleted file mode 100644 index 3bfa990..0000000 --- a/.claude/skills/igniteui-angular-components/references/directives.md +++ /dev/null @@ -1,162 +0,0 @@ -# Directives - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -## Contents - -- [Button & Icon Button](#button--icon-button) -- [Button Group](#button-group) -- [Ripple Effect](#ripple-effect) -- [Tooltip](#tooltip) -- [Drag and Drop](#drag-and-drop) - -## Button & Icon Button - -```typescript -import { IgxButtonDirective, IgxIconButtonDirective } from 'igniteui-angular/directives'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - - - - - - - - - - - - -``` - -Button variants for `igxButton`: `'flat'`, `'contained'`, `'outlined'`, `'fab'`. -Button variants for `igxIconButton`: `'flat'`, `'outlined'`, `'contained'`. - -## Button Group - -```typescript -// Option A — convenience collection (includes IgxButtonGroupComponent + IgxButtonDirective) -import { IGX_BUTTON_GROUP_DIRECTIVES } from 'igniteui-angular/button-group'; - -// Option B — individual imports -import { IgxButtonGroupComponent } from 'igniteui-angular/button-group'; -import { IgxButtonDirective } from 'igniteui-angular/directives'; - -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - - - - -``` - -- `selectionMode`: `'single'` (default) | `'singleRequired'` (one always stays selected) | `'multi'` -- `alignment`: `'horizontal'` (default) | `'vertical'`; `[disabled]` on the group disables all buttons -- `(selected)`/`(deselected)` emit `IButtonGroupEventArgs` (`{ owner, button, index }`, from `igniteui-angular/button-group`) -- Programmatic: `selectButton(index)`, `deselectButton(index)`, `selectedButtons` on `IgxButtonGroupComponent` -- Further members: `search_api({ framework: "angular", query: "IgxButtonGroupComponent" })` - -## Ripple Effect - -```typescript -import { IgxRippleDirective } from 'igniteui-angular/directives'; -``` - -```html - - -
Interactive div
-``` - -Inputs: `[igxRipple]` (ripple color), `[igxRippleCentered]` (always start from center), `[igxRippleDisabled]`. - -```html - -``` - -## Tooltip - -> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "tooltip" })` covers triggers, overlay behavior, sticky/arrowed tooltips, styling, and accessibility. - -The at-a-glance pairing — `igxTooltipTarget` on the host references the `igxTooltip` element (both from `igniteui-angular/directives`): - -```html - -
Helpful tooltip text
-``` - -## Drag and Drop - -```typescript -import { IgxDragDirective, IgxDropDirective, IDragMoveEventArgs, IDropDroppedEventArgs } from 'igniteui-angular/directives'; -``` - -### Basic drag and drop - -```html - -
- drag_indicator - {{ item.name }} -
- - -
- Drop here -
-``` - -```typescript -onDrop(event: IDropDroppedEventArgs) { - const draggedItem = event.drag.data; - // Move draggedItem to this drop zone - event.cancel = false; // allow the drop -} -``` - -### Ghost element (custom drag preview) - -```html -
Drag me
- - -
- content_copy Moving... -
-
-``` - -### Reorderable list - -```html - - @for (item of items; track item.id) { - - drag_handle - {{ item.name }} - - } - -``` - -Key drag events: `(dragStart)`, `(dragMove)`, `(dragEnd)`, `(dragClick)`, `(ghostCreate)`, `(ghostDestroy)`, `(transitioned)`. -Key drop events: `(enter)`, `(leave)`, `(over)`, `(dropped)`. - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner diff --git a/.claude/skills/igniteui-angular-components/references/feedback.md b/.claude/skills/igniteui-angular-components/references/feedback.md deleted file mode 100644 index 5fcc509..0000000 --- a/.claude/skills/igniteui-angular-components/references/feedback.md +++ /dev/null @@ -1,141 +0,0 @@ -# Feedback & Overlay Components - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -> **Important:** All components in this file rely on Angular animations and the Ignite UI overlay system. Before using any of them, ensure `provideAnimations()` (or `provideAnimationsAsync()`) is present in `app.config.ts`. If it is missing, add it — these components will throw runtime errors or silently fail to animate without it. - -## Contents - -- [Dialog](#dialog) -- [Snackbar](#snackbar) -- [Toast](#toast) -- [Banner](#banner) -- [Key Rules](#key-rules) - -## Dialog - -```typescript -import { IgxDialogComponent, IgxDialogTitleDirective, IgxDialogActionsDirective } from 'igniteui-angular/dialog'; -import { IgxButtonDirective } from 'igniteui-angular/directives'; -``` - -```html - - Confirm Delete -

Are you sure you want to delete this item? This action cannot be undone.

-
- - -
-
- - -``` - -Programmatic control: - -```typescript -dialog = viewChild.required('confirmDialog'); - -open() { this.dialog().open(); } -close() { this.dialog().close(); } -``` - -Events: `(opening)`, `(opened)`, `(closing)`, `(closed)`, `(leftButtonSelect)`, `(rightButtonSelect)`. - -## Snackbar - -```typescript -import { IgxSnackbarComponent } from 'igniteui-angular/snackbar'; -import { IgxButtonDirective } from 'igniteui-angular/directives'; -``` - -```html - - Item saved successfully - -``` - -Trigger in TypeScript: - -```typescript -snackbar = viewChild.required('snackbar'); - -save() { - this.dataService.save(this.item); - this.snackbar().open('Item saved'); // optional: pass message text -} -``` - -## Toast - -```typescript -import { IgxToastComponent } from 'igniteui-angular/toast'; -``` - -```html -Operation complete - - -``` - -Toast vs Snackbar: Toast is non-interactive (no action button), always auto-hides. Snackbar supports an action button and can be persistent. - -## Banner - -```typescript -import { IgxBannerComponent, IgxBannerActionsDirective } from 'igniteui-angular/banner'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -import { IgxButtonDirective } from 'igniteui-angular/directives'; -``` - -```html - - wifi_off - You are offline. Some features may not be available. - - - - - -``` - -Trigger in TypeScript: - -```typescript -banner = viewChild.required('banner'); - -showOfflineWarning() { this.banner().open(); } -hideWarning() { this.banner().close(); } -``` - -Events: `(opening)`, `(opened)`, `(closing)`, `(closed)`. - -Banner always renders inline (not overlaid) — it pushes page content down when open. - -## Key Rules - -- **`provideAnimations()` is required** — add it to `app.config.ts` before using Dialog, Snackbar, Toast, or Banner -- **Dialog** uses the Ignite UI overlay system — set `[isModal]="true"` for blocking modals -- **Snackbar** vs **Toast**: Snackbar supports action buttons and can be persistent; Toast is always auto-hiding and non-interactive -- **Banner** renders **inline** (pushes content), not as an overlay — use Dialog for blocking prompts - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components -- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.claude/skills/igniteui-angular-components/references/form-controls.md b/.claude/skills/igniteui-angular-components/references/form-controls.md deleted file mode 100644 index e873b4e..0000000 --- a/.claude/skills/igniteui-angular-components/references/form-controls.md +++ /dev/null @@ -1,309 +0,0 @@ -# Form Controls & Reactive Forms Integration - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -## Contents - -- [Input Group](#input-group) -- [Combo (Multi-Select Dropdown)](#combo-multi-select-dropdown) -- [Simple Combo (Single-Select)](#simple-combo-single-select) -- [Select](#select) -- [Date Picker](#date-picker) -- [Date Range Picker](#date-range-picker) -- [Time Picker](#time-picker) -- [Calendar](#calendar) -- [Checkbox, Radio, Switch](#checkbox-radio-switch) -- [Slider](#slider) -- [Autocomplete](#autocomplete) -- [Reactive Forms Integration](#reactive-forms-integration) -- [Key Rules](#key-rules) - -## Input Group - -```typescript -import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - person - - - clear - Enter your username - -``` - -Types: `line` (default), `border`, `box`, `search`. - -## Combo (Multi-Select Dropdown) - -> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "combo" })` covers data binding, selection APIs, forms support, keyboard behavior, and known issues. Prefer it over this snippet when available. - -```typescript -import { IgxComboComponent } from 'igniteui-angular/combo'; -``` - -```html - -``` - -## Simple Combo (Single-Select) - -> **Full doc in the MCP:** `get_doc({ framework: "angular", name: "simple-combo" })`. - -`IgxSimpleComboComponent` from `igniteui-angular/simple-combo` (its own entry point, not `/combo`). Same API as `igx-combo` but restricted to single selection. - -## Select - -```typescript -import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select'; -``` - -```html - - @for (role of roles; track role.id) { - {{ role.name }} - } - -``` - -## Date Picker - -```typescript -import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; -``` - -```html - - -``` - -Implements `ControlValueAccessor` and `Validator`. Works with both reactive and template-driven forms. - -## Date Range Picker - -```typescript -import { IgxDateRangePickerComponent, IgxDateRangeStartComponent, IgxDateRangeEndComponent } from 'igniteui-angular/date-picker'; -import { IgxDateTimeEditorDirective } from 'igniteui-angular/directives'; -import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -import { IgxPickerToggleComponent, IgxPickerClearComponent } from 'igniteui-angular/core'; -``` - -Two-input configuration rules — place the `input` directly inside `igx-date-range-start`/`igx-date-range-end` (no extra `igx-input-group` wrapper); use `igx-picker-toggle igxPrefix` for the calendar action and `igx-picker-clear igxSuffix` for the clear action on **both** inputs. A plain `igx-prefix`/`igx-suffix` icon is decorative only and does not trigger picker actions. - -```html - - - calendar_today - - - clear - - - calendar_today - - - clear - - -``` - -## Time Picker - -```typescript -import { IgxTimePickerComponent } from 'igniteui-angular/time-picker'; -``` - -```html - - -``` - -## Calendar - -```typescript -import { IgxCalendarComponent } from 'igniteui-angular/calendar'; -``` - -```html - - -``` - -Selection modes: `'single'`, `'multi'`, `'range'`. - -## Checkbox, Radio, Switch - -```typescript -import { IgxCheckboxComponent } from 'igniteui-angular/checkbox'; -import { IgxRadioComponent, IgxRadioGroupDirective } from 'igniteui-angular/radio'; -import { IgxSwitchComponent } from 'igniteui-angular/switch'; -``` - -```html -Remember me - - - Basic - Pro - - -Dark mode -``` - -## Slider - -```typescript -import { IgxSliderComponent, IgxSliderType } from 'igniteui-angular/slider'; - -public sliderType = IgxSliderType; - public priceRange = { - lower: 200, - upper: 800 - }; -``` - -```html - - - - - - -``` - -## Autocomplete - -```typescript -import { IgxAutocompleteDirective, IgxDropDownComponent, IgxDropDownItemComponent } from 'igniteui-angular/drop-down'; -import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; -``` - -```html - - - - - - @for (city of cities | startsWith:selectedCity; track city) { - - {{ city }} - - } - -``` - -The `igxAutocomplete` directive attaches to an input and displays a drop-down of suggestions as the user types. It references an `igx-drop-down` via a template variable. - -Filtering is **not** built in — use a pipe or filter the data in the component to control which items appear. - -## Reactive Forms Integration - -All form controls implement `ControlValueAccessor` and work with both reactive and template-driven forms. - -```typescript -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms'; -import { IgxComboComponent } from 'igniteui-angular/combo'; -import { IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular/input-group'; -import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; -import { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select'; - -@Component({ - selector: 'app-my-form', - imports: [ - ReactiveFormsModule, - IGX_INPUT_GROUP_DIRECTIVES, - IgxComboComponent, - IgxDatePickerComponent, - IgxSelectComponent, - IgxSelectItemComponent - ], - changeDetection: ChangeDetectionStrategy.OnPush, - template: ` -
- - - - @if (form.controls.name.invalid && form.controls.name.touched) { - Name is required - } - - - - - - - - - @for (r of roles; track r.id) { - {{ r.name }} - } - -
- ` -}) -export class MyFormComponent { - form = new FormGroup({ - name: new FormControl('', Validators.required), - skills: new FormControl([]), - startDate: new FormControl(null), - role: new FormControl(null) - }); - - skills = [{ id: 1, name: 'Angular' }, { id: 2, name: 'TypeScript' }]; - roles = [{ id: 'admin', name: 'Admin' }, { id: 'user', name: 'User' }]; - - submit() { - if (this.form.valid) { - console.log(this.form.value); - } - } -} -``` - -## Key Rules - -- **Always check `app.config.ts` first** — add `provideAnimations()` before using Combo, Select, Date Picker, or any overlay component -- **Import from specific entry points** — avoid the root `igniteui-angular` barrel -- Date/Time pickers implement both `ControlValueAccessor` and `Validator` — they integrate with reactive forms natively -- How to choose between Combo, Simple Combo, Select, and Auto-complete: - - Use `igx-combo` for multi-select dropdowns with built-in filtering and grouping - - Use `igx-simple-combo` for single-select dropdowns with built-in filtering and grouping - - Use `igx-select` for simple single-select dropdowns without filtering or grouping (or when you want to provide custom filtering UI) - - Use `igxAutocomplete` for input fields with dynamic suggestions based on user input - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner -- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.claude/skills/igniteui-angular-components/references/layout-manager.md b/.claude/skills/igniteui-angular-components/references/layout-manager.md deleted file mode 100644 index 8a62972..0000000 --- a/.claude/skills/igniteui-angular-components/references/layout-manager.md +++ /dev/null @@ -1,322 +0,0 @@ -# Layout Manager, Dock Manager & Tile Manager - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -## Contents - -- [Layout Manager Directives](#layout-manager-directives) -- [Dock Manager](#dock-manager) -- [Tile Manager](#tile-manager) - ---- - -## Layout Manager Directives - -The Layout Manager is a pair of Angular directives (`igxLayout` / `igxFlex`) that wrap CSS Flexbox. Apply `igxLayout` to any container to control its children's flow; apply `igxFlex` to individual children to control their flex properties. - -```typescript -import { IgxLayoutDirective, IgxFlexDirective } from 'igniteui-angular/directives'; -``` - -```html - -
-
Item 1
-
Item 2
-
Item 3
-
-``` - -### Common Layout Patterns - -#### App Shell (Sidebar + Content) - -```html -
- - - - - -
-
Header
-
- -
-
Col 1
-
Col 2
-
Col 3
-
-
- -
- -
-``` - -Other patterns (centering, wrapping tile grids) follow directly from the directive inputs below — e.g. `igxLayoutJustify="center" igxLayoutItemAlign="center"` to center, `igxLayoutWrap="wrap"` + fixed `igxFlexBasis` children for tile grids. - -### `igxLayout` Directive Inputs - -| Input | Values | Default | Description | -|---|---|---|---| -| `igxLayoutDir` | `'row'` \| `'column'` | `'row'` | Flex direction | -| `igxLayoutReverse` | `true` \| `false` | `false` | Reverse flow order | -| `igxLayoutWrap` | `'nowrap'` \| `'wrap'` \| `'wrap-reverse'` | `'nowrap'` | Child wrapping | -| `igxLayoutJustify` | `'flex-start'` \| `'center'` \| `'flex-end'` \| `'space-between'` \| `'space-around'` | `'flex-start'` | Main axis alignment | -| `igxLayoutItemAlign` | `'flex-start'` \| `'center'` \| `'flex-end'` \| `'stretch'` \| `'baseline'` | `'stretch'` | Cross axis alignment | - -### `igxFlex` Directive Inputs - -| Input | Type | Default | Description | -|---|---|---|---| -| `igxFlexGrow` | `number` | `1` | How much the element grows to fill space | -| `igxFlexShrink` | `number` | `1` | How much the element shrinks when space is limited | -| `igxFlexBasis` | `string` | `'auto'` | Initial main-axis size (e.g., `'200px'`, `'30%'`) | -| `igxFlexOrder` | `number` | `0` | Visual order among siblings | - -### Key Rules for Layout Manager - -- `igxLayout` affects its **immediate children only** — nest multiple `igxLayout` containers for deeper control -- Combine `igxLayoutDir="column"` on the outer container with `igxFlex` on children to create page shells -- `igxFlexGrow="0"` on headers/footers/sidebars prevents them from stretching; leave it at `1` (default) for the main content area -- This is a thin CSS Flexbox wrapper — the container element gets `display: flex` applied - ---- - -## Dock Manager - -The Dock Manager is a **separate package** (`igniteui-dockmanager`) and is implemented as a **Web Component** (``). It provides IDE-style dockable, resizable, floating, and tabbed pane layouts. It is a **premium** (licensed) component. - -### Installation - -```bash -npm install igniteui-dockmanager -``` - -### Setup - -Because Dock Manager is a Web Component, it requires two one-time setup steps: - -**1. Register custom elements — `app.config.ts`:** - -```typescript -import { defineCustomElements } from 'igniteui-dockmanager/loader'; - -defineCustomElements(); -``` - -**2. Add `CUSTOM_ELEMENTS_SCHEMA` to every standalone component that uses ``:** - -```typescript -import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; - -@Component({ - selector: 'app-dock-manager', - templateUrl: './dock-manager.component.html', - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class DockManagerComponent { ... } -``` - -### Basic Usage - -```typescript -import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { - IgcDockManagerLayout, - IgcDockManagerPaneType, - IgcSplitPaneOrientation -} from 'igniteui-dockmanager'; - -@Component({ - selector: 'app-dock-manager', - templateUrl: './dock-manager.component.html', - schemas: [CUSTOM_ELEMENTS_SCHEMA], - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class DockManagerComponent { - layout: IgcDockManagerLayout = { - rootPane: { - type: IgcDockManagerPaneType.splitPane, - orientation: IgcSplitPaneOrientation.horizontal, - panes: [ - { - type: IgcDockManagerPaneType.contentPane, - contentId: 'sidebar', - header: 'Explorer' - }, - { - type: IgcDockManagerPaneType.documentHost, - rootPane: { - type: IgcDockManagerPaneType.splitPane, - orientation: IgcSplitPaneOrientation.horizontal, - allowEmpty: true, - panes: [ - { - type: IgcDockManagerPaneType.tabGroupPane, - panes: [ - { - type: IgcDockManagerPaneType.contentPane, - header: 'File 1', - contentId: 'doc1', - documentOnly: true - }, - { - type: IgcDockManagerPaneType.contentPane, - header: 'File 2', - contentId: 'doc2', - documentOnly: true - } - ] - } - ] - } - }, - { - type: IgcDockManagerPaneType.splitPane, - orientation: IgcSplitPaneOrientation.vertical, - size: 280, - panes: [ - { - type: IgcDockManagerPaneType.contentPane, - contentId: 'properties', - header: 'Properties' - }, - { - type: IgcDockManagerPaneType.contentPane, - contentId: 'output', - header: 'Output', - isPinned: false // starts unpinned (auto-hidden) - } - ] - } - ] - }, - floatingPanes: [ - { - type: IgcDockManagerPaneType.splitPane, - orientation: IgcSplitPaneOrientation.horizontal, - floatingWidth: 300, - floatingHeight: 200, - floatingLocation: { x: 200, y: 150 }, - panes: [ - { - type: IgcDockManagerPaneType.contentPane, - contentId: 'search', - header: 'Search' - } - ] - } - ] - }; -} -``` - -```html - - -
File explorer content
-
Document 1 content
-
Document 2 content
-
Properties panel
-
Output panel
-
Search panel
-
-``` - -### Key Rules for Dock Manager - -1. **Separate package** — `igniteui-dockmanager` is installed independently of `igniteui-angular` -2. **Call `defineCustomElements()` from `igniteui-dockmanager/loader` in `app.config.ts`** — without this the `` element renders as an unknown element -3. **Add `CUSTOM_ELEMENTS_SCHEMA`** to every standalone component or NgModule that uses `` -4. **Slot names = `contentId` values** — the `slot="..."` attribute on child elements must exactly match the `contentId` string in the layout -5. **Premium component** — requires a licensed Ignite UI subscription; verify availability before recommending to users -6. **Not part of `igniteui-angular`** — do not import from `igniteui-angular` entry points; all Dock Manager types come from `igniteui-dockmanager` - ---- - -## Tile Manager - -> **Docs:** [Tile Manager (Angular)](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tile-manager) -> **Full API Docs:** [Tile Manager Web Component](https://www.infragistics.com/products/ignite-ui-web-components/web-components/components/layouts/tile-manager.html) - -The Tile Manager is a **layout Web Component** that displays content in individual tiles users can **rearrange and resize**. It is implemented as an `igc-tile-manager` container with one or more `igc-tile` children. - -### Installation - -```bash -npm install igniteui-webcomponents -``` - -### Setup - -Register the Tile Manager Web Component before bootstrap: - -```typescript -import { defineComponents, IgcTileManagerComponent } from 'igniteui-webcomponents'; - -defineComponents(IgcTileManagerComponent); -``` - -Add `CUSTOM_ELEMENTS_SCHEMA` to any component using ``: - -```typescript -import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; - -@Component({ - selector: 'app-tile-manager', - templateUrl: './tile-manager.component.html', - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class TileManagerComponent { } -``` - -### Usage - -```html - - - Wide tile -

Content spanning two columns

-
- - Tall tile -

Content spanning two rows

-
-
-``` - -`igc-tile-manager` properties: - -- **`column-count`**: number of grid columns; if omitted or \<1, as many columns as fit with a minimum width (200px) are created -- **`gap`** / **`min-column-width`** / **`min-row-height`**: spacing and minimum track sizes (e.g., `"20px"`) -- **`resize-mode`**: `"none"` | `"hover"` | `"always"` — controls tile resizing -- **`drag-mode`**: `"tile"` | `"tile-header"` — enables reordering - -`igc-tile` properties: - -- **`row-start` / `col-start`** and **`row-span` / `col-span`**: grid placement and spanning -- **`disable-resize`**, **`disable-maximize`** / **`disable-fullscreen`**: opt out of resize / default header actions - -### Key Rules for Tile Manager - -1. **Web Component package** — Tile Manager ships via `igniteui-webcomponents`, not `igniteui-angular`. -2. **Register components** — call `defineComponents(IgcTileManagerComponent)` once before using ``. -3. **Use `CUSTOM_ELEMENTS_SCHEMA`** on Angular components that host the Tile Manager. -4. **Use slots** — header content goes into `slot="title"`; additional actions and custom adorners use the documented slots (`fullscreen-action`, `maximize-action`, `actions`, `side-adorner`, `corner-adorner`, `bottom-adorner`). -5. **Treat it as a layout container** — use Tile Manager when users need interactive, resizable and re-orderable tiles, not tabular data (use grids for that). - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner -- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.claude/skills/igniteui-angular-components/references/layout.md b/.claude/skills/igniteui-angular-components/references/layout.md deleted file mode 100644 index 96d4ed1..0000000 --- a/.claude/skills/igniteui-angular-components/references/layout.md +++ /dev/null @@ -1,209 +0,0 @@ -# Layout Components - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** -> For app setup, providers, and import patterns — see [`setup.md`](./setup.md). - -## Contents - -- [Tabs](#tabs) -- [Bottom Navigation](#bottom-navigation) -- [Stepper](#stepper) -- [Accordion](#accordion) -- [Splitter](#splitter) -- [Navigation Drawer](#navigation-drawer) - -## Tabs - -```typescript -import { IGX_TABS_DIRECTIVES } from 'igniteui-angular/tabs'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -``` - -```html - - - - info - Info - - Content for Info tab - - - - Settings - - Settings content - - -``` - -Key inputs: `[(selectedIndex)]`, `[tabAlignment]` (`'start'` | `'end'` | `'center'` | `'justify'`), `[disableAnimation]`. - -## Bottom Navigation - -```typescript -import { IgxBottomNavComponent, IgxBottomNavItemComponent, IgxBottomNavHeaderComponent, IgxBottomNavContentComponent } from 'igniteui-angular/bottom-nav'; -``` - -```html - - - - home - Home - - Home content - - - - settings - Settings - - Settings content - - -``` - -## Stepper - -```typescript -import { IGX_STEPPER_DIRECTIVES } from 'igniteui-angular/stepper'; -``` - -```html - - -
Account
-
Create your account
-
- -
-
- -
Profile
-
Optional step
-
...
-
- -
Confirm
-
Review and submit
-
-
-``` - -Programmatic navigation: -```typescript -stepper = viewChild.required(IgxStepperComponent); - -next() { this.stepper().next(); } -prev() { this.stepper().prev(); } -navigateTo(index: number) { this.stepper().navigateTo(index); } -``` - -## Accordion - -```typescript -import { IgxAccordionComponent } from 'igniteui-angular/accordion'; -import { IGX_EXPANSION_PANEL_DIRECTIVES } from 'igniteui-angular/expansion-panel'; -``` - -```html - - - - Panel 1 - Subtitle text - - - Content for panel 1 - - - - - Panel 2 - - Content for panel 2 - - -``` - -Standalone `igx-expansion-panel` (without accordion): -```html - - - Settings - - Content - -``` - -## Splitter - -```typescript -import { IgxSplitterComponent, IgxSplitterPaneComponent, SplitterType } from 'igniteui-angular/splitter'; -``` - -```html - - - - Left panel content - - - Right panel content - - - - - - Top panel - Bottom panel - -``` - -## Navigation Drawer - -```typescript -import { IgxNavigationDrawerComponent, IgxNavDrawerItemDirective, IgxNavDrawerTemplateDirective, IgxNavDrawerMiniTemplateDirective } from 'igniteui-angular/navigation-drawer'; -import { IgxIconComponent } from 'igniteui-angular/icon'; -import { IgxRippleDirective } from 'igniteui-angular/directives'; -``` - -```html - - - - - - - home - settings - - - - -``` - -Key inputs: `[isOpen]`, `[pin]` (dock to content), `[pinThreshold]` (auto-pin at viewport width), `[width]`, `[miniWidth]`. - -Events: `(opened)`, `(closed)`, `(pinChange)`. - -> **Important:** The Navigation Drawer uses the Ignite UI overlay/animation system — ensure `provideAnimations()` is in `app.config.ts`. - -## See Also - -- [`setup.md`](./setup.md) — App providers, architecture, all entry points -- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider -- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner -- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop diff --git a/.claude/skills/igniteui-angular-components/references/mcp-setup.md b/.claude/skills/igniteui-angular-components/references/mcp-setup.md deleted file mode 100644 index d855515..0000000 --- a/.claude/skills/igniteui-angular-components/references/mcp-setup.md +++ /dev/null @@ -1,76 +0,0 @@ -# Setting Up the Ignite UI CLI MCP Server - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** - -The Ignite UI CLI MCP server exposes `list_components`, `get_doc`, `search_docs`, and `search_api` so AI assistants can discover Ignite UI components and read version-accurate documentation. It must be configured in the editor/agent before these tools become available, and the editor or agent session must be restarted afterwards — MCP servers cannot be hot-loaded into a running session. - -> Depending on the client, MCP tool names may appear with a server prefix (e.g. `mcp__igniteui-cli__list_components` in Claude Code). This skill refers to tools by their bare names. - -## Recommended: One-Command Setup - -From the project root: - -```bash -npx -y igniteui-cli ai-config -``` - -This configures **both** the `igniteui-cli` and `igniteui-theming` MCP servers, copies the Ignite UI Agent Skills into the project, and preserves any existing server entries in the config files. Inline options such as `--agents claude copilot` and `--assistants vscode cursor` select which agents and editors to configure. - -Projects created with `npx igniteui-cli new` already have the `igniteui-cli` MCP entry configured. - -## Manual Configuration (fallback) - -Use these only when `ai-config` is unavailable or your editor is not covered by it. - -### VS Code — `.vscode/mcp.json` - -```json -{ - "servers": { - "igniteui-cli": { - "command": "npx", - "args": ["-y", "igniteui-cli", "mcp"] - } - } -} -``` - -`npx -y` works whether `igniteui-cli` is installed locally in `node_modules` or needs to be pulled from the npm registry. - -### Claude Code - -```bash -claude mcp add igniteui-cli -- npx -y igniteui-cli mcp -``` - -### Cursor — `.cursor/mcp.json` - -```json -{ - "mcpServers": { - "igniteui-cli": { - "command": "npx", - "args": ["-y", "igniteui-cli", "mcp"] - } - } -} -``` - -### Claude Desktop - -Edit the Claude Desktop config file (**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`, **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`) and add the same `mcpServers` entry as shown for Cursor above. - -### WebStorm / JetBrains IDEs - -1. Go to **Settings → Tools → AI Assistant → MCP Servers** -2. Click **+ Add MCP Server** -3. Set Command to `npx` and Arguments to `-y igniteui-cli mcp` -4. Click OK and restart the AI Assistant - -## Verifying the Setup - -After restarting the editor/session, ask the AI assistant: - -> "List all available Ignite UI components" - -If the MCP server is running, the `list_components` tool will return all available components for the detected framework. diff --git a/.claude/skills/igniteui-angular-components/references/setup.md b/.claude/skills/igniteui-angular-components/references/setup.md deleted file mode 100644 index a9e769d..0000000 --- a/.claude/skills/igniteui-angular-components/references/setup.md +++ /dev/null @@ -1,165 +0,0 @@ -# Application Setup & Architecture - -> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.** - -## Contents - -- [Installation](#installation) -- [Required Providers (`app.config.ts`)](#required-providers-appconfigts) -- [Architecture — Standalone Components](#architecture--standalone-components) -- [Multi-Entry-Point Imports](#multi-entry-point-imports) - -## Installation - -```bash -# Open-source -npm install igniteui-angular - -# Licensed (requires @infragistics registry configured) -npm install @infragistics/igniteui-angular -``` - -Both packages share identical entry-point paths. Everywhere below, replace `igniteui-angular` with `@infragistics/igniteui-angular` if using the licensed package. - -## Required Providers (`app.config.ts`) - -> **Important:** Before adding any Ignite UI component, verify that `app.config.ts` contains the providers listed below. Missing `provideAnimations()` is the most common cause of runtime errors — all overlay and animated components (Dialog, Combo, Select, Date Picker, Snackbar, Toast, Banner, Navigation Drawer, Dropdown) will silently fail or throw without it. - -```typescript -import { ApplicationConfig } from '@angular/core'; -import { provideAnimations } from '@angular/platform-browser/animations'; -import { provideRouter } from '@angular/router'; -import { provideIgniteIntl } from 'igniteui-angular/core'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideAnimations(), // REQUIRED — all overlay and animated components - provideRouter(appRoutes), - provideIgniteIntl(), // recommended — localization for date/time pickers, grids, etc. - ] -}; -``` - -| Provider | Package | Required for | -|---|---|---| -| `provideAnimations()` | `@angular/platform-browser/animations` | **All overlay and animated components** — Dialog, Combo, Select, Dropdown, Date/Time Picker, Snackbar, Toast, Banner, Navigation Drawer, Carousel, Overlay service | - -> **`provideAnimationsAsync()`** lazy-loads the animations module — prefer it for SSR or when optimizing initial bundle size: -> ```typescript -> import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; -> ``` - -## Architecture — Standalone Components - -All Ignite UI components are **standalone** — no NgModules needed. Import them directly into your component's `imports` array: - -```typescript -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { IgxButtonDirective } from 'igniteui-angular/directives'; -import { IgxDialogComponent } from 'igniteui-angular/dialog'; - -@Component({ - selector: 'app-example', - imports: [IgxButtonDirective, IgxDialogComponent], - templateUrl: './example.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class ExampleComponent {} -``` - -## Multi-Entry-Point Imports - -> **Important:** Always import from specific entry points, never from the root barrel. Check `package.json` to determine whether the project uses `igniteui-angular` or `@infragistics/igniteui-angular` — that prefix applies to every import path. - -```typescript -// CORRECT — tree-shakeable, specific entry point -import { IgxComboComponent } from 'igniteui-angular/combo'; -import { IgxDatePickerComponent } from 'igniteui-angular/date-picker'; - -// AVOID — pulls in entire library -import { IgxComboComponent } from 'igniteui-angular'; -``` - -### Common Entry Points - -| Component / Directive | Entry Point | -|---|---| -| Input Group | `igniteui-angular/input-group` | -| Combo | `igniteui-angular/combo` | -| Simple Combo | `igniteui-angular/simple-combo` | -| Select | `igniteui-angular/select` | -| Date Picker / Date Range Picker | `igniteui-angular/date-picker` | -| Time Picker | `igniteui-angular/time-picker` | -| Calendar | `igniteui-angular/calendar` | -| Checkbox | `igniteui-angular/checkbox` | -| Radio | `igniteui-angular/radio` | -| Switch | `igniteui-angular/switch` | -| Slider | `igniteui-angular/slider` | -| Tabs | `igniteui-angular/tabs` | -| Stepper | `igniteui-angular/stepper` | -| Accordion | `igniteui-angular/accordion` | -| Expansion Panel | `igniteui-angular/expansion-panel` | -| Splitter | `igniteui-angular/splitter` | -| Navigation Drawer | `igniteui-angular/navigation-drawer` | -| Bottom Navigation | `igniteui-angular/bottom-nav` | -| List | `igniteui-angular/list` | -| Tree | `igniteui-angular/tree` | -| Card | `igniteui-angular/card` | -| Dialog | `igniteui-angular/dialog` | -| Snackbar | `igniteui-angular/snackbar` | -| Toast | `igniteui-angular/toast` | -| Banner | `igniteui-angular/banner` | -| Chips | `igniteui-angular/chips` | -| Avatar | `igniteui-angular/avatar` | -| Badge | `igniteui-angular/badge` | -| Icon | `igniteui-angular/icon` | -| Carousel | `igniteui-angular/carousel` | -| Paginator | `igniteui-angular/paginator` | -| Linear Progress | `igniteui-angular/progressbar` | -| Circular Progress | `igniteui-angular/progressbar` | -| Chat | `igniteui-angular/chat` | -| Button / Icon Button | `igniteui-angular/directives` | -| Button Group | `igniteui-angular/button-group` | -| Ripple | `igniteui-angular/directives` | -| IgxTooltipDirective, IgxTooltipTargetDirective | `igniteui-angular/directives` | -| Drag & Drop | `igniteui-angular/directives` | -| Layout Manager (`igxLayout`, `igxFlex`) | `igniteui-angular/directives` | -| Core utilities, services, base types | `igniteui-angular/core` | -| Icon Service | `igniteui-angular/icon` | -| Overlay Service | `igniteui-angular/core` | -| **Dock Manager** | `igniteui-dockmanager` *(separate package — `npm install igniteui-dockmanager`)* | - -**Grid-specific entry points** (tree-shakable imports): - -| Component / Feature | Entry Point | -|---|---| -| Shared grid infrastructure (columns, toolbar, filtering, sorting, etc.) | `igniteui-angular/grids/core` | -| Standard grid (`IgxGridComponent`) | `igniteui-angular/grids/grid` | -| Tree grid (`IgxTreeGridComponent`) | `igniteui-angular/grids/tree-grid` | -| Hierarchical grid (`IgxHierarchicalGridComponent`, `IgxRowIslandComponent`) | `igniteui-angular/grids/hierarchical-grid` | -| Pivot grid (`IgxPivotGridComponent`, `IgxPivotDataSelectorComponent`) | `igniteui-angular/grids/pivot-grid` | - -### Convenience Directive Collections - -For complex components, use the bundled directive arrays instead of listing every sub-directive individually: - -| Token | Entry Point | Includes | -|---|---|---| -| `IGX_BUTTON_GROUP_DIRECTIVES` | `igniteui-angular/button-group` | Button group + button directive | -| `IGX_INPUT_GROUP_DIRECTIVES` | `igniteui-angular/input-group` | Input group + label, hint, prefix, suffix | -| `IGX_TABS_DIRECTIVES` | `igniteui-angular/tabs` | Tabs + tab item, header, content | -| `IGX_STEPPER_DIRECTIVES` | `igniteui-angular/stepper` | Stepper + step | -| `IGX_EXPANSION_PANEL_DIRECTIVES` | `igniteui-angular/expansion-panel` | Panel + header, body | -| `IGX_LIST_DIRECTIVES` | `igniteui-angular/list` | List + list item | -| `IGX_TREE_DIRECTIVES` | `igniteui-angular/tree` | Tree + tree node | - -## See Also - -- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider, forms integration -- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer -- [`data-display.md`](./data-display.md) — List, Tree, Card, Chips, Avatar, Badge, Icon, Carousel, Paginator, Progress, Chat -- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner -- [`directives.md`](./directives.md) — Button, Icon Button, Button Group, Ripple, Tooltip, Drag and Drop -- [`layout-manager.md`](./layout-manager.md) — Layout Manager directives, Dock Manager -- [`../../igniteui-angular-grids/SKILL.md`](../../igniteui-angular-grids/SKILL.md) — Data Grids -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.claude/skills/igniteui-angular-figma-to-app/SKILL.md b/.claude/skills/igniteui-angular-figma-to-app/SKILL.md deleted file mode 100644 index e7c07e8..0000000 --- a/.claude/skills/igniteui-angular-figma-to-app/SKILL.md +++ /dev/null @@ -1,772 +0,0 @@ ---- -name: igniteui-angular-figma-to-app -description: > - Translate Figma app screens designed using the Indigo.Design UI Kits into production - Angular applications with Ignite UI for Angular. The Indigo.Design UI Kits are Figma - component libraries available in four design-system variants — Material, Fluent, - Bootstrap, and Indigo — each with light and dark themes. Designers build their own - app frames in Figma using these kit libraries, and every kit component instance maps - 1:1 to an Ignite UI Angular control. The active kit variant also determines the - design system used in the Angular theme. Uses the Figma MCP for design data, the - Ignite UI CLI MCP for component docs, the Ignite UI Theming MCP for palette and - component-level styling, and the Playwright MCP for visual validation against the - original Figma design. Triggers on "implement this Figma design", "build from Figma", - "translate Figma to Angular", "implement this artboard", "generate app from Figma", - or when a Figma URL is shared with implementation intent in an Ignite UI Angular context. -user-invocable: true ---- - -# Ignite UI for Angular — Figma to App - -Translate Figma app screens built with the **Indigo.Design UI Kits** into production -Angular applications. Designers create their own frames in Figma using the Indigo.Design -component libraries as shared libraries — these kits come in four design-system variants -(**Material**, **Fluent**, **Bootstrap**, **Indigo**) with light and dark themes each. -Every component instance in the design maps 1:1 to an Ignite UI Angular control, and -the active kit variant directly determines which design system to use in the Angular -theme. - -This skill orchestrates four MCP servers: **Figma** (design data), **Ignite UI CLI** -(component docs), **Ignite UI Theming** (styles), and **Playwright** (visual validation). - ---- - -## Required Workflow - -Complete all phases in order — do not skip phases or generate component code from -memory. Every component selector, input name, and import path must come from -`get_doc` results or, where no doc exists in the catalog, from the -`igniteui-angular-components` / `igniteui-angular-grids` skill reference files — -never guessed. - -Read [references/figma-component-map.md](references/figma-component-map.md) before Phase 2. -Read [references/design-token-bridge.md](references/design-token-bridge.md) before Phase 3. -Read [references/asset-extraction.md](references/asset-extraction.md) before Phase 1h. -Read [references/validation-patterns.md](references/validation-patterns.md) before Phase 5. - ---- - -## Phase 0 — Prerequisites - -> **Tool naming:** this skill writes MCP tool names as `_` (e.g. -> `figma_get_metadata`, `theming_create_theme`). The exact name depends on the client — -> Claude Code exposes them as `mcp____` (e.g. `mcp__figma__get_metadata`). -> Match by the tool's base name on whatever server is connected. - -### 0a: Verify All Four MCP Servers - -Run these checks **silently** in parallel. Each verification call is a no-op if the -server is not connected; do not surface raw errors to the user at this point. - -| Server | Verification call | Success signal | -| --------------------- | ---------------------------------------------- | ----------------------------------- | -| **Figma** | `figma_get_metadata` with no `nodeId` | Returns page list or selection info | -| **Ignite UI CLI** | `list_components` with `framework: "angular"` | Returns component list | -| **Ignite UI Theming** | `theming_detect_platform` | Returns platform info | -| **Playwright** | `playwright_browser_navigate` to `about:blank` | Navigates without error | - -If **any server fails**, stop and guide the user through setup **for that server only** -before continuing. For `igniteui-cli` and `igniteui-theming`, the fastest path is -`npx -y igniteui-cli ai-config`, which configures both. Full setup instructions for all -servers are in [references/mcp-setup.md](references/mcp-setup.md). Newly configured MCP -servers require an editor/session reload before their tools appear. - -### 0b: Detect or Scaffold Angular Project - -Check whether the current working directory contains a valid Angular + Ignite UI project: - -``` -1. Does package.json exist? -2. Does it list "igniteui-angular" OR "@infragistics/igniteui-angular" in dependencies? -3. Is there a src/app/ directory? -``` - -**If a valid project is found:** - -- Note the package layout: `igniteui-angular` (open-source) or `@infragistics/igniteui-angular` (licensed) -- Note the Angular version from `package.json` -- **Check the MCP configuration for all four required server entries** — `figma`, `igniteui-cli`, - `igniteui-theming`, and `playwright` (in `.vscode/mcp.json` or the client's equivalent). - If `igniteui-cli` or `igniteui-theming` is missing, run `npx -y igniteui-cli ai-config` - from the project root — it configures both servers and copies the Agent Skills, preserving - existing entries. Add missing `figma` and `playwright` entries from - [references/mcp-setup.md](references/mcp-setup.md). Projects scaffolded with - `npx igniteui-cli new` have `igniteui-cli` pre-wired but typically lack the other three. - A reload is required before newly configured servers' tools appear. -- Inform the user: "Found existing Ignite UI Angular project. Proceeding with the Figma workflow." - -**If no valid project is found:** -Present this message and wait for the user’s choice: - -> “No Ignite UI Angular project found in the current directory. Would you like me to -> scaffold a new one using the Ignite UI CLI before implementing the Figma design? -> -> `npx -y igniteui-cli new` creates a project pre-configured with Ignite UI Angular, -> theming already applied in `styles.scss`, and the Ignite UI CLI MCP server auto-wired -> into `.vscode/mcp.json`. No global install required. -> -> Alternatively, point me at an existing project directory.” - -If the user confirms scaffolding: - -1. Ask for a project name. If the user has already shared a Figma URL, suggest a name - derived from the Figma file name; otherwise prompt. - -2. Choose the project template based on the artboard structure. Because Phase 1 has - not run yet, use the lightest signal available: - - | Signal | Template to use | - | -------------------------------------------------------------------- | ------------------------------------------------ | - | User mentions a sidebar, navigation drawer, or multiple routed views | `side-nav` | - | No strong signal — default | `empty` (routing + home page; easiest to extend) | - -3. Create the project: - - ```bash - npx -y igniteui-cli new --framework=angular --type=igx-ts --template= - ``` - - This produces a standard Angular workspace fully compatible with `ng` commands, - and additionally: - - Installs and configures `igniteui-angular` with a default theme in `styles.scss` - - Generates `.vscode/mcp.json` with the Ignite UI CLI MCP server entry already set - - Copies Ignite UI Agent Skills to `.claude/skills/` - -4. `cd ` - -5. Open the auto-generated `.vscode/mcp.json` and **append** the Figma, Ignite UI - Theming, and Playwright server entries from `references/mcp-setup.md`. The Ignite - UI CLI entry is already present — do not duplicate it. - -6. Confirm the project starts cleanly: - ```bash - npm start - ``` - Then continue to Phase 1. - ---- - -## Phase 1 — Figma Design Exploration - -**Goal:** understand the full design structure and capture all data needed for -implementation and validation before writing any code. - -> **Rate-limit awareness:** Figma MCP calls count against plan quotas -> (indicative, subject to change — verify against the user's current Figma plan: -> Starter **6 calls/month**, Organization 200/day, Enterprise 600/day). -> -> Estimated call budget for a 5-artboard design: -> `figma_get_metadata` ×2 + `figma_get_screenshot` ×5 + `figma_get_design_context` ×5 + `figma_get_variable_defs` ×1 + `figma_get_code_connect_map` ×5 = **~18 calls**. -> **Starter plan users will exceed their monthly quota in a single session.** Strategies: -> 1. Call `figma_get_variable_defs` only **once** for the root page (variables are file-scoped, not artboard-scoped — calling it per artboard wastes quota on duplicate data). -> 2. Prioritize `figma_get_design_context` over additional screenshots if quota is tight. -> 3. For large files, consider implementing one artboard per monthly budget cycle. -> -> Use `figma_get_metadata` first to discover structure cheaply, then call -> `figma_get_design_context` only for the artboards you will implement. - -### 1a: Discover Pages and Artboards - -Call `figma_get_metadata` with no `nodeId`. This returns the top-level page list. -Then call `figma_get_metadata` again for each page that looks relevant to get its -artboard tree. - -> If the user already shared a Figma URL, extract the `nodeId` from it: -> URL format: `https://figma.com/design/:fileKey/:name?node-id=1-2` → nodeId = `1:2` -> (replace `-` with `:`) - -### 1b: Select Target Artboards - -If there are multiple pages or artboards, show the user a list: - -> "I found these artboards in your Figma file: -> -> - Page 1: [list artboard names + node IDs] -> - Page 2: [list artboard names + node IDs] -> -> Which artboards should I implement? (You can say 'all' or list specific names.)" - -Wait for confirmation before proceeding. - -### 1c: Capture Reference Screenshots - -> **IMPORTANT — Figma MCP is session-bound.** The `figma_get_screenshot` tool returns a -> screenshot of the **currently selected node in the Figma desktop app**, regardless of any -> `nodeId` parameter passed. To capture each artboard, you must ask the user to navigate -> to it in Figma first. - -For each target artboard: - -1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* -2. Wait for confirmation, then call: - ``` - figma_get_screenshot({}) - // Store: { artboardName, screenshotFile, width: , height: } - ``` -3. Repeat for each artboard — do **not** batch these calls before the user navigates. - -After all artboards are captured, confirm the count: -> *"I have N reference screenshots: [list artboard names]. Proceeding to design context extraction." -> If any are missing, navigate to that artboard in Figma and recapture before continuing.* - -> Never skip this step. The screenshots are your ground truth for Phase 5 validation. - -### 1d: Extract Design Context - -> **IMPORTANT — Figma MCP is session-bound.** The `figma_get_design_context` tool returns -> context for the **currently selected node in the Figma desktop app**. You must ask the -> user to navigate to each artboard before calling this tool. -> -> **Output format:** `figma_get_design_context` returns **React + Tailwind CSS code**, not -> structured Angular metadata. The response is explicitly tagged *"SUPER CRITICAL: The -> generated React+Tailwind code MUST be converted to match the target project's technology -> stack."* Do **not** copy the React code into Angular files. Instead, read the JSX to extract -> the information below. Image localhost URLs in the output are session-scoped previews — -> do **not** use them as final assets (see Phase 1h and `references/asset-extraction.md`). - -For **each** target artboard: - -1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* -2. Wait for confirmation, then call: - ``` - figma_get_design_context({ - clientLanguages: "typescript", - clientFrameworks: "angular", - artifactType: "WEB_PAGE_OR_APP_SCREEN", - taskType: "CREATE_ARTIFACT" - }) - ``` -3. From the React+Tailwind output, extract: - - - **Component layer names** (`data-name` attributes in the JSX) — match against `references/figma-component-map.md` - - **Layout structure** — `flex`, `grid`, `gap-*`, `p-*`, `w-*`, `h-*` Tailwind classes on container divs - - **Typography** — `font-['...']`, `text-[...]`, `font-weight` classes - - **Surface colors** — `bg-[#XXXXXX]` classes on container `
` elements that wrap major sections - (these become plain `
` wrappers in Angular with `background: #XXXXXX`) - - **Border/roundness** — `rounded-[...]`, `border`, `border-[...]` classes on containers and cards - - **Input type variants** — look for hidden zero-size nodes (`size-[0.5px]`) whose `data-name` - contains a component type (e.g. `"Date Picker Type"`, `"Combo Input"`). These are the - Indigo.Design kit's **variant indicator nodes** — their name encodes which input variant - (border/line/box) is active for that component. - - **Chart series colors** — for any chart layer, note the fill colors on its series paths - - **Action controls** — list every button, icon button, and toolbar action visible in the artboard; - this is your authoritative inventory — do not add actions not present in the design - - **Active kit variant** — look for library component references whose source file name - contains "Material", "Fluent", "Bootstrap", or "Indigo". If not found here, defer to - Phase 1e variable names and [references/design-token-bridge.md](references/design-token-bridge.md). - -4. Record all surface containers in the **Surfaces Spec** (added to Phase 1g). - -### 1e: Extract Design Tokens - -> Figma variables are **file-scoped**, not artboard-scoped. Call `figma_get_variable_defs` -> **once** for the root page node — not once per artboard. Calling it multiple times returns -> identical data and wastes plan quota. - -Call once: - -``` -figma_get_variable_defs({}) -``` - -The response contains a map of variable names to values, e.g.: - -``` -"color/primary/500": "#6200EE" -"color/surface": "#FFFFFF" -"typography/body/font-family": "Roboto" -``` - -Use `references/design-token-bridge.md` to map color and typography variables to Ignite -UI theming inputs in Phase 3. Do **not** attempt to map Figma spacing or sizing values -— see `references/design-token-bridge.md § Spacing, Sizing, and Roundness` for why. - -### 1f: Check for Existing Code Connect Mappings - -Call `figma_get_code_connect_map` for each artboard. If mappings exist, they confirm -which Ignite UI Angular components correspond to which Figma nodes — use these to -validate or augment your component mapping in Phase 2. - -``` -figma_get_code_connect_map({ nodeId: "" }) -``` - -### 1g: Build the Decomposition Table - -Before writing any code, produce **two tables** for **each artboard**. - -#### Table A — Ignite UI Components - -| Figma Layer Name | Visual Role | Ignite UI Component | Design Tokens Used | Data Type | -| -------------------------- | ------------------ | ----------------------- | ------------------- | --------------- | -| _e.g._ `_NavBar` | Top navigation bar | `IgxNavbarComponent` | `color/primary/500` | n/a | -| _e.g._ `_Grid/Default` | Data table | `IgxGridComponent` | `color/surface` | Tabular records | -| _e.g._ `_Button/Contained` | Primary CTA | `igxButton="contained"` | `color/primary/500` | n/a | - -Fallback to plain semantic HTML only when no Ignite UI component can match the layer -after consulting `references/figma-component-map.md`. Document the reason inline. - -#### Table B — Layout Surfaces - -Record every **non-IgxXxx container** that carries visual properties (background color, -border, padding, shadow). These are plain `
` wrappers in Angular — not Ignite UI -components — but they are critical to visual fidelity. Populate this table from the -`bg-[...]`, `rounded-[...]`, `border`, `p-[...]`, and `shadow-[...]` Tailwind classes -observed on container divs in the Phase 1d design context output. - -| Figma Frame / Container Name | Background | Border-Radius | Padding | Border | Shadow | Encloses (child sections) | -| ---------------------------- | ---------- | ------------- | ------- | ------ | ------ | ------------------------- | -| _e.g._ `Budget Categories` | `#222222` | `4px` | `24px` | none | none | Categories list, Add button | -| _e.g._ `Friend Card` | `#222222` | `8px` | `24px 16px` | `1px solid #333` | none | Avatar, name, phone, email, buttons | - -> **Rule:** if a section appears on a surface in Figma (i.e. its container has a -> non-transparent background), it **must** have that background in the Angular implementation. -> If a section floats on the page background (transparent), do **not** add a surface wrapper. -> Never infer surface structure from another page — always derive it from the design context -> for the specific artboard being implemented. - -Present both tables to the user for review before proceeding. - -### 1h: Extract Image Assets - -Read [references/asset-extraction.md](references/asset-extraction.md) in full before -running any extraction. - -**Zero-placeholder policy:** every image visible in the Figma design must be extracted -and committed to `src/assets/` before Phase 4. Gradient placeholders are not acceptable. - -**Step 0 — Get the file key first.** Ask the user to share the Figma file URL or key -before attempting any extraction. In Figma desktop: right-click the file tab → -**Copy link**. Without it you fall back to Tier 2 or Tier 3 (see below). - -From the decomposition tables, identify every layer that is a **static image asset** -(photo, background, logo, custom icon, illustration) rather than an Ignite UI component. -Do **not** extract Indigo.Design UI Kit component instances. - -**Use the four-tier decision tree from `asset-extraction.md`:** - -| Tier | Method | When to use | -| ---- | ------ | ----------- | -| **1** | REST API `/v1/files/:key/images` (Method A) or `/v1/images/:key` (Method B) | File key available — always the highest fidelity | -| **2** | Download localhost URLs from `figma_get_design_context` with `curl` | No file key; Figma session is active; design context was already called | -| **3** | `figma_get_screenshot` per node (ask user to select each node) | No file key; no localhost URLs | -| **4** | CSS gradient/color placeholder with `// TODO` comment | Only for confirmed pure-color fills — never as a shortcut | - -After extraction, save assets to: -- `src/assets/images/` — raster images (PNG, JPG) -- `src/assets/icons/` — SVG icons and logos - -Build a concise asset manifest (see `asset-extraction.md § Build an Asset Manifest`) -so the implementation phase uses consistent paths. - -If you used Tier 2 or Tier 3 for any asset, tell the user which ones need re-export -once the file key becomes available. - ---- - -## Phase 2 — Component Discovery (Ignite UI CLI MCP) - -**Goal:** look up exact Angular selectors, inputs, outputs, and usage patterns for every -component identified in Phase 1. Never generate component code from memory. - -### 2a: Read the Component Map - -Read [references/figma-component-map.md](references/figma-component-map.md) in full. -Find the row for each Figma layer name from your Phase 1 decomposition table. -Each row gives you: - -- The Ignite UI Angular selector -- The `get_doc` key to call -- Key inputs and variants to configure - -### 2b: Fetch Component Docs - -Call `list_components({ framework: "angular" })` **once** to discover which component -families have full docs — **the catalog covers only a subset of components**. Then: - -- For families **with** a doc: call `get_doc({ framework: "angular", name: "" })`, - all in a single parallel batch — never sequentially. -- For families **without** a doc: read the matching reference files from the - [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) and - [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) skills, and use - `search_api` for member-level API lookups. - -Do **not** write any component code until you have read its doc or reference file. - -### 2c: Search for Feature Docs - -Use `search_docs` for feature-level questions raised by the artboard, for example: - -``` -search_docs({ framework: "angular", query: "row editing" }) -search_docs({ framework: "angular", query: "virtual scrolling" }) -search_docs({ framework: "angular", query: "column pinning" }) -``` - -Feature docs are mandatory when the artboard shows grid editing, filtering, sorting, -pinning, or other advanced feature states. - -### 2d: Document the Final Component Plan - -After reading all docs, confirm or revise the decomposition table from Phase 1g with: - -- Exact selectors (e.g. ``, ``) -- Exact import paths (never imported from the root barrel) -- Required peer modules or provider functions - -Present this updated plan to the user and wait for confirmation before Phase 3. - ---- - -## Phase 3 — Theme Generation (Ignite UI Theming MCP) - -**Goal:** produce Sass theming code that matches the Figma design's visual language -using design tokens extracted in Phase 1e. - -Read [references/design-token-bridge.md](references/design-token-bridge.md) in full -before running any theming tool. - -### 3a: Inspect Existing Theme (Guard) - -Open `src/styles.scss` (or the project's global stylesheet). Look for an active -`@include theme(...)` or `@include palette(...)` call. - -- **Theme found, but variant mismatch** — if the existing theme is **light** and the - Figma design is **dark** (or vice versa), treat this as a theme change and proceed with - 3b–3c. A light theme applied to a dark design produces wrong background colors on every - component and will fail every Phase 5 check. -- **Theme found, variant matches** → do **not** call `theming_create_theme` or - `theming_create_palette` unless the user explicitly asks for a global theme change. - Reuse the existing palette. Skip to step 3d. -- **No theme found** → proceed with 3b. - -Detect the Figma design's variant from Phase 1e: if a `color/mode` variable exists, -use its value. Otherwise, use the artboard background color: near-black (`#121212`, -`#1a1a1a`, `#000`) → `"dark"`; near-white (`#fff`, `#f5f5f5`) → `"light"`. - -### 3b: Resolve Design System - -You don't need to call `theming_detect_platform` to confirm the Angular package layout. We already did that in Phase 0. - -To determine the design system, use this **strict precedence order**. Stop at the first -signal that gives a clear answer: - -1. **Explicit user request** — "make it Material", "use Fluent", etc. -2. **Library source name in design context** — the `figma_get_design_context` or - `figma_get_metadata` response may reference the Figma source library file name - (e.g. `"Indigo.Design UI Kit for Material"` → `material`). -3. **Variable collection names from Phase 1e** — collection names like - `Material/color/primary` identify the kit variant directly. -4. **Elevation variable structure** — inspect the `Elevations/*` variables in - `figma_get_variable_defs` output: - - **Three-layer DROP_SHADOW** (umbra + penumbra + ambient) → **Material Design** - - **Single-layer DROP_SHADOW** → Indigo, Fluent, or Bootstrap -5. **Palette shade naming** — variables named `primary/500`, `primary/100`–`primary/900` - follow the Material 100–900 palette convention → likely **Material**. -6. **Visual heuristics** (use only when all above are inconclusive): - prominent shadows + ripple effects → `"material"`; - flat surfaces + sharp corners + Segoe/Inter font → `"fluent"`; - component borders + Bootstrap grid → `"bootstrap"`; - rounded purple/indigo accents without Material shadows → `"indigo"`. - -> **Never use font name as a primary signal.** "Titillium Web" is the default body font -> in the Indigo.Design UI Kit for Material — it is not exclusive to the Indigo design system. - -Supported values: `material` (default), `bootstrap`, `fluent`, `indigo`. - -### 3c: Generate Global Theme - -Extract the following from Phase 1e variables using -[references/design-token-bridge.md](references/design-token-bridge.md): - -``` -primaryColor ← from "color/primary/500" or "primary/500" -secondaryColor ← from "color/secondary/500" or "secondary/500" -surfaceColor ← from "color/surface" or "surface/default" -fontFamily ← from "typography/font-family" or "typography/body/font-family" -``` - -Then call in order: - -> **Parameter names differ between tools** — `theming_create_palette` uses `primary`, -> `secondary`, `surface` (not `primaryColor` etc.). `theming_create_theme` uses -> `primaryColor`, `secondaryColor`, `surfaceColor`. Do not mix them up. - -> **fontFamily double-quote bug** — `theming_create_theme` may double-wrap the fontFamily -> string (e.g. `""'Titillium Web', sans-serif""`) in its Sass output, producing invalid Sass. -> If you see double-quoted strings in the generated output, strip the outer quotes before -> applying to `styles.scss`. - -``` -theming_create_palette({ - primary: primaryColor, - secondary: secondaryColor, - surface: surfaceColor, - platform: "angular", - licensed: -}) - -theming_create_elevations({ - preset: "material" // or "indigo" if design system is Indigo -}) - -theming_create_typography({ - fontFamily, - platform: "angular" -}) - -theming_create_theme({ - palette: , - elevations: , - typography: , - variant: "", - designSystem: "", - platform: "angular", - licensed: -}) -``` - -Apply the generated output to `src/styles.scss` as instructed in the tool's response. - -### 3d: Per-Component Token Mapping - -> **Scope:** applies only to core Ignite UI Angular components (grid, navbar, card, -> inputs, chips, list, etc.). Charts, maps, and gauges have no Sass tokens — configure -> those via component inputs only. - -For **every** Ignite UI core component in your plan, run this loop: - -1. `theming_get_component_design_tokens({ component: "" })` - — review all token names, types, and descriptions -2. Go back to the Phase 1e variable map and find Figma variables that correspond to - this component's surfaces (background, text, border, hover state) -3. `theming_create_component_theme({ component: "", platform: "angular", tokens: { } })` -4. Apply the generated `@include tokens()` block to the component's SCSS or to a - scoped block in `styles.scss` - -When a specific component needs a different density or spacing from the global default, -use `theming_set_size` or `theming_set_spacing` with the `component` parameter — this -scopes `--ig-size` or `--ig-spacing` to that component’s selector rather than applying -globally. For compound components, use `scope` with a sub-component selector. Only -apply these globally (`:root`) when the entire app has a clearly distinct density. -Leave `theming_set_roundness` at its default unless the user explicitly requests a -change. Never derive multiplier values from Figma pixel values. -See `references/design-token-bridge.md § Spacing, Sizing, and Roundness`. - ---- - -## Phase 4 — Implementation - -**Goal:** build the Angular view(s) that match the artboard decomposition from Phase 2. - -### Implementation Rules - -1. **Never generate component code without reading its `get_doc` result first** (Phase 2b) -2. **Section by section** — layout → navigation → primary content → secondary → data -3. Follow Angular standalone component conventions and AGENTS.md coding standards -4. Import components from their specific entry points, never from the root barrel -5. Use CSS Grid first to match Figma frame proportions; add Flexbox for sub-regions -6. Apply theming via the SCSS classes and tokens generated in Phase 3 -7. Use typed mock data that matches the design's density and domain -8. Keep layout, spacing, and typography in SCSS files — not inline styles -9. For DV components (charts, maps, gauges), set visual properties via component inputs - as described in [references/figma-component-map.md](references/figma-component-map.md) -10. After implementing each major section, save and check in the browser (if dev server is running) -11. **Global input type:** if the Figma design uses `border`-type inputs globally (detected - via variant indicator nodes in Phase 1d), set the `IGX_INPUT_GROUP_TYPE` injection token - once in `app.config.ts` rather than `type="border"` on every component. This covers all - compound components that wrap `IgxInputGroup` internally (`IgxSimpleCombo`, - `IgxDatePickerComponent`, `IgxDateRangePickerComponent`, `IgxTimePickerComponent`, - `IgxSelectComponent`): - ```typescript - // app.config.ts - import { IGX_INPUT_GROUP_TYPE } from 'igniteui-angular/input-group'; - // in providers array: - { provide: IGX_INPUT_GROUP_TYPE, useValue: 'border' } - ``` -12. **Layout surfaces:** for every entry in the Phase 1g Surfaces table, add a CSS class - with the recorded `background`, `border-radius`, `padding`, `border`, and `box-shadow`. - Never leave a section transparent if the Figma surface has a background. Never add a - background to a section that floats on the page background in the Figma design. -13. **Implement only controls that appear in the Figma artboard.** Do not add toolbar - buttons, actions, or UI elements that look useful but are not visible in the design - context output for that artboard. - -### Layout Strategy - -Translate Figma frame dimensions into CSS Grid first: - -```scss -// Artboard: 1440×900px, sidebar 280px, content 1160px -.app-layout { - display: grid; - grid-template-columns: 280px 1fr; - grid-template-rows: 64px 1fr; - min-height: 100vh; -} -``` - -Match desktop proportions before adding responsive breakpoints. - -### Angular Project Structure - -For a new view or page generated from a Figma artboard, create: - -``` -src/app/ - / - .component.ts ← standalone component - .component.html ← template - .component.scss ← styles + component theme overrides -``` - -Register the route in `app.routes.ts` when the project uses routing. - ---- - -## Phase 5 — Visual Validation (Playwright MCP) - -**Goal:** measure and compare the running app against the Figma reference screenshots -from Phase 1c. Use the measurement-driven loop — compare numbers, not impressions. - -Read [references/validation-patterns.md](references/validation-patterns.md) in full -before running any Playwright tool. - -### 5a: Ensure the Dev Server Is Running - -Ask the user for the local dev URL if not already known (default: `http://localhost:4200`). -Navigate to confirm the app is running: - -``` -playwright_browser_navigate({ url: "http://localhost:4200" }) -playwright_browser_console_messages() // check for startup errors -``` - -### 5b: Match Viewport to Artboard Dimensions - -Resize the browser to match the Figma artboard dimensions captured in Phase 1c: - -``` -playwright_browser_resize({ width: , height: }) -playwright_browser_navigate({ url: "" }) // re-navigate after resize -``` - -> **Always re-navigate after resize.** The browser may reset to `about:blank` on -> viewport change. This is a known Playwright MCP pitfall. - -### 5c: Capture and Compare Screenshots - -> **IMPORTANT — Figma MCP is session-bound.** To get a fresh Figma reference screenshot -> for comparison, ask the user to select the artboard in Figma, then call -> `figma_get_screenshot({})`. Alternatively, use the Phase 1c reference screenshots -> already saved to disk. - -For **each target artboard** (run the full 5c–5f loop once per page): - -1. Ask the user: *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."* -2. Navigate the browser to the corresponding route. -3. Take a browser screenshot: - ``` - playwright_browser_take_screenshot({ type: "png" }) - ``` -4. Do a **section-by-section** visual comparison against the Phase 1c reference: - - top bar → sidebar → **every section in the Phase 1g Surfaces table** → footer -5. Do **not** advance to the next artboard until no Critical/Major issues remain on the current one. - -### 5d: Measure Computed Styles - -For each section with visible differences — and **mandatorily for every entry in the -Phase 1g Surfaces table** — use `playwright_browser_evaluate` to extract exact values. -Pass code as a **plain JavaScript function string** using the `function` parameter -(see [references/validation-patterns.md](references/validation-patterns.md)): - -``` -playwright_browser_evaluate({ - function: "() => { var el = document.querySelector(''); if (!el) return { error: 'not found' }; var s = getComputedStyle(el); var r = el.getBoundingClientRect(); return { fontSize: s.fontSize, backgroundColor: s.backgroundColor, padding: s.padding, borderRadius: s.borderRadius, border: s.border, gap: s.gap, height: Math.round(r.height), width: Math.round(r.width) }; }" -}) -``` - -**Surfaces audit (mandatory for every page):** For every section in the Phase 1g Surfaces -table, assert: -- `backgroundColor` is **not** `rgba(0, 0, 0, 0)` when the surface has a background color -- `backgroundColor` **is** `rgba(0, 0, 0, 0)` when the design shows the section floating - on the page background (no card wrapper) -- All child elements shown inside the surface card in Figma are enclosed within the card's - bounding rect in the DOM - -**Action controls audit (mandatory for every page):** Count and name all visible action -buttons and toolbar controls. Compare against the Phase 1d inventory — any button not -recorded in the Figma design context is fabricated and must be removed. - -Compare all returned values against the Figma spec (from Phase 1d design context). - -### 5e: Classify and Report Mismatches - -| Severity | Category | Example | Action | -| ------------ | --------------- | ----------------------------------------- | --------------------------- | -| **Critical** | Missing element | Button in Figma, absent in code | Auto-fix | -| **Major** | Wrong component | Figma shows dropdown, code has text input | Auto-fix | -| **Minor** | Spacing off | 24px gap in Figma, 16px in code | Auto-fix if straightforward | -| **Cosmetic** | Color shade | `#333` vs `#2d2d2d` | Report only | - -For each mismatch, produce: - -``` -ISSUE: -LOCATION:
-FIGMA: -RENDERED: -SEVERITY: -FIX: -``` - -### 5f: Apply Corrections - -Fix Critical and Major issues immediately. After applying fixes, re-navigate and take a -fresh screenshot to confirm: - -``` -playwright_browser_navigate({ url: "" }) -playwright_browser_take_screenshot({ type: "png" }) -``` - -Repeat the measure → fix → re-verify loop until no Critical or Major issues remain. - -### 5g: Accessibility Snapshot - -Take an accessibility snapshot to verify the structural integrity of the view: - -``` -playwright_browser_snapshot() -``` - -Check that: - -- Interactive elements have accessible labels -- Headings follow a logical hierarchy -- Navigation landmarks are present - ---- - -## Critical Rules - -- **Phase 0 is not optional.** Never skip MCP verification. -- **Phase 2b before code.** Never write a selector you have not read from a doc. -- **Phase 1c screenshots are immutable ground truth.** Never overwrite them; always - compare against the original Figma state. -- **Re-navigate after resize** in Phase 5 to avoid Playwright's browser reset bug. -- **Rate-limit Figma MCP calls.** Use `figma_get_metadata` for discovery, then targeted - `figma_get_design_context` per artboard. Batch screenshot calls. -- **Fail fast on 3 retries.** If the same correction fails three times, stop, report - the issue to the user, and ask for guidance. -- **Do not modify dependency manifests or lock files without asking.** Identify the exact - packages and versions required, then get approval before installing. - ---- - -## Related Skills - -- [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) — deep reference for non-grid components -- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — deep reference for grid, tree-grid, hierarchical-grid, pivot-grid -- [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md) — theming system architecture and advanced palette patterns -- [`igniteui-angular-generate-from-image-design`](../igniteui-angular-generate-from-image-design/SKILL.md) — fallback when no Figma file is available (static image input) diff --git a/.claude/skills/igniteui-angular-figma-to-app/references/asset-extraction.md b/.claude/skills/igniteui-angular-figma-to-app/references/asset-extraction.md deleted file mode 100644 index 346135c..0000000 --- a/.claude/skills/igniteui-angular-figma-to-app/references/asset-extraction.md +++ /dev/null @@ -1,393 +0,0 @@ -# Asset Extraction from Figma - -> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** -> -> Use this file in Phase 1h to identify and extract image assets from Figma artboards -> before implementation. Read in full before calling any extraction tool. -> -> **Zero-placeholder policy:** every image asset visible in the Figma design must be -> extracted and committed to `src/assets/` before Phase 4 begins. Gradient placeholders -> and empty `
` boxes are not acceptable. If the highest-fidelity method is -> unavailable, use the next tier — but always extract something real. - ---- - -## Step 0 — Acquire the Figma File Key (Required for REST API) - -The Figma REST API requires a **file key** — the identifier embedded in every Figma -file URL. Without it, you can still extract assets using Tier 2 and Tier 3 methods -below, but the REST API (Tier 1) produces the highest quality output and should always -be the first attempt. - -**Ask the user for the file key at the start of Phase 1h:** - -> "To extract image assets at the highest quality, I need the Figma file key. -> In the Figma desktop app: -> -> 1. Right-click the file tab at the top → **Copy link** (or go to **File → Share** and copy the URL) -> 2. The URL looks like: `https://www.figma.com/design/ABCDEF1234567890/My-File-Name` -> 3. The file key is the segment after `/design/`: **`ABCDEF1234567890`** -> -> Please share that key (or the full URL). If you cannot access it right now, I will -> proceed with the desktop-app extraction methods and note which assets need to be -> re-exported at higher quality." - -**Extracting the key from a URL (if the user pastes it):** - -```bash -# URL format: https://www.figma.com/design//?... -# Extract key with sed: -echo "https://www.figma.com/design/ABCDEF1234567890/My-App" \ - | sed -E 's|.*/design/([^/]+)/.*|\1|' -# → ABCDEF1234567890 -export FILE_KEY="ABCDEF1234567890" -``` - -**Your Figma personal access token** (same one used for the MCP server) is needed for REST calls. Store it as an environment variable: - -```bash -export FIGMA_TOKEN="your-personal-access-token" -``` - ---- - -## Two Fundamentally Different Types of Image Assets - -Figma stores images in two distinct ways — understanding the difference is essential for choosing the right extraction method: - -| Type | What it is | Figma signal | Best extraction method | -| ---------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------- | ---------------------------------------- | -| **Image fill** | A photo, texture, or raster image dragged/pasted into Figma. Stored as an IMAGE fill on a RECTANGLE or FRAME node. | Layer has fill of type `IMAGE`; `imageRef` in node data | REST API Method A → original source file | -| **Vector asset** | A logo, icon, or illustration drawn in Figma using vector tools. | Node type `VECTOR`, `BOOLEAN_OPERATION`, or `GROUP` | REST API Method B → clean SVG | - -Do **not** confuse these with Ignite UI component instances — those become Angular components, not extracted assets. - ---- - -## Step 1 — Identify Image Nodes - -### Naming patterns to look for in `figma_get_metadata` - -Scan the XML returned by `figma_get_metadata` for layer names matching: - -| Naming pattern | Likely asset type | Action | -| -------------------------------------------------- | ----------------- | ----------------------------------------- | -| `_Image`, `_Photo`, `_Picture`, `image`, `photo` | Raster image fill | Extract as PNG | -| `_Hero`, `_Banner`, `_Cover`, `hero`, `banner` | Large raster fill | Extract as PNG (2× scale) | -| `_Thumbnail`, `_Avatar`, `_Illustration` | Raster image fill | Extract as PNG | -| `_Logo`, `_Brand`, `logo`, `brand` | Vector or raster | If vector: extract as SVG; if raster: PNG | -| `_Icon/` prefix (custom icons not in igx-icon set) | Custom SVG icon | Extract as SVG | -| `_Background`, `_Bg`, `bg`, `background` | Large raster fill | Extract as PNG | -| `_Illustration`, `_Art`, `_Pattern` | Vector or raster | Classify before extracting | - -> **Ignore these** — do NOT extract them as image assets: -> -> - Any layer whose name starts with `_Button`, `_Input`, `_Grid`, `_Card`, etc. -> (Indigo.Design UI Kit component instances → implement as IgxXxx components) -> - `igx-icon` glyph nodes (use `` in Angular instead) -> - Artboard/frame boundaries themselves - -### Size heuristic - -Large rectangles (width > 200px or height > 200px) at key layout positions (hero area, -sidebar background, card thumbnail slot) are almost always image fills. - -Small nodes (< 48×48px) named with icon-like names are usually SVG icons. - -### Confirm with design context - -For ambiguous nodes, look at the `figma_get_design_context` output for the artboard. -Each image asset appears as either: - -- An `` — confirms it is a raster fill; note the node ID -- Inline SVG or an `` with `.svg` extension — confirms it is a vector; note the node ID - -Note all localhost image URLs from the design context — these are needed for Tier 2 -extraction if the REST API is unavailable. - ---- - -## Step 2 — Extract at the Highest Available Fidelity - -Use this **four-tier decision tree**. Start at Tier 1. Move to the next tier only if -the previous one is unavailable for this specific asset. - -``` -Do you have the FILE_KEY? -├─ YES → Use Tier 1 (REST API). Always the best. -└─ NO → Did figma_get_design_context include a localhost URL for this asset? - ├─ YES → Use Tier 2 (download localhost URL to disk). - └─ NO → Can you get a clean node screenshot? - ├─ YES → Use Tier 3 (figma_get_screenshot per node). - └─ NO → Use Tier 4 (CSS gradient/color placeholder as last resort, - with a TODO comment to replace later). -``` - -**After completing Phase 4, if you used Tier 2 or Tier 3 for any asset:** - -> Tell the user: "The following assets were extracted at reduced quality because the -> Figma file key was not available: [list]. To replace them with the original -> source files, run the Tier 1 REST API commands in Step 2a once you have the file key." - ---- - -### Tier 1 — REST API (Highest Fidelity) - -**Requires:** `FILE_KEY` and `FIGMA_TOKEN`. - -#### Method A — Original Image Fills - -Use this to download **photos, textures, and raster images** that were uploaded to -Figma (identified by `imageRef` in node fill data). Returns the original source file -at its native resolution — never a re-render. - -```bash -# Step A.1 — Get all image fill URLs in the file -curl -s \ - -H "X-Figma-Token: $FIGMA_TOKEN" \ - "https://api.figma.com/v1/files/$FILE_KEY/images" \ - -o /tmp/figma_image_fills.json - -# Response: { "images": { "": "", ... } } - -# Step A.2 — Get node fill data to match imageRef → node -curl -s \ - -H "X-Figma-Token: $FIGMA_TOKEN" \ - "https://api.figma.com/v1/files/$FILE_KEY/nodes?ids=$NODE_IDS" \ - -o /tmp/figma_nodes.json -# In the response, look for: "fills": [{ "type": "IMAGE", "imageRef": "abc123" }] -# Match "abc123" → URL from figma_image_fills.json - -# Step A.3 — Download to assets folder -mkdir -p src/assets/images src/assets/icons -IMAGE_URL=$(jq -r '.images[""]' /tmp/figma_image_fills.json) -curl -sL "$IMAGE_URL" -o src/assets/images/hero-background.jpg -``` - -> **URL expiry:** image fill URLs expire in **14 days**. Download during the session. - -#### Method B — Node Export (SVG, PNG, JPG) - -Use this to export **any node** as SVG, PNG, or JPG. Best for logos, custom icons, -vector illustrations, and raster compositions. - -```bash -mkdir -p src/assets/images src/assets/icons - -# SVG export (vectors — logos, icons, illustrations) -curl -s \ - -H "X-Figma-Token: $FIGMA_TOKEN" \ - "https://api.figma.com/v1/images/$FILE_KEY?ids=$NODE_IDS&format=svg&svg_outline_text=false&contents_only=true" \ - -o /tmp/figma_svg_export.json - -jq -r '.images | to_entries[] | "\(.key)\t\(.value)"' /tmp/figma_svg_export.json | \ -while IFS=$'\t' read -r nodeId url; do - filename="$(echo "$nodeId" | tr ':' '-').svg" - curl -sL "$url" -o "src/assets/icons/$filename" - echo "Downloaded $nodeId → src/assets/icons/$filename" -done - -# PNG export at 2× (raster compositions, hero banners) -curl -s \ - -H "X-Figma-Token: $FIGMA_TOKEN" \ - "https://api.figma.com/v1/images/$FILE_KEY?ids=$NODE_IDS&format=png&scale=2&contents_only=true" \ - -o /tmp/figma_png_export.json - -jq -r '.images | to_entries[] | "\(.key)\t\(.value)"' /tmp/figma_png_export.json | \ -while IFS=$'\t' read -r nodeId url; do - filename="$(echo "$nodeId" | tr ':' '-').png" - curl -sL "$url" -o "src/assets/images/$filename" -done -``` - -**Key export parameters:** - -| Parameter | Value | When to use | -| ------------------ | ------- | ---------------------------------------------------- | -| `format` | `svg` | Logos, icons, vector illustrations | -| `format` | `png` | Hero backgrounds, thumbnails — always pair `scale=2` | -| `format` | `jpg` | Photos without transparency — use `scale=2` | -| `scale` | `2` | **Always for PNG/JPG** — retina-quality output | -| `svg_outline_text` | `false` | Keep text as `` elements (smaller, accessible) | -| `contents_only` | `true` | Render the node in isolation (default) | - -> **Export URL expiry:** export URLs expire in **30 days**. Download immediately. - ---- - -### Tier 2 — Localhost URL Download (Desktop MCP Fallback) - -**Use when:** the file key is unavailable and `figma_get_design_context` returned -localhost URLs (e.g. `http://localhost:3845/assets/abc123.png`). - -These URLs are served by the Figma desktop app's in-memory renderer and are accessible -via `curl` during the active Figma session. They are **not** the original source file -(they are a renderer output), but they are substantially better than placeholders and -can be committed to the repository. - -```bash -mkdir -p src/assets/images src/assets/icons - -# Extract localhost URLs from a design context output and download them -# Replace with the actual URL found in figma_get_design_context output -curl -sL "http://localhost:3845/assets/.png" -o src/assets/images/hero-background.png -curl -sL "http://localhost:3845/assets/.svg" -o src/assets/icons/logo.svg -``` - -**Finding localhost URLs in design context output:** - -In the React+Tailwind code returned by `figma_get_design_context`, look for: - -- `const imgXxx = "http://localhost:3845/assets/.";` at the top of the output -- `` or `background-image` references inline - -Each `const` at the top is an image asset. Note its variable name, the URL, and which -Figma node it belongs to (from context around the `` tag). - -**Limitations of Tier 2 assets:** - -- Raster renders — vectors become PNGs, not SVGs -- Renderer resolution (typically 2×) — adequate for most uses -- Expire when the Figma desktop app closes — **must be downloaded before closing Figma** -- Must be renamed from `.png` to descriptive names before committing - -**Commit as-is** — they are real assets. Add a comment in the asset manifest: - -```typescript -// TODO: Replace with Tier 1 REST API export once FILE_KEY is available -heroBg: 'assets/images/hero-background.png', // extracted from Figma session -``` - ---- - -### Tier 3 — `figma_get_screenshot` per Node - -**Use when:** no file key AND no localhost URLs were produced for a specific node. - -`figma_get_screenshot` renders any currently-selected Figma node as a PNG screenshot. -Ask the user to select each image node in Figma, then call the tool. - -``` -// 1. Ask: "In Figma, please click the [Hero Background] layer to select it." -// 2. After confirmation: -figma_get_screenshot({}) -// 3. The returned image is a 1× screen-capture PNG. Save it to src/assets/images/. -``` - -**Limitations:** - -- 1× resolution — suitable as a placeholder but blurry on retina screens -- Rasterizes all vectors — logos become PNGs -- May include surrounding canvas elements - -Label these assets clearly in the manifest: - -```typescript -// TODO: Re-export at 2× via Tier 1 or Tier 2 — current version is 1× screen capture -heroBg: 'assets/images/hero-background.png', -``` - ---- - -### Tier 4 — CSS Fallback (Last Resort Only) - -**Use only when** an asset is confirmed to be a pure color fill or a gradient — not when -an image exists in Figma but extraction failed. Never use Tier 4 because extraction -feels difficult. - -```scss -// Only acceptable when the Figma layer is genuinely a gradient, not a photo -.hero-banner { - // TODO: Replace with real asset — extraction blocked (no file key, no session URL) - background: linear-gradient(135deg, #0d1b3e 0%, #1a0533 100%); -} -``` - -If you use Tier 4, add the `TODO` comment and include it in the post-session handoff -notes to the user. - ---- - -## Step 3 — Build an Asset Manifest - -After extraction, create a manifest so the implementation phase uses consistent paths: - -```typescript -// src/app//_assets.ts — generated during Phase 1h - -export const PAGE_ASSETS = { - // Figma node 123:456 — "Hero/Background" layer - // Tier 1: REST API PNG export at 2× - heroBg: 'assets/images/hero-background.jpg', - - // Figma node 789:012 — "_Logo/Main" layer - // Tier 1: REST API SVG export - logo: 'assets/icons/logo.svg', - - // Figma node 345:678 — "Card/Thumbnail" layer - // Tier 2: localhost URL download (TODO: re-export via REST API) - cardThumbnail: 'assets/images/card-thumbnail.png', -} as const; -``` - -Name files by layer purpose, not by node ID. - ---- - -## Step 4 — Angular Usage Patterns - -### Static images via `NgOptimizedImage` - -```html - -Dashboard hero background -``` - -Import `NgOptimizedImage` in the component's `imports` array. Note: `NgOptimizedImage` -does **not** work for inline base64 images. - -### Background images via SCSS - -```scss -.dashboard-hero { - background-image: url('/assets/images/hero-background.jpg'); - background-size: cover; - background-position: center; -} -``` - -### Inline SVG logos - -```html -Company logo -``` - -### Igx-icon for kit icons (do NOT extract as assets) - -Standard Material icons and `imx-icons` (Material Icons Extended) are registered at -runtime — never extract them as image files: - -```html -settings -``` - -See `figma-component-map.md § Material Icons Extended` for setup. - ---- - -## Pitfalls - -| Pitfall | Consequence | Fix | -| ------------------------------------------------------------ | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| Skipping asset extraction entirely (gradient placeholders) | Implementation looks nothing like the design; Phase 5 fails | Always use at least Tier 2 or Tier 3 — never skip | -| Not asking for the file key before starting extraction | Defaults to Tier 2/3 when Tier 1 was actually possible | Ask for the file key at the start of Phase 1h (see Step 0) | -| Using localhost URLs without downloading them in the session | URLs expire when Figma closes; assets become broken | Download with `curl` immediately; commit the files | -| Naming assets by node ID ("node-123-456.png") | Unmaintainable; breaks if Figma is reorganized | Name by layer purpose: `hero-background.jpg`, `company-logo.svg` | -| Using `figma_get_screenshot` for SVG logos | Logo is rasterized to PNG; loses vector scalability | Use Tier 1 Method B with `format=svg` instead; fall back to Tier 2 only if unavailable | -| Exporting PNG at `scale=1` | Blurry on HiDPI/retina screens | Always use `scale=2` | -| Storing Figma CDN export URLs in source code | URLs expire in 14–30 days; breaks production | Only store local `src/assets/...` paths in code | -| Downloading SVG with `svg_outline_text=true` (default) | All text converted to paths; larger file; no accessibility | Set `svg_outline_text=false` | -| Extracting Ignite UI component instances as images | Produces a static screenshot instead of an interactive component | Identify layer names from `figma-component-map.md`; those are components, not assets | -| Extracting background colors or gradients as images | Inflates bundle size, breaks theming | Colors → CSS custom properties or Ignite UI theming tokens | -| Not creating asset directories before running curl | Writes fail silently or to the wrong path | Always run `mkdir -p src/assets/images src/assets/icons` first | -| Large SVGs from complex illustrations | Slow render, large bundle | Consider PNG for illustrations > 50KB as SVG; SVG is best for logos and icons | diff --git a/.claude/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md b/.claude/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md deleted file mode 100644 index 6ce6526..0000000 --- a/.claude/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md +++ /dev/null @@ -1,324 +0,0 @@ -# Figma Variables → Ignite UI Angular Theming Bridge - -> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** -> -> Use this file in Phase 3 to translate Figma variable values (from `figma_get_variable_defs`) -> into Ignite UI Theming MCP inputs. Read this file in full before calling any theming tool. - ---- - -## How the Indigo.Design UI Kits Organize Variables - -The **Indigo.Design UI Kits** are Figma component libraries published by Infragistics. -Designers build their own app frames in Figma using these kits as shared libraries. -The kits come in four design-system variants, each with light and dark themes: - -| Kit variant | Figma library name pattern | Ignite UI `designSystem` | -| ---------------------- | ----------------------------------------------- | ------------------------ | -| Material (most common) | `Indigo.Design UI Kit for Material` | `"material"` | -| Fluent | `Indigo.Design UI Kit for Fluent` | `"fluent"` | -| Bootstrap | `Indigo.Design UI Kit for Bootstrap` | `"bootstrap"` | -| Indigo | `Indigo.Design UI Kit` / `Indigo.Design System` | `"indigo"` | - -**Identifying the active kit variant** is the first task in Phase 3 because it sets -the `designSystem` parameter for `theming_create_theme`. Use these signals in **strict -precedence order** — stop at the first clear match: - -1. **Library source name** — `figma_get_design_context` and `figma_get_metadata` responses - may reference the source library file name (e.g. `"Indigo.Design UI Kit for Material"`). -2. **Variable collection name** — `figma_get_variable_defs` may return collection names - that include the design system (e.g. `Material/color/primary`). -3. **Elevation variable structure** — inspect the `Elevations/*` variables from - `figma_get_variable_defs`: - - **Three-layer DROP_SHADOW** (umbra + penumbra + ambient, `Elevations/Shadow 01-03`) → **Material** - - **Single-layer DROP_SHADOW** → Indigo, Fluent, or Bootstrap -4. **Palette shade naming** — variables named `primary/500`, `primary/100`–`primary/900` - follow the Material 100–900 convention → likely **Material**. -5. **Visual heuristics** (use only when all above are inconclusive) — see the - [Design System Detection table](#design-system-detection-from-figma) below. - -> **Never use font name as a primary signal.** "Titillium Web" is the default body font -> in the Indigo.Design UI Kit for Material — it is not exclusive to any single kit variant. - -All four kit variants share the same variable naming conventions described below. The Ignite UI theming system uses Figma variable collections that mirror its own token structure: - -``` -Primitives collection → raw palette values (e.g. blue/500 = #6200EE) -Semantic collection → role-based aliases (e.g. color/primary = alias → blue/500) -Component collection → per-component overrides (e.g. button/background = alias → color/primary) -``` - -The `figma_get_variable_defs` response returns a flat map of resolved variable names to values. Use the sections below to identify which variables map to which theming inputs. - ---- - -## Global Palette Mapping - -### Primary Color - -| Figma Variable Pattern | Theming Input | Notes | -| ---------------------- | ------------------------------------- | --------------------------------------- | -| `color/primary` | `primary` in `theming_create_palette` | Use the resolved hex value | -| `primary/500` | `primary` | The 500 shade is the seed color | -| `Primary/Default` | `primary` | Alternative naming in some kit versions | -| `palette/primary/500` | `primary` | Prefixed naming pattern | - -> **Parameter names:** `theming_create_palette` uses `primary`, `secondary`, `surface` -> (short names). `theming_create_theme` uses `primaryColor`, `secondaryColor`, -> `surfaceColor` (long names). Do **not** mix them up. - -### Secondary / Accent Color - -| Figma Variable Pattern | Theming Input | Notes | -| ---------------------- | --------------------------------------- | ---------------------------------- | -| `color/secondary` | `secondary` in `theming_create_palette` | — | -| `secondary/500` | `secondary` | — | -| `Secondary/Default` | `secondary` | — | -| `color/accent` | `secondary` | Some kit variants call it "accent" | - -### Surface / Background Color - -| Figma Variable Pattern | Theming Input | Notes | -| ---------------------- | ------------------------------------- | ------------------- | -| `color/surface` | `surface` in `theming_create_palette` | The main background | -| `surface/default` | `surface` | — | -| `Surface` | `surface` | — | -| `color/background` | `surface` | Alternative naming | - -### Gray / Neutral Palette - -The Ignite UI theming system derives the gray scale automatically from the surface color. -You do **not** need to pass gray values to `theming_create_palette` explicitly unless you -need a custom gray family. If the Figma file has explicit gray variables, compare them -against the auto-generated palette after calling `theming_create_palette` and only add -a custom gray override if they differ significantly. - -### Semantic Status Colors - -| Figma Variable Pattern | Theming Input | Notes | -| -------------------------------- | ------------------------------------------ | -------- | -| `color/success` or `success/500` | `successColor` in `theming_create_palette` | Optional | -| `color/warning` or `warning/500` | `warningColor` in `theming_create_palette` | Optional | -| `color/error` or `error/500` | `errorColor` in `theming_create_palette` | Optional | -| `color/info` or `info/500` | `infoColor` in `theming_create_palette` | Optional | - ---- - -## Typography Mapping - -| Figma Variable Pattern | Theming Input | Notes | -| -------------------------------- | --------------------------------------------------- | ------------------------------------- | -| `typography/font-family` | `fontFamily` in `theming_create_typography` | Primary font | -| `typography/body/font-family` | `fontFamily` | Body font family | -| `typography/heading/font-family` | `fontFamily` | Use if heading font differs from body | -| `font/primary` | `fontFamily` | Alternative naming | -| `font/display` | Pass as `displayFontFamily` if the tool supports it | Display/headline font | - -> **fontFamily double-quote bug:** `theming_create_theme` may double-wrap the fontFamily -> string in its Sass output, producing invalid Sass such as `""'Titillium Web', sans-serif""`. -> If you see this pattern, strip the outer quotes before applying to `styles.scss`: -> -> ```scss -> // BAD (generated with bug) -> $font-family: -> '' 'Titillium Web', -> sans-serif ''; -> // GOOD (manually corrected) -> $font-family: 'Titillium Web', sans-serif; -> ``` - -> **Comma-separated font families** must be wrapped in parentheses when used in Sass -> typography mixins: -> -> ```scss -> // BAD — parsed as multiple Sass arguments -> @include typography($font-family: 'Roboto', 'Arial', sans-serif); -> // GOOD -> @include typography( -> $font-family: ( -> 'Roboto', -> 'Arial', -> sans-serif, -> ) -> ); -> ``` - ---- - -## Spacing, Sizing, and Roundness — Do Not Map Directly - -> **These Ignite UI theming tools are NOT equivalent to Figma spacing values.** -> Do not create a mapping between Figma pixel values and these tools. - -`theming_set_spacing` and `theming_set_roundness` accept **multipliers**, not pixel values. Passing a Figma `spacing/md = 16` as `theming_set_spacing({ spacing: 16 })` would produce a 1600% increase over the default — a catastrophic result. - -`theming_set_size` accepts a **density enum** (`small`, `medium`, `large`) — it controls how tightly packed components render, not a pixel measurement. - -### When to touch these tools (sparingly) - -| Tool | Use only when | Never use because | -| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `theming_set_size` | The Figma design clearly and consistently uses a noticeably tighter or looser component density than the design system default — e.g. a data-dense admin UI vs a spacious marketing page | A Figma spacing variable happens to match the name "compact" | -| `theming_set_spacing` | Explicitly requested by the user or required to match a very specific density contract; default (1.0) should be the starting point | A Figma `spacing/*` pixel value looks similar to the multiplier number | -| `theming_set_roundness` | The entire app has a clearly distinct border-radius language from the design system default (e.g. fully squared off vs fully rounded) | A Figma `border-radius/md = 8` maps numerically to the multiplier | - -### The correct adjustment path - -When a specific component needs tighter or looser density or spacing, scope `--ig-size` -and `--ig-spacing` to that component’s selector — not raw CSS overrides, not -`::ng-deep`. Both `theming_set_size` and `theming_set_spacing` accept a `component` -parameter that generates exactly this scoped output: - -``` -// Scoped size for one component type -theming_set_size({ component: "calendar", size: "small", platform: "angular" }) -// → igx-calendar { --ig-size: var(--ig-size-small); } - -// Scoped spacing: 0.75 = 75% of default -theming_set_spacing({ component: "calendar", spacing: 0.75, platform: "angular" }) -// → igx-calendar { --ig-spacing: 0.75; } -``` - -For compound components, scope to a sub-component selector via the `scope` parameter: - -``` -theming_set_size({ scope: "igx-grid-toolbar", size: "small", platform: "angular" }) -``` - -Or set the CSS custom properties directly in SCSS: - -```scss -igx-calendar { - --ig-size: var(--ig-size-small); - --ig-spacing: 0.75; -} -``` - -The Indigo.Design kit’s component proportions are already calibrated for each design -system; start from the defaults and only adjust when there is a clear visual reason. - ---- - -## Light vs Dark Mode Detection - -Detect from the Figma artboard: - -| Figma Signal | Action | -| -------------------------------------------------------- | ---------------------------------------------------------------------- | -| Dark artboard background (`#121212`, `#1a1a1a`, similar) | Use `variant: "dark"` in `theming_create_theme` | -| Light artboard background (`#fff`, `#f5f5f5`, similar) | Use `variant: "light"` in `theming_create_theme` | -| Multiple artboards — one light, one dark | Generate both theme variants with a `prefers-color-scheme` media query | -| `color/mode` variable present | Its value (`light` or `dark`) is the authoritative signal | - ---- - -## Design System Detection from Figma - -| Figma Visual Signal | Likely Design System | `designSystem` Value | -| ------------------------------------------------------------------ | -------------------------- | ----------------------- | -| Three-layer `DROP_SHADOW` on elevation variables (`Shadow 01-03`) | Material Design | `"material"` | -| Prominent single-layer shadows, rounded cards, ripple effects | Material Design | `"material"` | -| Flat surfaces, sharp corners, Segoe/Inter font | Microsoft Fluent | `"fluent"` | -| Component borders, Bootstrap-like grid | Bootstrap | `"bootstrap"` | -| Heavy use of purple/indigo accents, rounded corners, single shadow | Infragistics Indigo | `"indigo"` | -| `primary/500`, `primary/900` palette shade naming | Material (100–900 palette) | `"material"` | -| Explicit `$light-material-schema` or similar in Figma descriptions | Match the schema name | Use corresponding value | - ---- - -## Per-Component Token Resolution - -For each Ignite UI Angular component you use, follow this lookup order: - -### Step 1: Discover component tokens - -``` -theming_get_component_design_tokens({ component: "" }) -``` - -The result lists every available token with its name, type, and description. - -### Step 2: Match Figma variables to token names - -The **Indigo.Design UI Kits** use component-level variables that follow the pattern: - -``` -// -``` - -Examples: - -- `button/background` → token `background` in the button component -- `button/foreground` or `button/text-color` → token `foreground-color` -- `chip/background/selected` → token `selected-chip-color` -- `grid/header-background` → token `header-background` -- `navbar/background` → token `background` - -**Lookup process:** - -1. Take the Figma variable name (e.g. `button/background`) -2. Strip the component prefix (`background`) -3. Match it against the token list from `theming_get_component_design_tokens` -4. If no exact match, find the token whose description mentions the same visual role - -### Step 3: Common component token patterns - -| Component | Figma Variable | Likely Token Name | Notes | -| --------- | -------------------------- | ----------------------- | ----------------------- | -| Button | `button/background` | `background` | For `contained` variant | -| Button | `button/foreground` | `foreground-color` | Text color | -| Button | `button/border` | `border-color` | For `outlined` variant | -| Chip | `chip/background` | `background` | Default state | -| Chip | `chip/selected-background` | `selected-chip-color` | — | -| Grid | `grid/header/background` | `header-background` | — | -| Grid | `grid/row/background` | `content-background` | — | -| Grid | `grid/row/hover` | `row-hover-background` | — | -| Navbar | `navbar/background` | `background` | — | -| Input | `input/background` | `box-background` | Box/filled variant | -| Input | `input/border` | `border-color` | Line/border variant | -| Card | `card/background` | `background` | — | -| Card | `card/border` | `border-color` | — | -| List | `list/item/background` | `item-background` | — | -| List | `list/item/hover` | `item-hover-background` | — | -| Dialog | `dialog/background` | `background` | — | - -### Step 4: Generate component theme - -Pass **only tokens that differ from the global theme** to avoid over-specification: - -``` -theming_create_component_theme({ - component: "", - platform: "angular", - licensed: , - tokens: { - "background": "", - "foreground-color": "" - // only include tokens whose value differs from the generated global palette - } -}) -``` - -Apply the result using the `@include tokens()` call returned by the tool. - ---- - -## Variable Resolution Priority - -When multiple Figma variables could map to the same theming input, use this priority: - -1. **Component-scoped variable** (e.g. `button/background`) → per-component token -2. **Semantic role variable** (e.g. `color/primary`) → global palette input -3. **Primitive variable** (e.g. `primary/500`) → global palette seed color -4. **Raw hex/rgb value** (no variable) → extract directly from the design context - ---- - -## What to Skip - -Do **not** call theming tools for: - -- Chart, gauge, and map DV components → configure via component `[input]` bindings only -- Tile Manager and Dock Manager → these are web components with their own CSS custom properties -- Pure layout CSS (margins, grid columns, flex gaps) → write directly in SCSS -- Icon SVG fill colors → use `color` CSS property or the custom `--foreground` CSS property on the `igx-icon` host or its parent diff --git a/.claude/skills/igniteui-angular-figma-to-app/references/figma-component-map.md b/.claude/skills/igniteui-angular-figma-to-app/references/figma-component-map.md deleted file mode 100644 index 636f03f..0000000 --- a/.claude/skills/igniteui-angular-figma-to-app/references/figma-component-map.md +++ /dev/null @@ -1,305 +0,0 @@ -# Indigo.Design UI Kit → Ignite UI Angular Component Map - -> **Part of the [`igniteui-angular-figma-to-app`](../SKILL.md) skill.** -> -> The **Indigo.Design UI Kits** are Figma component libraries (Material, Fluent, Bootstrap, -> Indigo variants) that designers use to build their app screens. Every component instance -> in a design file is drawn from one of these libraries and maps 1:1 to an Ignite UI -> Angular control. -> -> Use this file in Phase 2a to map Figma layer names — as they appear in the kit -> library — to Ignite UI Angular selectors, `get_doc` keys, and key inputs. When a -> layer name is not in this table, call `list_components` then `get_doc` on the closest -> match. - ---- - -## How to Use This File - -1. Find the kit component name (as it appears in the Figma layers panel or the - Indigo.Design kit library) in the **Kit Component Name** column. -2. Read the **Angular Selector** and **IgxXxx Class** for the template. -3. Try the **`get_doc` Key** with `get_doc({ framework: "angular", name: "" })`. - **The doc catalog covers only a subset of components** (verify with `list_components` - once). When no doc exists for a key, use the - [`igniteui-angular-components`](../../igniteui-angular-components/SKILL.md) / - [`igniteui-angular-grids`](../../igniteui-angular-grids/SKILL.md) skill reference files - for usage patterns and `search_api` for member-level API lookups — do not guess. -4. Consult **Key Inputs / Variants** for the properties most commonly configured from - Figma variants. - -> The component names are identical across all four kit variants (Material, Fluent, -> Bootstrap, Indigo). The kit variant determines the theme style, not the component name. - ---- - -## Button Components - -| Kit Component Name | Angular Selector | IgxXxx Class | `get_doc` Key | Key Inputs / Variants | -| -------------------------------------- | ------------------------------------ | ------------------------- | -------------- | ---------------------------------------------------------- | -| `_Button/Flat` | ` -``` - -> **Key inputs summary:** -> - `[rowEditable]="true"` — enables the Done/Cancel overlay per row -> - `[editable]="true"` on each `igx-column` — marks which fields the user can change -> - `[primaryKey]` — **required** for editing to work -> - `[autoGenerate]="false"` — always define columns explicitly when editing is enabled so you control which fields are editable -> - `` with `` — adds hover Edit/Delete buttons and an optional Add Row button automatically - -### Programmatic Row Adding with Default Values - -When starting a new row programmatically, pre-populate fields using `(cellEditEnter)` on the new row: - -```typescript -onCellEditEnter(event: IGridEditEventArgs) { - if (event.isAddRow && event.column.field === 'available') { - event.newValue = true; // default new cars to available - } - if (event.isAddRow && event.column.field === 'year') { - event.newValue = new Date().getFullYear(); - } -} -``` - -```html - -``` - ---- - -## Batch Editing & Transactions - -> **Docs:** [Batch Editing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/batch-editing) (substitute URL prefix per grid type) - -> **Applies to**: Flat Grid, Tree Grid, and Hierarchical Grid. **Pivot Grid does NOT support batch editing.** -> Use batch editing when users need to **edit many rows at once** and commit or discard all changes together, with undo/redo support. - -### Enabling Batch Editing - -```html - - - - - - - - - - -``` - -### Managing Transactions - -```typescript -commitChanges() { - // Exit any active edit before committing - this.gridRef().endEdit(true); - this.gridRef().transactions.commit(this.gridRef().data); -} - -undoLast() { - // Must exit edit mode before undo/redo - this.gridRef().endEdit(true); - this.gridRef().transactions.undo(); -} - -redoLast() { - this.gridRef().endEdit(true); - this.gridRef().transactions.redo(); -} - -discardAll() { - this.gridRef().endEdit(false); - this.gridRef().transactions.clear(); -} -``` - -Use `canUndo` and `canRedo` to control button state: - -```html - - - - -``` - -### Transaction State - -```typescript -// Check if there are pending changes -const hasPendingChanges = this.gridRef().transactions.getAggregatedChanges(false).length > 0; - -// Get all pending transactions -const pending = this.gridRef().transactions.getAggregatedChanges(true); -// Each transaction has: { id, type ('add'|'update'|'delete'), newValue } -``` - -### Sending Batch Changes to Server - -```typescript -saveToServer() { - const changes = this.gridRef().transactions.getAggregatedChanges(true); - - const adds = changes.filter(t => t.type === 'add').map(t => t.newValue); - const updates = changes.filter(t => t.type === 'update').map(t => ({ id: t.id, ...t.newValue })); - const deletes = changes.filter(t => t.type === 'delete').map(t => t.id); - - this.dataService.saveBatch({ adds, updates, deletes }).subscribe(() => { - this.gridRef().transactions.commit(this.gridRef().data); - this.gridRef().transactions.clear(); - }); -} -``` - -## Excel-Style Editing Workflows - -### Inline Cell Editing with Validation - -```html - - - - - - -``` - -```typescript -import { Validators } from '@angular/forms'; - -emailValidators = [Validators.required, Validators.email]; -quantityValidators = [Validators.required, Validators.min(0), Validators.max(9999)]; - -onCellEditDone(event: IGridEditDoneEventArgs) { - // React to edits — e.g., recalculate totals - if (event.column.field === 'quantity' || event.column.field === 'unitPrice') { - this.recalculateRowTotal(event.rowID); - } -} -``` - -### Clipboard Paste for Bulk Edit - -Grids support paste from Excel/spreadsheets by default. Configure clipboard behavior: - -```html - - -``` - -### Row Adding via UI - -```typescript -// Flat Grid / Hierarchical Grid: -this.gridRef().beginAddRowByIndex(0); // at top -this.gridRef().beginAddRowById('ALFKI'); // under a specific row -this.gridRef().beginAddRowByIndex(this.gridRef().data.length); // at end - -// Tree Grid — add as child of a parent: -this.treeGridRef().addRow(newRowData, parentRowID); // add row as child of parentRowID -this.treeGridRef().beginAddRowByIndex(3, true); // add as child of row at index 3 -``` - -Use with Action Strip for visual add/edit actions: - -```html - - - - - - -``` - -## Editing Events Reference - -All grids fire a consistent sequence of events during cell and row editing: - -| Event | Fires When | Cancelable | -|---|---|---| -| `(rowEditEnter)` | Row enters edit mode | Yes | -| `(cellEditEnter)` | Cell enters edit mode (after `rowEditEnter`) | Yes | -| `(cellEdit)` | Cell value is about to be committed | Yes | -| `(cellEditDone)` | Cell value has been committed | No | -| `(cellEditExit)` | Cell exits edit mode | No | -| `(rowEdit)` | Row edit is about to be committed (Done button) | Yes | -| `(rowEditDone)` | Row edit has been committed | No | -| `(rowEditExit)` | Row exits edit mode | No | - -Canceling `(cellEdit)` keeps the cell in edit mode — the value won't commit until Cancel is clicked: - -```typescript -onCellEdit(event: IGridEditEventArgs) { - if (!event.valid) { - event.cancel = true; // prevent committing invalid values - } -} -``` - -## Validation - -### Template-Driven Validation - -Apply Angular validators directly on columns: - -```html - - -``` - -Supported built-in validators: `required`, `min`, `max`, `email`, `minlength`, `maxlength`, `pattern`. - -### Reactive Form Validation - -Use the `formGroupCreated` event to add custom validators when a row enters edit mode: - -```html - - -``` - -```typescript -onFormGroupCreated(event: IGridFormGroupCreatedEventArgs) { - const { formGroup } = event; - formGroup.get('endDate')?.addValidators(this.dateAfterValidator('startDate')); -} -``` - -### Validation Service - -The grid exposes a `validation` service: - -```typescript -// Check if the grid is in a valid state -const isValid = this.gridRef().validation.valid; - -// Get all records with validation errors -const invalid = this.gridRef().validation.getInvalid(); - -// Clear validation state for a specific record (or all if no id) -this.gridRef().validation.clear(recordId); -``` - -## Summaries - -### Built-In Summaries - -```html - -``` - -Default summaries by type: -- **number**: Count, Min, Max, Sum, Average -- **date**: Count, Earliest, Latest -- **string/boolean**: Count - -### Custom Summary Operand - -```typescript -import { IgxNumberSummaryOperand } from 'igniteui-angular/grids/core'; -import { IgxSummaryResult } from 'igniteui-angular/core'; - -class RevenueSummary extends IgxNumberSummaryOperand { - operate(data: number[]): IgxSummaryResult[] { - const result = super.operate(data); - result.push({ - key: 'margin', - label: 'Avg Margin', - summaryResult: data.length ? data.reduce((a, b) => a + b, 0) / data.length * 0.15 : 0 - }); - return result; - } -} - -// Use in component -revenueSummary = RevenueSummary; -``` - -```html - -``` - -### Summaries with Grouping - -When grouping is enabled, summaries appear for each group. Control this with: - -```html - - -``` - -## Key Rules - -1. **Choose the right editing mode** — cell editing (`[editable]` + `(cellEditDone)`) for immediate per-cell saves; row editing (`[rowEditable]="true"` + `(rowEditDone)`) for confirm/cancel per row (**recommended default for CRUD**); batch editing (`[batchEditing]="true"`) for accumulate-then-commit with undo/redo -2. **`[primaryKey]` is required for all editing** — row editing, batch editing, row adding, and row deletion all depend on it (Flat, Tree, Hierarchical, Pivot grids; NOT Grid Lite) -3. **Always set `[autoGenerate]="false"` when editing** — define columns explicitly and mark each with `[editable]="true"` to control exactly what users can change -4. **Batch editing requires `[primaryKey]`** — call `endEdit(true)` before `transactions.undo()`/`redo()`, commit via `transactions.commit(data)` -5. **Cancelable events** — use `event.cancel = true` in `(cellEdit)`, `(rowEdit)`, `(rowEditEnter)`, `(cellEditEnter)` to prevent the action -6. **Validation** — use template-driven validators on columns (`required`, `min`, `max`, `email`, `pattern`) or reactive validators via `(formGroupCreated)` - -Universal rules (viewChild types, directive bundles, signals) are in the [hub](../SKILL.md#universal-rules-every-grid-type). - -## See Also - -- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns -- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization -- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations -- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection -- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.claude/skills/igniteui-angular-grids/references/features.md b/.claude/skills/igniteui-angular-grids/references/features.md deleted file mode 100644 index 3d51203..0000000 --- a/.claude/skills/igniteui-angular-grids/references/features.md +++ /dev/null @@ -1,221 +0,0 @@ -# Grid Features — Grouping, Summaries, Toolbar, Export, Row Drag & More - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For grid setup, column config, sorting, filtering, selection — see [`structure.md`](./structure.md). -> For Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics — see [`types.md`](./types.md). -> For full editing coverage (cell/row/batch) — see [`editing.md`](./editing.md). - -## Contents - -- [Editing](#editing) -- [Grouping (Flat and Tree Grid only)](#grouping-flat-and-tree-grid-only) -- [Summaries](#summaries) -- [Cell Merging](#cell-merging) -- [Toolbar](#toolbar) -- [Export](#export) -- [Virtualization & Performance](#virtualization--performance) -- [Row Drag](#row-drag) -- [Action Strip](#action-strip) -- [Master-Detail (Grid only)](#master-detail-grid-only) -- [Clipboard](#clipboard) -- [Key Rules](#key-rules) - -## Editing - -> **Full editing coverage is in [`editing.md`](./editing.md)**, which includes cell editing, row editing, batch editing with transactions, row adding/deleting, validation, and summaries. Use that reference for any editing task. - -Quick reference: - -| Mode | Key properties | -|---|---| -| **Cell editing** | `[editable]="true"` on columns + `(cellEditDone)` | -| **Row editing** (recommended default) | `[rowEditable]="true"` + `[editable]="true"` on columns + `(rowEditDone)` | -| **Batch editing** | `[batchEditing]="true"` + `[rowEditable]="true"` + `transactions.commit(data)` | - -## Grouping (Flat and Tree Grid only) - -The two grids group differently: - -- **Flat Grid** has built-in GroupBy — `[groupable]="true"` on columns (not on the grid component itself) plus the `groupBy()`/`clearGrouping()` API. -- **Tree Grid** has no `groupBy()` API — it groups via `IgxTreeGridGroupByAreaComponent` (``) paired with the tree-grid grouping pipe that reshapes flat data into a grouped hierarchy. - -```html - - - - - - {{ groupRow.expression.fieldName }}: {{ groupRow.value }} ({{ groupRow.records.length }} items) - - -``` - -Programmatic (Flat Grid): - -```typescript -this.gridRef().groupBy({ fieldName: 'category', dir: SortingDirection.Asc }); -this.gridRef().clearGrouping('category'); -``` - -For advanced programmatic grouping patterns — see [`data-operations.md`](./data-operations.md). - -## Summaries - -> **Full summaries coverage — built-in summaries, custom summary operands, and summaries with grouping — is in [`editing.md`](./editing.md#summaries).** -> -> Quick reference: enable per-column summaries with `[hasSummary]="true"` on an `igx-column`. Default operands: **number** → Count/Min/Max/Sum/Average; **date** → Count/Earliest/Latest; **string/boolean** → Count. - -## Cell Merging - -Merge adjacent cells with equal values: - -```html - - - -``` - -Grid merge modes (`cellMergeMode`): -- `'onSort'` — merge only when the column is sorted **(default)** -- `'always'` — merge regardless of sort state - -Or apply a custom merge strategy at the **grid level** (not column): - -```html - - - -``` - -```typescript -import { DefaultMergeStrategy } from 'igniteui-angular/core'; -// import { DefaultMergeStrategy } from '@infragistics/igniteui-angular/core'; for licensed package - -// Extend DefaultMergeStrategy and override comparer -class PriceRangeMergeStrategy extends DefaultMergeStrategy { - public override comparer(prevRecord: any, record: any, field: string): boolean { - return Math.abs(prevRecord[field] - record[field]) < 10; - } -} - -customMerge = new PriceRangeMergeStrategy(); -``` - -## Toolbar - -> **Full docs in the MCP** — `get_doc` with `grid-toolbar`, `treegrid-toolbar`, or `hierarchicalgrid-toolbar` covers title, built-in actions (hiding, pinning, advanced filtering, exporter), custom content, progress indication, and theming. Prefer those over memory. - -Toolbar components (`IgxGridToolbarComponent` and the action components) import from `igniteui-angular/grids/core` and nest inside the grid element: - -```html - - - Products - - - - - - - - - -``` - -## Export - -> **Full docs in the MCP** — `get_doc` with `grid-export-excel`, `treegrid-export-excel`, `hierarchicalgrid-export-excel`, `pivotGrid-export-excel`, or `exporter-pdf` covers setup, full-data vs. visible exports, multi-column headers, customization events, and known limitations. Prefer those over memory. - -Quick reference — exporter services (`IgxExcelExporterService`, `IgxCsvExporterService`, and their `*ExporterOptions`) import from `igniteui-angular/grids/core`; `inject()` the service and call `export(grid, options)` (respects filtering/sorting) or `exportData(data, options)` (raw data). - -## Virtualization & Performance - -Grids use virtualization by default for both rows and columns — no setup needed. For remote data/paging: - -```html - - -``` - -For full remote virtualization patterns — see [`paging-remote.md`](./paging-remote.md). - -## Row Drag - -```html - - - - arrow_right_alt - - -``` - -Handle drops via `igxDrop` on the target: - -```typescript -import { IDropDroppedEventArgs } from 'igniteui-angular/directives'; - -onDropAllowed(args: IDropDroppedEventArgs) { - this.targetGrid.addRow(args.dragData.data); // row data - this.sourceGrid.deleteRow(args.dragData.key); // primary key -} -``` - -## Action Strip - -Overlay actions on a row: - -```html - - - - - - - -``` - -## Master-Detail (Grid only) - -Expand rows to show arbitrary detail content: - -```html - - - - - -
-

Order Items for {{ dataItem.customer }}

- - -
-
-
-``` - -## Clipboard - -Grids support copy to clipboard by default. Configure via: - -```html - - -``` - -## Key Rules - -1. **Cancelable events** — use `event.cancel = true` in `(rowEdit)`, `(cellEdit)`, `(sorting)`, `(filtering)` to prevent the action -2. **The `groupBy()` API is Flat Grid only** — Tree Grid groups via `igx-tree-grid-group-by-area` + grouping pipe; Hierarchical Grid uses row islands, Pivot Grid uses dimensions - -Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). - -## See Also - -- [`structure.md`](./structure.md) — Column config, sorting UI, filtering UI, selection -- [`types.md`](./types.md) — Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics -- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping -- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization -- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries -- [`state.md`](./state.md) — State persistence -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.claude/skills/igniteui-angular-grids/references/grid-migration.md b/.claude/skills/igniteui-angular-grids/references/grid-migration.md deleted file mode 100644 index ae77b8d..0000000 --- a/.claude/skills/igniteui-angular-grids/references/grid-migration.md +++ /dev/null @@ -1,479 +0,0 @@ -# Ignite UI for Angular - Grid Lite → Premium Data Grid Migration - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** - -## Purpose - -This skill automates the migration from the **open-source Grid Lite** (`igx-grid-lite`, MIT licensed) to the **Premium Data Grid** (`igx-grid`, commercially licensed). Use it when a project outgrows Grid Lite's read-only capabilities and needs enterprise features such as editing, selection, paging, grouping, summaries, export, or state persistence. - -## Required Workflow - -Grid APIs change between releases — do not write migration code from memory. Before producing migration code: - -1. **Identify the current Grid Lite usage** - read the user's existing component files to understand their column configuration, templates, data binding, and any `dataPipelineConfiguration` usage. -2. **Consult the grids skill** - read the relevant reference files from [`igniteui-angular-grids`](../SKILL.md) for the target features the user needs after migration. -3. **Use the MCP server when in doubt** - call `get_doc` or `search_docs` from the `igniteui-cli` MCP server (if available) for Angular to verify current API details. -4. **Only then produce output** - base all code on verified references, not memory. - ---- - -## When to Migrate - -Migrate from Grid Lite to the Premium Grid when the user needs **any** of these features: - -| Required Feature | Grid Lite | Premium Grid | -|---|---|---| -| Cell / Row / Batch editing | No | Yes | -| Row adding / deleting | No | Yes | -| Row / Cell / Column selection | No | Yes | -| Paging (client or remote) | No | Yes | -| GroupBy | No | Yes | -| Summaries (built-in & custom) | No | Yes | -| Column pinning | No | Yes | -| Column moving | No | Yes | -| Master-Detail rows | No | Yes (exclusive to flat grid) | -| Export (Excel / CSV) | No | Yes | -| Toolbar | No | Yes | -| State persistence | No | Yes | -| Advanced filtering | No | Yes | -| Action strip | No | Yes | -| Row drag | No | Yes | -| Clipboard support | No | Yes | -| Cell merging | No | Yes | - -> **IMPORTANT:** The upgrade path from Grid Lite is **always** to `igx-grid` (`IgxGridComponent`). Never recommend a different component type as a substitute. - ---- - -## Migration Checklist - -### Step 1 - Install / Verify the Premium Package - -Grid Lite uses the separate `igniteui-grid-lite` npm package. The Premium Grid is part of the main `igniteui-angular` (or `@infragistics/igniteui-angular`) package. - -> **Important:** Check `package.json` to determine which package variant is installed. If only `igniteui-grid-lite` is present, the user needs to install the full package. - -```bash -# Open-source package -npm install igniteui-angular - -# OR licensed package (requires private registry) -npm install @infragistics/igniteui-angular -``` - -The `igniteui-grid-lite` package can be removed after migration if no other Grid Lite instances remain: - -```bash -npm uninstall igniteui-grid-lite -``` - -### Step 2 - Update Imports - -**Before (Grid Lite):** - -```typescript -import { - IgxGridLiteComponent, - IgxGridLiteColumnComponent, - IgxGridLiteCellTemplateDirective, - IgxGridLiteHeaderTemplateDirective, -} from 'igniteui-angular/grids/lite'; -``` - -**After (Premium Grid):** - -```typescript -// Open-source -import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; - -// Licensed -// import { IgxGridComponent, IGX_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/grid'; -``` - -> **Key change:** The Premium Grid provides `IGX_GRID_DIRECTIVES` - a single convenience import that includes all grid directives (columns, templates, toolbar, paginator bindings, etc.). You no longer need to import each directive individually. - -### Step 3 - Update the Component Decorator - -**Before:** - -```typescript -@Component({ - selector: 'app-data-view', - imports: [ - IgxGridLiteComponent, - IgxGridLiteColumnComponent, - IgxGridLiteCellTemplateDirective, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA], // Optional: only needed when using the underlying web component directly - templateUrl: './data-view.component.html', - changeDetection: ChangeDetectionStrategy.OnPush, -}) -``` - -**After:** - -```typescript -@Component({ - selector: 'app-data-view', - imports: [IGX_GRID_DIRECTIVES], - // No CUSTOM_ELEMENTS_SCHEMA needed - Premium Grid is a native Angular component - templateUrl: './data-view.component.html', - changeDetection: ChangeDetectionStrategy.OnPush, -}) -``` - -**Changes:** -- Replace individual Grid Lite imports with `IGX_GRID_DIRECTIVES` -- If you previously added `CUSTOM_ELEMENTS_SCHEMA` for Grid Lite (e.g. when using the underlying web component directly), remove it after migrating — Premium Grid is a native Angular component -- Remove the `schemas` array entirely if it only contained `CUSTOM_ELEMENTS_SCHEMA` - -### Step 4 - Update the Component Class - -**Before:** - -```typescript -export class DataViewComponent { - gridRef = viewChild>('grid'); - data: Product[] = []; -} -``` - -**After:** - -```typescript -export class DataViewComponent { - gridRef = viewChild.required('grid'); - protected data = signal([]); -} -``` - -**Changes:** -- Replace `IgxGridLiteComponent` with `IgxGridComponent` -- Add `[primaryKey]` support - strongly recommended for editing, selection, and any row-targeted API (`getRowByKey`, transactions, row pinning, etc.). Without it the grid falls back to row indexes/object identity, which breaks across virtualization and remote data. -- Use `signal()` for reactive data (recommended but not required) - -### Step 5 - Update the Template - -#### Selector & Grid Element - -| Grid Lite | Premium Grid | -|---|---| -| `` | `` (needs an explicit `height` - or a parent with a fixed height - for row virtualization) | -| `` | `` | -| No `[primaryKey]` | `[primaryKey]="'id'"` (strongly recommended for editing/selection/row APIs) | -| `[sortingOptions]="{ mode: 'multiple' }"` | `[sortingOptions]="{ mode: 'multiple' }"` or per-column `[sortable]="true"` | - -**Before:** - -```html - - - - - - -``` - -**After:** - -```html - - - - - - - -``` - -#### Column Attribute Differences - -| Grid Lite attribute | Premium Grid equivalent | Notes | -|---|---|---| -| `sortable` (boolean HTML attr) | `[sortable]="true"` or bare `sortable` | Both styles work on `igx-column`; bracketed binding is preferred for clarity | -| `filterable` (boolean HTML attr) | `[filterable]="true"` or bare `filterable` | Same pattern | -| `resizable` (boolean HTML attr) | `[resizable]="true"` or bare `resizable` | Same pattern | -| `hidden` (boolean HTML attr) | `[hidden]="true"` | Use binding - bare `hidden` collides with the native HTML attribute | -| `field` | `field` | Identical | -| `header` | `header` | Identical | -| `dataType` | `dataType` | Premium supports additional types: `dateTime`, `time`, `currency`, `percent`, `image` | -| `width` | `width` | Identical (CSS value, e.g., `'250px'`) | - -#### Cell Template Migration - -**Before (Grid Lite):** - -```html - - - {{ value }} - - -``` - -**After (Premium Grid):** - -```html - - - {{ cell.value }} - - -``` - -**Key differences:** -- Template directive: `igxGridLiteCell` → `igxCell` -- Context object: Grid Lite exposes `let-value` directly; Premium exposes `let-cell="cell"` where you access `cell.value`, `cell.row`, `cell.column` -- Premium also supports `igxCellEditor` for edit templates (not available in Grid Lite) - -#### Header Template Migration - -**Before:** - -```html - - {{ column.header }} - -``` - -**After:** - -```html - - {{ column.header }} - -``` - -**Change:** `igxGridLiteHeader` → `igxHeader` - -### Step 6 - Migrate Remote Data Operations - -Grid Lite uses `dataPipelineConfiguration` (async callbacks). The Premium Grid uses **noop data operation strategies + events**. - -**Before (Grid Lite - `dataPipelineConfiguration`):** - -```typescript -dataPipeline: IgxGridLiteDataPipelineConfiguration = { - sort: async (params) => { - return await this.dataService.sortRemote(params.grid.sortingExpressions); - }, - filter: async (params) => { - return await this.dataService.filterRemote(params.grid.filteringExpressions); - }, -}; -``` - -```html - - -``` - -**After (Premium Grid - noop strategies + events):** - -```typescript -import { - NoopSortingStrategy, - NoopFilteringStrategy, -} from 'igniteui-angular/core'; -import { ISortingEventArgs } from 'igniteui-angular/grids/core'; - -export class DataViewComponent { - gridRef = viewChild.required('grid'); - noopSort = NoopSortingStrategy.instance(); - noopFilter = NoopFilteringStrategy.instance(); - - onSortingDone(event: ISortingEventArgs) { - this.dataService.sortRemote(this.gridRef().sortingExpressions).subscribe(data => this.data.set(data)); - } - - onFilteringDone() { - this.dataService.filterRemote(this.gridRef().filteringExpressionsTree).subscribe(data => this.data.set(data)); - } -} -``` - -```html - - -``` - -### Step 7 - Migrate Sort/Filter Events - -| Grid Lite Event | Premium Grid Event | Notes | -|---|---|---| -| `(sorting)` | `(sorting)` | Both cancelable | -| `(sorted)` | `(sortingDone)` | Name changed | -| `(filtering)` | `(filtering)` | Both cancelable | -| `(filtered)` | `(filteringDone)` | Name changed. For **remote** filtering, bind `(filteringExpressionsTreeChange)` instead — see Step 6 and [`paging-remote.md`](./paging-remote.md) | - -### Step 8 - Migrate Programmatic Sort/Filter API - -**Grid Lite API:** - -```typescript -this.gridRef().sort({ key: 'name', direction: 'ascending' }); -this.gridRef().filter({ key: 'age', condition: 'greaterThan', searchTerm: 21 }); -this.gridRef().clearSort(); -this.gridRef().clearFilter(); -``` - -**Premium Grid API:** - -```typescript -import { SortingDirection, IgxNumberFilteringOperand } from 'igniteui-angular/core'; - -// Sorting -this.gridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); -this.gridRef().clearSort('name'); - -// Filtering -this.gridRef().filter('age', 21, IgxNumberFilteringOperand.instance().condition('greaterThan')); -this.gridRef().clearFilter('age'); -``` - -**Key differences:** -- Sort expression: `key` → `fieldName`, `direction: 'ascending'` → `dir: SortingDirection.Asc` -- Filter: object-based → positional arguments with typed operand instances - -### Step 9 - Remove Grid Lite Artifacts - -After migration, clean up: - -1. Remove `CUSTOM_ELEMENTS_SCHEMA` from any component that only used it for Grid Lite -2. Remove `import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'` if no longer needed -3. Remove `igniteui-grid-lite` from `package.json` if no Grid Lite instances remain -4. Remove any `IgxGridLiteDataPipelineConfiguration` types and replace with noop strategies - ---- - -## Adding Enterprise Features Post-Migration - -Once on the Premium Grid, enable the features that motivated the migration: - -### Editing - -```html - - - - -``` - -### Selection - -```html - - - -``` - -### Paging - -```html - - - - -``` - -### GroupBy - -```html - - - -``` - -### Export - -```typescript -import { IgxExcelExporterService, IgxExcelExporterOptions } from 'igniteui-angular/grids/core'; - -export class DataViewComponent { - private excelExporter = inject(IgxExcelExporterService); - - exportToExcel() { - this.excelExporter.exportData(this.data(), new IgxExcelExporterOptions('export')); - } -} -``` - -### Toolbar - -```html - - - Products - - - - - - - - -``` - -### Summaries - -```html - -``` - -### Batch Editing - -```html - - - -``` - -```typescript -// Commit or discard all pending changes -this.gridRef().transactions.commit(this.data()); -this.gridRef().transactions.clear(); -``` - ---- - -## Quick Reference - Full Migration Map - -| Aspect | Grid Lite | Premium Grid | -|---|---|---| -| **Package** | `igniteui-grid-lite` (separate) | `igniteui-angular` or `@infragistics/igniteui-angular` | -| **Entry point** | `igniteui-angular/grids/lite` | `igniteui-angular/grids/grid` | -| **Component** | `IgxGridLiteComponent` | `IgxGridComponent` | -| **Selector** | `` | `` | -| **Column selector** | `` | `` | -| **Imports style** | Individual (`IgxGridLiteComponent`, `IgxGridLiteColumnComponent`, ...) | Bundle (`IGX_GRID_DIRECTIVES`) | -| **Schema** | `CUSTOM_ELEMENTS_SCHEMA` (optional; only if using the underlying web component directly) | Not needed | -| **Primary key** | Not supported | `[primaryKey]="'id'"` (required for editing/selection) | -| **Cell template** | `igxGridLiteCell` (exposes `let-value`) | `igxCell` (exposes `let-cell="cell"`, access `cell.value`) | -| **Header template** | `igxGridLiteHeader` | `igxHeader` | -| **Editor template** | Not available | `igxCellEditor` | -| **Column attributes** | Boolean HTML attrs (`sortable`, `filterable`) | Angular inputs (`[sortable]="true"`, `[filterable]="true"`) | -| **Remote data** | `dataPipelineConfiguration` (async callbacks) | Noop strategies + events | -| **Sort event (done)** | `(sorted)` | `(sortingDone)` | -| **Filter event (done)** | `(filtered)` | `(filteringDone)` | -| **Sort expression** | `{ key, direction }` | `{ fieldName, dir: SortingDirection }` | -| **License** | MIT (free) | Commercial (trial with watermark) | - ---- - -## Related Skills - -- **[`igniteui-angular-grids`](../SKILL.md)** - Full grid reference for all grid types (use after migration for feature details) -- **[`igniteui-angular-theming`](../../igniteui-angular-theming/SKILL.md)** - Theming and styling (works with both Grid Lite and Premium Grid) -- **[`igniteui-angular-components`](../../igniteui-angular-components/SKILL.md)** - Non-grid UI components diff --git a/.claude/skills/igniteui-angular-grids/references/paging-remote.md b/.claude/skills/igniteui-angular-grids/references/paging-remote.md deleted file mode 100644 index 0ddd40d..0000000 --- a/.claude/skills/igniteui-angular-grids/references/paging-remote.md +++ /dev/null @@ -1,391 +0,0 @@ -# Grid Paging, Remote Data & Virtualization - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For grid import patterns and `viewChild` access — see [`data-operations.md`](./data-operations.md). -> For editing and validation — see [`editing.md`](./editing.md). -> For state persistence — see [`state.md`](./state.md). - -## Contents - -- [Paging](#paging) -- [Remote Data Operations](#remote-data-operations) -- [Virtualization](#virtualization) -- [Multi-Grid Coordination](#multi-grid-coordination) -- [Key Rules](#key-rules) - -## Paging - -### Using the Paginator Component - -```html - - - - - - - -``` - -### Programmatic Paging - -```typescript -// Navigate pages -this.gridRef().paginator.page = 3; -this.gridRef().paginator.nextPage(); -this.gridRef().paginator.previousPage(); -this.gridRef().paginator.paginate(0); // go to first page - -// Change page size -this.gridRef().paginator.perPage = 25; -``` - -### Paging Events - -| Event | Description | -|---|---| -| `(paging)` | Fires before page changes (cancelable) | -| `(pagingDone)` | Fires after page has changed | -| `(perPageChange)` | Fires when page size changes | - -### Remote Paging - -```typescript -import { GridPagingMode } from 'igniteui-angular/grids/core'; -import { IPageEventArgs } from 'igniteui-angular/paginator'; - -export class RemotePagingComponent { - data = signal([]); - totalCount = signal(0); - perPage = signal(15); - pagingMode = GridPagingMode.Remote; - - gridRef = viewChild.required('grid'); - private dataService = inject(ProductService); - - constructor() { - this.loadPage(0); - } - - onPagingDone(event: IPageEventArgs) { - this.loadPage(event.current); - } - - onPerPageChange(perPage: number) { - this.perPage.set(perPage); - this.loadPage(0); - } - - private loadPage(pageIndex: number) { - const skip = pageIndex * this.perPage(); - this.dataService.getProducts({ skip, take: this.perPage() }).subscribe(result => { - this.data.set(result.data); - this.totalCount.set(result.totalCount); - }); - } -} -``` - -```html - - - - - - - -``` - -## Remote Data Operations - -### The Problem - -Grids perform sorting, filtering, and paging **client-side** by default. For large datasets, you must intercept these operations and delegate them to the server. - -### Complete Remote Data Pattern - -This is the canonical pattern for server-side sorting, filtering, and virtualization. **You must disable the built-in client-side sorting/filtering** by applying `NoopSortingStrategy` and `NoopFilteringStrategy` on the grid: - -```typescript -import { Component, ChangeDetectionStrategy, signal, viewChild, inject, DestroyRef } from '@angular/core'; -import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; -import { - IFilteringExpressionsTree, - ISortingExpression, - NoopSortingStrategy, - NoopFilteringStrategy -} from 'igniteui-angular/core'; -import { IForOfState } from 'igniteui-angular/directives'; -import { debounceTime, Subject } from 'rxjs'; - -@Component({ - selector: 'app-remote-grid', - imports: [IGX_GRID_DIRECTIVES], - templateUrl: './remote-grid.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class RemoteGridComponent { - data = signal([]); - totalCount = signal(0); - isLoading = signal(false); - - // Noop strategies — disable built-in client-side sort/filter - noopSort = NoopSortingStrategy.instance(); - noopFilter = NoopFilteringStrategy.instance(); - - gridRef = viewChild.required('grid'); - private dataService = inject(OrderService); - private destroyRef = inject(DestroyRef); - - private currentSort: ISortingExpression[] | undefined; - private currentFilter: IFilteringExpressionsTree | undefined; - - // Debounce rapid dataPreLoad events during fast scrolling - private dataPreLoad$ = new Subject(); - - constructor() { - this.dataPreLoad$.pipe( - debounceTime(150), - takeUntilDestroyed(this.destroyRef) - ).subscribe(event => { - // NOTE: The first chunkSize will always be 0 — use a reasonable default - const chunkSize = event.chunkSize || 15; - this.loadData(event.startIndex, chunkSize); - }); - - this.loadData(0, 15); - } - - onDataPreLoad(event: IForOfState) { - this.dataPreLoad$.next(event); - } - - onSortingDone() { - this.currentSort = this.gridRef().sortingExpressions; - this.loadData(0, 15); - } - - onFilteringExpressionsTreeChange() { - this.currentFilter = this.gridRef().filteringExpressionsTree; - this.loadData(0, 15); - } - - private loadData(skip: number, take: number) { - this.isLoading.set(true); - this.dataService.getOrders({ - skip, - take, - sort: this.currentSort, - filter: this.currentFilter - }).subscribe(result => { - this.data.set(result.data); - this.totalCount.set(result.total); - this.isLoading.set(false); - }); - } -} -``` - -```html - - - - - - - - -``` - -> **IMPORTANT**: `[sortStrategy]="noopSort"` and `[filterStrategy]="noopFilter"` prevent the grid from applying sort/filter operations client-side. The grid still fires events (allowing you to send them to the server), but the local data remains untouched until you replace it. - -### Excel-Style Filtering with Remote Unique Values - -When using Excel-style filtering with remote data, provide a strategy to fetch unique column values from the server: - -```typescript -// Tell the grid how to load unique values for Excel-style filter lists -uniqueValuesStrategy = (column: any, tree: any, done: (values: any[]) => void) => { - this.dataService.getUniqueValues(column.field).subscribe(values => done(values)); -}; -``` - -```html - - -``` - -### Remote Data Service Example - -```typescript -import { Injectable, inject } from '@angular/core'; -import { HttpClient, HttpParams } from '@angular/common/http'; -import { Observable } from 'rxjs'; - -export interface RemoteDataResult { - data: T[]; - total: number; -} - -@Injectable({ providedIn: 'root' }) -export class OrderService { - private http = inject(HttpClient); - private apiUrl = '/api/orders'; - - getOrders(params: { - skip: number; - take: number; - sort?: any[]; - filter?: any; - }): Observable> { - let httpParams = new HttpParams() - .set('skip', params.skip) - .set('take', params.take); - - if (params.sort?.length) { - httpParams = httpParams.set('sort', JSON.stringify(params.sort)); - } - if (params.filter) { - httpParams = httpParams.set('filter', JSON.stringify(params.filter)); - } - - return this.http.get>(this.apiUrl, { params: httpParams }); - } -} -``` - -### Key Points for Remote Data - -1. **Set `[totalItemCount]`** — the grid needs the total record count for correct virtual scrollbar sizing -2. **Use `[isLoading]`** — shows a loading indicator while data is being fetched -3. **Apply `NoopSortingStrategy` and `NoopFilteringStrategy`** — prevents the grid from performing client-side sorting/filtering, so the server results are displayed as-is -4. **Listen to `(dataPreLoad)`** — fires when the user scrolls and the grid needs more rows; provides `startIndex` and `chunkSize` (first `chunkSize` will be 0 — use a fallback) -5. **Listen to `(sortingDone)` and `(filteringExpressionsTreeChange)`** — reset to the beginning and re-fetch with new parameters; `filteringExpressionsTreeChange` is the grid-level output that reflects the complete filter state (unlike the column-level `filteringDone`) -6. **Track current sort/filter state** — store them so every `loadData` call includes the active criteria -7. **Debounce `(dataPreLoad)`** — use `debounceTime` to avoid flooding the server during fast scrolling -8. **Use `[uniqueColumnValuesStrategy]`** — when using Excel-style filtering, supply a callback to load unique column values from the server - -## Virtualization - -### How It Works - -All Ignite UI grids use **row and column virtualization** by default. Only the visible rows and columns are rendered in the DOM, enabling smooth scrolling through millions of records. - -### Requirements - -- Set a fixed `height` on the grid (e.g., `height="600px"`) -- No additional configuration is needed — virtualization is automatic -- Do **not** wrap the grid in a virtual scroll container - -### Remote Virtualization - -For datasets too large to load entirely, combine virtualization with remote data: - -```html - - -``` - -The `(dataPreLoad)` event fires with an `IForOfState` containing: -- `startIndex` — the first visible row index -- `chunkSize` — number of rows the grid needs - -## Multi-Grid Coordination - -### Master-Detail Filtering - -When using a master grid to drive a detail grid: - -```typescript -export class MasterDetailComponent { - masterGrid = viewChild.required('masterGrid'); - orders = signal([]); - selectedCustomer = signal(null); - customerOrders = signal([]); - - onRowSelectionChanging(event: IRowSelectionEventArgs) { - const selectedId = event.newSelection[0]; - const customer = this.customers().find(c => c.id === selectedId); - this.selectedCustomer.set(customer ?? null); - - if (customer) { - this.dataService.getOrdersByCustomer(customer.id).subscribe(orders => { - this.customerOrders.set(orders); - }); - } - } -} -``` - -```html - - - - - - - - -``` - -## Key Rules - -1. **Remote data requires `[totalItemCount]`** — without it, the virtual scrollbar won't size correctly -2. **Remote data requires noop strategies** — apply `NoopSortingStrategy` and `NoopFilteringStrategy` to disable client-side operations when the server handles them -3. **Track sort/filter state for remote operations** — store current expressions and include them in every server request -4. **Debounce rapid virtual scroll** — use `debounceTime` on `(dataPreLoad)` to avoid flooding the server - -Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). - -## See Also - -- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns -- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries -- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations -- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection -- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.claude/skills/igniteui-angular-grids/references/sizing.md b/.claude/skills/igniteui-angular-grids/references/sizing.md deleted file mode 100644 index f693de6..0000000 --- a/.claude/skills/igniteui-angular-grids/references/sizing.md +++ /dev/null @@ -1,215 +0,0 @@ -# Grid Sizing — Width, Height, Column Sizing & Spacing - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For grid setup, column config, sorting, filtering, selection — see [`structure.md`](./structure.md). -> For virtualization and performance — see [`features.md`](./features.md). - -## Contents - -- [Overview](#overview) -- [Grid Width](#grid-width) -- [Grid Height](#grid-height) -- [Column Sizing](#column-sizing) -- [Grid Cell Spacing Control](#grid-cell-spacing-control) -- [Key Rules](#key-rules) - -## Overview - -The grid uses **border-box sizing** — border and padding are included in the width/height calculations. Do **not** override `box-sizing` on the grid element; doing so will break size calculations. - -The grid supports both component inputs (`width`/`height`) and regular CSS/layout sizing from the host or wrapping container (including flex/grid layouts). Use the inputs when you need explicit fixed or percentage grid sizing. - -## Grid Width - -> **Docs:** [Grid Sizing — Width](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#width) - -**Default:** `100%` — the grid fills available width of the parent/window. - -### `null` Width - -```html - -``` - -- All columns are rendered in the DOM — **horizontal column virtualization is disabled**. -- **Warning:** rendering many columns without virtualization can significantly impact performance. - -### Pixel Width - -```html - -``` - -- Grid is fixed at the specified size and does not react to browser/DOM resizing. -- A horizontal scrollbar appears inside the grid when the combined column widths exceed the grid `width`. -- If a parent element is narrower than the grid and has `overflow: auto | scroll`, the parent scrolls — the grid itself remains at its specified width. - -### Percentage Width - -```html - -``` - -- Grid sizes relative to its parent element (or the browser window if there is no parent with explicit width). -- Resizes responsively when the browser or parent is resized. -- Setting `width` above `100%` (e.g. `150%`) makes the grid wider than the parent; the parent renders a scrollbar only if it has `overflow: auto | scroll`. - -## Grid Height - -> **Docs:** [Grid Sizing — Height](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#height) - -**Default:** `100%` — see the Percentage Height section for how this behaves depending on the DOM structure. - -### `null` Height - -```html - -``` - -- All rows are rendered — **row virtualization is disabled**. -- Grid height expands to show every row with no vertical scrollbar inside the grid. -- If rows overflow the viewport, the browser renders a native scrollbar. -- A parent element with `overflow: auto | scroll` will scroll while the grid itself remains unshrunk. -- **Warning:** large data sets with `null` height can significantly impact browser performance due to no virtualization. - -### Pixel Height - -```html - -``` - -- Grid is fixed at the specified height. -- A vertical scrollbar appears when rows exceed the visible area. -- If the grid is taller than a parent with `overflow: auto | scroll`, the parent scrolls. - -### Percentage Height - -```html - -``` - -- Grid sizes relative to the **parent element's height**. -- **Parent has explicit height** (px or %): grid sizes to that percentage of the parent's height. -- **Parent has NO explicit height**: the browser cannot resolve a percentage, so the grid falls back to rendering a maximum of **10 rows** with a vertical scrollbar if there are more rows, or fits all rows if there are fewer. -- To fill the entire browser window: set both `body` and the parent container `height: 100%`, then use `height="100%"` on the grid. - -```css -/* Full-window grid */ -html, body, .grid-container { - height: 100%; -} -``` - -```html -
- -
-``` - -## Column Sizing - -> **Docs:** [Grid Sizing — Column Sizing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#column-sizing) - -### Default (no `width` set — auto-sized) - -- Auto-sized columns share the available grid width equally. -- Minimum column width is **`136px`**; if the equal share is less than `136px`, all auto-sized columns default to `136px` and the grid renders a horizontal scrollbar. -- Feature columns (row selector checkbox, etc.) consume space that reduces what is available for auto-sized columns. - -```html - - - -``` - -### Pixel Width - -```html - -``` - -- Column is fixed at the specified width regardless of grid size. -- If the combined column widths are less than the grid width, empty space appears on the right — this is expected. -- If the combined column widths exceed the grid width, a horizontal scrollbar is rendered. - -### `auto` Width - -```html - -``` - -- Column sizes to fit the longest visible cell value. -- May leave empty space if most values are short but one is very long. - -### Percentage Width - -```html - -``` - -- Column width is calculated as a percentage of the grid width. -- Responsive — resizes when the grid resizes. -- Combined percentages less than `100%` leave an empty area; greater than `100%` triggers a horizontal scrollbar. -- If the grid `width` is `null`, percentage-width columns fall back to `136px` each. - -## Grid Cell Spacing Control - -> **Docs:** [Grid Sizing — Cell Spacing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/sizing#grid-cell-spacing-control) - -The grid automatically adapts internal cell spacing based on the `size` (display density) setting. Fine-grained control is available through CSS custom properties. - -### Global Spacing (all grids in the app) - -```css -igx-grid { - --ig-spacing: 0.8; /* multiplier — reduces all grid spacing by 20% */ -} -``` - -### Instance-Specific Spacing - -```css -.my-compact-grid { - --ig-spacing: 0.6; -} -``` - -### Directional Spacing (horizontal vs vertical independently) - -```css -.my-grid { - --ig-spacing-inline: 0.5; /* horizontal padding */ - --ig-spacing-block: 1.0; /* vertical padding */ -} -``` - -### Density-Level Spacing - -```css -.my-grid { - --ig-spacing-small: 0.5; /* compact density */ - --ig-spacing-medium: 1.0; /* medium density */ - --ig-spacing-large: 1.3; /* comfortable density */ -} -``` - -### Header vs Body Cell Spacing - -```css -.my-grid igx-grid-header { - --ig-spacing: 0.7; -} - -.my-grid igx-grid-cell { - --ig-spacing: 0.9; -} -``` - -## Key Rules - -- Grid sizing can come from CSS/layout context (host/container sizing) or from `[width]`/`[height]` inputs. -- **Never** override `box-sizing` on the grid — it uses border-box and relies on this. -- Use `null` for height only when the data set is small; row virtualization is disabled and large data will hurt performance. -- When using percentage height, the parent **must** have an explicit height for the percentage to resolve correctly. Without it, the grid falls back to 10 visible rows. -- A mix of fixed-width and auto-sized columns is valid — auto-sized columns fill the remaining space after fixed-width columns are laid out. -- **Omit `width` on generated columns.** No `width` = columns equally share available grid width. Pixel widths leave empty space when their sum is less than the grid width. Only set `width` when the user explicitly asks for it. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. diff --git a/.claude/skills/igniteui-angular-grids/references/state.md b/.claude/skills/igniteui-angular-grids/references/state.md deleted file mode 100644 index 0b68aff..0000000 --- a/.claude/skills/igniteui-angular-grids/references/state.md +++ /dev/null @@ -1,303 +0,0 @@ -# Grid State Persistence & Grid-Type-Specific Operations - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For grid import patterns and `viewChild` access — see [`data-operations.md`](./data-operations.md). -> For Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite setup — see [`types.md`](./types.md). -> For paging and remote data — see [`paging-remote.md`](./paging-remote.md). - -## Contents - -- [State Persistence](#state-persistence) -- [Tree Grid Data Operations](#tree-grid-data-operations) -- [Hierarchical Grid Data Operations](#hierarchical-grid-data-operations) -- [Pivot Grid Data Operations](#pivot-grid-data-operations) -- [Grid Lite Data Operations](#grid-lite-data-operations) -- [Key Rules](#key-rules) - -## State Persistence - -### Saving and Restoring Grid State - -Use `IgxGridStateDirective` to persist sorting, filtering, grouping, paging, selection, and column state: - -```html - - - -``` - -```typescript -import { IgxGridStateDirective } from 'igniteui-angular/grids/core'; - -export class StatefulGridComponent { - gridState = viewChild.required(IgxGridStateDirective); - - saveState() { - const state = this.gridState().getState(); - localStorage.setItem('gridState', state); - } - - restoreState() { - const state = localStorage.getItem('gridState'); - if (state) { - this.gridState().setState(state); - } - } -} -``` - -### Selective State Features - -Control which features are persisted: - -```html - - -``` - -```typescript -stateOptions = { - sorting: true, - filtering: true, - groupBy: true, - paging: true, - columns: true, - cellSelection: false, // skip selection state - rowSelection: false, - columnSelection: false, - advancedFiltering: true, - rowPinning: true, - expansion: true -}; -``` - -### Restoring Custom Strategies - -`IgxGridState` does **not** persist functions — this includes sorting strategies, filtering strategies, column formatters, summaries, `cellClasses`, and `cellStyles`. Use the `stateParsed` event to reapply these after restoring state: - -```typescript -restoreState() { - const stateJson = localStorage.getItem('gridState'); - if (!stateJson) return; - - // Subscribe to stateParsed to reapply custom strategies before state is applied - this.gridState().stateParsed.pipe(take(1)).subscribe(parsedState => { - parsedState.sorting?.forEach(expr => expr.strategy = NoopSortingStrategy.instance()); - }); - - this.gridState().setState(stateJson); -} -``` - -### Restoring Column Templates - -Column templates are also not serialized. Use the `columnInit` event to reassign them: - -```typescript -activeTemplate = viewChild.required>('activeTemplate'); - -onColumnInit(column: IgxColumnComponent) { - if (column.field === 'IsActive') { - column.bodyTemplate = this.activeTemplate(); - } -} -``` - -```html - - - - - -``` - -## Tree Grid Data Operations - -### Recursive Filtering Behavior - -Tree Grid filtering is **inclusive** — when a child matches, all its ancestors are kept visible (marked as `isFilteredOutParent`) and auto-expanded. This is the default `TreeGridFilteringStrategy`. - -```html - - - - -``` - -When you filter for `title = 'Developer'`, all ancestor rows are shown even though they don't match, and they're auto-expanded so you can see the matching children in context. - -### Per-Level Sorting - -Tree Grid sorting is applied **within each parent level** — children are sorted among siblings, not globally flattened: - -```typescript -// This sorts employees within their respective manager, not globally -this.treeGridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); -``` - -### Tree Grid Batch Editing - -Tree Grid uses `HierarchicalTransactionService` — each transaction carries a `path` array tracing the parent hierarchy, enabling proper undo/redo of nested changes: - -```html - - - -``` - -```typescript -// Add a row as child of a specific parent -this.treeGridRef().addRow({ id: 100, name: 'New Employee', managerId: 2 }, 2); - -// Cascade delete — deleting a parent removes all descendants (default behavior) -this.treeGridRef().deleteRow(2); // deletes row 2 and all its children -``` - -## Hierarchical Grid Data Operations - -### Independent Grid Levels - -Each level of a hierarchical grid has its **own independent** sorting, filtering, and paging state. Configure features on the `` blueprint: - -```html - - - - - - - - - - - - -``` - -### Accessing Child Grid Instances - -To perform programmatic operations on child grids, use the `(gridCreated)` event: - -```typescript -onChildGridCreated(event: IGridCreatedEventArgs) { - const childGrid = event.grid; - // Example: apply a default sort to all child grids - childGrid.sort({ fieldName: 'orderId', dir: SortingDirection.Desc, ignoreCase: false }); -} -``` - -```html - - - -``` - -### Batch Editing Propagation - -Setting `[batchEditing]="true"` on the root hierarchical grid automatically propagates to all child grids: - -```html - - - - - - -``` - -> **NOTE**: Each child grid instance has its **own** `TransactionService`. Commits must be done per grid instance. - -## Pivot Grid Data Operations - -> **IMPORTANT**: The Pivot Grid does NOT use standard sorting, filtering, editing, or paging APIs. All data operations are controlled through `pivotConfiguration`. - -### Dimension-Based Filtering - -```typescript -import { FilteringExpressionsTree, FilteringLogic, IgxStringFilteringOperand } from 'igniteui-angular/core'; - -// Create a filter for a dimension -const regionFilter = new FilteringExpressionsTree(FilteringLogic.Or); -regionFilter.filteringOperands = [ - { - fieldName: 'Region', - condition: IgxStringFilteringOperand.instance().condition('equals'), - searchVal: 'North America' - }, - { - fieldName: 'Region', - condition: IgxStringFilteringOperand.instance().condition('equals'), - searchVal: 'Europe' - } -]; - -// Apply the filter to a dimension and notify the grid -this.pivotConfig.filters[0].filter = regionFilter; -this.pivotGridRef().notifyDimensionChange(true); -``` - -### Dimension-Based Sorting - -```typescript -// Sort a row dimension via the public API -this.pivotGridRef().sortDimension(this.pivotConfig.rows[0], SortingDirection.Desc); -``` - -### Key Pivot Grid Limitations - -- No cell/row editing, batch editing, or row adding -- No paging -- No column pinning, moving, or hiding (columns are auto-generated) -- No row dragging -- No standard filtering (`allowFiltering` is forced to `false`) -- No GroupBy (grouping is inherent via dimensions) -- State persistence serializes the full `pivotConfiguration` - -## Grid Lite Data Operations - -> **Grid Lite sorting, filtering, remote data, events, and limitations are fully documented in [`types.md`](./types.md#grid-lite).** Refer to that file for all Grid Lite data operations — this section intentionally avoids duplicating that content. -> -> Key differences from Flat/Tree/Hierarchical Grid APIs: -> - Uses `IgxGridLiteSortingExpression` / `IgxGridLiteFilteringExpression` (NOT `ISortingExpression` / `FilteringExpressionsTree`) -> - Uses `dataPipelineConfiguration` for remote ops (NOT noop strategies + events) -> - Has no editing, grouping, paging, summaries, selection, state persistence, or export - -## Key Rules - -1. **State persistence** — use `IgxGridStateDirective` to save/restore sort, filter, group, and column configuration; functions (formatters, strategies, summaries) must be reapplied via `stateParsed` event -2. **Tree Grid filtering is recursive** — parents of matching children are always shown and auto-expanded -3. **Hierarchical Grid levels are independent** — sorting/filtering/paging don't cascade; configure on `` -4. **Pivot Grid is read-only** — no editing, paging, or standard filtering/sorting; use `pivotConfiguration` for all data operations -5. **Grid Lite has its own API** — uses `IgxGridLiteSortingExpression`/`IgxGridLiteFilteringExpression` (NOT `ISortingExpression`/`FilteringExpressionsTree`), `dataPipelineConfiguration` for remote ops (NOT noop strategies), and has no editing, grouping, paging, summaries, or selection - -Universal rules (viewChild types, directive bundles, signals) are in the [hub](../SKILL.md#universal-rules-every-grid-type). - -## See Also - -- [`data-operations.md`](./data-operations.md) — Sorting, filtering, grouping, and canonical grid import patterns -- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization -- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries -- [`structure.md`](./structure.md) — Grid structure, column configuration, templates, layout, selection -- [`../../igniteui-angular-components/SKILL.md`](../../igniteui-angular-components/SKILL.md) — Non-grid Ignite UI components -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Theming & Styling diff --git a/.claude/skills/igniteui-angular-grids/references/structure.md b/.claude/skills/igniteui-angular-grids/references/structure.md deleted file mode 100644 index ba8a504..0000000 --- a/.claude/skills/igniteui-angular-grids/references/structure.md +++ /dev/null @@ -1,283 +0,0 @@ -# Grid Structure — Column Configuration, Sorting, Filtering & Selection - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For grid type selection, imports, and feature availability — see the hub. -> For editing, grouping, summaries, toolbar, export — see [`features.md`](./features.md). -> For Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics — see [`types.md`](./types.md). -> For programmatic data operations — see [`data-operations.md`](./data-operations.md). - -## Contents - -- [Quick Start](#quick-start) -- [Column Configuration](#column-configuration) -- [Sorting](#sorting) -- [Filtering](#filtering) -- [Selection](#selection) -- [Key Rules](#key-rules) - -## Quick Start - -### Imports - -> **Important:** Check `package.json` to determine whether the project uses `igniteui-angular` or `@infragistics/igniteui-angular`. Always import from the specific entry point of whichever package is installed. Never import from the root barrel of either package. - -```typescript -// Open-source package — import from specific entry points -import { IgxGridComponent, IGX_GRID_DIRECTIVES } from 'igniteui-angular/grids/grid'; - -// Licensed package — same entry-point structure, different prefix -// import { IgxGridComponent, IGX_GRID_DIRECTIVES } from '@infragistics/igniteui-angular/grids/grid'; - -// AVOID — never import from the root barrel (wrong for BOTH variants) -// import { IgxGridComponent } from 'igniteui-angular'; -// import { IgxGridComponent } from '@infragistics/igniteui-angular'; - -import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; - -@Component({ - selector: 'app-users-grid', - imports: [IGX_GRID_DIRECTIVES], - templateUrl: './users-grid.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class UsersGridComponent { - // Signal-based view child — use #grid on the template element - gridRef = viewChild.required('grid'); - - protected users = signal([]); -} -``` - -### Basic Grid - -```html - - - - - - - - - - - -``` - -## Column Configuration - -### Data Types - -Set `dataType` to enable proper formatting, filtering, sorting, and editing: - -| dataType | Behavior | -|---|---| -| `string` | Text input, string filtering | -| `number` | Numeric input, number filtering, number summaries | -| `boolean` | Checkbox editor, boolean filtering | -| `date` | Date picker editor, date filtering | -| `dateTime` | Date+time editor | -| `time` | Time picker editor | -| `currency` | Currency formatting, number filtering | -| `percent` | Percentage formatting | -| `image` | Image rendering (read-only) | - -### Column Templates - -Override default rendering with template directives: - -```html - - - - - {{ cell.value }} - - - - - - verified {{ column.header }} - - - - - - Active - Inactive - - - - - - - - - - - Active: {{ getActiveCount(summaryResults) }} - - -``` - -### Column Groups - -Group columns under a shared header: - -```html - - - - - - - - - -``` - -### Multi-Row Layout (MRL) - -Create complex cell layouts spanning multiple rows/columns: - -```html - - - - - -``` - -### Column Pinning - -```html - -``` - -Or programmatically: `this.gridRef().pinColumn('name')`. - -### Column Moving - -Enable column moving (drag-to-reorder headers) with `[moving]="true"` on the grid. -There is no [movable] input on . - -```html - - - - - -```html - - - -``` - -Programmatic sorting: - -```typescript -this.gridRef().sort({ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }); -this.gridRef().clearSort(); -``` - -Events: `(sorting)` (cancelable), `(sortingDone)`. - -For advanced programmatic sorting patterns, custom sort strategies, and sorting events — see [`data-operations.md`](./data-operations.md). - -## Filtering - -### Quick Filter (Row Filter) - -```html - - - -``` - -### Excel-Style Filter - -```html - - - -``` - -### Advanced Filtering Dialog - -```html - - - -``` - -### Programmatic Filtering - -```typescript -this.gridRef().filter('name', 'John', IgxStringFilteringOperand.instance().condition('contains'), true); -this.gridRef().clearFilter('name'); -this.gridRef().clearFilter(); // clear all -``` - -Events: `(filtering)` (cancelable), `(filteringDone)`. - -For advanced programmatic filtering, complex AND/OR trees, and remote filtering patterns — see [`data-operations.md`](./data-operations.md). - -## Selection - -### Row Selection - -```html - - - - - - - -``` - -Modes: `'none'`, `'single'`, `'multiple'`, `'multipleCascade'` (tree grids). - -### Cell Selection - -```html - -``` - -### Column Selection - -```html - - - -``` - -Events: `(rowSelectionChanging)`, `(columnSelectionChanging)`, `(selected)` (cell). - -## Key Rules - -Universal rules (viewChild types, directive bundles, signals, virtualization) are in the [hub](../SKILL.md#universal-rules-every-grid-type). - -1. **Pick the right grid type first** — see the [hub](../SKILL.md) for the decision guide -2. **Always set `[primaryKey]`** — required for editing, selection, row operations (Flat, Tree, Hierarchical, Pivot grids; NOT Grid Lite) -3. **Set `[autoGenerate]="false"`** and define columns explicitly for production grids (except Pivot Grid where columns are auto-generated) -4. **Set `dataType` on every column** for correct filtering, sorting, editing, and summaries -5. **Omit `width` on generated `` elements.** Columns without `width` equally share available grid width. Only set `width` when the user explicitly asks for fixed or percentage column sizing. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. - -## See Also - -- [`features.md`](./features.md) — Editing, grouping, summaries, toolbar, export, row drag, action strip, master-detail -- [`types.md`](./types.md) — Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid specifics -- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping, canonical import patterns -- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization -- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries -- [`state.md`](./state.md) — State persistence, grid-type-specific operations -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.claude/skills/igniteui-angular-grids/references/types.md b/.claude/skills/igniteui-angular-grids/references/types.md deleted file mode 100644 index b95276e..0000000 --- a/.claude/skills/igniteui-angular-grids/references/types.md +++ /dev/null @@ -1,486 +0,0 @@ -# Grid Types — Tree Grid, Hierarchical Grid, Grid Lite & Pivot Grid - -> **Part of the [`igniteui-angular-grids`](../SKILL.md) skill hub.** -> For the grid type selection guide and feature availability — see the hub. -> For shared column config, sorting, filtering, selection — see [`structure.md`](./structure.md). -> For editing, grouping, toolbar, export — see [`features.md`](./features.md). - -## Contents - -- [Tree Grid](#tree-grid) -- [Hierarchical Grid](#hierarchical-grid) -- [Grid Lite](#grid-lite) -- [Pivot Grid](#pivot-grid) -- [Key Rules](#key-rules) - -## Tree Grid - -For data with parent-child relationships **within a single schema** (e.g., org charts, file systems, categories). - -### Two Data Binding Modes - -**Mode 1: Flat data with foreign key** — rows reference their parent via a foreign key: - -```typescript -import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; -import { IgxTreeGridComponent, IGX_TREE_GRID_DIRECTIVES } from 'igniteui-angular/grids/tree-grid'; - -@Component({ - selector: 'app-org-tree', - imports: [IGX_TREE_GRID_DIRECTIVES], - templateUrl: './org-tree.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class OrgTreeComponent { - treeGridRef = viewChild.required('treeGrid'); - employees = signal([ - { id: 1, name: 'CEO', managerId: -1, title: 'CEO' }, - { id: 2, name: 'VP Engineering', managerId: 1, title: 'VP' }, - { id: 3, name: 'Developer', managerId: 2, title: 'Dev' }, - ]); -} -``` - -```html - - - - -``` - -**Mode 2: Nested object data** — each row contains its children in an array property: - -```html - - - - -``` - -### Tree Grid Unique Features - -- **Cascade selection**: `[rowSelection]="'multipleCascade'"` — selecting a parent selects all children; indeterminate state propagates up -- **Cascade delete**: `[cascadeOnDelete]="true"` (default) — deleting a parent removes all descendants -- **Load on demand**: `[loadChildrenOnDemand]="loadChildren"` — lazy-load children when a row is expanded -- **Expansion depth**: `[expansionDepth]="2"` — control initial expansion level (`Infinity` by default) -- **Add child row**: `treeGridRef().addRow(data, parentRowID)` — add a row as a child of a specific parent - -### Tree Grid Data Operation Behavior - -- **Filtering is recursive**: when a child matches, its parent is always shown (even if the parent doesn't match). Matched parents are auto-expanded. -- **Sorting is per-level**: children are sorted within their parent, not globally flattened -- **Batch editing** uses `HierarchicalTransactionService` — transactions carry a `path` array tracing the parent hierarchy for proper undo/redo -- **Summaries** are computed per tree level - ---- - -## Hierarchical Grid - -For master-detail data where **each level has a different schema** (e.g., Companies → Departments → Employees). Each level is defined by a **Row Island** blueprint. - -```typescript -import { Component, ChangeDetectionStrategy, signal, viewChild } from '@angular/core'; -import { IgxHierarchicalGridComponent, IGX_HIERARCHICAL_GRID_DIRECTIVES } from 'igniteui-angular/grids/hierarchical-grid'; - -@Component({ - selector: 'app-company-grid', - imports: [IGX_HIERARCHICAL_GRID_DIRECTIVES], - templateUrl: './company-grid.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class CompanyGridComponent { - hGridRef = viewChild.required('hGrid'); - companies = signal([]); -} -``` - -```html - - - - - - - - - - - - - - - - -``` - -### How Row Islands Work - -- A `` defines the **blueprint** (columns, features, templates) for all child grids at that level -- The `[key]` property specifies which property of the parent row's data holds the child array -- Row islands can be **nested** — an `igx-row-island` can contain another for deeper levels -- Each expanded row creates a **full grid instance** — be aware of memory usage with very deep/wide hierarchies - -### Accessing Child Grid Instances - -Use the `(gridCreated)` event on the row island: - -```html - - - -``` - -```typescript -onChildGridCreated(event: IGridCreatedEventArgs) { - const childGrid = event.grid; - // Configure the child grid instance, load data, etc. -} -``` - -### Hierarchical Grid Data Operation Behavior - -- **Sorting and filtering do NOT cascade** — each grid level is independent with its own state -- **Configure features on the row island** and all child grids at that level inherit them -- **Batch editing propagates**: setting `[batchEditing]="true"` on the root automatically enables it on all child grids -- **State persistence** recursively saves/restores state for each child grid instance, keyed by row island ID + parent row ID - ---- - -## Grid Lite - -The **lightest grid option** — an open-source (MIT licensed) Web Component with an Angular wrapper. Use it for **read-only data display** with sorting, filtering, column hiding/resizing, and row virtualization. It has **no editing, no selection, no paging, no grouping, no summaries, no export**. - -> **When to recommend Grid Lite vs. Flat Grid**: If the user only needs to display data with basic sorting/filtering and doesn't need editing, batch operations, paging, grouping, summaries, or export, Grid Lite is the lighter, faster choice. If any of those enterprise features are needed, **upgrade strictly to `igx-grid` (`IgxGridComponent`)** from `igniteui-angular/grids/grid` — do NOT recommend other non-grid components as a substitute. - -> **Important — Grid Lite → Grid Upgrade**: When a user is working with `igx-grid-lite` and you identify that their requirements exceed Grid Lite's capabilities (e.g., they need editing, selection, paging, grouping, summaries, export, row operations, or any feature not available in Grid Lite), you MUST recommend upgrading to `igx-grid` (`IgxGridComponent`). Never suggest a different component type — the upgrade path from Grid Lite is always to `igx-grid`. Replace `IgxGridLiteComponent` with `IgxGridComponent`, update imports from `igniteui-angular/grids/lite` to `igniteui-angular/grids/grid`, use `IGX_GRID_DIRECTIVES` instead of individual Grid Lite imports, and remove `CUSTOM_ELEMENTS_SCHEMA` if it was added for direct web-component usage. See [`grid-migration.md`](./grid-migration.md) for the full migration checklist. - -### Installation - -Grid Lite requires a **separate npm package**: - -```bash -npm install igniteui-grid-lite -``` - -### Setup - -```typescript -import { Component, ChangeDetectionStrategy, viewChild } from '@angular/core'; -import { - IgxGridLiteComponent, - IgxGridLiteColumnComponent, - IgxGridLiteCellTemplateDirective, - IgxGridLiteHeaderTemplateDirective -} from 'igniteui-angular/grids/lite'; - -@Component({ - selector: 'app-users-lite', - imports: [ - IgxGridLiteComponent, - IgxGridLiteColumnComponent, - IgxGridLiteCellTemplateDirective, - IgxGridLiteHeaderTemplateDirective - ], - templateUrl: './users-lite.component.html', - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class UsersLiteComponent { - gridRef = viewChild>('grid'); - data: User[] = []; -} -``` - -### Template - -```html - - - - - - - - - - - {{ value ? 'Yes' : 'No' }} - - - -``` - -### Column Configuration - -Columns use `` with these inputs: - -| Input | Type | Description | -|---|---|---| -| `field` | `string` | Data property key (required) | -| `dataType` | `'string' \| 'number' \| 'boolean' \| 'date'` | Column data type | -| `header` | `string` | Header text | -| `width` | `string` | CSS width — omit by default; columns auto-fill available grid space. Only set when a fixed or percentage width is explicitly needed (e.g. `'20%'`). | -| `hidden` | `boolean` | Hide the column | -| `resizable` | `boolean` | Allow column resizing | -| `sortable` | `boolean` | Enable sorting | -| `filterable` | `boolean` | Enable filtering | -| `sortingCaseSensitive` | `boolean` | Case-sensitive sorting | -| `filteringCaseSensitive` | `boolean` | Case-sensitive filtering | - -### Templates - -Use `igxGridLiteCell` for cell templates and `igxGridLiteHeader` for header templates: - -```html - - - ⭐ Rating - - - {{ value }} - - -``` - -> When a header template is provided, the `header` text property is ignored. - -### Sorting & Filtering API - -```typescript -// Sort programmatically -this.gridRef().sort({ key: 'name', direction: 'ascending' }); -this.gridRef().sort([ - { key: 'name', direction: 'ascending' }, - { key: 'age', direction: 'descending' } -]); -this.gridRef().clearSort('name'); -this.gridRef().clearSort(); // clear all - -// Filter programmatically -this.gridRef().filter({ key: 'age', condition: 'greaterThan', searchTerm: 21 }); -this.gridRef().clearFilter('age'); -this.gridRef().clearFilter(); // clear all -``` - -### Two-Way Binding for Sort/Filter State - -```html - - -``` - -Events: `(sorting)` (cancelable), `(sorted)`, `(filtering)` (cancelable), `(filtered)`. - -### Remote Data Operations - -Use `dataPipelineConfiguration` to intercept sort/filter and delegate to the server: - -```typescript -import { IgxGridLiteDataPipelineConfiguration } from 'igniteui-angular/grids/lite'; - -dataPipeline: IgxGridLiteDataPipelineConfiguration = { - sort: async (params) => { - // params.grid — the grid instance - // params.data — current data - // params.type — 'sort' - const sorted = await this.dataService.sortRemote(params.grid.sortingExpressions); - return sorted; - }, - filter: async (params) => { - const filtered = await this.dataService.filterRemote(params.grid.filteringExpressions); - return filtered; - } -}; -``` - -```html - - -``` - -### Grid Lite Events - -| Event | Cancelable | Payload | -|---|---|---| -| `(sorting)` | Yes (`event.preventDefault()`) | Sorting expression about to be applied | -| `(sorted)` | No | Sorting completed | -| `(filtering)` | Yes (`event.preventDefault()`) | Filter expression about to be applied | -| `(filtered)` | No | Filtering completed | - -### Grid Lite Limitations - -These features are **NOT available** in Grid Lite: -- Editing (cell, row, batch) — no `[editable]`, no `beginEdit()`, no transactions -- Grouping — no `groupBy()`, no `IgxGroupByRow` -- Paging — no `IgxPaginatorComponent` -- Summaries — no `IgxSummaryOperand` -- Selection — no `rowSelection`, `cellSelection`, or `columnSelection` -- State persistence — no `IgxGridStateDirective` -- Export — no `IgxExcelExporterService` or `IgxCsvExporterService` -- Advanced filtering — no `advancedFilteringExpressionsTree` - -### Grid Lite Key Differences from Flat Grid - -- **Separate package**: `npm install igniteui-grid-lite` -- **`CUSTOM_ELEMENTS_SCHEMA` is not required** — the `IgxGridLiteComponent` Angular wrapper declares it internally; add it to your component's `schemas` only when using the underlying web component tag directly -- **No directives bundle** — import `IgxGridLiteComponent`, `IgxGridLiteColumnComponent`, and template directives individually -- **No `[primaryKey]`** — not needed (no editing, selection, or row operations) -- **No editing** of any kind (cell, row, batch) -- **No selection** (row, cell, column) -- **No paging, grouping, summaries, pinning, moving, export** -- **Column config differs**: uses `field` (not `field` on ``), `sortable`/`filterable` are boolean attributes -- **Remote data**: uses `dataPipelineConfiguration` (async callback) instead of noop strategies + events - ---- - -## Pivot Grid - -For **pivot table analytics** where users reshape data by dragging dimensions between rows, columns, filters, and values. - -> **IMPORTANT**: The Pivot Grid is fundamentally different from the other three grids. Standard grid features like cell editing, row editing, batch editing, paging, column pinning, column moving, row dragging, and standard filtering/sorting are **disabled**. All data operations are driven by the `pivotConfiguration`. - -```typescript -import { Component } from "@angular/core"; -import { DATA } from '../../data/pivot-data'; - -import { IPivotConfiguration, IgxPivotNumericAggregate } from 'igniteui-angular/grids/core'; -import { IgxPivotGridComponent } from 'igniteui-angular/grids/pivot-grid'; - -@Component({ - selector: 'app-pivot-grid-basic-sample', - styleUrls: ['./pivot-grid-basic-sample.component.scss'], - templateUrl: './pivot-grid-basic-sample.component.html', - imports: [IgxPivotGridComponent] -}) -export class PivotGridBasicSampleComponent { - public data = DATA; - public pivotConfigHierarchy: IPivotConfiguration = { - columns: [ - { - - memberName: 'Product', - memberFunction: (data) => data.Product.Name, - enabled: true - } - - ], - rows: [ - { - memberName: 'Seller', - memberFunction: (data) => data.Seller.Name, - enabled: true - } - ], - values: [ - { - member: 'NumberOfUnits', - aggregate: { - aggregator: IgxPivotNumericAggregate.sum, - key: 'sum', - label: 'Sum' - }, - enabled: true - - } - ], - filters: null - }; -} -``` - -```html - - -``` - -```typescript -// Data shape — nested objects are flattened via memberFunction: -export const DATA = [ - { - Product: { Name: 'Clothing', UnitPrice: '12.81' }, - Seller: { Name: 'Stanley Brooker', City: 'Seattle' }, - Date: '2007-01-01T00:00:00', - Value: '94.27', - NumberOfUnits: '282' - }, - // ... -]; -``` - -### Pivot Data Selector - -Provide a drag-and-drop UI for users to reshape the pivot interactively: - -```typescript -// Component class — reference the pivot grid instance for the selector -pivotGridRef = viewChild.required('pivotGrid'); -``` - -```html - - -``` - -### Pivot Grid Data Operations - -- **Filtering**: Per-dimension only — set the `filter` property on an `IPivotDimension`, NOT `[allowFiltering]` -- **Sorting**: Per-dimension only — set `sortable: true` and `sortDirection` on an `IPivotDimension` -- **Aggregation**: Configured via `IPivotValue.aggregate` (e.g., `IgxPivotNumericAggregate.sum`, `.average`, `.min`, `.max`, `.count`) -- **Columns are auto-generated** from the pivot configuration — do not define `` manually -- **State persistence**: Serializes the entire `pivotConfiguration` (dimensions, values, filters) - ---- - -## Key Rules - -1. **Tree Grid**: use `[primaryKey]` + `[foreignKey]` for flat data or `[childDataKey]` for nested objects; filtering is recursive (parents of matching children are always shown) -2. **Hierarchical Grid**: sorting/filtering/paging are independent per level; configure features on the `` blueprint -3. **Pivot Grid is read-only** — editing, paging, pinning, column moving, row dragging are all disabled; use `pivotConfiguration` for all data operations -4. **Grid Lite requires the `igniteui-grid-lite` npm package** — it has no editing, selection, paging, or export; `CUSTOM_ELEMENTS_SCHEMA` is not needed when using the `IgxGridLiteComponent` wrapper -5. **Omit `width` on generated `` elements.** Columns without `width` equally share available grid width. Only set `width` when the user explicitly asks for it. If column widths are used, at least one column must not have a specified width so that it fills the remaining space in the grid. - -## See Also - -- [`structure.md`](./structure.md) — Grid setup, column config, sorting UI, filtering UI, selection -- [`features.md`](./features.md) — Grouping, summaries, toolbar, export, row drag, action strip -- [`data-operations.md`](./data-operations.md) — Programmatic sorting, filtering, grouping, canonical import patterns -- [`paging-remote.md`](./paging-remote.md) — Paging, remote data operations, virtualization -- [`editing.md`](./editing.md) — Cell editing, row editing, batch editing, validation, summaries -- [`state.md`](./state.md) — State persistence, Tree Grid / Hierarchical Grid / Pivot Grid / Grid Lite data operations -- [`../../igniteui-angular-theming/SKILL.md`](../../igniteui-angular-theming/SKILL.md) — Grid styling and theming diff --git a/.claude/skills/igniteui-angular-theming/SKILL.md b/.claude/skills/igniteui-angular-theming/SKILL.md deleted file mode 100644 index 43d40ee..0000000 --- a/.claude/skills/igniteui-angular-theming/SKILL.md +++ /dev/null @@ -1,383 +0,0 @@ ---- -name: igniteui-angular-theming -description: "Generates and customizes Ignite UI for Angular themes including color palettes, typography, elevations, and component-level styles using the Sass theming system and the igniteui-theming MCP server. Use when users ask to theme, restyle, or style Ignite UI components, change colors or the color palette, switch between light and dark themes, create or apply a global theme, customize typography or elevation shadows, adjust spacing, sizing, or roundness, or configure per-component design tokens. Do NOT use for component behavior, APIs, or data binding — use igniteui-angular-components or igniteui-angular-grids instead." -user-invocable: true ---- - -# Ignite UI for Angular — Theming Skill - -## Description - -This skill teaches AI agents how to theme Ignite UI for Angular applications using the Sass-based theming system and the **Ignite UI Theming MCP server**. It covers global themes, palettes, typography, elevations, component-level theming, layout controls (spacing, sizing, roundness), and how to use the MCP tools for code generation. - -## Prerequisites - -- An Angular project with `igniteui-angular` installed, **or** `@infragistics/igniteui-angular` for licensed users -- Sass support enabled in the project (default for Angular CLI projects) - -## Ignite UI Theming MCP Server (recommended, not required) - -The `igniteui-theming` MCP server generates production-ready theme code (`create_theme`, `create_palette`, `create_component_theme`, `get_component_design_tokens`, `get_color`, and more). When its tools are available, prefer them over writing theme Sass from memory — start by calling `detect_platform`. - -If the tools are not available, do not block the task — use the manual Sass workflow in this file. Suggest that the user run `npx -y igniteui-cli ai-config` from the project root (it configures both the `igniteui-cli` and `igniteui-theming` MCP servers) and reload the editor. MCP servers cannot be started mid-session; the configuration takes effect on the next session. Editor-specific details are in [`references/mcp-setup.md`](./references/mcp-setup.md). - -## Theming Architecture - -> **Docs:** [Theming Overview](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/index) · [Palette](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/palettes) · [Typography](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/typography) · [Elevations](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/elevations) - -The Ignite UI theming system is built on four pillars: - -| Concept | Purpose | -| -------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| **Palette** | Color system with primary, secondary, surface, gray, info, success, warn, error families, each with shades 50–900 + accents A100–A700 | -| **Typography** | Font family, type scale (h1–h6, subtitle, body, button, caption, overline) | -| **Elevations** | Box-shadow levels 0–24 for visual depth | -| **Schema** | Per-component recipes mapping palette colors to component tokens | - -### Design Systems - -Four built-in design systems are available: - -- **Material** (default) — Material Design 3 -- **Bootstrap** — Bootstrap-inspired -- **Fluent** — Microsoft Fluent Design -- **Indigo** — Infragistics Indigo Design - -Each has light and dark variants (e.g., `$light-material-schema`, `$dark-fluent-schema`). - -## Pre-built Themes - -The quickest way to theme an app is to include a pre-built CSS file in `angular.json`: - -```json -"styles": ["node_modules/igniteui-angular/styles/igniteui-angular.css"] -``` - -> **Licensed package users:** replace `igniteui-angular` with `@infragistics/igniteui-angular` in the path: -> ```json -> "styles": ["node_modules/@infragistics/igniteui-angular/styles/igniteui-angular.css"] -> ``` - -Available pre-built CSS files: - -| File | Theme | -| ------------------------------ | --------------- | -| `igniteui-angular.css` | Material Light | -| `igniteui-angular-dark.css` | Material Dark | -| `igniteui-fluent-light.css` | Fluent Light | -| `igniteui-fluent-dark.css` | Fluent Dark | -| `igniteui-bootstrap-light.css` | Bootstrap Light | -| `igniteui-bootstrap-dark.css` | Bootstrap Dark | -| `igniteui-indigo-light.css` | Indigo Light | -| `igniteui-indigo-dark.css` | Indigo Dark | - -All files are located under `node_modules/igniteui-angular/styles/` (or `node_modules/@infragistics/igniteui-angular/styles/` for the licensed package). - -## Custom Sass Theme (Manual) - -> **Important — Sass Theming Docs**: If the user explicitly asks to build a Sass-based theme or configure Sass, refer to the dedicated Sass documentation: -> -> - [Sass Theming Overview](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/index) -> - [Sass Configuration](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/configuration) -> - [Sass Palettes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/palettes) -> - [Sass Component Themes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/component-themes) - -Create a `styles.scss` file and include it in `angular.json`: - -```scss -// Open-source package -@use 'igniteui-angular/theming' as *; -// Licensed package — same Sass API, different import path -// @use '@infragistics/igniteui-angular/theming' as *; -$my-palette: palette( - $primary: #1976d2, - $secondary: #ff9800, - $surface: #fafafa, -); - -// 2. Typography (optional) -@include typography($font-family: $material-typeface, $type-scale: $material-type-scale); - -// 3. Core reset & base styles -@include core(); - -// 4. Apply theme -@include theme($palette: $my-palette, $schema: $light-material-schema); -``` - -For dark themes, use a dark surface color and a dark schema: - -```scss -$dark-palette: palette( - $primary: #90caf9, - $secondary: #ffb74d, - $surface: #121212, -); - -@include theme($palette: $dark-palette, $schema: $dark-material-schema); -``` - -## Component-Level Theming - -> **Docs:** [Component Themes](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/component-themes) - -Override individual component appearance using component theme functions and the `tokens` mixin. - -All color values passed to component themes must be palette tokens, not raw hex/RGB/HSL — see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation) below. - -```scss -@use 'igniteui-angular/theming' as *; - -$custom-avatar: avatar-theme( - $schema: $light-material-schema, - $background: var(--ig-primary-500), - $color: var(--ig-primary-500-contrast), -); - -igx-avatar { - @include tokens($custom-avatar); -} -``` - -### Discovering Available Tokens - -Each component has its own set of design tokens (themeable CSS custom properties). Before theming a component, you must know which tokens exist. Use the **MCP tool** `get_component_design_tokens` to discover them. - -### Compound Components - -Some components (e.g., `combo`, `grid`, `date-picker`, `select`) are **compound** — they contain internal child components, each requiring their own theme. For example, `date-picker` uses `calendar`, `flat-button`, and `input-group` internally. - -Workflow for compound components: -1. Call `get_component_design_tokens` for the parent (e.g., `date-picker`) -2. The response lists related themes and scope selectors -3. Call `create_component_theme` for each child, using the parent's selector as the wrapper - -## Layout Controls - -### Sizing - -> **Docs:** [Display Density / Sizing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/display-density) - -Controls the size of components via `--ig-size` (values: 1 = small, 2 = medium, 3 = large): - -```css -/* Global */ -:root { - --ig-size: 2; -} - -/* Component-scoped */ -igx-grid { - --ig-size: 1; -} -``` - -### Spacing - -> **Docs:** [Spacing](https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/spacing) - -Controls internal padding via `--ig-spacing` (1 = default, 0.5 = compact, 2 = spacious): - -```css -:root { - --ig-spacing: 1; -} -.compact-section { - --ig-spacing: 0.75; -} -``` - -### Roundness - -Controls border-radius via `--ig-radius-factor` (0 = square, 1 = maximum radius): - -```css -:root { - --ig-radius-factor: 1; -} -igx-avatar { - --ig-radius-factor: 0.5; -} -``` - -## Using the Theming MCP Server - -The Ignite UI Theming MCP server provides tools for AI-assisted theme code generation. - -> **File safety**: When applying generated theme code to an existing style file, make targeted edits that preserve the user's existing custom styles — never wholesale-replace the file contents. If the environment does not gate file writes behind user approval, present the change as a diff for review before writing. - -Always follow this workflow: - -### Step 1 — Detect Platform - -``` -Tool: detect_platform -``` -This auto-detects `angular` from `package.json` and sets the correct import paths. - -### Step 2 — Generate a Full Theme - -``` -Tool: create_theme -Params: { - platform: "angular", - designSystem: "material", - primaryColor: "#1976D2", - secondaryColor: "#FF9800", - surfaceColor: "#FAFAFA", - variant: "light", - fontFamily: "'Roboto', sans-serif", - includeTypography: true, - includeElevations: true -} -``` - -Generates a complete Sass file with palette, typography, elevations, and the `theme()` mixin call. - -### Step 3 — Customize Individual Components - -``` -Tool: get_component_design_tokens -Params: { component: "grid" } -``` - -Then use **palette token references** (not hardcoded hex values) for every color: - -``` -Tool: create_component_theme -Params: { - platform: "angular", - designSystem: "material", - variant: "light", - component: "grid", - tokens: { - "header-background": "var(--ig-primary-50)", - "header-text-color": "var(--ig-primary-800)" - } -} -``` - -### Step 4 — Generate a Palette - -For simple mid-luminance base colors: - -``` -Tool: create_palette -Params: { - platform: "angular", - primary: "#1976D2", - secondary: "#FF9800", - surface: "#FAFAFA", - variant: "light" -} -``` - -For brand-specific exact shade values, use `create_custom_palette` with `mode: "explicit"` for full control over each shade. - -### Step 5 — Adjust Layout - -``` -Tool: set_size → { size: "medium" } -Tool: set_spacing → { spacing: 0.75, component: "grid" } -Tool: set_roundness → { radiusFactor: 0.8 } -``` - -### Step 6 — Reference Palette Colors via `get_color` - -After a palette is generated, use the `get_color` tool to obtain the correct CSS custom property reference for any color you need (see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation)): - -``` -Tool: get_color -Params: { color: "primary", variant: "600" } -→ var(--ig-primary-600) - -Params: { color: "primary", variant: "600", contrast: true } -→ var(--ig-primary-600-contrast) - -Params: { color: "primary", opacity: 0.5 } -→ hsl(from var(--ig-primary-500) h s l / 0.5) -``` - -### Loading Reference Data - -Use `read_resource` with these URIs for preset values and documentation: - -| URI | Content | -| --------------------------------- | ------------------------------ | -| `theming://presets/palettes` | Preset palette colors | -| `theming://presets/typography` | Typography presets | -| `theming://presets/elevations` | Elevation shadow presets | -| `theming://guidance/colors/usage` | Which shades for which purpose | -| `theming://guidance/colors/roles` | Semantic color roles | -| `theming://guidance/colors/rules` | Light/dark theme rules | -| `theming://platforms/angular` | Angular platform specifics | - -## No Hardcoded Colors After Palette Generation - -This is the single most important theming rule. Once a palette exists (via `palette()` in Sass or `create_palette` / `create_theme` via MCP), every color reference must come from the palette tokens, which are available as CSS custom properties on `:root`. This applies to all style code: component theme `tokens` values, custom CSS rules (`color`, `background`, `border-color`, `fill`, `stroke`), Sass variables for derived values, Angular `host` bindings, and inline styles. Hardcoded values break theme switching and drift out of sync when the palette changes. - -### Correct: Palette Tokens - -```scss -// All colors come from the theme — respects palette changes and dark/light switching -.sidebar { - background: var(--ig-surface-500); - color: var(--ig-gray-900); - border-right: 1px solid var(--ig-gray-200); -} - -.accent-badge { - background: var(--ig-secondary-500); - color: var(--ig-secondary-500-contrast); -} - -.hero-section { - // Semi-transparent primary overlay - background: hsl(from var(--ig-primary-500) h s l / 0.12); -} -``` - -### Incorrect: Hardcoded Values - -```scss -// WRONG — these break when the palette changes and ignore dark/light mode -$primary-color: #00838f; // ✗ hardcoded -$secondary-color: #3d5afe; // ✗ hardcoded -$surface-color: #f0f5fa; // ✗ hardcoded - -.sidebar { - background: $surface-color; // ✗ not a palette token - color: #333; // ✗ not a palette token -} -``` - -### When Raw Hex Values Are OK - -Raw hex values are acceptable **only** in these contexts: - -1. **`palette()` call** — the initial seed colors that generate the full palette -2. **`create_palette` / `create_theme` MCP tool inputs** — the base colors passed to the tool -3. **Non-palette decorative values** — e.g., a one-off SVG illustration color that intentionally stays fixed regardless of theme - -Everything else must use `var(--ig--)` tokens. - -## Common Patterns - -> **Light/dark theme switching, scoped themes, and licensed package configuration are in [`references/common-patterns.md`](./references/common-patterns.md).** Read that file for ready-to-use Sass patterns. - -## Key Rules - -1. **Preserve existing styles** — apply theme code as targeted edits to existing style files; never wholesale-replace a file the user has customized -2. **Always call `detect_platform` first** when using MCP tools -3. **Always call `get_component_design_tokens` before `create_component_theme`** to discover valid token names -4. **Palette shades 50 = lightest, 900 = darkest** for all chromatic colors — never invert for dark themes (only gray inverts) -5. **Surface color must match the variant** — light color for `light`, dark color for `dark` -6. **Use `@include core()` once** before `@include theme()` in your global styles -7. **Component themes use `@include tokens($theme)`** inside a selector to emit CSS custom properties -8. **For compound components**, follow the full checklist returned by `get_component_design_tokens` — theme each child component with its scoped selector -9. **No hardcoded colors after palette generation** — see [No Hardcoded Colors After Palette Generation](#no-hardcoded-colors-after-palette-generation); raw hex/RGB/HSL is only acceptable in the initial palette seed values - -## Related Skills - -- [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) — UI components (form controls, layout, data display, feedback/overlays, directives, charts) -- [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) — Data Grids (Flat Grid, Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid) diff --git a/.claude/skills/igniteui-angular-theming/references/common-patterns.md b/.claude/skills/igniteui-angular-theming/references/common-patterns.md deleted file mode 100644 index 9888eff..0000000 --- a/.claude/skills/igniteui-angular-theming/references/common-patterns.md +++ /dev/null @@ -1,45 +0,0 @@ -# Common Theming Patterns - -> **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.** - -## Contents - -- [Switching Between Light and Dark Themes](#switching-between-light-and-dark-themes) -- [Scoping a Theme to a Container](#scoping-a-theme-to-a-container) -- [Licensed Package Users](#licensed-package-users) - -## Switching Between Light and Dark Themes - -```scss -@use 'igniteui-angular/theming' as *; - -$light-palette: palette($primary: #1976D2, $secondary: #FF9800, $surface: #FAFAFA); -$dark-palette: palette($primary: #90CAF9, $secondary: #FFB74D, $surface: #121212); - -@include core(); -@include typography($font-family: $material-typeface, $type-scale: $material-type-scale); - -// Light is default -@include theme($palette: $light-palette, $schema: $light-material-schema); - -// Dark via class on or -.dark-theme { - @include theme($palette: $dark-palette, $schema: $dark-material-schema); -} -``` - -## Scoping a Theme to a Container - -```scss -.admin-panel { - @include theme($palette: $admin-palette, $schema: $light-indigo-schema); -} -``` - -## Licensed Package Users - -If using the licensed `@infragistics/igniteui-angular` package, set `licensed: true` on MCP tool calls and change the Sass import: - -```scss -@use '@infragistics/igniteui-angular/theming' as *; -``` diff --git a/.claude/skills/igniteui-angular-theming/references/mcp-setup.md b/.claude/skills/igniteui-angular-theming/references/mcp-setup.md deleted file mode 100644 index 1e69e24..0000000 --- a/.claude/skills/igniteui-angular-theming/references/mcp-setup.md +++ /dev/null @@ -1,74 +0,0 @@ -# Setting Up the Theming MCP Server - -> **Part of the [`igniteui-angular-theming`](../SKILL.md) skill hub.** - -The Ignite UI Theming MCP server enables AI assistants to generate production-ready theming code. It must be configured in the editor/agent before the theming tools become available, and the editor or agent session must be restarted afterwards — MCP servers cannot be hot-loaded into a running session. - -> Depending on the client, MCP tool names may appear with a server prefix (e.g. `mcp__igniteui-theming__detect_platform` in Claude Code). This skill refers to tools by their bare names. - -## Recommended: One-Command Setup - -From the project root: - -```bash -npx -y igniteui-cli ai-config -``` - -This configures **both** the `igniteui-theming` and `igniteui-cli` MCP servers, copies the Ignite UI Agent Skills into the project, and preserves any existing server entries in the config files. Inline options such as `--agents claude copilot` and `--assistants vscode cursor` select which agents and editors to configure. - -## Manual Configuration (fallback) - -Use these only when `ai-config` is unavailable or your editor is not covered by it. - -### VS Code — `.vscode/mcp.json` - -```json -{ - "servers": { - "igniteui-theming": { - "command": "npx", - "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"] - } - } -} -``` - -`npx -y` works whether `igniteui-theming` is installed locally in `node_modules` or needs to be pulled from the npm registry. - -### Claude Code - -```bash -claude mcp add igniteui-theming -- npx -y igniteui-theming igniteui-theming-mcp -``` - -### Cursor — `.cursor/mcp.json` - -```json -{ - "mcpServers": { - "igniteui-theming": { - "command": "npx", - "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"] - } - } -} -``` - -### Claude Desktop - -Edit the Claude Desktop config file (**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`, **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`) and add the same `mcpServers` entry as shown for Cursor above. - -### WebStorm / JetBrains IDEs - -1. Go to **Settings → Tools → AI Assistant → MCP Servers** -2. Click **+ Add MCP Server** -3. Set Command to `npx` and Arguments to `-y igniteui-theming igniteui-theming-mcp` -4. Click OK and restart the AI Assistant - -## Verifying the Setup - -After restarting the editor/session, ask the AI assistant: - -> "Detect which Ignite UI platform my project uses" - -If the MCP server is running, the `detect_platform` tool will analyze `package.json` and return the detected platform (e.g., `angular`). diff --git a/.mcp.json b/.mcp.json deleted file mode 100644 index 8c5cf87..0000000 --- a/.mcp.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "mcpServers": { - "igniteui-cli": { - "command": "npx", - "args": [ - "-y", - "igniteui-cli", - "mcp" - ] - }, - "igniteui-theming": { - "command": "npx", - "args": [ - "-y", - "igniteui-theming", - "igniteui-theming-mcp" - ] - } - } -} diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index 13b3007..0000000 --- a/AGENTS.md +++ /dev/null @@ -1,58 +0,0 @@ -You are an expert in TypeScript, Angular, and scalable web application development. You write functional, maintainable, performant, and accessible code following Angular and TypeScript best practices. - -## TypeScript Best Practices - -- Use strict type checking -- Prefer type inference when the type is obvious -- Avoid the `any` type; use `unknown` when type is uncertain - -## Angular Best Practices - -- Always use standalone components over NgModules -- Must NOT set `standalone: true` inside Angular decorators. It's the default in Angular v20+. -- Use signals for state management -- Implement lazy loading for feature routes -- Do NOT use the `@HostBinding` and `@HostListener` decorators. Put host bindings inside the `host` object of the `@Component` or `@Directive` decorator instead -- Use `NgOptimizedImage` for all static images. - - `NgOptimizedImage` does not work for inline base64 images. - -## Accessibility Requirements - -- It MUST pass all AXE checks. -- It MUST follow all WCAG AA minimums, including focus management, color contrast, and ARIA attributes. - -### Components - -- Keep components small and focused on a single responsibility -- Use `input()` and `output()` functions instead of decorators -- Use `computed()` for derived state -- Set `changeDetection: ChangeDetectionStrategy.OnPush` in `@Component` decorator -- Prefer inline templates for small components -- Prefer Reactive forms instead of Template-driven ones -- Do NOT use `ngClass`, use `class` bindings instead -- Do NOT use `ngStyle`, use `style` bindings instead -- When using external templates/styles, use paths relative to the component TS file. - -## State Management - -- Use signals for local component state -- Use `computed()` for derived state -- Keep state transformations pure and predictable -- Do NOT use `mutate` on signals, use `update` or `set` instead - -## Templates - -- Keep templates simple and avoid complex logic -- Use native control flow (`@if`, `@for`, `@switch`) instead of `*ngIf`, `*ngFor`, `*ngSwitch` -- Use the async pipe to handle observables -- Do not assume globals like (`new Date()`) are available. - -## Services - -- Design services around a single responsibility -- Use the `providedIn: 'root'` option for singleton services -- Use the `inject()` function instead of constructor injection - -## UI components - -- Use `igniteui-angular`. From 64a81268adb2bce6b390f669c6fc3928de8abf5d Mon Sep 17 00:00:00 2001 From: Viktor Kombov Date: Fri, 28 Aug 2026 18:15:23 +0300 Subject: [PATCH 3/3] fix(taskplanner): reactive task dialogs, working sort strategies and drop highlights --- docs/3rdpartylicenses.txt | 414 +++++++++--------- docs/{chunk-BZLeeQ-I.js => chunk-2CI1XlO3.js} | 2 +- docs/{chunk-Df2FdJZg.js => chunk-B6Rq9kDv.js} | 2 +- docs/{chunk-iest0pt_.js => chunk-D20stDwr.js} | 6 +- docs/{chunk-B-Z5f9Bq.js => chunk-rg47k1QY.js} | 2 +- docs/index.html | 4 +- docs/{main-ZSOIWSXQ.js => main-GF4OEYNH.js} | 122 +++--- ...tyles-MLBARMBW.css => styles-4UAXOINJ.css} | 2 +- src/app/interfaces.ts | 3 +- .../taskplanner/taskplanner.component.html | 97 ++-- src/app/taskplanner/taskplanner.component.ts | 296 +++++++++---- src/app/tp-theme/_tp-input-group.scss | 10 +- 12 files changed, 557 insertions(+), 403 deletions(-) rename docs/{chunk-BZLeeQ-I.js => chunk-2CI1XlO3.js} (99%) rename docs/{chunk-Df2FdJZg.js => chunk-B6Rq9kDv.js} (99%) rename docs/{chunk-iest0pt_.js => chunk-D20stDwr.js} (99%) rename docs/{chunk-B-Z5f9Bq.js => chunk-rg47k1QY.js} (99%) rename docs/{main-ZSOIWSXQ.js => main-GF4OEYNH.js} (77%) rename docs/{styles-MLBARMBW.css => styles-4UAXOINJ.css} (97%) diff --git a/docs/3rdpartylicenses.txt b/docs/3rdpartylicenses.txt index 4f1202a..effe086 100644 --- a/docs/3rdpartylicenses.txt +++ b/docs/3rdpartylicenses.txt @@ -647,213 +647,6 @@ 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. --------------------------------------------------------------------------------- -Package: dompurify -License: "(MPL-2.0 OR Apache-2.0)" - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. - -------------------------------------------------------------------------------- Package: core-js License: "MIT" @@ -1171,3 +964,210 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- +Package: dompurify +License: "(MPL-2.0 OR Apache-2.0)" + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + +-------------------------------------------------------------------------------- diff --git a/docs/chunk-BZLeeQ-I.js b/docs/chunk-2CI1XlO3.js similarity index 99% rename from docs/chunk-BZLeeQ-I.js rename to docs/chunk-2CI1XlO3.js index dea11a2..b1e11e0 100644 --- a/docs/chunk-BZLeeQ-I.js +++ b/docs/chunk-2CI1XlO3.js @@ -1,4 +1,4 @@ -import{n as u,o as __esmMin,r as v,t as init_chunk_IFGU66OU}from"./main-ZSOIWSXQ.js";function mc(i,e,r,t,a,n,o){try{var s=i[n](o),u=s.value}catch(l){r(l);return}s.done?e(u):Promise.resolve(u).then(t,a)}function be(i){return function(){var e=this,r=arguments;return new Promise(function(t,a){var n=i.apply(e,r);function o(u){mc(n,t,a,o,s,`next`,u)}function s(u){mc(n,t,a,o,s,`throw`,u)}o(void 0)})}}function $e(i){"@babel/helpers - typeof";return $e=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},$e(i)}function ov(i,e){if($e(i)!=`object`||!i)return i;var r=i[Symbol.toPrimitive];if(r!==void 0){var t=r.call(i,e||`default`);if($e(t)!=`object`)return t;throw new TypeError(`@@toPrimitive must return a primitive value.`)}return(e===`string`?String:Number)(i)}function uv(i){var e=ov(i,`string`);return $e(e)==`symbol`?e:e+``}function ri(i,e,r){return(e=uv(e))in i?Object.defineProperty(i,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):i[e]=r,i}function Jv(i,e){if(typeof e!=`function`&&e!==null)throw new TypeError(`Class extends value `+String(e)+` is not a constructor or null`);function r(){this.constructor=i}Zv(i,e),i.prototype=e===null?Object.create(e):(r.prototype=e.prototype,new r)}function $T(i){var e=``;Array.isArray(i)||(i=[i]);for(var r=0;ri.phi1&&(i.phi2-=2*Me),i.sweepFlag===1&&i.phi2t)return[];if(t===0)return[[i*r/(i*i+e*e),e*r/(i*i+e*e)]];var a=Math.sqrt(t);return[[(i*r+e*a)/(i*i+e*e),(e*r-i*a)/(i*i+e*e)],[(i*r-e*a)/(i*i+e*e),(e*r+i*a)/(i*i+e*e)]]}function Yv(i,e,r){return(1-r)*i+r*e}function Xv(i,e,r,t){return i+Math.cos(t/180*Me)*e+Math.sin(t/180*Me)*r}function Wv(i,e,r,t){var a=1e-6,n=e-i,o=r-e,s=3*n+3*(t-r)-6*o,u=6*(o-n),l=3*n;return Math.abs(s)>>E;if(o[x+3]=Ti,Ti!==0){var Oi=255/Ti;o[x]=(R*T>>>E)*Oi,o[x+1]=(re*T>>>E)*Oi,o[x+2]=(ce*T>>>E)*Oi}else o[x]=o[x+1]=o[x+2]=0;R-=Q,re-=Y,ce-=K,me-=I,Q-=y.r,Y-=y.g,K-=y.b,I-=y.a;var Ve=xi+n+1;Ve=O+(Ve>>E,ie>0?(ie=255/ie,o[ae]=(tt*T>>>E)*ie,o[ae+1]=(it*T>>>E)*ie,o[ae+2]=(at*T>>>E)*ie):o[ae]=o[ae+1]=o[ae+2]=0,tt-=Si,it-=Ei,at-=wi,nt-=Ci,Si-=y.r,Ei-=y.g,wi-=y.b,Ci-=y.a,ae=Qe+((ae=Ni+h)0&&arguments[0]!==void 0?arguments[0]:{},e={window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:i,createCanvas(r,t){return new OffscreenCanvas(r,t)},createImage(r){return be(function*(){var a=yield(yield fetch(r)).blob();return yield createImageBitmap(a)})()}};return(typeof DOMParser<`u`||typeof i>`u`)&&Reflect.deleteProperty(e,`DOMParser`),e}function oO(i){var{DOMParser:e,canvas:r,fetch:t}=i;return{window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:e,fetch:t,createCanvas:r.createCanvas,createImage:r.loadImage}}function mr(i){return i.replace(/(?!\u3000)\s+/gm,` `)}function uO(i){return i.replace(/^[\n \t]+/,``)}function lO(i){return i.replace(/[\n \t]+$/,``)}function se(i){return((i||``).match(/-?(\d+(?:\.\d*(?:[eE][+-]?\d+)?)?|\.\d+)(?=\D|$)/gm)||[]).map(parseFloat)}function cO(i){return hO.test(i)?i.toLowerCase():i}function og(i){var e=/url\(('([^']+)'|"([^"]+)"|([^'")]+))\)/.exec(i)||[];return e[2]||e[3]||e[4]}function fO(i){if(!i.startsWith(`rgb`))return i;var e=3;return i.replace(/\d+(\.\d+)?/g,(t,a)=>e--&&a?String(Math.round(parseFloat(t))):t)}function Ge(i,e){var r=e.exec(i);return r?[i.replace(e,` `),r.length]:[i,0]}function xO(i){var e=[0,0,0],r=i.replace(/:not\(([^)]*)\)/g,` $1 `).replace(/{[\s\S]*/gm,` `),t=0;return[r,t]=Ge(r,vO),e[1]+=t,[r,t]=Ge(r,gO),e[0]+=t,[r,t]=Ge(r,dO),e[1]+=t,[r,t]=Ge(r,pO),e[2]+=t,[r,t]=Ge(r,yO),e[1]+=t,[r,t]=Ge(r,mO),e[1]+=t,r=r.replace(/[*\s+>~]/g,` `).replace(/[#.]/g,` `),[r,t]=Ge(r,bO),e[2]+=t,e.join(``)}function ug(i){return Math.sqrt(Math.pow(i[0],2)+Math.pow(i[1],2))}function Yn(i,e){return(i[0]*e[0]+i[1]*e[1])/(ug(i)*ug(e))}function lg(i,e){return(i[0]*e[1]`u`?i:i.trim().split(`,`).map(wO).join(`,`)}function qO(i){if(!i)return``;var e=i.trim().toLowerCase();switch(e){case`normal`:case`italic`:case`oblique`:case`inherit`:case`initial`:case`unset`:return e;default:return/^oblique\s+(-|)\d+deg$/.test(e)?e:``}}function AO(i){if(!i)return``;var e=i.trim().toLowerCase();switch(e){case`normal`:case`bold`:case`lighter`:case`bolder`:case`inherit`:case`initial`:case`unset`:return e;default:return/^[\d.]+$/.test(e)?e:``}}function bg(i,e){var r=Object.keys(i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(i);e&&(t=t.filter(function(a){return Object.getOwnPropertyDescriptor(i,a).enumerable})),r.push.apply(r,t)}return r}function oi(i){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:!1,r=document.createElement(`img`);return e&&(r.crossOrigin=`Anonymous`),new Promise((t,a)=>{r.onload=()=>{t(r)},r.onerror=(n,o,s,u,l)=>{a(l)},r.src=i})}),Is.apply(this,arguments)}function Og(i,e){var r=Object.keys(i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(i);e&&(t=t.filter(function(a){return Object.getOwnPropertyDescriptor(i,a).enumerable})),r.push.apply(r,t)}return r}function He(i){for(var e=1;e{init_chunk_IFGU66OU();M=u((Ii,zs)=>{"use strict";var br=function(i){return i&&i.Math===Math&&i};zs.exports=br(typeof globalThis==`object`&&globalThis)||br(typeof window==`object`&&window)||br(typeof self==`object`&&self)||br(typeof global==`object`&&global)||br(typeof Ii==`object`&&Ii)||(function(){return this})()||Function(`return this`)()});_=u((kO,$s)=>{"use strict";$s.exports=function(i){try{return!!i()}catch{return!0}}});ue=u((BO,Gs)=>{"use strict";Gs.exports=!_()(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})});xr=u((jO,Hs)=>{"use strict";Hs.exports=!_()(function(){var i=function(){}.bind();return typeof i!=`function`||i.hasOwnProperty(`prototype`)})});H=u((UO,Ys)=>{"use strict";var qg=xr(),ut=Function.prototype.call;Ys.exports=qg?ut.bind(ut):function(){return ut.apply(ut,arguments)}});Ks=u(Qs=>{"use strict";var Xs={}.propertyIsEnumerable,Ws=Object.getOwnPropertyDescriptor;Qs.f=Ws&&!Xs.call({1:2},1)?function(e){var r=Ws(this,e);return!!r&&r.enumerable}:Xs});lt=u((zO,Zs)=>{"use strict";Zs.exports=function(i,e){return{enumerable:!(i&1),configurable:!(i&2),writable:!(i&4),value:e}}});D=u(($O,ro)=>{"use strict";var Js=xr(),eo=Function.prototype,Mi=eo.call,Pg=Js&&eo.bind.bind(Mi,Mi);ro.exports=Js?Pg:function(i){return function(){return Mi.apply(i,arguments)}}});xe=u((GO,io)=>{"use strict";var to=D(),Rg=to({}.toString),Ng=to(``.slice);io.exports=function(i){return Ng(Rg(i),8,-1)}});_i=u((HO,ao)=>{"use strict";var Ig=D(),Mg=_(),Vg=xe(),Vi=Object,_g=Ig(``.split);ao.exports=Mg(function(){return!Vi(`z`).propertyIsEnumerable(0)})?function(i){return Vg(i)===`String`?_g(i,``):Vi(i)}:Vi});Tr=u((YO,no)=>{"use strict";no.exports=function(i){return i==null}});le=u((XO,so)=>{"use strict";var Dg=Tr(),Lg=TypeError;so.exports=function(i){if(Dg(i))throw new Lg(`Can't call method on `+i);return i}});Ke=u((WO,oo)=>{"use strict";var kg=_i(),Bg=le();oo.exports=function(i){return kg(Bg(i))}});L=u((QO,uo)=>{"use strict";var Di=typeof document==`object`&&document.all;uo.exports=typeof Di>`u`&&Di!==void 0?function(i){return typeof i==`function`||i===Di}:function(i){return typeof i==`function`}});te=u((KO,lo)=>{"use strict";var jg=L();lo.exports=function(i){return typeof i==`object`?i!==null:jg(i)}});Pe=u((ZO,ho)=>{"use strict";var Li=M(),Ug=L(),Fg=function(i){return Ug(i)?i:void 0};ho.exports=function(i,e){return arguments.length<2?Fg(Li[i]):Li[i]&&Li[i][e]}});Or=u((JO,co)=>{"use strict";co.exports=D()({}.isPrototypeOf)});Ze=u((eS,go)=>{"use strict";var fo=M().navigator,vo=fo&&fo.userAgent;go.exports=vo?String(vo):``});ct=u((rS,To)=>{"use strict";var xo=M(),ki=Ze(),po=xo.process,yo=xo.Deno,mo=po&&po.versions||yo&&yo.version,bo=mo&&mo.v8,fe,ht;bo&&(fe=bo.split(`.`),ht=fe[0]>0&&fe[0]<4?1:+(fe[0]+fe[1]));!ht&&ki&&(fe=ki.match(/Edge\/(\d+)/),(!fe||fe[1]>=74)&&(fe=ki.match(/Chrome\/(\d+)/),fe&&(ht=+fe[1])));To.exports=ht});Bi=u((tS,So)=>{"use strict";var Oo=ct(),Gg=_(),Yg=M().String;So.exports=!!Object.getOwnPropertySymbols&&!Gg(function(){var i=Symbol(`symbol detection`);return!Yg(i)||!(Object(i)instanceof Symbol)||!Symbol.sham&&Oo&&Oo<41})});ji=u((iS,Eo)=>{"use strict";Eo.exports=Bi()&&!Symbol.sham&&typeof Symbol.iterator==`symbol`});Ui=u((aS,wo)=>{"use strict";var Wg=Pe(),Qg=L(),Kg=Or(),Zg=ji(),Jg=Object;wo.exports=Zg?function(i){return typeof i==`symbol`}:function(i){var e=Wg(`Symbol`);return Qg(e)&&Kg(e.prototype,Jg(i))}});Sr=u((nS,Co)=>{"use strict";var ed=String;Co.exports=function(i){try{return ed(i)}catch{return`Object`}}});Te=u((sS,qo)=>{"use strict";var rd=L(),td=Sr(),id=TypeError;qo.exports=function(i){if(rd(i))return i;throw new id(td(i)+` is not a function`)}});ke=u((oS,Ao)=>{"use strict";var ad=Te(),nd=Tr();Ao.exports=function(i,e){var r=i[e];return nd(r)?void 0:ad(r)}});Ro=u((uS,Po)=>{"use strict";var Fi=H(),zi=L(),$i=te(),sd=TypeError;Po.exports=function(i,e){var r,t;if(e===`string`&&zi(r=i.toString)&&!$i(t=Fi(r,i))||zi(r=i.valueOf)&&!$i(t=Fi(r,i))||e!==`string`&&zi(r=i.toString)&&!$i(t=Fi(r,i)))return t;throw new sd(`Can't convert object to primitive value`)}});ve=u((lS,No)=>{"use strict";No.exports=!1});ft=u((hS,Mo)=>{"use strict";var Io=M(),od=Object.defineProperty;Mo.exports=function(i,e){try{od(Io,i,{value:e,configurable:!0,writable:!0})}catch{Io[i]=e}return e}});vt=u((cS,Do)=>{"use strict";var ud=ve(),ld=M(),hd=ft(),Vo=`__core-js_shared__`,_o=Do.exports=ld[Vo]||hd(Vo,{});(_o.versions||(_o.versions=[])).push({version:`3.50.0`,mode:ud?`pure`:`global`,copyright:`© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.`,license:`https://github.com/zloirock/core-js/blob/v3.50.0/LICENSE`,source:`https://github.com/zloirock/core-js`})});gt=u((fS,ko)=>{"use strict";var Lo=vt(),cd=Object.create||Object;ko.exports=function(i,e){return Lo[i]||(Lo[i]=e||cd(null))}});Er=u((vS,Bo)=>{"use strict";var fd=le(),vd=Object;Bo.exports=function(i){return vd(fd(i))}});he=u((gS,jo)=>{"use strict";var gd=D(),dd=Er(),pd=gd({}.hasOwnProperty);jo.exports=Object.hasOwn||function(e,r){return pd(dd(e),r)}});Gi=u((dS,Uo)=>{"use strict";var yd=D(),md=0,bd=Math.random(),xd=yd(1.1.toString);Uo.exports=function(i){return`Symbol(`+(i===void 0?``:i)+`)_`+xd(++md+bd,36)}});z=u((pS,zo)=>{"use strict";var Td=M(),Od=gt(),Fo=he(),Sd=Gi(),Ed=Bi(),wd=ji(),Je=Td.Symbol,Hi=Od(`wks`),Cd=wd?Je.for||Je:Je&&Je.withoutSetter||Sd;zo.exports=function(i){return Fo(Hi,i)||(Hi[i]=Ed&&Fo(Je,i)?Je[i]:Cd(`Symbol.`+i)),Hi[i]}});Yo=u((yS,Ho)=>{"use strict";var qd=H(),$o=te(),Go=Ui(),Ad=ke(),Pd=Ro(),Rd=z(),Nd=TypeError,Id=Rd(`toPrimitive`);Ho.exports=function(i,e){if(!$o(i)||Go(i))return i;var r=Ad(i,Id),t;if(r){if(e===void 0&&(e=`default`),t=qd(r,i,e),!$o(t)||Go(t))return t;throw new Nd(`Can't convert object to primitive value`)}return e===void 0&&(e=`number`),Pd(i,e)}});Yi=u((mS,Xo)=>{"use strict";var Md=Yo(),Vd=Ui();Xo.exports=function(i){var e=Md(i,`string`);return Vd(e)?e:e+``}});wr=u((bS,Qo)=>{"use strict";var _d=M(),Wo=te(),Xi=_d.document,Dd=Wo(Xi)&&Wo(Xi.createElement);Qo.exports=function(i){return Dd?Xi.createElement(i):{}}});Wi=u((xS,Ko)=>{"use strict";var Ld=ue(),kd=_(),Bd=wr();Ko.exports=!Ld&&!kd(function(){return Object.defineProperty(Bd(`div`),"a",{get:function(){return 7}}).a!==7})});Cr=u(Jo=>{"use strict";var jd=ue(),Ud=H(),Fd=Ks(),zd=lt(),$d=Ke(),Gd=Yi(),Hd=he(),Yd=Wi(),Zo=Object.getOwnPropertyDescriptor;Jo.f=jd?Zo:function(e,r){if(e=$d(e),r=Gd(r),Yd)try{return Zo(e,r)}catch{}if(Hd(e,r))return zd(!Ud(Fd.f,e,r),e[r])}});Qi=u((OS,eu)=>{"use strict";var Xd=ue(),Wd=_();eu.exports=Xd&&Wd(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})});J=u((SS,ru)=>{"use strict";var Qd=te(),Kd=String,Zd=TypeError;ru.exports=function(i){if(Qd(i))return i;throw new Zd(Kd(i)+` is not an object`)}});Oe=u(iu=>{"use strict";var Jd=ue(),ep=Wi(),rp=Qi(),dt=J(),tu=Yi(),tp=TypeError,Ki=Object.defineProperty,ip=Object.getOwnPropertyDescriptor,Zi=`enumerable`,Ji=`configurable`,ea=`writable`;iu.f=Jd?rp?function(e,r,t){if(dt(e),r=tu(r),dt(t),typeof e==`function`&&r===`prototype`&&`value`in t&&ea in t&&!t[ea]){var a=ip(e,r);a&&a[ea]&&(e[r]=t.value,t={configurable:Ji in t?t[Ji]:a[Ji],enumerable:Zi in t?t[Zi]:a[Zi],writable:!1})}return Ki(e,r,t)}:Ki:function(e,r,t){if(dt(e),r=tu(r),dt(t),ep)try{return Ki(e,r,t)}catch{}if(`get`in t||`set`in t)throw new tp(`Accessors not supported`);return`value`in t&&(e[r]=t.value),e}});er=u((wS,au)=>{"use strict";var ap=ue(),np=Oe(),sp=lt();au.exports=ap?function(i,e,r){return np.f(i,e,sp(1,r))}:function(i,e,r){return i[e]=r,i}});qr=u((CS,su)=>{"use strict";var ra=ue(),op=he(),nu=Function.prototype,up=ra&&Object.getOwnPropertyDescriptor,ta=op(nu,`name`);su.exports={EXISTS:ta,PROPER:ta&&function(){}.name===`something`,CONFIGURABLE:ta&&(!ra||ra&&up(nu,`name`).configurable)}});pt=u((qS,ou)=>{"use strict";var cp=D(),fp=L(),ia=vt(),vp=cp(Function.toString);fp(ia.inspectSource)||(ia.inspectSource=function(i){return vp(i)});ou.exports=ia.inspectSource});hu=u((AS,lu)=>{"use strict";var gp=M(),dp=L(),uu=gp.WeakMap;lu.exports=dp(uu)&&/native code/.test(String(uu))});yt=u((PS,fu)=>{"use strict";var pp=gt(),yp=Gi(),cu=pp(`keys`);fu.exports=function(i){return cu[i]||(cu[i]=yp(i))}});mt=u((RS,vu)=>{"use strict";vu.exports={}});Pr=u((NS,pu)=>{"use strict";var mp=hu(),du=M(),bp=te(),xp=er(),aa=he(),na=vt(),Tp=yt(),Op=mt(),gu=`Object already initialized`,sa=du.TypeError,Sp=du.WeakMap,bt,Ar,xt,Ep=function(i){return xt(i)?Ar(i):bt(i,{})},wp=function(i){return function(e){var r;if(!bp(e)||(r=Ar(e)).type!==i)throw new sa(`Incompatible receiver, `+i+` required`);return r}};mp||na.state?(ge=na.state||(na.state=new Sp),ge.get=ge.get,ge.has=ge.has,ge.set=ge.set,bt=function(i,e){if(ge.has(i))throw new sa(gu);return e.facade=i,ge.set(i,e),e},Ar=function(i){return ge.get(i)||{}},xt=function(i){return ge.has(i)}):(Be=Tp(`state`),Op[Be]=!0,bt=function(i,e){if(aa(i,Be))throw new sa(gu);return e.facade=i,xp(i,Be,e),e},Ar=function(i){return aa(i,Be)?i[Be]:{}},xt=function(i){return aa(i,Be)});var ge,Be;pu.exports={set:bt,get:Ar,has:xt,enforce:Ep,getterFor:wp}});la=u((IS,bu)=>{"use strict";var ua=D(),Cp=_(),qp=L(),Tt=he(),oa=ue(),Ap=qr().CONFIGURABLE,Pp=pt(),mu=Pr(),Rp=mu.enforce,Np=mu.get,yu=String,Ot=Object.defineProperty,Ip=ua(``.slice),Mp=ua(``.replace),Vp=ua([].join),_p=oa&&!Cp(function(){return Ot(function(){},`length`,{value:8}).length!==8}),Dp=String(String).split(`String`),Lp=bu.exports=function(i,e,r){Ip(yu(e),0,7)===`Symbol(`&&(e=`[`+Mp(yu(e),/^Symbol\(([^)]*)\).*$/,`$1`)+`]`),r&&r.getter&&(e=`get `+e),r&&r.setter&&(e=`set `+e),(!Tt(i,`name`)||Ap&&i.name!==e)&&(oa?Ot(i,`name`,{value:e,configurable:!0}):i.name=e),_p&&r&&Tt(r,`arity`)&&i.length!==r.arity&&Ot(i,`length`,{value:r.arity});try{r&&Tt(r,`constructor`)&&r.constructor?oa&&Ot(i,`prototype`,{writable:!1}):i.prototype&&(i.prototype=void 0)}catch{}var t=Rp(i);return Tt(t,`source`)||(t.source=Vp(Dp,typeof e==`string`?e:``)),i};Function.prototype.toString=Lp(function(){return qp(this)&&Np(this).source||Pp(this)},`toString`)});Re=u((MS,xu)=>{"use strict";var kp=L(),Bp=Oe(),jp=la(),Up=ft();xu.exports=function(i,e,r,t){t||(t={});var a=t.enumerable,n=t.name!==void 0?t.name:e;if(kp(r)&&jp(r,n,t),t.global)a?i[e]=r:Up(e,r);else{try{t.unsafe?i[e]&&(a=!0):delete i[e]}catch{}a?i[e]=r:Bp.f(i,e,{value:r,enumerable:!1,configurable:!t.nonConfigurable,writable:!t.nonWritable})}return i}});Ou=u((VS,Tu)=>{"use strict";var Fp=Math.ceil,zp=Math.floor;Tu.exports=Math.trunc||function(e){var r=+e;return(r>0?zp:Fp)(r)}});Rr=u((_S,Su)=>{"use strict";var $p=Ou();Su.exports=function(i){var e=+i;return e!==e||e===0?0:$p(e)}});wu=u((DS,Eu)=>{"use strict";var Gp=Rr(),Hp=Math.max,Yp=Math.min;Eu.exports=function(i,e){var r=Gp(i);return r<0?Hp(r+e,0):Yp(r,e)}});je=u((LS,Cu)=>{"use strict";var Xp=Rr(),Wp=Math.min;Cu.exports=function(i){var e=Xp(i);return e>0?Wp(e,9007199254740991):0}});St=u((kS,qu)=>{"use strict";var Qp=je();qu.exports=function(i){return Qp(i.length)}});ha=u((BS,Pu)=>{"use strict";var Kp=Ke(),Zp=wu(),Jp=St(),Au=function(i){return function(e,r,t){var a=Kp(e),n=Jp(a);if(n===0)return!i&&-1;var o=Zp(t,n),s;if(i&&r!==r){for(;n>o;)if(s=a[o++],s!==s)return!0}else for(;n>o;o++)if((i||o in a)&&a[o]===r)return i||o||0;return!i&&-1}};Pu.exports={includes:Au(!0),indexOf:Au(!1)}});fa=u((jS,Nu)=>{"use strict";var ey=D(),ca=he(),ry=Ke(),ty=ha().indexOf,iy=mt(),Ru=ey([].push);Nu.exports=function(i,e){var r=ry(i),t=0,a=[],n;for(n in r)!ca(iy,n)&&ca(r,n)&&Ru(a,n);for(;e.length>t;)ca(r,n=e[t++])&&(~ty(a,n)||Ru(a,n));return a}});Et=u((US,Iu)=>{"use strict";Iu.exports=[`constructor`,`hasOwnProperty`,`isPrototypeOf`,`propertyIsEnumerable`,`toLocaleString`,`toString`,`valueOf`]});Vu=u(Mu=>{"use strict";var ay=fa(),sy=Et().concat(`length`,`prototype`);Mu.f=Object.getOwnPropertyNames||function(e){return ay(e,sy)}});Du=u(_u=>{"use strict";_u.f=Object.getOwnPropertySymbols});ku=u(($S,Lu)=>{"use strict";var oy=Pe(),uy=D(),ly=Vu(),hy=Du(),cy=J(),fy=uy([].concat);Lu.exports=oy(`Reflect`,`ownKeys`)||function(e){var r=ly.f(cy(e)),t=hy.f;return t?fy(r,t(e)):r}});Uu=u((GS,ju)=>{"use strict";var Bu=he(),vy=ku(),gy=Cr(),dy=Oe();ju.exports=function(i,e,r){for(var t=vy(e),a=dy.f,n=gy.f,o=0;o{"use strict";var py=_(),yy=L(),my=/#|\.prototype\./,Nr=function(i,e){var r=xy[by(i)];return r===Oy?!0:r===Ty?!1:yy(e)?py(e):!!e},by=Nr.normalize=function(i){return String(i).replace(my,`.`).toLowerCase()},xy=Nr.data={},Ty=Nr.NATIVE=`N`,Oy=Nr.POLYFILL=`P`;Fu.exports=Nr});ee=u((YS,zu)=>{"use strict";var wt=M(),Sy=Cr().f,Ey=er(),wy=Re(),Cy=ft(),qy=Uu(),Ay=va();zu.exports=function(i,e){var r=i.target,t=i.global,a=i.stat,n,o,s,u,l,h;if(t?o=wt:a?o=wt[r]||Cy(r,{}):o=wt[r]&&wt[r].prototype,o)for(s in e){if(l=e[s],i.dontCallGetSet?(h=Sy(o,s),u=h&&h.value):u=o[s],n=Ay(t?s:r+(a?`.`:`#`)+s,i.forced),!n&&u!==void 0){if(typeof l==typeof u)continue;qy(l,u)}(i.sham||u&&u.sham)&&Ey(l,`sham`,!0),wy(o,s,l,i)}}});ga=u((XS,$u)=>{"use strict";var Ir=M(),Py=Ze(),Ry=xe(),Ct=function(i){return Py.slice(0,i.length)===i};$u.exports=(function(){return Ct(`Bun/`)?`BUN`:Ct(`Cloudflare-Workers`)?`CLOUDFLARE`:Ct(`Deno/`)?`DENO`:Ct(`Node.js/`)?`NODE`:Ir.Bun&&typeof Bun.version==`string`?`BUN`:Ir.Deno&&typeof Deno.version==`object`?`DENO`:Ry(Ir.process)===`process`?`NODE`:Ir.window&&Ir.document?`BROWSER`:`REST`})()});Mr=u((WS,Gu)=>{"use strict";Gu.exports=ga()===`NODE`});Yu=u((QS,Hu)=>{"use strict";Hu.exports=M()});Wu=u((KS,Xu)=>{"use strict";var My=D(),Vy=Te();Xu.exports=function(i,e,r){try{return My(Vy(Object.getOwnPropertyDescriptor(i,e)[r]))}catch{}}});Ku=u((ZS,Qu)=>{"use strict";var _y=te();Qu.exports=function(i){return _y(i)||i===null}});Ju=u((JS,Zu)=>{"use strict";var Dy=Ku(),Ly=String,ky=TypeError;Zu.exports=function(i){if(Dy(i))return i;throw new ky(`Can't set `+Ly(i)+` as a prototype`)}});da=u((eE,el)=>{"use strict";var By=Wu(),jy=te(),Uy=le(),Fy=Ju();el.exports=Object.setPrototypeOf||(`__proto__`in{}?(function(){var i=!1,e={},r;try{r=By(Object.prototype,`__proto__`,`set`),r(e,[]),i=e instanceof Array}catch{}return function(a,n){return Uy(a),Fy(n),jy(a)&&(i?r(a,n):a.__proto__=n),a}})():void 0)});Vr=u((rE,tl)=>{"use strict";var zy=Oe().f,$y=he(),rl=z()(`toStringTag`);tl.exports=function(i,e,r){i&&!r&&(i=i.prototype),i&&!$y(i,rl)&&zy(i,rl,{configurable:!0,value:e})}});nl=u((tE,al)=>{"use strict";var il=la(),Hy=Oe();al.exports=function(i,e,r){return r.get&&il(r.get,e,{getter:!0}),r.set&&il(r.set,e,{setter:!0}),Hy.f(i,e,r)}});ul=u((iE,ol)=>{"use strict";var Yy=Pe(),Xy=nl(),Wy=z(),Qy=ue(),sl=Wy(`species`);ol.exports=function(i){var e=Yy(i);Qy&&e&&!e[sl]&&Xy(e,sl,{configurable:!0,get:function(){return this}})}});hl=u((aE,ll)=>{"use strict";var Ky=Or(),Zy=TypeError;ll.exports=function(i,e){if(Ky(e,i))return i;throw new Zy(`Incorrect invocation`)}});vl=u((nE,fl)=>{"use strict";var e0=z()(`toStringTag`),cl={};cl[e0]=`z`;fl.exports=String(cl)===`[object z]`});pa=u((sE,gl)=>{"use strict";var r0=vl(),t0=L(),qt=xe(),a0=z()(`toStringTag`),n0=Object,s0=qt((function(){return arguments})())===`Arguments`,o0=function(i,e){try{return i[e]}catch{}};gl.exports=r0?qt:function(i){var e,r,t;return i===void 0?`Undefined`:i===null?`Null`:typeof(r=o0(e=n0(i),a0))==`string`?r:s0?qt(e):(t=qt(e))===`Object`&&t0(e.callee)?`Arguments`:t}});xl=u((oE,bl)=>{"use strict";var u0=D(),l0=_(),dl=L(),h0=pa(),c0=Pe(),f0=pt(),pl=function(){},yl=c0(`Reflect`,`construct`),ya=/^\s*(?:class|function)\b/,v0=u0(ya.exec),g0=!ya.test(pl),_r=function(e){if(!dl(e))return!1;try{return yl(pl,[],e),!0}catch{return!1}},ml=function(e){if(!dl(e))return!1;switch(h0(e)){case`AsyncFunction`:case`GeneratorFunction`:case`AsyncGeneratorFunction`:return!1}try{return g0||!!v0(ya,f0(e))}catch{return!0}};ml.sham=!0;bl.exports=!yl||l0(function(){var i;return _r(_r.call)||!_r(Object)||!_r(function(){i=!0})||i})?ml:_r});Ol=u((uE,Tl)=>{"use strict";var d0=xl(),p0=Sr(),y0=TypeError;Tl.exports=function(i){if(d0(i))return i;throw new y0(p0(i)+` is not a constructor`)}});ma=u((lE,El)=>{"use strict";var Sl=J(),m0=Ol(),b0=Tr(),T0=z()(`species`);El.exports=function(i,e){var r=Sl(i).constructor,t;return r===void 0||b0(t=Sl(r)[T0])?e:m0(t)}});ba=u((hE,Al)=>{"use strict";var O0=xr(),ql=Function.prototype,wl=ql.apply,Cl=ql.call;Al.exports=typeof Reflect==`object`&&Reflect.apply||(O0?Cl.bind(wl):function(){return Cl.apply(wl,arguments)})});Dr=u((cE,Pl)=>{"use strict";var S0=xe(),E0=D();Pl.exports=function(i){if(S0(i)===`Function`)return E0(i)}});At=u((fE,Nl)=>{"use strict";var Rl=Dr(),w0=Te(),C0=xr(),q0=Rl(Rl.bind);Nl.exports=function(i,e){return w0(i),e===void 0?i:C0?q0(i,e):function(){return i.apply(e,arguments)}}});xa=u((vE,Il)=>{"use strict";Il.exports=Pe()(`document`,`documentElement`)});Vl=u((gE,Ml)=>{"use strict";Ml.exports=D()([].slice)});Dl=u((dE,_l)=>{"use strict";var R0=TypeError;_l.exports=function(i,e){if(i{"use strict";var Ll=Ze();kl.exports=/ipad|iphone|ipod/i.test(Ll)&&/applewebkit/i.test(Ll)});Ra=u((yE,Yl)=>{"use strict";var ne=M(),N0=ba(),I0=At(),Bl=L(),M0=he(),Hl=_(),jl=xa(),V0=Vl(),Ul=wr(),_0=Dl(),D0=Ta(),L0=Mr(),qa=ne.setImmediate,Aa=ne.clearImmediate,k0=ne.process,Oa=ne.Dispatch,B0=ne.Function,Fl=ne.MessageChannel,j0=ne.String,Sa=0,Lr={},zl=`onreadystatechange`,kr,Ue,Ea,wa;Hl(function(){kr=ne.location});var Pa=function(i){if(M0(Lr,i)){var e=Lr[i];delete Lr[i],e()}},Ca=function(i){return function(){Pa(i)}},$l=function(i){Pa(i.data)},Gl=function(i){ne.postMessage(j0(i),kr.protocol+`//`+kr.host)};(!qa||!Aa)&&(qa=function(e){_0(arguments.length,1);var r=Bl(e)?e:B0(e),t=V0(arguments,1);return Lr[++Sa]=function(){N0(r,void 0,t)},Ue(Sa),Sa},Aa=function(e){delete Lr[e]},L0?Ue=function(i){k0.nextTick(Ca(i))}:Oa&&Oa.now?Ue=function(i){Oa.now(Ca(i))}:Fl&&!D0?(Ea=new Fl,wa=Ea.port2,Ea.port1.onmessage=$l,Ue=I0(wa.postMessage,wa)):ne.addEventListener&&Bl(ne.postMessage)&&!ne.importScripts&&kr&&kr.protocol!==`file:`&&!Hl(Gl)?(Ue=Gl,ne.addEventListener(`message`,$l,!1)):zl in Ul(`script`)?Ue=function(i){jl.appendChild(Ul(`script`))[zl]=function(){jl.removeChild(this),Pa(i)}}:Ue=function(i){setTimeout(Ca(i),0)});Yl.exports={set:qa,clear:Aa}});Ql=u((mE,Wl)=>{"use strict";var Xl=M(),U0=ue(),F0=Object.getOwnPropertyDescriptor;Wl.exports=function(i){if(!U0)return Xl[i];var e=F0(Xl,i);return e&&e.value}});Na=u((bE,Zl)=>{"use strict";var Kl=function(){this.head=null,this.tail=null};Kl.prototype={add:function(i){var e={item:i,next:null},r=this.tail;r?r.next=e:this.head=e,this.tail=e},get:function(){var i=this.head;if(i)return(this.head=i.next)===null&&(this.tail=null),i.item}};Zl.exports=Kl});eh=u((xE,Jl)=>{"use strict";var z0=Ze();Jl.exports=/ipad|iphone|ipod/i.test(z0)&&typeof Pebble<`u`});th=u((TE,rh)=>{"use strict";var $0=Ze();rh.exports=/web0s(?!.*chrome)/i.test($0)});lh=u((OE,uh)=>{"use strict";var tr=M(),G0=Ql(),ih=At(),Ia=Ra().set,H0=Na(),Y0=Ta(),X0=eh(),W0=th(),Ma=Mr(),ah=tr.MutationObserver||tr.WebKitMutationObserver,nh=tr.document,sh=tr.process,Pt=tr.Promise,Da=G0(`queueMicrotask`),rr,Va,_a,Rt,oh;Da||(Br=new H0,jr=function(){var i,e;for(Ma&&(i=sh.domain)&&i.exit();e=Br.get();)try{e()}catch(r){throw Br.head&&rr(),r}i&&i.enter()},!Y0&&!Ma&&!W0&&ah&&nh?(Va=!0,_a=nh.createTextNode(``),new ah(jr).observe(_a,{characterData:!0}),rr=function(){_a.data=Va=!Va}):!X0&&Pt&&Pt.resolve?(Rt=Pt.resolve(void 0),Rt.constructor=Pt,oh=ih(Rt.then,Rt),rr=function(){oh(jr)}):Ma?rr=function(){sh.nextTick(jr)}:(Ia=ih(Ia,tr),rr=function(){Ia(jr)}),Da=function(i){Br.head||rr(),Br.add(i)});var Br,jr;uh.exports=Da});ch=u((SE,hh)=>{"use strict";hh.exports=function(i,e){try{arguments.length===1?console.error(i):console.error(i,e)}catch{}}});Nt=u((EE,fh)=>{"use strict";fh.exports=function(i){try{return{error:!1,value:i()}}catch(e){return{error:!0,value:e}}}});ir=u((wE,vh)=>{"use strict";vh.exports=M().Promise});ar=u((CE,yh)=>{"use strict";var K0=M(),Ur=ir(),Z0=L(),J0=va(),em=pt(),rm=z(),gh=ga(),tm=ve(),La=ct(),dh=Ur&&Ur.prototype,im=rm(`species`),ka=!1,ph=Z0(K0.PromiseRejectionEvent);yh.exports={CONSTRUCTOR:J0(`Promise`,function(){var i=em(Ur),e=i!==String(Ur);if(!e&&La===66||tm&&!(dh.catch&&dh.finally))return!0;if(!La||La<51||!/native code/.test(i)){var r=new Ur(function(n){n(1)}),t=function(n){n(function(){},function(){})},a=r.constructor={};if(a[im]=t,ka=r.then(function(){})instanceof t,!ka)return!0}return!e&&(gh===`BROWSER`||gh===`DENO`)&&!ph}),REJECTION_EVENT:ph,SUBCLASSING:ka}});nr=u((qE,bh)=>{"use strict";var mh=Te(),nm=TypeError,sm=function(i){var e,r;this.promise=new i(function(t,a){if(e!==void 0||r!==void 0)throw new nm(`Bad Promise constructor`);e=t,r=a}),this.resolve=mh(e),this.reject=mh(r)};bh.exports.f=function(i){return new sm(i)}});Bh=u(()=>{"use strict";var om=ee(),um=ve(),_t=Mr(),Ne=M(),lm=Yu(),lr=H(),xh=Re(),Th=da(),hm=Vr(),cm=ul(),fm=Te(),Vt=L(),vm=te(),gm=hl(),dm=ma(),Ch=Ra().set,za=lh(),pm=ch(),ym=Nt(),mm=Na(),qh=Pr(),Dt=ir(),$a=ar(),Ah=nr(),Lt=`Promise`,Ph=$a.CONSTRUCTOR,bm=$a.REJECTION_EVENT,xm=$a.SUBCLASSING,Ba=qh.getterFor(Lt),Tm=qh.set,sr=Dt&&Dt.prototype,Fe=Dt,It=sr,Rh=Ne.TypeError,ja=Ne.document,Ga=Ne.process,Ua=Ah.f,Om=Ua,Sm=!!(ja&&ja.createEvent&&Ne.dispatchEvent),Nh=`unhandledrejection`,Em=`rejectionhandled`,Oh=0,Ih=1,wm=2,Ha=1,Mh=2,Mt,Sh,Vh,Eh,_h=function(i){var e;return vm(i)&&Vt(e=i.then)?e:!1},Dh=function(i,e){var r=e.value,t=e.state===Ih,a=t?i.ok:i.fail,n=i.resolve,o=i.reject,s=i.domain,u,l,h;try{a?(t||(e.rejection===Mh&&qm(e),e.rejection=Ha),a===!0?u=r:(s&&s.enter(),u=a(r),s&&(s.exit(),h=!0)),u===i.promise?o(new Rh(`Promise-chain cycle`)):(l=_h(u))?lr(l,u,n,o):n(u)):o(r)}catch(c){s&&!h&&s.exit(),o(c)}},Lh=function(i,e){i.notified||(i.notified=!0,za(function(){for(var r=i.reactions,t;t=r.get();)Dh(t,i);i.notified=!1,e&&!i.rejection&&Cm(i)}))},kh=function(i,e,r){var t,a;Sm?(t=ja.createEvent(`Event`),t.promise=e,t.reason=r,t.initEvent(i,!1,!0),Ne.dispatchEvent(t)):t={promise:e,reason:r},!bm&&(a=Ne[`on`+i])?a(t):i===Nh&&pm(`Unhandled promise rejection`,r)},Cm=function(i){lr(Ch,Ne,function(){var e=i.facade,r=i.value,t=wh(i),a;if(t&&(a=ym(function(){_t?Ga.emit(`unhandledRejection`,r,e):kh(Nh,e,r)}),i.rejection=_t||wh(i)?Mh:Ha,a.error))throw a.value})},wh=function(i){return i.rejection!==Ha&&!i.parent},qm=function(i){lr(Ch,Ne,function(){var e=i.facade;_t?Ga.emit(`rejectionHandled`,e):kh(Em,e,i.value)})},or=function(i,e,r){return function(t){i(e,t,r)}},ur=function(i,e,r){i.done||(i.done=!0,r&&(i=r),i.value=e,i.state=wm,Lh(i,!0))},Fa=function(i,e,r){if(!i.done){i.done=!0,r&&(i=r);try{if(i.facade===e)throw new Rh(`Promise can't be resolved itself`);var t=_h(e);t?za(function(){var a={done:!1};try{lr(t,e,or(Fa,a,i),or(ur,a,i))}catch(n){ur(a,n,i)}}):(i.value=e,i.state=Ih,Lh(i,!1))}catch(a){ur({done:!1},a,i)}}};if(Ph&&(Fe=function(e){gm(this,It),fm(e),lr(Mt,this);var r=Ba(this);try{e(or(Fa,r),or(ur,r))}catch(t){ur(r,t)}},It=Fe.prototype,Mt=function(e){Tm(this,{type:Lt,done:!1,notified:!1,parent:!1,reactions:new mm,rejection:!1,state:Oh,value:null})},Mt.prototype=xh(It,`then`,function(e,r){var t=Ba(this),a=Ua(dm(this,Fe));return t.parent=!0,a.ok=Vt(e)?e:!0,a.fail=Vt(r)&&r,a.domain=_t?Ga.domain:void 0,t.state===Oh?t.reactions.add(a):za(function(){Dh(a,t)}),a.promise}),Sh=function(){var i=new Mt,e=Ba(i);this.promise=i,this.resolve=or(Fa,e),this.reject=or(ur,e)},Ah.f=Ua=function(i){return i===Fe||i===Vh?new Sh(i):Om(i)},!um&&Vt(Dt)&&sr!==Object.prototype)){Eh=sr.then,xm||xh(sr,`then`,function(e,r){var t=this;return new Fe(function(a,n){lr(Eh,t,a,n)}).then(e,r)},{unsafe:!0});try{delete sr.constructor}catch{}Th&&Th(sr,It)}om({global:!0,constructor:!0,wrap:!0,forced:Ph},{Promise:Fe});Vh=lm.Promise;hm(Fe,Lt,!1,!0);cm(Lt)});Fr=u((RE,jh)=>{"use strict";jh.exports=Object.create?Object.create(null):{}});Fh=u((NE,Uh)=>{"use strict";var Am=z(),Pm=Fr(),Rm=Am(`iterator`),Nm=Array.prototype;Uh.exports=function(i){return i!==void 0&&(Pm.Array===i||Nm[Rm]===i)}});Ya=u((IE,Gh)=>{"use strict";var Im=xe(),Mm=Tr(),zh=ke(),$h=z()(`iterator`),_m=Array.prototype;Gh.exports=function(i){if(!Mm(i))return zh(i,$h)||zh(i,`@@iterator`)||(Im(i)===`Arguments`?_m[$h]:void 0)}});Yh=u((ME,Hh)=>{"use strict";var Dm=H(),Lm=L(),km=J(),Bm=Sr(),jm=Ya(),Um=TypeError;Hh.exports=function(i,e){var r=arguments.length<2?jm(i):e;if(Lm(r))return km(Dm(r,i));throw new Um(Bm(i)+` is not iterable`)}});Qh=u((VE,Wh)=>{"use strict";var Fm=H(),Xh=J(),zm=ke();Wh.exports=function(i,e,r){var t,a;Xh(i);try{if(t=zm(i,`return`),!t){if(e===`throw`)throw r;return r}t=Fm(t,i)}catch(n){a=!0,t=n}if(e===`throw`)throw r;if(a)throw t;return Xh(t),r}});Xa=u((_E,ec)=>{"use strict";var $m=At(),Gm=H(),Hm=J(),Ym=Sr(),Xm=Fh(),Wm=St(),Kh=Or(),Qm=Yh(),Km=Ya(),Zh=Qh(),Zm=TypeError,kt=function(i,e){this.stopped=i,this.result=e},Jh=kt.prototype;ec.exports=function(i,e,r){var t=r&&r.that,a=!!(r&&r.AS_ENTRIES),n=!!(r&&r.IS_RECORD),o=!!(r&&r.IS_ITERATOR),s=!!(r&&r.INTERRUPTED),u=$m(e,t),l,h,c,v,f,g,p,y=function(x){var T=l;return l=void 0,T&&Zh(T,`normal`),new kt(!0,x)},m=function(x){return a?(Hm(x),s?u(x[0],x[1],y):u(x[0],x[1])):s?u(x,y):u(x)};if(n)l=i.iterator;else if(o)l=i;else{if(h=Km(i),!h)throw new Zm(Ym(i)+` is not iterable`);if(Xm(h)){for(c=0,v=Wm(i);v>c;c++)if(f=m(i[c]),f&&Kh(Jh,f))return f;return new kt(!1)}l=Qm(i,h)}for(g=n?i.next:l.next;!(p=Gm(g,l)).done;){var O=p.value;try{f=m(O)}catch(x){if(l)Zh(l,`throw`,x);else throw x}if(typeof f==`object`&&f&&Kh(Jh,f))return f}return new kt(!1)}});nc=u((DE,ac)=>{"use strict";var tc=z()(`iterator`),ic=!1;try{rc=0,Wa={next:function(){return{done:!!rc++}},return:function(){ic=!0}},Wa[tc]=function(){return this},Array.from(Wa,function(){throw 2})}catch{}var rc,Wa;ac.exports=function(i,e){try{if(!e&&!ic)return!1}catch{return!1}var r=!1;try{var t={};t[tc]=function(){return{next:function(){return{done:r=!0}}}},i(t)}catch{}return r}});Qa=u((LE,sc)=>{"use strict";var eb=ir(),rb=nc();sc.exports=ar().CONSTRUCTOR||!rb(function(i){eb.all(i).then(void 0,function(){})})});oc=u(()=>{"use strict";var ib=ee(),ab=H(),nb=Te(),sb=nr(),ob=Nt(),ub=Xa();ib({target:`Promise`,stat:!0,forced:Qa()},{all:function(e){var r=this,t=sb.f(r),a=t.resolve,n=t.reject,o=ob(function(){var s=nb(r.resolve),u=[],l=0,h=1;ub(e,function(c){var v=l++,f=!1;h++,ab(s,r,c).then(function(g){f||(f=!0,u[v]=g,--h||a(u))},n)}),--h||a(u)});return o.error&&n(o.value),t.promise}})});lc=u(()=>{"use strict";var hb=ee(),cb=ve(),fb=ar().CONSTRUCTOR,Za=ir(),vb=Pe(),gb=L(),db=Re(),uc=Za&&Za.prototype;hb({target:`Promise`,proto:!0,forced:fb,real:!0},{catch:function(i){return this.then(void 0,i)}});!cb&&gb(Za)&&(Ka=vb(`Promise`).prototype.catch,uc.catch!==Ka&&db(uc,`catch`,Ka,{unsafe:!0}));var Ka});hc=u(()=>{"use strict";var pb=ee(),yb=H(),mb=Te(),bb=nr(),xb=Nt(),Tb=Xa();pb({target:`Promise`,stat:!0,forced:Qa()},{race:function(e){var r=this,t=bb.f(r),a=t.reject,n=xb(function(){var o=mb(r.resolve);Tb(e,function(s){yb(o,r,s).then(t.resolve,a)})});return n.error&&a(n.value),t.promise}})});cc=u(()=>{"use strict";var Sb=ee(),Eb=nr(),wb=ar().CONSTRUCTOR;Sb({target:`Promise`,stat:!0,forced:wb},{reject:function(e){var r=Eb.f(this),t=r.reject;return t(e),r.promise}})});vc=u((HE,fc)=>{"use strict";var Cb=J(),qb=te(),Ab=nr();fc.exports=function(i,e){if(Cb(i),qb(e)&&e.constructor===i)return e;var r=Ab.f(i),t=r.resolve;return t(e),r.promise}});pc=u(()=>{"use strict";var Pb=ee(),Rb=Pe(),gc=ve(),Nb=ir(),dc=ar().CONSTRUCTOR,Ib=vc(),Mb=Rb(`Promise`),Vb=gc&&!dc;Pb({target:`Promise`,stat:!0,forced:gc||dc},{resolve:function(e){return Ib(Vb&&this===Mb?Nb:this,e)}})});yc=u(()=>{"use strict";Bh();oc();lc();hc();cc();pc()});de=u((ZE,bc)=>{"use strict";var _b=pa(),Db=String;bc.exports=function(i){if(_b(i)===`Symbol`)throw new TypeError(`Cannot convert a Symbol value to a string`);return Db(i)}});Ja=u((JE,xc)=>{"use strict";var Lb=J();xc.exports=function(){var i=Lb(this),e=``;return i.hasIndices&&(e+=`d`),i.global&&(e+=`g`),i.ignoreCase&&(e+=`i`),i.multiline&&(e+=`m`),i.dotAll&&(e+=`s`),i.unicode&&(e+=`u`),i.unicodeSets&&(e+=`v`),i.sticky&&(e+=`y`),e}});an=u((ew,Tc)=>{"use strict";var en=_(),rn=M().RegExp,tn=en(function(){var i=rn(`a`,`y`);return i.lastIndex=2,i.exec(`abcd`)!==null}),Bb=tn||en(function(){return!rn(`a`,`y`).sticky});Tc.exports={BROKEN_CARET:tn||en(function(){var i=rn(`^r`,`gy`);return i.lastIndex=2,i.exec(`str`)!==null}),MISSED_STICKY:Bb,UNSUPPORTED_Y:tn}});Sc=u((rw,Oc)=>{"use strict";var Ub=fa(),Fb=Et();Oc.exports=Object.keys||function(e){return Ub(e,Fb)}});wc=u(Ec=>{"use strict";var zb=ue(),$b=Qi(),Gb=Oe(),Hb=J(),Yb=Ke(),Xb=Sc();Ec.f=zb&&!$b?Object.defineProperties:function(e,r){Hb(e);for(var t=Yb(r),a=Xb(r),n=a.length,o=0,s;n>o;)Gb.f(e,s=a[o++],t[s]);return e}});zr=u((iw,Ic)=>{"use strict";var Wb=J(),Qb=wc(),Cc=Et(),Kb=mt(),Zb=xa(),Jb=wr(),ex=yt(),qc=`>`,Ac=`<`,sn=`prototype`,on=`script`,Rc=ex(`IE_PROTO`),nn=function(){},Nc=function(i){return Ac+on+qc+i+Ac+`/`+on+qc},Pc=function(i){i.write(Nc(``)),i.close();var e=i.parentWindow.Object;return i=null,e},rx=function(){var i=Jb(`iframe`),e=`java`+on+`:`,r;return i.style.display=`none`,Zb.appendChild(i),i.src=String(e),r=i.contentWindow.document,r.open(),r.write(Nc(`document.F=Object`)),r.close(),r.F},Bt,jt=function(){try{Bt=new ActiveXObject(`htmlfile`)}catch{}jt=typeof document<`u`?document.domain&&Bt?Pc(Bt):rx():Pc(Bt);for(var i=Cc.length;i--;)delete jt[sn][Cc[i]];return jt()};Kb[Rc]=!0;Ic.exports=Object.create||function(e,r){var t;return e!==null?(nn[sn]=Wb(e),t=new nn,nn[sn]=null,t[Rc]=e):t=jt(),r===void 0?t:Qb.f(t,r)}});Vc=u((aw,Mc)=>{"use strict";var tx=_(),ax=M().RegExp;Mc.exports=tx(function(){var i=ax(`.`,`s`);return!(i.dotAll&&i.test(` +import{n as u,o as __esmMin,r as v,t as init_chunk_IFGU66OU}from"./main-GF4OEYNH.js";function mc(i,e,r,t,a,n,o){try{var s=i[n](o),u=s.value}catch(l){r(l);return}s.done?e(u):Promise.resolve(u).then(t,a)}function be(i){return function(){var e=this,r=arguments;return new Promise(function(t,a){var n=i.apply(e,r);function o(u){mc(n,t,a,o,s,`next`,u)}function s(u){mc(n,t,a,o,s,`throw`,u)}o(void 0)})}}function $e(i){"@babel/helpers - typeof";return $e=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},$e(i)}function ov(i,e){if($e(i)!=`object`||!i)return i;var r=i[Symbol.toPrimitive];if(r!==void 0){var t=r.call(i,e||`default`);if($e(t)!=`object`)return t;throw new TypeError(`@@toPrimitive must return a primitive value.`)}return(e===`string`?String:Number)(i)}function uv(i){var e=ov(i,`string`);return $e(e)==`symbol`?e:e+``}function ri(i,e,r){return(e=uv(e))in i?Object.defineProperty(i,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):i[e]=r,i}function Jv(i,e){if(typeof e!=`function`&&e!==null)throw new TypeError(`Class extends value `+String(e)+` is not a constructor or null`);function r(){this.constructor=i}Zv(i,e),i.prototype=e===null?Object.create(e):(r.prototype=e.prototype,new r)}function $T(i){var e=``;Array.isArray(i)||(i=[i]);for(var r=0;ri.phi1&&(i.phi2-=2*Me),i.sweepFlag===1&&i.phi2t)return[];if(t===0)return[[i*r/(i*i+e*e),e*r/(i*i+e*e)]];var a=Math.sqrt(t);return[[(i*r+e*a)/(i*i+e*e),(e*r-i*a)/(i*i+e*e)],[(i*r-e*a)/(i*i+e*e),(e*r+i*a)/(i*i+e*e)]]}function Yv(i,e,r){return(1-r)*i+r*e}function Xv(i,e,r,t){return i+Math.cos(t/180*Me)*e+Math.sin(t/180*Me)*r}function Wv(i,e,r,t){var a=1e-6,n=e-i,o=r-e,s=3*n+3*(t-r)-6*o,u=6*(o-n),l=3*n;return Math.abs(s)>>E;if(o[x+3]=Ti,Ti!==0){var Oi=255/Ti;o[x]=(R*T>>>E)*Oi,o[x+1]=(re*T>>>E)*Oi,o[x+2]=(ce*T>>>E)*Oi}else o[x]=o[x+1]=o[x+2]=0;R-=Q,re-=Y,ce-=K,me-=I,Q-=y.r,Y-=y.g,K-=y.b,I-=y.a;var Ve=xi+n+1;Ve=O+(Ve>>E,ie>0?(ie=255/ie,o[ae]=(tt*T>>>E)*ie,o[ae+1]=(it*T>>>E)*ie,o[ae+2]=(at*T>>>E)*ie):o[ae]=o[ae+1]=o[ae+2]=0,tt-=Si,it-=Ei,at-=wi,nt-=Ci,Si-=y.r,Ei-=y.g,wi-=y.b,Ci-=y.a,ae=Qe+((ae=Ni+h)0&&arguments[0]!==void 0?arguments[0]:{},e={window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:i,createCanvas(r,t){return new OffscreenCanvas(r,t)},createImage(r){return be(function*(){var a=yield(yield fetch(r)).blob();return yield createImageBitmap(a)})()}};return(typeof DOMParser<`u`||typeof i>`u`)&&Reflect.deleteProperty(e,`DOMParser`),e}function oO(i){var{DOMParser:e,canvas:r,fetch:t}=i;return{window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:e,fetch:t,createCanvas:r.createCanvas,createImage:r.loadImage}}function mr(i){return i.replace(/(?!\u3000)\s+/gm,` `)}function uO(i){return i.replace(/^[\n \t]+/,``)}function lO(i){return i.replace(/[\n \t]+$/,``)}function se(i){return((i||``).match(/-?(\d+(?:\.\d*(?:[eE][+-]?\d+)?)?|\.\d+)(?=\D|$)/gm)||[]).map(parseFloat)}function cO(i){return hO.test(i)?i.toLowerCase():i}function og(i){var e=/url\(('([^']+)'|"([^"]+)"|([^'")]+))\)/.exec(i)||[];return e[2]||e[3]||e[4]}function fO(i){if(!i.startsWith(`rgb`))return i;var e=3;return i.replace(/\d+(\.\d+)?/g,(t,a)=>e--&&a?String(Math.round(parseFloat(t))):t)}function Ge(i,e){var r=e.exec(i);return r?[i.replace(e,` `),r.length]:[i,0]}function xO(i){var e=[0,0,0],r=i.replace(/:not\(([^)]*)\)/g,` $1 `).replace(/{[\s\S]*/gm,` `),t=0;return[r,t]=Ge(r,vO),e[1]+=t,[r,t]=Ge(r,gO),e[0]+=t,[r,t]=Ge(r,dO),e[1]+=t,[r,t]=Ge(r,pO),e[2]+=t,[r,t]=Ge(r,yO),e[1]+=t,[r,t]=Ge(r,mO),e[1]+=t,r=r.replace(/[*\s+>~]/g,` `).replace(/[#.]/g,` `),[r,t]=Ge(r,bO),e[2]+=t,e.join(``)}function ug(i){return Math.sqrt(Math.pow(i[0],2)+Math.pow(i[1],2))}function Yn(i,e){return(i[0]*e[0]+i[1]*e[1])/(ug(i)*ug(e))}function lg(i,e){return(i[0]*e[1]`u`?i:i.trim().split(`,`).map(wO).join(`,`)}function qO(i){if(!i)return``;var e=i.trim().toLowerCase();switch(e){case`normal`:case`italic`:case`oblique`:case`inherit`:case`initial`:case`unset`:return e;default:return/^oblique\s+(-|)\d+deg$/.test(e)?e:``}}function AO(i){if(!i)return``;var e=i.trim().toLowerCase();switch(e){case`normal`:case`bold`:case`lighter`:case`bolder`:case`inherit`:case`initial`:case`unset`:return e;default:return/^[\d.]+$/.test(e)?e:``}}function bg(i,e){var r=Object.keys(i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(i);e&&(t=t.filter(function(a){return Object.getOwnPropertyDescriptor(i,a).enumerable})),r.push.apply(r,t)}return r}function oi(i){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:!1,r=document.createElement(`img`);return e&&(r.crossOrigin=`Anonymous`),new Promise((t,a)=>{r.onload=()=>{t(r)},r.onerror=(n,o,s,u,l)=>{a(l)},r.src=i})}),Is.apply(this,arguments)}function Og(i,e){var r=Object.keys(i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(i);e&&(t=t.filter(function(a){return Object.getOwnPropertyDescriptor(i,a).enumerable})),r.push.apply(r,t)}return r}function He(i){for(var e=1;e{init_chunk_IFGU66OU();M=u((Ii,zs)=>{"use strict";var br=function(i){return i&&i.Math===Math&&i};zs.exports=br(typeof globalThis==`object`&&globalThis)||br(typeof window==`object`&&window)||br(typeof self==`object`&&self)||br(typeof global==`object`&&global)||br(typeof Ii==`object`&&Ii)||(function(){return this})()||Function(`return this`)()});_=u((kO,$s)=>{"use strict";$s.exports=function(i){try{return!!i()}catch{return!0}}});ue=u((BO,Gs)=>{"use strict";Gs.exports=!_()(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})});xr=u((jO,Hs)=>{"use strict";Hs.exports=!_()(function(){var i=function(){}.bind();return typeof i!=`function`||i.hasOwnProperty(`prototype`)})});H=u((UO,Ys)=>{"use strict";var qg=xr(),ut=Function.prototype.call;Ys.exports=qg?ut.bind(ut):function(){return ut.apply(ut,arguments)}});Ks=u(Qs=>{"use strict";var Xs={}.propertyIsEnumerable,Ws=Object.getOwnPropertyDescriptor;Qs.f=Ws&&!Xs.call({1:2},1)?function(e){var r=Ws(this,e);return!!r&&r.enumerable}:Xs});lt=u((zO,Zs)=>{"use strict";Zs.exports=function(i,e){return{enumerable:!(i&1),configurable:!(i&2),writable:!(i&4),value:e}}});D=u(($O,ro)=>{"use strict";var Js=xr(),eo=Function.prototype,Mi=eo.call,Pg=Js&&eo.bind.bind(Mi,Mi);ro.exports=Js?Pg:function(i){return function(){return Mi.apply(i,arguments)}}});xe=u((GO,io)=>{"use strict";var to=D(),Rg=to({}.toString),Ng=to(``.slice);io.exports=function(i){return Ng(Rg(i),8,-1)}});_i=u((HO,ao)=>{"use strict";var Ig=D(),Mg=_(),Vg=xe(),Vi=Object,_g=Ig(``.split);ao.exports=Mg(function(){return!Vi(`z`).propertyIsEnumerable(0)})?function(i){return Vg(i)===`String`?_g(i,``):Vi(i)}:Vi});Tr=u((YO,no)=>{"use strict";no.exports=function(i){return i==null}});le=u((XO,so)=>{"use strict";var Dg=Tr(),Lg=TypeError;so.exports=function(i){if(Dg(i))throw new Lg(`Can't call method on `+i);return i}});Ke=u((WO,oo)=>{"use strict";var kg=_i(),Bg=le();oo.exports=function(i){return kg(Bg(i))}});L=u((QO,uo)=>{"use strict";var Di=typeof document==`object`&&document.all;uo.exports=typeof Di>`u`&&Di!==void 0?function(i){return typeof i==`function`||i===Di}:function(i){return typeof i==`function`}});te=u((KO,lo)=>{"use strict";var jg=L();lo.exports=function(i){return typeof i==`object`?i!==null:jg(i)}});Pe=u((ZO,ho)=>{"use strict";var Li=M(),Ug=L(),Fg=function(i){return Ug(i)?i:void 0};ho.exports=function(i,e){return arguments.length<2?Fg(Li[i]):Li[i]&&Li[i][e]}});Or=u((JO,co)=>{"use strict";co.exports=D()({}.isPrototypeOf)});Ze=u((eS,go)=>{"use strict";var fo=M().navigator,vo=fo&&fo.userAgent;go.exports=vo?String(vo):``});ct=u((rS,To)=>{"use strict";var xo=M(),ki=Ze(),po=xo.process,yo=xo.Deno,mo=po&&po.versions||yo&&yo.version,bo=mo&&mo.v8,fe,ht;bo&&(fe=bo.split(`.`),ht=fe[0]>0&&fe[0]<4?1:+(fe[0]+fe[1]));!ht&&ki&&(fe=ki.match(/Edge\/(\d+)/),(!fe||fe[1]>=74)&&(fe=ki.match(/Chrome\/(\d+)/),fe&&(ht=+fe[1])));To.exports=ht});Bi=u((tS,So)=>{"use strict";var Oo=ct(),Gg=_(),Yg=M().String;So.exports=!!Object.getOwnPropertySymbols&&!Gg(function(){var i=Symbol(`symbol detection`);return!Yg(i)||!(Object(i)instanceof Symbol)||!Symbol.sham&&Oo&&Oo<41})});ji=u((iS,Eo)=>{"use strict";Eo.exports=Bi()&&!Symbol.sham&&typeof Symbol.iterator==`symbol`});Ui=u((aS,wo)=>{"use strict";var Wg=Pe(),Qg=L(),Kg=Or(),Zg=ji(),Jg=Object;wo.exports=Zg?function(i){return typeof i==`symbol`}:function(i){var e=Wg(`Symbol`);return Qg(e)&&Kg(e.prototype,Jg(i))}});Sr=u((nS,Co)=>{"use strict";var ed=String;Co.exports=function(i){try{return ed(i)}catch{return`Object`}}});Te=u((sS,qo)=>{"use strict";var rd=L(),td=Sr(),id=TypeError;qo.exports=function(i){if(rd(i))return i;throw new id(td(i)+` is not a function`)}});ke=u((oS,Ao)=>{"use strict";var ad=Te(),nd=Tr();Ao.exports=function(i,e){var r=i[e];return nd(r)?void 0:ad(r)}});Ro=u((uS,Po)=>{"use strict";var Fi=H(),zi=L(),$i=te(),sd=TypeError;Po.exports=function(i,e){var r,t;if(e===`string`&&zi(r=i.toString)&&!$i(t=Fi(r,i))||zi(r=i.valueOf)&&!$i(t=Fi(r,i))||e!==`string`&&zi(r=i.toString)&&!$i(t=Fi(r,i)))return t;throw new sd(`Can't convert object to primitive value`)}});ve=u((lS,No)=>{"use strict";No.exports=!1});ft=u((hS,Mo)=>{"use strict";var Io=M(),od=Object.defineProperty;Mo.exports=function(i,e){try{od(Io,i,{value:e,configurable:!0,writable:!0})}catch{Io[i]=e}return e}});vt=u((cS,Do)=>{"use strict";var ud=ve(),ld=M(),hd=ft(),Vo=`__core-js_shared__`,_o=Do.exports=ld[Vo]||hd(Vo,{});(_o.versions||(_o.versions=[])).push({version:`3.50.0`,mode:ud?`pure`:`global`,copyright:`© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.`,license:`https://github.com/zloirock/core-js/blob/v3.50.0/LICENSE`,source:`https://github.com/zloirock/core-js`})});gt=u((fS,ko)=>{"use strict";var Lo=vt(),cd=Object.create||Object;ko.exports=function(i,e){return Lo[i]||(Lo[i]=e||cd(null))}});Er=u((vS,Bo)=>{"use strict";var fd=le(),vd=Object;Bo.exports=function(i){return vd(fd(i))}});he=u((gS,jo)=>{"use strict";var gd=D(),dd=Er(),pd=gd({}.hasOwnProperty);jo.exports=Object.hasOwn||function(e,r){return pd(dd(e),r)}});Gi=u((dS,Uo)=>{"use strict";var yd=D(),md=0,bd=Math.random(),xd=yd(1.1.toString);Uo.exports=function(i){return`Symbol(`+(i===void 0?``:i)+`)_`+xd(++md+bd,36)}});z=u((pS,zo)=>{"use strict";var Td=M(),Od=gt(),Fo=he(),Sd=Gi(),Ed=Bi(),wd=ji(),Je=Td.Symbol,Hi=Od(`wks`),Cd=wd?Je.for||Je:Je&&Je.withoutSetter||Sd;zo.exports=function(i){return Fo(Hi,i)||(Hi[i]=Ed&&Fo(Je,i)?Je[i]:Cd(`Symbol.`+i)),Hi[i]}});Yo=u((yS,Ho)=>{"use strict";var qd=H(),$o=te(),Go=Ui(),Ad=ke(),Pd=Ro(),Rd=z(),Nd=TypeError,Id=Rd(`toPrimitive`);Ho.exports=function(i,e){if(!$o(i)||Go(i))return i;var r=Ad(i,Id),t;if(r){if(e===void 0&&(e=`default`),t=qd(r,i,e),!$o(t)||Go(t))return t;throw new Nd(`Can't convert object to primitive value`)}return e===void 0&&(e=`number`),Pd(i,e)}});Yi=u((mS,Xo)=>{"use strict";var Md=Yo(),Vd=Ui();Xo.exports=function(i){var e=Md(i,`string`);return Vd(e)?e:e+``}});wr=u((bS,Qo)=>{"use strict";var _d=M(),Wo=te(),Xi=_d.document,Dd=Wo(Xi)&&Wo(Xi.createElement);Qo.exports=function(i){return Dd?Xi.createElement(i):{}}});Wi=u((xS,Ko)=>{"use strict";var Ld=ue(),kd=_(),Bd=wr();Ko.exports=!Ld&&!kd(function(){return Object.defineProperty(Bd(`div`),"a",{get:function(){return 7}}).a!==7})});Cr=u(Jo=>{"use strict";var jd=ue(),Ud=H(),Fd=Ks(),zd=lt(),$d=Ke(),Gd=Yi(),Hd=he(),Yd=Wi(),Zo=Object.getOwnPropertyDescriptor;Jo.f=jd?Zo:function(e,r){if(e=$d(e),r=Gd(r),Yd)try{return Zo(e,r)}catch{}if(Hd(e,r))return zd(!Ud(Fd.f,e,r),e[r])}});Qi=u((OS,eu)=>{"use strict";var Xd=ue(),Wd=_();eu.exports=Xd&&Wd(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})});J=u((SS,ru)=>{"use strict";var Qd=te(),Kd=String,Zd=TypeError;ru.exports=function(i){if(Qd(i))return i;throw new Zd(Kd(i)+` is not an object`)}});Oe=u(iu=>{"use strict";var Jd=ue(),ep=Wi(),rp=Qi(),dt=J(),tu=Yi(),tp=TypeError,Ki=Object.defineProperty,ip=Object.getOwnPropertyDescriptor,Zi=`enumerable`,Ji=`configurable`,ea=`writable`;iu.f=Jd?rp?function(e,r,t){if(dt(e),r=tu(r),dt(t),typeof e==`function`&&r===`prototype`&&`value`in t&&ea in t&&!t[ea]){var a=ip(e,r);a&&a[ea]&&(e[r]=t.value,t={configurable:Ji in t?t[Ji]:a[Ji],enumerable:Zi in t?t[Zi]:a[Zi],writable:!1})}return Ki(e,r,t)}:Ki:function(e,r,t){if(dt(e),r=tu(r),dt(t),ep)try{return Ki(e,r,t)}catch{}if(`get`in t||`set`in t)throw new tp(`Accessors not supported`);return`value`in t&&(e[r]=t.value),e}});er=u((wS,au)=>{"use strict";var ap=ue(),np=Oe(),sp=lt();au.exports=ap?function(i,e,r){return np.f(i,e,sp(1,r))}:function(i,e,r){return i[e]=r,i}});qr=u((CS,su)=>{"use strict";var ra=ue(),op=he(),nu=Function.prototype,up=ra&&Object.getOwnPropertyDescriptor,ta=op(nu,`name`);su.exports={EXISTS:ta,PROPER:ta&&function(){}.name===`something`,CONFIGURABLE:ta&&(!ra||ra&&up(nu,`name`).configurable)}});pt=u((qS,ou)=>{"use strict";var cp=D(),fp=L(),ia=vt(),vp=cp(Function.toString);fp(ia.inspectSource)||(ia.inspectSource=function(i){return vp(i)});ou.exports=ia.inspectSource});hu=u((AS,lu)=>{"use strict";var gp=M(),dp=L(),uu=gp.WeakMap;lu.exports=dp(uu)&&/native code/.test(String(uu))});yt=u((PS,fu)=>{"use strict";var pp=gt(),yp=Gi(),cu=pp(`keys`);fu.exports=function(i){return cu[i]||(cu[i]=yp(i))}});mt=u((RS,vu)=>{"use strict";vu.exports={}});Pr=u((NS,pu)=>{"use strict";var mp=hu(),du=M(),bp=te(),xp=er(),aa=he(),na=vt(),Tp=yt(),Op=mt(),gu=`Object already initialized`,sa=du.TypeError,Sp=du.WeakMap,bt,Ar,xt,Ep=function(i){return xt(i)?Ar(i):bt(i,{})},wp=function(i){return function(e){var r;if(!bp(e)||(r=Ar(e)).type!==i)throw new sa(`Incompatible receiver, `+i+` required`);return r}};mp||na.state?(ge=na.state||(na.state=new Sp),ge.get=ge.get,ge.has=ge.has,ge.set=ge.set,bt=function(i,e){if(ge.has(i))throw new sa(gu);return e.facade=i,ge.set(i,e),e},Ar=function(i){return ge.get(i)||{}},xt=function(i){return ge.has(i)}):(Be=Tp(`state`),Op[Be]=!0,bt=function(i,e){if(aa(i,Be))throw new sa(gu);return e.facade=i,xp(i,Be,e),e},Ar=function(i){return aa(i,Be)?i[Be]:{}},xt=function(i){return aa(i,Be)});var ge,Be;pu.exports={set:bt,get:Ar,has:xt,enforce:Ep,getterFor:wp}});la=u((IS,bu)=>{"use strict";var ua=D(),Cp=_(),qp=L(),Tt=he(),oa=ue(),Ap=qr().CONFIGURABLE,Pp=pt(),mu=Pr(),Rp=mu.enforce,Np=mu.get,yu=String,Ot=Object.defineProperty,Ip=ua(``.slice),Mp=ua(``.replace),Vp=ua([].join),_p=oa&&!Cp(function(){return Ot(function(){},`length`,{value:8}).length!==8}),Dp=String(String).split(`String`),Lp=bu.exports=function(i,e,r){Ip(yu(e),0,7)===`Symbol(`&&(e=`[`+Mp(yu(e),/^Symbol\(([^)]*)\).*$/,`$1`)+`]`),r&&r.getter&&(e=`get `+e),r&&r.setter&&(e=`set `+e),(!Tt(i,`name`)||Ap&&i.name!==e)&&(oa?Ot(i,`name`,{value:e,configurable:!0}):i.name=e),_p&&r&&Tt(r,`arity`)&&i.length!==r.arity&&Ot(i,`length`,{value:r.arity});try{r&&Tt(r,`constructor`)&&r.constructor?oa&&Ot(i,`prototype`,{writable:!1}):i.prototype&&(i.prototype=void 0)}catch{}var t=Rp(i);return Tt(t,`source`)||(t.source=Vp(Dp,typeof e==`string`?e:``)),i};Function.prototype.toString=Lp(function(){return qp(this)&&Np(this).source||Pp(this)},`toString`)});Re=u((MS,xu)=>{"use strict";var kp=L(),Bp=Oe(),jp=la(),Up=ft();xu.exports=function(i,e,r,t){t||(t={});var a=t.enumerable,n=t.name!==void 0?t.name:e;if(kp(r)&&jp(r,n,t),t.global)a?i[e]=r:Up(e,r);else{try{t.unsafe?i[e]&&(a=!0):delete i[e]}catch{}a?i[e]=r:Bp.f(i,e,{value:r,enumerable:!1,configurable:!t.nonConfigurable,writable:!t.nonWritable})}return i}});Ou=u((VS,Tu)=>{"use strict";var Fp=Math.ceil,zp=Math.floor;Tu.exports=Math.trunc||function(e){var r=+e;return(r>0?zp:Fp)(r)}});Rr=u((_S,Su)=>{"use strict";var $p=Ou();Su.exports=function(i){var e=+i;return e!==e||e===0?0:$p(e)}});wu=u((DS,Eu)=>{"use strict";var Gp=Rr(),Hp=Math.max,Yp=Math.min;Eu.exports=function(i,e){var r=Gp(i);return r<0?Hp(r+e,0):Yp(r,e)}});je=u((LS,Cu)=>{"use strict";var Xp=Rr(),Wp=Math.min;Cu.exports=function(i){var e=Xp(i);return e>0?Wp(e,9007199254740991):0}});St=u((kS,qu)=>{"use strict";var Qp=je();qu.exports=function(i){return Qp(i.length)}});ha=u((BS,Pu)=>{"use strict";var Kp=Ke(),Zp=wu(),Jp=St(),Au=function(i){return function(e,r,t){var a=Kp(e),n=Jp(a);if(n===0)return!i&&-1;var o=Zp(t,n),s;if(i&&r!==r){for(;n>o;)if(s=a[o++],s!==s)return!0}else for(;n>o;o++)if((i||o in a)&&a[o]===r)return i||o||0;return!i&&-1}};Pu.exports={includes:Au(!0),indexOf:Au(!1)}});fa=u((jS,Nu)=>{"use strict";var ey=D(),ca=he(),ry=Ke(),ty=ha().indexOf,iy=mt(),Ru=ey([].push);Nu.exports=function(i,e){var r=ry(i),t=0,a=[],n;for(n in r)!ca(iy,n)&&ca(r,n)&&Ru(a,n);for(;e.length>t;)ca(r,n=e[t++])&&(~ty(a,n)||Ru(a,n));return a}});Et=u((US,Iu)=>{"use strict";Iu.exports=[`constructor`,`hasOwnProperty`,`isPrototypeOf`,`propertyIsEnumerable`,`toLocaleString`,`toString`,`valueOf`]});Vu=u(Mu=>{"use strict";var ay=fa(),sy=Et().concat(`length`,`prototype`);Mu.f=Object.getOwnPropertyNames||function(e){return ay(e,sy)}});Du=u(_u=>{"use strict";_u.f=Object.getOwnPropertySymbols});ku=u(($S,Lu)=>{"use strict";var oy=Pe(),uy=D(),ly=Vu(),hy=Du(),cy=J(),fy=uy([].concat);Lu.exports=oy(`Reflect`,`ownKeys`)||function(e){var r=ly.f(cy(e)),t=hy.f;return t?fy(r,t(e)):r}});Uu=u((GS,ju)=>{"use strict";var Bu=he(),vy=ku(),gy=Cr(),dy=Oe();ju.exports=function(i,e,r){for(var t=vy(e),a=dy.f,n=gy.f,o=0;o{"use strict";var py=_(),yy=L(),my=/#|\.prototype\./,Nr=function(i,e){var r=xy[by(i)];return r===Oy?!0:r===Ty?!1:yy(e)?py(e):!!e},by=Nr.normalize=function(i){return String(i).replace(my,`.`).toLowerCase()},xy=Nr.data={},Ty=Nr.NATIVE=`N`,Oy=Nr.POLYFILL=`P`;Fu.exports=Nr});ee=u((YS,zu)=>{"use strict";var wt=M(),Sy=Cr().f,Ey=er(),wy=Re(),Cy=ft(),qy=Uu(),Ay=va();zu.exports=function(i,e){var r=i.target,t=i.global,a=i.stat,n,o,s,u,l,h;if(t?o=wt:a?o=wt[r]||Cy(r,{}):o=wt[r]&&wt[r].prototype,o)for(s in e){if(l=e[s],i.dontCallGetSet?(h=Sy(o,s),u=h&&h.value):u=o[s],n=Ay(t?s:r+(a?`.`:`#`)+s,i.forced),!n&&u!==void 0){if(typeof l==typeof u)continue;qy(l,u)}(i.sham||u&&u.sham)&&Ey(l,`sham`,!0),wy(o,s,l,i)}}});ga=u((XS,$u)=>{"use strict";var Ir=M(),Py=Ze(),Ry=xe(),Ct=function(i){return Py.slice(0,i.length)===i};$u.exports=(function(){return Ct(`Bun/`)?`BUN`:Ct(`Cloudflare-Workers`)?`CLOUDFLARE`:Ct(`Deno/`)?`DENO`:Ct(`Node.js/`)?`NODE`:Ir.Bun&&typeof Bun.version==`string`?`BUN`:Ir.Deno&&typeof Deno.version==`object`?`DENO`:Ry(Ir.process)===`process`?`NODE`:Ir.window&&Ir.document?`BROWSER`:`REST`})()});Mr=u((WS,Gu)=>{"use strict";Gu.exports=ga()===`NODE`});Yu=u((QS,Hu)=>{"use strict";Hu.exports=M()});Wu=u((KS,Xu)=>{"use strict";var My=D(),Vy=Te();Xu.exports=function(i,e,r){try{return My(Vy(Object.getOwnPropertyDescriptor(i,e)[r]))}catch{}}});Ku=u((ZS,Qu)=>{"use strict";var _y=te();Qu.exports=function(i){return _y(i)||i===null}});Ju=u((JS,Zu)=>{"use strict";var Dy=Ku(),Ly=String,ky=TypeError;Zu.exports=function(i){if(Dy(i))return i;throw new ky(`Can't set `+Ly(i)+` as a prototype`)}});da=u((eE,el)=>{"use strict";var By=Wu(),jy=te(),Uy=le(),Fy=Ju();el.exports=Object.setPrototypeOf||(`__proto__`in{}?(function(){var i=!1,e={},r;try{r=By(Object.prototype,`__proto__`,`set`),r(e,[]),i=e instanceof Array}catch{}return function(a,n){return Uy(a),Fy(n),jy(a)&&(i?r(a,n):a.__proto__=n),a}})():void 0)});Vr=u((rE,tl)=>{"use strict";var zy=Oe().f,$y=he(),rl=z()(`toStringTag`);tl.exports=function(i,e,r){i&&!r&&(i=i.prototype),i&&!$y(i,rl)&&zy(i,rl,{configurable:!0,value:e})}});nl=u((tE,al)=>{"use strict";var il=la(),Hy=Oe();al.exports=function(i,e,r){return r.get&&il(r.get,e,{getter:!0}),r.set&&il(r.set,e,{setter:!0}),Hy.f(i,e,r)}});ul=u((iE,ol)=>{"use strict";var Yy=Pe(),Xy=nl(),Wy=z(),Qy=ue(),sl=Wy(`species`);ol.exports=function(i){var e=Yy(i);Qy&&e&&!e[sl]&&Xy(e,sl,{configurable:!0,get:function(){return this}})}});hl=u((aE,ll)=>{"use strict";var Ky=Or(),Zy=TypeError;ll.exports=function(i,e){if(Ky(e,i))return i;throw new Zy(`Incorrect invocation`)}});vl=u((nE,fl)=>{"use strict";var e0=z()(`toStringTag`),cl={};cl[e0]=`z`;fl.exports=String(cl)===`[object z]`});pa=u((sE,gl)=>{"use strict";var r0=vl(),t0=L(),qt=xe(),a0=z()(`toStringTag`),n0=Object,s0=qt((function(){return arguments})())===`Arguments`,o0=function(i,e){try{return i[e]}catch{}};gl.exports=r0?qt:function(i){var e,r,t;return i===void 0?`Undefined`:i===null?`Null`:typeof(r=o0(e=n0(i),a0))==`string`?r:s0?qt(e):(t=qt(e))===`Object`&&t0(e.callee)?`Arguments`:t}});xl=u((oE,bl)=>{"use strict";var u0=D(),l0=_(),dl=L(),h0=pa(),c0=Pe(),f0=pt(),pl=function(){},yl=c0(`Reflect`,`construct`),ya=/^\s*(?:class|function)\b/,v0=u0(ya.exec),g0=!ya.test(pl),_r=function(e){if(!dl(e))return!1;try{return yl(pl,[],e),!0}catch{return!1}},ml=function(e){if(!dl(e))return!1;switch(h0(e)){case`AsyncFunction`:case`GeneratorFunction`:case`AsyncGeneratorFunction`:return!1}try{return g0||!!v0(ya,f0(e))}catch{return!0}};ml.sham=!0;bl.exports=!yl||l0(function(){var i;return _r(_r.call)||!_r(Object)||!_r(function(){i=!0})||i})?ml:_r});Ol=u((uE,Tl)=>{"use strict";var d0=xl(),p0=Sr(),y0=TypeError;Tl.exports=function(i){if(d0(i))return i;throw new y0(p0(i)+` is not a constructor`)}});ma=u((lE,El)=>{"use strict";var Sl=J(),m0=Ol(),b0=Tr(),T0=z()(`species`);El.exports=function(i,e){var r=Sl(i).constructor,t;return r===void 0||b0(t=Sl(r)[T0])?e:m0(t)}});ba=u((hE,Al)=>{"use strict";var O0=xr(),ql=Function.prototype,wl=ql.apply,Cl=ql.call;Al.exports=typeof Reflect==`object`&&Reflect.apply||(O0?Cl.bind(wl):function(){return Cl.apply(wl,arguments)})});Dr=u((cE,Pl)=>{"use strict";var S0=xe(),E0=D();Pl.exports=function(i){if(S0(i)===`Function`)return E0(i)}});At=u((fE,Nl)=>{"use strict";var Rl=Dr(),w0=Te(),C0=xr(),q0=Rl(Rl.bind);Nl.exports=function(i,e){return w0(i),e===void 0?i:C0?q0(i,e):function(){return i.apply(e,arguments)}}});xa=u((vE,Il)=>{"use strict";Il.exports=Pe()(`document`,`documentElement`)});Vl=u((gE,Ml)=>{"use strict";Ml.exports=D()([].slice)});Dl=u((dE,_l)=>{"use strict";var R0=TypeError;_l.exports=function(i,e){if(i{"use strict";var Ll=Ze();kl.exports=/ipad|iphone|ipod/i.test(Ll)&&/applewebkit/i.test(Ll)});Ra=u((yE,Yl)=>{"use strict";var ne=M(),N0=ba(),I0=At(),Bl=L(),M0=he(),Hl=_(),jl=xa(),V0=Vl(),Ul=wr(),_0=Dl(),D0=Ta(),L0=Mr(),qa=ne.setImmediate,Aa=ne.clearImmediate,k0=ne.process,Oa=ne.Dispatch,B0=ne.Function,Fl=ne.MessageChannel,j0=ne.String,Sa=0,Lr={},zl=`onreadystatechange`,kr,Ue,Ea,wa;Hl(function(){kr=ne.location});var Pa=function(i){if(M0(Lr,i)){var e=Lr[i];delete Lr[i],e()}},Ca=function(i){return function(){Pa(i)}},$l=function(i){Pa(i.data)},Gl=function(i){ne.postMessage(j0(i),kr.protocol+`//`+kr.host)};(!qa||!Aa)&&(qa=function(e){_0(arguments.length,1);var r=Bl(e)?e:B0(e),t=V0(arguments,1);return Lr[++Sa]=function(){N0(r,void 0,t)},Ue(Sa),Sa},Aa=function(e){delete Lr[e]},L0?Ue=function(i){k0.nextTick(Ca(i))}:Oa&&Oa.now?Ue=function(i){Oa.now(Ca(i))}:Fl&&!D0?(Ea=new Fl,wa=Ea.port2,Ea.port1.onmessage=$l,Ue=I0(wa.postMessage,wa)):ne.addEventListener&&Bl(ne.postMessage)&&!ne.importScripts&&kr&&kr.protocol!==`file:`&&!Hl(Gl)?(Ue=Gl,ne.addEventListener(`message`,$l,!1)):zl in Ul(`script`)?Ue=function(i){jl.appendChild(Ul(`script`))[zl]=function(){jl.removeChild(this),Pa(i)}}:Ue=function(i){setTimeout(Ca(i),0)});Yl.exports={set:qa,clear:Aa}});Ql=u((mE,Wl)=>{"use strict";var Xl=M(),U0=ue(),F0=Object.getOwnPropertyDescriptor;Wl.exports=function(i){if(!U0)return Xl[i];var e=F0(Xl,i);return e&&e.value}});Na=u((bE,Zl)=>{"use strict";var Kl=function(){this.head=null,this.tail=null};Kl.prototype={add:function(i){var e={item:i,next:null},r=this.tail;r?r.next=e:this.head=e,this.tail=e},get:function(){var i=this.head;if(i)return(this.head=i.next)===null&&(this.tail=null),i.item}};Zl.exports=Kl});eh=u((xE,Jl)=>{"use strict";var z0=Ze();Jl.exports=/ipad|iphone|ipod/i.test(z0)&&typeof Pebble<`u`});th=u((TE,rh)=>{"use strict";var $0=Ze();rh.exports=/web0s(?!.*chrome)/i.test($0)});lh=u((OE,uh)=>{"use strict";var tr=M(),G0=Ql(),ih=At(),Ia=Ra().set,H0=Na(),Y0=Ta(),X0=eh(),W0=th(),Ma=Mr(),ah=tr.MutationObserver||tr.WebKitMutationObserver,nh=tr.document,sh=tr.process,Pt=tr.Promise,Da=G0(`queueMicrotask`),rr,Va,_a,Rt,oh;Da||(Br=new H0,jr=function(){var i,e;for(Ma&&(i=sh.domain)&&i.exit();e=Br.get();)try{e()}catch(r){throw Br.head&&rr(),r}i&&i.enter()},!Y0&&!Ma&&!W0&&ah&&nh?(Va=!0,_a=nh.createTextNode(``),new ah(jr).observe(_a,{characterData:!0}),rr=function(){_a.data=Va=!Va}):!X0&&Pt&&Pt.resolve?(Rt=Pt.resolve(void 0),Rt.constructor=Pt,oh=ih(Rt.then,Rt),rr=function(){oh(jr)}):Ma?rr=function(){sh.nextTick(jr)}:(Ia=ih(Ia,tr),rr=function(){Ia(jr)}),Da=function(i){Br.head||rr(),Br.add(i)});var Br,jr;uh.exports=Da});ch=u((SE,hh)=>{"use strict";hh.exports=function(i,e){try{arguments.length===1?console.error(i):console.error(i,e)}catch{}}});Nt=u((EE,fh)=>{"use strict";fh.exports=function(i){try{return{error:!1,value:i()}}catch(e){return{error:!0,value:e}}}});ir=u((wE,vh)=>{"use strict";vh.exports=M().Promise});ar=u((CE,yh)=>{"use strict";var K0=M(),Ur=ir(),Z0=L(),J0=va(),em=pt(),rm=z(),gh=ga(),tm=ve(),La=ct(),dh=Ur&&Ur.prototype,im=rm(`species`),ka=!1,ph=Z0(K0.PromiseRejectionEvent);yh.exports={CONSTRUCTOR:J0(`Promise`,function(){var i=em(Ur),e=i!==String(Ur);if(!e&&La===66||tm&&!(dh.catch&&dh.finally))return!0;if(!La||La<51||!/native code/.test(i)){var r=new Ur(function(n){n(1)}),t=function(n){n(function(){},function(){})},a=r.constructor={};if(a[im]=t,ka=r.then(function(){})instanceof t,!ka)return!0}return!e&&(gh===`BROWSER`||gh===`DENO`)&&!ph}),REJECTION_EVENT:ph,SUBCLASSING:ka}});nr=u((qE,bh)=>{"use strict";var mh=Te(),nm=TypeError,sm=function(i){var e,r;this.promise=new i(function(t,a){if(e!==void 0||r!==void 0)throw new nm(`Bad Promise constructor`);e=t,r=a}),this.resolve=mh(e),this.reject=mh(r)};bh.exports.f=function(i){return new sm(i)}});Bh=u(()=>{"use strict";var om=ee(),um=ve(),_t=Mr(),Ne=M(),lm=Yu(),lr=H(),xh=Re(),Th=da(),hm=Vr(),cm=ul(),fm=Te(),Vt=L(),vm=te(),gm=hl(),dm=ma(),Ch=Ra().set,za=lh(),pm=ch(),ym=Nt(),mm=Na(),qh=Pr(),Dt=ir(),$a=ar(),Ah=nr(),Lt=`Promise`,Ph=$a.CONSTRUCTOR,bm=$a.REJECTION_EVENT,xm=$a.SUBCLASSING,Ba=qh.getterFor(Lt),Tm=qh.set,sr=Dt&&Dt.prototype,Fe=Dt,It=sr,Rh=Ne.TypeError,ja=Ne.document,Ga=Ne.process,Ua=Ah.f,Om=Ua,Sm=!!(ja&&ja.createEvent&&Ne.dispatchEvent),Nh=`unhandledrejection`,Em=`rejectionhandled`,Oh=0,Ih=1,wm=2,Ha=1,Mh=2,Mt,Sh,Vh,Eh,_h=function(i){var e;return vm(i)&&Vt(e=i.then)?e:!1},Dh=function(i,e){var r=e.value,t=e.state===Ih,a=t?i.ok:i.fail,n=i.resolve,o=i.reject,s=i.domain,u,l,h;try{a?(t||(e.rejection===Mh&&qm(e),e.rejection=Ha),a===!0?u=r:(s&&s.enter(),u=a(r),s&&(s.exit(),h=!0)),u===i.promise?o(new Rh(`Promise-chain cycle`)):(l=_h(u))?lr(l,u,n,o):n(u)):o(r)}catch(c){s&&!h&&s.exit(),o(c)}},Lh=function(i,e){i.notified||(i.notified=!0,za(function(){for(var r=i.reactions,t;t=r.get();)Dh(t,i);i.notified=!1,e&&!i.rejection&&Cm(i)}))},kh=function(i,e,r){var t,a;Sm?(t=ja.createEvent(`Event`),t.promise=e,t.reason=r,t.initEvent(i,!1,!0),Ne.dispatchEvent(t)):t={promise:e,reason:r},!bm&&(a=Ne[`on`+i])?a(t):i===Nh&&pm(`Unhandled promise rejection`,r)},Cm=function(i){lr(Ch,Ne,function(){var e=i.facade,r=i.value,t=wh(i),a;if(t&&(a=ym(function(){_t?Ga.emit(`unhandledRejection`,r,e):kh(Nh,e,r)}),i.rejection=_t||wh(i)?Mh:Ha,a.error))throw a.value})},wh=function(i){return i.rejection!==Ha&&!i.parent},qm=function(i){lr(Ch,Ne,function(){var e=i.facade;_t?Ga.emit(`rejectionHandled`,e):kh(Em,e,i.value)})},or=function(i,e,r){return function(t){i(e,t,r)}},ur=function(i,e,r){i.done||(i.done=!0,r&&(i=r),i.value=e,i.state=wm,Lh(i,!0))},Fa=function(i,e,r){if(!i.done){i.done=!0,r&&(i=r);try{if(i.facade===e)throw new Rh(`Promise can't be resolved itself`);var t=_h(e);t?za(function(){var a={done:!1};try{lr(t,e,or(Fa,a,i),or(ur,a,i))}catch(n){ur(a,n,i)}}):(i.value=e,i.state=Ih,Lh(i,!1))}catch(a){ur({done:!1},a,i)}}};if(Ph&&(Fe=function(e){gm(this,It),fm(e),lr(Mt,this);var r=Ba(this);try{e(or(Fa,r),or(ur,r))}catch(t){ur(r,t)}},It=Fe.prototype,Mt=function(e){Tm(this,{type:Lt,done:!1,notified:!1,parent:!1,reactions:new mm,rejection:!1,state:Oh,value:null})},Mt.prototype=xh(It,`then`,function(e,r){var t=Ba(this),a=Ua(dm(this,Fe));return t.parent=!0,a.ok=Vt(e)?e:!0,a.fail=Vt(r)&&r,a.domain=_t?Ga.domain:void 0,t.state===Oh?t.reactions.add(a):za(function(){Dh(a,t)}),a.promise}),Sh=function(){var i=new Mt,e=Ba(i);this.promise=i,this.resolve=or(Fa,e),this.reject=or(ur,e)},Ah.f=Ua=function(i){return i===Fe||i===Vh?new Sh(i):Om(i)},!um&&Vt(Dt)&&sr!==Object.prototype)){Eh=sr.then,xm||xh(sr,`then`,function(e,r){var t=this;return new Fe(function(a,n){lr(Eh,t,a,n)}).then(e,r)},{unsafe:!0});try{delete sr.constructor}catch{}Th&&Th(sr,It)}om({global:!0,constructor:!0,wrap:!0,forced:Ph},{Promise:Fe});Vh=lm.Promise;hm(Fe,Lt,!1,!0);cm(Lt)});Fr=u((RE,jh)=>{"use strict";jh.exports=Object.create?Object.create(null):{}});Fh=u((NE,Uh)=>{"use strict";var Am=z(),Pm=Fr(),Rm=Am(`iterator`),Nm=Array.prototype;Uh.exports=function(i){return i!==void 0&&(Pm.Array===i||Nm[Rm]===i)}});Ya=u((IE,Gh)=>{"use strict";var Im=xe(),Mm=Tr(),zh=ke(),$h=z()(`iterator`),_m=Array.prototype;Gh.exports=function(i){if(!Mm(i))return zh(i,$h)||zh(i,`@@iterator`)||(Im(i)===`Arguments`?_m[$h]:void 0)}});Yh=u((ME,Hh)=>{"use strict";var Dm=H(),Lm=L(),km=J(),Bm=Sr(),jm=Ya(),Um=TypeError;Hh.exports=function(i,e){var r=arguments.length<2?jm(i):e;if(Lm(r))return km(Dm(r,i));throw new Um(Bm(i)+` is not iterable`)}});Qh=u((VE,Wh)=>{"use strict";var Fm=H(),Xh=J(),zm=ke();Wh.exports=function(i,e,r){var t,a;Xh(i);try{if(t=zm(i,`return`),!t){if(e===`throw`)throw r;return r}t=Fm(t,i)}catch(n){a=!0,t=n}if(e===`throw`)throw r;if(a)throw t;return Xh(t),r}});Xa=u((_E,ec)=>{"use strict";var $m=At(),Gm=H(),Hm=J(),Ym=Sr(),Xm=Fh(),Wm=St(),Kh=Or(),Qm=Yh(),Km=Ya(),Zh=Qh(),Zm=TypeError,kt=function(i,e){this.stopped=i,this.result=e},Jh=kt.prototype;ec.exports=function(i,e,r){var t=r&&r.that,a=!!(r&&r.AS_ENTRIES),n=!!(r&&r.IS_RECORD),o=!!(r&&r.IS_ITERATOR),s=!!(r&&r.INTERRUPTED),u=$m(e,t),l,h,c,v,f,g,p,y=function(x){var T=l;return l=void 0,T&&Zh(T,`normal`),new kt(!0,x)},m=function(x){return a?(Hm(x),s?u(x[0],x[1],y):u(x[0],x[1])):s?u(x,y):u(x)};if(n)l=i.iterator;else if(o)l=i;else{if(h=Km(i),!h)throw new Zm(Ym(i)+` is not iterable`);if(Xm(h)){for(c=0,v=Wm(i);v>c;c++)if(f=m(i[c]),f&&Kh(Jh,f))return f;return new kt(!1)}l=Qm(i,h)}for(g=n?i.next:l.next;!(p=Gm(g,l)).done;){var O=p.value;try{f=m(O)}catch(x){if(l)Zh(l,`throw`,x);else throw x}if(typeof f==`object`&&f&&Kh(Jh,f))return f}return new kt(!1)}});nc=u((DE,ac)=>{"use strict";var tc=z()(`iterator`),ic=!1;try{rc=0,Wa={next:function(){return{done:!!rc++}},return:function(){ic=!0}},Wa[tc]=function(){return this},Array.from(Wa,function(){throw 2})}catch{}var rc,Wa;ac.exports=function(i,e){try{if(!e&&!ic)return!1}catch{return!1}var r=!1;try{var t={};t[tc]=function(){return{next:function(){return{done:r=!0}}}},i(t)}catch{}return r}});Qa=u((LE,sc)=>{"use strict";var eb=ir(),rb=nc();sc.exports=ar().CONSTRUCTOR||!rb(function(i){eb.all(i).then(void 0,function(){})})});oc=u(()=>{"use strict";var ib=ee(),ab=H(),nb=Te(),sb=nr(),ob=Nt(),ub=Xa();ib({target:`Promise`,stat:!0,forced:Qa()},{all:function(e){var r=this,t=sb.f(r),a=t.resolve,n=t.reject,o=ob(function(){var s=nb(r.resolve),u=[],l=0,h=1;ub(e,function(c){var v=l++,f=!1;h++,ab(s,r,c).then(function(g){f||(f=!0,u[v]=g,--h||a(u))},n)}),--h||a(u)});return o.error&&n(o.value),t.promise}})});lc=u(()=>{"use strict";var hb=ee(),cb=ve(),fb=ar().CONSTRUCTOR,Za=ir(),vb=Pe(),gb=L(),db=Re(),uc=Za&&Za.prototype;hb({target:`Promise`,proto:!0,forced:fb,real:!0},{catch:function(i){return this.then(void 0,i)}});!cb&&gb(Za)&&(Ka=vb(`Promise`).prototype.catch,uc.catch!==Ka&&db(uc,`catch`,Ka,{unsafe:!0}));var Ka});hc=u(()=>{"use strict";var pb=ee(),yb=H(),mb=Te(),bb=nr(),xb=Nt(),Tb=Xa();pb({target:`Promise`,stat:!0,forced:Qa()},{race:function(e){var r=this,t=bb.f(r),a=t.reject,n=xb(function(){var o=mb(r.resolve);Tb(e,function(s){yb(o,r,s).then(t.resolve,a)})});return n.error&&a(n.value),t.promise}})});cc=u(()=>{"use strict";var Sb=ee(),Eb=nr(),wb=ar().CONSTRUCTOR;Sb({target:`Promise`,stat:!0,forced:wb},{reject:function(e){var r=Eb.f(this),t=r.reject;return t(e),r.promise}})});vc=u((HE,fc)=>{"use strict";var Cb=J(),qb=te(),Ab=nr();fc.exports=function(i,e){if(Cb(i),qb(e)&&e.constructor===i)return e;var r=Ab.f(i),t=r.resolve;return t(e),r.promise}});pc=u(()=>{"use strict";var Pb=ee(),Rb=Pe(),gc=ve(),Nb=ir(),dc=ar().CONSTRUCTOR,Ib=vc(),Mb=Rb(`Promise`),Vb=gc&&!dc;Pb({target:`Promise`,stat:!0,forced:gc||dc},{resolve:function(e){return Ib(Vb&&this===Mb?Nb:this,e)}})});yc=u(()=>{"use strict";Bh();oc();lc();hc();cc();pc()});de=u((ZE,bc)=>{"use strict";var _b=pa(),Db=String;bc.exports=function(i){if(_b(i)===`Symbol`)throw new TypeError(`Cannot convert a Symbol value to a string`);return Db(i)}});Ja=u((JE,xc)=>{"use strict";var Lb=J();xc.exports=function(){var i=Lb(this),e=``;return i.hasIndices&&(e+=`d`),i.global&&(e+=`g`),i.ignoreCase&&(e+=`i`),i.multiline&&(e+=`m`),i.dotAll&&(e+=`s`),i.unicode&&(e+=`u`),i.unicodeSets&&(e+=`v`),i.sticky&&(e+=`y`),e}});an=u((ew,Tc)=>{"use strict";var en=_(),rn=M().RegExp,tn=en(function(){var i=rn(`a`,`y`);return i.lastIndex=2,i.exec(`abcd`)!==null}),Bb=tn||en(function(){return!rn(`a`,`y`).sticky});Tc.exports={BROKEN_CARET:tn||en(function(){var i=rn(`^r`,`gy`);return i.lastIndex=2,i.exec(`str`)!==null}),MISSED_STICKY:Bb,UNSUPPORTED_Y:tn}});Sc=u((rw,Oc)=>{"use strict";var Ub=fa(),Fb=Et();Oc.exports=Object.keys||function(e){return Ub(e,Fb)}});wc=u(Ec=>{"use strict";var zb=ue(),$b=Qi(),Gb=Oe(),Hb=J(),Yb=Ke(),Xb=Sc();Ec.f=zb&&!$b?Object.defineProperties:function(e,r){Hb(e);for(var t=Yb(r),a=Xb(r),n=a.length,o=0,s;n>o;)Gb.f(e,s=a[o++],t[s]);return e}});zr=u((iw,Ic)=>{"use strict";var Wb=J(),Qb=wc(),Cc=Et(),Kb=mt(),Zb=xa(),Jb=wr(),ex=yt(),qc=`>`,Ac=`<`,sn=`prototype`,on=`script`,Rc=ex(`IE_PROTO`),nn=function(){},Nc=function(i){return Ac+on+qc+i+Ac+`/`+on+qc},Pc=function(i){i.write(Nc(``)),i.close();var e=i.parentWindow.Object;return i=null,e},rx=function(){var i=Jb(`iframe`),e=`java`+on+`:`,r;return i.style.display=`none`,Zb.appendChild(i),i.src=String(e),r=i.contentWindow.document,r.open(),r.write(Nc(`document.F=Object`)),r.close(),r.F},Bt,jt=function(){try{Bt=new ActiveXObject(`htmlfile`)}catch{}jt=typeof document<`u`?document.domain&&Bt?Pc(Bt):rx():Pc(Bt);for(var i=Cc.length;i--;)delete jt[sn][Cc[i]];return jt()};Kb[Rc]=!0;Ic.exports=Object.create||function(e,r){var t;return e!==null?(nn[sn]=Wb(e),t=new nn,nn[sn]=null,t[Rc]=e):t=jt(),r===void 0?t:Qb.f(t,r)}});Vc=u((aw,Mc)=>{"use strict";var tx=_(),ax=M().RegExp;Mc.exports=tx(function(){var i=ax(`.`,`s`);return!(i.dotAll&&i.test(` `)&&i.flags===`s`)})});Dc=u((nw,_c)=>{"use strict";var nx=_(),ox=M().RegExp;_c.exports=nx(function(){var i=ox(`(?b)`,`g`);return i.exec(`b`).groups.a!==`b`||`b`.replace(i,`$c`)!==`bc`})});zt=u((sw,jc)=>{"use strict";var hr=H(),Ft=D(),ux=de(),lx=Ja(),hx=an(),cx=gt(),fx=zr(),vx=Pr().get,gx=Vc(),dx=Dc(),px=cx(`native-string-replace`,String.prototype.replace),Ut=RegExp.prototype.exec,un=Ut,yx=Ft(``.charAt),mx=Ft(``.indexOf),bx=Ft(``.replace),Lc=Ft(``.slice),ln=(function(){var i=/a/,e=/b*/g;return hr(Ut,i,`a`),hr(Ut,e,`a`),i.lastIndex!==0||e.lastIndex!==0})(),Bc=hx.BROKEN_CARET,hn=/()??/.exec(``)[1]!==void 0,xx=ln||hn||Bc||gx||dx,kc=function(i,e){for(var r=i.groups=fx(null),t=0;t0&&yx(a,r.lastIndex-1);r.lastIndex>0&&(!r.multiline||r.multiline&&p!==` `&&p!==`\r`&&p!==`\u2028`&&p!==`\u2029`)&&(v=`(?: (?:`+v+`))`,g=` `+g,f++),s=new RegExp(`^(?:`+v+`)`,c)}hn&&(s=new RegExp(`^`+v+`$(?!\\s)`,c)),ln&&(u=r.lastIndex);var y=hr(Ut,h?s:r,g);return h?y?(y.input=a,y[0]=Lc(y[0],f),y.index=r.lastIndex,r.lastIndex+=y[0].length):r.lastIndex=0:ln&&y&&(r.lastIndex=r.global?y.index+y[0].length:u),hn&&y&&y.length>1&&hr(px,y[0],s,function(){for(var m=1;m{"use strict";var Tx=ee(),Uc=zt();Tx({target:`RegExp`,proto:!0,forced:/./.exec!==Uc},{exec:Uc})});$t=u((lw,Yc)=>{"use strict";Fc();var zc=H(),$c=Re(),Ox=zt(),Gc=_(),Hc=z(),Sx=er(),Ex=Hc(`species`),cn=RegExp.prototype;Yc.exports=function(i,e,r,t){var a=Hc(i),n=!Gc(function(){var l={};return l[a]=function(){return 7},``[i](l)!==7}),o=n&&!Gc(function(){var l=!1,h=/a/;if(i===`split`){var c={};c[Ex]=function(){return h},h={constructor:c,flags:``},h[a]=/./[a]}return h.exec=function(){return l=!0,null},h[a](``),!l});if(!n||!o||r){var s=/./[a],u=e(a,``[i],function(l,h,c,v,f){var g=h.exec;return g===Ox||g===cn.exec?n&&!f?{done:!0,value:zc(s,h,c,v)}:{done:!0,value:zc(l,c,h,v)}:{done:!1}});$c(String.prototype,i,u[0]),$c(cn,a,u[1])}t&&Sx(cn[a],`sham`,!0)}});Kc=u((hw,Qc)=>{"use strict";var fn=D(),wx=Rr(),Cx=de(),qx=le(),Ax=fn(``.charAt),Xc=fn(``.charCodeAt),Px=fn(``.slice),Wc=function(i){return function(e,r){var t=Cx(qx(e)),a=wx(r),n=t.length,o,s;return a<0||a>=n?i?``:void 0:(o=Xc(t,a),o<55296||o>56319||a+1===n||(s=Xc(t,a+1))<56320||s>57343?i?Ax(t,a):o:i?Px(t,a,a+2):(o-55296<<10)+(s-56320)+65536)}};Qc.exports={codeAt:Wc(!1),charAt:Wc(!0)}});Gt=u((cw,Zc)=>{"use strict";var Rx=Kc().charAt;Zc.exports=function(i,e,r){return e+(r&&Rx(i,e).length||1)}});rf=u((fw,ef)=>{"use strict";var Nx=M(),Ix=_(),Jc=Nx.RegExp;ef.exports={correct:!Ix(function(){var i=!0;try{Jc(`.`,`d`)}catch{i=!1}var e={},r=``,t=i?`dgimsy`:`gimsy`,a=function(u,l){Object.defineProperty(e,u,{get:function(){return r+=l,!0}})},n={dotAll:`s`,global:`g`,ignoreCase:`i`,multiline:`m`,sticky:`y`};i&&(n.hasIndices=`d`);for(var o in n)a(o,n[o]);return Object.getOwnPropertyDescriptor(Jc.prototype,`flags`).get.call(e)!==t||r!==t})}});$r=u((vw,af)=>{"use strict";var Vx=H(),_x=he(),Dx=Or(),tf=rf(),Lx=Ja(),kx=RegExp.prototype;af.exports=tf.correct?function(i){return i.flags}:function(i){return!tf.correct&&Dx(kx,i)&&!_x(i,`flags`)?Vx(Lx,i):i.flags}});Ht=u((gw,sf)=>{"use strict";var nf=H(),Bx=J(),jx=L(),Ux=xe(),Fx=zt(),zx=TypeError;sf.exports=function(i,e){var r=i.exec;if(jx(r)){var t=nf(r,i,e);return t!==null&&Bx(t),t}if(Ux(i)===`RegExp`)return nf(Fx,i,e);throw new zx(`RegExp#exec called on incompatible receiver`)}});uf=u(()=>{"use strict";var $x=H(),Gx=D(),Hx=$t(),Yx=J(),Xx=te(),Wx=je(),Yt=de(),Qx=le(),Kx=ke(),Zx=Gt(),Jx=$r(),of=Ht(),vn=Gx(``.indexOf);Hx(`match`,function(i,e,r){return[function(a){var n=Qx(this),o=Xx(a)?Kx(a,i):void 0;if(o)return $x(o,a,n);var s=Yt(n);return new RegExp(a)[i](s)},function(t){var a=Yx(this),n=Yt(t),o=r(e,a,n);if(o.done)return o.value;var s=Yt(Jx(a));if(!~vn(s,`g`))return of(a,n);var u=!!~vn(s,`u`)||!!~vn(s,`v`);a.lastIndex=0;for(var l=[],h=0,c;(c=of(a,n))!==null;){var v=Yt(c[0]);l[h]=v,v===``&&(a.lastIndex=Zx(n,Wx(a.lastIndex),u)),h++}return h===0?null:l}]})});hf=u((yw,lf)=>{"use strict";var pn=D(),e1=Er(),r1=Math.floor,gn=pn(``.charAt),t1=pn(``.replace),dn=pn(``.slice),i1=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,a1=/\$([$&'`]|\d{1,2})/g;lf.exports=function(i,e,r,t,a,n){var o=r+i.length,s=t.length,u=a1;return a!==void 0&&(a=e1(a),u=i1),t1(n,u,function(l,h){var c;switch(gn(h,0)){case`$`:return`$`;case`&`:return i;case"`":return dn(e,0,r);case`'`:return dn(e,o);case`<`:c=a[dn(h,1,-1)];break;default:var v=+h;if(v===0)return l;if(v>s){var f=r1(v/10);return f===0?l:f<=s?t[f-1]===void 0?gn(h,1):t[f-1]+gn(h,1):l}c=t[v-1]}return c===void 0?``:c})}});gf=u(()=>{"use strict";var n1=ba(),cf=H(),Xt=D(),s1=$t(),o1=_(),u1=J(),l1=L(),h1=te(),c1=Rr(),f1=je(),ze=de(),v1=le(),g1=Gt(),d1=ke(),p1=hf(),y1=$r(),m1=Ht(),mn=z()(`replace`),x1=Math.max,T1=Math.min,O1=Xt([].concat),yn=Xt([].push),cr=Xt(``.indexOf),ff=Xt(``.slice),S1=function(i){return i===void 0?i:String(i)},E1=(function(){return`a`.replace(/./,`$0`)===`$0`})(),vf=(function(){return/./[mn]?/./[mn](`a`,`$0`)===``:!1})();s1(`replace`,function(i,e,r){var t=vf?`$`:`$0`;return[function(n,o){var s=v1(this),u=h1(n)?d1(n,mn):void 0;return u?cf(u,n,s,o):cf(e,ze(s),n,o)},function(a,n){var o=u1(this),s=ze(a),u=l1(n);u||(n=ze(n));var l=ze(y1(o));if(typeof n==`string`&&!~cr(n,t)&&!~cr(n,`$<`)&&!~cr(l,`y`)){var h=r(e,o,s,n);if(h.done)return h.value}var c=!!~cr(l,`g`),v;c&&(v=!!~cr(l,`u`)||!!~cr(l,`v`),o.lastIndex=0);for(var f=[],g;g=m1(o,s),!(g===null||(yn(f,g),!c));)ze(g[0])===``&&(o.lastIndex=g1(s,f1(o.lastIndex),v));for(var y=``,m=0,O=0;O=m&&(y+=ff(s,m,T)+C,m=T+x.length)}return y+ff(s,m)}]},!!o1(function(){var i=/./;return i.exec=function(){var e=[];return e.groups={a:`7`},e},``.replace(i,`$`)!==`7`})||!E1||vf)});pf=u((xw,df)=>{"use strict";var C1=te(),q1=xe(),P1=z()(`match`);df.exports=function(i){var e;return C1(i)&&((e=i[P1])!==void 0?!!e:q1(i)===`RegExp`)}});Wt=u((Tw,yf)=>{"use strict";var R1=pf(),N1=TypeError;yf.exports=function(i){if(R1(i))throw new N1(`The method doesn't accept regular expressions`);return i}});Qt=u((Ow,mf)=>{"use strict";var M1=z()(`match`);mf.exports=function(i){var e=/./;try{`/./`[i](e)}catch{try{return e[M1]=!1,`/./`[i](e)}catch{}}return!1}});Tf=u(()=>{"use strict";var V1=ee(),_1=Dr(),D1=Cr().f,L1=je(),bf=de(),k1=Wt(),B1=le(),j1=Qt(),U1=ve(),F1=_1(``.slice),z1=Math.min,xf=j1(`startsWith`);V1({target:`String`,proto:!0,forced:!(!U1&&!xf&&!!(function(){var i=D1(String.prototype,`startsWith`);return i&&!i.writable})())&&!xf},{startsWith:function(e){var r=bf(B1(this));k1(e);var t=bf(e),a=L1(z1(arguments.length>1?arguments[1]:void 0,r.length));return F1(r,a,a+t.length)===t}})});Sf=u((ww,Of)=>{"use strict";var G1=z(),H1=zr(),Y1=Oe().f,bn=G1(`unscopables`),xn=Array.prototype;xn[bn]===void 0&&Y1(xn,bn,{configurable:!0,value:H1(null)});Of.exports=function(i){xn[bn][i]=!0}});wf=u((Cw,Ef)=>{"use strict";Ef.exports=!_()(function(){function i(){}return i.prototype.constructor=null,Object.getPrototypeOf(new i)!==i.prototype})});On=u((qw,qf)=>{"use strict";var W1=he(),Q1=L(),K1=Er(),Z1=yt(),J1=wf(),Cf=Z1(`IE_PROTO`),Tn=Object,e2=Tn.prototype;qf.exports=J1?Tn.getPrototypeOf:function(i){var e=K1(i);if(W1(e,Cf))return e[Cf];var r=e.constructor;return Q1(r)&&e instanceof r?r.prototype:e instanceof Tn?e2:null}});Cn=u((Aw,Rf)=>{"use strict";var r2=_(),t2=L(),i2=te(),a2=zr(),Af=On(),n2=Re(),s2=z(),o2=ve(),wn=s2(`iterator`),Pf=!1,Se,Sn,En;[].keys&&(En=[].keys(),`next`in En?(Sn=Af(Af(En)),Sn!==Object.prototype&&(Se=Sn)):Pf=!0);!i2(Se)||r2(function(){var i={};return Se[wn].call(i)!==i})?Se={}:o2&&(Se=a2(Se));t2(Se[wn])||n2(Se,wn,function(){return this});Rf.exports={IteratorPrototype:Se,BUGGY_SAFARI_ITERATORS:Pf}});If=u((Pw,Nf)=>{"use strict";var l2=Cn().IteratorPrototype,h2=zr(),c2=lt(),f2=Vr(),v2=Fr(),g2=function(){return this};Nf.exports=function(i,e,r,t){var a=e+` Iterator`;return i.prototype=h2(l2,{next:c2(+!t,r)}),f2(i,a,!1,!0),v2[a]=g2,i}});zf=u((Rw,Ff)=>{"use strict";var d2=ee(),p2=H(),Kt=ve(),jf=qr(),y2=L(),m2=If(),Mf=On(),Vf=da(),b2=Vr(),x2=er(),qn=Re(),T2=z(),_f=Fr(),Uf=Cn(),O2=jf.PROPER,S2=jf.CONFIGURABLE,Df=Uf.IteratorPrototype,Zt=Uf.BUGGY_SAFARI_ITERATORS,Gr=T2(`iterator`),Lf=`keys`,Hr=`values`,kf=`entries`,Bf=function(){return this};Ff.exports=function(i,e,r,t,a,n,o){m2(r,e,t);var s=function(m){if(m===a&&v)return v;if(!Zt&&m&&m in h)return h[m];switch(m){case Lf:return function(){return new r(this,m)};case Hr:return function(){return new r(this,m)};case kf:return function(){return new r(this,m)}}return function(){return new r(this)}},u=e+` Iterator`,l=!1,h=i.prototype,c=h[Gr]||h[`@@iterator`]||a&&h[a],v=!Zt&&c||s(a),f=e===`Array`&&h.entries||c,g,p,y;if(f&&(g=Mf(f.call(new i)),g!==Object.prototype&&g.next&&(!Kt&&Mf(g)!==Df&&(Vf?Vf(g,Df):y2(g[Gr])||qn(g,Gr,Bf)),b2(g,u,!0,!0),Kt&&(_f[u]=Bf))),O2&&a===Hr&&c&&c.name!==Hr&&(!Kt&&S2?x2(h,`name`,Hr):(l=!0,v=function(){return p2(c,this)})),a)if(p={values:s(Hr),keys:n?v:s(Lf),entries:s(kf)},o)for(y in p)(Zt||l||!(y in h))&&qn(h,y,p[y]);else d2({target:e,proto:!0,forced:Zt||l},p);return(!Kt||o)&&h[Gr]!==v&&qn(h,Gr,v,{name:a}),_f[e]=v,p}});Gf=u((Nw,$f)=>{"use strict";$f.exports=function(i,e){return{value:i,done:e}}});Pn=u((Iw,Qf)=>{"use strict";var E2=Ke(),An=Sf(),Hf=Fr(),Xf=Pr(),w2=Oe().f,C2=zf(),Jt=Gf(),q2=ve(),A2=ue(),Wf=`Array Iterator`,P2=Xf.set,R2=Xf.getterFor(Wf);Qf.exports=C2(Array,`Array`,function(i,e){P2(this,{type:Wf,target:E2(i),index:0,kind:e})},function(){var i=R2(this),e=i.target,r=i.index++;if(!e||r>=e.length)return i.target=null,Jt(void 0,!0);switch(i.kind){case`keys`:return Jt(r,!1);case`values`:return Jt(e[r],!1)}return Jt([r,e[r]],!1)},`values`);var Yf=Hf.Arguments=Hf.Array;An(`keys`);An(`values`);An(`entries`);if(!q2&&A2&&Yf.name!==`values`)try{w2(Yf,`name`,{value:`values`})}catch{}});Zf=u((Mw,Kf)=>{"use strict";Kf.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}});rv=u((Vw,ev)=>{"use strict";var Rn=wr()(`span`).classList,Jf=Rn&&Rn.constructor&&Rn.constructor.prototype;ev.exports=Jf===Object.prototype?void 0:Jf});sv=u(()=>{"use strict";var tv=M(),av=Zf(),I2=rv(),Yr=Pn(),iv=er(),M2=Vr(),Nn=z()(`iterator`),In=Yr.values,nv=function(i,e){if(i){if(i[Nn]!==In)try{iv(i,Nn,In)}catch{i[Nn]=In}if(M2(i,e,!0),av[e]){for(var r in Yr)if(i[r]!==Yr[r])try{iv(i,r,Yr[r])}catch{i[r]=Yr[r]}}}};for(ei in av)nv(tv[ei]&&tv[ei].prototype,ei);var ei;nv(I2,`DOMTokenList`)});vv=u((Gw,fv)=>{"use strict";var _2=Te(),D2=Er(),L2=_i(),k2=St(),lv=TypeError,hv=`Reduce of empty array with no initial value`,cv=function(i){return function(e,r,t,a){var n=D2(e),o=L2(n),s=k2(n);if(_2(r),s===0&&t<2)throw new lv(hv);var u=i?s-1:0,l=i?-1:1;if(t<2)for(;;){if(u in o){a=o[u],u+=l;break}if(u+=l,i?u<0:s<=u)throw new lv(hv)}for(;i?u>=0:s>u;u+=l)u in o&&(a=r(a,o[u],u,n));return a}};fv.exports={left:cv(!1),right:cv(!0)}});Mn=u((Hw,gv)=>{"use strict";var B2=_();gv.exports=function(i,e){var r=[][i];return!!r&&B2(function(){r.call(null,e||function(){return 1},1)})}});pv=u(()=>{"use strict";var j2=ee(),U2=vv().left,F2=Mn(),dv=ct();j2({target:`Array`,proto:!0,forced:!Mr()&&dv>79&&dv<83||!F2(`reduce`)},{reduce:function(e){var r=arguments.length;return U2(this,e,r,r>1?arguments[1]:void 0)}})});bv=u(()=>{"use strict";var H2=ee(),Y2=Dr(),X2=Cr().f,W2=je(),yv=de(),Q2=Wt(),K2=le(),Z2=Qt(),J2=ve(),eT=Y2(``.slice),rT=Math.min,mv=Z2(`endsWith`);H2({target:`String`,proto:!0,forced:!(!J2&&!mv&&!!(function(){var i=X2(String.prototype,`endsWith`);return i&&!i.writable})())&&!mv},{endsWith:function(e){var r=yv(K2(this));Q2(e);var t=yv(e),a=arguments.length>1?arguments[1]:void 0,n=r.length,o=a===void 0?n:rT(W2(a),n);return eT(r,o-t.length,o)===t}})});Ov=u(()=>{"use strict";var Vn=H(),kn=D(),iT=$t(),aT=J(),nT=te(),sT=le(),oT=ma(),uT=Gt(),lT=je(),_n=de(),hT=ke(),cT=$r(),xv=Ht(),fT=an(),vT=_(),fr=fT.UNSUPPORTED_Y,gT=4294967295,dT=Math.min,Dn=kn([].push),Ln=kn(``.slice),ti=kn(``.indexOf),pT=!vT(function(){var i=/(?:)/,e=i.exec;i.exec=function(){return e.apply(this,arguments)};var r=`ab`.split(i);return r.length!==2||r[0]!==`a`||r[1]!==`b`}),Tv=`abbc`.split(/(b)*/)[1]===`c`||`test`.split(/(?:)/,-1).length!==4||`ab`.split(/(?:ab)*/).length!==2||`.`.split(/(.?)(.?)/).length!==4||`.`.split(/()()/).length>1||``.split(/.?/).length;iT(`split`,function(i,e,r){var t=`0`.split(void 0,0).length?function(a,n){return a===void 0&&n===0?[]:Vn(e,this,a,n)}:e;return[function(n,o){var s=sT(this),u=nT(n)?hT(n,i):void 0;return u?Vn(u,n,s,o):Vn(t,_n(s),n,o)},function(a,n){var o=aT(this),s=_n(a);if(!Tv){var u=r(t,o,s,n,t!==e);if(u.done)return u.value}var l=oT(o,RegExp),h=_n(cT(o)),c=!!~ti(h,`u`)||!!~ti(h,`v`);fr?~ti(h,`g`)||(h+=`g`):~ti(h,`y`)||(h+=`y`);var v=new l(fr?`^(?:`+o.source+`)`:o,h),f=n===void 0?gT:n>>>0;if(f===0)return[];if(s.length===0)return xv(v,s)===null?[s]:[];for(var g=0,p=0,y=[];p{"use strict";(function(){var i,e,r,t,a,n;typeof performance<`u`&&performance!==null&&performance.now?Xr.exports=function(){return performance.now()}:typeof process<`u`&&process!==null&&process.hrtime?(Xr.exports=function(){return(i()-a)/1e6},e=process.hrtime,i=function(){var o;return o=e(),o[0]*1e9+o[1]},t=i(),n=process.uptime()*1e9,a=t-n):Date.now?(Xr.exports=function(){return Date.now()-r},r=Date.now()):(Xr.exports=function(){return new Date().getTime()-r},r=new Date().getTime())}).call(Sv)});Cv=u((Jw,ni)=>{"use strict";var yT=Ev(),Ee=typeof window>`u`?global:window,ii=[`moz`,`webkit`],gr=`AnimationFrame`,dr=Ee[`request`+gr],Wr=Ee[`cancel`+gr]||Ee[`cancelRequest`+gr];for(vr=0;!dr&&vr{"use strict";qv.exports=` \v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`});Rv=u((rC,Pv)=>{"use strict";var mT=D(),bT=le(),xT=de(),Fn=jn(),Av=mT(``.replace),TT=RegExp(`^[`+Fn+`]+`),OT=RegExp(`(^|[^`+Fn+`])[`+Fn+`]+$`),Un=function(i){return function(e){var r=xT(bT(e));return i&1&&(r=Av(r,TT,``)),i&2&&(r=Av(r,OT,`$1`)),r}};Pv.exports={start:Un(1),end:Un(2),trim:Un(3)}});Vv=u((tC,Mv)=>{"use strict";var ST=qr().PROPER,ET=_(),Nv=jn(),Iv=`​…᠎`;Mv.exports=function(i){return ET(function(){return!!Nv[i]()||Iv[i]()!==Iv||ST&&Nv[i].name!==i})}});_v=u(()=>{"use strict";var wT=ee(),CT=Rv().trim;wT({target:`String`,proto:!0,forced:Vv()(`trim`)},{trim:function(){return CT(this)}})});Lv=u((nC,Dv)=>{"use strict";Dv.exports=function(i){this.ok=!1,this.alpha=1,i.charAt(0)==`#`&&(i=i.substr(1,6)),i=i.replace(/ /g,``),i=i.toLowerCase();var e={aliceblue:`f0f8ff`,antiquewhite:`faebd7`,aqua:`00ffff`,aquamarine:`7fffd4`,azure:`f0ffff`,beige:`f5f5dc`,bisque:`ffe4c4`,black:`000000`,blanchedalmond:`ffebcd`,blue:`0000ff`,blueviolet:`8a2be2`,brown:`a52a2a`,burlywood:`deb887`,cadetblue:`5f9ea0`,chartreuse:`7fff00`,chocolate:`d2691e`,coral:`ff7f50`,cornflowerblue:`6495ed`,cornsilk:`fff8dc`,crimson:`dc143c`,cyan:`00ffff`,darkblue:`00008b`,darkcyan:`008b8b`,darkgoldenrod:`b8860b`,darkgray:`a9a9a9`,darkgreen:`006400`,darkkhaki:`bdb76b`,darkmagenta:`8b008b`,darkolivegreen:`556b2f`,darkorange:`ff8c00`,darkorchid:`9932cc`,darkred:`8b0000`,darksalmon:`e9967a`,darkseagreen:`8fbc8f`,darkslateblue:`483d8b`,darkslategray:`2f4f4f`,darkturquoise:`00ced1`,darkviolet:`9400d3`,deeppink:`ff1493`,deepskyblue:`00bfff`,dimgray:`696969`,dodgerblue:`1e90ff`,feldspar:`d19275`,firebrick:`b22222`,floralwhite:`fffaf0`,forestgreen:`228b22`,fuchsia:`ff00ff`,gainsboro:`dcdcdc`,ghostwhite:`f8f8ff`,gold:`ffd700`,goldenrod:`daa520`,gray:`808080`,green:`008000`,greenyellow:`adff2f`,honeydew:`f0fff0`,hotpink:`ff69b4`,indianred:`cd5c5c`,indigo:`4b0082`,ivory:`fffff0`,khaki:`f0e68c`,lavender:`e6e6fa`,lavenderblush:`fff0f5`,lawngreen:`7cfc00`,lemonchiffon:`fffacd`,lightblue:`add8e6`,lightcoral:`f08080`,lightcyan:`e0ffff`,lightgoldenrodyellow:`fafad2`,lightgrey:`d3d3d3`,lightgreen:`90ee90`,lightpink:`ffb6c1`,lightsalmon:`ffa07a`,lightseagreen:`20b2aa`,lightskyblue:`87cefa`,lightslateblue:`8470ff`,lightslategray:`778899`,lightsteelblue:`b0c4de`,lightyellow:`ffffe0`,lime:`00ff00`,limegreen:`32cd32`,linen:`faf0e6`,magenta:`ff00ff`,maroon:`800000`,mediumaquamarine:`66cdaa`,mediumblue:`0000cd`,mediumorchid:`ba55d3`,mediumpurple:`9370d8`,mediumseagreen:`3cb371`,mediumslateblue:`7b68ee`,mediumspringgreen:`00fa9a`,mediumturquoise:`48d1cc`,mediumvioletred:`c71585`,midnightblue:`191970`,mintcream:`f5fffa`,mistyrose:`ffe4e1`,moccasin:`ffe4b5`,navajowhite:`ffdead`,navy:`000080`,oldlace:`fdf5e6`,olive:`808000`,olivedrab:`6b8e23`,orange:`ffa500`,orangered:`ff4500`,orchid:`da70d6`,palegoldenrod:`eee8aa`,palegreen:`98fb98`,paleturquoise:`afeeee`,palevioletred:`d87093`,papayawhip:`ffefd5`,peachpuff:`ffdab9`,peru:`cd853f`,pink:`ffc0cb`,plum:`dda0dd`,powderblue:`b0e0e6`,purple:`800080`,rebeccapurple:`663399`,red:`ff0000`,rosybrown:`bc8f8f`,royalblue:`4169e1`,saddlebrown:`8b4513`,salmon:`fa8072`,sandybrown:`f4a460`,seagreen:`2e8b57`,seashell:`fff5ee`,sienna:`a0522d`,silver:`c0c0c0`,skyblue:`87ceeb`,slateblue:`6a5acd`,slategray:`708090`,snow:`fffafa`,springgreen:`00ff7f`,steelblue:`4682b4`,tan:`d2b48c`,teal:`008080`,thistle:`d8bfd8`,tomato:`ff6347`,turquoise:`40e0d0`,violet:`ee82ee`,violetred:`d02090`,wheat:`f5deb3`,white:`ffffff`,whitesmoke:`f5f5f5`,yellow:`ffff00`,yellowgreen:`9acd32`};i=e[i]||i;for(var r=[{re:/^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*((?:\d?\.)?\d)\)$/,example:[`rgba(123, 234, 45, 0.8)`,`rgba(255,234,245,1.0)`],process:function(u){return[parseInt(u[1]),parseInt(u[2]),parseInt(u[3]),parseFloat(u[4])]}},{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:[`rgb(123, 234, 45)`,`rgb(255,234,245)`],process:function(u){return[parseInt(u[1]),parseInt(u[2]),parseInt(u[3])]}},{re:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,example:[`#00ff00`,`336699`],process:function(u){return[parseInt(u[1],16),parseInt(u[2],16),parseInt(u[3],16)]}},{re:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,example:[`#fb0`,`f0f`],process:function(u){return[parseInt(u[1]+u[1],16),parseInt(u[2]+u[2],16),parseInt(u[3]+u[3],16)]}}],t=0;t3&&(this.alpha=s[3]),this.ok=!0}}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.alpha=this.alpha<0?0:this.alpha>1||isNaN(this.alpha)?1:this.alpha,this.toRGB=function(){return`rgb(`+this.r+`, `+this.g+`, `+this.b+`)`},this.toRGBA=function(){return`rgba(`+this.r+`, `+this.g+`, `+this.b+`, `+this.alpha+`)`},this.toHex=function(){var u=this.r.toString(16),l=this.g.toString(16),h=this.b.toString(16);return u.length==1&&(u=`0`+u),l.length==1&&(l=`0`+l),h.length==1&&(h=`0`+h),`#`+u+l+h},this.getHelpXML=function(){for(var u=new Array,l=0;l `+p.toRGB()+` -> `+p.toHex());g.appendChild(y),g.appendChild(m),f.appendChild(g)}catch{}return f}}});Bv=u(()=>{"use strict";var AT=ee(),PT=Dr(),RT=ha().indexOf,NT=Mn(),zn=PT([].indexOf),kv=!!zn&&1/zn([1],1,-0)<0;AT({target:`Array`,proto:!0,forced:kv||!NT(`indexOf`)},{indexOf:function(e){var r=arguments.length>1?arguments[1]:void 0;return kv?zn(this,e,r)||0:RT(this,e,r)}})});Uv=u(()=>{"use strict";var MT=ee(),VT=D(),_T=Wt(),DT=le(),jv=de(),LT=Qt(),kT=VT(``.indexOf);MT({target:`String`,proto:!0,forced:!LT(`includes`)},{includes:function(e){return!!~kT(jv(DT(this)),jv(_T(e)),arguments.length>1?arguments[1]:void 0)}})});zv=u((hC,Fv)=>{"use strict";var BT=xe();Fv.exports=Array.isArray||function(e){return BT(e)===`Array`}});Gv=u(()=>{"use strict";var jT=ee(),UT=D(),FT=zv(),zT=UT([].reverse),$v=[1,2];jT({target:`Array`,proto:!0,forced:String($v)===String($v.reverse())},{reverse:function(){return FT(this)&&(this.length=this.length),zT(this)}})});ag=u(()=>{"use strict";var XT=qr().PROPER,WT=Re(),QT=J(),rg=de(),KT=_(),ZT=$r(),Hn=`toString`,tg=RegExp.prototype,ig=tg[Hn],JT=KT(function(){return ig.call({source:`a`,flags:`b`})!==`/a/b`}),eO=XT&&ig.name!==Hn;(JT||eO)&&WT(tg,Hn,function(){var e=QT(this),r=rg(e.source),t=rg(ZT(e));return`/`+r+`/`+t},{unsafe:!0})});v(yc(),1);v(uf(),1);v(gf(),1);v(Tf(),1);v(Pn(),1);v(sv(),1);v(pv(),1);v(bv(),1);v(Ov(),1);hi=v(Cv(),1);v(_v(),1);ci=v(Lv(),1);v(Bv(),1);v(Uv(),1);v(Gv(),1);Zv=function(i,e){return(Zv=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,t){r.__proto__=t}||function(r,t){for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(r[a]=t[a])})(i,e)};Me=Math.PI;;we=Math.PI/180;(function(i){function e(){return a((function(s,u,l){return s.relative&&(s.x1!==void 0&&(s.x1+=u),s.y1!==void 0&&(s.y1+=l),s.x2!==void 0&&(s.x2+=u),s.y2!==void 0&&(s.y2+=l),s.x!==void 0&&(s.x+=u),s.y!==void 0&&(s.y+=l),s.relative=!1),s}))}function r(){var s=NaN,u=NaN,l=NaN,h=NaN;return a((function(c,v,f){return c.type&b.SMOOTH_CURVE_TO&&(c.type=b.CURVE_TO,s=isNaN(s)?v:s,u=isNaN(u)?f:u,c.x1=c.relative?v-s:2*v-s,c.y1=c.relative?f-u:2*f-u),c.type&b.CURVE_TO?(s=c.relative?v+c.x2:c.x2,u=c.relative?f+c.y2:c.y2):(s=NaN,u=NaN),c.type&b.SMOOTH_QUAD_TO&&(c.type=b.QUAD_TO,l=isNaN(l)?v:l,h=isNaN(h)?f:h,c.x1=c.relative?v-l:2*v-l,c.y1=c.relative?f-h:2*f-h),c.type&b.QUAD_TO?(l=c.relative?v+c.x1:c.x1,h=c.relative?f+c.y1:c.y1):(l=NaN,h=NaN),c}))}function t(){var s=NaN,u=NaN;return a((function(l,h,c){if(l.type&b.SMOOTH_QUAD_TO&&(l.type=b.QUAD_TO,s=isNaN(s)?h:s,u=isNaN(u)?c:u,l.x1=l.relative?h-s:2*h-s,l.y1=l.relative?c-u:2*c-u),l.type&b.QUAD_TO){s=l.relative?h+l.x1:l.x1,u=l.relative?c+l.y1:l.y1;var v=l.x1,f=l.y1;l.type=b.CURVE_TO,l.x1=((l.relative?0:h)+2*v)/3,l.y1=((l.relative?0:c)+2*f)/3,l.x2=(l.x+2*v)/3,l.y2=(l.y+2*f)/3}else s=NaN,u=NaN;return l}))}function a(s){var u=0,l=0,h=NaN,c=NaN;return function(v){if(isNaN(h)&&!(v.type&b.MOVE_TO))throw new Error(`path must start with moveto`);var f=s(v,u,l,h,c);return v.type&b.CLOSE_PATH&&(u=h,l=c),v.x!==void 0&&(u=v.relative?u+v.x:v.x),v.y!==void 0&&(l=v.relative?l+v.y:v.y),v.type&b.MOVE_TO&&(h=u,c=l),f}}function n(s,u,l,h,c,v){return ye(s,u,l,h,c,v),a((function(f,g,p,y){var m=f.x1,O=f.x2,x=f.relative&&!isNaN(y),T=f.x!==void 0?f.x:x?0:g,E=f.y!==void 0?f.y:x?0:p;function C(ce){return ce*ce}f.type&b.HORIZ_LINE_TO&&u!==0&&(f.type=b.LINE_TO,f.y=f.relative?0:p),f.type&b.VERT_LINE_TO&&l!==0&&(f.type=b.LINE_TO,f.x=f.relative?0:g),f.x!==void 0&&(f.x=f.x*s+E*l+(x?0:c)),f.y!==void 0&&(f.y=T*u+f.y*h+(x?0:v)),f.x1!==void 0&&(f.x1=f.x1*s+f.y1*l+(x?0:c)),f.y1!==void 0&&(f.y1=m*u+f.y1*h+(x?0:v)),f.x2!==void 0&&(f.x2=f.x2*s+f.y2*l+(x?0:c)),f.y2!==void 0&&(f.y2=O*u+f.y2*h+(x?0:v));var S=s*h-u*l;if(f.xRot!==void 0&&(s!==1||u!==0||l!==0||h!==1))if(S===0)delete f.rX,delete f.rY,delete f.xRot,delete f.lArcFlag,delete f.sweepFlag,f.type=b.LINE_TO;else{var A=f.xRot*Math.PI/180,P=Math.sin(A),V=Math.cos(A),k=1/C(f.rX),N=1/C(f.rY),X=C(V)*k+C(P)*N,W=2*P*V*(k-N),G=C(P)*k+C(V)*N,Q=X*h*h-W*u*h+G*u*u,Y=W*(s*h+u*l)-2*(X*l*h+G*s*u),K=X*l*l-W*s*l+G*s*s,I=(Math.atan2(Y,Q-K)+Math.PI)%Math.PI/2,R=Math.sin(I),re=Math.cos(I);f.rX=Math.abs(S)/Math.sqrt(Q*C(re)+Y*R*re+K*C(R)),f.rY=Math.abs(S)/Math.sqrt(Q*C(R)-Y*R*re+K*C(re)),f.xRot=180*I/Math.PI}return f.sweepFlag!==void 0&&0>S&&(f.sweepFlag=+!f.sweepFlag),f}))}function o(){return function(s){var u={};for(var l in s)u[l]=s[l];return u}}i.ROUND=function(s){function u(l){return Math.round(l*s)/s}return s===void 0&&(s=0x9184e72a000),ye(s),function(l){return l.x1!==void 0&&(l.x1=u(l.x1)),l.y1!==void 0&&(l.y1=u(l.y1)),l.x2!==void 0&&(l.x2=u(l.x2)),l.y2!==void 0&&(l.y2=u(l.y2)),l.x!==void 0&&(l.x=u(l.x)),l.y!==void 0&&(l.y=u(l.y)),l.rX!==void 0&&(l.rX=u(l.rX)),l.rY!==void 0&&(l.rY=u(l.rY)),l}},i.TO_ABS=e,i.TO_REL=function(){return a((function(s,u,l){return s.relative||(s.x1!==void 0&&(s.x1-=u),s.y1!==void 0&&(s.y1-=l),s.x2!==void 0&&(s.x2-=u),s.y2!==void 0&&(s.y2-=l),s.x!==void 0&&(s.x-=u),s.y!==void 0&&(s.y-=l),s.relative=!0),s}))},i.NORMALIZE_HVZ=function(s,u,l){return s===void 0&&(s=!0),u===void 0&&(u=!0),l===void 0&&(l=!0),a((function(h,c,v,f,g){if(isNaN(f)&&!(h.type&b.MOVE_TO))throw new Error(`path must start with moveto`);return u&&h.type&b.HORIZ_LINE_TO&&(h.type=b.LINE_TO,h.y=h.relative?0:v),l&&h.type&b.VERT_LINE_TO&&(h.type=b.LINE_TO,h.x=h.relative?0:c),s&&h.type&b.CLOSE_PATH&&(h.type=b.LINE_TO,h.x=h.relative?f-c:f,h.y=h.relative?g-v:g),h.type&b.ARC&&(h.rX===0||h.rY===0)&&(h.type=b.LINE_TO,delete h.rX,delete h.rY,delete h.xRot,delete h.lArcFlag,delete h.sweepFlag),h}))},i.NORMALIZE_ST=r,i.QT_TO_C=t,i.INFO=a,i.SANITIZE=function(s){s===void 0&&(s=0),ye(s);var u=NaN,l=NaN,h=NaN,c=NaN;return a((function(v,f,g,p,y){var m=Math.abs,O=!1,x=0,T=0;if(v.type&b.SMOOTH_CURVE_TO&&(x=isNaN(u)?0:f-u,T=isNaN(l)?0:g-l),v.type&(b.CURVE_TO|b.SMOOTH_CURVE_TO)?(u=v.relative?f+v.x2:v.x2,l=v.relative?g+v.y2:v.y2):(u=NaN,l=NaN),v.type&b.SMOOTH_QUAD_TO?(h=isNaN(h)?f:2*f-h,c=isNaN(c)?g:2*g-c):v.type&b.QUAD_TO?(h=v.relative?f+v.x1:v.x1,c=v.relative?g+v.y1:v.y2):(h=NaN,c=NaN),v.type&b.LINE_COMMANDS||v.type&b.ARC&&(v.rX===0||v.rY===0||!v.lArcFlag)||v.type&b.CURVE_TO||v.type&b.SMOOTH_CURVE_TO||v.type&b.QUAD_TO||v.type&b.SMOOTH_QUAD_TO){var E=v.x===void 0?0:v.relative?v.x:v.x-f,C=v.y===void 0?0:v.relative?v.y:v.y-g;x=isNaN(h)?v.x1===void 0?x:v.relative?v.x:v.x1-f:h-f,T=isNaN(c)?v.y1===void 0?T:v.relative?v.y:v.y1-g:c-g;var S=v.x2===void 0?0:v.relative?v.x:v.x2-f,A=v.y2===void 0?0:v.relative?v.y:v.y2-g;m(E)<=s&&m(C)<=s&&m(x)<=s&&m(T)<=s&&m(S)<=s&&m(A)<=s&&(O=!0)}return v.type&b.CLOSE_PATH&&m(f-p)<=s&&m(g-y)<=s&&(O=!0),O?[]:v}))},i.MATRIX=n,i.ROTATE=function(s,u,l){u===void 0&&(u=0),l===void 0&&(l=0),ye(s,u,l);var h=Math.sin(s),c=Math.cos(s);return n(c,h,-h,c,u-u*c+l*h,l-u*h-l*c)},i.TRANSLATE=function(s,u){return u===void 0&&(u=0),ye(s,u),n(1,0,0,1,s,u)},i.SCALE=function(s,u){return u===void 0&&(u=s),ye(s,u),n(s,0,0,u,0,0)},i.SKEW_X=function(s){return ye(s),n(1,0,Math.atan(s),1,0,0)},i.SKEW_Y=function(s){return ye(s),n(1,Math.atan(s),0,1,0,0)},i.X_AXIS_SYMMETRY=function(s){return s===void 0&&(s=0),ye(s),n(-1,0,0,1,s,0)},i.Y_AXIS_SYMMETRY=function(s){return s===void 0&&(s=0),ye(s),n(1,0,0,-1,0,s)},i.A_TO_C=function(){return a((function(s,u,l){return b.ARC===s.type?(function(h,c,v){var f,g,p,y;h.cX||$n(h,c,v);for(var m=Math.min(h.phi1,h.phi2),O=Math.max(h.phi1,h.phi2)-m,x=Math.ceil(O/90),T=new Array(x),E=c,C=v,S=0;Sc.maxX&&(c.maxX=R),Rc.maxY&&(c.maxY=R),RI&&y(Qv(f,p.x1,p.x2,p.x,I));for(var T=0,E=Wv(g,p.y1,p.y2,p.y);TI&&m(Qv(g,p.y1,p.y2,p.y,I))}if(p.type&b.ARC){y(p.x),m(p.y),$n(p,f,g);for(var C=p.xRot/180*Math.PI,S=Math.cos(C)*p.rX,A=Math.sin(C)*p.rX,P=-Math.sin(C)*p.rY,V=Math.cos(C)*p.rY,k=p.phi1p.phi2?[p.phi2+360,p.phi1+360]:[p.phi2,p.phi1],N=k[0],X=k[1],W=function(R){var re=R[0],ce=R[1],me=180*Math.atan2(ce,re)/Math.PI;return meN&&IN&&I{init_chunk_IFGU66OU();MQ=u((nt,st)=>{(function(IA,P){typeof nt==`object`&&typeof st<`u`?st.exports=P():typeof define==`function`&&define.amd?define(P):(IA=typeof globalThis<`u`?globalThis:IA||self,IA.html2canvas=P())})(nt,(function(){"use strict";var IA=function(e,A){return IA=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,r){t.__proto__=r}||function(t,r){for(var B in r)Object.prototype.hasOwnProperty.call(r,B)&&(t[B]=r[B])},IA(e,A)};function P(e,A){if(typeof A!=`function`&&A!==null)throw new TypeError(`Class extends value `+String(A)+` is not a constructor or null`);IA(e,A);function t(){this.constructor=e}e.prototype=A===null?Object.create(A):(t.prototype=A.prototype,new t)}var ir=function(){return ir=Object.assign||function(A){for(var t,r=1,B=arguments.length;r0&&n[n.length-1])&&(o[0]===6||o[0]===2)){t=0;continue}if(o[0]===3&&(!n||o[1]>n[0]&&o[1]=55296&&B<=56319&&t>10)+55296,s%1024+56320)),(B+1===t||r.length>16384)&&(n+=String.fromCharCode.apply(String,r),r.length=0)}return n},at=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,gn=typeof Uint8Array>`u`?[]:new Uint8Array(256),fe=0;fe`u`?[]:new Uint8Array(256),Ue=0;Ue>4,Q[B++]=(s&15)<<4|i>>2,Q[B++]=(i&3)<<6|a&63;return o},cn=function(e){for(var A=e.length,t=[],r=0;r>vA,gr=(1<>vA)+32,En=65536>>or,pn=(1<=0){if(A<55296||A>56319&&A<=65535)return t=this.index[A>>vA],t=(t<>vA)],t=(t<>or),t=this.index[t],t+=A>>vA&pn,t=this.index[t],t=(t<`u`?[]:new Uint8Array(256),Fe=0;Fewt?(B.push(!0),i-=wt):B.push(!1),[`normal`,`auto`,`loose`].indexOf(A)!==-1&&[8208,8211,12316,12448].indexOf(n)!==-1)return r.push(s),t.push(Cr);if(i===Dn||i===wr){if(s===0)return r.push(s),t.push(yA);var a=t[s-1];return Rn.indexOf(a)===-1?(r.push(r[s-1]),t.push(a)):(r.push(s),t.push(yA))}if(r.push(s),i===On)return t.push(A===`strict`?ur:$A);if(i===ht||i===Sn)return t.push(yA);if(i===Mn)return n>=131072&&n<=196605||n>=196608&&n<=262141?t.push($A):t.push(yA);t.push(i)}),[r,t,B]},pr=function(e,A,t,r){var B=r[t];if(Array.isArray(e)?e.indexOf(B)!==-1:e===B)for(var n=t;n<=r.length;){n++;var s=r[n];if(s===A)return!0;if(s!==CA)break}if(B===CA)for(var n=t;n>0;){n--;var i=r[n];if(Array.isArray(e)?e.indexOf(i)!==-1:e===i)for(var a=t;a<=r.length;){a++;var s=r[a];if(s===A)return!0;if(s!==CA)break}if(i!==CA)break}return!1},It=function(e,A){for(var t=e;t>=0;){var r=A[t];if(r===CA)t--;else return r}return 0},Xn=function(e,A,t,r,B){if(t[r]===0)return I;var n=r-1;if(Array.isArray(B)&&B[n]===!0)return I;var s=n-1,i=n+1,a=A[n],o=s>=0?A[s]:0,Q=A[i];if(a===ct&&Q===Ct)return I;if(Hr.indexOf(a)!==-1)return dt;if(Hr.indexOf(Q)!==-1||Et.indexOf(Q)!==-1)return I;if(It(n,A)===lt)return Ie;if(Er.get(e[n])===wr||(a===de||a===Ee)&&Er.get(e[i])===wr||a===ut||Q===ut||a===ft||[CA,cr,WA].indexOf(a)===-1&&Q===ft||[he,ZA,Tn,SA,OA].indexOf(Q)!==-1||It(n,A)===qA||pr(lr,qA,n,A)||pr([he,ZA],ur,n,A)||pr(Ut,Ut,n,A))return I;if(a===CA)return Ie;if(a===lr||Q===lr)return I;if(Q===Cr||a===Cr)return Ie;if([cr,WA,ur].indexOf(Q)!==-1||a===xn||o===Fr&&Vn.indexOf(a)!==-1||a===OA&&Q===Fr||Q===Ft||oA.indexOf(Q)!==-1&&a===j||oA.indexOf(a)!==-1&&Q===j||a===zA&&[$A,de,Ee].indexOf(Q)!==-1||[$A,de,Ee].indexOf(a)!==-1&&Q===jA||oA.indexOf(a)!==-1&&Ht.indexOf(Q)!==-1||Ht.indexOf(a)!==-1&&oA.indexOf(Q)!==-1||[zA,jA].indexOf(a)!==-1&&(Q===j||[qA,WA].indexOf(Q)!==-1&&A[i+1]===j)||[qA,WA].indexOf(a)!==-1&&Q===j||a===j&&[j,OA,SA].indexOf(Q)!==-1)return I;if([j,OA,SA,he,ZA].indexOf(Q)!==-1)for(var g=n;g>=0;){var w=A[g];if(w===j)return I;if([OA,SA].indexOf(w)!==-1)g--;else break}if([zA,jA].indexOf(Q)!==-1)for(var g=[he,ZA].indexOf(a)!==-1?s:n;g>=0;){var w=A[g];if(w===j)return I;if([OA,SA].indexOf(w)!==-1)g--;else break}if(hr===a&&[hr,He,fr,Ur].indexOf(Q)!==-1||[He,fr].indexOf(a)!==-1&&[He,pe].indexOf(Q)!==-1||[pe,Ur].indexOf(a)!==-1&&Q===pe||pt.indexOf(a)!==-1&&[Ft,jA].indexOf(Q)!==-1||pt.indexOf(Q)!==-1&&a===zA||oA.indexOf(a)!==-1&&oA.indexOf(Q)!==-1||a===SA&&oA.indexOf(Q)!==-1||oA.concat(j).indexOf(a)!==-1&&Q===qA&&Gn.indexOf(e[i])===-1||oA.concat(j).indexOf(Q)!==-1&&a===ZA)return I;if(a===dr&&Q===dr){for(var f=t[n],c=1;f>0&&(f--,A[f]===dr);)c++;if(c%2!==0)return I}return a===de&&Q===Ee?I:Ie},_n=function(e,A){A||(A={lineBreak:`normal`,wordBreak:`normal`});var t=Nn(e,A.lineBreak),r=t[0],B=t[1],n=t[2];(A.wordBreak===`break-all`||A.wordBreak===`break-word`)&&(B=B.map(function(i){return[j,yA,ht].indexOf(i)!==-1?$A:i}));var s=A.wordBreak===`keep-all`?n.map(function(i,a){return i&&e[a]>=19968&&e[a]<=40959}):void 0;return[r,B,s]},Jn=(function(){function e(A,t,r,B){this.codePoints=A,this.required=t===dt,this.start=r,this.end=B}return e.prototype.slice=function(){return T.apply(void 0,this.codePoints.slice(this.start,this.end))},e})(),Pn=function(e,A){var t=le(e),r=_n(t,A),B=r[0],n=r[1],s=r[2],i=t.length,a=0,o=0;return{next:function(){if(o>=i)return{done:!0,value:null};for(var Q=I;o=Lt&&e<=57},Is=function(e){return e>=55296&&e<=57343},MA=function(e){return J(e)||e>=xt&&e<=St||e>=Dt&&e<=hs},vs=function(e){return e>=Dt&&e<=Es},ys=function(e){return e>=xt&&e<=ps},Ks=function(e){return vs(e)||ys(e)},ms=function(e){return e>=Qs},De=function(e){return e===ve||e===Wn||e===Zn},be=function(e){return Ks(e)||ms(e)||e===$n},Ot=function(e){return be(e)||J(e)||e===Y},Ls=function(e){return e>=Cs&&e<=us||e===ls||e>=fs&&e<=Us||e===Fs},uA=function(e,A){return e!==ee?!1:A!==ve},xe=function(e,A,t){return e===Y?be(A)||uA(A,t):be(e)?!0:!!(e===ee&&uA(e,A))},vr=function(e,A,t){return e===KA||e===Y?J(A)?!0:A===Be&&J(t):J(e===Be?A:e)},Ds=function(e){var A=0,t=1;(e[A]===KA||e[A]===Y)&&(e[A]===Y&&(t=-1),A++);for(var r=[];J(e[A]);)r.push(e[A++]);var B=r.length?parseInt(T.apply(void 0,r),10):0;e[A]===Be&&A++;for(var n=[];J(e[A]);)n.push(e[A++]);var s=n.length,i=s?parseInt(T.apply(void 0,n),10):0;(e[A]===Tt||e[A]===bt)&&A++;var a=1;(e[A]===KA||e[A]===Y)&&(e[A]===Y&&(a=-1),A++);for(var o=[];J(e[A]);)o.push(e[A++]);var Q=o.length?parseInt(T.apply(void 0,o),10):0;return t*(B+i*Math.pow(10,-s))*Math.pow(10,a*Q)},bs={type:2},xs={type:3},Ts={type:4},Ss={type:13},Os={type:8},Ms={type:21},Gs={type:9},Rs={type:10},Vs={type:11},Ns={type:12},Xs={type:14},Te={type:23},_s={type:1},Js={type:25},Ps={type:24},ks={type:26},Ys={type:27},Ws={type:28},Zs={type:29},qs={type:31},yr={type:32},Mt=(function(){function e(){this._value=[]}return e.prototype.write=function(A){this._value=this._value.concat(le(A))},e.prototype.read=function(){for(var A=[],t=this.consumeToken();t!==yr;)A.push(t),t=this.consumeToken();return A},e.prototype.consumeToken=function(){var A=this.consumeCodePoint();switch(A){case ye:return this.consumeStringToken(ye);case qn:var t=this.peekCodePoint(0),r=this.peekCodePoint(1),B=this.peekCodePoint(2);if(Ot(t)||uA(r,B)){var n=xe(t,r,B)?Yn:kn,s=this.consumeName();return{type:5,value:s,flags:n}}break;case jn:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Ss;break;case Ke:return this.consumeStringToken(Ke);case me:return bs;case te:return xs;case Ir:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Xs;break;case KA:if(vr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case gs:return Ts;case Y:var i=A,a=this.peekCodePoint(0),o=this.peekCodePoint(1);if(vr(i,a,o))return this.reconsumeCodePoint(A),this.consumeNumericToken();if(xe(i,a,o))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();if(a===Y&&o===rs)return this.consumeCodePoint(),this.consumeCodePoint(),Ps;break;case Be:if(vr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case yt:if(this.peekCodePoint(0)===Ir)for(this.consumeCodePoint();;){var Q=this.consumeCodePoint();if(Q===Ir&&(Q=this.consumeCodePoint(),Q===yt))return this.consumeToken();if(Q===BA)return this.consumeToken()}break;case ws:return ks;case cs:return Ys;case es:if(this.peekCodePoint(0)===As&&this.peekCodePoint(1)===Y&&this.peekCodePoint(2)===Y)return this.consumeCodePoint(),this.consumeCodePoint(),Js;break;case ts:if(xe(this.peekCodePoint(0),this.peekCodePoint(1),this.peekCodePoint(2))){var s=this.consumeName();return{type:7,value:s}}break;case Bs:return Ws;case ee:if(uA(A,this.peekCodePoint(0)))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();break;case ns:return Zs;case ss:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Os;break;case as:return Vs;case is:return Ns;case ds:case Hs:var c=this.peekCodePoint(0),C=this.peekCodePoint(1);return c===KA&&(MA(C)||C===Le)&&(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(A),this.consumeIdentLikeToken();case Kt:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Gs;if(this.peekCodePoint(0)===Kt)return this.consumeCodePoint(),Ms;break;case os:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Rs;break;case BA:return yr}return De(A)?(this.consumeWhiteSpace(),qs):J(A)?(this.reconsumeCodePoint(A),this.consumeNumericToken()):be(A)?(this.reconsumeCodePoint(A),this.consumeIdentLikeToken()):{type:6,value:T(A)}},e.prototype.consumeCodePoint=function(){var A=this._value.shift();return typeof A>`u`?-1:A},e.prototype.reconsumeCodePoint=function(A){this._value.unshift(A)},e.prototype.peekCodePoint=function(A){return A>=this._value.length?-1:this._value[A]},e.prototype.consumeUnicodeRangeToken=function(){for(var A=[],t=this.consumeCodePoint();MA(t)&&A.length<6;)A.push(t),t=this.consumeCodePoint();for(var r=!1;t===Le&&A.length<6;)A.push(t),t=this.consumeCodePoint(),r=!0;if(r){var B=parseInt(T.apply(void 0,A.map(function(a){return a===Le?Lt:a})),16),n=parseInt(T.apply(void 0,A.map(function(a){return a===Le?St:a})),16);return{type:30,start:B,end:n}}var s=parseInt(T.apply(void 0,A),16);if(this.peekCodePoint(0)===Y&&MA(this.peekCodePoint(1))){this.consumeCodePoint(),t=this.consumeCodePoint();for(var i=[];MA(t)&&i.length<6;)i.push(t),t=this.consumeCodePoint();var n=parseInt(T.apply(void 0,i),16);return{type:30,start:s,end:n}}else return{type:30,start:s,end:s}},e.prototype.consumeIdentLikeToken=function(){var A=this.consumeName();return A.toLowerCase()===`url`&&this.peekCodePoint(0)===me?(this.consumeCodePoint(),this.consumeUrlToken()):this.peekCodePoint(0)===me?(this.consumeCodePoint(),{type:19,value:A}):{type:20,value:A}},e.prototype.consumeUrlToken=function(){var A=[];if(this.consumeWhiteSpace(),this.peekCodePoint(0)===BA)return{type:22,value:``};var t=this.peekCodePoint(0);if(t===Ke||t===ye){var r=this.consumeStringToken(this.consumeCodePoint());return r.type===0&&(this.consumeWhiteSpace(),this.peekCodePoint(0)===BA||this.peekCodePoint(0)===te)?(this.consumeCodePoint(),{type:22,value:r.value}):(this.consumeBadUrlRemnants(),Te)}for(;;){var B=this.consumeCodePoint();if(B===BA||B===te)return{type:22,value:T.apply(void 0,A)};if(De(B))return this.consumeWhiteSpace(),this.peekCodePoint(0)===BA||this.peekCodePoint(0)===te?(this.consumeCodePoint(),{type:22,value:T.apply(void 0,A)}):(this.consumeBadUrlRemnants(),Te);if(B===ye||B===Ke||B===me||Ls(B))return this.consumeBadUrlRemnants(),Te;if(B===ee)if(uA(B,this.peekCodePoint(0)))A.push(this.consumeEscapedCodePoint());else return this.consumeBadUrlRemnants(),Te;else A.push(B)}},e.prototype.consumeWhiteSpace=function(){for(;De(this.peekCodePoint(0));)this.consumeCodePoint()},e.prototype.consumeBadUrlRemnants=function(){for(;;){var A=this.consumeCodePoint();if(A===te||A===BA)return;uA(A,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},e.prototype.consumeStringSlice=function(A){for(var t=5e4,r=``;A>0;){var B=Math.min(t,A);r+=T.apply(void 0,this._value.splice(0,B)),A-=B}return this._value.shift(),r},e.prototype.consumeStringToken=function(A){var t=``,r=0;do{var B=this._value[r];if(B===BA||B===void 0||B===A)return t+=this.consumeStringSlice(r),{type:0,value:t};if(B===ve)return this._value.splice(0,r),_s;if(B===ee){var n=this._value[r+1];n!==BA&&n!==void 0&&(n===ve?(t+=this.consumeStringSlice(r),r=-1,this._value.shift()):uA(B,n)&&(t+=this.consumeStringSlice(r),t+=T(this.consumeEscapedCodePoint()),r=-1))}r++}while(!0)},e.prototype.consumeNumber=function(){var A=[],t=Ae,r=this.peekCodePoint(0);for((r===KA||r===Y)&&A.push(this.consumeCodePoint());J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());r=this.peekCodePoint(0);var B=this.peekCodePoint(1);if(r===Be&&J(B))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=vt;J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());r=this.peekCodePoint(0),B=this.peekCodePoint(1);var n=this.peekCodePoint(2);if((r===Tt||r===bt)&&((B===KA||B===Y)&&J(n)||J(B)))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=vt;J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());return[Ds(A),t]},e.prototype.consumeNumericToken=function(){var A=this.consumeNumber(),t=A[0],r=A[1],B=this.peekCodePoint(0);if(xe(B,this.peekCodePoint(1),this.peekCodePoint(2)))return{type:15,number:t,flags:r,unit:this.consumeName()};return B===zn?(this.consumeCodePoint(),{type:16,number:t,flags:r}):{type:17,number:t,flags:r}},e.prototype.consumeEscapedCodePoint=function(){var A=this.consumeCodePoint();if(MA(A)){for(var t=T(A);MA(this.peekCodePoint(0))&&t.length<6;)t+=T(this.consumeCodePoint());De(this.peekCodePoint(0))&&this.consumeCodePoint();var r=parseInt(t,16);return r===0||Is(r)||r>1114111?mt:r}return A===BA?mt:A},e.prototype.consumeName=function(){for(var A=``;;){var t=this.consumeCodePoint();if(Ot(t))A+=T(t);else if(uA(t,this.peekCodePoint(0)))A+=T(this.consumeEscapedCodePoint());else return this.reconsumeCodePoint(t),A}},e})(),Gt=(function(){function e(A){this._tokens=A}return e.create=function(A){var t=new Mt;return t.write(A),new e(t.read())},e.parseValue=function(A){return e.create(A).parseComponentValue()},e.parseValues=function(A){return e.create(A).parseComponentValues()},e.prototype.parseComponentValue=function(){for(var A=this.consumeToken();A.type===31;)A=this.consumeToken();if(A.type===32)throw new SyntaxError(`Error parsing CSS component value, unexpected EOF`);this.reconsumeToken(A);var t=this.consumeComponentValue();do A=this.consumeToken();while(A.type===31);if(A.type===32)return t;throw new SyntaxError(`Error parsing CSS component value, multiple values found when expecting only one`)},e.prototype.parseComponentValues=function(){for(var A=[];;){var t=this.consumeComponentValue();if(t.type===32)return A;A.push(t),A.push()}},e.prototype.consumeComponentValue=function(){var A=this.consumeToken();switch(A.type){case 11:case 28:case 2:return this.consumeSimpleBlock(A.type);case 19:return this.consumeFunction(A)}return A},e.prototype.consumeSimpleBlock=function(A){for(var t={type:A,values:[]},r=this.consumeToken();;){if(r.type===32||zs(r,A))return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue()),r=this.consumeToken()}},e.prototype.consumeFunction=function(A){for(var t={name:A.value,values:[],type:18};;){var r=this.consumeToken();if(r.type===32||r.type===3)return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue())}},e.prototype.consumeToken=function(){var A=this._tokens.shift();return typeof A>`u`?yr:A},e.prototype.reconsumeToken=function(A){this._tokens.unshift(A)},e})(),ne=function(e){return e.type===15},GA=function(e){return e.type===17},L=function(e){return e.type===20},js=function(e){return e.type===0},Kr=function(e,A){return L(e)&&e.value===A},Rt=function(e){return e.type!==31},RA=function(e){return e.type!==31&&e.type!==4},nA=function(e){var A=[],t=[];return e.forEach(function(r){if(r.type===4){if(t.length===0)throw new Error(`Error parsing function args, zero tokens for arg`);A.push(t),t=[];return}r.type!==31&&t.push(r)}),t.length&&A.push(t),A},zs=function(e,A){return A===11&&e.type===12||A===28&&e.type===29?!0:A===2&&e.type===3},lA=function(e){return e.type===17||e.type===15},O=function(e){return e.type===16||lA(e)},Vt=function(e){return e.length>1?[e[0],e[1]]:[e[0]]},V={type:17,number:0,flags:Ae},mr={type:16,number:50,flags:Ae},fA={type:16,number:100,flags:Ae},se=function(e,A,t){var r=e[0],B=e[1];return[b(r,A),b(typeof B<`u`?B:r,t)]},b=function(e,A){if(e.type===16)return e.number/100*A;if(ne(e))switch(e.unit){case`rem`:case`em`:return 16*e.number;default:return e.number}return e.number},Nt=`deg`,Xt=`grad`,_t=`rad`,Jt=`turn`,Se={name:`angle`,parse:function(e,A){if(A.type===15)switch(A.unit){case Nt:return Math.PI*A.number/180;case Xt:return Math.PI/200*A.number;case _t:return A.number;case Jt:return Math.PI*2*A.number}throw new Error(`Unsupported angle type`)}},Pt=function(e){return e.type===15&&(e.unit===Nt||e.unit===Xt||e.unit===_t||e.unit===Jt)},kt=function(e){switch(e.filter(L).map(function(t){return t.value}).join(` `)){case`to bottom right`:case`to right bottom`:case`left top`:case`top left`:return[V,V];case`to top`:case`bottom`:return $(0);case`to bottom left`:case`to left bottom`:case`right top`:case`top right`:return[V,fA];case`to right`:case`left`:return $(90);case`to top left`:case`to left top`:case`right bottom`:case`bottom right`:return[fA,fA];case`to bottom`:case`top`:return $(180);case`to top right`:case`to right top`:case`left bottom`:case`bottom left`:return[fA,V];case`to left`:case`right`:return $(270)}return 0},$=function(e){return Math.PI*e/180},UA={name:`color`,parse:function(e,A){if(A.type===18){var t=$s[A.name];if(typeof t>`u`)throw new Error(`Attempting to parse an unsupported color function "`+A.name+`"`);return t(e,A.values)}if(A.type===5){if(A.value.length===3){var r=A.value.substring(0,1),B=A.value.substring(1,2),n=A.value.substring(2,3);return hA(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),1)}if(A.value.length===4){var r=A.value.substring(0,1),B=A.value.substring(1,2),n=A.value.substring(2,3),s=A.value.substring(3,4);return hA(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),parseInt(s+s,16)/255)}if(A.value.length===6){var r=A.value.substring(0,2),B=A.value.substring(2,4),n=A.value.substring(4,6);return hA(parseInt(r,16),parseInt(B,16),parseInt(n,16),1)}if(A.value.length===8){var r=A.value.substring(0,2),B=A.value.substring(2,4),n=A.value.substring(4,6),s=A.value.substring(6,8);return hA(parseInt(r,16),parseInt(B,16),parseInt(n,16),parseInt(s,16)/255)}}if(A.type===20){var i=QA[A.value.toUpperCase()];if(typeof i<`u`)return i}return QA.TRANSPARENT}},FA=function(e){return(255&e)===0},R=function(e){var A=255&e,t=255&e>>8,r=255&e>>16,B=255&e>>24;return A<255?`rgba(`+B+`,`+r+`,`+t+`,`+A/255+`)`:`rgb(`+B+`,`+r+`,`+t+`)`},hA=function(e,A,t,r){return(e<<24|A<<16|t<<8|Math.round(r*255)<<0)>>>0},Yt=function(e,A){if(e.type===17)return e.number;if(e.type===16){var t=A===3?1:255;return A===3?e.number/100*t:Math.round(e.number/100*t)}return 0},Wt=function(e,A){var t=A.filter(RA);if(t.length===3){var r=t.map(Yt),B=r[0],n=r[1],s=r[2];return hA(B,n,s,1)}if(t.length===4){var i=t.map(Yt),B=i[0],n=i[1],s=i[2],a=i[3];return hA(B,n,s,a)}return 0};function Lr(e,A,t){return t<0&&(t+=1),t>=1&&(t-=1),t<1/6?(A-e)*t*6+e:t<1/2?A:t<2/3?(A-e)*6*(2/3-t)+e:e}var Zt=function(e,A){var t=A.filter(RA),r=t[0],B=t[1],n=t[2],s=t[3],i=(r.type===17?$(r.number):Se.parse(e,r))/(Math.PI*2),a=O(B)?B.number/100:0,o=O(n)?n.number/100:0,Q=typeof s<`u`&&O(s)?b(s,1):1;if(a===0)return hA(o*255,o*255,o*255,1);var g=o<=.5?o*(a+1):o+a-o*a,w=o*2-g,f=Lr(w,g,i+1/3),c=Lr(w,g,i),C=Lr(w,g,i-1/3);return hA(f*255,c*255,C*255,Q)},$s={hsl:Zt,hsla:Zt,rgb:Wt,rgba:Wt},ae=function(e,A){return UA.parse(e,Gt.create(A).parseComponentValue())},QA={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199},Aa={name:`background-clip`,initialValue:`border-box`,prefix:!1,type:1,parse:function(e,A){return A.map(function(t){if(L(t))switch(t.value){case`padding-box`:return 1;case`content-box`:return 2}return 0})}},ea={name:`background-color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`},Oe=function(e,A){var t=UA.parse(e,A[0]),r=A[1];return r&&O(r)?{color:t,stop:r}:{color:t,stop:null}},qt=function(e,A){var t=e[0],r=e[e.length-1];t.stop===null&&(t.stop=V),r.stop===null&&(r.stop=fA);for(var B=[],n=0,s=0;sn?B.push(a):B.push(n),n=a}else B.push(null)}for(var o=null,s=0;ss.optimumDistance)?{optimumCorner:i,optimumDistance:Q}:s},{optimumDistance:B?Infinity:-Infinity,optimumCorner:null}).optimumCorner},Ba=function(e,A,t,r,B){var n=0,s=0;switch(e.size){case 0:e.shape===0?n=s=Math.min(Math.abs(A),Math.abs(A-r),Math.abs(t),Math.abs(t-B)):e.shape===1&&(n=Math.min(Math.abs(A),Math.abs(A-r)),s=Math.min(Math.abs(t),Math.abs(t-B)));break;case 2:if(e.shape===0)n=s=Math.min(tA(A,t),tA(A,t-B),tA(A-r,t),tA(A-r,t-B));else if(e.shape===1){var i=Math.min(Math.abs(t),Math.abs(t-B))/Math.min(Math.abs(A),Math.abs(A-r)),a=jt(r,B,A,t,!0),o=a[0],Q=a[1];n=tA(o-A,(Q-t)/i),s=i*n}break;case 1:e.shape===0?n=s=Math.max(Math.abs(A),Math.abs(A-r),Math.abs(t),Math.abs(t-B)):e.shape===1&&(n=Math.max(Math.abs(A),Math.abs(A-r)),s=Math.max(Math.abs(t),Math.abs(t-B)));break;case 3:if(e.shape===0)n=s=Math.max(tA(A,t),tA(A,t-B),tA(A-r,t),tA(A-r,t-B));else if(e.shape===1){var i=Math.max(Math.abs(t),Math.abs(t-B))/Math.max(Math.abs(A),Math.abs(A-r)),g=jt(r,B,A,t,!1),o=g[0],Q=g[1];n=tA(o-A,(Q-t)/i),s=i*n}break}return Array.isArray(e.size)&&(n=b(e.size[0],r),s=e.size.length===2?b(e.size[1],B):n),[n,s]},na=function(e,A){var t=$(180),r=[];return nA(A).forEach(function(B,n){if(n===0){var s=B[0];if(s.type===20&&s.value===`to`){t=kt(B);return}else if(Pt(s)){t=Se.parse(e,s);return}}var i=Oe(e,B);r.push(i)}),{angle:t,stops:r,type:1}},Me=function(e,A){var t=$(180),r=[];return nA(A).forEach(function(B,n){if(n===0){var s=B[0];if(s.type===20&&[`top`,`left`,`right`,`bottom`].indexOf(s.value)!==-1){t=kt(B);return}else if(Pt(s)){t=(Se.parse(e,s)+$(270))%$(360);return}}var i=Oe(e,B);r.push(i)}),{angle:t,stops:r,type:1}},sa=function(e,A){var t=$(180),r=[],B=1;return nA(A).forEach(function(a,o){var Q=a[0];if(o===0){if(L(Q)&&Q.value===`linear`){B=1;return}else if(L(Q)&&Q.value===`radial`){B=2;return}}if(Q.type===18){if(Q.name===`from`){var g=UA.parse(e,Q.values[0]);r.push({stop:V,color:g})}else if(Q.name===`to`){var g=UA.parse(e,Q.values[0]);r.push({stop:fA,color:g})}else if(Q.name===`color-stop`){var w=Q.values.filter(RA);if(w.length===2){var g=UA.parse(e,w[1]),f=w[0];GA(f)&&r.push({stop:{type:16,number:f.number*100,flags:f.flags},color:g})}}}}),B===1?{angle:(t+$(180))%$(360),stops:r,type:B}:{size:3,shape:0,stops:r,position:[],type:B}},zt=`closest-side`,$t=`farthest-side`,AB=`closest-corner`,eB=`farthest-corner`,rB=`circle`,tB=`ellipse`,BB=`cover`,nB=`contain`,aa=function(e,A){var t=0,r=3,B=[],n=[];return nA(A).forEach(function(s,i){var a=!0;if(i===0){var o=!1;a=s.reduce(function(g,w){if(o)if(L(w))switch(w.value){case`center`:return n.push(mr),g;case`top`:case`left`:return n.push(V),g;case`right`:case`bottom`:return n.push(fA),g}else(O(w)||lA(w))&&n.push(w);else if(L(w))switch(w.value){case rB:return t=0,!1;case tB:return t=1,!1;case`at`:return o=!0,!1;case zt:return r=0,!1;case BB:case $t:return r=1,!1;case nB:case AB:return r=2,!1;case eB:return r=3,!1}else if(lA(w)||O(w))return Array.isArray(r)||(r=[]),r.push(w),!1;return g},a)}if(a){var Q=Oe(e,s);B.push(Q)}}),{size:r,shape:t,stops:B,position:n,type:2}},Ge=function(e,A){var t=0,r=3,B=[],n=[];return nA(A).forEach(function(s,i){var a=!0;if(i===0?a=s.reduce(function(Q,g){if(L(g))switch(g.value){case`center`:return n.push(mr),!1;case`top`:case`left`:return n.push(V),!1;case`right`:case`bottom`:return n.push(fA),!1}else if(O(g)||lA(g))return n.push(g),!1;return Q},a):i===1&&(a=s.reduce(function(Q,g){if(L(g))switch(g.value){case rB:return t=0,!1;case tB:return t=1,!1;case nB:case zt:return r=0,!1;case $t:return r=1,!1;case AB:return r=2,!1;case BB:case eB:return r=3,!1}else if(lA(g)||O(g))return Array.isArray(r)||(r=[]),r.push(g),!1;return Q},a)),a){var o=Oe(e,s);B.push(o)}}),{size:r,shape:t,stops:B,position:n,type:2}},ia=function(e){return e.type===1},oa=function(e){return e.type===2},Dr={name:`image`,parse:function(e,A){if(A.type===22){var t={url:A.value,type:0};return e.cache.addImage(A.value),t}if(A.type===18){var r=sB[A.name];if(typeof r>`u`)throw new Error(`Attempting to parse an unsupported image function "`+A.name+`"`);return r(e,A.values)}throw new Error(`Unsupported image type `+A.type)}};function Qa(e){return!(e.type===20&&e.value===`none`)&&(e.type!==18||!!sB[e.name])}for(var sB={"linear-gradient":na,"-moz-linear-gradient":Me,"-ms-linear-gradient":Me,"-o-linear-gradient":Me,"-webkit-linear-gradient":Me,"radial-gradient":aa,"-moz-radial-gradient":Ge,"-ms-radial-gradient":Ge,"-o-radial-gradient":Ge,"-webkit-radial-gradient":Ge,"-webkit-gradient":sa},ga={name:`background-image`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){if(A.length===0)return[];var t=A[0];return t.type===20&&t.value===`none`?[]:A.filter(function(r){return RA(r)&&Qa(r)}).map(function(r){return Dr.parse(e,r)})}},wa={name:`background-origin`,initialValue:`border-box`,prefix:!1,type:1,parse:function(e,A){return A.map(function(t){if(L(t))switch(t.value){case`padding-box`:return 1;case`content-box`:return 2}return 0})}},ca={name:`background-position`,initialValue:`0% 0%`,type:1,prefix:!1,parse:function(e,A){return nA(A).map(function(t){return t.filter(O)}).map(Vt)}},Ca={name:`background-repeat`,initialValue:`repeat`,prefix:!1,type:1,parse:function(e,A){return nA(A).map(function(t){return t.filter(L).map(function(r){return r.value}).join(` `)}).map(ua)}},ua=function(e){switch(e){case`no-repeat`:return 1;case`repeat-x`:case`repeat no-repeat`:return 2;case`repeat-y`:case`no-repeat repeat`:return 3;default:return 0}},ie=(function(e){return e.AUTO=`auto`,e.CONTAIN=`contain`,e.COVER=`cover`,e})(ie||{}),la={name:`background-size`,initialValue:`0`,prefix:!1,type:1,parse:function(e,A){return nA(A).map(function(t){return t.filter(fa)})}},fa=function(e){return L(e)||O(e)},Re=function(e){return{name:`border-`+e+`-color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`}},Ua=Re(`top`),Fa=Re(`right`),ha=Re(`bottom`),da=Re(`left`),Ve=function(e){return{name:`border-radius-`+e,initialValue:`0 0`,prefix:!1,type:1,parse:function(A,t){return Vt(t.filter(O))}}},Ea=Ve(`top-left`),Ha=Ve(`top-right`),pa=Ve(`bottom-right`),Ia=Ve(`bottom-left`),Ne=function(e){return{name:`border-`+e+`-style`,initialValue:`solid`,prefix:!1,type:2,parse:function(A,t){switch(t){case`none`:return 0;case`dashed`:return 2;case`dotted`:return 3;case`double`:return 4}return 1}}},va=Ne(`top`),ya=Ne(`right`),Ka=Ne(`bottom`),ma=Ne(`left`),Xe=function(e){return{name:`border-`+e+`-width`,initialValue:`0`,type:0,prefix:!1,parse:function(A,t){return ne(t)?t.number:0}}},La=Xe(`top`),Da=Xe(`right`),ba=Xe(`bottom`),xa=Xe(`left`),Ta={name:`color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`},Sa={name:`direction`,initialValue:`ltr`,prefix:!1,type:2,parse:function(e,A){return A===`rtl`?1:0}},Oa={name:`display`,initialValue:`inline-block`,prefix:!1,type:1,parse:function(e,A){return A.filter(L).reduce(function(t,r){return t|Ma(r.value)},0)}},Ma=function(e){switch(e){case`block`:case`-webkit-box`:return 2;case`inline`:return 4;case`run-in`:return 8;case`flow`:return 16;case`flow-root`:return 32;case`table`:return 64;case`flex`:case`-webkit-flex`:return 128;case`grid`:case`-ms-grid`:return 256;case`ruby`:return 512;case`subgrid`:return 1024;case`list-item`:return 2048;case`table-row-group`:return 4096;case`table-header-group`:return 8192;case`table-footer-group`:return 16384;case`table-row`:return 32768;case`table-cell`:return 65536;case`table-column-group`:return 131072;case`table-column`:return 262144;case`table-caption`:return 524288;case`ruby-base`:return 1048576;case`ruby-text`:return 2097152;case`ruby-base-container`:return 4194304;case`ruby-text-container`:return 8388608;case`contents`:return 16777216;case`inline-block`:return 33554432;case`inline-list-item`:return 67108864;case`inline-table`:return 134217728;case`inline-flex`:return 268435456;case`inline-grid`:return 536870912}return 0},Ga={name:`float`,initialValue:`none`,prefix:!1,type:2,parse:function(e,A){switch(A){case`left`:return 1;case`right`:return 2;case`inline-start`:return 3;case`inline-end`:return 4}return 0}},Ra={name:`letter-spacing`,initialValue:`0`,prefix:!1,type:0,parse:function(e,A){return A.type===20&&A.value===`normal`?0:A.type===17||A.type===15?A.number:0}},br=(function(e){return e.NORMAL=`normal`,e.STRICT=`strict`,e})(br||{}),Va={name:`line-break`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){return A===`strict`?br.STRICT:br.NORMAL}},Na={name:`line-height`,initialValue:`normal`,prefix:!1,type:4},aB=function(e,A){return L(e)&&e.value===`normal`?1.2*A:e.type===17?A*e.number:O(e)?b(e,A):A},Xa={name:`list-style-image`,initialValue:`none`,type:0,prefix:!1,parse:function(e,A){return A.type===20&&A.value===`none`?null:Dr.parse(e,A)}},_a={name:`list-style-position`,initialValue:`outside`,prefix:!1,type:2,parse:function(e,A){return A===`inside`?0:1}},xr={name:`list-style-type`,initialValue:`none`,prefix:!1,type:2,parse:function(e,A){switch(A){case`disc`:return 0;case`circle`:return 1;case`square`:return 2;case`decimal`:return 3;case`cjk-decimal`:return 4;case`decimal-leading-zero`:return 5;case`lower-roman`:return 6;case`upper-roman`:return 7;case`lower-greek`:return 8;case`lower-alpha`:return 9;case`upper-alpha`:return 10;case`arabic-indic`:return 11;case`armenian`:return 12;case`bengali`:return 13;case`cambodian`:return 14;case`cjk-earthly-branch`:return 15;case`cjk-heavenly-stem`:return 16;case`cjk-ideographic`:return 17;case`devanagari`:return 18;case`ethiopic-numeric`:return 19;case`georgian`:return 20;case`gujarati`:return 21;case`gurmukhi`:return 22;case`hebrew`:return 22;case`hiragana`:return 23;case`hiragana-iroha`:return 24;case`japanese-formal`:return 25;case`japanese-informal`:return 26;case`kannada`:return 27;case`katakana`:return 28;case`katakana-iroha`:return 29;case`khmer`:return 30;case`korean-hangul-formal`:return 31;case`korean-hanja-formal`:return 32;case`korean-hanja-informal`:return 33;case`lao`:return 34;case`lower-armenian`:return 35;case`malayalam`:return 36;case`mongolian`:return 37;case`myanmar`:return 38;case`oriya`:return 39;case`persian`:return 40;case`simp-chinese-formal`:return 41;case`simp-chinese-informal`:return 42;case`tamil`:return 43;case`telugu`:return 44;case`thai`:return 45;case`tibetan`:return 46;case`trad-chinese-formal`:return 47;case`trad-chinese-informal`:return 48;case`upper-armenian`:return 49;case`disclosure-open`:return 50;case`disclosure-closed`:return 51;default:return-1}}},_e=function(e){return{name:`margin-`+e,initialValue:`0`,prefix:!1,type:4}},Ja=_e(`top`),Pa=_e(`right`),ka=_e(`bottom`),Ya=_e(`left`),Wa={name:`overflow`,initialValue:`visible`,prefix:!1,type:1,parse:function(e,A){return A.filter(L).map(function(t){switch(t.value){case`hidden`:return 1;case`scroll`:return 2;case`clip`:return 3;case`auto`:return 4;default:return 0}})}},Za={name:`overflow-wrap`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){return A===`break-word`?`break-word`:`normal`}},Je=function(e){return{name:`padding-`+e,initialValue:`0`,prefix:!1,type:3,format:`length-percentage`}},qa=Je(`top`),ja=Je(`right`),za=Je(`bottom`),$a=Je(`left`),Ai={name:`text-align`,initialValue:`left`,prefix:!1,type:2,parse:function(e,A){switch(A){case`right`:return 2;case`center`:case`justify`:return 1;default:return 0}}},ei={name:`position`,initialValue:`static`,prefix:!1,type:2,parse:function(e,A){switch(A){case`relative`:return 1;case`absolute`:return 2;case`fixed`:return 3;case`sticky`:return 4}return 0}},ri={name:`text-shadow`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){return A.length===1&&Kr(A[0],`none`)?[]:nA(A).map(function(t){for(var r={color:QA.TRANSPARENT,offsetX:V,offsetY:V,blur:V},B=0,n=0;n`u`)throw new Error(`Attempting to parse an unsupported transform function "`+A.name+`"`);return t(A.values)}return null}},ni=function(e){var A=e.filter(function(t){return t.type===17}).map(function(t){return t.number});return A.length===6?A:null},si=function(e){var A=e.filter(function(a){return a.type===17}).map(function(a){return a.number}),t=A[0],r=A[1];A[2],A[3];var B=A[4],n=A[5];A[6],A[7],A[8],A[9],A[10],A[11];var s=A[12],i=A[13];return A[14],A[15],A.length===16?[t,r,B,n,s,i]:null},ai={matrix:ni,matrix3d:si},iB={type:16,number:50,flags:Ae},ii=[iB,iB],oi={name:`transform-origin`,initialValue:`50% 50%`,prefix:!0,type:1,parse:function(e,A){var t=A.filter(O);return t.length!==2?ii:[t[0],t[1]]}},Qi={name:`visible`,initialValue:`none`,prefix:!1,type:2,parse:function(e,A){switch(A){case`hidden`:return 1;case`collapse`:return 2;default:return 0}}},Pe=(function(e){return e.NORMAL=`normal`,e.BREAK_ALL=`break-all`,e.KEEP_ALL=`keep-all`,e})(Pe||{}),gi={name:`word-break`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){switch(A){case`break-all`:return Pe.BREAK_ALL;case`keep-all`:return Pe.KEEP_ALL;default:return Pe.NORMAL}}},wi={name:`z-index`,initialValue:`auto`,prefix:!1,type:0,parse:function(e,A){if(A.type===20)return{auto:!0,order:0};if(GA(A))return{auto:!1,order:A.number};throw new Error(`Invalid z-index number parsed`)}},oB={name:`time`,parse:function(e,A){if(A.type===15)switch(A.unit.toLowerCase()){case`s`:return 1e3*A.number;case`ms`:return A.number}throw new Error(`Unsupported time type`)}},ci={name:`opacity`,initialValue:`1`,type:0,prefix:!1,parse:function(e,A){return GA(A)?A.number:1}},Ci={name:`text-decoration-color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`},ui={name:`text-decoration-line`,initialValue:`none`,prefix:!1,type:1,parse:function(e,A){return A.filter(L).map(function(t){switch(t.value){case`underline`:return 1;case`overline`:return 2;case`line-through`:return 3;case`none`:return 4}return 0}).filter(function(t){return t!==0})}},li={name:`font-family`,initialValue:``,prefix:!1,type:1,parse:function(e,A){var t=[],r=[];return A.forEach(function(B){switch(B.type){case 20:case 0:t.push(B.value);break;case 17:t.push(B.number.toString());break;case 4:r.push(t.join(` `)),t.length=0;break}}),t.length&&r.push(t.join(` `)),r.map(function(B){return B.indexOf(` `)===-1?B:`'`+B+`'`})}},fi={name:`font-size`,initialValue:`0`,prefix:!1,type:3,format:`length`},Ui={name:`font-weight`,initialValue:`normal`,type:0,prefix:!1,parse:function(e,A){return GA(A)?A.number:L(A)&&A.value===`bold`?700:400}},Fi={name:`font-variant`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){return A.filter(L).map(function(t){return t.value})}},hi={name:`font-style`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){switch(A){case`oblique`:return`oblique`;case`italic`:return`italic`;default:return`normal`}}},G=function(e,A){return(e&A)!==0},di={name:`content`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){if(A.length===0)return[];var t=A[0];return t.type===20&&t.value===`none`?[]:A}},Ei={name:`counter-increment`,initialValue:`none`,prefix:!0,type:1,parse:function(e,A){if(A.length===0)return null;var t=A[0];if(t.type===20&&t.value===`none`)return null;for(var r=[],B=A.filter(Rt),n=0;n1?1:0],this.overflowWrap=U(A,Za,t.overflowWrap),this.paddingTop=U(A,qa,t.paddingTop),this.paddingRight=U(A,ja,t.paddingRight),this.paddingBottom=U(A,za,t.paddingBottom),this.paddingLeft=U(A,$a,t.paddingLeft),this.paintOrder=U(A,yi,t.paintOrder),this.position=U(A,ei,t.position),this.textAlign=U(A,Ai,t.textAlign),this.textDecorationColor=U(A,Ci,(r=t.textDecorationColor)!==null&&r!==void 0?r:t.color),this.textDecorationLine=U(A,ui,(B=t.textDecorationLine)!==null&&B!==void 0?B:t.textDecoration),this.textShadow=U(A,ri,t.textShadow),this.textTransform=U(A,ti,t.textTransform),this.transform=U(A,Bi,t.transform),this.transformOrigin=U(A,oi,t.transformOrigin),this.visibility=U(A,Qi,t.visibility),this.webkitTextStrokeColor=U(A,Ki,t.webkitTextStrokeColor),this.webkitTextStrokeWidth=U(A,mi,t.webkitTextStrokeWidth),this.wordBreak=U(A,gi,t.wordBreak),this.zIndex=U(A,wi,t.zIndex)}return e.prototype.isVisible=function(){return this.display>0&&this.opacity>0&&this.visibility===0},e.prototype.isTransparent=function(){return FA(this.backgroundColor)},e.prototype.isTransformed=function(){return this.transform!==null},e.prototype.isPositioned=function(){return this.position!==0},e.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},e.prototype.isFloating=function(){return this.float!==0},e.prototype.isInlineLevel=function(){return G(this.display,4)||G(this.display,33554432)||G(this.display,268435456)||G(this.display,536870912)||G(this.display,67108864)||G(this.display,134217728)},e})(),Di=(function(){function e(A,t){this.content=U(A,di,t.content),this.quotes=U(A,Ii,t.quotes)}return e})(),gB=(function(){function e(A,t){this.counterIncrement=U(A,Ei,t.counterIncrement),this.counterReset=U(A,Hi,t.counterReset)}return e})(),U=function(e,A,t){var r=new Mt,B=t!==null&&typeof t<`u`?t.toString():A.initialValue;r.write(B);var n=new Gt(r.read());switch(A.type){case 2:var s=n.parseComponentValue();return A.parse(e,L(s)?s.value:A.initialValue);case 0:return A.parse(e,n.parseComponentValue());case 1:return A.parse(e,n.parseComponentValues());case 4:return n.parseComponentValue();case 3:switch(A.format){case`angle`:return Se.parse(e,n.parseComponentValue());case`color`:return UA.parse(e,n.parseComponentValue());case`image`:return Dr.parse(e,n.parseComponentValue());case`length`:var i=n.parseComponentValue();return lA(i)?i:V;case`length-percentage`:var a=n.parseComponentValue();return O(a)?a:V;case`time`:return oB.parse(e,n.parseComponentValue())}break}},bi=`data-html2canvas-debug`,xi=function(e){switch(e.getAttribute(bi)){case`all`:return 1;case`clone`:return 2;case`parse`:return 3;case`render`:return 4;default:return 0}},Tr=function(e,A){var t=xi(e);return t===1||A===t},sA=(function(){function e(A,t){if(this.context=A,this.textNodes=[],this.elements=[],this.flags=0,Tr(t,3))debugger;this.styles=new Li(A,window.getComputedStyle(t,null)),Wr(t)&&(this.styles.animationDuration.some(function(r){return r>0})&&(t.style.animationDuration=`0s`),this.styles.transform!==null&&(t.style.transform=`none`)),this.bounds=ue(this.context,t),Tr(t,4)&&(this.flags|=16)}return e})(),Ti=`AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=`,wB=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,oe=typeof Uint8Array>`u`?[]:new Uint8Array(256),ke=0;ke>4,Q[B++]=(s&15)<<4|i>>2,Q[B++]=(i&3)<<6|a&63;return o},Oi=function(e){for(var A=e.length,t=[],r=0;r>mA,Mr=(1<>mA)+32,Pi=65536>>Sr,Yi=(1<=0){if(A<55296||A>56319&&A<=65535)return t=this.index[A>>mA],t=(t<>mA)],t=(t<>Sr),t=this.index[t],t+=A>>mA&Yi,t=this.index[t],t=(t<`u`?[]:new Uint8Array(256),Ye=0;Ye=55296&&B<=56319&&t>10)+55296,s%1024+56320)),(B+1===t||r.length>16384)&&(n+=String.fromCharCode.apply(String,r),r.length=0)}return n},ro=Zi(Ti),AA=`×`,_r=`÷`,to=function(e){return ro.get(e)},Bo=function(e,A,t){var r=t-2,B=A[r],n=A[t-1],s=A[t];if(n===Gr&&s===Rr)return AA;if(n===Gr||n===Rr||n===lB||s===Gr||s===Rr||s===lB)return _r;if(n===UB&&[UB,Vr,FB,hB].indexOf(s)!==-1||(n===FB||n===Vr)&&(s===Vr||s===Nr)||(n===hB||n===Nr)&&s===Nr||s===dB||s===fB||s===$i||n===zi)return AA;if(n===dB&&s===EB){for(;B===fB;)B=A[--r];if(B===EB)return AA}if(n===Xr&&s===Xr){for(var i=0;B===Xr;)i++,B=A[--r];if(i%2===0)return AA}return _r},no=function(e){var A=Ao(e),t=A.length,r=0,B=0,n=A.map(to);return{next:function(){if(r>=t)return{done:!0,value:null};for(var s=AA;rs.x||Q.y>s.y;return s=Q,o===0?!0:g});return e.body.removeChild(A),i},oo=function(){return typeof new Image().crossOrigin<`u`},Qo=function(){return typeof new XMLHttpRequest().responseType==`string`},go=function(e){var A=new Image,t=e.createElement(`canvas`),r=t.getContext(`2d`);if(!r)return!1;A.src=`data:image/svg+xml,`;try{r.drawImage(A,0,0),t.toDataURL()}catch{return!1}return!0},HB=function(e){return e[0]===0&&e[1]===255&&e[2]===0&&e[3]===255},wo=function(e){var A=e.createElement(`canvas`),t=100;A.width=t,A.height=t;var r=A.getContext(`2d`);if(!r)return Promise.reject(!1);r.fillStyle=`rgb(0, 255, 0)`,r.fillRect(0,0,t,t);var B=new Image,n=A.toDataURL();B.src=n;var s=Jr(t,t,0,0,B);return r.fillStyle=`red`,r.fillRect(0,0,t,t),pB(s).then(function(i){r.drawImage(i,0,0);var a=r.getImageData(0,0,t,t).data;r.fillStyle=`red`,r.fillRect(0,0,t,t);var o=e.createElement(`div`);return o.style.backgroundImage=`url(`+n+`)`,o.style.height=t+`px`,HB(a)?pB(Jr(t,t,0,0,o)):Promise.reject(!1)}).then(function(i){return r.drawImage(i,0,0),HB(r.getImageData(0,0,t,t).data)}).catch(function(){return!1})},Jr=function(e,A,t,r,B){var n=`http://www.w3.org/2000/svg`,s=document.createElementNS(n,`svg`),i=document.createElementNS(n,`foreignObject`);return s.setAttributeNS(null,`width`,e.toString()),s.setAttributeNS(null,`height`,A.toString()),i.setAttributeNS(null,`width`,`100%`),i.setAttributeNS(null,`height`,`100%`),i.setAttributeNS(null,`x`,t.toString()),i.setAttributeNS(null,`y`,r.toString()),i.setAttributeNS(null,`externalResourcesRequired`,`true`),s.appendChild(i),i.appendChild(B),s},pB=function(e){return new Promise(function(A,t){var r=new Image;r.onload=function(){return A(r)},r.onerror=t,r.src=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(new XMLSerializer().serializeToString(e))})},N={get SUPPORT_RANGE_BOUNDS(){var e=ao(document);return Object.defineProperty(N,"SUPPORT_RANGE_BOUNDS",{value:e}),e},get SUPPORT_WORD_BREAKING(){var e=N.SUPPORT_RANGE_BOUNDS&&io(document);return Object.defineProperty(N,"SUPPORT_WORD_BREAKING",{value:e}),e},get SUPPORT_SVG_DRAWING(){var e=go(document);return Object.defineProperty(N,"SUPPORT_SVG_DRAWING",{value:e}),e},get SUPPORT_FOREIGNOBJECT_DRAWING(){var e=typeof Array.from==`function`&&typeof window.fetch==`function`?wo(document):Promise.resolve(!1);return Object.defineProperty(N,"SUPPORT_FOREIGNOBJECT_DRAWING",{value:e}),e},get SUPPORT_CORS_IMAGES(){var e=oo();return Object.defineProperty(N,"SUPPORT_CORS_IMAGES",{value:e}),e},get SUPPORT_RESPONSE_TYPE(){var e=Qo();return Object.defineProperty(N,"SUPPORT_RESPONSE_TYPE",{value:e}),e},get SUPPORT_CORS_XHR(){var e=`withCredentials`in new XMLHttpRequest;return Object.defineProperty(N,"SUPPORT_CORS_XHR",{value:e}),e},get SUPPORT_NATIVE_TEXT_SEGMENTATION(){var e=!!(typeof Intl<`u`&&Intl.Segmenter);return Object.defineProperty(N,"SUPPORT_NATIVE_TEXT_SEGMENTATION",{value:e}),e}},Qe=(function(){function e(A,t){this.text=A,this.bounds=t}return e})(),co=function(e,A,t,r){var B=lo(A,t),n=[],s=0;return B.forEach(function(i){if(t.textDecorationLine.length||i.trim().length>0)if(N.SUPPORT_RANGE_BOUNDS){var a=IB(r,s,i.length).getClientRects();if(a.length>1){var o=Pr(i),Q=0;o.forEach(function(w){n.push(new Qe(w,iA.fromDOMRectList(e,IB(r,Q+s,w.length).getClientRects()))),Q+=w.length})}else n.push(new Qe(i,iA.fromDOMRectList(e,a)))}else{var g=r.splitText(i.length);n.push(new Qe(i,Co(e,r))),r=g}else N.SUPPORT_RANGE_BOUNDS||(r=r.splitText(i.length));s+=i.length}),n},Co=function(e,A){var t=A.ownerDocument;if(t){var r=t.createElement(`html2canvaswrapper`);r.appendChild(A.cloneNode(!0));var B=A.parentNode;if(B){B.replaceChild(r,A);var n=ue(e,r);return r.firstChild&&B.replaceChild(r.firstChild,r),n}}return iA.EMPTY},IB=function(e,A,t){var r=e.ownerDocument;if(!r)throw new Error(`Node has no owner document`);var B=r.createRange();return B.setStart(e,A),B.setEnd(e,A+t),B},Pr=function(e){if(N.SUPPORT_NATIVE_TEXT_SEGMENTATION){var A=new Intl.Segmenter(void 0,{granularity:`grapheme`});return Array.from(A.segment(e)).map(function(t){return t.segment})}return so(e)},uo=function(e,A){if(N.SUPPORT_NATIVE_TEXT_SEGMENTATION){var t=new Intl.Segmenter(void 0,{granularity:`word`});return Array.from(t.segment(e)).map(function(r){return r.segment})}return Uo(e,A)},lo=function(e,A){return A.letterSpacing!==0?Pr(e):uo(e,A)},fo=[32,160,4961,65792,65793,4153,4241],Uo=function(e,A){for(var t=Pn(e,{lineBreak:A.lineBreak,wordBreak:A.overflowWrap===`break-word`?`break-word`:A.wordBreak}),r=[],B,n=function(){if(B.value){var i=le(B.value.slice()),a=``;i.forEach(function(o){fo.indexOf(o)===-1?a+=T(o):(a.length&&r.push(a),r.push(T(o)),a=``)}),a.length&&r.push(a)}};!(B=t.next()).done;)n();return r},Fo=(function(){function e(A,t,r){this.text=ho(t.data,r.textTransform),this.textBounds=co(A,this.text,r,t)}return e})(),ho=function(e,A){switch(A){case 1:return e.toLowerCase();case 3:return e.replace(Eo,Ho);case 2:return e.toUpperCase();default:return e}},Eo=/(^|\s|:|-|\(|\))([a-z])/g,Ho=function(e,A,t){return e.length>0?A+t.toUpperCase():e},vB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.src=r.currentSrc||r.src,B.intrinsicWidth=r.naturalWidth,B.intrinsicHeight=r.naturalHeight,B.context.cache.addImage(B.src),B}return A})(sA),yB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.canvas=r,B.intrinsicWidth=r.width,B.intrinsicHeight=r.height,B}return A})(sA),KB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this,n=new XMLSerializer,s=ue(t,r);return r.setAttribute(`width`,s.width+`px`),r.setAttribute(`height`,s.height+`px`),B.svg=`data:image/svg+xml,`+encodeURIComponent(n.serializeToString(r)),B.intrinsicWidth=r.width.baseVal.value,B.intrinsicHeight=r.height.baseVal.value,B.context.cache.addImage(B.svg),B}return A})(sA),mB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.value=r.value,B}return A})(sA),kr=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.start=r.start,B.reversed=typeof r.reversed==`boolean`&&r.reversed===!0,B}return A})(sA),po=[{type:15,flags:0,unit:`px`,number:3}],Io=[{type:16,flags:0,number:50}],vo=function(e){return e.width>e.height?new iA(e.left+(e.width-e.height)/2,e.top,e.height,e.height):e.width0)t.textNodes.push(new Fo(e,B,t.styles));else if(VA(B))if(XB(B)&&B.assignedNodes)B.assignedNodes().forEach(function(i){return qe(e,i,t,r)});else{var s=TB(e,B);s.styles.isVisible()&&(Lo(B,s,r)?s.flags|=4:Do(s.styles)&&(s.flags|=2),mo.indexOf(B.tagName)!==-1&&(s.flags|=8),t.elements.push(s),B.slot,B.shadowRoot?qe(e,B.shadowRoot,s,r):!ze(B)&&!MB(B)&&!$e(B)&&qe(e,B,s,r))}},TB=function(e,A){return qr(A)?new vB(e,A):GB(A)?new yB(e,A):MB(A)?new KB(e,A):bo(A)?new mB(e,A):xo(A)?new kr(e,A):To(A)?new Yr(e,A):$e(A)?new DB(e,A):ze(A)?new bB(e,A):VB(A)?new xB(e,A):new sA(e,A)},SB=function(e,A){var t=TB(e,A);return t.flags|=4,qe(e,A,t,t),t},Lo=function(e,A,t){return A.styles.isPositionedWithZIndex()||A.styles.opacity<1||A.styles.isTransformed()||Zr(e)&&t.styles.isTransparent()},Do=function(e){return e.isPositioned()||e.isFloating()},OB=function(e){return e.nodeType===Node.TEXT_NODE},VA=function(e){return e.nodeType===Node.ELEMENT_NODE},Wr=function(e){return VA(e)&&typeof e.style<`u`&&!je(e)},je=function(e){return typeof e.className==`object`},bo=function(e){return e.tagName===`LI`},xo=function(e){return e.tagName===`OL`},To=function(e){return e.tagName===`INPUT`},So=function(e){return e.tagName===`HTML`},MB=function(e){return e.tagName===`svg`},Zr=function(e){return e.tagName===`BODY`},GB=function(e){return e.tagName===`CANVAS`},RB=function(e){return e.tagName===`VIDEO`},qr=function(e){return e.tagName===`IMG`},VB=function(e){return e.tagName===`IFRAME`},NB=function(e){return e.tagName===`STYLE`},Oo=function(e){return e.tagName===`SCRIPT`},ze=function(e){return e.tagName===`TEXTAREA`},$e=function(e){return e.tagName===`SELECT`},XB=function(e){return e.tagName===`SLOT`},_B=function(e){return e.tagName.indexOf(`-`)>0},Mo=(function(){function e(){this.counters={}}return e.prototype.getCounterValue=function(A){var t=this.counters[A];return t&&t.length?t[t.length-1]:1},e.prototype.getCounterValues=function(A){return this.counters[A]||[]},e.prototype.pop=function(A){var t=this;A.forEach(function(r){return t.counters[r].pop()})},e.prototype.parse=function(A){var t=this,r=A.counterIncrement,B=A.counterReset,n=!0;r!==null&&r.forEach(function(i){var a=t.counters[i.counter];a&&i.increment!==0&&(n=!1,a.length||a.push(1),a[Math.max(0,a.length-1)]+=i.increment)});var s=[];return n&&B.forEach(function(i){var a=t.counters[i.counter];s.push(i.counter),a||(a=t.counters[i.counter]=[]),a.push(i.reset)}),s},e})(),JB={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:[`M`,`CM`,`D`,`CD`,`C`,`XC`,`L`,`XL`,`X`,`IX`,`V`,`IV`,`I`]},PB={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[`Ք`,`Փ`,`Ւ`,`Ց`,`Ր`,`Տ`,`Վ`,`Ս`,`Ռ`,`Ջ`,`Պ`,`Չ`,`Ո`,`Շ`,`Ն`,`Յ`,`Մ`,`Ճ`,`Ղ`,`Ձ`,`Հ`,`Կ`,`Ծ`,`Խ`,`Լ`,`Ի`,`Ժ`,`Թ`,`Ը`,`Է`,`Զ`,`Ե`,`Դ`,`Գ`,`Բ`,`Ա`]},Go={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:[`י׳`,`ט׳`,`ח׳`,`ז׳`,`ו׳`,`ה׳`,`ד׳`,`ג׳`,`ב׳`,`א׳`,`ת`,`ש`,`ר`,`ק`,`צ`,`פ`,`ע`,`ס`,`נ`,`מ`,`ל`,`כ`,`יט`,`יח`,`יז`,`טז`,`טו`,`י`,`ט`,`ח`,`ז`,`ו`,`ה`,`ד`,`ג`,`ב`,`א`]},Ro={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[`ჵ`,`ჰ`,`ჯ`,`ჴ`,`ხ`,`ჭ`,`წ`,`ძ`,`ც`,`ჩ`,`შ`,`ყ`,`ღ`,`ქ`,`ფ`,`ჳ`,`ტ`,`ს`,`რ`,`ჟ`,`პ`,`ო`,`ჲ`,`ნ`,`მ`,`ლ`,`კ`,`ი`,`თ`,`ჱ`,`ზ`,`ვ`,`ე`,`დ`,`გ`,`ბ`,`ა`]},NA=function(e,A,t,r,B,n){return et?we(e,B,n.length>0):r.integers.reduce(function(s,i,a){for(;e>=i;)e-=i,s+=r.values[a];return s},``)+n},kB=function(e,A,t,r){var B=``;do t||e--,B=r(e)+B,e/=A;while(e*A>=A);return B},S=function(e,A,t,r,B){var n=t-A+1;return(e<0?`-`:``)+(kB(Math.abs(e),n,r,function(s){return T(Math.floor(s%n)+A)})+B)},LA=function(e,A,t){t===void 0&&(t=`. `);var r=A.length;return kB(Math.abs(e),r,!1,function(B){return A[Math.floor(B%r)]})+t},XA=1,dA=2,EA=4,ge=8,gA=function(e,A,t,r,B,n){if(e<-9999||e>9999)return we(e,4,B.length>0);var s=Math.abs(e),i=B;if(s===0)return A[0]+i;for(var a=0;s>0&&a<=4;a++){var o=s%10;o===0&&G(n,XA)&&i!==``?i=A[o]+i:o>1||o===1&&a===0||o===1&&a===1&&G(n,dA)||o===1&&a===1&&G(n,EA)&&e>100||o===1&&a>1&&G(n,ge)?i=A[o]+(a>0?t[a-1]:``)+i:o===1&&a>0&&(i=t[a-1]+i),s=Math.floor(s/10)}return(e<0?r:``)+i},YB=`十百千萬`,WB=`拾佰仟萬`,ZB=`マイナス`,jr=`마이너스`,we=function(e,A,t){var r=t?`. `:``,B=t?`、`:``,n=t?`, `:``,s=t?` `:``;switch(A){case 0:return`•`+s;case 1:return`◦`+s;case 2:return`◾`+s;case 5:var i=S(e,48,57,!0,r);return i.length<4?`0`+i:i;case 4:return LA(e,`〇一二三四五六七八九`,B);case 6:return NA(e,1,3999,JB,3,r).toLowerCase();case 7:return NA(e,1,3999,JB,3,r);case 8:return S(e,945,969,!1,r);case 9:return S(e,97,122,!1,r);case 10:return S(e,65,90,!1,r);case 11:return S(e,1632,1641,!0,r);case 12:case 49:return NA(e,1,9999,PB,3,r);case 35:return NA(e,1,9999,PB,3,r).toLowerCase();case 13:return S(e,2534,2543,!0,r);case 14:case 30:return S(e,6112,6121,!0,r);case 15:return LA(e,`子丑寅卯辰巳午未申酉戌亥`,B);case 16:return LA(e,`甲乙丙丁戊己庚辛壬癸`,B);case 17:case 48:return gA(e,`零一二三四五六七八九`,YB,`負`,B,dA|EA|ge);case 47:return gA(e,`零壹貳參肆伍陸柒捌玖`,WB,`負`,B,XA|dA|EA|ge);case 42:return gA(e,`零一二三四五六七八九`,YB,`负`,B,dA|EA|ge);case 41:return gA(e,`零壹贰叁肆伍陆柒捌玖`,WB,`负`,B,XA|dA|EA|ge);case 26:return gA(e,`〇一二三四五六七八九`,`十百千万`,ZB,B,0);case 25:return gA(e,`零壱弐参四伍六七八九`,`拾百千万`,ZB,B,XA|dA|EA);case 31:return gA(e,`영일이삼사오육칠팔구`,`십백천만`,jr,n,XA|dA|EA);case 33:return gA(e,`零一二三四五六七八九`,`十百千萬`,jr,n,0);case 32:return gA(e,`零壹貳參四五六七八九`,`拾百千`,jr,n,XA|dA|EA);case 18:return S(e,2406,2415,!0,r);case 20:return NA(e,1,19999,Ro,3,r);case 21:return S(e,2790,2799,!0,r);case 22:return S(e,2662,2671,!0,r);case 22:return NA(e,1,10999,Go,3,r);case 23:return LA(e,`あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん`);case 24:return LA(e,`いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす`);case 27:return S(e,3302,3311,!0,r);case 28:return LA(e,`アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン`,B);case 29:return LA(e,`イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス`,B);case 34:return S(e,3792,3801,!0,r);case 37:return S(e,6160,6169,!0,r);case 38:return S(e,4160,4169,!0,r);case 39:return S(e,2918,2927,!0,r);case 40:return S(e,1776,1785,!0,r);case 43:return S(e,3046,3055,!0,r);case 44:return S(e,3174,3183,!0,r);case 45:return S(e,3664,3673,!0,r);case 46:return S(e,3872,3881,!0,r);default:return S(e,48,57,!0,r)}},qB=`data-html2canvas-ignore`,jB=(function(){function e(A,t,r){if(this.context=A,this.options=r,this.scrolledElements=[],this.referenceElement=t,this.counters=new Mo,this.quoteDepth=0,!t.ownerDocument)throw new Error(`Cloned element does not have an owner document`);this.documentElement=this.cloneNode(t.ownerDocument.documentElement,!1)}return e.prototype.toIFrame=function(A,t){var r=this,B=Vo(A,t);if(!B.contentWindow)return Promise.reject(`Unable to find iframe window`);var n=A.defaultView.pageXOffset,s=A.defaultView.pageYOffset,i=B.contentWindow,a=i.document,o=_o(B).then(function(){return k(r,void 0,void 0,function(){var Q,g;return _(this,function(w){switch(w.label){case 0:return this.scrolledElements.forEach(Yo),i&&(i.scrollTo(t.left,t.top),/(iPad|iPhone|iPod)/g.test(navigator.userAgent)&&(i.scrollY!==t.top||i.scrollX!==t.left)&&(this.context.logger.warn(`Unable to restore scroll position for cloned document`),this.context.windowBounds=this.context.windowBounds.add(i.scrollX-t.left,i.scrollY-t.top,0,0))),Q=this.options.onclone,g=this.clonedReferenceElement,typeof g>`u`?[2,Promise.reject(`Error finding the `+this.referenceElement.nodeName+` in the cloned document`)]:a.fonts&&a.fonts.ready?[4,a.fonts.ready]:[3,2];case 1:w.sent(),w.label=2;case 2:return/(AppleWebKit)/g.test(navigator.userAgent)?[4,Xo(a)]:[3,4];case 3:w.sent(),w.label=4;case 4:return typeof Q==`function`?[2,Promise.resolve().then(function(){return Q(a,g)}).then(function(){return B})]:[2,B]}})})});return a.open(),a.write(Po(document.doctype)+``),ko(this.referenceElement.ownerDocument,n,s),a.replaceChild(a.adoptNode(this.documentElement),a.documentElement),a.close(),o},e.prototype.createElementClone=function(A){if(Tr(A,2))debugger;if(GB(A))return this.createCanvasClone(A);if(RB(A))return this.createVideoClone(A);if(NB(A))return this.createStyleClone(A);var t=A.cloneNode(!1);return qr(t)&&(qr(A)&&A.currentSrc&&A.currentSrc!==A.src&&(t.src=A.currentSrc,t.srcset=``),t.loading===`lazy`&&(t.loading=`eager`)),_B(t)?this.createCustomElementClone(t):t},e.prototype.createCustomElementClone=function(A){var t=document.createElement(`html2canvascustomelement`);return zr(A.style,t),t},e.prototype.createStyleClone=function(A){try{var t=A.sheet;if(t&&t.cssRules){var r=[].slice.call(t.cssRules,0).reduce(function(n,s){return s&&typeof s.cssText==`string`?n+s.cssText:n},``),B=A.cloneNode(!1);return B.textContent=r,B}}catch(n){if(this.context.logger.error(`Unable to access cssRules property`,n),n.name!==`SecurityError`)throw n}return A.cloneNode(!1)},e.prototype.createCanvasClone=function(A){var t;if(this.options.inlineImages&&A.ownerDocument){var r=A.ownerDocument.createElement(`img`);try{return r.src=A.toDataURL(),r}catch{this.context.logger.info(`Unable to inline canvas contents, canvas is tainted`,A)}}var B=A.cloneNode(!1);try{B.width=A.width,B.height=A.height;var n=A.getContext(`2d`),s=B.getContext(`2d`);if(s)if(!this.options.allowTaint&&n)s.putImageData(n.getImageData(0,0,A.width,A.height),0,0);else{var i=(t=A.getContext(`webgl2`))!==null&&t!==void 0?t:A.getContext(`webgl`);if(i)i.getContextAttributes()?.preserveDrawingBuffer===!1&&this.context.logger.warn(`Unable to clone WebGL context as it has preserveDrawingBuffer=false`,A);s.drawImage(A,0,0)}return B}catch{this.context.logger.info(`Unable to clone canvas as it is tainted`,A)}return B},e.prototype.createVideoClone=function(A){var t=A.ownerDocument.createElement(`canvas`);t.width=A.offsetWidth,t.height=A.offsetHeight;var r=t.getContext(`2d`);try{return r&&(r.drawImage(A,0,0,t.width,t.height),this.options.allowTaint||r.getImageData(0,0,t.width,t.height)),t}catch{this.context.logger.info(`Unable to clone video as it is tainted`,A)}var B=A.ownerDocument.createElement(`canvas`);return B.width=A.offsetWidth,B.height=A.offsetHeight,B},e.prototype.appendChildNode=function(A,t,r){(!VA(t)||!Oo(t)&&!t.hasAttribute(qB)&&(typeof this.options.ignoreElements!=`function`||!this.options.ignoreElements(t)))&&(!this.options.copyStyles||!VA(t)||!NB(t))&&A.appendChild(this.cloneNode(t,r))},e.prototype.cloneChildNodes=function(A,t,r){for(var B=this,n=A.shadowRoot?A.shadowRoot.firstChild:A.firstChild;n;n=n.nextSibling)if(VA(n)&&XB(n)&&typeof n.assignedNodes==`function`){var s=n.assignedNodes();s.length&&s.forEach(function(i){return B.appendChildNode(t,i,r)})}else this.appendChildNode(t,n,r)},e.prototype.cloneNode=function(A,t){if(OB(A))return document.createTextNode(A.data);if(!A.ownerDocument)return A.cloneNode(!1);var r=A.ownerDocument.defaultView;if(r&&VA(A)&&(Wr(A)||je(A))){var B=this.createElementClone(A);B.style.transitionProperty=`none`;var n=r.getComputedStyle(A),s=r.getComputedStyle(A,`:before`),i=r.getComputedStyle(A,`:after`);this.referenceElement===A&&Wr(B)&&(this.clonedReferenceElement=B),Zr(B)&&qo(B);var a=this.counters.parse(new gB(this.context,n)),o=this.resolvePseudoContent(A,B,s,Ar.BEFORE);_B(A)&&(t=!0),RB(A)||this.cloneChildNodes(A,B,t),o&&B.insertBefore(o,B.firstChild);var Q=this.resolvePseudoContent(A,B,i,Ar.AFTER);return Q&&B.appendChild(Q),this.counters.pop(a),(n&&(this.options.copyStyles||je(A))&&!VB(A)||t)&&zr(n,B),(A.scrollTop!==0||A.scrollLeft!==0)&&this.scrolledElements.push([B,A.scrollLeft,A.scrollTop]),(ze(A)||$e(A))&&(ze(B)||$e(B))&&(B.value=A.value),B}return A.cloneNode(!1)},e.prototype.resolvePseudoContent=function(A,t,r,B){var n=this;if(r){var s=r.content,i=t.ownerDocument;if(!(!i||!s||s===`none`||s===`-moz-alt-content`||r.display===`none`)){this.counters.parse(new gB(this.context,r));var a=new Di(this.context,r),o=i.createElement(`html2canvaspseudoelement`);zr(r,o),a.content.forEach(function(g){if(g.type===0)o.appendChild(i.createTextNode(g.value));else if(g.type===22){var w=i.createElement(`img`);w.src=g.value,w.style.opacity=`1`,o.appendChild(w)}else if(g.type===18){if(g.name===`attr`){var f=g.values.filter(L);f.length&&o.appendChild(i.createTextNode(A.getAttribute(f[0].value)||``))}else if(g.name===`counter`){var c=g.values.filter(RA),C=c[0],H=c[1];if(C&&L(C)){var h=n.counters.getCounterValue(C.value),F=H&&L(H)?xr.parse(n.context,H.value):3;o.appendChild(i.createTextNode(we(h,F,!1)))}}else if(g.name===`counters`){var K=g.values.filter(RA),C=K[0],p=K[1],H=K[2];if(C&&L(C)){var d=n.counters.getCounterValues(C.value),l=H&&L(H)?xr.parse(n.context,H.value):3,v=p&&p.type===0?p.value:``,y=d.map(function(W){return we(W,l,!1)}).join(v);o.appendChild(i.createTextNode(y))}}}else if(g.type===20)switch(g.value){case`open-quote`:o.appendChild(i.createTextNode(QB(a.quotes,n.quoteDepth++,!0)));break;case`close-quote`:o.appendChild(i.createTextNode(QB(a.quotes,--n.quoteDepth,!1)));break;default:o.appendChild(i.createTextNode(g.value))}}),o.className=$r+` `+At;var Q=B===Ar.BEFORE?` `+$r:` `+At;return je(t)?t.className.baseValue+=Q:t.className+=Q,o}}},e.destroy=function(A){return A.parentNode?(A.parentNode.removeChild(A),!0):!1},e})(),Ar=(function(e){return e[e.BEFORE=0]=`BEFORE`,e[e.AFTER=1]=`AFTER`,e})(Ar||{}),Vo=function(e,A){var t=e.createElement(`iframe`);return t.className=`html2canvas-container`,t.style.visibility=`hidden`,t.style.position=`fixed`,t.style.left=`-10000px`,t.style.top=`0px`,t.style.border=`0`,t.width=A.width.toString(),t.height=A.height.toString(),t.scrolling=`no`,t.setAttribute(qB,`true`),e.body.appendChild(t),t},No=function(e){return new Promise(function(A){if(e.complete){A();return}if(!e.src){A();return}e.onload=A,e.onerror=A})},Xo=function(e){return Promise.all([].slice.call(e.images,0).map(No))},_o=function(e){return new Promise(function(A,t){var r=e.contentWindow;if(!r)return t(`No window assigned for iframe`);var B=r.document;r.onload=e.onload=function(){r.onload=e.onload=null;var n=setInterval(function(){B.body.childNodes.length>0&&B.readyState===`complete`&&(clearInterval(n),A(e))},50)}})},Jo=[`all`,`d`,`content`],zr=function(e,A){for(var t=e.length-1;t>=0;t--){var r=e.item(t);Jo.indexOf(r)===-1&&A.style.setProperty(r,e.getPropertyValue(r))}return A},Po=function(e){var A=``;return e&&(A+=``),A},ko=function(e,A,t){e&&e.defaultView&&(A!==e.defaultView.pageXOffset||t!==e.defaultView.pageYOffset)&&e.defaultView.scrollTo(A,t)},Yo=function(e){var A=e[0],t=e[1],r=e[2];A.scrollLeft=t,A.scrollTop=r},Wo=`:before`,Zo=`:after`,$r=`___html2canvas___pseudoelement_before`,At=`___html2canvas___pseudoelement_after`,zB=`{ +import{n as u,o as __esmMin,t as init_chunk_IFGU66OU}from"./main-GF4OEYNH.js";var MQ,chunk_ACAMUYGZ_default;var init_chunk_ACAMUYGZ=__esmMin((()=>{init_chunk_IFGU66OU();MQ=u((nt,st)=>{(function(IA,P){typeof nt==`object`&&typeof st<`u`?st.exports=P():typeof define==`function`&&define.amd?define(P):(IA=typeof globalThis<`u`?globalThis:IA||self,IA.html2canvas=P())})(nt,(function(){"use strict";var IA=function(e,A){return IA=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,r){t.__proto__=r}||function(t,r){for(var B in r)Object.prototype.hasOwnProperty.call(r,B)&&(t[B]=r[B])},IA(e,A)};function P(e,A){if(typeof A!=`function`&&A!==null)throw new TypeError(`Class extends value `+String(A)+` is not a constructor or null`);IA(e,A);function t(){this.constructor=e}e.prototype=A===null?Object.create(A):(t.prototype=A.prototype,new t)}var ir=function(){return ir=Object.assign||function(A){for(var t,r=1,B=arguments.length;r0&&n[n.length-1])&&(o[0]===6||o[0]===2)){t=0;continue}if(o[0]===3&&(!n||o[1]>n[0]&&o[1]=55296&&B<=56319&&t>10)+55296,s%1024+56320)),(B+1===t||r.length>16384)&&(n+=String.fromCharCode.apply(String,r),r.length=0)}return n},at=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,gn=typeof Uint8Array>`u`?[]:new Uint8Array(256),fe=0;fe`u`?[]:new Uint8Array(256),Ue=0;Ue>4,Q[B++]=(s&15)<<4|i>>2,Q[B++]=(i&3)<<6|a&63;return o},cn=function(e){for(var A=e.length,t=[],r=0;r>vA,gr=(1<>vA)+32,En=65536>>or,pn=(1<=0){if(A<55296||A>56319&&A<=65535)return t=this.index[A>>vA],t=(t<>vA)],t=(t<>or),t=this.index[t],t+=A>>vA&pn,t=this.index[t],t=(t<`u`?[]:new Uint8Array(256),Fe=0;Fewt?(B.push(!0),i-=wt):B.push(!1),[`normal`,`auto`,`loose`].indexOf(A)!==-1&&[8208,8211,12316,12448].indexOf(n)!==-1)return r.push(s),t.push(Cr);if(i===Dn||i===wr){if(s===0)return r.push(s),t.push(yA);var a=t[s-1];return Rn.indexOf(a)===-1?(r.push(r[s-1]),t.push(a)):(r.push(s),t.push(yA))}if(r.push(s),i===On)return t.push(A===`strict`?ur:$A);if(i===ht||i===Sn)return t.push(yA);if(i===Mn)return n>=131072&&n<=196605||n>=196608&&n<=262141?t.push($A):t.push(yA);t.push(i)}),[r,t,B]},pr=function(e,A,t,r){var B=r[t];if(Array.isArray(e)?e.indexOf(B)!==-1:e===B)for(var n=t;n<=r.length;){n++;var s=r[n];if(s===A)return!0;if(s!==CA)break}if(B===CA)for(var n=t;n>0;){n--;var i=r[n];if(Array.isArray(e)?e.indexOf(i)!==-1:e===i)for(var a=t;a<=r.length;){a++;var s=r[a];if(s===A)return!0;if(s!==CA)break}if(i!==CA)break}return!1},It=function(e,A){for(var t=e;t>=0;){var r=A[t];if(r===CA)t--;else return r}return 0},Xn=function(e,A,t,r,B){if(t[r]===0)return I;var n=r-1;if(Array.isArray(B)&&B[n]===!0)return I;var s=n-1,i=n+1,a=A[n],o=s>=0?A[s]:0,Q=A[i];if(a===ct&&Q===Ct)return I;if(Hr.indexOf(a)!==-1)return dt;if(Hr.indexOf(Q)!==-1||Et.indexOf(Q)!==-1)return I;if(It(n,A)===lt)return Ie;if(Er.get(e[n])===wr||(a===de||a===Ee)&&Er.get(e[i])===wr||a===ut||Q===ut||a===ft||[CA,cr,WA].indexOf(a)===-1&&Q===ft||[he,ZA,Tn,SA,OA].indexOf(Q)!==-1||It(n,A)===qA||pr(lr,qA,n,A)||pr([he,ZA],ur,n,A)||pr(Ut,Ut,n,A))return I;if(a===CA)return Ie;if(a===lr||Q===lr)return I;if(Q===Cr||a===Cr)return Ie;if([cr,WA,ur].indexOf(Q)!==-1||a===xn||o===Fr&&Vn.indexOf(a)!==-1||a===OA&&Q===Fr||Q===Ft||oA.indexOf(Q)!==-1&&a===j||oA.indexOf(a)!==-1&&Q===j||a===zA&&[$A,de,Ee].indexOf(Q)!==-1||[$A,de,Ee].indexOf(a)!==-1&&Q===jA||oA.indexOf(a)!==-1&&Ht.indexOf(Q)!==-1||Ht.indexOf(a)!==-1&&oA.indexOf(Q)!==-1||[zA,jA].indexOf(a)!==-1&&(Q===j||[qA,WA].indexOf(Q)!==-1&&A[i+1]===j)||[qA,WA].indexOf(a)!==-1&&Q===j||a===j&&[j,OA,SA].indexOf(Q)!==-1)return I;if([j,OA,SA,he,ZA].indexOf(Q)!==-1)for(var g=n;g>=0;){var w=A[g];if(w===j)return I;if([OA,SA].indexOf(w)!==-1)g--;else break}if([zA,jA].indexOf(Q)!==-1)for(var g=[he,ZA].indexOf(a)!==-1?s:n;g>=0;){var w=A[g];if(w===j)return I;if([OA,SA].indexOf(w)!==-1)g--;else break}if(hr===a&&[hr,He,fr,Ur].indexOf(Q)!==-1||[He,fr].indexOf(a)!==-1&&[He,pe].indexOf(Q)!==-1||[pe,Ur].indexOf(a)!==-1&&Q===pe||pt.indexOf(a)!==-1&&[Ft,jA].indexOf(Q)!==-1||pt.indexOf(Q)!==-1&&a===zA||oA.indexOf(a)!==-1&&oA.indexOf(Q)!==-1||a===SA&&oA.indexOf(Q)!==-1||oA.concat(j).indexOf(a)!==-1&&Q===qA&&Gn.indexOf(e[i])===-1||oA.concat(j).indexOf(Q)!==-1&&a===ZA)return I;if(a===dr&&Q===dr){for(var f=t[n],c=1;f>0&&(f--,A[f]===dr);)c++;if(c%2!==0)return I}return a===de&&Q===Ee?I:Ie},_n=function(e,A){A||(A={lineBreak:`normal`,wordBreak:`normal`});var t=Nn(e,A.lineBreak),r=t[0],B=t[1],n=t[2];(A.wordBreak===`break-all`||A.wordBreak===`break-word`)&&(B=B.map(function(i){return[j,yA,ht].indexOf(i)!==-1?$A:i}));var s=A.wordBreak===`keep-all`?n.map(function(i,a){return i&&e[a]>=19968&&e[a]<=40959}):void 0;return[r,B,s]},Jn=(function(){function e(A,t,r,B){this.codePoints=A,this.required=t===dt,this.start=r,this.end=B}return e.prototype.slice=function(){return T.apply(void 0,this.codePoints.slice(this.start,this.end))},e})(),Pn=function(e,A){var t=le(e),r=_n(t,A),B=r[0],n=r[1],s=r[2],i=t.length,a=0,o=0;return{next:function(){if(o>=i)return{done:!0,value:null};for(var Q=I;o=Lt&&e<=57},Is=function(e){return e>=55296&&e<=57343},MA=function(e){return J(e)||e>=xt&&e<=St||e>=Dt&&e<=hs},vs=function(e){return e>=Dt&&e<=Es},ys=function(e){return e>=xt&&e<=ps},Ks=function(e){return vs(e)||ys(e)},ms=function(e){return e>=Qs},De=function(e){return e===ve||e===Wn||e===Zn},be=function(e){return Ks(e)||ms(e)||e===$n},Ot=function(e){return be(e)||J(e)||e===Y},Ls=function(e){return e>=Cs&&e<=us||e===ls||e>=fs&&e<=Us||e===Fs},uA=function(e,A){return e!==ee?!1:A!==ve},xe=function(e,A,t){return e===Y?be(A)||uA(A,t):be(e)?!0:!!(e===ee&&uA(e,A))},vr=function(e,A,t){return e===KA||e===Y?J(A)?!0:A===Be&&J(t):J(e===Be?A:e)},Ds=function(e){var A=0,t=1;(e[A]===KA||e[A]===Y)&&(e[A]===Y&&(t=-1),A++);for(var r=[];J(e[A]);)r.push(e[A++]);var B=r.length?parseInt(T.apply(void 0,r),10):0;e[A]===Be&&A++;for(var n=[];J(e[A]);)n.push(e[A++]);var s=n.length,i=s?parseInt(T.apply(void 0,n),10):0;(e[A]===Tt||e[A]===bt)&&A++;var a=1;(e[A]===KA||e[A]===Y)&&(e[A]===Y&&(a=-1),A++);for(var o=[];J(e[A]);)o.push(e[A++]);var Q=o.length?parseInt(T.apply(void 0,o),10):0;return t*(B+i*Math.pow(10,-s))*Math.pow(10,a*Q)},bs={type:2},xs={type:3},Ts={type:4},Ss={type:13},Os={type:8},Ms={type:21},Gs={type:9},Rs={type:10},Vs={type:11},Ns={type:12},Xs={type:14},Te={type:23},_s={type:1},Js={type:25},Ps={type:24},ks={type:26},Ys={type:27},Ws={type:28},Zs={type:29},qs={type:31},yr={type:32},Mt=(function(){function e(){this._value=[]}return e.prototype.write=function(A){this._value=this._value.concat(le(A))},e.prototype.read=function(){for(var A=[],t=this.consumeToken();t!==yr;)A.push(t),t=this.consumeToken();return A},e.prototype.consumeToken=function(){var A=this.consumeCodePoint();switch(A){case ye:return this.consumeStringToken(ye);case qn:var t=this.peekCodePoint(0),r=this.peekCodePoint(1),B=this.peekCodePoint(2);if(Ot(t)||uA(r,B)){var n=xe(t,r,B)?Yn:kn,s=this.consumeName();return{type:5,value:s,flags:n}}break;case jn:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Ss;break;case Ke:return this.consumeStringToken(Ke);case me:return bs;case te:return xs;case Ir:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Xs;break;case KA:if(vr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case gs:return Ts;case Y:var i=A,a=this.peekCodePoint(0),o=this.peekCodePoint(1);if(vr(i,a,o))return this.reconsumeCodePoint(A),this.consumeNumericToken();if(xe(i,a,o))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();if(a===Y&&o===rs)return this.consumeCodePoint(),this.consumeCodePoint(),Ps;break;case Be:if(vr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case yt:if(this.peekCodePoint(0)===Ir)for(this.consumeCodePoint();;){var Q=this.consumeCodePoint();if(Q===Ir&&(Q=this.consumeCodePoint(),Q===yt))return this.consumeToken();if(Q===BA)return this.consumeToken()}break;case ws:return ks;case cs:return Ys;case es:if(this.peekCodePoint(0)===As&&this.peekCodePoint(1)===Y&&this.peekCodePoint(2)===Y)return this.consumeCodePoint(),this.consumeCodePoint(),Js;break;case ts:if(xe(this.peekCodePoint(0),this.peekCodePoint(1),this.peekCodePoint(2))){var s=this.consumeName();return{type:7,value:s}}break;case Bs:return Ws;case ee:if(uA(A,this.peekCodePoint(0)))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();break;case ns:return Zs;case ss:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Os;break;case as:return Vs;case is:return Ns;case ds:case Hs:var c=this.peekCodePoint(0),C=this.peekCodePoint(1);return c===KA&&(MA(C)||C===Le)&&(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(A),this.consumeIdentLikeToken();case Kt:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Gs;if(this.peekCodePoint(0)===Kt)return this.consumeCodePoint(),Ms;break;case os:if(this.peekCodePoint(0)===re)return this.consumeCodePoint(),Rs;break;case BA:return yr}return De(A)?(this.consumeWhiteSpace(),qs):J(A)?(this.reconsumeCodePoint(A),this.consumeNumericToken()):be(A)?(this.reconsumeCodePoint(A),this.consumeIdentLikeToken()):{type:6,value:T(A)}},e.prototype.consumeCodePoint=function(){var A=this._value.shift();return typeof A>`u`?-1:A},e.prototype.reconsumeCodePoint=function(A){this._value.unshift(A)},e.prototype.peekCodePoint=function(A){return A>=this._value.length?-1:this._value[A]},e.prototype.consumeUnicodeRangeToken=function(){for(var A=[],t=this.consumeCodePoint();MA(t)&&A.length<6;)A.push(t),t=this.consumeCodePoint();for(var r=!1;t===Le&&A.length<6;)A.push(t),t=this.consumeCodePoint(),r=!0;if(r){var B=parseInt(T.apply(void 0,A.map(function(a){return a===Le?Lt:a})),16),n=parseInt(T.apply(void 0,A.map(function(a){return a===Le?St:a})),16);return{type:30,start:B,end:n}}var s=parseInt(T.apply(void 0,A),16);if(this.peekCodePoint(0)===Y&&MA(this.peekCodePoint(1))){this.consumeCodePoint(),t=this.consumeCodePoint();for(var i=[];MA(t)&&i.length<6;)i.push(t),t=this.consumeCodePoint();var n=parseInt(T.apply(void 0,i),16);return{type:30,start:s,end:n}}else return{type:30,start:s,end:s}},e.prototype.consumeIdentLikeToken=function(){var A=this.consumeName();return A.toLowerCase()===`url`&&this.peekCodePoint(0)===me?(this.consumeCodePoint(),this.consumeUrlToken()):this.peekCodePoint(0)===me?(this.consumeCodePoint(),{type:19,value:A}):{type:20,value:A}},e.prototype.consumeUrlToken=function(){var A=[];if(this.consumeWhiteSpace(),this.peekCodePoint(0)===BA)return{type:22,value:``};var t=this.peekCodePoint(0);if(t===Ke||t===ye){var r=this.consumeStringToken(this.consumeCodePoint());return r.type===0&&(this.consumeWhiteSpace(),this.peekCodePoint(0)===BA||this.peekCodePoint(0)===te)?(this.consumeCodePoint(),{type:22,value:r.value}):(this.consumeBadUrlRemnants(),Te)}for(;;){var B=this.consumeCodePoint();if(B===BA||B===te)return{type:22,value:T.apply(void 0,A)};if(De(B))return this.consumeWhiteSpace(),this.peekCodePoint(0)===BA||this.peekCodePoint(0)===te?(this.consumeCodePoint(),{type:22,value:T.apply(void 0,A)}):(this.consumeBadUrlRemnants(),Te);if(B===ye||B===Ke||B===me||Ls(B))return this.consumeBadUrlRemnants(),Te;if(B===ee)if(uA(B,this.peekCodePoint(0)))A.push(this.consumeEscapedCodePoint());else return this.consumeBadUrlRemnants(),Te;else A.push(B)}},e.prototype.consumeWhiteSpace=function(){for(;De(this.peekCodePoint(0));)this.consumeCodePoint()},e.prototype.consumeBadUrlRemnants=function(){for(;;){var A=this.consumeCodePoint();if(A===te||A===BA)return;uA(A,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},e.prototype.consumeStringSlice=function(A){for(var t=5e4,r=``;A>0;){var B=Math.min(t,A);r+=T.apply(void 0,this._value.splice(0,B)),A-=B}return this._value.shift(),r},e.prototype.consumeStringToken=function(A){var t=``,r=0;do{var B=this._value[r];if(B===BA||B===void 0||B===A)return t+=this.consumeStringSlice(r),{type:0,value:t};if(B===ve)return this._value.splice(0,r),_s;if(B===ee){var n=this._value[r+1];n!==BA&&n!==void 0&&(n===ve?(t+=this.consumeStringSlice(r),r=-1,this._value.shift()):uA(B,n)&&(t+=this.consumeStringSlice(r),t+=T(this.consumeEscapedCodePoint()),r=-1))}r++}while(!0)},e.prototype.consumeNumber=function(){var A=[],t=Ae,r=this.peekCodePoint(0);for((r===KA||r===Y)&&A.push(this.consumeCodePoint());J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());r=this.peekCodePoint(0);var B=this.peekCodePoint(1);if(r===Be&&J(B))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=vt;J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());r=this.peekCodePoint(0),B=this.peekCodePoint(1);var n=this.peekCodePoint(2);if((r===Tt||r===bt)&&((B===KA||B===Y)&&J(n)||J(B)))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=vt;J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());return[Ds(A),t]},e.prototype.consumeNumericToken=function(){var A=this.consumeNumber(),t=A[0],r=A[1],B=this.peekCodePoint(0);if(xe(B,this.peekCodePoint(1),this.peekCodePoint(2)))return{type:15,number:t,flags:r,unit:this.consumeName()};return B===zn?(this.consumeCodePoint(),{type:16,number:t,flags:r}):{type:17,number:t,flags:r}},e.prototype.consumeEscapedCodePoint=function(){var A=this.consumeCodePoint();if(MA(A)){for(var t=T(A);MA(this.peekCodePoint(0))&&t.length<6;)t+=T(this.consumeCodePoint());De(this.peekCodePoint(0))&&this.consumeCodePoint();var r=parseInt(t,16);return r===0||Is(r)||r>1114111?mt:r}return A===BA?mt:A},e.prototype.consumeName=function(){for(var A=``;;){var t=this.consumeCodePoint();if(Ot(t))A+=T(t);else if(uA(t,this.peekCodePoint(0)))A+=T(this.consumeEscapedCodePoint());else return this.reconsumeCodePoint(t),A}},e})(),Gt=(function(){function e(A){this._tokens=A}return e.create=function(A){var t=new Mt;return t.write(A),new e(t.read())},e.parseValue=function(A){return e.create(A).parseComponentValue()},e.parseValues=function(A){return e.create(A).parseComponentValues()},e.prototype.parseComponentValue=function(){for(var A=this.consumeToken();A.type===31;)A=this.consumeToken();if(A.type===32)throw new SyntaxError(`Error parsing CSS component value, unexpected EOF`);this.reconsumeToken(A);var t=this.consumeComponentValue();do A=this.consumeToken();while(A.type===31);if(A.type===32)return t;throw new SyntaxError(`Error parsing CSS component value, multiple values found when expecting only one`)},e.prototype.parseComponentValues=function(){for(var A=[];;){var t=this.consumeComponentValue();if(t.type===32)return A;A.push(t),A.push()}},e.prototype.consumeComponentValue=function(){var A=this.consumeToken();switch(A.type){case 11:case 28:case 2:return this.consumeSimpleBlock(A.type);case 19:return this.consumeFunction(A)}return A},e.prototype.consumeSimpleBlock=function(A){for(var t={type:A,values:[]},r=this.consumeToken();;){if(r.type===32||zs(r,A))return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue()),r=this.consumeToken()}},e.prototype.consumeFunction=function(A){for(var t={name:A.value,values:[],type:18};;){var r=this.consumeToken();if(r.type===32||r.type===3)return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue())}},e.prototype.consumeToken=function(){var A=this._tokens.shift();return typeof A>`u`?yr:A},e.prototype.reconsumeToken=function(A){this._tokens.unshift(A)},e})(),ne=function(e){return e.type===15},GA=function(e){return e.type===17},L=function(e){return e.type===20},js=function(e){return e.type===0},Kr=function(e,A){return L(e)&&e.value===A},Rt=function(e){return e.type!==31},RA=function(e){return e.type!==31&&e.type!==4},nA=function(e){var A=[],t=[];return e.forEach(function(r){if(r.type===4){if(t.length===0)throw new Error(`Error parsing function args, zero tokens for arg`);A.push(t),t=[];return}r.type!==31&&t.push(r)}),t.length&&A.push(t),A},zs=function(e,A){return A===11&&e.type===12||A===28&&e.type===29?!0:A===2&&e.type===3},lA=function(e){return e.type===17||e.type===15},O=function(e){return e.type===16||lA(e)},Vt=function(e){return e.length>1?[e[0],e[1]]:[e[0]]},V={type:17,number:0,flags:Ae},mr={type:16,number:50,flags:Ae},fA={type:16,number:100,flags:Ae},se=function(e,A,t){var r=e[0],B=e[1];return[b(r,A),b(typeof B<`u`?B:r,t)]},b=function(e,A){if(e.type===16)return e.number/100*A;if(ne(e))switch(e.unit){case`rem`:case`em`:return 16*e.number;default:return e.number}return e.number},Nt=`deg`,Xt=`grad`,_t=`rad`,Jt=`turn`,Se={name:`angle`,parse:function(e,A){if(A.type===15)switch(A.unit){case Nt:return Math.PI*A.number/180;case Xt:return Math.PI/200*A.number;case _t:return A.number;case Jt:return Math.PI*2*A.number}throw new Error(`Unsupported angle type`)}},Pt=function(e){return e.type===15&&(e.unit===Nt||e.unit===Xt||e.unit===_t||e.unit===Jt)},kt=function(e){switch(e.filter(L).map(function(t){return t.value}).join(` `)){case`to bottom right`:case`to right bottom`:case`left top`:case`top left`:return[V,V];case`to top`:case`bottom`:return $(0);case`to bottom left`:case`to left bottom`:case`right top`:case`top right`:return[V,fA];case`to right`:case`left`:return $(90);case`to top left`:case`to left top`:case`right bottom`:case`bottom right`:return[fA,fA];case`to bottom`:case`top`:return $(180);case`to top right`:case`to right top`:case`left bottom`:case`bottom left`:return[fA,V];case`to left`:case`right`:return $(270)}return 0},$=function(e){return Math.PI*e/180},UA={name:`color`,parse:function(e,A){if(A.type===18){var t=$s[A.name];if(typeof t>`u`)throw new Error(`Attempting to parse an unsupported color function "`+A.name+`"`);return t(e,A.values)}if(A.type===5){if(A.value.length===3){var r=A.value.substring(0,1),B=A.value.substring(1,2),n=A.value.substring(2,3);return hA(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),1)}if(A.value.length===4){var r=A.value.substring(0,1),B=A.value.substring(1,2),n=A.value.substring(2,3),s=A.value.substring(3,4);return hA(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),parseInt(s+s,16)/255)}if(A.value.length===6){var r=A.value.substring(0,2),B=A.value.substring(2,4),n=A.value.substring(4,6);return hA(parseInt(r,16),parseInt(B,16),parseInt(n,16),1)}if(A.value.length===8){var r=A.value.substring(0,2),B=A.value.substring(2,4),n=A.value.substring(4,6),s=A.value.substring(6,8);return hA(parseInt(r,16),parseInt(B,16),parseInt(n,16),parseInt(s,16)/255)}}if(A.type===20){var i=QA[A.value.toUpperCase()];if(typeof i<`u`)return i}return QA.TRANSPARENT}},FA=function(e){return(255&e)===0},R=function(e){var A=255&e,t=255&e>>8,r=255&e>>16,B=255&e>>24;return A<255?`rgba(`+B+`,`+r+`,`+t+`,`+A/255+`)`:`rgb(`+B+`,`+r+`,`+t+`)`},hA=function(e,A,t,r){return(e<<24|A<<16|t<<8|Math.round(r*255)<<0)>>>0},Yt=function(e,A){if(e.type===17)return e.number;if(e.type===16){var t=A===3?1:255;return A===3?e.number/100*t:Math.round(e.number/100*t)}return 0},Wt=function(e,A){var t=A.filter(RA);if(t.length===3){var r=t.map(Yt),B=r[0],n=r[1],s=r[2];return hA(B,n,s,1)}if(t.length===4){var i=t.map(Yt),B=i[0],n=i[1],s=i[2],a=i[3];return hA(B,n,s,a)}return 0};function Lr(e,A,t){return t<0&&(t+=1),t>=1&&(t-=1),t<1/6?(A-e)*t*6+e:t<1/2?A:t<2/3?(A-e)*6*(2/3-t)+e:e}var Zt=function(e,A){var t=A.filter(RA),r=t[0],B=t[1],n=t[2],s=t[3],i=(r.type===17?$(r.number):Se.parse(e,r))/(Math.PI*2),a=O(B)?B.number/100:0,o=O(n)?n.number/100:0,Q=typeof s<`u`&&O(s)?b(s,1):1;if(a===0)return hA(o*255,o*255,o*255,1);var g=o<=.5?o*(a+1):o+a-o*a,w=o*2-g,f=Lr(w,g,i+1/3),c=Lr(w,g,i),C=Lr(w,g,i-1/3);return hA(f*255,c*255,C*255,Q)},$s={hsl:Zt,hsla:Zt,rgb:Wt,rgba:Wt},ae=function(e,A){return UA.parse(e,Gt.create(A).parseComponentValue())},QA={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199},Aa={name:`background-clip`,initialValue:`border-box`,prefix:!1,type:1,parse:function(e,A){return A.map(function(t){if(L(t))switch(t.value){case`padding-box`:return 1;case`content-box`:return 2}return 0})}},ea={name:`background-color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`},Oe=function(e,A){var t=UA.parse(e,A[0]),r=A[1];return r&&O(r)?{color:t,stop:r}:{color:t,stop:null}},qt=function(e,A){var t=e[0],r=e[e.length-1];t.stop===null&&(t.stop=V),r.stop===null&&(r.stop=fA);for(var B=[],n=0,s=0;sn?B.push(a):B.push(n),n=a}else B.push(null)}for(var o=null,s=0;ss.optimumDistance)?{optimumCorner:i,optimumDistance:Q}:s},{optimumDistance:B?Infinity:-Infinity,optimumCorner:null}).optimumCorner},Ba=function(e,A,t,r,B){var n=0,s=0;switch(e.size){case 0:e.shape===0?n=s=Math.min(Math.abs(A),Math.abs(A-r),Math.abs(t),Math.abs(t-B)):e.shape===1&&(n=Math.min(Math.abs(A),Math.abs(A-r)),s=Math.min(Math.abs(t),Math.abs(t-B)));break;case 2:if(e.shape===0)n=s=Math.min(tA(A,t),tA(A,t-B),tA(A-r,t),tA(A-r,t-B));else if(e.shape===1){var i=Math.min(Math.abs(t),Math.abs(t-B))/Math.min(Math.abs(A),Math.abs(A-r)),a=jt(r,B,A,t,!0),o=a[0],Q=a[1];n=tA(o-A,(Q-t)/i),s=i*n}break;case 1:e.shape===0?n=s=Math.max(Math.abs(A),Math.abs(A-r),Math.abs(t),Math.abs(t-B)):e.shape===1&&(n=Math.max(Math.abs(A),Math.abs(A-r)),s=Math.max(Math.abs(t),Math.abs(t-B)));break;case 3:if(e.shape===0)n=s=Math.max(tA(A,t),tA(A,t-B),tA(A-r,t),tA(A-r,t-B));else if(e.shape===1){var i=Math.max(Math.abs(t),Math.abs(t-B))/Math.max(Math.abs(A),Math.abs(A-r)),g=jt(r,B,A,t,!1),o=g[0],Q=g[1];n=tA(o-A,(Q-t)/i),s=i*n}break}return Array.isArray(e.size)&&(n=b(e.size[0],r),s=e.size.length===2?b(e.size[1],B):n),[n,s]},na=function(e,A){var t=$(180),r=[];return nA(A).forEach(function(B,n){if(n===0){var s=B[0];if(s.type===20&&s.value===`to`){t=kt(B);return}else if(Pt(s)){t=Se.parse(e,s);return}}var i=Oe(e,B);r.push(i)}),{angle:t,stops:r,type:1}},Me=function(e,A){var t=$(180),r=[];return nA(A).forEach(function(B,n){if(n===0){var s=B[0];if(s.type===20&&[`top`,`left`,`right`,`bottom`].indexOf(s.value)!==-1){t=kt(B);return}else if(Pt(s)){t=(Se.parse(e,s)+$(270))%$(360);return}}var i=Oe(e,B);r.push(i)}),{angle:t,stops:r,type:1}},sa=function(e,A){var t=$(180),r=[],B=1;return nA(A).forEach(function(a,o){var Q=a[0];if(o===0){if(L(Q)&&Q.value===`linear`){B=1;return}else if(L(Q)&&Q.value===`radial`){B=2;return}}if(Q.type===18){if(Q.name===`from`){var g=UA.parse(e,Q.values[0]);r.push({stop:V,color:g})}else if(Q.name===`to`){var g=UA.parse(e,Q.values[0]);r.push({stop:fA,color:g})}else if(Q.name===`color-stop`){var w=Q.values.filter(RA);if(w.length===2){var g=UA.parse(e,w[1]),f=w[0];GA(f)&&r.push({stop:{type:16,number:f.number*100,flags:f.flags},color:g})}}}}),B===1?{angle:(t+$(180))%$(360),stops:r,type:B}:{size:3,shape:0,stops:r,position:[],type:B}},zt=`closest-side`,$t=`farthest-side`,AB=`closest-corner`,eB=`farthest-corner`,rB=`circle`,tB=`ellipse`,BB=`cover`,nB=`contain`,aa=function(e,A){var t=0,r=3,B=[],n=[];return nA(A).forEach(function(s,i){var a=!0;if(i===0){var o=!1;a=s.reduce(function(g,w){if(o)if(L(w))switch(w.value){case`center`:return n.push(mr),g;case`top`:case`left`:return n.push(V),g;case`right`:case`bottom`:return n.push(fA),g}else(O(w)||lA(w))&&n.push(w);else if(L(w))switch(w.value){case rB:return t=0,!1;case tB:return t=1,!1;case`at`:return o=!0,!1;case zt:return r=0,!1;case BB:case $t:return r=1,!1;case nB:case AB:return r=2,!1;case eB:return r=3,!1}else if(lA(w)||O(w))return Array.isArray(r)||(r=[]),r.push(w),!1;return g},a)}if(a){var Q=Oe(e,s);B.push(Q)}}),{size:r,shape:t,stops:B,position:n,type:2}},Ge=function(e,A){var t=0,r=3,B=[],n=[];return nA(A).forEach(function(s,i){var a=!0;if(i===0?a=s.reduce(function(Q,g){if(L(g))switch(g.value){case`center`:return n.push(mr),!1;case`top`:case`left`:return n.push(V),!1;case`right`:case`bottom`:return n.push(fA),!1}else if(O(g)||lA(g))return n.push(g),!1;return Q},a):i===1&&(a=s.reduce(function(Q,g){if(L(g))switch(g.value){case rB:return t=0,!1;case tB:return t=1,!1;case nB:case zt:return r=0,!1;case $t:return r=1,!1;case AB:return r=2,!1;case BB:case eB:return r=3,!1}else if(lA(g)||O(g))return Array.isArray(r)||(r=[]),r.push(g),!1;return Q},a)),a){var o=Oe(e,s);B.push(o)}}),{size:r,shape:t,stops:B,position:n,type:2}},ia=function(e){return e.type===1},oa=function(e){return e.type===2},Dr={name:`image`,parse:function(e,A){if(A.type===22){var t={url:A.value,type:0};return e.cache.addImage(A.value),t}if(A.type===18){var r=sB[A.name];if(typeof r>`u`)throw new Error(`Attempting to parse an unsupported image function "`+A.name+`"`);return r(e,A.values)}throw new Error(`Unsupported image type `+A.type)}};function Qa(e){return!(e.type===20&&e.value===`none`)&&(e.type!==18||!!sB[e.name])}for(var sB={"linear-gradient":na,"-moz-linear-gradient":Me,"-ms-linear-gradient":Me,"-o-linear-gradient":Me,"-webkit-linear-gradient":Me,"radial-gradient":aa,"-moz-radial-gradient":Ge,"-ms-radial-gradient":Ge,"-o-radial-gradient":Ge,"-webkit-radial-gradient":Ge,"-webkit-gradient":sa},ga={name:`background-image`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){if(A.length===0)return[];var t=A[0];return t.type===20&&t.value===`none`?[]:A.filter(function(r){return RA(r)&&Qa(r)}).map(function(r){return Dr.parse(e,r)})}},wa={name:`background-origin`,initialValue:`border-box`,prefix:!1,type:1,parse:function(e,A){return A.map(function(t){if(L(t))switch(t.value){case`padding-box`:return 1;case`content-box`:return 2}return 0})}},ca={name:`background-position`,initialValue:`0% 0%`,type:1,prefix:!1,parse:function(e,A){return nA(A).map(function(t){return t.filter(O)}).map(Vt)}},Ca={name:`background-repeat`,initialValue:`repeat`,prefix:!1,type:1,parse:function(e,A){return nA(A).map(function(t){return t.filter(L).map(function(r){return r.value}).join(` `)}).map(ua)}},ua=function(e){switch(e){case`no-repeat`:return 1;case`repeat-x`:case`repeat no-repeat`:return 2;case`repeat-y`:case`no-repeat repeat`:return 3;default:return 0}},ie=(function(e){return e.AUTO=`auto`,e.CONTAIN=`contain`,e.COVER=`cover`,e})(ie||{}),la={name:`background-size`,initialValue:`0`,prefix:!1,type:1,parse:function(e,A){return nA(A).map(function(t){return t.filter(fa)})}},fa=function(e){return L(e)||O(e)},Re=function(e){return{name:`border-`+e+`-color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`}},Ua=Re(`top`),Fa=Re(`right`),ha=Re(`bottom`),da=Re(`left`),Ve=function(e){return{name:`border-radius-`+e,initialValue:`0 0`,prefix:!1,type:1,parse:function(A,t){return Vt(t.filter(O))}}},Ea=Ve(`top-left`),Ha=Ve(`top-right`),pa=Ve(`bottom-right`),Ia=Ve(`bottom-left`),Ne=function(e){return{name:`border-`+e+`-style`,initialValue:`solid`,prefix:!1,type:2,parse:function(A,t){switch(t){case`none`:return 0;case`dashed`:return 2;case`dotted`:return 3;case`double`:return 4}return 1}}},va=Ne(`top`),ya=Ne(`right`),Ka=Ne(`bottom`),ma=Ne(`left`),Xe=function(e){return{name:`border-`+e+`-width`,initialValue:`0`,type:0,prefix:!1,parse:function(A,t){return ne(t)?t.number:0}}},La=Xe(`top`),Da=Xe(`right`),ba=Xe(`bottom`),xa=Xe(`left`),Ta={name:`color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`},Sa={name:`direction`,initialValue:`ltr`,prefix:!1,type:2,parse:function(e,A){return A===`rtl`?1:0}},Oa={name:`display`,initialValue:`inline-block`,prefix:!1,type:1,parse:function(e,A){return A.filter(L).reduce(function(t,r){return t|Ma(r.value)},0)}},Ma=function(e){switch(e){case`block`:case`-webkit-box`:return 2;case`inline`:return 4;case`run-in`:return 8;case`flow`:return 16;case`flow-root`:return 32;case`table`:return 64;case`flex`:case`-webkit-flex`:return 128;case`grid`:case`-ms-grid`:return 256;case`ruby`:return 512;case`subgrid`:return 1024;case`list-item`:return 2048;case`table-row-group`:return 4096;case`table-header-group`:return 8192;case`table-footer-group`:return 16384;case`table-row`:return 32768;case`table-cell`:return 65536;case`table-column-group`:return 131072;case`table-column`:return 262144;case`table-caption`:return 524288;case`ruby-base`:return 1048576;case`ruby-text`:return 2097152;case`ruby-base-container`:return 4194304;case`ruby-text-container`:return 8388608;case`contents`:return 16777216;case`inline-block`:return 33554432;case`inline-list-item`:return 67108864;case`inline-table`:return 134217728;case`inline-flex`:return 268435456;case`inline-grid`:return 536870912}return 0},Ga={name:`float`,initialValue:`none`,prefix:!1,type:2,parse:function(e,A){switch(A){case`left`:return 1;case`right`:return 2;case`inline-start`:return 3;case`inline-end`:return 4}return 0}},Ra={name:`letter-spacing`,initialValue:`0`,prefix:!1,type:0,parse:function(e,A){return A.type===20&&A.value===`normal`?0:A.type===17||A.type===15?A.number:0}},br=(function(e){return e.NORMAL=`normal`,e.STRICT=`strict`,e})(br||{}),Va={name:`line-break`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){return A===`strict`?br.STRICT:br.NORMAL}},Na={name:`line-height`,initialValue:`normal`,prefix:!1,type:4},aB=function(e,A){return L(e)&&e.value===`normal`?1.2*A:e.type===17?A*e.number:O(e)?b(e,A):A},Xa={name:`list-style-image`,initialValue:`none`,type:0,prefix:!1,parse:function(e,A){return A.type===20&&A.value===`none`?null:Dr.parse(e,A)}},_a={name:`list-style-position`,initialValue:`outside`,prefix:!1,type:2,parse:function(e,A){return A===`inside`?0:1}},xr={name:`list-style-type`,initialValue:`none`,prefix:!1,type:2,parse:function(e,A){switch(A){case`disc`:return 0;case`circle`:return 1;case`square`:return 2;case`decimal`:return 3;case`cjk-decimal`:return 4;case`decimal-leading-zero`:return 5;case`lower-roman`:return 6;case`upper-roman`:return 7;case`lower-greek`:return 8;case`lower-alpha`:return 9;case`upper-alpha`:return 10;case`arabic-indic`:return 11;case`armenian`:return 12;case`bengali`:return 13;case`cambodian`:return 14;case`cjk-earthly-branch`:return 15;case`cjk-heavenly-stem`:return 16;case`cjk-ideographic`:return 17;case`devanagari`:return 18;case`ethiopic-numeric`:return 19;case`georgian`:return 20;case`gujarati`:return 21;case`gurmukhi`:return 22;case`hebrew`:return 22;case`hiragana`:return 23;case`hiragana-iroha`:return 24;case`japanese-formal`:return 25;case`japanese-informal`:return 26;case`kannada`:return 27;case`katakana`:return 28;case`katakana-iroha`:return 29;case`khmer`:return 30;case`korean-hangul-formal`:return 31;case`korean-hanja-formal`:return 32;case`korean-hanja-informal`:return 33;case`lao`:return 34;case`lower-armenian`:return 35;case`malayalam`:return 36;case`mongolian`:return 37;case`myanmar`:return 38;case`oriya`:return 39;case`persian`:return 40;case`simp-chinese-formal`:return 41;case`simp-chinese-informal`:return 42;case`tamil`:return 43;case`telugu`:return 44;case`thai`:return 45;case`tibetan`:return 46;case`trad-chinese-formal`:return 47;case`trad-chinese-informal`:return 48;case`upper-armenian`:return 49;case`disclosure-open`:return 50;case`disclosure-closed`:return 51;default:return-1}}},_e=function(e){return{name:`margin-`+e,initialValue:`0`,prefix:!1,type:4}},Ja=_e(`top`),Pa=_e(`right`),ka=_e(`bottom`),Ya=_e(`left`),Wa={name:`overflow`,initialValue:`visible`,prefix:!1,type:1,parse:function(e,A){return A.filter(L).map(function(t){switch(t.value){case`hidden`:return 1;case`scroll`:return 2;case`clip`:return 3;case`auto`:return 4;default:return 0}})}},Za={name:`overflow-wrap`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){return A===`break-word`?`break-word`:`normal`}},Je=function(e){return{name:`padding-`+e,initialValue:`0`,prefix:!1,type:3,format:`length-percentage`}},qa=Je(`top`),ja=Je(`right`),za=Je(`bottom`),$a=Je(`left`),Ai={name:`text-align`,initialValue:`left`,prefix:!1,type:2,parse:function(e,A){switch(A){case`right`:return 2;case`center`:case`justify`:return 1;default:return 0}}},ei={name:`position`,initialValue:`static`,prefix:!1,type:2,parse:function(e,A){switch(A){case`relative`:return 1;case`absolute`:return 2;case`fixed`:return 3;case`sticky`:return 4}return 0}},ri={name:`text-shadow`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){return A.length===1&&Kr(A[0],`none`)?[]:nA(A).map(function(t){for(var r={color:QA.TRANSPARENT,offsetX:V,offsetY:V,blur:V},B=0,n=0;n`u`)throw new Error(`Attempting to parse an unsupported transform function "`+A.name+`"`);return t(A.values)}return null}},ni=function(e){var A=e.filter(function(t){return t.type===17}).map(function(t){return t.number});return A.length===6?A:null},si=function(e){var A=e.filter(function(a){return a.type===17}).map(function(a){return a.number}),t=A[0],r=A[1];A[2],A[3];var B=A[4],n=A[5];A[6],A[7],A[8],A[9],A[10],A[11];var s=A[12],i=A[13];return A[14],A[15],A.length===16?[t,r,B,n,s,i]:null},ai={matrix:ni,matrix3d:si},iB={type:16,number:50,flags:Ae},ii=[iB,iB],oi={name:`transform-origin`,initialValue:`50% 50%`,prefix:!0,type:1,parse:function(e,A){var t=A.filter(O);return t.length!==2?ii:[t[0],t[1]]}},Qi={name:`visible`,initialValue:`none`,prefix:!1,type:2,parse:function(e,A){switch(A){case`hidden`:return 1;case`collapse`:return 2;default:return 0}}},Pe=(function(e){return e.NORMAL=`normal`,e.BREAK_ALL=`break-all`,e.KEEP_ALL=`keep-all`,e})(Pe||{}),gi={name:`word-break`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){switch(A){case`break-all`:return Pe.BREAK_ALL;case`keep-all`:return Pe.KEEP_ALL;default:return Pe.NORMAL}}},wi={name:`z-index`,initialValue:`auto`,prefix:!1,type:0,parse:function(e,A){if(A.type===20)return{auto:!0,order:0};if(GA(A))return{auto:!1,order:A.number};throw new Error(`Invalid z-index number parsed`)}},oB={name:`time`,parse:function(e,A){if(A.type===15)switch(A.unit.toLowerCase()){case`s`:return 1e3*A.number;case`ms`:return A.number}throw new Error(`Unsupported time type`)}},ci={name:`opacity`,initialValue:`1`,type:0,prefix:!1,parse:function(e,A){return GA(A)?A.number:1}},Ci={name:`text-decoration-color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`},ui={name:`text-decoration-line`,initialValue:`none`,prefix:!1,type:1,parse:function(e,A){return A.filter(L).map(function(t){switch(t.value){case`underline`:return 1;case`overline`:return 2;case`line-through`:return 3;case`none`:return 4}return 0}).filter(function(t){return t!==0})}},li={name:`font-family`,initialValue:``,prefix:!1,type:1,parse:function(e,A){var t=[],r=[];return A.forEach(function(B){switch(B.type){case 20:case 0:t.push(B.value);break;case 17:t.push(B.number.toString());break;case 4:r.push(t.join(` `)),t.length=0;break}}),t.length&&r.push(t.join(` `)),r.map(function(B){return B.indexOf(` `)===-1?B:`'`+B+`'`})}},fi={name:`font-size`,initialValue:`0`,prefix:!1,type:3,format:`length`},Ui={name:`font-weight`,initialValue:`normal`,type:0,prefix:!1,parse:function(e,A){return GA(A)?A.number:L(A)&&A.value===`bold`?700:400}},Fi={name:`font-variant`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){return A.filter(L).map(function(t){return t.value})}},hi={name:`font-style`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,A){switch(A){case`oblique`:return`oblique`;case`italic`:return`italic`;default:return`normal`}}},G=function(e,A){return(e&A)!==0},di={name:`content`,initialValue:`none`,type:1,prefix:!1,parse:function(e,A){if(A.length===0)return[];var t=A[0];return t.type===20&&t.value===`none`?[]:A}},Ei={name:`counter-increment`,initialValue:`none`,prefix:!0,type:1,parse:function(e,A){if(A.length===0)return null;var t=A[0];if(t.type===20&&t.value===`none`)return null;for(var r=[],B=A.filter(Rt),n=0;n1?1:0],this.overflowWrap=U(A,Za,t.overflowWrap),this.paddingTop=U(A,qa,t.paddingTop),this.paddingRight=U(A,ja,t.paddingRight),this.paddingBottom=U(A,za,t.paddingBottom),this.paddingLeft=U(A,$a,t.paddingLeft),this.paintOrder=U(A,yi,t.paintOrder),this.position=U(A,ei,t.position),this.textAlign=U(A,Ai,t.textAlign),this.textDecorationColor=U(A,Ci,(r=t.textDecorationColor)!==null&&r!==void 0?r:t.color),this.textDecorationLine=U(A,ui,(B=t.textDecorationLine)!==null&&B!==void 0?B:t.textDecoration),this.textShadow=U(A,ri,t.textShadow),this.textTransform=U(A,ti,t.textTransform),this.transform=U(A,Bi,t.transform),this.transformOrigin=U(A,oi,t.transformOrigin),this.visibility=U(A,Qi,t.visibility),this.webkitTextStrokeColor=U(A,Ki,t.webkitTextStrokeColor),this.webkitTextStrokeWidth=U(A,mi,t.webkitTextStrokeWidth),this.wordBreak=U(A,gi,t.wordBreak),this.zIndex=U(A,wi,t.zIndex)}return e.prototype.isVisible=function(){return this.display>0&&this.opacity>0&&this.visibility===0},e.prototype.isTransparent=function(){return FA(this.backgroundColor)},e.prototype.isTransformed=function(){return this.transform!==null},e.prototype.isPositioned=function(){return this.position!==0},e.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},e.prototype.isFloating=function(){return this.float!==0},e.prototype.isInlineLevel=function(){return G(this.display,4)||G(this.display,33554432)||G(this.display,268435456)||G(this.display,536870912)||G(this.display,67108864)||G(this.display,134217728)},e})(),Di=(function(){function e(A,t){this.content=U(A,di,t.content),this.quotes=U(A,Ii,t.quotes)}return e})(),gB=(function(){function e(A,t){this.counterIncrement=U(A,Ei,t.counterIncrement),this.counterReset=U(A,Hi,t.counterReset)}return e})(),U=function(e,A,t){var r=new Mt,B=t!==null&&typeof t<`u`?t.toString():A.initialValue;r.write(B);var n=new Gt(r.read());switch(A.type){case 2:var s=n.parseComponentValue();return A.parse(e,L(s)?s.value:A.initialValue);case 0:return A.parse(e,n.parseComponentValue());case 1:return A.parse(e,n.parseComponentValues());case 4:return n.parseComponentValue();case 3:switch(A.format){case`angle`:return Se.parse(e,n.parseComponentValue());case`color`:return UA.parse(e,n.parseComponentValue());case`image`:return Dr.parse(e,n.parseComponentValue());case`length`:var i=n.parseComponentValue();return lA(i)?i:V;case`length-percentage`:var a=n.parseComponentValue();return O(a)?a:V;case`time`:return oB.parse(e,n.parseComponentValue())}break}},bi=`data-html2canvas-debug`,xi=function(e){switch(e.getAttribute(bi)){case`all`:return 1;case`clone`:return 2;case`parse`:return 3;case`render`:return 4;default:return 0}},Tr=function(e,A){var t=xi(e);return t===1||A===t},sA=(function(){function e(A,t){if(this.context=A,this.textNodes=[],this.elements=[],this.flags=0,Tr(t,3))debugger;this.styles=new Li(A,window.getComputedStyle(t,null)),Wr(t)&&(this.styles.animationDuration.some(function(r){return r>0})&&(t.style.animationDuration=`0s`),this.styles.transform!==null&&(t.style.transform=`none`)),this.bounds=ue(this.context,t),Tr(t,4)&&(this.flags|=16)}return e})(),Ti=`AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=`,wB=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,oe=typeof Uint8Array>`u`?[]:new Uint8Array(256),ke=0;ke>4,Q[B++]=(s&15)<<4|i>>2,Q[B++]=(i&3)<<6|a&63;return o},Oi=function(e){for(var A=e.length,t=[],r=0;r>mA,Mr=(1<>mA)+32,Pi=65536>>Sr,Yi=(1<=0){if(A<55296||A>56319&&A<=65535)return t=this.index[A>>mA],t=(t<>mA)],t=(t<>Sr),t=this.index[t],t+=A>>mA&Yi,t=this.index[t],t=(t<`u`?[]:new Uint8Array(256),Ye=0;Ye=55296&&B<=56319&&t>10)+55296,s%1024+56320)),(B+1===t||r.length>16384)&&(n+=String.fromCharCode.apply(String,r),r.length=0)}return n},ro=Zi(Ti),AA=`×`,_r=`÷`,to=function(e){return ro.get(e)},Bo=function(e,A,t){var r=t-2,B=A[r],n=A[t-1],s=A[t];if(n===Gr&&s===Rr)return AA;if(n===Gr||n===Rr||n===lB||s===Gr||s===Rr||s===lB)return _r;if(n===UB&&[UB,Vr,FB,hB].indexOf(s)!==-1||(n===FB||n===Vr)&&(s===Vr||s===Nr)||(n===hB||n===Nr)&&s===Nr||s===dB||s===fB||s===$i||n===zi)return AA;if(n===dB&&s===EB){for(;B===fB;)B=A[--r];if(B===EB)return AA}if(n===Xr&&s===Xr){for(var i=0;B===Xr;)i++,B=A[--r];if(i%2===0)return AA}return _r},no=function(e){var A=Ao(e),t=A.length,r=0,B=0,n=A.map(to);return{next:function(){if(r>=t)return{done:!0,value:null};for(var s=AA;rs.x||Q.y>s.y;return s=Q,o===0?!0:g});return e.body.removeChild(A),i},oo=function(){return typeof new Image().crossOrigin<`u`},Qo=function(){return typeof new XMLHttpRequest().responseType==`string`},go=function(e){var A=new Image,t=e.createElement(`canvas`),r=t.getContext(`2d`);if(!r)return!1;A.src=`data:image/svg+xml,`;try{r.drawImage(A,0,0),t.toDataURL()}catch{return!1}return!0},HB=function(e){return e[0]===0&&e[1]===255&&e[2]===0&&e[3]===255},wo=function(e){var A=e.createElement(`canvas`),t=100;A.width=t,A.height=t;var r=A.getContext(`2d`);if(!r)return Promise.reject(!1);r.fillStyle=`rgb(0, 255, 0)`,r.fillRect(0,0,t,t);var B=new Image,n=A.toDataURL();B.src=n;var s=Jr(t,t,0,0,B);return r.fillStyle=`red`,r.fillRect(0,0,t,t),pB(s).then(function(i){r.drawImage(i,0,0);var a=r.getImageData(0,0,t,t).data;r.fillStyle=`red`,r.fillRect(0,0,t,t);var o=e.createElement(`div`);return o.style.backgroundImage=`url(`+n+`)`,o.style.height=t+`px`,HB(a)?pB(Jr(t,t,0,0,o)):Promise.reject(!1)}).then(function(i){return r.drawImage(i,0,0),HB(r.getImageData(0,0,t,t).data)}).catch(function(){return!1})},Jr=function(e,A,t,r,B){var n=`http://www.w3.org/2000/svg`,s=document.createElementNS(n,`svg`),i=document.createElementNS(n,`foreignObject`);return s.setAttributeNS(null,`width`,e.toString()),s.setAttributeNS(null,`height`,A.toString()),i.setAttributeNS(null,`width`,`100%`),i.setAttributeNS(null,`height`,`100%`),i.setAttributeNS(null,`x`,t.toString()),i.setAttributeNS(null,`y`,r.toString()),i.setAttributeNS(null,`externalResourcesRequired`,`true`),s.appendChild(i),i.appendChild(B),s},pB=function(e){return new Promise(function(A,t){var r=new Image;r.onload=function(){return A(r)},r.onerror=t,r.src=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(new XMLSerializer().serializeToString(e))})},N={get SUPPORT_RANGE_BOUNDS(){var e=ao(document);return Object.defineProperty(N,"SUPPORT_RANGE_BOUNDS",{value:e}),e},get SUPPORT_WORD_BREAKING(){var e=N.SUPPORT_RANGE_BOUNDS&&io(document);return Object.defineProperty(N,"SUPPORT_WORD_BREAKING",{value:e}),e},get SUPPORT_SVG_DRAWING(){var e=go(document);return Object.defineProperty(N,"SUPPORT_SVG_DRAWING",{value:e}),e},get SUPPORT_FOREIGNOBJECT_DRAWING(){var e=typeof Array.from==`function`&&typeof window.fetch==`function`?wo(document):Promise.resolve(!1);return Object.defineProperty(N,"SUPPORT_FOREIGNOBJECT_DRAWING",{value:e}),e},get SUPPORT_CORS_IMAGES(){var e=oo();return Object.defineProperty(N,"SUPPORT_CORS_IMAGES",{value:e}),e},get SUPPORT_RESPONSE_TYPE(){var e=Qo();return Object.defineProperty(N,"SUPPORT_RESPONSE_TYPE",{value:e}),e},get SUPPORT_CORS_XHR(){var e=`withCredentials`in new XMLHttpRequest;return Object.defineProperty(N,"SUPPORT_CORS_XHR",{value:e}),e},get SUPPORT_NATIVE_TEXT_SEGMENTATION(){var e=!!(typeof Intl<`u`&&Intl.Segmenter);return Object.defineProperty(N,"SUPPORT_NATIVE_TEXT_SEGMENTATION",{value:e}),e}},Qe=(function(){function e(A,t){this.text=A,this.bounds=t}return e})(),co=function(e,A,t,r){var B=lo(A,t),n=[],s=0;return B.forEach(function(i){if(t.textDecorationLine.length||i.trim().length>0)if(N.SUPPORT_RANGE_BOUNDS){var a=IB(r,s,i.length).getClientRects();if(a.length>1){var o=Pr(i),Q=0;o.forEach(function(w){n.push(new Qe(w,iA.fromDOMRectList(e,IB(r,Q+s,w.length).getClientRects()))),Q+=w.length})}else n.push(new Qe(i,iA.fromDOMRectList(e,a)))}else{var g=r.splitText(i.length);n.push(new Qe(i,Co(e,r))),r=g}else N.SUPPORT_RANGE_BOUNDS||(r=r.splitText(i.length));s+=i.length}),n},Co=function(e,A){var t=A.ownerDocument;if(t){var r=t.createElement(`html2canvaswrapper`);r.appendChild(A.cloneNode(!0));var B=A.parentNode;if(B){B.replaceChild(r,A);var n=ue(e,r);return r.firstChild&&B.replaceChild(r.firstChild,r),n}}return iA.EMPTY},IB=function(e,A,t){var r=e.ownerDocument;if(!r)throw new Error(`Node has no owner document`);var B=r.createRange();return B.setStart(e,A),B.setEnd(e,A+t),B},Pr=function(e){if(N.SUPPORT_NATIVE_TEXT_SEGMENTATION){var A=new Intl.Segmenter(void 0,{granularity:`grapheme`});return Array.from(A.segment(e)).map(function(t){return t.segment})}return so(e)},uo=function(e,A){if(N.SUPPORT_NATIVE_TEXT_SEGMENTATION){var t=new Intl.Segmenter(void 0,{granularity:`word`});return Array.from(t.segment(e)).map(function(r){return r.segment})}return Uo(e,A)},lo=function(e,A){return A.letterSpacing!==0?Pr(e):uo(e,A)},fo=[32,160,4961,65792,65793,4153,4241],Uo=function(e,A){for(var t=Pn(e,{lineBreak:A.lineBreak,wordBreak:A.overflowWrap===`break-word`?`break-word`:A.wordBreak}),r=[],B,n=function(){if(B.value){var i=le(B.value.slice()),a=``;i.forEach(function(o){fo.indexOf(o)===-1?a+=T(o):(a.length&&r.push(a),r.push(T(o)),a=``)}),a.length&&r.push(a)}};!(B=t.next()).done;)n();return r},Fo=(function(){function e(A,t,r){this.text=ho(t.data,r.textTransform),this.textBounds=co(A,this.text,r,t)}return e})(),ho=function(e,A){switch(A){case 1:return e.toLowerCase();case 3:return e.replace(Eo,Ho);case 2:return e.toUpperCase();default:return e}},Eo=/(^|\s|:|-|\(|\))([a-z])/g,Ho=function(e,A,t){return e.length>0?A+t.toUpperCase():e},vB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.src=r.currentSrc||r.src,B.intrinsicWidth=r.naturalWidth,B.intrinsicHeight=r.naturalHeight,B.context.cache.addImage(B.src),B}return A})(sA),yB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.canvas=r,B.intrinsicWidth=r.width,B.intrinsicHeight=r.height,B}return A})(sA),KB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this,n=new XMLSerializer,s=ue(t,r);return r.setAttribute(`width`,s.width+`px`),r.setAttribute(`height`,s.height+`px`),B.svg=`data:image/svg+xml,`+encodeURIComponent(n.serializeToString(r)),B.intrinsicWidth=r.width.baseVal.value,B.intrinsicHeight=r.height.baseVal.value,B.context.cache.addImage(B.svg),B}return A})(sA),mB=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.value=r.value,B}return A})(sA),kr=(function(e){P(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.start=r.start,B.reversed=typeof r.reversed==`boolean`&&r.reversed===!0,B}return A})(sA),po=[{type:15,flags:0,unit:`px`,number:3}],Io=[{type:16,flags:0,number:50}],vo=function(e){return e.width>e.height?new iA(e.left+(e.width-e.height)/2,e.top,e.height,e.height):e.width0)t.textNodes.push(new Fo(e,B,t.styles));else if(VA(B))if(XB(B)&&B.assignedNodes)B.assignedNodes().forEach(function(i){return qe(e,i,t,r)});else{var s=TB(e,B);s.styles.isVisible()&&(Lo(B,s,r)?s.flags|=4:Do(s.styles)&&(s.flags|=2),mo.indexOf(B.tagName)!==-1&&(s.flags|=8),t.elements.push(s),B.slot,B.shadowRoot?qe(e,B.shadowRoot,s,r):!ze(B)&&!MB(B)&&!$e(B)&&qe(e,B,s,r))}},TB=function(e,A){return qr(A)?new vB(e,A):GB(A)?new yB(e,A):MB(A)?new KB(e,A):bo(A)?new mB(e,A):xo(A)?new kr(e,A):To(A)?new Yr(e,A):$e(A)?new DB(e,A):ze(A)?new bB(e,A):VB(A)?new xB(e,A):new sA(e,A)},SB=function(e,A){var t=TB(e,A);return t.flags|=4,qe(e,A,t,t),t},Lo=function(e,A,t){return A.styles.isPositionedWithZIndex()||A.styles.opacity<1||A.styles.isTransformed()||Zr(e)&&t.styles.isTransparent()},Do=function(e){return e.isPositioned()||e.isFloating()},OB=function(e){return e.nodeType===Node.TEXT_NODE},VA=function(e){return e.nodeType===Node.ELEMENT_NODE},Wr=function(e){return VA(e)&&typeof e.style<`u`&&!je(e)},je=function(e){return typeof e.className==`object`},bo=function(e){return e.tagName===`LI`},xo=function(e){return e.tagName===`OL`},To=function(e){return e.tagName===`INPUT`},So=function(e){return e.tagName===`HTML`},MB=function(e){return e.tagName===`svg`},Zr=function(e){return e.tagName===`BODY`},GB=function(e){return e.tagName===`CANVAS`},RB=function(e){return e.tagName===`VIDEO`},qr=function(e){return e.tagName===`IMG`},VB=function(e){return e.tagName===`IFRAME`},NB=function(e){return e.tagName===`STYLE`},Oo=function(e){return e.tagName===`SCRIPT`},ze=function(e){return e.tagName===`TEXTAREA`},$e=function(e){return e.tagName===`SELECT`},XB=function(e){return e.tagName===`SLOT`},_B=function(e){return e.tagName.indexOf(`-`)>0},Mo=(function(){function e(){this.counters={}}return e.prototype.getCounterValue=function(A){var t=this.counters[A];return t&&t.length?t[t.length-1]:1},e.prototype.getCounterValues=function(A){return this.counters[A]||[]},e.prototype.pop=function(A){var t=this;A.forEach(function(r){return t.counters[r].pop()})},e.prototype.parse=function(A){var t=this,r=A.counterIncrement,B=A.counterReset,n=!0;r!==null&&r.forEach(function(i){var a=t.counters[i.counter];a&&i.increment!==0&&(n=!1,a.length||a.push(1),a[Math.max(0,a.length-1)]+=i.increment)});var s=[];return n&&B.forEach(function(i){var a=t.counters[i.counter];s.push(i.counter),a||(a=t.counters[i.counter]=[]),a.push(i.reset)}),s},e})(),JB={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:[`M`,`CM`,`D`,`CD`,`C`,`XC`,`L`,`XL`,`X`,`IX`,`V`,`IV`,`I`]},PB={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[`Ք`,`Փ`,`Ւ`,`Ց`,`Ր`,`Տ`,`Վ`,`Ս`,`Ռ`,`Ջ`,`Պ`,`Չ`,`Ո`,`Շ`,`Ն`,`Յ`,`Մ`,`Ճ`,`Ղ`,`Ձ`,`Հ`,`Կ`,`Ծ`,`Խ`,`Լ`,`Ի`,`Ժ`,`Թ`,`Ը`,`Է`,`Զ`,`Ե`,`Դ`,`Գ`,`Բ`,`Ա`]},Go={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:[`י׳`,`ט׳`,`ח׳`,`ז׳`,`ו׳`,`ה׳`,`ד׳`,`ג׳`,`ב׳`,`א׳`,`ת`,`ש`,`ר`,`ק`,`צ`,`פ`,`ע`,`ס`,`נ`,`מ`,`ל`,`כ`,`יט`,`יח`,`יז`,`טז`,`טו`,`י`,`ט`,`ח`,`ז`,`ו`,`ה`,`ד`,`ג`,`ב`,`א`]},Ro={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[`ჵ`,`ჰ`,`ჯ`,`ჴ`,`ხ`,`ჭ`,`წ`,`ძ`,`ც`,`ჩ`,`შ`,`ყ`,`ღ`,`ქ`,`ფ`,`ჳ`,`ტ`,`ს`,`რ`,`ჟ`,`პ`,`ო`,`ჲ`,`ნ`,`მ`,`ლ`,`კ`,`ი`,`თ`,`ჱ`,`ზ`,`ვ`,`ე`,`დ`,`გ`,`ბ`,`ა`]},NA=function(e,A,t,r,B,n){return et?we(e,B,n.length>0):r.integers.reduce(function(s,i,a){for(;e>=i;)e-=i,s+=r.values[a];return s},``)+n},kB=function(e,A,t,r){var B=``;do t||e--,B=r(e)+B,e/=A;while(e*A>=A);return B},S=function(e,A,t,r,B){var n=t-A+1;return(e<0?`-`:``)+(kB(Math.abs(e),n,r,function(s){return T(Math.floor(s%n)+A)})+B)},LA=function(e,A,t){t===void 0&&(t=`. `);var r=A.length;return kB(Math.abs(e),r,!1,function(B){return A[Math.floor(B%r)]})+t},XA=1,dA=2,EA=4,ge=8,gA=function(e,A,t,r,B,n){if(e<-9999||e>9999)return we(e,4,B.length>0);var s=Math.abs(e),i=B;if(s===0)return A[0]+i;for(var a=0;s>0&&a<=4;a++){var o=s%10;o===0&&G(n,XA)&&i!==``?i=A[o]+i:o>1||o===1&&a===0||o===1&&a===1&&G(n,dA)||o===1&&a===1&&G(n,EA)&&e>100||o===1&&a>1&&G(n,ge)?i=A[o]+(a>0?t[a-1]:``)+i:o===1&&a>0&&(i=t[a-1]+i),s=Math.floor(s/10)}return(e<0?r:``)+i},YB=`十百千萬`,WB=`拾佰仟萬`,ZB=`マイナス`,jr=`마이너스`,we=function(e,A,t){var r=t?`. `:``,B=t?`、`:``,n=t?`, `:``,s=t?` `:``;switch(A){case 0:return`•`+s;case 1:return`◦`+s;case 2:return`◾`+s;case 5:var i=S(e,48,57,!0,r);return i.length<4?`0`+i:i;case 4:return LA(e,`〇一二三四五六七八九`,B);case 6:return NA(e,1,3999,JB,3,r).toLowerCase();case 7:return NA(e,1,3999,JB,3,r);case 8:return S(e,945,969,!1,r);case 9:return S(e,97,122,!1,r);case 10:return S(e,65,90,!1,r);case 11:return S(e,1632,1641,!0,r);case 12:case 49:return NA(e,1,9999,PB,3,r);case 35:return NA(e,1,9999,PB,3,r).toLowerCase();case 13:return S(e,2534,2543,!0,r);case 14:case 30:return S(e,6112,6121,!0,r);case 15:return LA(e,`子丑寅卯辰巳午未申酉戌亥`,B);case 16:return LA(e,`甲乙丙丁戊己庚辛壬癸`,B);case 17:case 48:return gA(e,`零一二三四五六七八九`,YB,`負`,B,dA|EA|ge);case 47:return gA(e,`零壹貳參肆伍陸柒捌玖`,WB,`負`,B,XA|dA|EA|ge);case 42:return gA(e,`零一二三四五六七八九`,YB,`负`,B,dA|EA|ge);case 41:return gA(e,`零壹贰叁肆伍陆柒捌玖`,WB,`负`,B,XA|dA|EA|ge);case 26:return gA(e,`〇一二三四五六七八九`,`十百千万`,ZB,B,0);case 25:return gA(e,`零壱弐参四伍六七八九`,`拾百千万`,ZB,B,XA|dA|EA);case 31:return gA(e,`영일이삼사오육칠팔구`,`십백천만`,jr,n,XA|dA|EA);case 33:return gA(e,`零一二三四五六七八九`,`十百千萬`,jr,n,0);case 32:return gA(e,`零壹貳參四五六七八九`,`拾百千`,jr,n,XA|dA|EA);case 18:return S(e,2406,2415,!0,r);case 20:return NA(e,1,19999,Ro,3,r);case 21:return S(e,2790,2799,!0,r);case 22:return S(e,2662,2671,!0,r);case 22:return NA(e,1,10999,Go,3,r);case 23:return LA(e,`あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん`);case 24:return LA(e,`いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす`);case 27:return S(e,3302,3311,!0,r);case 28:return LA(e,`アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン`,B);case 29:return LA(e,`イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス`,B);case 34:return S(e,3792,3801,!0,r);case 37:return S(e,6160,6169,!0,r);case 38:return S(e,4160,4169,!0,r);case 39:return S(e,2918,2927,!0,r);case 40:return S(e,1776,1785,!0,r);case 43:return S(e,3046,3055,!0,r);case 44:return S(e,3174,3183,!0,r);case 45:return S(e,3664,3673,!0,r);case 46:return S(e,3872,3881,!0,r);default:return S(e,48,57,!0,r)}},qB=`data-html2canvas-ignore`,jB=(function(){function e(A,t,r){if(this.context=A,this.options=r,this.scrolledElements=[],this.referenceElement=t,this.counters=new Mo,this.quoteDepth=0,!t.ownerDocument)throw new Error(`Cloned element does not have an owner document`);this.documentElement=this.cloneNode(t.ownerDocument.documentElement,!1)}return e.prototype.toIFrame=function(A,t){var r=this,B=Vo(A,t);if(!B.contentWindow)return Promise.reject(`Unable to find iframe window`);var n=A.defaultView.pageXOffset,s=A.defaultView.pageYOffset,i=B.contentWindow,a=i.document,o=_o(B).then(function(){return k(r,void 0,void 0,function(){var Q,g;return _(this,function(w){switch(w.label){case 0:return this.scrolledElements.forEach(Yo),i&&(i.scrollTo(t.left,t.top),/(iPad|iPhone|iPod)/g.test(navigator.userAgent)&&(i.scrollY!==t.top||i.scrollX!==t.left)&&(this.context.logger.warn(`Unable to restore scroll position for cloned document`),this.context.windowBounds=this.context.windowBounds.add(i.scrollX-t.left,i.scrollY-t.top,0,0))),Q=this.options.onclone,g=this.clonedReferenceElement,typeof g>`u`?[2,Promise.reject(`Error finding the `+this.referenceElement.nodeName+` in the cloned document`)]:a.fonts&&a.fonts.ready?[4,a.fonts.ready]:[3,2];case 1:w.sent(),w.label=2;case 2:return/(AppleWebKit)/g.test(navigator.userAgent)?[4,Xo(a)]:[3,4];case 3:w.sent(),w.label=4;case 4:return typeof Q==`function`?[2,Promise.resolve().then(function(){return Q(a,g)}).then(function(){return B})]:[2,B]}})})});return a.open(),a.write(Po(document.doctype)+``),ko(this.referenceElement.ownerDocument,n,s),a.replaceChild(a.adoptNode(this.documentElement),a.documentElement),a.close(),o},e.prototype.createElementClone=function(A){if(Tr(A,2))debugger;if(GB(A))return this.createCanvasClone(A);if(RB(A))return this.createVideoClone(A);if(NB(A))return this.createStyleClone(A);var t=A.cloneNode(!1);return qr(t)&&(qr(A)&&A.currentSrc&&A.currentSrc!==A.src&&(t.src=A.currentSrc,t.srcset=``),t.loading===`lazy`&&(t.loading=`eager`)),_B(t)?this.createCustomElementClone(t):t},e.prototype.createCustomElementClone=function(A){var t=document.createElement(`html2canvascustomelement`);return zr(A.style,t),t},e.prototype.createStyleClone=function(A){try{var t=A.sheet;if(t&&t.cssRules){var r=[].slice.call(t.cssRules,0).reduce(function(n,s){return s&&typeof s.cssText==`string`?n+s.cssText:n},``),B=A.cloneNode(!1);return B.textContent=r,B}}catch(n){if(this.context.logger.error(`Unable to access cssRules property`,n),n.name!==`SecurityError`)throw n}return A.cloneNode(!1)},e.prototype.createCanvasClone=function(A){var t;if(this.options.inlineImages&&A.ownerDocument){var r=A.ownerDocument.createElement(`img`);try{return r.src=A.toDataURL(),r}catch{this.context.logger.info(`Unable to inline canvas contents, canvas is tainted`,A)}}var B=A.cloneNode(!1);try{B.width=A.width,B.height=A.height;var n=A.getContext(`2d`),s=B.getContext(`2d`);if(s)if(!this.options.allowTaint&&n)s.putImageData(n.getImageData(0,0,A.width,A.height),0,0);else{var i=(t=A.getContext(`webgl2`))!==null&&t!==void 0?t:A.getContext(`webgl`);if(i)i.getContextAttributes()?.preserveDrawingBuffer===!1&&this.context.logger.warn(`Unable to clone WebGL context as it has preserveDrawingBuffer=false`,A);s.drawImage(A,0,0)}return B}catch{this.context.logger.info(`Unable to clone canvas as it is tainted`,A)}return B},e.prototype.createVideoClone=function(A){var t=A.ownerDocument.createElement(`canvas`);t.width=A.offsetWidth,t.height=A.offsetHeight;var r=t.getContext(`2d`);try{return r&&(r.drawImage(A,0,0,t.width,t.height),this.options.allowTaint||r.getImageData(0,0,t.width,t.height)),t}catch{this.context.logger.info(`Unable to clone video as it is tainted`,A)}var B=A.ownerDocument.createElement(`canvas`);return B.width=A.offsetWidth,B.height=A.offsetHeight,B},e.prototype.appendChildNode=function(A,t,r){(!VA(t)||!Oo(t)&&!t.hasAttribute(qB)&&(typeof this.options.ignoreElements!=`function`||!this.options.ignoreElements(t)))&&(!this.options.copyStyles||!VA(t)||!NB(t))&&A.appendChild(this.cloneNode(t,r))},e.prototype.cloneChildNodes=function(A,t,r){for(var B=this,n=A.shadowRoot?A.shadowRoot.firstChild:A.firstChild;n;n=n.nextSibling)if(VA(n)&&XB(n)&&typeof n.assignedNodes==`function`){var s=n.assignedNodes();s.length&&s.forEach(function(i){return B.appendChildNode(t,i,r)})}else this.appendChildNode(t,n,r)},e.prototype.cloneNode=function(A,t){if(OB(A))return document.createTextNode(A.data);if(!A.ownerDocument)return A.cloneNode(!1);var r=A.ownerDocument.defaultView;if(r&&VA(A)&&(Wr(A)||je(A))){var B=this.createElementClone(A);B.style.transitionProperty=`none`;var n=r.getComputedStyle(A),s=r.getComputedStyle(A,`:before`),i=r.getComputedStyle(A,`:after`);this.referenceElement===A&&Wr(B)&&(this.clonedReferenceElement=B),Zr(B)&&qo(B);var a=this.counters.parse(new gB(this.context,n)),o=this.resolvePseudoContent(A,B,s,Ar.BEFORE);_B(A)&&(t=!0),RB(A)||this.cloneChildNodes(A,B,t),o&&B.insertBefore(o,B.firstChild);var Q=this.resolvePseudoContent(A,B,i,Ar.AFTER);return Q&&B.appendChild(Q),this.counters.pop(a),(n&&(this.options.copyStyles||je(A))&&!VB(A)||t)&&zr(n,B),(A.scrollTop!==0||A.scrollLeft!==0)&&this.scrolledElements.push([B,A.scrollLeft,A.scrollTop]),(ze(A)||$e(A))&&(ze(B)||$e(B))&&(B.value=A.value),B}return A.cloneNode(!1)},e.prototype.resolvePseudoContent=function(A,t,r,B){var n=this;if(r){var s=r.content,i=t.ownerDocument;if(!(!i||!s||s===`none`||s===`-moz-alt-content`||r.display===`none`)){this.counters.parse(new gB(this.context,r));var a=new Di(this.context,r),o=i.createElement(`html2canvaspseudoelement`);zr(r,o),a.content.forEach(function(g){if(g.type===0)o.appendChild(i.createTextNode(g.value));else if(g.type===22){var w=i.createElement(`img`);w.src=g.value,w.style.opacity=`1`,o.appendChild(w)}else if(g.type===18){if(g.name===`attr`){var f=g.values.filter(L);f.length&&o.appendChild(i.createTextNode(A.getAttribute(f[0].value)||``))}else if(g.name===`counter`){var c=g.values.filter(RA),C=c[0],H=c[1];if(C&&L(C)){var h=n.counters.getCounterValue(C.value),F=H&&L(H)?xr.parse(n.context,H.value):3;o.appendChild(i.createTextNode(we(h,F,!1)))}}else if(g.name===`counters`){var K=g.values.filter(RA),C=K[0],p=K[1],H=K[2];if(C&&L(C)){var d=n.counters.getCounterValues(C.value),l=H&&L(H)?xr.parse(n.context,H.value):3,v=p&&p.type===0?p.value:``,y=d.map(function(W){return we(W,l,!1)}).join(v);o.appendChild(i.createTextNode(y))}}}else if(g.type===20)switch(g.value){case`open-quote`:o.appendChild(i.createTextNode(QB(a.quotes,n.quoteDepth++,!0)));break;case`close-quote`:o.appendChild(i.createTextNode(QB(a.quotes,--n.quoteDepth,!1)));break;default:o.appendChild(i.createTextNode(g.value))}}),o.className=$r+` `+At;var Q=B===Ar.BEFORE?` `+$r:` `+At;return je(t)?t.className.baseValue+=Q:t.className+=Q,o}}},e.destroy=function(A){return A.parentNode?(A.parentNode.removeChild(A),!0):!1},e})(),Ar=(function(e){return e[e.BEFORE=0]=`BEFORE`,e[e.AFTER=1]=`AFTER`,e})(Ar||{}),Vo=function(e,A){var t=e.createElement(`iframe`);return t.className=`html2canvas-container`,t.style.visibility=`hidden`,t.style.position=`fixed`,t.style.left=`-10000px`,t.style.top=`0px`,t.style.border=`0`,t.width=A.width.toString(),t.height=A.height.toString(),t.scrolling=`no`,t.setAttribute(qB,`true`),e.body.appendChild(t),t},No=function(e){return new Promise(function(A){if(e.complete){A();return}if(!e.src){A();return}e.onload=A,e.onerror=A})},Xo=function(e){return Promise.all([].slice.call(e.images,0).map(No))},_o=function(e){return new Promise(function(A,t){var r=e.contentWindow;if(!r)return t(`No window assigned for iframe`);var B=r.document;r.onload=e.onload=function(){r.onload=e.onload=null;var n=setInterval(function(){B.body.childNodes.length>0&&B.readyState===`complete`&&(clearInterval(n),A(e))},50)}})},Jo=[`all`,`d`,`content`],zr=function(e,A){for(var t=e.length-1;t>=0;t--){var r=e.item(t);Jo.indexOf(r)===-1&&A.style.setProperty(r,e.getPropertyValue(r))}return A},Po=function(e){var A=``;return e&&(A+=``),A},ko=function(e,A,t){e&&e.defaultView&&(A!==e.defaultView.pageXOffset||t!==e.defaultView.pageYOffset)&&e.defaultView.scrollTo(A,t)},Yo=function(e){var A=e[0],t=e[1],r=e[2];A.scrollLeft=t,A.scrollTop=r},Wo=`:before`,Zo=`:after`,$r=`___html2canvas___pseudoelement_before`,At=`___html2canvas___pseudoelement_after`,zB=`{ content: "" !important; display: none !important; }`,qo=function(e){jo(e,`.`+$r+Wo+zB+` diff --git a/docs/chunk-iest0pt_.js b/docs/chunk-D20stDwr.js similarity index 99% rename from docs/chunk-iest0pt_.js rename to docs/chunk-D20stDwr.js index 8aac1b5..46280f4 100644 --- a/docs/chunk-iest0pt_.js +++ b/docs/chunk-D20stDwr.js @@ -1,4 +1,4 @@ -import{a as sn,i as init_chunk_CHEWUVT5,o as __esmMin}from"./main-ZSOIWSXQ.js";function ye(t){"@babel/helpers - typeof";return ye=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(n){return typeof n}:function(n){return n&&typeof Symbol==`function`&&n.constructor===Symbol&&n!==Symbol.prototype?`symbol`:typeof n},ye(t)}function Yh(t){if(Array.isArray(t))return t}function Kh(t,n){var e=t==null?null:typeof Symbol<`u`&&t[Symbol.iterator]||t[`@@iterator`];if(e!=null){var i,a,o,f,l=[],c=!0,d=!1;try{if(o=(e=e.call(t)).next,n===0){if(Object(e)!==e)return;c=!1}else for(;!(c=(i=o.call(e)).done)&&(l.push(i.value),l.length!==n);c=!0);}catch(m){d=!0,a=m}finally{try{if(!c&&e.return!=null&&(f=e.return(),Object(f)!==f))return}finally{if(d)throw a}}return l}}function pl(t,n){(n==null||n>t.length)&&(n=t.length);for(var e=0,i=Array(n);et.length)&&(n=t.length);for(var e=0,i=Array(n);e=0;)t[n]=0}function wl(t,n,e,i,a){this.static_tree=t,this.extra_bits=n,this.extra_base=e,this.elems=i,this.max_length=a,this.has_stree=t&&t.length}function _l(t,n){this.dyn_tree=t,this.max_code=0,this.stat_desc=n}function vi(t,n,e,i,a){this.good_length=t,this.max_lazy=n,this.nice_length=e,this.max_chain=i,this.func=a}function Q1(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=cs,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.legacy_hash=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(G1*2),this.dyn_dtree=new Uint16Array((2*H1+1)*2),this.bl_tree=new Uint16Array((2*W1+1)*2),ir(this.dyn_ltree),ir(this.dyn_dtree),ir(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(V1+1),this.heap=new Uint16Array(2*Rl+1),ir(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*Rl+1),ir(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function y2(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=``,this.state=null,this.data_type=2,this.adler=0}function go(t){this.options=fs.assign({},I2,t||{});let n=this.options;n.raw&&n.windowBits>0?n.windowBits=-n.windowBits:n.gzip&&n.windowBits>0&&n.windowBits<16&&(n.windowBits+=16),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new lf,this.strm.avail_out=0;let e=io.deflateInit2(this.strm,n.level,n.method,n.windowBits,n.memLevel,n.strategy,n.legacyHash);if(e!==ls)throw new Error(Fr[e]);if(n.header&&io.deflateSetHeader(this.strm,n.header),n.dictionary){let i;if(typeof n.dictionary==`string`?i=fo.string2buf(n.dictionary):hf.call(n.dictionary)===`[object ArrayBuffer]`?i=new Uint8Array(n.dictionary):i=n.dictionary,e=io.deflateSetDictionary(this.strm,i),e!==ls)throw new Error(Fr[e]);this._dict_set=!0}}function Zl(t,n){let e=new go(n);if(e.push(t,!0),e.err)throw e.msg||Fr[e.err];return e.result}function C2(t,n){return n=n||{},n.raw=!0,Zl(t,n)}function F2(t,n){return n=n||{},n.gzip=!0,Zl(t,n)}function e0(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function v0(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=``,this.comment=``,this.hcrc=0,this.done=!1}function mo(t){this.options=fs.assign({},A0,t||{});let n=this.options;n.raw&&n.windowBits>=0&&n.windowBits<16&&(n.windowBits=-n.windowBits,n.windowBits===0&&(n.windowBits=-15)),n.windowBits>=0&&n.windowBits<16&&!(t&&t.windowBits)&&(n.windowBits+=32),n.windowBits>15&&n.windowBits<48&&!(n.windowBits&15)&&(n.windowBits|=15),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new lf,this.strm.avail_out=0;let e=wi.inflateInit2(this.strm,n.windowBits);if(e!==da)throw new Error(Fr[e]);if(this.header=new w0,wi.inflateGetHeader(this.strm,this.header),n.dictionary&&(typeof n.dictionary==`string`?n.dictionary=fo.string2buf(n.dictionary):yf.call(n.dictionary)===`[object ArrayBuffer]`&&(n.dictionary=new Uint8Array(n.dictionary)),n.raw&&(e=wi.inflateSetDictionary(this.strm,n.dictionary),e!==da)))throw new Error(Fr[e])}function $l(t,n){let e=new mo(n);if(e.push(t,!0),e.err)throw e.msg||Fr[e.err];return e.result}function N0(t,n){return n=n||{},n.raw=!0,$l(t,n)}function O0(t,n,e){let i=t;for(let a=0;a>>8;return i}function T0(t,n){return(O0(Af,t,n)^Af)>>>0}function Kl(t,n,e){let i=t.readUint32(),a=T0(new Uint8Array(t.buffer,t.byteOffset+t.offset-n-4,n),n);if(a!==i)throw new Error(`CRC mismatch for chunk ${e}. Expected ${i}, found ${a}`)}function ds(t,n,e){for(let i=0;i>1)&255}else{for(;o>1)&255;for(;o>1)&255}}function bs(t,n,e,i,a){let o=0;if(e.length===0){for(;o=e||_t>=i))for(let mt=0;mt>8&255}function Xl(t){let{data:n,width:e,height:i,channels:a,depth:o}=t,f=Math.ceil(o/8)*a,l=Math.ceil(o/8*a*e),c=new Uint8Array(i*l),d=H0,m=0,A,L;for(let p=0;p>8&255}function Jl(t){if(!kf(t.readBytes(vs.length)))throw new Error(`wrong PNG signature`)}function kf(t){if(t.length79)throw new Error(`keyword length must be between 1 and 79`)}function Y0(t){if(!$0.test(t))throw new Error(`invalid latin1 text`)}function If(t,n,e){let i=Ql(n);t[i]=K0(n,e-i.length-1)}function Ql(t){for(t.mark();t.readByte()!==V0;);let n=t.offset;t.reset();let e=Ef.decode(t.readBytes(n-t.offset-1));return t.skip(1),Z0(e),e}function K0(t,n){return Ef.decode(t.readBytes(n))}function X0(t){if(t!==1&&t!==2&&t!==4&&t!==8&&t!==16)throw new Error(`invalid bit depth: ${t}`);return t}function Cf(t,n){return new ys(t,n).decode()}function th(){Yt.console&&typeof Yt.console.log==`function`&&Yt.console.log.apply(Yt.console,arguments)}function eh(t,n,e){var i=new XMLHttpRequest;i.open(`GET`,t),i.responseType=`blob`,i.onload=function(){jr(i.response,n,e)},i.onerror=function(){ke.error(`could not download file`)},i.send()}function Ff(t){var n=new XMLHttpRequest;n.open(`HEAD`,t,!1);try{n.send()}catch{}return n.status>=200&&n.status<=299}function xs(t){try{t.dispatchEvent(new MouseEvent(`click`))}catch{var n=document.createEvent(`MouseEvents`);n.initMouseEvent(`click`,!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(n)}}function tu(t){var n;t=t||``,this.ok=!1,t.charAt(0)==`#`&&(t=t.substr(1,6)),t={aliceblue:`f0f8ff`,antiquewhite:`faebd7`,aqua:`00ffff`,aquamarine:`7fffd4`,azure:`f0ffff`,beige:`f5f5dc`,bisque:`ffe4c4`,black:`000000`,blanchedalmond:`ffebcd`,blue:`0000ff`,blueviolet:`8a2be2`,brown:`a52a2a`,burlywood:`deb887`,cadetblue:`5f9ea0`,chartreuse:`7fff00`,chocolate:`d2691e`,coral:`ff7f50`,cornflowerblue:`6495ed`,cornsilk:`fff8dc`,crimson:`dc143c`,cyan:`00ffff`,darkblue:`00008b`,darkcyan:`008b8b`,darkgoldenrod:`b8860b`,darkgray:`a9a9a9`,darkgreen:`006400`,darkkhaki:`bdb76b`,darkmagenta:`8b008b`,darkolivegreen:`556b2f`,darkorange:`ff8c00`,darkorchid:`9932cc`,darkred:`8b0000`,darksalmon:`e9967a`,darkseagreen:`8fbc8f`,darkslateblue:`483d8b`,darkslategray:`2f4f4f`,darkturquoise:`00ced1`,darkviolet:`9400d3`,deeppink:`ff1493`,deepskyblue:`00bfff`,dimgray:`696969`,dodgerblue:`1e90ff`,feldspar:`d19275`,firebrick:`b22222`,floralwhite:`fffaf0`,forestgreen:`228b22`,fuchsia:`ff00ff`,gainsboro:`dcdcdc`,ghostwhite:`f8f8ff`,gold:`ffd700`,goldenrod:`daa520`,gray:`808080`,green:`008000`,greenyellow:`adff2f`,honeydew:`f0fff0`,hotpink:`ff69b4`,indianred:`cd5c5c`,indigo:`4b0082`,ivory:`fffff0`,khaki:`f0e68c`,lavender:`e6e6fa`,lavenderblush:`fff0f5`,lawngreen:`7cfc00`,lemonchiffon:`fffacd`,lightblue:`add8e6`,lightcoral:`f08080`,lightcyan:`e0ffff`,lightgoldenrodyellow:`fafad2`,lightgrey:`d3d3d3`,lightgreen:`90ee90`,lightpink:`ffb6c1`,lightsalmon:`ffa07a`,lightseagreen:`20b2aa`,lightskyblue:`87cefa`,lightslateblue:`8470ff`,lightslategray:`778899`,lightsteelblue:`b0c4de`,lightyellow:`ffffe0`,lime:`00ff00`,limegreen:`32cd32`,linen:`faf0e6`,magenta:`ff00ff`,maroon:`800000`,mediumaquamarine:`66cdaa`,mediumblue:`0000cd`,mediumorchid:`ba55d3`,mediumpurple:`9370d8`,mediumseagreen:`3cb371`,mediumslateblue:`7b68ee`,mediumspringgreen:`00fa9a`,mediumturquoise:`48d1cc`,mediumvioletred:`c71585`,midnightblue:`191970`,mintcream:`f5fffa`,mistyrose:`ffe4e1`,moccasin:`ffe4b5`,navajowhite:`ffdead`,navy:`000080`,oldlace:`fdf5e6`,olive:`808000`,olivedrab:`6b8e23`,orange:`ffa500`,orangered:`ff4500`,orchid:`da70d6`,palegoldenrod:`eee8aa`,palegreen:`98fb98`,paleturquoise:`afeeee`,palevioletred:`d87093`,papayawhip:`ffefd5`,peachpuff:`ffdab9`,peru:`cd853f`,pink:`ffc0cb`,plum:`dda0dd`,powderblue:`b0e0e6`,purple:`800080`,red:`ff0000`,rosybrown:`bc8f8f`,royalblue:`4169e1`,saddlebrown:`8b4513`,salmon:`fa8072`,sandybrown:`f4a460`,seagreen:`2e8b57`,seashell:`fff5ee`,sienna:`a0522d`,silver:`c0c0c0`,skyblue:`87ceeb`,slateblue:`6a5acd`,slategray:`708090`,snow:`fffafa`,springgreen:`00ff7f`,steelblue:`4682b4`,tan:`d2b48c`,teal:`008080`,thistle:`d8bfd8`,tomato:`ff6347`,turquoise:`40e0d0`,violet:`ee82ee`,violetred:`d02090`,wheat:`f5deb3`,white:`ffffff`,whitesmoke:`f5f5f5`,yellow:`ffff00`,yellowgreen:`9acd32`}[t=(t=t.replace(/ /g,``)).toLowerCase()]||t;for(var e=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:[`rgb(123, 234, 45)`,`rgb(255,234,245)`],process:function(l){return[parseInt(l[1]),parseInt(l[2]),parseInt(l[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:[`#00ff00`,`336699`],process:function(l){return[parseInt(l[1],16),parseInt(l[2],16),parseInt(l[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:[`#fb0`,`f0f`],process:function(l){return[parseInt(l[1]+l[1],16),parseInt(l[2]+l[2],16),parseInt(l[3]+l[3],16)]}}],i=0;i255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return`rgb(`+this.r+`, `+this.g+`, `+this.b+`)`},this.toHex=function(){var l=this.r.toString(16),c=this.g.toString(16),d=this.b.toString(16);return l.length==1&&(l=`0`+l),c.length==1&&(c=`0`+c),d.length==1&&(d=`0`+d),`#`+l+c+d}}function nh(t,n){var e=t[0],i=t[1],a=t[2],o=t[3];e=vn(e,i,a,o,n[0],7,-680876936),o=vn(o,e,i,a,n[1],12,-389564586),a=vn(a,o,e,i,n[2],17,606105819),i=vn(i,a,o,e,n[3],22,-1044525330),e=vn(e,i,a,o,n[4],7,-176418897),o=vn(o,e,i,a,n[5],12,1200080426),a=vn(a,o,e,i,n[6],17,-1473231341),i=vn(i,a,o,e,n[7],22,-45705983),e=vn(e,i,a,o,n[8],7,1770035416),o=vn(o,e,i,a,n[9],12,-1958414417),a=vn(a,o,e,i,n[10],17,-42063),i=vn(i,a,o,e,n[11],22,-1990404162),e=vn(e,i,a,o,n[12],7,1804603682),o=vn(o,e,i,a,n[13],12,-40341101),a=vn(a,o,e,i,n[14],17,-1502002290),e=wn(e,i=vn(i,a,o,e,n[15],22,1236535329),a,o,n[1],5,-165796510),o=wn(o,e,i,a,n[6],9,-1069501632),a=wn(a,o,e,i,n[11],14,643717713),i=wn(i,a,o,e,n[0],20,-373897302),e=wn(e,i,a,o,n[5],5,-701558691),o=wn(o,e,i,a,n[10],9,38016083),a=wn(a,o,e,i,n[15],14,-660478335),i=wn(i,a,o,e,n[4],20,-405537848),e=wn(e,i,a,o,n[9],5,568446438),o=wn(o,e,i,a,n[14],9,-1019803690),a=wn(a,o,e,i,n[3],14,-187363961),i=wn(i,a,o,e,n[8],20,1163531501),e=wn(e,i,a,o,n[13],5,-1444681467),o=wn(o,e,i,a,n[2],9,-51403784),a=wn(a,o,e,i,n[7],14,1735328473),e=_n(e,i=wn(i,a,o,e,n[12],20,-1926607734),a,o,n[5],4,-378558),o=_n(o,e,i,a,n[8],11,-2022574463),a=_n(a,o,e,i,n[11],16,1839030562),i=_n(i,a,o,e,n[14],23,-35309556),e=_n(e,i,a,o,n[1],4,-1530992060),o=_n(o,e,i,a,n[4],11,1272893353),a=_n(a,o,e,i,n[7],16,-155497632),i=_n(i,a,o,e,n[10],23,-1094730640),e=_n(e,i,a,o,n[13],4,681279174),o=_n(o,e,i,a,n[0],11,-358537222),a=_n(a,o,e,i,n[3],16,-722521979),i=_n(i,a,o,e,n[6],23,76029189),e=_n(e,i,a,o,n[9],4,-640364487),o=_n(o,e,i,a,n[12],11,-421815835),a=_n(a,o,e,i,n[15],16,530742520),e=yn(e,i=_n(i,a,o,e,n[2],23,-995338651),a,o,n[0],6,-198630844),o=yn(o,e,i,a,n[7],10,1126891415),a=yn(a,o,e,i,n[14],15,-1416354905),i=yn(i,a,o,e,n[5],21,-57434055),e=yn(e,i,a,o,n[12],6,1700485571),o=yn(o,e,i,a,n[3],10,-1894986606),a=yn(a,o,e,i,n[10],15,-1051523),i=yn(i,a,o,e,n[1],21,-2054922799),e=yn(e,i,a,o,n[8],6,1873313359),o=yn(o,e,i,a,n[15],10,-30611744),a=yn(a,o,e,i,n[6],15,-1560198380),i=yn(i,a,o,e,n[13],21,1309151649),e=yn(e,i,a,o,n[4],6,-145523070),o=yn(o,e,i,a,n[11],10,-1120210379),a=yn(a,o,e,i,n[2],15,718787259),i=yn(i,a,o,e,n[9],21,-343485551),t[0]=lr(e,t[0]),t[1]=lr(i,t[1]),t[2]=lr(a,t[2]),t[3]=lr(o,t[3])}function Fs(t,n,e,i,a,o){return n=lr(lr(n,t),lr(i,o)),lr(n<>>32-a,e)}function vn(t,n,e,i,a,o,f){return Fs(n&e|~n&i,t,n,a,o,f)}function wn(t,n,e,i,a,o,f){return Fs(n&i|e&~i,t,n,a,o,f)}function _n(t,n,e,i,a,o,f){return Fs(n^e^i,t,n,a,o,f)}function yn(t,n,e,i,a,o,f){return Fs(e^(n|~i),t,n,a,o,f)}function eu(t){var n,e=t.length,i=[1732584193,-271733879,-1732584194,271733878];for(n=64;n<=t.length;n+=64)nh(i,J0(t.substring(n-64,n)));t=t.substring(n-64);var a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(n=0;n>2]|=t.charCodeAt(n)<<(n%4<<3);if(a[n>>2]|=128<<(n%4<<3),n>55)for(nh(i,a),n=0;n<16;n++)a[n]=0;return a[14]=8*e,nh(i,a),i}function J0(t){var n,e=[];for(n=0;n<64;n+=4)e[n>>2]=t.charCodeAt(n)+(t.charCodeAt(n+1)<<8)+(t.charCodeAt(n+2)<<16)+(t.charCodeAt(n+3)<<24);return e}function Q0(t){for(var n=``,e=0;e<4;e++)n+=Tf[t>>8*e+4&15]+Tf[t>>8*e&15];return n}function t5(t){return String.fromCharCode(255&t,(65280&t)>>8,(16711680&t)>>16,(4278190080&t)>>24)}function lh(t){return eu(t).map(t5).join(``)}function lr(t,n){if(e5){var e=(65535&t)+(65535&n);return(t>>16)+(n>>16)+(e>>16)<<16|65535&e}return t+n&4294967295}function hh(t,n){var e,i,a,o;if(t!==e){for(var f=(a=t,o=1+(256/t.length|0),new Array(o+1).join(a)),l=[],c=0;c<256;c++)l[c]=c;var d=0;for(c=0;c<256;c++){var m=l[c];d=(d+m+f.charCodeAt(c))%256,l[c]=l[d],l[d]=m}e=t,i=l}else l=i;var A=n.length,L=0,p=0,T=``;for(c=0;c€/\f©þdSiz`;var o=(n+this.padding).substr(0,32),f=(e+this.padding).substr(0,32);this.O=this.processOwnerPassword(o,f),this.P=-(1+(255^a)),this.encryptionKey=lh(o+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(i)).substr(0,5),this.U=hh(this.encryptionKey,this.padding)}function Aa(t){if(/[^\u0000-\u00ff]/.test(t))throw new Error(`Invalid PDF Name Object: `+t+`, Only accept ASCII characters.`);for(var n=``,e=t.length,i=0;i126?`#`+(`0`+a.toString(16)).slice(-2):t[i]}return n}function Bf(t){if(ye(t)!==`object`)throw new Error(`Invalid Context passed to initialize PubSub (jsPDF-module)`);var n={};this.subscribe=function(e,i,a){if(a=a||!1,typeof e!=`string`||typeof i!=`function`||typeof a!=`boolean`)throw new Error(`Invalid arguments passed to PubSub.subscribe (jsPDF-module)`);n.hasOwnProperty(e)||(n[e]={});var o=Math.random().toString(35);return n[e][o]=[i,!!a],o},this.unsubscribe=function(e){for(var i in n)if(n[i][e])return delete n[i][e],Object.keys(n[i]).length===0&&delete n[i],!0;return!1},this.publish=function(e){if(n.hasOwnProperty(e)){var i=Array.prototype.slice.call(arguments,1),a=[];for(var o in n[e]){var f=n[e][o];try{f[0].apply(t,i)}catch(l){Yt.console&&ke.error(`jsPDF PubSub Error`,l.message,l)}f[1]&&a.push(o)}a.length&&a.forEach(this.unsubscribe)}},this.getTopics=function(){return n}}function Is(t){if(!(this instanceof Is))return new Is(t);var n=`opacity,stroke-opacity`.split(`,`);for(var e in t)t.hasOwnProperty(e)&&n.indexOf(e)>=0&&(this[e]=t[e]);this.id=``,this.objectNumber=-1}function nu(t,n){this.gState=t,this.matrix=n,this.id=``,this.objectNumber=-1}function Mr(t,n,e,i,a){if(!(this instanceof Mr))return new Mr(t,n,e,i,a);this.type=t===`axial`?2:3,this.coords=n,this.colors=e,nu.call(this,i,a)}function Na(t,n,e,i,a){if(!(this instanceof Na))return new Na(t,n,e,i,a);this.boundingBox=t,this.xStep=n,this.yStep=e,this.stream=``,this.cloneIndex=0,nu.call(this,i,a)}function Mt(t){var n,e=typeof arguments[0]==`string`?arguments[0]:`p`,i=arguments[1],a=arguments[2],o=arguments[3],f=[],l=1,c=16,d=`S`,m=null;ye(t=t||{})===`object`&&(e=t.orientation,i=t.unit||i,a=t.format||a,o=t.compress||t.compressPdf||o,(m=t.encryption||null)!==null&&(m.userPassword=m.userPassword||``,m.ownerPassword=m.ownerPassword||``,m.userPermissions=m.userPermissions||[]),l=typeof t.userUnit==`number`?Math.abs(t.userUnit):1,t.precision!==void 0&&(n=t.precision),t.floatPrecision!==void 0&&(c=t.floatPrecision),d=t.defaultPathOperation||`S`),f=t.filters||(o===!0?[`FlateEncode`]:f),i=i||`mm`,e=(``+(e||`P`)).toLowerCase();var A=t.putOnlyUsedFonts||!1,L={},p={internal:{},__private__:{}};p.__private__.PubSub=Bf;var T=`1.3`,O=p.__private__.getPdfVersion=function(){return T};p.__private__.setPdfVersion=function(h){T=h};var B={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],"government-letter":[576,756],legal:[612,1008],"junior-legal":[576,360],ledger:[1224,792],tabloid:[792,1224],"credit-card":[153,243]};p.__private__.getPageFormats=function(){return B};var k=p.__private__.getPageFormat=function(h){return B[h]};a=a||`a4`;var Z=`compat`,$=`advanced`,D=Z;function lt(){this.saveGraphicsState(),P(new Vt(ne,0,0,-ne,0,mr()*ne).toString()+` cm`),this.setFontSize(this.getFontSize()/ne),d=`n`,D=$}function _t(){this.restoreGraphicsState(),d=`S`,D=Z}var mt=p.__private__.combineFontStyleAndFontWeight=function(h,b){if(h==`bold`&&b==`normal`||h==`bold`&&b==400||h==`normal`&&b==`italic`||h==`bold`&&b==`italic`)throw new Error(`Invalid Combination of fontweight and fontstyle`);return b&&(h=b==400||b===`normal`?h===`italic`?`italic`:`normal`:b!=700&&b!==`bold`||h!==`normal`?(b==700?`bold`:b)+``+h:`bold`),h};p.advancedAPI=function(h){var b=D===Z;return b&<.call(this),typeof h!=`function`||(h(this),b&&_t.call(this)),this},p.compatAPI=function(h){var b=D===$;return b&&_t.call(this),typeof h!=`function`||(h(this),b&<.call(this)),this},p.isAdvancedAPI=function(){return D===$};var tt,z=function(h){if(D!==$)throw new Error(h+` is only available in 'advanced' API mode. You need to call advancedAPI() first.`)},et=p.roundToPrecision=p.__private__.roundToPrecision=function(h,b){var E=n||b;if(isNaN(h)||isNaN(E))throw new Error(`Invalid argument passed to jsPDF.roundToPrecision`);return h.toFixed(E).replace(/0+$/,``)};tt=p.hpf=p.__private__.hpf=typeof c==`number`?function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.hpf`);return et(h,c)}:c===`smart`?function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.hpf`);return et(h,h>-1&&h<1?16:5)}:function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.hpf`);return et(h,16)};var N=p.f2=p.__private__.f2=function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.f2`);return et(h,2)},F=p.__private__.f3=function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.f3`);return et(h,3)},U=p.scale=p.__private__.scale=function(h){if(isNaN(h))throw new Error(`Invalid argument passed to jsPDF.scale`);return D===Z?h*ne:D===$?h:void 0},q=function(h){return U((function(b){return D===Z?mr()-b:D===$?b:void 0})(h))};p.__private__.setPrecision=p.setPrecision=function(h){typeof parseInt(h,10)==`number`&&(n=parseInt(h,10))};var it,ft=`00000000000000000000000000000000`,pt=p.__private__.getFileId=function(){return ft},nt=p.__private__.setFileId=function(h){return ft=h!==void 0&&/^[a-fA-F0-9]{32}$/.test(h)?h.toUpperCase():ft.split(``).map(function(){return`ABCDEF0123456789`.charAt(Math.floor(16*Math.random()))}).join(``),m!==null&&(ln=new xa(m.userPermissions,m.userPassword,m.ownerPassword,ft)),ft};p.setFileId=function(h){return nt(h),this},p.getFileId=function(){return pt()};var ut=p.__private__.convertDateToPDFDate=function(h){var b=h.getTimezoneOffset(),E=b<0?`+`:`-`,M=Math.floor(Math.abs(b/60)),V=Math.abs(b%60),ot=[E,j(M),`'`,j(V),`'`].join(``);return[`D:`,h.getFullYear(),j(h.getMonth()+1),j(h.getDate()),j(h.getHours()),j(h.getMinutes()),j(h.getSeconds()),ot].join(``)},At=p.__private__.convertPDFDateToDate=function(h){var b=parseInt(h.substr(2,4),10),E=parseInt(h.substr(6,2),10)-1,M=parseInt(h.substr(8,2),10),V=parseInt(h.substr(10,2),10),ot=parseInt(h.substr(12,2),10),gt=parseInt(h.substr(14,2),10);return new Date(b,E,M,V,ot,gt,0)},yt=p.__private__.setCreationDate=function(h){var b;if(h===void 0&&(h=new Date),h instanceof Date)b=ut(h);else{if(!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(h))throw new Error(`Invalid argument passed to jsPDF.setCreationDate`);b=h}return it=b},y=p.__private__.getCreationDate=function(h){var b=it;return h===`jsDate`&&(b=At(it)),b};p.setCreationDate=function(h){return yt(h),this},p.getCreationDate=function(h){return y(h)};var R,j=p.__private__.padd2=function(h){return(`0`+parseInt(h)).slice(-2)},G=p.__private__.padd2Hex=function(h){return(`00`+(h=h.toString())).substr(h.length)},Y=0,Q=[],rt=[],at=0,dt=[],xt=[],St=!1,kt=rt;p.__private__.setCustomOutputDestination=function(h){St=!0,kt=h};var zt=function(h){St||(kt=h)};p.__private__.resetCustomOutputDestination=function(){St=!1,kt=rt};var P=p.__private__.out=function(h){return h=h.toString(),at+=h.length+1,kt.push(h),kt},Lt=p.__private__.write=function(h){return P(arguments.length===1?h.toString():Array.prototype.join.call(arguments,` `))},ae=p.__private__.getArrayBuffer=function(h){for(var b=h.length,E=new ArrayBuffer(b),M=new Uint8Array(E);b--;)M[b]=h.charCodeAt(b);return E},Ht=[[`Helvetica`,`helvetica`,`normal`,`WinAnsiEncoding`],[`Helvetica-Bold`,`helvetica`,`bold`,`WinAnsiEncoding`],[`Helvetica-Oblique`,`helvetica`,`italic`,`WinAnsiEncoding`],[`Helvetica-BoldOblique`,`helvetica`,`bolditalic`,`WinAnsiEncoding`],[`Courier`,`courier`,`normal`,`WinAnsiEncoding`],[`Courier-Bold`,`courier`,`bold`,`WinAnsiEncoding`],[`Courier-Oblique`,`courier`,`italic`,`WinAnsiEncoding`],[`Courier-BoldOblique`,`courier`,`bolditalic`,`WinAnsiEncoding`],[`Times-Roman`,`times`,`normal`,`WinAnsiEncoding`],[`Times-Bold`,`times`,`bold`,`WinAnsiEncoding`],[`Times-Italic`,`times`,`italic`,`WinAnsiEncoding`],[`Times-BoldItalic`,`times`,`bolditalic`,`WinAnsiEncoding`],[`ZapfDingbats`,`zapfdingbats`,`normal`,null],[`Symbol`,`symbol`,`normal`,null]];p.__private__.getStandardFonts=function(){return Ht};var vt=t.fontSize||16;p.__private__.setFontSize=p.setFontSize=function(h){return vt=D===$?h/ne:h,this};var Wt,Et=p.__private__.getFontSize=p.getFontSize=function(){return D===Z?vt:vt*ne},qt=t.R2L||!1;p.__private__.setR2L=p.setR2L=function(h){return qt=h,this},p.__private__.getR2L=p.getR2L=function(){return qt};var Dt,we=p.__private__.setZoomMode=function(h){if(/^(?:\d+\.\d*|\d*\.\d+|\d+)%$/.test(h))Wt=h;else if(isNaN(h)){if([void 0,null,`fullwidth`,`fullheight`,`fullpage`,`original`].indexOf(h)===-1)throw new Error(`zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. "`+h+`" is not recognized.`);Wt=h}else Wt=parseInt(h,10)};p.__private__.getZoomMode=function(){return Wt};var he,Jt=p.__private__.setPageMode=function(h){if([void 0,null,`UseNone`,`UseOutlines`,`UseThumbs`,`FullScreen`].indexOf(h)==-1)throw new Error(`Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "`+h+`" is not recognized.`);Dt=h};p.__private__.getPageMode=function(){return Dt};var fe=p.__private__.setLayoutMode=function(h){if([void 0,null,`continuous`,`single`,`twoleft`,`tworight`,`two`].indexOf(h)==-1)throw new Error(`Layout mode must be one of continuous, single, twoleft, tworight. "`+h+`" is not recognized.`);he=h};p.__private__.getLayoutMode=function(){return he},p.__private__.setDisplayMode=p.setDisplayMode=function(h,b,E){return we(h),fe(b),Jt(E),this};var ce={title:``,subject:``,author:``,keywords:``,creator:``};p.__private__.getDocumentProperty=function(h){if(Object.keys(ce).indexOf(h)===-1)throw new Error(`Invalid argument passed to jsPDF.getDocumentProperty`);return ce[h]},p.__private__.getDocumentProperties=function(){return ce},p.__private__.setDocumentProperties=p.setProperties=p.setDocumentProperties=function(h){for(var b in ce)ce.hasOwnProperty(b)&&h[b]&&(ce[b]=h[b]);return this},p.__private__.setDocumentProperty=function(h,b){if(Object.keys(ce).indexOf(h)===-1)throw new Error(`Invalid arguments passed to jsPDF.setDocumentProperty`);return ce[h]=b};var Rt,ne,jt,He,ge,oe={},se={},Te=[],Ut={},Pe={},Zt={},Qt={},Re=null,le=0,Gt=[],_e=new Bf(p),cr=t.hotfixes||[],dn={},Si={},li=[],Vt=function h(b,E,M,V,ot,gt){if(!(this instanceof h))return new h(b,E,M,V,ot,gt);isNaN(b)&&(b=1),isNaN(E)&&(E=0),isNaN(M)&&(M=0),isNaN(V)&&(V=1),isNaN(ot)&&(ot=0),isNaN(gt)&&(gt=0),this._matrix=[b,E,M,V,ot,gt]};Object.defineProperty(Vt.prototype,"sx",{get:function(){return this._matrix[0]},set:function(h){this._matrix[0]=h}}),Object.defineProperty(Vt.prototype,"shy",{get:function(){return this._matrix[1]},set:function(h){this._matrix[1]=h}}),Object.defineProperty(Vt.prototype,"shx",{get:function(){return this._matrix[2]},set:function(h){this._matrix[2]=h}}),Object.defineProperty(Vt.prototype,"sy",{get:function(){return this._matrix[3]},set:function(h){this._matrix[3]=h}}),Object.defineProperty(Vt.prototype,"tx",{get:function(){return this._matrix[4]},set:function(h){this._matrix[4]=h}}),Object.defineProperty(Vt.prototype,"ty",{get:function(){return this._matrix[5]},set:function(h){this._matrix[5]=h}}),Object.defineProperty(Vt.prototype,"a",{get:function(){return this._matrix[0]},set:function(h){this._matrix[0]=h}}),Object.defineProperty(Vt.prototype,"b",{get:function(){return this._matrix[1]},set:function(h){this._matrix[1]=h}}),Object.defineProperty(Vt.prototype,"c",{get:function(){return this._matrix[2]},set:function(h){this._matrix[2]=h}}),Object.defineProperty(Vt.prototype,"d",{get:function(){return this._matrix[3]},set:function(h){this._matrix[3]=h}}),Object.defineProperty(Vt.prototype,"e",{get:function(){return this._matrix[4]},set:function(h){this._matrix[4]=h}}),Object.defineProperty(Vt.prototype,"f",{get:function(){return this._matrix[5]},set:function(h){this._matrix[5]=h}}),Object.defineProperty(Vt.prototype,"rotation",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Vt.prototype,"scaleX",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Vt.prototype,"scaleY",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Vt.prototype,"isIdentity",{get:function(){return this.sx===1&&this.shy===0&&this.shx===0&&this.sy===1&&this.tx===0&&this.ty===0}}),Vt.prototype.join=function(h){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(tt).join(h)},Vt.prototype.multiply=function(h){return new Vt(h.sx*this.sx+h.shy*this.shx,h.sx*this.shy+h.shy*this.sy,h.shx*this.sx+h.sy*this.shx,h.shx*this.shy+h.sy*this.sy,h.tx*this.sx+h.ty*this.shx+this.tx,h.tx*this.shy+h.ty*this.sy+this.ty)},Vt.prototype.decompose=function(){var h=this.sx,b=this.shy,E=this.shx,M=this.sy,V=this.tx,ot=this.ty,gt=Math.sqrt(h*h+b*b),Ft=(h/=gt)*E+(b/=gt)*M;E-=h*Ft,M-=b*Ft;var Ct=Math.sqrt(E*E+M*M);return Ft/=Ct,h*(M/=Ct)>16&255,M=Ct>>8&255,V=255&Ct}if(M===void 0||ot===void 0&&E===M&&M===V)b=typeof E==`string`?E+` `+gt[0]:h.precision===2?N(E/255)+` `+gt[0]:F(E/255)+` `+gt[0];else if(ot===void 0||ye(ot)===`object`){if(ot&&!isNaN(ot.a)&&ot.a===0)return[`1.`,`1.`,`1.`,gt[1]].join(` `);b=typeof E==`string`?[E,M,V,gt[1]].join(` `):h.precision===2?[N(E/255),N(M/255),N(V/255),gt[1]].join(` `):[F(E/255),F(M/255),F(V/255),gt[1]].join(` `)}else b=typeof E==`string`?[E,M,V,ot,gt[2]].join(` `):h.precision===2?[N(E),N(M),N(V),N(ot),gt[2]].join(` `):[F(E),F(M),F(V),F(ot),gt[2]].join(` `);return b},ti=p.__private__.getFilters=function(){return f},Gn=p.__private__.putStream=function(h){var b=(h=h||{}).data||``,E=h.filters||ti(),M=h.alreadyAppliedFilters||[],V=h.addLength1||!1,ot=b.length,gt=h.objectId,Ft=function(Fe){return Fe};if(m!==null&>===void 0)throw new Error(`ObjectId must be passed to putStream for file encryption`);m!==null&&(Ft=ln.encryptor(gt,0));var Ct={};E===!0&&(E=[`FlateEncode`]);var Kt=h.additionalKeyValues||[],te=(Ct=Mt.API.processDataByFilters!==void 0?Mt.API.processDataByFilters(b,E):{data:b,reverseChain:[]}).reverseChain+(Array.isArray(M)?M.join(` `):M.toString());if(Ct.data.length!==0&&(Kt.push({key:`Length`,value:Ct.data.length}),V===!0&&Kt.push({key:`Length1`,value:ot})),te.length!=0)if(te.split(`/`).length-1==1)Kt.push({key:`Filter`,value:te});else{Kt.push({key:`Filter`,value:`[`+te+`]`});for(var de=0;de>`),Ct.data.length!==0&&(P(`stream`),P(Ft(Ct.data)),P(`endstream`))},ur=p.__private__.putPage=function(h){var b=h.number,E=h.data,M=h.objId,V=h.contentsObjId;sn(M,!0),P(`<>`),P(`endobj`);var ot=E.join(` `);return D===$&&(ot+=` @@ -38,7 +38,7 @@ T* `):h.join(` Tj `),n}},Cross:{createAppearanceStream:function(t){var n={D:{Off:It.RadioButton.Cross.OffPushDown},N:{}};return n.N[t]=It.RadioButton.Cross.YesNormal,n.D[t]=It.RadioButton.Cross.YesPushDown,n},getCA:function(){return`8`},YesNormal:function(t){var n=Ai(t);n.scope=t.scope;var e=[],i=It.internal.calculateCross(t);return e.push(`q`),e.push(`1 1 `+Xt(It.internal.getWidth(t)-2)+` `+Xt(It.internal.getHeight(t)-2)+` re`),e.push(`W`),e.push(`n`),e.push(Xt(i.x1.x)+` `+Xt(i.x1.y)+` m`),e.push(Xt(i.x2.x)+` `+Xt(i.x2.y)+` l`),e.push(Xt(i.x4.x)+` `+Xt(i.x4.y)+` m`),e.push(Xt(i.x3.x)+` `+Xt(i.x3.y)+` l`),e.push(`s`),e.push(`Q`),n.stream=e.join(` `),n},YesPushDown:function(t){var n=Ai(t);n.scope=t.scope;var e=It.internal.calculateCross(t),i=[];return i.push(`0.749023 g`),i.push(`0 0 `+Xt(It.internal.getWidth(t))+` `+Xt(It.internal.getHeight(t))+` re`),i.push(`f`),i.push(`q`),i.push(`1 1 `+Xt(It.internal.getWidth(t)-2)+` `+Xt(It.internal.getHeight(t)-2)+` re`),i.push(`W`),i.push(`n`),i.push(Xt(e.x1.x)+` `+Xt(e.x1.y)+` m`),i.push(Xt(e.x2.x)+` `+Xt(e.x2.y)+` l`),i.push(Xt(e.x4.x)+` `+Xt(e.x4.y)+` m`),i.push(Xt(e.x3.x)+` `+Xt(e.x3.y)+` l`),i.push(`s`),i.push(`Q`),n.stream=i.join(` `),n},OffPushDown:function(t){var n=Ai(t);n.scope=t.scope;var e=[];return e.push(`0.749023 g`),e.push(`0 0 `+Xt(It.internal.getWidth(t))+` `+Xt(It.internal.getHeight(t))+` re`),e.push(`f`),n.stream=e.join(` -`),n}}},createDefaultAppearanceStream:function(t){var n=t.scope.internal.getFont(t.fontName,t.fontStyle).id,e=t.scope.__private__.encodeColorString(t.color);return`/`+n+` `+t.fontSize+` Tf `+e}};It.internal={Bezier_C:.551915024494,calculateCross:function(t){var n=It.internal.getWidth(t),e=It.internal.getHeight(t),i=Math.min(n,e);return{x1:{x:(n-i)/2,y:(e-i)/2+i},x2:{x:(n-i)/2+i,y:(e-i)/2},x3:{x:(n-i)/2,y:(e-i)/2},x4:{x:(n-i)/2+i,y:(e-i)/2+i}}}},It.internal.getWidth=function(t){var n=0;return ye(t)===`object`&&(n=jf(t.Rect[2])),n},It.internal.getHeight=function(t){var n=0;return ye(t)===`object`&&(n=jf(t.Rect[3])),n};c5=ze.addField=function(t){if(h5(this,t),!(t instanceof oi))throw new Error(`Invalid argument passed to jsPDF.addField.`);var n;return(n=t).scope.internal.acroformPlugin.printedOut&&(n.scope.internal.acroformPlugin.printedOut=!1,n.scope.internal.acroformPlugin.acroFormDictionaryRoot=null),n.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(n),t.page=t.scope.internal.getCurrentPageInfo().pageNumber,this};ze.AcroFormChoiceField=La,ze.AcroFormListBox=Sa,ze.AcroFormComboBox=ka,ze.AcroFormEditBox=Ss,ze.AcroFormButton=on,ze.AcroFormPushButton=ks,ze.AcroFormRadioButton=Pa,ze.AcroFormCheckBox=Ps,ze.AcroFormTextField=Dr,ze.AcroFormPasswordField=Es,ze.AcroFormAppearance=It,ze.AcroForm={ChoiceField:La,ListBox:Sa,ComboBox:ka,EditBox:Ss,Button:on,PushButton:ks,RadioButton:Pa,CheckBox:Ps,TextField:Dr,PasswordField:Es,Appearance:It},Mt.AcroForm={ChoiceField:La,ListBox:Sa,ComboBox:ka,EditBox:Ss,Button:on,PushButton:ks,RadioButton:Pa,CheckBox:Ps,TextField:Dr,PasswordField:Es,Appearance:It};Xd=Mt.AcroForm;(function(t){t.__addimage__={};var e=`UNKNOWN`,i={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0],[255,216,255,219],[255,216,255,238]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],WEBP:[[82,73,70,70,void 0,void 0,void 0,void 0,87,69,66,80]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},a=t.__addimage__.getImageFileTypeByImageData=function(N,F){var U,q,it,ft,pt,nt=e;if((F=F||e)===`RGBA`||N.data!==void 0&&N.data instanceof Uint8ClampedArray&&`height`in N&&`width`in N)return`RGBA`;if(_t(N))for(pt in i)for(it=i[pt],U=0;U>`}),`transparency`in F&&Array.isArray(F.transparency)&&F.transparency.length>0){for(var pt=``,nt=0,ut=F.transparency.length;nt>`,O.content=o;var $=O.objId+` 0 R`;o=`<>`,B.content=o,this.internal.write(O.objId,`0 R`,B.objId,`0 R`);break;case`freetext`:a=`/Rect [`+f(i.bounds.x)+` `+l(i.bounds.y)+` `+f(i.bounds.x+i.bounds.w)+` `+l(i.bounds.y+i.bounds.h)+`] `;var D=`font: Helvetica,sans-serif 12.0pt; text-align:left; color:#`+(i.color||`#000000`);o=`<>`,this.internal.write(o);break;case`link`:if(i.options.name){var lt=this.annotations._nameMap[i.options.name];i.options.pageNumber=lt.page,i.options.top=lt.y}else i.options.top||(i.options.top=0);if(a=`/Rect [`+i.finalBounds.x+` `+i.finalBounds.y+` `+i.finalBounds.w+` `+i.finalBounds.h+`] `,o=``,i.options.url)o=`<>`;else if(i.options.pageNumber)switch(o=`<>`,this.internal.write(o))}}this.internal.write(`]`)}}]),t.createAnnotation=function(e){var i=this.internal.getCurrentPageInfo();switch(e.type){case`link`:this.link(e.bounds.x,e.bounds.y,e.bounds.w,e.bounds.h,e);break;case`text`:case`freetext`:i.pageContext.annotations.push(e)}},t.link=function(e,i,a,o,f){var l=this.internal.getCurrentPageInfo(),c=this.internal.getCoordinateString,d=this.internal.getVerticalCoordinateString;l.pageContext.annotations.push({finalBounds:{x:c(e),y:d(i),w:c(e+a),h:d(i+o)},options:f,type:`link`})},t.textWithLink=function(e,i,a,o){var f,l,c=this.getTextWidth(e),d=this.internal.getLineHeight()/this.internal.scaleFactor;if(o.maxWidth!==void 0){l=o.maxWidth;var m=this.splitTextToSize(e,l).length;f=Math.ceil(d*m)}else l=c,f=d;return this.text(e,i,a,o),a+=.2*d,o.align===`center`&&(i-=c/2),o.align===`right`&&(i-=c),this.link(i,a-d,l,f,o),c},t.getTextWidth=function(e){var i=this.internal.getFontSize();return this.getStringUnitWidth(e)*i/this.internal.scaleFactor}})(Mt.API),(function(t){var n={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},e={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},i={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},a=[1570,1571,1573,1575];t.__arabicParser__={};var o=t.__arabicParser__.isInArabicSubstitutionA=function(O){return n[O.charCodeAt(0)]!==void 0},f=t.__arabicParser__.isArabicLetter=function(O){return typeof O==`string`&&/^[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]+$/.test(O)},l=t.__arabicParser__.isArabicEndLetter=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length<=2},c=t.__arabicParser__.isArabicAlfLetter=function(O){return f(O)&&a.indexOf(O.charCodeAt(0))>=0};t.__arabicParser__.arabicLetterHasIsolatedForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length>=1};var d=t.__arabicParser__.arabicLetterHasFinalForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length>=2};t.__arabicParser__.arabicLetterHasInitialForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length>=3};var m=t.__arabicParser__.arabicLetterHasMedialForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length==4},A=t.__arabicParser__.resolveLigatures=function(O){var B=0,k=e,Z=``,$=0;for(B=0;B>`),this.internal.out(`endobj`)}),this.internal.events.subscribe(`putCatalog`,function(){this.internal.out(`/OpenAction `+n+` 0 R`)})),this},(function(t){var n=function(){var e=void 0;Object.defineProperty(this,"pdf",{get:function(){return e},set:function(l){e=l}});var i=150;Object.defineProperty(this,"width",{get:function(){return i},set:function(l){i=isNaN(l)||Number.isInteger(l)===!1||l<0?150:l,this.getContext(`2d`).pageWrapXEnabled&&(this.getContext(`2d`).pageWrapX=i+1)}});var a=300;Object.defineProperty(this,"height",{get:function(){return a},set:function(l){a=isNaN(l)||Number.isInteger(l)===!1||l<0?300:l,this.getContext(`2d`).pageWrapYEnabled&&(this.getContext(`2d`).pageWrapY=a+1)}});var o=[];Object.defineProperty(this,"childNodes",{get:function(){return o},set:function(l){o=l}});var f={};Object.defineProperty(this,"style",{get:function(){return f},set:function(l){f=l}}),Object.defineProperty(this,"parentNode",{})};n.prototype.getContext=function(e,i){var a;if((e=e||`2d`)!==`2d`)return null;for(a in i)this.pdf.context2d.hasOwnProperty(a)&&(this.pdf.context2d[a]=i[a]);return this.pdf.context2d._canvas=this,this.pdf.context2d},n.prototype.toDataURL=function(){throw new Error(`toDataURL is not implemented.`)},t.events.push([`initialized`,function(){this.canvas=new n,this.canvas.pdf=this}])})(Mt.API),(function(t){var n={left:0,top:0,bottom:0,right:0},e=!1,i=function(){this.internal.__cell__===void 0&&(this.internal.__cell__={},this.internal.__cell__.padding=3,this.internal.__cell__.headerFunction=void 0,this.internal.__cell__.margins=Object.assign({},n),this.internal.__cell__.margins.width=this.getPageWidth(),a.call(this))},a=function(){this.internal.__cell__.lastCell=new o,this.internal.__cell__.pages=1},o=function(){var c=arguments[0];Object.defineProperty(this,"x",{enumerable:!0,get:function(){return c},set:function(O){c=O}});var d=arguments[1];Object.defineProperty(this,"y",{enumerable:!0,get:function(){return d},set:function(O){d=O}});var m=arguments[2];Object.defineProperty(this,"width",{enumerable:!0,get:function(){return m},set:function(O){m=O}});var A=arguments[3];Object.defineProperty(this,"height",{enumerable:!0,get:function(){return A},set:function(O){A=O}});var L=arguments[4];Object.defineProperty(this,"text",{enumerable:!0,get:function(){return L},set:function(O){L=O}});var p=arguments[5];Object.defineProperty(this,"lineNumber",{enumerable:!0,get:function(){return p},set:function(O){p=O}});var T=arguments[6];return Object.defineProperty(this,"align",{enumerable:!0,get:function(){return T},set:function(O){T=O}}),this};o.prototype.clone=function(){return new o(this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align)},o.prototype.toArray=function(){return[this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align]},t.setHeaderFunction=function(c){return i.call(this),this.internal.__cell__.headerFunction=typeof c==`function`?c:void 0,this},t.getTextDimensions=function(c,d){i.call(this);var m=(d=d||{}).fontSize||this.getFontSize(),A=d.font||this.getFont(),L=d.scaleFactor||this.internal.scaleFactor,p=0,T=0,O=0,B=this;if(!Array.isArray(c)&&typeof c!=`string`){if(typeof c!=`number`)throw new Error(`getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.`);c=String(c)}var k=d.maxWidth;k>0?typeof c==`string`?c=this.splitTextToSize(c,k):Object.prototype.toString.call(c)===`[object Array]`&&(c=c.reduce(function($,D){return $.concat(B.splitTextToSize(D,k))},[])):c=Array.isArray(c)?c:[c];for(var Z=0;Zthis.getPageHeight()?(this.cellAddPage(),c.y=A.top,p&&L&&(this.printHeaderRow(c.lineNumber,!0),c.y+=L[0].height)):c.y=d.y+d.height||c.y),c.text[0]!==void 0&&(this.rect(c.x,c.y,c.width,c.height,e===!0?`FD`:void 0),c.align===`right`?this.text(c.text,c.x+c.width-m,c.y+m,{align:`right`,baseline:`top`}):c.align===`center`?this.text(c.text,c.x+c.width/2,c.y+m,{align:`center`,baseline:`top`,maxWidth:c.width-m-m}):this.text(c.text,c.x+m,c.y+m,{align:`left`,baseline:`top`,maxWidth:c.width-m-m})),this.internal.__cell__.lastCell=c,this};t.table=function(c,d,m,A,L){if(i.call(this),!m)throw new Error(`No data for PDF table.`);var p,T,O,B,k=[],Z=[],$=[],D={},lt={},_t=[],mt=[],tt=(L=L||{}).autoSize||!1,z=L.printHeaders!==!1,et=L.css&&L.css[`font-size`]!==void 0?16*L.css[`font-size`]:L.fontSize||12,N=L.margins||Object.assign({width:this.getPageWidth()},n),F=typeof L.padding==`number`?L.padding:3,U=L.headerBackgroundColor||`#c8c8c8`,q=L.headerTextColor||`#000`;if(a.call(this),this.internal.__cell__.printHeaders=z,this.internal.__cell__.margins=N,this.internal.__cell__.table_font_size=et,this.internal.__cell__.padding=F,this.internal.__cell__.headerBackgroundColor=U,this.internal.__cell__.headerTextColor=q,this.setFontSize(et),A==null)Z=k=Object.keys(m[0]),$=k.map(function(){return`left`});else if(Array.isArray(A)&&ye(A[0])===`object`)for(k=A.map(function(At){return At.name}),Z=A.map(function(At){return At.prompt||At.name||``}),$=A.map(function(At){return At.align||`left`}),p=0;p0&&this.setTableHeaderRow(L),this.setFont(void 0,`normal`),e=!1}})(Mt.API);su={italic:[`italic`,`oblique`,`normal`],oblique:[`oblique`,`italic`,`normal`],normal:[`normal`,`oblique`,`italic`]};lu=[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`];fh=ou(lu);hu=[100,200,300,400,500,600,700,800,900];f5=ou(hu);u5={"sans-serif":`helvetica`,fixed:`courier`,monospace:`courier`,terminal:`courier`,cursive:`times`,fantasy:`times`,serif:`times`};Df={caption:`times`,icon:`times`,menu:`times`,"message-box":`times`,"small-caption":`times`,"status-bar":`times`};;;;;;ah=[`times`];(function(t){var n,e,i,a,o,f,l,c,d,m=function(y){return y=y||{},this.isStrokeTransparent=y.isStrokeTransparent||!1,this.strokeOpacity=y.strokeOpacity||1,this.strokeStyle=y.strokeStyle||`#000000`,this.fillStyle=y.fillStyle||`#000000`,this.isFillTransparent=y.isFillTransparent||!1,this.fillOpacity=y.fillOpacity||1,this.font=y.font||`10px sans-serif`,this.textBaseline=y.textBaseline||`alphabetic`,this.textAlign=y.textAlign||`left`,this.lineWidth=y.lineWidth||1,this.lineJoin=y.lineJoin||`miter`,this.lineCap=y.lineCap||`butt`,this.path=y.path||[],this.transform=y.transform!==void 0?y.transform.clone():new c,this.globalCompositeOperation=y.globalCompositeOperation||`normal`,this.globalAlpha=y.globalAlpha||1,this.clip_path=y.clip_path||[],this.currentPoint=y.currentPoint||new f,this.miterLimit=y.miterLimit||10,this.lastPoint=y.lastPoint||new f,this.lineDashOffset=y.lineDashOffset||0,this.lineDash=y.lineDash||[],this.margin=y.margin||[0,0,0,0],this.prevPageLastElemOffset=y.prevPageLastElemOffset||0,this.ignoreClearRect=typeof y.ignoreClearRect!=`boolean`||y.ignoreClearRect,this};t.events.push([`initialized`,function(){this.context2d=new A(this),n=this.internal.f2,e=this.internal.getCoordinateString,i=this.internal.getVerticalCoordinateString,a=this.internal.getHorizontalCoordinate,o=this.internal.getVerticalCoordinate,f=this.internal.Point,l=this.internal.Rectangle,c=this.internal.Matrix,d=new m}]);var A=function(y){Object.defineProperty(this,"canvas",{get:function(){return{parentNode:!1,style:!1}}});var R=y;Object.defineProperty(this,"pdf",{get:function(){return R}});var j=!1;Object.defineProperty(this,"pageWrapXEnabled",{get:function(){return j},set:function(P){j=!!P}});var G=!1;Object.defineProperty(this,"pageWrapYEnabled",{get:function(){return G},set:function(P){G=!!P}});var Y=0;Object.defineProperty(this,"posX",{get:function(){return Y},set:function(P){isNaN(P)||(Y=P)}});var Q=0;Object.defineProperty(this,"posY",{get:function(){return Q},set:function(P){isNaN(P)||(Q=P)}}),Object.defineProperty(this,"margin",{get:function(){return d.margin},set:function(P){var Lt;typeof P==`number`?Lt=[P,P,P,P]:((Lt=new Array(4))[0]=P[0],Lt[1]=P.length>=2?P[1]:Lt[0],Lt[2]=P.length>=3?P[2]:Lt[0],Lt[3]=P.length>=4?P[3]:Lt[1]),d.margin=Lt}});var rt=!1;Object.defineProperty(this,"autoPaging",{get:function(){return rt},set:function(P){rt=P}});var at=0;Object.defineProperty(this,"lastBreak",{get:function(){return at},set:function(P){at=P}});var dt=[];Object.defineProperty(this,"pageBreaks",{get:function(){return dt},set:function(P){dt=P}}),Object.defineProperty(this,"ctx",{get:function(){return d},set:function(P){P instanceof m&&(d=P)}}),Object.defineProperty(this,"path",{get:function(){return d.path},set:function(P){d.path=P}});var xt=[];Object.defineProperty(this,"ctxStack",{get:function(){return xt},set:function(P){xt=P}}),Object.defineProperty(this,"fillStyle",{get:function(){return this.ctx.fillStyle},set:function(P){var Lt=L(P);this.ctx.fillStyle=Lt.style,this.ctx.isFillTransparent=Lt.a===0,this.ctx.fillOpacity=Lt.a,this.pdf.setFillColor(Lt.r,Lt.g,Lt.b,{a:Lt.a}),this.pdf.setTextColor(Lt.r,Lt.g,Lt.b,{a:Lt.a})}}),Object.defineProperty(this,"strokeStyle",{get:function(){return this.ctx.strokeStyle},set:function(P){var Lt=L(P);this.ctx.strokeStyle=Lt.style,this.ctx.isStrokeTransparent=Lt.a===0,this.ctx.strokeOpacity=Lt.a,Lt.a===0?this.pdf.setDrawColor(255,255,255):(Lt.a,this.pdf.setDrawColor(Lt.r,Lt.g,Lt.b))}}),Object.defineProperty(this,"lineCap",{get:function(){return this.ctx.lineCap},set:function(P){[`butt`,`round`,`square`].indexOf(P)!==-1&&(this.ctx.lineCap=P,this.pdf.setLineCap(P))}}),Object.defineProperty(this,"lineWidth",{get:function(){return this.ctx.lineWidth},set:function(P){isNaN(P)||(this.ctx.lineWidth=P,this.pdf.setLineWidth(P))}}),Object.defineProperty(this,"lineJoin",{get:function(){return this.ctx.lineJoin},set:function(P){[`bevel`,`round`,`miter`].indexOf(P)!==-1&&(this.ctx.lineJoin=P,this.pdf.setLineJoin(P))}}),Object.defineProperty(this,"miterLimit",{get:function(){return this.ctx.miterLimit},set:function(P){isNaN(P)||(this.ctx.miterLimit=P,this.pdf.setMiterLimit(P))}}),Object.defineProperty(this,"textBaseline",{get:function(){return this.ctx.textBaseline},set:function(P){this.ctx.textBaseline=P}}),Object.defineProperty(this,"textAlign",{get:function(){return this.ctx.textAlign},set:function(P){[`right`,`end`,`center`,`left`,`start`].indexOf(P)!==-1&&(this.ctx.textAlign=P)}});var St=null,kt=null,zt=null;Object.defineProperty(this,"fontFaces",{get:function(){return zt},set:function(P){St=null,kt=null,zt=P}}),Object.defineProperty(this,"font",{get:function(){return this.ctx.font},set:function(P){var Lt;if(this.ctx.font=P,(Lt=/^\s*(?=(?:(?:[-a-z]+\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\1|\2|\3)\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\d]+(?:\%|in|[cem]m|ex|p[ctx]))(?:\s*\/\s*(normal|[.\d]+(?:\%|in|[cem]m|ex|p[ctx])))?\s*([-_,\"\'\sa-z0-9]+?)\s*$/i.exec(P))!==null){var ae=Lt[1];Lt[2];var Ht=Lt[3],vt=Lt[4];Lt[5];var Wt=Lt[6],Et=/^([.\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i.exec(vt)[2];vt=Math.floor(Et===`px`?parseFloat(vt)*this.pdf.internal.scaleFactor:Et===`em`?parseFloat(vt)*this.pdf.getFontSize():parseFloat(vt)*this.pdf.internal.scaleFactor),this.pdf.setFontSize(vt);var qt=(function(jt){var He,ge,oe=[],se=jt.trim();if(se===``)return ah;if(se in Df)return[Df[se]];for(;se!==``;){switch(ge=null,He=(se=qf(se)).charAt(0)){case`"`:case`'`:ge=d5(se.substring(1),He);break;default:ge=p5(se)}if(ge===null||(oe.push(ge[0]),(se=qf(ge[1]))!==``&&se.charAt(0)!==`,`))return ah;se=se.replace(/^,/,``)}return oe})(Wt);if(this.fontFaces){var he=(function(jt,He,ge){for(var oe=(ge=ge||{}).defaultFontFamily||`times`,se=Object.assign({},u5,ge.genericFontFamilies||{}),Te=null,Ut=null,Pe=0;Pe=700||ae===`bold`)&&(Jt=`bold`),ae===`italic`&&(Jt+=`italic`),Jt.length===0&&(Jt=`normal`);for(var fe=``,ce={arial:`Helvetica`,Arial:`Helvetica`,verdana:`Helvetica`,Verdana:`Helvetica`,helvetica:`Helvetica`,Helvetica:`Helvetica`,"sans-serif":`Helvetica`,fixed:`Courier`,monospace:`Courier`,terminal:`Courier`,cursive:`Times`,fantasy:`Times`,serif:`Times`},Rt=0;Rt=2*Math.PI&&(G=0,Y=2*Math.PI),this.path.push({type:`arc`,x:y,y:R,radius:j,startAngle:G,endAngle:Y,counterclockwise:Q})},A.prototype.arcTo=function(y,R,j,G,Y){throw new Error(`arcTo not implemented.`)},A.prototype.rect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.rect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.rect`);this.moveTo(y,R),this.lineTo(y+j,R),this.lineTo(y+j,R+G),this.lineTo(y,R+G),this.lineTo(y,R),this.lineTo(y+j,R),this.lineTo(y,R)},A.prototype.fillRect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.fillRect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.fillRect`);if(!p.call(this)){var Y={};this.lineCap!==`butt`&&(Y.lineCap=this.lineCap,this.lineCap=`butt`),this.lineJoin!==`miter`&&(Y.lineJoin=this.lineJoin,this.lineJoin=`miter`),this.beginPath(),this.rect(y,R,j,G),this.fill(),Y.hasOwnProperty(`lineCap`)&&(this.lineCap=Y.lineCap),Y.hasOwnProperty(`lineJoin`)&&(this.lineJoin=Y.lineJoin)}},A.prototype.strokeRect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.strokeRect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.strokeRect`);T.call(this)||(this.beginPath(),this.rect(y,R,j,G),this.stroke())},A.prototype.clearRect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.clearRect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.clearRect`);this.ignoreClearRect||(this.fillStyle=`#ffffff`,this.fillRect(y,R,j,G))},A.prototype.save=function(y){y=typeof y!=`boolean`||y;for(var R=this.pdf.internal.getCurrentPageInfo().pageNumber,j=0;j0||this.margin[1]>0||this.margin[2]>0||this.margin[3]>0};A.prototype.drawImage=function(y,R,j,G,Y,Q,rt,at,dt){var xt=this.pdf.getImageProperties(y),St=1,kt=1,zt=1,P=1;G!==void 0&&at!==void 0&&(zt=at/G,P=dt/Y,St=xt.width/G*at/G,kt=xt.height/Y*dt/Y),Q===void 0&&(Q=R,rt=j,R=0,j=0),G!==void 0&&at===void 0&&(at=G,dt=Y),G===void 0&&at===void 0&&(at=xt.width,dt=xt.height);var Lt=this.ctx.transform.decompose(),ae=nt(Lt.rotate.shx),Ht=new c,vt=(Ht=(Ht=(Ht=Ht.multiply(Lt.translate)).multiply(Lt.skew)).multiply(Lt.scale)).applyToRectangle(new l(Q-R*zt,rt-j*P,G*St,Y*kt));if(this.autoPaging){for(var Wt,Et=B.call(this,vt),qt=[],Dt=0;Dtwe||Jtvt||Et0)){for(;dt>=0;dt--)if(Y[dt-1].close!==!0&&Y[dt-1].begin!==!0){Y[dt-1].deltas.push(j),Y[dt-1].abs.push(at);break}}break;case`bct`:j=[at.x1-Q[rt-1].x,at.y1-Q[rt-1].y,at.x2-Q[rt-1].x,at.y2-Q[rt-1].y,at.x-Q[rt-1].x,at.y-Q[rt-1].y],Y[Y.length-1].deltas.push(j);break;case`qct`:var xt=Q[rt-1].x+2/3*(at.x1-Q[rt-1].x),St=Q[rt-1].y+2/3*(at.y1-Q[rt-1].y),kt=at.x+2/3*(at.x1-at.x),zt=at.y+2/3*(at.y1-at.y),P=at.x,Lt=at.y;j=[xt-Q[rt-1].x,St-Q[rt-1].y,kt-Q[rt-1].x,zt-Q[rt-1].y,P-Q[rt-1].x,Lt-Q[rt-1].y],Y[Y.length-1].deltas.push(j);break;case`arc`:Y.push({deltas:[],abs:[],arc:!0}),Array.isArray(Y[Y.length-1].abs)&&Y[Y.length-1].abs.push(at)}}G=R?null:y===`stroke`?`stroke`:`fill`;for(var ae=!1,Ht=0;Ht=.01&&(G=this.pdf.internal.getFontSize(),this.pdf.setFontSize(G*y.scale),Y=this.lineWidth,this.lineWidth=Y*y.scale);var ne=this.autoPaging!==`text`;if(ne||Rt.y+Rt.h<=Dt){if(ne||Rt.y>=Et&&Rt.x<=he){var jt=ne?y.text:this.pdf.splitTextToSize(y.text,y.maxWidth||he-Rt.x)[0],He=Z([JSON.parse(JSON.stringify(kt))],this.posX+this.margin[3],-fe+Et+this.ctx.prevPageLastElemOffset)[0],ge=ne&&(Wt>Ht||Wt=.01&&(this.pdf.setFontSize(G),this.lineWidth=Y)}}else y.scale>=.01&&(G=this.pdf.internal.getFontSize(),this.pdf.setFontSize(G*y.scale),Y=this.lineWidth,this.lineWidth=Y*y.scale),this.pdf.text(y.text,dt.x+this.posX,dt.y+this.posY,{angle:y.angle,align:R,renderingMode:y.renderingMode,maxWidth:y.maxWidth}),y.scale>=.01&&(this.pdf.setFontSize(G),this.lineWidth=Y)},U=function(y,R,j,G){j=j||0,G=G||0,this.pdf.internal.out(e(y+j)+` `+i(R+G)+` l`)},q=function(y,R,j){return this.pdf.lines(y,R,j,null,null)},it=function(y,R,j,G,Y,Q,rt,at){this.pdf.internal.out([n(a(j+y)),n(o(G+R)),n(a(Y+y)),n(o(Q+R)),n(a(rt+y)),n(o(at+R)),`c`].join(` `))},ft=function(y,R,j,G){for(var Y=2*Math.PI,Q=Math.PI/2;R>j;)R-=Y;var rt=Math.abs(j-R);rt1e-5;){var St=xt+dt*Math.min(rt,Q);at.push(pt.call(this,y,xt,St)),rt-=Math.abs(St-xt),xt=St}return at},pt=function(y,R,j){var G=(j-R)/2,Y=y*Math.cos(G),Q=y*Math.sin(G),rt=Y,at=-Q,dt=rt*rt+at*at,xt=dt+rt*Y+at*Q,St=4/3*(Math.sqrt(2*dt*xt)-xt)/(rt*Q-at*Y),kt=rt-St*at,zt=at+St*rt,P=kt,Lt=-zt,ae=G+R,Ht=Math.cos(ae),vt=Math.sin(ae);return{x1:y*Math.cos(R),y1:y*Math.sin(R),x2:kt*Ht-zt*vt,y2:kt*vt+zt*Ht,x3:P*Ht-Lt*vt,y3:P*vt+Lt*Ht,x4:y*Math.cos(j),y4:y*Math.sin(j)}},nt=function(y){return 180*y/Math.PI},ut=function(y,R,j,G,Y,Q){var rt=y+.5*(j-y),at=R+.5*(G-R),dt=Y+.5*(j-Y),xt=Q+.5*(G-Q),St=Math.min(y,Y,rt,dt),kt=Math.max(y,Y,rt,dt),zt=Math.min(R,Q,at,xt),P=Math.max(R,Q,at,xt);return new l(St,zt,kt-St,P-zt)},At=function(y,R,j,G,Y,Q,rt,at){var dt,xt,St,kt,zt,P,Lt,ae,Ht,vt,Wt,Et,qt,Dt,we=j-y,he=G-R,Jt=Y-j,fe=Q-G,ce=rt-Y,Rt=at-Q;for(xt=0;xt<41;xt++)Ht=(Lt=(St=y+(dt=xt/40)*we)+dt*((zt=j+dt*Jt)-St))+dt*(zt+dt*(Y+dt*ce-zt)-Lt),vt=(ae=(kt=R+dt*he)+dt*((P=G+dt*fe)-kt))+dt*(P+dt*(Q+dt*Rt-P)-ae),xt==0?(Wt=Ht,Et=vt,qt=Ht,Dt=vt):(Wt=Math.min(Wt,Ht),Et=Math.min(Et,vt),qt=Math.max(qt,Ht),Dt=Math.max(Dt,vt));return new l(Math.round(Wt),Math.round(Et),Math.round(qt-Wt),Math.round(Dt-Et))},yt=function(){if(this.prevLineDash||this.ctx.lineDash.length||this.ctx.lineDashOffset){var y,R,j=(y=this.ctx.lineDash,R=this.ctx.lineDashOffset,JSON.stringify({lineDash:y,lineDashOffset:R}));this.prevLineDash!==j&&(this.pdf.setLineDash(this.ctx.lineDash,this.ctx.lineDashOffset),this.prevLineDash=j)}}})(Mt.API),(function(t){var n=function(f){var l,c,d,m,A,L,p,T,O,B;for(/[^\x00-\xFF]/.test(f),c=[],d=0,m=(f+=l=`\0\0\0\0`.slice(f.length%4||4)).length;m>d;d+=4)(A=(f.charCodeAt(d)<<24)+(f.charCodeAt(d+1)<<16)+(f.charCodeAt(d+2)<<8)+f.charCodeAt(d+3))!==0?(L=(A=((A=((A=((A=(A-(B=A%85))/85)-(O=A%85))/85)-(T=A%85))/85)-(p=A%85))/85)%85,c.push(L+33,p+33,T+33,O+33,B+33)):c.push(122);return(function(k,Z){for(var $=Z;$>0;$--)k.pop()})(c,l.length),String.fromCharCode.apply(String,c)+`~>`},e=function(f){var l,c,d,m,A,L=String,p=`length`,T=255,O=`charCodeAt`,B=`slice`,k=`replace`;for(f[B](-2),f=f[B](0,-2)[k](/\s/g,``)[k](`z`,`!!!!!`),d=[],m=0,A=(f+=l=`uuuuu`[B](f[p]%5||5))[p];A>m;m+=5)c=52200625*(f[O](m)-33)+614125*(f[O](m+1)-33)+7225*(f[O](m+2)-33)+85*(f[O](m+3)-33)+(f[O](m+4)-33),d.push(T&c>>24,T&c>>16,T&c>>8,T&c);return(function(Z,$){for(var D=$;D>0;D--)Z.pop()})(d,l[p]),L.fromCharCode.apply(L,d)},i=function(f){return f.split(``).map(function(l){return(`0`+l.charCodeAt().toString(16)).slice(-2)}).join(``)+`>`},a=function(f){var l=new RegExp(/^([0-9A-Fa-f]{2})+$/);if((f=f.replace(/\s/g,``)).indexOf(`>`)!==-1&&(f=f.substr(0,f.indexOf(`>`))),f.length%2&&(f+=`0`),l.test(f)===!1)return``;for(var c=``,d=0;dO&&(T=B,B=O,O=T);else{if(l!==`l`&&l!==`landscape`)throw`Invalid orientation: `+l;l=`l`,O>B&&(T=B,B=O,O=T)}return{width:B,height:O,unit:c,k:A,orientation:l}},t.html=function(l,c){(c=c||{}).callback=c.callback||function(){},c.html2canvas=c.html2canvas||{},c.html2canvas.canvas=c.html2canvas.canvas||this.canvas,c.jsPDF=c.jsPDF||this,c.fontFaces=c.fontFaces?c.fontFaces.map(rh):null;var d=new f(c);return c.worker?d:d.from(l).doCallback()}})(Mt.API),Mt.API.addJS=function(t){var n,e,i=(function(a){for(var o=``,f=0;f=0&&a[d]===`\\`;d--)c++;o+=c%2==0?`\\`+l:l}else o+=l}return o})(t);return this.internal.events.subscribe(`postPutResources`,function(){n=this.internal.newObject(),this.internal.out(`<<`),this.internal.out(`/Names [(EmbeddedJS) `+(n+1)+` 0 R]`),this.internal.out(`>>`),this.internal.out(`endobj`),e=this.internal.newObject(),this.internal.out(`<<`),this.internal.out(`/S /JavaScript`),this.internal.out(`/JS (`+i+`)`),this.internal.out(`>>`),this.internal.out(`endobj`)}),this.internal.events.subscribe(`putCatalog`,function(){n!==void 0&&e!==void 0&&this.internal.out(`/Names <>`)}),this},(function(t){var n;t.events.push([`postPutResources`,function(){var e=this,i=/^(\d+) 0 obj$/;if(this.outline.root.children.length>0)for(var a=e.outline.render().split(/\r\n/),o=0;o> endobj`)}var p=e.internal.newObject();for(e.internal.write(`<< /Names [ `),o=0;o>`,`endobj`),n=e.internal.newObject(),e.internal.write(`<< /Dests `+p+` 0 R`),e.internal.write(`>>`,`endobj`)}}]),t.events.push([`putCatalog`,function(){var e=this;e.outline.root.children.length>0&&(e.internal.write(`/Outlines`,this.outline.makeRef(this.outline.root)),this.outline.createNamedDestinations&&e.internal.write(`/Names `+n+` 0 R`))}]),t.events.push([`initialized`,function(){var e=this;e.outline={createNamedDestinations:!1,root:{children:[]}},e.outline.add=function(i,a,o){var f={title:a,options:o,children:[]};return i??=this.root,i.children.push(f),f},e.outline.render=function(){return this.ctx={},this.ctx.val=``,this.ctx.pdf=e,this.genIds_r(this.root),this.renderRoot(this.root),this.renderItems(this.root),this.ctx.val},e.outline.genIds_r=function(i){i.id=e.internal.newObjectDeferred();for(var a=0;a0&&(this.line(`/First `+this.makeRef(i.children[0])),this.line(`/Last `+this.makeRef(i.children[i.children.length-1]))),this.line(`/Count `+this.count_r({count:0},i)),this.objEnd()},e.outline.renderItems=function(i){for(var a=this.ctx.pdf.internal.getVerticalCoordinateString,o=0;o0&&this.line(`/Prev `+this.makeRef(i.children[o-1])),o0&&(this.line(`/First `+this.makeRef(f.children[0])),this.line(`/Last `+this.makeRef(f.children[f.children.length-1])));var l=this.count=this.count_r({count:0},f);if(l>0&&this.line(`/Count `+l),f.options&&f.options.pageNumber){var c=e.internal.getPageInfo(f.options.pageNumber);this.line(`/Dest [`+c.objId+` 0 R /XYZ 0 `+a(0)+` 0]`)}this.objEnd()}for(var d=0;d>`}),`transparency`in F&&Array.isArray(F.transparency)&&F.transparency.length>0){for(var pt=``,nt=0,ut=F.transparency.length;nt>`,O.content=o;var $=O.objId+` 0 R`;o=`<>`,B.content=o,this.internal.write(O.objId,`0 R`,B.objId,`0 R`);break;case`freetext`:a=`/Rect [`+f(i.bounds.x)+` `+l(i.bounds.y)+` `+f(i.bounds.x+i.bounds.w)+` `+l(i.bounds.y+i.bounds.h)+`] `;var D=`font: Helvetica,sans-serif 12.0pt; text-align:left; color:#`+(i.color||`#000000`);o=`<>`,this.internal.write(o);break;case`link`:if(i.options.name){var lt=this.annotations._nameMap[i.options.name];i.options.pageNumber=lt.page,i.options.top=lt.y}else i.options.top||(i.options.top=0);if(a=`/Rect [`+i.finalBounds.x+` `+i.finalBounds.y+` `+i.finalBounds.w+` `+i.finalBounds.h+`] `,o=``,i.options.url)o=`<>`;else if(i.options.pageNumber)switch(o=`<>`,this.internal.write(o))}}this.internal.write(`]`)}}]),t.createAnnotation=function(e){var i=this.internal.getCurrentPageInfo();switch(e.type){case`link`:this.link(e.bounds.x,e.bounds.y,e.bounds.w,e.bounds.h,e);break;case`text`:case`freetext`:i.pageContext.annotations.push(e)}},t.link=function(e,i,a,o,f){var l=this.internal.getCurrentPageInfo(),c=this.internal.getCoordinateString,d=this.internal.getVerticalCoordinateString;l.pageContext.annotations.push({finalBounds:{x:c(e),y:d(i),w:c(e+a),h:d(i+o)},options:f,type:`link`})},t.textWithLink=function(e,i,a,o){var f,l,c=this.getTextWidth(e),d=this.internal.getLineHeight()/this.internal.scaleFactor;if(o.maxWidth!==void 0){l=o.maxWidth;var m=this.splitTextToSize(e,l).length;f=Math.ceil(d*m)}else l=c,f=d;return this.text(e,i,a,o),a+=.2*d,o.align===`center`&&(i-=c/2),o.align===`right`&&(i-=c),this.link(i,a-d,l,f,o),c},t.getTextWidth=function(e){var i=this.internal.getFontSize();return this.getStringUnitWidth(e)*i/this.internal.scaleFactor}})(Mt.API),(function(t){var n={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},e={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},i={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},a=[1570,1571,1573,1575];t.__arabicParser__={};var o=t.__arabicParser__.isInArabicSubstitutionA=function(O){return n[O.charCodeAt(0)]!==void 0},f=t.__arabicParser__.isArabicLetter=function(O){return typeof O==`string`&&/^[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]+$/.test(O)},l=t.__arabicParser__.isArabicEndLetter=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length<=2},c=t.__arabicParser__.isArabicAlfLetter=function(O){return f(O)&&a.indexOf(O.charCodeAt(0))>=0};t.__arabicParser__.arabicLetterHasIsolatedForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length>=1};var d=t.__arabicParser__.arabicLetterHasFinalForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length>=2};t.__arabicParser__.arabicLetterHasInitialForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length>=3};var m=t.__arabicParser__.arabicLetterHasMedialForm=function(O){return f(O)&&o(O)&&n[O.charCodeAt(0)].length==4},A=t.__arabicParser__.resolveLigatures=function(O){var B=0,k=e,Z=``,$=0;for(B=0;B>`),this.internal.out(`endobj`)}),this.internal.events.subscribe(`putCatalog`,function(){this.internal.out(`/OpenAction `+n+` 0 R`)})),this},(function(t){var n=function(){var e=void 0;Object.defineProperty(this,"pdf",{get:function(){return e},set:function(l){e=l}});var i=150;Object.defineProperty(this,"width",{get:function(){return i},set:function(l){i=isNaN(l)||Number.isInteger(l)===!1||l<0?150:l,this.getContext(`2d`).pageWrapXEnabled&&(this.getContext(`2d`).pageWrapX=i+1)}});var a=300;Object.defineProperty(this,"height",{get:function(){return a},set:function(l){a=isNaN(l)||Number.isInteger(l)===!1||l<0?300:l,this.getContext(`2d`).pageWrapYEnabled&&(this.getContext(`2d`).pageWrapY=a+1)}});var o=[];Object.defineProperty(this,"childNodes",{get:function(){return o},set:function(l){o=l}});var f={};Object.defineProperty(this,"style",{get:function(){return f},set:function(l){f=l}}),Object.defineProperty(this,"parentNode",{})};n.prototype.getContext=function(e,i){var a;if((e=e||`2d`)!==`2d`)return null;for(a in i)this.pdf.context2d.hasOwnProperty(a)&&(this.pdf.context2d[a]=i[a]);return this.pdf.context2d._canvas=this,this.pdf.context2d},n.prototype.toDataURL=function(){throw new Error(`toDataURL is not implemented.`)},t.events.push([`initialized`,function(){this.canvas=new n,this.canvas.pdf=this}])})(Mt.API),(function(t){var n={left:0,top:0,bottom:0,right:0},e=!1,i=function(){this.internal.__cell__===void 0&&(this.internal.__cell__={},this.internal.__cell__.padding=3,this.internal.__cell__.headerFunction=void 0,this.internal.__cell__.margins=Object.assign({},n),this.internal.__cell__.margins.width=this.getPageWidth(),a.call(this))},a=function(){this.internal.__cell__.lastCell=new o,this.internal.__cell__.pages=1},o=function(){var c=arguments[0];Object.defineProperty(this,"x",{enumerable:!0,get:function(){return c},set:function(O){c=O}});var d=arguments[1];Object.defineProperty(this,"y",{enumerable:!0,get:function(){return d},set:function(O){d=O}});var m=arguments[2];Object.defineProperty(this,"width",{enumerable:!0,get:function(){return m},set:function(O){m=O}});var A=arguments[3];Object.defineProperty(this,"height",{enumerable:!0,get:function(){return A},set:function(O){A=O}});var L=arguments[4];Object.defineProperty(this,"text",{enumerable:!0,get:function(){return L},set:function(O){L=O}});var p=arguments[5];Object.defineProperty(this,"lineNumber",{enumerable:!0,get:function(){return p},set:function(O){p=O}});var T=arguments[6];return Object.defineProperty(this,"align",{enumerable:!0,get:function(){return T},set:function(O){T=O}}),this};o.prototype.clone=function(){return new o(this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align)},o.prototype.toArray=function(){return[this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align]},t.setHeaderFunction=function(c){return i.call(this),this.internal.__cell__.headerFunction=typeof c==`function`?c:void 0,this},t.getTextDimensions=function(c,d){i.call(this);var m=(d=d||{}).fontSize||this.getFontSize(),A=d.font||this.getFont(),L=d.scaleFactor||this.internal.scaleFactor,p=0,T=0,O=0,B=this;if(!Array.isArray(c)&&typeof c!=`string`){if(typeof c!=`number`)throw new Error(`getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.`);c=String(c)}var k=d.maxWidth;k>0?typeof c==`string`?c=this.splitTextToSize(c,k):Object.prototype.toString.call(c)===`[object Array]`&&(c=c.reduce(function($,D){return $.concat(B.splitTextToSize(D,k))},[])):c=Array.isArray(c)?c:[c];for(var Z=0;Zthis.getPageHeight()?(this.cellAddPage(),c.y=A.top,p&&L&&(this.printHeaderRow(c.lineNumber,!0),c.y+=L[0].height)):c.y=d.y+d.height||c.y),c.text[0]!==void 0&&(this.rect(c.x,c.y,c.width,c.height,e===!0?`FD`:void 0),c.align===`right`?this.text(c.text,c.x+c.width-m,c.y+m,{align:`right`,baseline:`top`}):c.align===`center`?this.text(c.text,c.x+c.width/2,c.y+m,{align:`center`,baseline:`top`,maxWidth:c.width-m-m}):this.text(c.text,c.x+m,c.y+m,{align:`left`,baseline:`top`,maxWidth:c.width-m-m})),this.internal.__cell__.lastCell=c,this};t.table=function(c,d,m,A,L){if(i.call(this),!m)throw new Error(`No data for PDF table.`);var p,T,O,B,k=[],Z=[],$=[],D={},lt={},_t=[],mt=[],tt=(L=L||{}).autoSize||!1,z=L.printHeaders!==!1,et=L.css&&L.css[`font-size`]!==void 0?16*L.css[`font-size`]:L.fontSize||12,N=L.margins||Object.assign({width:this.getPageWidth()},n),F=typeof L.padding==`number`?L.padding:3,U=L.headerBackgroundColor||`#c8c8c8`,q=L.headerTextColor||`#000`;if(a.call(this),this.internal.__cell__.printHeaders=z,this.internal.__cell__.margins=N,this.internal.__cell__.table_font_size=et,this.internal.__cell__.padding=F,this.internal.__cell__.headerBackgroundColor=U,this.internal.__cell__.headerTextColor=q,this.setFontSize(et),A==null)Z=k=Object.keys(m[0]),$=k.map(function(){return`left`});else if(Array.isArray(A)&&ye(A[0])===`object`)for(k=A.map(function(At){return At.name}),Z=A.map(function(At){return At.prompt||At.name||``}),$=A.map(function(At){return At.align||`left`}),p=0;p0&&this.setTableHeaderRow(L),this.setFont(void 0,`normal`),e=!1}})(Mt.API);su={italic:[`italic`,`oblique`,`normal`],oblique:[`oblique`,`italic`,`normal`],normal:[`normal`,`oblique`,`italic`]};lu=[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`];fh=ou(lu);hu=[100,200,300,400,500,600,700,800,900];f5=ou(hu);u5={"sans-serif":`helvetica`,fixed:`courier`,monospace:`courier`,terminal:`courier`,cursive:`times`,fantasy:`times`,serif:`times`};Df={caption:`times`,icon:`times`,menu:`times`,"message-box":`times`,"small-caption":`times`,"status-bar":`times`};;;;;;ah=[`times`];(function(t){var n,e,i,a,o,f,l,c,d,m=function(y){return y=y||{},this.isStrokeTransparent=y.isStrokeTransparent||!1,this.strokeOpacity=y.strokeOpacity||1,this.strokeStyle=y.strokeStyle||`#000000`,this.fillStyle=y.fillStyle||`#000000`,this.isFillTransparent=y.isFillTransparent||!1,this.fillOpacity=y.fillOpacity||1,this.font=y.font||`10px sans-serif`,this.textBaseline=y.textBaseline||`alphabetic`,this.textAlign=y.textAlign||`left`,this.lineWidth=y.lineWidth||1,this.lineJoin=y.lineJoin||`miter`,this.lineCap=y.lineCap||`butt`,this.path=y.path||[],this.transform=y.transform!==void 0?y.transform.clone():new c,this.globalCompositeOperation=y.globalCompositeOperation||`normal`,this.globalAlpha=y.globalAlpha||1,this.clip_path=y.clip_path||[],this.currentPoint=y.currentPoint||new f,this.miterLimit=y.miterLimit||10,this.lastPoint=y.lastPoint||new f,this.lineDashOffset=y.lineDashOffset||0,this.lineDash=y.lineDash||[],this.margin=y.margin||[0,0,0,0],this.prevPageLastElemOffset=y.prevPageLastElemOffset||0,this.ignoreClearRect=typeof y.ignoreClearRect!=`boolean`||y.ignoreClearRect,this};t.events.push([`initialized`,function(){this.context2d=new A(this),n=this.internal.f2,e=this.internal.getCoordinateString,i=this.internal.getVerticalCoordinateString,a=this.internal.getHorizontalCoordinate,o=this.internal.getVerticalCoordinate,f=this.internal.Point,l=this.internal.Rectangle,c=this.internal.Matrix,d=new m}]);var A=function(y){Object.defineProperty(this,"canvas",{get:function(){return{parentNode:!1,style:!1}}});var R=y;Object.defineProperty(this,"pdf",{get:function(){return R}});var j=!1;Object.defineProperty(this,"pageWrapXEnabled",{get:function(){return j},set:function(P){j=!!P}});var G=!1;Object.defineProperty(this,"pageWrapYEnabled",{get:function(){return G},set:function(P){G=!!P}});var Y=0;Object.defineProperty(this,"posX",{get:function(){return Y},set:function(P){isNaN(P)||(Y=P)}});var Q=0;Object.defineProperty(this,"posY",{get:function(){return Q},set:function(P){isNaN(P)||(Q=P)}}),Object.defineProperty(this,"margin",{get:function(){return d.margin},set:function(P){var Lt;typeof P==`number`?Lt=[P,P,P,P]:((Lt=new Array(4))[0]=P[0],Lt[1]=P.length>=2?P[1]:Lt[0],Lt[2]=P.length>=3?P[2]:Lt[0],Lt[3]=P.length>=4?P[3]:Lt[1]),d.margin=Lt}});var rt=!1;Object.defineProperty(this,"autoPaging",{get:function(){return rt},set:function(P){rt=P}});var at=0;Object.defineProperty(this,"lastBreak",{get:function(){return at},set:function(P){at=P}});var dt=[];Object.defineProperty(this,"pageBreaks",{get:function(){return dt},set:function(P){dt=P}}),Object.defineProperty(this,"ctx",{get:function(){return d},set:function(P){P instanceof m&&(d=P)}}),Object.defineProperty(this,"path",{get:function(){return d.path},set:function(P){d.path=P}});var xt=[];Object.defineProperty(this,"ctxStack",{get:function(){return xt},set:function(P){xt=P}}),Object.defineProperty(this,"fillStyle",{get:function(){return this.ctx.fillStyle},set:function(P){var Lt=L(P);this.ctx.fillStyle=Lt.style,this.ctx.isFillTransparent=Lt.a===0,this.ctx.fillOpacity=Lt.a,this.pdf.setFillColor(Lt.r,Lt.g,Lt.b,{a:Lt.a}),this.pdf.setTextColor(Lt.r,Lt.g,Lt.b,{a:Lt.a})}}),Object.defineProperty(this,"strokeStyle",{get:function(){return this.ctx.strokeStyle},set:function(P){var Lt=L(P);this.ctx.strokeStyle=Lt.style,this.ctx.isStrokeTransparent=Lt.a===0,this.ctx.strokeOpacity=Lt.a,Lt.a===0?this.pdf.setDrawColor(255,255,255):(Lt.a,this.pdf.setDrawColor(Lt.r,Lt.g,Lt.b))}}),Object.defineProperty(this,"lineCap",{get:function(){return this.ctx.lineCap},set:function(P){[`butt`,`round`,`square`].indexOf(P)!==-1&&(this.ctx.lineCap=P,this.pdf.setLineCap(P))}}),Object.defineProperty(this,"lineWidth",{get:function(){return this.ctx.lineWidth},set:function(P){isNaN(P)||(this.ctx.lineWidth=P,this.pdf.setLineWidth(P))}}),Object.defineProperty(this,"lineJoin",{get:function(){return this.ctx.lineJoin},set:function(P){[`bevel`,`round`,`miter`].indexOf(P)!==-1&&(this.ctx.lineJoin=P,this.pdf.setLineJoin(P))}}),Object.defineProperty(this,"miterLimit",{get:function(){return this.ctx.miterLimit},set:function(P){isNaN(P)||(this.ctx.miterLimit=P,this.pdf.setMiterLimit(P))}}),Object.defineProperty(this,"textBaseline",{get:function(){return this.ctx.textBaseline},set:function(P){this.ctx.textBaseline=P}}),Object.defineProperty(this,"textAlign",{get:function(){return this.ctx.textAlign},set:function(P){[`right`,`end`,`center`,`left`,`start`].indexOf(P)!==-1&&(this.ctx.textAlign=P)}});var St=null,kt=null,zt=null;Object.defineProperty(this,"fontFaces",{get:function(){return zt},set:function(P){St=null,kt=null,zt=P}}),Object.defineProperty(this,"font",{get:function(){return this.ctx.font},set:function(P){var Lt;if(this.ctx.font=P,(Lt=/^\s*(?=(?:(?:[-a-z]+\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\1|\2|\3)\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\d]+(?:\%|in|[cem]m|ex|p[ctx]))(?:\s*\/\s*(normal|[.\d]+(?:\%|in|[cem]m|ex|p[ctx])))?\s*([-_,\"\'\sa-z0-9]+?)\s*$/i.exec(P))!==null){var ae=Lt[1];Lt[2];var Ht=Lt[3],vt=Lt[4];Lt[5];var Wt=Lt[6],Et=/^([.\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i.exec(vt)[2];vt=Math.floor(Et===`px`?parseFloat(vt)*this.pdf.internal.scaleFactor:Et===`em`?parseFloat(vt)*this.pdf.getFontSize():parseFloat(vt)*this.pdf.internal.scaleFactor),this.pdf.setFontSize(vt);var qt=(function(jt){var He,ge,oe=[],se=jt.trim();if(se===``)return ah;if(se in Df)return[Df[se]];for(;se!==``;){switch(ge=null,He=(se=qf(se)).charAt(0)){case`"`:case`'`:ge=d5(se.substring(1),He);break;default:ge=p5(se)}if(ge===null||(oe.push(ge[0]),(se=qf(ge[1]))!==``&&se.charAt(0)!==`,`))return ah;se=se.replace(/^,/,``)}return oe})(Wt);if(this.fontFaces){var he=(function(jt,He,ge){for(var oe=(ge=ge||{}).defaultFontFamily||`times`,se=Object.assign({},u5,ge.genericFontFamilies||{}),Te=null,Ut=null,Pe=0;Pe=700||ae===`bold`)&&(Jt=`bold`),ae===`italic`&&(Jt+=`italic`),Jt.length===0&&(Jt=`normal`);for(var fe=``,ce={arial:`Helvetica`,Arial:`Helvetica`,verdana:`Helvetica`,Verdana:`Helvetica`,helvetica:`Helvetica`,Helvetica:`Helvetica`,"sans-serif":`Helvetica`,fixed:`Courier`,monospace:`Courier`,terminal:`Courier`,cursive:`Times`,fantasy:`Times`,serif:`Times`},Rt=0;Rt=2*Math.PI&&(G=0,Y=2*Math.PI),this.path.push({type:`arc`,x:y,y:R,radius:j,startAngle:G,endAngle:Y,counterclockwise:Q})},A.prototype.arcTo=function(y,R,j,G,Y){throw new Error(`arcTo not implemented.`)},A.prototype.rect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.rect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.rect`);this.moveTo(y,R),this.lineTo(y+j,R),this.lineTo(y+j,R+G),this.lineTo(y,R+G),this.lineTo(y,R),this.lineTo(y+j,R),this.lineTo(y,R)},A.prototype.fillRect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.fillRect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.fillRect`);if(!p.call(this)){var Y={};this.lineCap!==`butt`&&(Y.lineCap=this.lineCap,this.lineCap=`butt`),this.lineJoin!==`miter`&&(Y.lineJoin=this.lineJoin,this.lineJoin=`miter`),this.beginPath(),this.rect(y,R,j,G),this.fill(),Y.hasOwnProperty(`lineCap`)&&(this.lineCap=Y.lineCap),Y.hasOwnProperty(`lineJoin`)&&(this.lineJoin=Y.lineJoin)}},A.prototype.strokeRect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.strokeRect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.strokeRect`);T.call(this)||(this.beginPath(),this.rect(y,R,j,G),this.stroke())},A.prototype.clearRect=function(y,R,j,G){if(isNaN(y)||isNaN(R)||isNaN(j)||isNaN(G))throw ke.error(`jsPDF.context2d.clearRect: Invalid arguments`,arguments),new Error(`Invalid arguments passed to jsPDF.context2d.clearRect`);this.ignoreClearRect||(this.fillStyle=`#ffffff`,this.fillRect(y,R,j,G))},A.prototype.save=function(y){y=typeof y!=`boolean`||y;for(var R=this.pdf.internal.getCurrentPageInfo().pageNumber,j=0;j0||this.margin[1]>0||this.margin[2]>0||this.margin[3]>0};A.prototype.drawImage=function(y,R,j,G,Y,Q,rt,at,dt){var xt=this.pdf.getImageProperties(y),St=1,kt=1,zt=1,P=1;G!==void 0&&at!==void 0&&(zt=at/G,P=dt/Y,St=xt.width/G*at/G,kt=xt.height/Y*dt/Y),Q===void 0&&(Q=R,rt=j,R=0,j=0),G!==void 0&&at===void 0&&(at=G,dt=Y),G===void 0&&at===void 0&&(at=xt.width,dt=xt.height);var Lt=this.ctx.transform.decompose(),ae=nt(Lt.rotate.shx),Ht=new c,vt=(Ht=(Ht=(Ht=Ht.multiply(Lt.translate)).multiply(Lt.skew)).multiply(Lt.scale)).applyToRectangle(new l(Q-R*zt,rt-j*P,G*St,Y*kt));if(this.autoPaging){for(var Wt,Et=B.call(this,vt),qt=[],Dt=0;Dtwe||Jtvt||Et0)){for(;dt>=0;dt--)if(Y[dt-1].close!==!0&&Y[dt-1].begin!==!0){Y[dt-1].deltas.push(j),Y[dt-1].abs.push(at);break}}break;case`bct`:j=[at.x1-Q[rt-1].x,at.y1-Q[rt-1].y,at.x2-Q[rt-1].x,at.y2-Q[rt-1].y,at.x-Q[rt-1].x,at.y-Q[rt-1].y],Y[Y.length-1].deltas.push(j);break;case`qct`:var xt=Q[rt-1].x+2/3*(at.x1-Q[rt-1].x),St=Q[rt-1].y+2/3*(at.y1-Q[rt-1].y),kt=at.x+2/3*(at.x1-at.x),zt=at.y+2/3*(at.y1-at.y),P=at.x,Lt=at.y;j=[xt-Q[rt-1].x,St-Q[rt-1].y,kt-Q[rt-1].x,zt-Q[rt-1].y,P-Q[rt-1].x,Lt-Q[rt-1].y],Y[Y.length-1].deltas.push(j);break;case`arc`:Y.push({deltas:[],abs:[],arc:!0}),Array.isArray(Y[Y.length-1].abs)&&Y[Y.length-1].abs.push(at)}}G=R?null:y===`stroke`?`stroke`:`fill`;for(var ae=!1,Ht=0;Ht=.01&&(G=this.pdf.internal.getFontSize(),this.pdf.setFontSize(G*y.scale),Y=this.lineWidth,this.lineWidth=Y*y.scale);var ne=this.autoPaging!==`text`;if(ne||Rt.y+Rt.h<=Dt){if(ne||Rt.y>=Et&&Rt.x<=he){var jt=ne?y.text:this.pdf.splitTextToSize(y.text,y.maxWidth||he-Rt.x)[0],He=Z([JSON.parse(JSON.stringify(kt))],this.posX+this.margin[3],-fe+Et+this.ctx.prevPageLastElemOffset)[0],ge=ne&&(Wt>Ht||Wt=.01&&(this.pdf.setFontSize(G),this.lineWidth=Y)}}else y.scale>=.01&&(G=this.pdf.internal.getFontSize(),this.pdf.setFontSize(G*y.scale),Y=this.lineWidth,this.lineWidth=Y*y.scale),this.pdf.text(y.text,dt.x+this.posX,dt.y+this.posY,{angle:y.angle,align:R,renderingMode:y.renderingMode,maxWidth:y.maxWidth}),y.scale>=.01&&(this.pdf.setFontSize(G),this.lineWidth=Y)},U=function(y,R,j,G){j=j||0,G=G||0,this.pdf.internal.out(e(y+j)+` `+i(R+G)+` l`)},q=function(y,R,j){return this.pdf.lines(y,R,j,null,null)},it=function(y,R,j,G,Y,Q,rt,at){this.pdf.internal.out([n(a(j+y)),n(o(G+R)),n(a(Y+y)),n(o(Q+R)),n(a(rt+y)),n(o(at+R)),`c`].join(` `))},ft=function(y,R,j,G){for(var Y=2*Math.PI,Q=Math.PI/2;R>j;)R-=Y;var rt=Math.abs(j-R);rt1e-5;){var St=xt+dt*Math.min(rt,Q);at.push(pt.call(this,y,xt,St)),rt-=Math.abs(St-xt),xt=St}return at},pt=function(y,R,j){var G=(j-R)/2,Y=y*Math.cos(G),Q=y*Math.sin(G),rt=Y,at=-Q,dt=rt*rt+at*at,xt=dt+rt*Y+at*Q,St=4/3*(Math.sqrt(2*dt*xt)-xt)/(rt*Q-at*Y),kt=rt-St*at,zt=at+St*rt,P=kt,Lt=-zt,ae=G+R,Ht=Math.cos(ae),vt=Math.sin(ae);return{x1:y*Math.cos(R),y1:y*Math.sin(R),x2:kt*Ht-zt*vt,y2:kt*vt+zt*Ht,x3:P*Ht-Lt*vt,y3:P*vt+Lt*Ht,x4:y*Math.cos(j),y4:y*Math.sin(j)}},nt=function(y){return 180*y/Math.PI},ut=function(y,R,j,G,Y,Q){var rt=y+.5*(j-y),at=R+.5*(G-R),dt=Y+.5*(j-Y),xt=Q+.5*(G-Q),St=Math.min(y,Y,rt,dt),kt=Math.max(y,Y,rt,dt),zt=Math.min(R,Q,at,xt),P=Math.max(R,Q,at,xt);return new l(St,zt,kt-St,P-zt)},At=function(y,R,j,G,Y,Q,rt,at){var dt,xt,St,kt,zt,P,Lt,ae,Ht,vt,Wt,Et,qt,Dt,we=j-y,he=G-R,Jt=Y-j,fe=Q-G,ce=rt-Y,Rt=at-Q;for(xt=0;xt<41;xt++)Ht=(Lt=(St=y+(dt=xt/40)*we)+dt*((zt=j+dt*Jt)-St))+dt*(zt+dt*(Y+dt*ce-zt)-Lt),vt=(ae=(kt=R+dt*he)+dt*((P=G+dt*fe)-kt))+dt*(P+dt*(Q+dt*Rt-P)-ae),xt==0?(Wt=Ht,Et=vt,qt=Ht,Dt=vt):(Wt=Math.min(Wt,Ht),Et=Math.min(Et,vt),qt=Math.max(qt,Ht),Dt=Math.max(Dt,vt));return new l(Math.round(Wt),Math.round(Et),Math.round(qt-Wt),Math.round(Dt-Et))},yt=function(){if(this.prevLineDash||this.ctx.lineDash.length||this.ctx.lineDashOffset){var y,R,j=(y=this.ctx.lineDash,R=this.ctx.lineDashOffset,JSON.stringify({lineDash:y,lineDashOffset:R}));this.prevLineDash!==j&&(this.pdf.setLineDash(this.ctx.lineDash,this.ctx.lineDashOffset),this.prevLineDash=j)}}})(Mt.API),(function(t){var n=function(f){var l,c,d,m,A,L,p,T,O,B;for(/[^\x00-\xFF]/.test(f),c=[],d=0,m=(f+=l=`\0\0\0\0`.slice(f.length%4||4)).length;m>d;d+=4)(A=(f.charCodeAt(d)<<24)+(f.charCodeAt(d+1)<<16)+(f.charCodeAt(d+2)<<8)+f.charCodeAt(d+3))!==0?(L=(A=((A=((A=((A=(A-(B=A%85))/85)-(O=A%85))/85)-(T=A%85))/85)-(p=A%85))/85)%85,c.push(L+33,p+33,T+33,O+33,B+33)):c.push(122);return(function(k,Z){for(var $=Z;$>0;$--)k.pop()})(c,l.length),String.fromCharCode.apply(String,c)+`~>`},e=function(f){var l,c,d,m,A,L=String,p=`length`,T=255,O=`charCodeAt`,B=`slice`,k=`replace`;for(f[B](-2),f=f[B](0,-2)[k](/\s/g,``)[k](`z`,`!!!!!`),d=[],m=0,A=(f+=l=`uuuuu`[B](f[p]%5||5))[p];A>m;m+=5)c=52200625*(f[O](m)-33)+614125*(f[O](m+1)-33)+7225*(f[O](m+2)-33)+85*(f[O](m+3)-33)+(f[O](m+4)-33),d.push(T&c>>24,T&c>>16,T&c>>8,T&c);return(function(Z,$){for(var D=$;D>0;D--)Z.pop()})(d,l[p]),L.fromCharCode.apply(L,d)},i=function(f){return f.split(``).map(function(l){return(`0`+l.charCodeAt().toString(16)).slice(-2)}).join(``)+`>`},a=function(f){var l=new RegExp(/^([0-9A-Fa-f]{2})+$/);if((f=f.replace(/\s/g,``)).indexOf(`>`)!==-1&&(f=f.substr(0,f.indexOf(`>`))),f.length%2&&(f+=`0`),l.test(f)===!1)return``;for(var c=``,d=0;dO&&(T=B,B=O,O=T);else{if(l!==`l`&&l!==`landscape`)throw`Invalid orientation: `+l;l=`l`,O>B&&(T=B,B=O,O=T)}return{width:B,height:O,unit:c,k:A,orientation:l}},t.html=function(l,c){(c=c||{}).callback=c.callback||function(){},c.html2canvas=c.html2canvas||{},c.html2canvas.canvas=c.html2canvas.canvas||this.canvas,c.jsPDF=c.jsPDF||this,c.fontFaces=c.fontFaces?c.fontFaces.map(rh):null;var d=new f(c);return c.worker?d:d.from(l).doCallback()}})(Mt.API),Mt.API.addJS=function(t){var n,e,i=(function(a){for(var o=``,f=0;f=0&&a[d]===`\\`;d--)c++;o+=c%2==0?`\\`+l:l}else o+=l}return o})(t);return this.internal.events.subscribe(`postPutResources`,function(){n=this.internal.newObject(),this.internal.out(`<<`),this.internal.out(`/Names [(EmbeddedJS) `+(n+1)+` 0 R]`),this.internal.out(`>>`),this.internal.out(`endobj`),e=this.internal.newObject(),this.internal.out(`<<`),this.internal.out(`/S /JavaScript`),this.internal.out(`/JS (`+i+`)`),this.internal.out(`>>`),this.internal.out(`endobj`)}),this.internal.events.subscribe(`putCatalog`,function(){n!==void 0&&e!==void 0&&this.internal.out(`/Names <>`)}),this},(function(t){var n;t.events.push([`postPutResources`,function(){var e=this,i=/^(\d+) 0 obj$/;if(this.outline.root.children.length>0)for(var a=e.outline.render().split(/\r\n/),o=0;o> endobj`)}var p=e.internal.newObject();for(e.internal.write(`<< /Names [ `),o=0;o>`,`endobj`),n=e.internal.newObject(),e.internal.write(`<< /Dests `+p+` 0 R`),e.internal.write(`>>`,`endobj`)}}]),t.events.push([`putCatalog`,function(){var e=this;e.outline.root.children.length>0&&(e.internal.write(`/Outlines`,this.outline.makeRef(this.outline.root)),this.outline.createNamedDestinations&&e.internal.write(`/Names `+n+` 0 R`))}]),t.events.push([`initialized`,function(){var e=this;e.outline={createNamedDestinations:!1,root:{children:[]}},e.outline.add=function(i,a,o){var f={title:a,options:o,children:[]};return i??=this.root,i.children.push(f),f},e.outline.render=function(){return this.ctx={},this.ctx.val=``,this.ctx.pdf=e,this.genIds_r(this.root),this.renderRoot(this.root),this.renderItems(this.root),this.ctx.val},e.outline.genIds_r=function(i){i.id=e.internal.newObjectDeferred();for(var a=0;a0&&(this.line(`/First `+this.makeRef(i.children[0])),this.line(`/Last `+this.makeRef(i.children[i.children.length-1]))),this.line(`/Count `+this.count_r({count:0},i)),this.objEnd()},e.outline.renderItems=function(i){for(var a=this.ctx.pdf.internal.getVerticalCoordinateString,o=0;o0&&this.line(`/Prev `+this.makeRef(i.children[o-1])),o0&&(this.line(`/First `+this.makeRef(f.children[0])),this.line(`/Last `+this.makeRef(f.children[f.children.length-1])));var l=this.count=this.count_r({count:0},f);if(l>0&&this.line(`/Count `+l),f.options&&f.options.pageNumber){var c=e.internal.getPageInfo(f.options.pageNumber);this.line(`/Dest [`+c.objId+` 0 R /XYZ 0 `+a(0)+` 0]`)}this.objEnd()}for(var d=0;d1){q=!0,ft=void 0;var Y=z*et;pt=new Uint8Array(Y);for(var Q=new DataView(N.buffer),rt=0;rt536870912)throw new Error(`Image dimensions exceed 512MB, which is too large.`);this.data=new Uint8Array(n);try{this[t]()}catch(e){ke.log(`bit decode error:`+e)}},ai.prototype.bit1=function(){var t,n=Math.ceil(this.width/8),e=n%4;for(t=this.height-1;t>=0;t--){for(var i=this.bottom_up?t:this.height-1-t,a=0;a>7-l&1];this.data[f+4*l]=c.blue,this.data[f+4*l+1]=c.green,this.data[f+4*l+2]=c.red,this.data[f+4*l+3]=255}e!==0&&(this.pos+=4-e)}},ai.prototype.bit4=function(){for(var t=Math.ceil(this.width/2),n=t%4,e=this.height-1;e>=0;e--){for(var i=this.bottom_up?e:this.height-1-e,a=0;a>4,c=15&o,d=this.palette[l];if(this.data[f]=d.blue,this.data[f+1]=d.green,this.data[f+2]=d.red,this.data[f+3]=255,2*a+1>=this.width)break;d=this.palette[c],this.data[f+4]=d.blue,this.data[f+4+1]=d.green,this.data[f+4+2]=d.red,this.data[f+4+3]=255}n!==0&&(this.pos+=4-n)}},ai.prototype.bit8=function(){for(var t=this.width%4,n=this.height-1;n>=0;n--){for(var e=this.bottom_up?n:this.height-1-n,i=0;i=0;e--){for(var i=this.bottom_up?e:this.height-1-e,a=0;a>5&n)/n*255|0,c=(o>>10&n)/n*255|0,d=o>>15?255:0,m=i*this.width*4+4*a;this.data[m]=c,this.data[m+1]=l,this.data[m+2]=f,this.data[m+3]=d}this.pos+=t}},ai.prototype.bit16=function(){for(var t=this.width%3,n=parseInt(`11111`,2),e=parseInt(`111111`,2),i=this.height-1;i>=0;i--){for(var a=this.bottom_up?i:this.height-1-i,o=0;o>5&e)/e*255|0,d=(f>>11)/n*255|0,m=a*this.width*4+4*o;this.data[m]=d,this.data[m+1]=c,this.data[m+2]=l,this.data[m+3]=255}this.pos+=t}},ai.prototype.bit24=function(){for(var t=this.height-1;t>=0;t--){for(var n=this.bottom_up?t:this.height-1-t,e=0;e=0;t--)for(var n=this.bottom_up?t:this.height-1-t,e=0;ei&&(a.push(t.slice(c,o)),l=0,c=o),l+=n[o],o++;return c!==o&&a.push(t.slice(c,o)),a},Wf=function(t,n,e){e||(e={});var i,a,o,f,l,c,d,m=[],A=[m],L=e.textIndent||0,p=0,T=0,O=t.split(` `),B=Ns.apply(this,[` `,e])[0];if(c=e.lineIndent===-1?O[0].length+2:e.lineIndent||0){var k=Array(c).join(` `),Z=[];O.map(function(D){(D=D.split(/\s*\n/)).length>1?Z=Z.concat(D.map(function(lt,_t){return(_t&<.length?` `:``)+lt})):Z.push(D[0])}),O=Z,c=zf.apply(this,[k,e])}for(o=0,f=O.length;on||$){if(T>n){for(l=Hf.apply(this,[i,a,n-(L+p),n]),m.push(l.shift()),m=[l.pop()];l.length;)A.push([l.shift()]);T=a.slice(i.length-(m[0]?m[0].length:0)).reduce(function(D,lt){return D+lt},0)}else m=[i];A.push(m),L=T+c,p=B}else m.push(i),L+=p+T,p=B}return d=c?function(D,lt){return(lt?k:``)+D.join(` `)}:function(D){return D.join(` `)},A.map(d)},ya.splitTextToSize=function(t,n,e){var i,a=(e=e||{}).fontSize||this.internal.getFontSize(),o=function(m){if(m.widths&&m.kerning)return{widths:m.widths,kerning:m.kerning};var A=this.internal.getFont(m.fontName,m.fontStyle),L=`Unicode`;return A.metadata[L]?{widths:A.metadata[L].widths||{0:1},kerning:A.metadata[L].kerning||{}}:{font:A.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}.call(this,e);i=Array.isArray(t)?t:String(t).split(/\r?\n/);var f=1*this.internal.scaleFactor*n/a;o.textIndent=e.textIndent?1*e.textIndent*this.internal.scaleFactor/a:0,o.lineIndent=e.lineIndent;var l,c,d=[];for(l=0,c=i.length;l1){for(m=0;mn||$){if(T>n){for(l=Hf.apply(this,[i,a,n-(L+p),n]),m.push(l.shift()),m=[l.pop()];l.length;)A.push([l.shift()]);T=a.slice(i.length-(m[0]?m[0].length:0)).reduce(function(D,lt){return D+lt},0)}else m=[i];A.push(m),L=T+c,p=B}else m.push(i),L+=p+T,p=B}return d=c?function(D,lt){return(lt?k:``)+D.join(` `)}:function(D){return D.join(` `)},A.map(d)},ya.splitTextToSize=function(t,n,e){var i,a=(e=e||{}).fontSize||this.internal.getFontSize(),o=function(m){if(m.widths&&m.kerning)return{widths:m.widths,kerning:m.kerning};var A=this.internal.getFont(m.fontName,m.fontStyle),L=`Unicode`;return A.metadata[L]?{widths:A.metadata[L].widths||{0:1},kerning:A.metadata[L].kerning||{}}:{font:A.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}.call(this,e);i=Array.isArray(t)?t:String(t).split(/\r?\n/);var f=1*this.internal.scaleFactor*n/a;o.textIndent=e.textIndent?1*e.textIndent*this.internal.scaleFactor/a:0,o.lineIndent=e.lineIndent;var l,c,d=[];for(l=0,c=i.length;l1){for(m=0;mr.length)&&(i=r.length);for(var s=0,c=Array(i);sr.length)&&(i=r.length);for(var s=0,c=Array(i);s1?s-1:0),f=1;f2&&arguments[2]!==void 0?arguments[2]:_t;if(Be&&Be(r,null),!at(i))return r;let c=i.length;for(;c--;){let f=i[c];if(typeof f==`string`){let d=s(f);d!==f&&(Bn(i)||(i[c]=d),f=d)}r[f]=!0}return r}function Jn(r){for(let i=0;i0&&arguments[0]!==void 0?arguments[0]:_o(),i=o=>sn(o);if(i.version=`3.4.14`,i.removed=[],!r||!r.document||r.document.nodeType!==M.document||!r.Element)return i.isSupported=!1,i;let s=r.document,c=s,f=c.currentScript;r.DocumentFragment;let d=r.HTMLTemplateElement,y=r.Node,st=r.Element,N=r.NodeFilter;r.NamedNodeMap===void 0&&(r.NamedNodeMap||r.MozNamedAttrMap),r.HTMLFormElement;let xt=r.DOMParser,gt=r.trustedTypes,G=st.prototype,ln=P(G,`cloneNode`),vt=P(G,`remove`),cn=P(G,`nextSibling`),q=P(G,`childNodes`),K=P(G,`parentNode`),ce=P(G,`shadowRoot`),kt=P(G,`attributes`),W=y&&y.prototype?P(y.prototype,`nodeType`):null,Z=y&&y.prototype?P(y.prototype,`nodeName`):null,Et=y&&y.prototype?P(y.prototype,`ownerDocument`):null,ct=function(t){return W?W(t):t.nodeType},Ut=function(t){return Z?Z(t):t.nodeName};if(typeof d==`function`){let o=s.createElement(`template`);o.content&&o.content.ownerDocument&&(s=o.content.ownerDocument)}let L,B=``,Ft,ue=!1,ut=0,fe=function(){if(ut>0)throw X(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},J=function(t){fe(),ut++;try{return L.createHTML(t)}finally{ut--}},un=function(t){fe(),ut++;try{return L.createScriptURL(t)}finally{ut--}},fn=function(){return ue||(Ft=go(gt,f),ue=!0),Ft},At=s,zt=At.implementation,pe=At.createNodeIterator,pn=At.createDocumentFragment,mn=At.getElementsByTagName,dn=c.importNode,T=nn();i.isSupported=typeof on==`function`&&typeof K==`function`&&zt&&zt.createHTMLDocument!==void 0;let Tn=oo,hn=ro,_n=io,gn=ao,En=so,An=lo,me=co,yn=fo,de=Qe,h=null,Ht=p({},[...qe,...ne,...oe,...re,...Ke]),_=null,Gt=p({},[...Ze,...ie,...Je,...Pt]),x=Object.seal(it(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ft=null,Te=null,U=Object.seal(it(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),he=!0,Wt=!0,_e=!1,ge=!0,F=!1,Y=!0,j=!1,Bt=!1,yt=null,St=null,Yt=!1,Q=!1,bt=!1,Ot=!1,Ee=!0,Ae=!1,ye=`user-content-`,jt=!0,$t=!1,tt={},et=null,Se=p({},[`annotation-xml`,`audio`,`colgroup`,`desc`,`foreignobject`,`head`,`iframe`,`math`,`mi`,`mn`,`mo`,`ms`,`mtext`,`noembed`,`noframes`,`noscript`,`plaintext`,`script`,`selectedcontent`,`style`,`svg`,`template`,`thead`,`title`,`video`,`xmp`]),be=null,Oe=p({},[`audio`,`video`,`img`,`source`,`image`,`track`]),Re=null,Le=p({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),Rt=`http://www.w3.org/1998/Math/MathML`,Lt=`http://www.w3.org/2000/svg`,v=`http://www.w3.org/1999/xhtml`,nt=v,Xt=!1,Vt=null,Sn=p({},[Rt,Lt,v],ee),De=S([`mi`,`mo`,`mn`,`ms`,`mtext`]),qt=p({},De),we=S([`annotation-xml`]),Kt=p({},we),bn=p({},[`title`,`style`,`font`,`a`,`script`]),pt=null,On=[`application/xhtml+xml`,`text/html`],Rn=`text/html`,E=null,ot=null,Ln=s.createElement(`form`),Ie=function(t){return t instanceof RegExp||t instanceof Function},Zt=function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(ot&&ot===t)return;(!t||typeof t!=`object`)&&(t={}),t=C(t),pt=On.indexOf(t.PARSER_MEDIA_TYPE)===-1?Rn:t.PARSER_MEDIA_TYPE,E=pt===`application/xhtml+xml`?ee:_t,h=H(t,`ALLOWED_TAGS`,Ht,{transform:E}),_=H(t,`ALLOWED_ATTR`,Gt,{transform:E}),Vt=H(t,`ALLOWED_NAMESPACES`,Sn,{transform:ee}),Re=H(t,`ADD_URI_SAFE_ATTR`,Le,{transform:E,base:Le}),be=H(t,`ADD_DATA_URI_TAGS`,Oe,{transform:E,base:Oe}),et=H(t,`FORBID_CONTENTS`,Se,{transform:E}),ft=H(t,`FORBID_TAGS`,C({}),{transform:E}),Te=H(t,`FORBID_ATTR`,C({}),{transform:E}),tt=I(t,`USE_PROFILES`)?t.USE_PROFILES&&typeof t.USE_PROFILES==`object`?C(t.USE_PROFILES):t.USE_PROFILES:!1,he=t.ALLOW_ARIA_ATTR!==!1,Wt=t.ALLOW_DATA_ATTR!==!1,_e=t.ALLOW_UNKNOWN_PROTOCOLS||!1,ge=t.ALLOW_SELF_CLOSE_IN_ATTR!==!1,F=t.SAFE_FOR_TEMPLATES||!1,Y=t.SAFE_FOR_XML!==!1,j=t.WHOLE_DOCUMENT||!1,Q=t.RETURN_DOM||!1,bt=t.RETURN_DOM_FRAGMENT||!1,Ot=t.RETURN_TRUSTED_TYPE||!1,Yt=t.FORCE_BODY||!1,Ee=t.SANITIZE_DOM!==!1,Ae=t.SANITIZE_NAMED_PROPS||!1,jt=t.KEEP_CONTENT!==!1,$t=t.IN_PLACE||!1,de=to(t.ALLOWED_URI_REGEXP)?t.ALLOWED_URI_REGEXP:Qe,nt=typeof t.NAMESPACE==`string`?t.NAMESPACE:v,qt=ae(t,`MATHML_TEXT_INTEGRATION_POINTS`,()=>p({},De)),Kt=ae(t,`HTML_INTEGRATION_POINTS`,()=>p({},we));let e=ae(t,`CUSTOM_ELEMENT_HANDLING`,()=>it(null));if(x=it(null),I(e,`tagNameCheck`)&&Ie(e.tagNameCheck)&&(x.tagNameCheck=e.tagNameCheck),I(e,`attributeNameCheck`)&&Ie(e.attributeNameCheck)&&(x.attributeNameCheck=e.attributeNameCheck),I(e,`allowCustomizedBuiltInElements`)&&typeof e.allowCustomizedBuiltInElements==`boolean`&&(x.allowCustomizedBuiltInElements=e.allowCustomizedBuiltInElements),b(x),F&&(Wt=!1),bt&&(Q=!0),tt&&(h=p({},Ke),_=it(null),tt.html===!0&&(p(h,qe),p(_,Ze)),tt.svg===!0&&(p(h,ne),p(_,ie),p(_,Pt)),tt.svgFilters===!0&&(p(h,oe),p(_,ie),p(_,Pt)),tt.mathMl===!0&&(p(h,re),p(_,Je),p(_,Pt))),U.tagCheck=null,U.attributeCheck=null,I(t,`ADD_TAGS`)&&(typeof t.ADD_TAGS==`function`?U.tagCheck=t.ADD_TAGS:at(t.ADD_TAGS)&&(h===Ht&&(h=C(h)),p(h,t.ADD_TAGS,E))),I(t,`ADD_ATTR`)&&(typeof t.ADD_ATTR==`function`?U.attributeCheck=t.ADD_ATTR:at(t.ADD_ATTR)&&(_===Gt&&(_=C(_)),p(_,t.ADD_ATTR,E))),I(t,`ADD_FORBID_CONTENTS`)&&at(t.ADD_FORBID_CONTENTS)&&(et===Se&&(et=C(et)),p(et,t.ADD_FORBID_CONTENTS,E)),jt&&(h[`#text`]=!0),j&&p(h,[`html`,`head`,`body`]),h.table&&(p(h,[`tbody`]),delete ft.tbody),t.TRUSTED_TYPES_POLICY){if(typeof t.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw X(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof t.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw X(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let n=L;L=t.TRUSTED_TYPES_POLICY;try{B=J(``)}catch(a){throw L=n,a}}else t.TRUSTED_TYPES_POLICY===null?(L=void 0,B=``):(L===void 0&&(L=fn()),L&&typeof B==`string`&&(B=J(``)));S&&S(t),ot=t},Ne=p({},[...ne,...oe,...eo]),Me=p({},[...re,...no]),Dn=function(t,e,n){return e.namespaceURI===v?t===`svg`:e.namespaceURI===Rt?t===`svg`&&(n===`annotation-xml`||qt[n]):!!Ne[t]},wn=function(t,e,n){return e.namespaceURI===v?t===`math`:e.namespaceURI===Lt?t===`math`&&Kt[n]:!!Me[t]},In=function(t,e,n){return e.namespaceURI===Lt&&!Kt[n]||e.namespaceURI===Rt&&!qt[n]?!1:!Me[t]&&(bn[t]||!Ne[t])},Nn=function(t){let e=K(t);(!e||!e.tagName)&&(e={namespaceURI:nt,tagName:`template`});let n=_t(t.tagName),a=_t(e.tagName);return Vt[t.namespaceURI]?t.namespaceURI===Lt?Dn(n,e,a):t.namespaceURI===Rt?wn(n,e,a):t.namespaceURI===v?In(n,e,a):!!(pt===`application/xhtml+xml`&&Vt[t.namespaceURI]):!1},z=function(t){dt(i.removed,{element:t});try{K(t).removeChild(t)}catch{if(vt(t),!K(t))throw X(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},Ce=function(t,e,n){try{t.removeAttributeNode(e)}catch{try{t.removeAttribute(n)}catch{}}},Dt=function(t){wt(t);let e=q(t);if(e){let a=[];V(e,l=>{dt(a,l)}),V(a,l=>{try{vt(l)}catch{}})}let n=kt(t);if(n)for(let a=n.length-1;a>=0;--a){let l=n[a],u=l&&l.name;typeof u==`string`&&Ce(t,l,u)}},$=function(t,e,n){if(!n)try{n=e.getAttributeNode(t)}catch{n=null}dt(i.removed,{attribute:n||null,from:e});try{n?e.removeAttributeNode(n):e.removeAttribute(t)}catch{try{e.removeAttribute(t)}catch{}}if(t===`is`)if(Q||bt)try{z(e)}catch{}else try{e.setAttribute(t,``)}catch{}},Mn=function(t){let e=kt(t);if(e)for(let n=e.length-1;n>=0;--n){let a=e[n],l=a&&a.name;typeof l!=`string`||_[E(l)]||Ce(t,a,l)}},wt=function(t){let e=[t];for(;e.length>0;){let n=e.pop();ct(n)===M.element&&Mn(n);let l=q(n);if(l)for(let u=l.length-1;u>=0;--u)e.push(l[u])}},Pe=function(t,e){return Y?t===`patchsrc`?!0:t===`for`&&e!==`label`&&e!==`output`:!1},Cn=function(t){if(!Y)return;let e=[t];for(;e.length>0;){let n=e.pop(),a=ct(n);if(a===M.processingInstruction||a===M.comment&&O(en,n.data)){try{vt(n)}catch{}continue}if(a===M.element){let u=n,m=E(Ut(n));try{u.hasAttribute&&u.hasAttribute(`patchsrc`)&&u.removeAttribute(`patchsrc`),u.hasAttribute&&u.hasAttribute(`for`)&&Pe(`for`,m)&&u.removeAttribute(`for`)}catch{}}let l=q(n);if(l)for(let u=l.length-1;u>=0;--u)e.push(l[u])}},xe=function(t){let e=null,n=null;if(Yt)t=``+t;else{let u=je(t,/^[\r\n\t ]+/);n=u&&u[0]}pt===`application/xhtml+xml`&&nt===v&&(t=``+t+``);let a=L?J(t):t;if(nt===v)try{e=new xt().parseFromString(a,pt)}catch{}if(!e||!e.documentElement){e=zt.createDocument(nt,`template`,null);try{e.documentElement.innerHTML=Xt?B:a}catch{}}let l=e.body||e.documentElement;return t&&n&&l.insertBefore(s.createTextNode(n),l.childNodes[0]||null),nt===v?mn.call(e,j?`html`:`body`)[0]:j?e.documentElement:l},ve=function(t){let e=Et?Et(t):t.ownerDocument;return pe.call(e||t,t,N.SHOW_ELEMENT|N.SHOW_COMMENT|N.SHOW_TEXT|N.SHOW_PROCESSING_INSTRUCTION|N.SHOW_CDATA_SECTION,null)},It=function(t){return t=Tt(t,Tn,` `),t=Tt(t,hn,` `),t=Tt(t,_n,` `),t},Jt=function(t){var e;t.normalize();let n=Et?Et(t):t.ownerDocument,a=pe.call(n||t,t,N.SHOW_TEXT|N.SHOW_COMMENT|N.SHOW_CDATA_SECTION|N.SHOW_PROCESSING_INSTRUCTION,null),l=a.nextNode();for(;l;)l.data=It(l.data),l=a.nextNode();let u=(e=t.querySelectorAll)===null||e===void 0?void 0:e.call(t,`template`);u&&V(u,m=>{rt(m.content)&&Jt(m.content)})},Nt=function(t){let e=Z?Z(t):null;return typeof e!=`string`||E(e)!==`form`?!1:typeof t.nodeName!=`string`||typeof t.textContent!=`string`||typeof t.removeChild!=`function`||t.attributes!==kt(t)||typeof t.removeAttribute!=`function`||typeof t.setAttribute!=`function`||typeof t.namespaceURI!=`string`||typeof t.insertBefore!=`function`||typeof t.hasChildNodes!=`function`||t.nodeType!==W(t)||t.childNodes!==q(t)},rt=function(t){if(!W||typeof t!=`object`||t===null)return!1;try{return W(t)===M.documentFragment}catch{return!1}},mt=function(t){if(!W||typeof t!=`object`||t===null)return!1;try{return typeof W(t)==`number`}catch{return!1}};function k(o,t,e){o.length!==0&&V(o,n=>{n.call(i,t,e,ot)})}let Pn=function(t,e){return!!(Y&&t.hasChildNodes()&&!mt(t.firstElementChild)&&O(tn,t.textContent)&&O(tn,t.innerHTML)||Y&&t.namespaceURI===v&&To[e]&&(mt(t.firstElementChild)||typeof t.textContent==`string`&&O(ho[e],t.textContent))||t.nodeType===M.processingInstruction||Y&&t.nodeType===M.comment&&O(en,t.data))},Mt=function(t,e){if(t instanceof RegExp)return O(t,e);if(t instanceof Function){for(var n=arguments.length,a=new Array(n>2?n-2:0),l=2;l=0;--m){let g=t===n?ln(l[m],!0):l[m];a.insertBefore(g,cn(t))}}}return z(t),!0},ke=function(t,e,n,a){return t.length===0?e:e===n||e===a?C(e):e},Ue=function(t,e){return t===e||K(t)!==null?!1:($t&&wt(t),!0)},Fe=function(t,e){if(k(T.beforeSanitizeElements,t,null),Ue(t,e))return!0;if(Nt(t))return z(t),!0;let n=E(Ut(t));if(h=ke(T.uponSanitizeElement,h,Ht,yt),k(T.uponSanitizeElement,t,{tagName:n,allowedTags:h}),Ue(t,e))return!0;if(Pn(t,n))return z(t),!0;if(ft[n]||!(U.tagCheck instanceof Function&&U.tagCheck(n))&&!h[n]){let l=xn(t,n,e);return l===!1&&k(T.afterSanitizeElements,t,null),l}if(ct(t)===M.element&&!Nn(t)||(n===`noscript`||n===`noembed`||n===`noframes`)&&O(po,t.innerHTML))return z(t),!0;if(F&&t.nodeType===M.text){let l=It(t.textContent);t.textContent!==l&&(dt(i.removed,{element:t.cloneNode()}),t.textContent=l)}return k(T.afterSanitizeElements,t,null),!1},ze=function(t,e,n){if(Te[e]||Pe(e,t)||Ee&&(e===`id`||e===`name`)&&(n in s||n in Ln))return!1;let a=_[e]||U.attributeCheck instanceof Function&&U.attributeCheck(e,t);return Wt&&O(gn,e)||he&&O(En,e)?!0:a?Re[e]||O(de,Tt(n,me,``))||(e===`src`||e===`xlink:href`||e===`href`)&&t!==`script`&&$e(n,`data:`)===0&&be[t]||_e&&!O(An,Tt(n,me,``))?!0:!n:He(t)&&Mt(x.tagNameCheck,t)&&Mt(x.attributeNameCheck,e,t)||e===`is`&&x.allowCustomizedBuiltInElements&&Mt(x.tagNameCheck,n)},vn=p({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),He=function(t){return!vn[_t(t)]&&O(yn,t)},kn=function(t,e,n,a){if(L&&typeof gt==`object`&&typeof gt.getAttributeType==`function`&&!n)switch(gt.getAttributeType(t,e)){case`TrustedHTML`:return J(a);case`TrustedScriptURL`:return un(a)}return a},Un=function(t,e,n,a){try{n?t.setAttributeNS(n,e,a):t.setAttribute(e,a),Nt(t)?z(t):Ye(i.removed)}catch{$(e,t)}},Ge=function(t){k(T.beforeSanitizeAttributes,t,null);let e=t.attributes;if(!e||Nt(t))return;_=ke(T.uponSanitizeAttribute,_,Gt,St);let n={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:_,forceKeepAttr:void 0},a=e.length,l=E(t.nodeName);for(;a--;){let u=e[a],m=u.name,g=u.namespaceURI,D=u.value,w=E(m),te=D,R=m===`value`?te:Vn(te);if(n.attrName=w,n.attrValue=R,n.keepAttr=!0,n.forceKeepAttr=void 0,k(T.uponSanitizeAttribute,t,n),R=n.attrValue,Ae&&(w===`id`||w===`name`)&&$e(R,ye)!==0&&($(m,t,u),R=ye+R),Y&&O(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,R)){$(m,t,u);continue}if(w===`attributename`&&je(R,`href`)){$(m,t,u);continue}if(!n.forceKeepAttr){if(!n.keepAttr){$(m,t,u);continue}if(!ge&&O(mo,R)){$(m,t,u);continue}if(F&&(R=It(R)),!ze(l,w,R)){$(m,t,u);continue}R=kn(l,w,g,R),R!==te&&Un(t,m,g,R)}}k(T.afterSanitizeAttributes,t,null)},Ct=function(t){let e=null,n=ve(t);for(k(T.beforeSanitizeShadowDOM,t,null);e=n.nextNode();)if(k(T.uponSanitizeShadowNode,e,null),Fe(e,t),Ge(e),rt(e.content)&&Ct(e.content),ct(e)===M.element){let a=ce(e);rt(a)&&(Qt(a),Ct(a))}k(T.afterSanitizeShadowDOM,t,null)},Qt=function(t){let e=[{node:t,shadow:null}];for(;e.length>0;){let n=e.pop();if(n.shadow){Ct(n.shadow);continue}let a=n.node,u=ct(a)===M.element,m=q(a);if(m)for(let g=m.length-1;g>=0;--g)e.push({node:m[g],shadow:null});if(u){let g=Z?Z(a):null;if(typeof g==`string`&&E(g)===`template`){let D=a.content;rt(D)&&e.push({node:D,shadow:null})}}if(u){let g=ce(a);rt(g)&&e.push({node:null,shadow:g},{node:g,shadow:null})}}};return i.sanitize=function(o){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},e=null,n=null,a=null,l=null;if(Xt=!o,Xt&&(o=``),typeof o!=`string`&&!mt(o)&&(o=Qn(o),typeof o!=`string`))throw X(`dirty is not a string, aborting`);if(!i.isSupported)return o;Bt?(h=yt,_=St):Zt(t),(T.uponSanitizeElement.length>0||T.uponSanitizeAttribute.length>0)&&(h=C(h)),T.uponSanitizeAttribute.length>0&&(_=C(_)),i.removed=[];let u=$t&&typeof o!=`string`&&mt(o);if(u){Cn(o);let D=Ut(o);if(typeof D==`string`){let w=E(D);if(!h[w]||ft[w])throw Dt(o),X(`root node is forbidden and cannot be sanitized in-place`)}if(Nt(o))throw Dt(o),X(`root node is clobbered and cannot be sanitized in-place`);try{Qt(o)}catch(w){throw Dt(o),w}}else if(mt(o))e=xe(``),n=e.ownerDocument.importNode(o,!0),n.nodeType===M.element&&n.nodeName===`BODY`||n.nodeName===`HTML`?e=n:e.appendChild(n),Qt(n);else{if(!Q&&!F&&!j&&o.indexOf(`<`)===-1)return L&&Ot?J(o):o;if(e=xe(o),!e)return Q?null:Ot?B:``}e&&Yt&&z(e.firstChild);let m=u?o:e;try{let D=ve(m);for(;a=D.nextNode();)Fe(a,m),Ge(a),rt(a.content)&&Ct(a.content)}catch(D){throw u&&(Dt(o),V(i.removed,w=>{w.element&&wt(w.element)})),D}if(u)return V(i.removed,D=>{D.element&&wt(D.element)}),F&&Jt(o),o;if(Q){if(F&&Jt(e),bt)for(l=pn.call(e.ownerDocument);e.firstChild;)l.appendChild(e.firstChild);else l=e;return(_.shadowroot||_.shadowrootmode)&&(l=dn.call(c,l,!0)),l}let g=j?e.outerHTML:e.innerHTML;return j&&h[`!doctype`]&&e.ownerDocument&&e.ownerDocument.doctype&&e.ownerDocument.doctype.name&&O(uo,e.ownerDocument.doctype.name)&&(g=` `+g),F&&(g=It(g)),L&&Ot?J(g):g},i.setConfig=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Zt(o),Bt=!0,yt=h,St=_},i.clearConfig=function(){ot=null,Bt=!1,yt=null,St=null,L=Ft,B=``},i.isValidAttribute=function(o,t,e){ot||Zt({});let n=E(o),a=E(t);return ze(n,a,e)},i.addHook=function(o,t){typeof t==`function`&&I(T,o)&&dt(T[o],t)},i.removeHook=function(o,t){if(I(T,o)){if(t!==void 0){let e=$n(T[o],t);return e===-1?void 0:Xn(T[o],e,1)[0]}return Ye(T[o])}},i.removeHooks=function(o){I(T,o)&&(T[o]=[])},i.removeAllHooks=function(){T=nn()},i}var on,Be,Bn,Yn,jn,S,b,it,rn,se,le,V,$n,Ye,dt,Xn,at,_t,ee,je,Tt,$e,Vn,qn,Kn,Xe,Ve,I,ht,O,X,qe,ne,oe,eo,re,no,Ke,Ze,ie,Je,Pt,oo,ro,io,ao,so,Qe,lo,co,uo,fo,tn,en,po,mo,M,an,To,ho,_o,go,nn,H,ae,Eo;var init_chunk_3SJW2DGQ=__esmMin((()=>{on=Object.entries;Be=Object.setPrototypeOf;Bn=Object.isFrozen;Yn=Object.getPrototypeOf;jn=Object.getOwnPropertyDescriptor;S=Object.freeze;b=Object.seal;it=Object.create;rn=typeof Reflect<`u`&&Reflect;se=rn.apply;le=rn.construct;S||(S=function(i){return i});b||(b=function(i){return i});se||(se=function(i,s){for(var c=arguments.length,f=new Array(c>2?c-2:0),d=2;d1?s-1:0),f=1;f`u`?null:A(BigInt.prototype.toString);Ve=typeof Symbol>`u`?null:A(Symbol.prototype.toString);I=A(Object.prototype.hasOwnProperty);ht=A(Object.prototype.toString);O=A(RegExp.prototype.test);X=Zn(TypeError);qe=S([`a`,`abbr`,`acronym`,`address`,`area`,`article`,`aside`,`audio`,`b`,`bdi`,`bdo`,`big`,`blink`,`blockquote`,`body`,`br`,`button`,`canvas`,`caption`,`center`,`cite`,`code`,`col`,`colgroup`,`content`,`data`,`datalist`,`dd`,`decorator`,`del`,`details`,`dfn`,`dialog`,`dir`,`div`,`dl`,`dt`,`element`,`em`,`fieldset`,`figcaption`,`figure`,`font`,`footer`,`form`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`head`,`header`,`hgroup`,`hr`,`html`,`i`,`img`,`input`,`ins`,`kbd`,`label`,`legend`,`li`,`main`,`map`,`mark`,`marquee`,`menu`,`menuitem`,`meter`,`nav`,`nobr`,`ol`,`optgroup`,`option`,`output`,`p`,`picture`,`pre`,`progress`,`q`,`rp`,`rt`,`ruby`,`s`,`samp`,`search`,`section`,`select`,`shadow`,`slot`,`small`,`source`,`spacer`,`span`,`strike`,`strong`,`style`,`sub`,`summary`,`sup`,`table`,`tbody`,`td`,`template`,`textarea`,`tfoot`,`th`,`thead`,`time`,`tr`,`track`,`tt`,`u`,`ul`,`var`,`video`,`wbr`]);ne=S([`svg`,`a`,`altglyph`,`altglyphdef`,`altglyphitem`,`animatecolor`,`animatemotion`,`animatetransform`,`circle`,`clippath`,`defs`,`desc`,`ellipse`,`enterkeyhint`,`exportparts`,`filter`,`font`,`g`,`glyph`,`glyphref`,`hkern`,`image`,`inputmode`,`line`,`lineargradient`,`marker`,`mask`,`metadata`,`mpath`,`part`,`path`,`pattern`,`polygon`,`polyline`,`radialgradient`,`rect`,`stop`,`style`,`switch`,`symbol`,`text`,`textpath`,`title`,`tref`,`tspan`,`view`,`vkern`]);oe=S([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]);eo=S([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]);re=S([`math`,`menclose`,`merror`,`mfenced`,`mfrac`,`mglyph`,`mi`,`mlabeledtr`,`mmultiscripts`,`mn`,`mo`,`mover`,`mpadded`,`mphantom`,`mroot`,`mrow`,`ms`,`mspace`,`msqrt`,`mstyle`,`msub`,`msup`,`msubsup`,`mtable`,`mtd`,`mtext`,`mtr`,`munder`,`munderover`,`mprescripts`]);no=S([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]);Ke=S([`#text`]);Ze=S([`accept`,`action`,`align`,`alt`,`autocapitalize`,`autocomplete`,`autopictureinpicture`,`autoplay`,`background`,`bgcolor`,`border`,`capture`,`cellpadding`,`cellspacing`,`checked`,`cite`,`class`,`clear`,`color`,`cols`,`colspan`,`command`,`commandfor`,`controls`,`controlslist`,`coords`,`crossorigin`,`datetime`,`decoding`,`default`,`dir`,`disabled`,`disablepictureinpicture`,`disableremoteplayback`,`download`,`draggable`,`enctype`,`enterkeyhint`,`exportparts`,`face`,`for`,`headers`,`height`,`hidden`,`high`,`href`,`hreflang`,`id`,`inert`,`inputmode`,`integrity`,`ismap`,`kind`,`label`,`lang`,`list`,`loading`,`loop`,`low`,`max`,`maxlength`,`media`,`method`,`min`,`minlength`,`multiple`,`muted`,`name`,`nonce`,`noshade`,`novalidate`,`nowrap`,`open`,`optimum`,`part`,`pattern`,`placeholder`,`playsinline`,`popover`,`popovertarget`,`popovertargetaction`,`poster`,`preload`,`pubdate`,`radiogroup`,`readonly`,`rel`,`required`,`rev`,`reversed`,`role`,`rows`,`rowspan`,`spellcheck`,`scope`,`selected`,`shape`,`size`,`sizes`,`slot`,`span`,`srclang`,`start`,`src`,`srcset`,`step`,`style`,`summary`,`tabindex`,`title`,`translate`,`type`,`usemap`,`valign`,`value`,`width`,`wrap`,`xmlns`]);ie=S([`accent-height`,`accumulate`,`additive`,`alignment-baseline`,`amplitude`,`ascent`,`attributename`,`attributetype`,`azimuth`,`basefrequency`,`baseline-shift`,`begin`,`bias`,`by`,`class`,`clip`,`clippathunits`,`clip-path`,`clip-rule`,`color`,`color-interpolation`,`color-interpolation-filters`,`color-profile`,`color-rendering`,`cx`,`cy`,`d`,`dx`,`dy`,`diffuseconstant`,`direction`,`display`,`divisor`,`dominant-baseline`,`dur`,`edgemode`,`elevation`,`end`,`exponent`,`fill`,`fill-opacity`,`fill-rule`,`filter`,`filterunits`,`flood-color`,`flood-opacity`,`font-family`,`font-size`,`font-size-adjust`,`font-stretch`,`font-style`,`font-variant`,`font-weight`,`fx`,`fy`,`g1`,`g2`,`glyph-name`,`glyphref`,`gradientunits`,`gradienttransform`,`height`,`href`,`id`,`image-rendering`,`in`,`in2`,`intercept`,`k`,`k1`,`k2`,`k3`,`k4`,`kerning`,`keypoints`,`keysplines`,`keytimes`,`lang`,`lengthadjust`,`letter-spacing`,`kernelmatrix`,`kernelunitlength`,`lighting-color`,`local`,`marker-end`,`marker-mid`,`marker-start`,`markerheight`,`markerunits`,`markerwidth`,`maskcontentunits`,`maskunits`,`max`,`mask`,`mask-type`,`media`,`method`,`mode`,`min`,`name`,`numoctaves`,`offset`,`operator`,`opacity`,`order`,`orient`,`orientation`,`origin`,`overflow`,`paint-order`,`path`,`pathlength`,`patterncontentunits`,`patterntransform`,`patternunits`,`pointer-events`,`points`,`preservealpha`,`preserveaspectratio`,`primitiveunits`,`r`,`rx`,`ry`,`radius`,`refx`,`refy`,`repeatcount`,`repeatdur`,`restart`,`result`,`rotate`,`scale`,`seed`,`shape-rendering`,`slope`,`specularconstant`,`specularexponent`,`spreadmethod`,`startoffset`,`stddeviation`,`stitchtiles`,`stop-color`,`stop-opacity`,`stroke-dasharray`,`stroke-dashoffset`,`stroke-linecap`,`stroke-linejoin`,`stroke-miterlimit`,`stroke-opacity`,`stroke`,`stroke-width`,`style`,`surfacescale`,`systemlanguage`,`tabindex`,`tablevalues`,`targetx`,`targety`,`transform`,`transform-origin`,`text-anchor`,`text-decoration`,`text-orientation`,`text-rendering`,`textlength`,`type`,`u1`,`u2`,`unicode`,`values`,`vector-effect`,`viewbox`,`visibility`,`version`,`vert-adv-y`,`vert-origin-x`,`vert-origin-y`,`width`,`word-spacing`,`wrap`,`writing-mode`,`xchannelselector`,`ychannelselector`,`x`,`x1`,`x2`,`xmlns`,`y`,`y1`,`y2`,`z`,`zoomandpan`]);Je=S([`accent`,`accentunder`,`align`,`bevelled`,`close`,`columnalign`,`columnlines`,`columnspacing`,`columnspan`,`denomalign`,`depth`,`dir`,`display`,`displaystyle`,`encoding`,`fence`,`frame`,`height`,`href`,`id`,`largeop`,`length`,`linethickness`,`lquote`,`lspace`,`mathbackground`,`mathcolor`,`mathsize`,`mathvariant`,`maxsize`,`minsize`,`movablelimits`,`notation`,`numalign`,`open`,`rowalign`,`rowlines`,`rowspacing`,`rowspan`,`rspace`,`rquote`,`scriptlevel`,`scriptminsize`,`scriptsizemultiplier`,`selection`,`separator`,`separators`,`stretchy`,`subscriptshift`,`supscriptshift`,`symmetric`,`voffset`,`width`,`xmlns`]);Pt=S([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]);oo=b(/{{[\w\W]*|^[\w\W]*}}/g);ro=b(/<%[\w\W]*|^[\w\W]*%>/g);io=b(/\${[\w\W]*/g);ao=b(/^data-[\-\w.\u00B7-\uFFFF]+$/);so=b(/^aria-[\-\w]+$/);Qe=b(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);lo=b(/^(?:\w+script|data):/i);co=b(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);uo=b(/^html$/i);fo=b(/^[a-z][.\w]*(-[.\w]+)+$/i);tn=b(/<[/\w!]/g);en=b(/<[/\w]/g);po=b(/<\/no(script|embed|frames)/i);mo=b(/\/>/i);M={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12};an=[`style`,`script`,`xmp`,`iframe`,`noembed`,`noframes`,`plaintext`,`noscript`];To=S(p({},an));ho=(function(){let r={};return V(an,i=>{r[i]=b(new RegExp(`])`,`i`))}),S(r)})();_o=function(){return typeof window>`u`?null:window};go=function(i,s){if(typeof i!=`object`||typeof i.createPolicy!=`function`)return null;let c=null,f=`data-tt-policy-suffix`;s&&s.hasAttribute(f)&&(c=s.getAttribute(f));let d=`dompurify`+(c?`#`+c:``);try{return i.createPolicy(d,{createHTML(y){return y},createScriptURL(y){return y}})}catch{return console.warn(`TrustedTypes policy `+d+` could not be created.`),null}};nn=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};H=function(i,s,c,f){return I(i,s)&&at(i[s])?p(f.base?C(f.base):{},i[s],f.transform):c};ae=function(i,s,c){let f=I(i,s)?i[s]:void 0;return f&&typeof f==`object`?C(f):c()};Eo=sn()}));init_chunk_3SJW2DGQ();export{Eo as default}; \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index bcc0561..f4ff971 100644 --- a/docs/index.html +++ b/docs/index.html @@ -10,8 +10,8 @@ - + - + diff --git a/docs/main-ZSOIWSXQ.js b/docs/main-GF4OEYNH.js similarity index 77% rename from docs/main-ZSOIWSXQ.js rename to docs/main-GF4OEYNH.js index ea3bd2f..2ab1f67 100644 --- a/docs/main-ZSOIWSXQ.js +++ b/docs/main-GF4OEYNH.js @@ -1,10 +1,10 @@ -var __esmMin=(fn,res,err)=>()=>{if(err)throw err[0];try{return fn&&(res=fn(fn=0)),res}catch(e){throw err=[e],e}};var __commonJSMin=(cb,mod)=>()=>(mod||(cb((mod={exports:{}}).exports,mod),cb=null),mod.exports);function nn(r,n,t){return t||(t=n,n={}),typeof t!=`function`&&d(7),_r(r,n,[br],function(e){return Vr(Sr(e.data[0],e.data[1]))},0,t)}function Sr(r,n){return Ar(r,n||{},0,0)}function sn(r,n){n||(n={});var t=Rr();t.p(r);var e=Ar(r,n,n.dictionary?6:2,4);return rn(e,n),S(e,e.length-4,t.d()),e}function Zr(r,n){if(n){for(var t=new C(r.length),e=0;e>1)),o=0,s=function(f){i[o++]=f},e=0;ei.length){var u=new C(o+8+(a-e<<1));u.set(i),i=u}var h=r.charCodeAt(e);h<128||n?s(h):h<2048?(s(192|h>>6),s(128|h&63)):h>55295&&h<57344?(h=65536+(h&1047552)|r.charCodeAt(++e)&1023,s(240|h>>18),s(128|h>>12&63),s(128|h>>6&63),s(128|h&63)):(s(224|h>>12),s(128|h>>6&63),s(128|h&63))}return mr(i,0,o)}function fn(r,n,t){t||(t=n,n={}),typeof t!=`function`&&d(7);var e={};Wr(r,``,e,n);var a=Object.keys(e),i=a.length,o=0,s=0,u=i,h=new Array(i),f=[],y=function(){for(var g=0;g65535&&T(d(11,0,1),null),!V)T(null,F);else if(D<16e4)try{T(null,Sr(F,c))}catch(Z){T(Z,null)}else f.push(nn(F,c,T))},m=0;m{Cr={};jr=(function(r,n,t,e,a){var i=new Worker(Cr[n]||(Cr[n]=URL.createObjectURL(new Blob([r+`;addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})`],{type:`text/javascript`}))));return i.onmessage=function(o){var s=o.data,u=s.$e$;if(u){var h=new Error(u[0]);h.code=u[1],h.stack=u[2],a(h,null)}else a(null,s)},i.postMessage(t,e),i});C=Uint8Array;q$1=Uint16Array;ar=Int32Array;or=new C([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);sr=new C([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);vr=new C([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);Or=function(r,n){for(var t=new q$1(31),e=0;e<31;++e)t[e]=n+=1<>1|(p$1&21845)<<1,W=(W&52428)>>2|(W&13107)<<2,W=(W&61680)>>4|(W&3855)<<4,er[p$1]=((W&65280)>>8|(W&255)<<8)>>1;;;k$1=(function(r,n,t){for(var e=r.length,a=0,i=new q$1(n);a>u]=h}else for(s=new q$1(e),a=0;a>15-r[a]);return s});j$1=new C(288);for(p$1=0;p$1<144;++p$1)j$1[p$1]=8;;for(p$1=144;p$1<256;++p$1)j$1[p$1]=9;;for(p$1=256;p$1<280;++p$1)j$1[p$1]=7;;for(p$1=280;p$1<288;++p$1)j$1[p$1]=8;;_=new C(32);for(p$1=0;p$1<32;++p$1)_[p$1]=5;;Pr=k$1(j$1,9,0);$r=k$1(_,5,0);wr=function(r){return(r+7)/8|0};mr=function(r,n,t){return(n==null||n<0)&&(n=0),(t==null||t>r.length)&&(t=r.length),new C(r.subarray(n,t))};Kr=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`];d=function(r,n,t){var e=new Error(n||Kr[r]);if(e.code=r,Error.captureStackTrace&&Error.captureStackTrace(e,d),!t)throw e;return e};N=function(r,n,t){t<<=n&7;var e=n/8|0;r[e]|=t,r[e+1]|=t>>8};Q=function(r,n,t){t<<=n&7;var e=n/8|0;r[e]|=t,r[e+1]|=t>>8,r[e+2]|=t>>16};nr=function(r,n){for(var t=[],e=0;ew&&(w=i[e].s);var x=new q$1(w+1),I=ir(t[f-1],x,0);if(I>n){var e=0,m=0,g=I-n,G=1<n)m+=G-(1<>=g;m>0;){var F=i[e].s;x[F]=0&&m;--e){var c=i[e].s;x[c]==n&&(--x[c],++m)}I=n}return{t:new C(x),l:I}};ir=function(r,n,t){return r.s==-1?Math.max(ir(r.l,n,t+1),ir(r.r,n,t+1)):n[r.s]=t};pr=function(r){for(var n=r.length;n&&!r[--n];);for(var t=new q$1(++n),e=0,a=r[0],i=1,o=function(u){t[e++]=u},s=1;s<=n;++s)if(r[s]==a&&s!=n)++i;else{if(!a&&i>2){for(;i>138;i-=138)o(32754);i>2&&(o(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(o(a),--i;i>6;i-=6)o(8304);i>2&&(o(i-3<<5|8208),i=0)}for(;i--;)o(a);i=1,a=r[s]}return{c:t.subarray(0,e),n}};X=function(r,n){for(var t=0,e=0;e>8,r[a+2]=r[a]^255,r[a+3]=r[a+1]^255;for(var i=0;i4&&!U[vr[B-1]];--B);var V=h+5<<3,T=X(a,j$1)+X(i,_)+o,Z=X(a,w)+X(i,m)+o+14+3*B+X(z,U)+2*z[16]+3*z[17]+7*z[18];if(u>=0&&V<=T&&V<=Z)return xr(n,f,r.subarray(u,u+h));var L,A,P,Y;if(N(n,f,1+(Z15&&(N(n,f,J[v]>>5&127),f+=J[v]>>12)}}else L=Pr,A=j$1,P=$r,Y=_;for(var v=0;v255){var H=E>>18&31;Q(n,f,L[H+257]),f+=A[H+257],H>7&&(N(n,f,E>>23&31),f+=or[H]);var K=E&31;Q(n,f,P[K]),f+=Y[K],K>3&&(Q(n,f,E>>5&8191),f+=sr[K])}else Q(n,f,L[E]),f+=A[E]}return Q(n,f,L[256]),f+A[256]};Hr=new ar([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]);zr=new C(0);Nr=function(r,n,t,e,a,i){var o=i.z||r.length,s=new C(e+o+5*(1+Math.ceil(o/7e3))+a),u=s.subarray(e,s.length-a),h=i.l,f=(i.r||0)&7;if(n){f&&(u[0]=i.r>>3);for(var y=Hr[n-1],w=y>>13,x=y&8191,I=(1<7e3||U>24576)&&(L>423||!h)){f=gr(r,u,0,c,M,D,v,U,B,l-B,f),U=z=v=0,B=l;for(var A=0;A<286;++A)M[A]=0;for(var A=0;A<30;++A)D[A]=0}var P=2,Y=0,fr=x,$=T-Z&32767;if(L>2&&V==F(l-$))for(var b=Math.min(w,L)-1,J=Math.min(32767,l),H=Math.min(258,L);$<=J&&--fr&&T!=Z;){if(r[l+P]==r[l+P-$]){for(var E=0;EP){if(P=E,Y=$,E>b)break;for(var K=Math.min($,E-2),Ur=0,A=0;AUr&&(Ur=Fr,Z=hr)}}}T=Z,Z=m[T],$+=T-Z&32767}if(Y){c[U++]=268435456|tr[P]<<18|cr[Y];var Dr=tr[P]&31,Tr=cr[Y]&31;v+=or[Dr]+sr[Tr],++M[257+Dr],++D[Tr],R=l+P,++z}else c[U++]=r[l],++M[r[l]]}}for(l=Math.max(l,R);l=o&&(u[f/8|0]=h,ur=o),f=xr(u,f+1,r.subarray(l,ur))}i.i=o}return mr(s,0,e+wr(f)+a)};Qr=(function(){for(var r=new Int32Array(256),n=0;n<256;++n){for(var t=n,e=9;--e;)t=(t&1&&-306674912)^t>>>1;r[n]=t}return r})();Xr=function(){var r=-1;return{p:function(n){for(var t=r,e=0;e>>8;r=t},d:function(){return~r}}};Rr=function(){var r=1,n=0;return{p:function(t){for(var e=r,a=n,i=t.length|0,o=0;o!=i;){for(var s=Math.min(o+2655,i);o>16),a=(a&65535)+15*(a>>16)}r=e,n=a},d:function(){return r%=65521,n%=65521,(r&255)<<24|(r&65280)<<8|(n&255)<<8|n>>8}}};Ar=function(r,n,t,e,a){if(!a&&(a={l:1},n.dictionary)){var i=n.dictionary.subarray(-32768),o=new C(i.length+r.length);o.set(i),o.set(r,i.length),r=o,a.w=i.length}return Nr(r,n.level==null?6:n.level,n.mem==null?a.l?Math.ceil(Math.max(8,Math.min(13,Math.log(r.length)))*1.5):20:12+n.mem,t,e,a)};Mr=function(r,n){var t={};for(var e in r)t[e]=r[e];for(var e in n)t[e]=n[e];return t};Ir=function(r,n,t){for(var e=r(),a=r.toString(),i=a.slice(a.indexOf(`[`)+1,a.lastIndexOf(`]`)).replace(/\s+/g,``).split(`,`),o=0;o>>=8};rn=function(r,n){var t=n.level,e=t==0?0:t<6?1:t==9?3:2;if(r[0]=120,r[1]=e<<6|(n.dictionary&&32),r[1]|=31-(r[0]<<8|r[1])%31,n.dictionary){var a=Rr();a.p(n.dictionary),S(r,2,a.d())}};Wr=function(r,n,t,e){for(var a in r){var i=r[a],o=n+a,s=e;Array.isArray(i)&&(s=Mr(e,i[1]),i=i[0]),ArrayBuffer.isView(i)?t[o]=[i,s]:(t[o+=`/`]=[new C(0),s],Wr(i,o,t,e))}};Br=typeof TextEncoder<`u`&&new TextEncoder;tn=typeof TextDecoder<`u`&&new TextDecoder;try{tn.decode(zr,{stream:!0})}catch{}yr=function(r){var n=0;if(r)for(var t in r){var e=r[t].length;e>65535&&d(9),n+=e+4}return n};Er=function(r,n,t,e,a,i,o,s){var u=e.length,h=t.extra,f=s&&s.length,y=yr(h);S(r,n,o!=null?33639248:67324752),n+=4,o!=null&&(r[n++]=20,r[n++]=t.os),r[n]=20,n+=2,r[n++]=t.flag<<1|(i<0&&8),r[n++]=a&&8,r[n++]=t.compression&255,r[n++]=t.compression>>8;var w=new Date(t.mtime==null?Date.now():t.mtime),x=w.getFullYear()-1980;if((x<0||x>119)&&d(10),S(r,n,x<<25|w.getMonth()+1<<21|w.getDate()<<16|w.getHours()<<11|w.getMinutes()<<5|w.getSeconds()>>1),n+=4,i!=-1&&(S(r,n,t.crc),S(r,n+4,i<0?-i-2:i),S(r,n+8,t.size)),S(r,n+12,u),S(r,n+14,y),n+=16,o!=null&&(S(r,n,f),S(r,n+6,t.attrs),S(r,n+10,o),n+=14),r.set(e,n),n+=u,y)for(var I in h){var m=h[I],g=m.length;S(r,n,+I),S(r,n+2,g),r.set(m,n+4),n+=4+g}return f&&(r.set(s,n),n+=f),n};an=function(r,n,t,e,a){S(r,n,101010256),S(r,n+8,t),S(r,n+10,t),S(r,n+12,e),S(r,n+16,a)};Gr=typeof queueMicrotask==`function`?queueMicrotask:typeof setTimeout==`function`?setTimeout:function(r){r()}}));var k,g,l,m,n,o,f,p,h,j,i,r,s,t,u,q,v;var init_chunk_IFGU66OU=__esmMin((()=>{k=Object.create;g=Object.defineProperty;l=Object.defineProperties;m=Object.getOwnPropertyDescriptor;n=Object.getOwnPropertyDescriptors;o=Object.getOwnPropertyNames;f=Object.getOwnPropertySymbols;p=Object.getPrototypeOf;h=Object.prototype.hasOwnProperty;j=Object.prototype.propertyIsEnumerable;i=(a,b,c)=>b in a?g(a,b,{enumerable:!0,configurable:!0,writable:!0,value:c}):a[b]=c;r=(a,b)=>{for(var c in b||={})h.call(b,c)&&i(a,c,b[c]);if(f)for(var c of f(b))j.call(b,c)&&i(a,c,b[c]);return a};s=(a,b)=>l(a,n(b));t=(a,b)=>{var c={};for(var d in a)h.call(a,d)&&b.indexOf(d)<0&&(c[d]=a[d]);if(a!=null&&f)for(var d of f(a))b.indexOf(d)<0&&j.call(a,d)&&(c[d]=a[d]);return c};u=(a,b)=>()=>{try{return b||a((b={exports:{}}).exports,b),b.exports}catch(c){throw b=0,c}};q=(a,b,c,d)=>{if(b&&typeof b==`object`||typeof b==`function`)for(let e of o(b))!h.call(a,e)&&e!==c&&g(a,e,{get:()=>b[e],enumerable:!(d=m(b,e))||d.enumerable});return a};v=(a,b,c)=>(c=a!=null?k(p(a)):{},q(b||!a||!a.__esModule?g(c,`default`,{value:a,enumerable:!0}):c,a))}));var require_main_ZSOIWSXQ=__commonJSMin(((exports,module)=>{init_chunk_CHEWUVT5();init_chunk_IFGU66OU();var er=null;var bm=!1;var wl=1;var H7=null;var $i=Symbol(`SIGNAL`);function We(i){let r=er;return er=i,r}function Sm(){return er}var Ds={version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:`unknown`,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function Nl(i){if(bm)throw new Error(``);if(er===null)return;er.consumerOnSignalRead(i);let r=er.producersTail;if(r!==void 0&&r.producer===i)return;let e,t=er.recomputing;if(t&&(e=r!==void 0?r.nextProducer:er.producers,e!==void 0&&e.producer===i)){er.producersTail=e,e.lastReadVersion=i.version,e.knownValidAtEpoch=wl;return}let n=i.consumersTail;if(n!==void 0&&n.consumer===er&&(!t||n.knownValidAtEpoch===wl))return;let o=Xc(er),a={producer:i,consumer:er,nextProducer:e,prevConsumer:void 0,knownValidAtEpoch:wl,lastReadVersion:i.version,nextConsumer:void 0};er.producersTail=a,r!==void 0?r.nextProducer=a:er.producers=a,o&&gT(i,a)}function cT(){wl++}function Dl(i){if(!(Xc(i)&&!i.dirty)&&!(!i.dirty&&i.lastCleanEpoch===wl)){if(!i.producerMustRecompute(i)&&!rg(i)){Zc(i);return}i.producerRecomputeValue(i),Zc(i)}}function Ry(i){if(i.consumers===void 0)return;let r=bm;bm=!0;try{for(let e=i.consumers;e!==void 0;e=e.nextConsumer){let t=e.consumer;t.dirty||G7(t)}}finally{bm=r}}function Ay(){return er?.consumerAllowSignalWrites!==!1}function G7(i){i.dirty=!0,Ry(i),i.consumerMarkedDirty?.(i)}function Zc(i){i.dirty=!1,i.lastCleanEpoch=wl}function Ts(i){return i&&dT(i),We(i)}function dT(i){if(i.producersTail?.knownValidAtEpoch===wl){let r=i.producers;for(;r!==void 0;)r.knownValidAtEpoch=null,r=r.nextProducer}i.producersTail=void 0,i.recomputing=!0}function Tl(i,r){We(r),i&&uT(i)}function uT(i){i.recomputing=!1;let r=i.producersTail,e=r!==void 0?r.nextProducer:i.producers;if(e!==void 0){if(Xc(i))do e=Fy(e);while(e!==void 0);r!==void 0?r.nextProducer=void 0:i.producers=void 0}}function rg(i){for(let r=i.producers;r!==void 0;r=r.nextProducer){let e=r.producer,t=r.lastReadVersion;if(t!==e.version||(Dl(e),t!==e.version))return!0}return!1}function El(i){if(Xc(i)){let r=i.producers;for(;r!==void 0;)r=Fy(r)}i.producers=void 0,i.producersTail=void 0,i.consumers=void 0,i.consumersTail=void 0}function gT(i,r){let e=i.consumersTail,t=Xc(i);if(e!==void 0?(r.nextConsumer=e.nextConsumer,e.nextConsumer=r):(r.nextConsumer=void 0,i.consumers=r),r.prevConsumer=e,i.consumersTail=r,!t)for(let n=i.producers;n!==void 0;n=n.nextProducer)gT(n.producer,n)}function Fy(i){let r=i.producer,e=i.nextProducer,t=i.nextConsumer,n=i.prevConsumer;if(i.nextConsumer=void 0,i.prevConsumer=void 0,t!==void 0?t.prevConsumer=n:r.consumersTail=n,n!==void 0)n.nextConsumer=t;else if(r.consumers=t,!Xc(r)){let o=r.producers;for(;o!==void 0;)o=Fy(o)}return e}function Xc(i){return i.consumerIsAlwaysLive||i.consumers!==void 0}function og(i){H7?.(i)}function ag(i,r){return Object.is(i,r)}function sg(i,r){let e=Object.create(U7);e.computation=i,r!==void 0&&(e.equal=r);let t=()=>{if(Dl(e),Nl(e),e.value===qo)throw e.error;return e.value};return t[$i]=e,og(e),t}var Cl=Symbol(`UNSET`);var Il=Symbol(`COMPUTING`);var qo=Symbol(`ERRORED`);var U7=s(r({},Ds),{value:Cl,dirty:!0,error:null,equal:ag,kind:`computed`,producerMustRecompute(i){return i.value===Cl||i.value===Il},producerRecomputeValue(i){if(i.value===Il)throw new Error(``);let r=i.value;i.value=Il;let e=Ts(i),t,n=!1;try{t=i.computation(),We(null),n=r!==Cl&&r!==qo&&t!==qo&&i.equal(r,t)}catch(o){t=qo,i.error=o}finally{Tl(i,e)}if(n){i.value=r;return}i.value=t,i.version++}});function j7(){throw new Error}var pT=j7;function hT(i){pT(i)}function Py(i){pT=i}var W7=null;function Oy(i,r){let e=Object.create(Cm);e.value=i,r!==void 0&&(e.equal=r);let t=()=>mT(e);return t[$i]=e,og(e),[t,a=>kl(e,a),a=>wm(e,a)]}function mT(i){return Nl(i),i.value}function kl(i,r){Ay()||hT(i),i.equal(i.value,r)||(i.value=r,$7(i))}function wm(i,r){Ay()||hT(i),kl(i,r(i.value))}var Cm=s(r({},Ds),{equal:ag,value:void 0,kind:`signal`});function $7(i){i.version++,cT(),Ry(i),W7?.(i)}var Vy=s(r({},Ds),{consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:`effect`});function Ly(i){if(i.dirty=!1,i.version>0&&!rg(i))return;i.version++;let r=Ts(i);try{i.cleanup(),i.fn()}finally{Tl(i,r)}}var zy;function Im(){return zy}function Qo(i){let r=zy;return zy=i,r}var fT=Symbol(`NotFound`);function Jc(i){return i===fT||i?.name===`ɵNotFound`}function By(i,r,e){let t=Object.create(q7);t.source=i,t.computation=r,e!=null&&(t.equal=e);let o=()=>{if(Dl(t),Nl(t),t.value===qo)throw t.error;return t.value};return o[$i]=t,og(t),o}function Hy(i,r){Dl(i),kl(i,r),Zc(i)}function _T(i,r){if(Dl(i),i.value===qo)throw i.error;wm(i,r),Zc(i)}var q7=s(r({},Ds),{value:Cl,dirty:!0,error:null,equal:ag,kind:`linkedSignal`,producerMustRecompute(i){return i.value===Cl||i.value===Il},producerRecomputeValue(i){if(i.value===Il)throw new Error(``);let r=i.value;i.value=Il;let e=Ts(i),t,n=!1;try{let o=i.source(),a=r!==Cl&&r!==qo,s=a?{source:i.sourceValue,value:r}:void 0;t=i.computation(o,s),i.sourceValue=o,We(null),n=a&&t!==qo&&i.equal(r,t)}catch(o){t=qo,i.error=o}finally{Tl(i,e)}if(n){i.value=r;return}i.value=t,i.version++}});function xT(i){let r=We(null);try{return i()}finally{We(r)}}function Ze(i){return typeof i==`function`}function ed(i){let e=i(t=>{Error.call(t),t.stack=new Error().stack});return e.prototype=Object.create(Error.prototype),e.prototype.constructor=e,e}var Nm=ed(i=>function(e){i(this),this.message=e?`${e.length} errors occurred during unsubscription: +var __esmMin=(fn,res,err)=>()=>{if(err)throw err[0];try{return fn&&(res=fn(fn=0)),res}catch(e){throw err=[e],e}};var __commonJSMin=(cb,mod)=>()=>(mod||(cb((mod={exports:{}}).exports,mod),cb=null),mod.exports);function nn(r,n,t){return t||(t=n,n={}),typeof t!=`function`&&d(7),_r(r,n,[br],function(e){return Vr(Sr(e.data[0],e.data[1]))},0,t)}function Sr(r,n){return Ar(r,n||{},0,0)}function sn(r,n){n||(n={});var t=Rr();t.p(r);var e=Ar(r,n,n.dictionary?6:2,4);return rn(e,n),S(e,e.length-4,t.d()),e}function Zr(r,n){if(n){for(var t=new C(r.length),e=0;e>1)),o=0,s=function(f){i[o++]=f},e=0;ei.length){var u=new C(o+8+(a-e<<1));u.set(i),i=u}var h=r.charCodeAt(e);h<128||n?s(h):h<2048?(s(192|h>>6),s(128|h&63)):h>55295&&h<57344?(h=65536+(h&1047552)|r.charCodeAt(++e)&1023,s(240|h>>18),s(128|h>>12&63),s(128|h>>6&63),s(128|h&63)):(s(224|h>>12),s(128|h>>6&63),s(128|h&63))}return mr(i,0,o)}function fn(r,n,t){t||(t=n,n={}),typeof t!=`function`&&d(7);var e={};Wr(r,``,e,n);var a=Object.keys(e),i=a.length,o=0,s=0,u=i,h=new Array(i),f=[],y=function(){for(var g=0;g65535&&T(d(11,0,1),null),!V)T(null,F);else if(D<16e4)try{T(null,Sr(F,c))}catch(Z){T(Z,null)}else f.push(nn(F,c,T))},m=0;m{Cr={};jr=(function(r,n,t,e,a){var i=new Worker(Cr[n]||(Cr[n]=URL.createObjectURL(new Blob([r+`;addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})`],{type:`text/javascript`}))));return i.onmessage=function(o){var s=o.data,u=s.$e$;if(u){var h=new Error(u[0]);h.code=u[1],h.stack=u[2],a(h,null)}else a(null,s)},i.postMessage(t,e),i});C=Uint8Array;q$1=Uint16Array;ar=Int32Array;or=new C([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);sr=new C([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);vr=new C([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);Or=function(r,n){for(var t=new q$1(31),e=0;e<31;++e)t[e]=n+=1<>1|(p$1&21845)<<1,W=(W&52428)>>2|(W&13107)<<2,W=(W&61680)>>4|(W&3855)<<4,er[p$1]=((W&65280)>>8|(W&255)<<8)>>1;;;k$1=(function(r,n,t){for(var e=r.length,a=0,i=new q$1(n);a>u]=h}else for(s=new q$1(e),a=0;a>15-r[a]);return s});j$1=new C(288);for(p$1=0;p$1<144;++p$1)j$1[p$1]=8;;for(p$1=144;p$1<256;++p$1)j$1[p$1]=9;;for(p$1=256;p$1<280;++p$1)j$1[p$1]=7;;for(p$1=280;p$1<288;++p$1)j$1[p$1]=8;;_=new C(32);for(p$1=0;p$1<32;++p$1)_[p$1]=5;;Pr=k$1(j$1,9,0);$r=k$1(_,5,0);wr=function(r){return(r+7)/8|0};mr=function(r,n,t){return(n==null||n<0)&&(n=0),(t==null||t>r.length)&&(t=r.length),new C(r.subarray(n,t))};Kr=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`];d=function(r,n,t){var e=new Error(n||Kr[r]);if(e.code=r,Error.captureStackTrace&&Error.captureStackTrace(e,d),!t)throw e;return e};N=function(r,n,t){t<<=n&7;var e=n/8|0;r[e]|=t,r[e+1]|=t>>8};Q=function(r,n,t){t<<=n&7;var e=n/8|0;r[e]|=t,r[e+1]|=t>>8,r[e+2]|=t>>16};nr=function(r,n){for(var t=[],e=0;ew&&(w=i[e].s);var x=new q$1(w+1),I=ir(t[f-1],x,0);if(I>n){var e=0,m=0,g=I-n,G=1<n)m+=G-(1<>=g;m>0;){var F=i[e].s;x[F]=0&&m;--e){var c=i[e].s;x[c]==n&&(--x[c],++m)}I=n}return{t:new C(x),l:I}};ir=function(r,n,t){return r.s==-1?Math.max(ir(r.l,n,t+1),ir(r.r,n,t+1)):n[r.s]=t};pr=function(r){for(var n=r.length;n&&!r[--n];);for(var t=new q$1(++n),e=0,a=r[0],i=1,o=function(u){t[e++]=u},s=1;s<=n;++s)if(r[s]==a&&s!=n)++i;else{if(!a&&i>2){for(;i>138;i-=138)o(32754);i>2&&(o(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(o(a),--i;i>6;i-=6)o(8304);i>2&&(o(i-3<<5|8208),i=0)}for(;i--;)o(a);i=1,a=r[s]}return{c:t.subarray(0,e),n}};X=function(r,n){for(var t=0,e=0;e>8,r[a+2]=r[a]^255,r[a+3]=r[a+1]^255;for(var i=0;i4&&!U[vr[B-1]];--B);var V=h+5<<3,T=X(a,j$1)+X(i,_)+o,Z=X(a,w)+X(i,m)+o+14+3*B+X(z,U)+2*z[16]+3*z[17]+7*z[18];if(u>=0&&V<=T&&V<=Z)return xr(n,f,r.subarray(u,u+h));var L,A,P,Y;if(N(n,f,1+(Z15&&(N(n,f,J[v]>>5&127),f+=J[v]>>12)}}else L=Pr,A=j$1,P=$r,Y=_;for(var v=0;v255){var H=E>>18&31;Q(n,f,L[H+257]),f+=A[H+257],H>7&&(N(n,f,E>>23&31),f+=or[H]);var K=E&31;Q(n,f,P[K]),f+=Y[K],K>3&&(Q(n,f,E>>5&8191),f+=sr[K])}else Q(n,f,L[E]),f+=A[E]}return Q(n,f,L[256]),f+A[256]};Hr=new ar([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]);zr=new C(0);Nr=function(r,n,t,e,a,i){var o=i.z||r.length,s=new C(e+o+5*(1+Math.ceil(o/7e3))+a),u=s.subarray(e,s.length-a),h=i.l,f=(i.r||0)&7;if(n){f&&(u[0]=i.r>>3);for(var y=Hr[n-1],w=y>>13,x=y&8191,I=(1<7e3||U>24576)&&(L>423||!h)){f=gr(r,u,0,c,M,D,v,U,B,l-B,f),U=z=v=0,B=l;for(var A=0;A<286;++A)M[A]=0;for(var A=0;A<30;++A)D[A]=0}var P=2,Y=0,fr=x,$=T-Z&32767;if(L>2&&V==F(l-$))for(var b=Math.min(w,L)-1,J=Math.min(32767,l),H=Math.min(258,L);$<=J&&--fr&&T!=Z;){if(r[l+P]==r[l+P-$]){for(var E=0;EP){if(P=E,Y=$,E>b)break;for(var K=Math.min($,E-2),Ur=0,A=0;AUr&&(Ur=Fr,Z=hr)}}}T=Z,Z=m[T],$+=T-Z&32767}if(Y){c[U++]=268435456|tr[P]<<18|cr[Y];var Dr=tr[P]&31,Tr=cr[Y]&31;v+=or[Dr]+sr[Tr],++M[257+Dr],++D[Tr],R=l+P,++z}else c[U++]=r[l],++M[r[l]]}}for(l=Math.max(l,R);l=o&&(u[f/8|0]=h,ur=o),f=xr(u,f+1,r.subarray(l,ur))}i.i=o}return mr(s,0,e+wr(f)+a)};Qr=(function(){for(var r=new Int32Array(256),n=0;n<256;++n){for(var t=n,e=9;--e;)t=(t&1&&-306674912)^t>>>1;r[n]=t}return r})();Xr=function(){var r=-1;return{p:function(n){for(var t=r,e=0;e>>8;r=t},d:function(){return~r}}};Rr=function(){var r=1,n=0;return{p:function(t){for(var e=r,a=n,i=t.length|0,o=0;o!=i;){for(var s=Math.min(o+2655,i);o>16),a=(a&65535)+15*(a>>16)}r=e,n=a},d:function(){return r%=65521,n%=65521,(r&255)<<24|(r&65280)<<8|(n&255)<<8|n>>8}}};Ar=function(r,n,t,e,a){if(!a&&(a={l:1},n.dictionary)){var i=n.dictionary.subarray(-32768),o=new C(i.length+r.length);o.set(i),o.set(r,i.length),r=o,a.w=i.length}return Nr(r,n.level==null?6:n.level,n.mem==null?a.l?Math.ceil(Math.max(8,Math.min(13,Math.log(r.length)))*1.5):20:12+n.mem,t,e,a)};Mr=function(r,n){var t={};for(var e in r)t[e]=r[e];for(var e in n)t[e]=n[e];return t};Ir=function(r,n,t){for(var e=r(),a=r.toString(),i=a.slice(a.indexOf(`[`)+1,a.lastIndexOf(`]`)).replace(/\s+/g,``).split(`,`),o=0;o>>=8};rn=function(r,n){var t=n.level,e=t==0?0:t<6?1:t==9?3:2;if(r[0]=120,r[1]=e<<6|(n.dictionary&&32),r[1]|=31-(r[0]<<8|r[1])%31,n.dictionary){var a=Rr();a.p(n.dictionary),S(r,2,a.d())}};Wr=function(r,n,t,e){for(var a in r){var i=r[a],o=n+a,s=e;Array.isArray(i)&&(s=Mr(e,i[1]),i=i[0]),ArrayBuffer.isView(i)?t[o]=[i,s]:(t[o+=`/`]=[new C(0),s],Wr(i,o,t,e))}};Br=typeof TextEncoder<`u`&&new TextEncoder;tn=typeof TextDecoder<`u`&&new TextDecoder;try{tn.decode(zr,{stream:!0})}catch{}yr=function(r){var n=0;if(r)for(var t in r){var e=r[t].length;e>65535&&d(9),n+=e+4}return n};Er=function(r,n,t,e,a,i,o,s){var u=e.length,h=t.extra,f=s&&s.length,y=yr(h);S(r,n,o!=null?33639248:67324752),n+=4,o!=null&&(r[n++]=20,r[n++]=t.os),r[n]=20,n+=2,r[n++]=t.flag<<1|(i<0&&8),r[n++]=a&&8,r[n++]=t.compression&255,r[n++]=t.compression>>8;var w=new Date(t.mtime==null?Date.now():t.mtime),x=w.getFullYear()-1980;if((x<0||x>119)&&d(10),S(r,n,x<<25|w.getMonth()+1<<21|w.getDate()<<16|w.getHours()<<11|w.getMinutes()<<5|w.getSeconds()>>1),n+=4,i!=-1&&(S(r,n,t.crc),S(r,n+4,i<0?-i-2:i),S(r,n+8,t.size)),S(r,n+12,u),S(r,n+14,y),n+=16,o!=null&&(S(r,n,f),S(r,n+6,t.attrs),S(r,n+10,o),n+=14),r.set(e,n),n+=u,y)for(var I in h){var m=h[I],g=m.length;S(r,n,+I),S(r,n+2,g),r.set(m,n+4),n+=4+g}return f&&(r.set(s,n),n+=f),n};an=function(r,n,t,e,a){S(r,n,101010256),S(r,n+8,t),S(r,n+10,t),S(r,n+12,e),S(r,n+16,a)};Gr=typeof queueMicrotask==`function`?queueMicrotask:typeof setTimeout==`function`?setTimeout:function(r){r()}}));var k,g,l,m,n,o,f,p,h,j,i,r,s,t,u,q,v;var init_chunk_IFGU66OU=__esmMin((()=>{k=Object.create;g=Object.defineProperty;l=Object.defineProperties;m=Object.getOwnPropertyDescriptor;n=Object.getOwnPropertyDescriptors;o=Object.getOwnPropertyNames;f=Object.getOwnPropertySymbols;p=Object.getPrototypeOf;h=Object.prototype.hasOwnProperty;j=Object.prototype.propertyIsEnumerable;i=(a,b,c)=>b in a?g(a,b,{enumerable:!0,configurable:!0,writable:!0,value:c}):a[b]=c;r=(a,b)=>{for(var c in b||={})h.call(b,c)&&i(a,c,b[c]);if(f)for(var c of f(b))j.call(b,c)&&i(a,c,b[c]);return a};s=(a,b)=>l(a,n(b));t=(a,b)=>{var c={};for(var d in a)h.call(a,d)&&b.indexOf(d)<0&&(c[d]=a[d]);if(a!=null&&f)for(var d of f(a))b.indexOf(d)<0&&j.call(a,d)&&(c[d]=a[d]);return c};u=(a,b)=>()=>{try{return b||a((b={exports:{}}).exports,b),b.exports}catch(c){throw b=0,c}};q=(a,b,c,d)=>{if(b&&typeof b==`object`||typeof b==`function`)for(let e of o(b))!h.call(a,e)&&e!==c&&g(a,e,{get:()=>b[e],enumerable:!(d=m(b,e))||d.enumerable});return a};v=(a,b,c)=>(c=a!=null?k(p(a)):{},q(b||!a||!a.__esModule?g(c,`default`,{value:a,enumerable:!0}):c,a))}));var require_main_GF4OEYNH=__commonJSMin(((exports,module)=>{init_chunk_CHEWUVT5();init_chunk_IFGU66OU();var tr=null;var Nm=!1;var Il=1;var $7=null;var qi=Symbol(`SIGNAL`);function $e(i){let r=tr;return tr=i,r}function Dm(){return tr}var Ts={version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:`unknown`,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function Tl(i){if(Nm)throw new Error(``);if(tr===null)return;tr.consumerOnSignalRead(i);let r=tr.producersTail;if(r!==void 0&&r.producer===i)return;let e,t=tr.recomputing;if(t&&(e=r!==void 0?r.nextProducer:tr.producers,e!==void 0&&e.producer===i)){tr.producersTail=e,e.lastReadVersion=i.version,e.knownValidAtEpoch=Il;return}let n=i.consumersTail;if(n!==void 0&&n.consumer===tr&&(!t||n.knownValidAtEpoch===Il))return;let o=nd(tr),a={producer:i,consumer:tr,nextProducer:e,prevConsumer:void 0,knownValidAtEpoch:Il,lastReadVersion:i.version,nextConsumer:void 0};tr.producersTail=a,r!==void 0?r.nextProducer=a:tr.producers=a,o&&fT(i,a)}function pT(){Il++}function El(i){if(!(nd(i)&&!i.dirty)&&!(!i.dirty&&i.lastCleanEpoch===Il)){if(!i.producerMustRecompute(i)&&!dg(i)){id(i);return}i.producerRecomputeValue(i),id(i)}}function Py(i){if(i.consumers===void 0)return;let r=Nm;Nm=!0;try{for(let e=i.consumers;e!==void 0;e=e.nextConsumer){let t=e.consumer;t.dirty||W7(t)}}finally{Nm=r}}function Oy(){return tr?.consumerAllowSignalWrites!==!1}function W7(i){i.dirty=!0,Py(i),i.consumerMarkedDirty?.(i)}function id(i){i.dirty=!1,i.lastCleanEpoch=Il}function Es(i){return i&&hT(i),$e(i)}function hT(i){if(i.producersTail?.knownValidAtEpoch===Il){let r=i.producers;for(;r!==void 0;)r.knownValidAtEpoch=null,r=r.nextProducer}i.producersTail=void 0,i.recomputing=!0}function kl(i,r){$e(r),i&&mT(i)}function mT(i){i.recomputing=!1;let r=i.producersTail,e=r!==void 0?r.nextProducer:i.producers;if(e!==void 0){if(nd(i))do e=Vy(e);while(e!==void 0);r!==void 0?r.nextProducer=void 0:i.producers=void 0}}function dg(i){for(let r=i.producers;r!==void 0;r=r.nextProducer){let e=r.producer,t=r.lastReadVersion;if(t!==e.version||(El(e),t!==e.version))return!0}return!1}function Ml(i){if(nd(i)){let r=i.producers;for(;r!==void 0;)r=Vy(r)}i.producers=void 0,i.producersTail=void 0,i.consumers=void 0,i.consumersTail=void 0}function fT(i,r){let e=i.consumersTail,t=nd(i);if(e!==void 0?(r.nextConsumer=e.nextConsumer,e.nextConsumer=r):(r.nextConsumer=void 0,i.consumers=r),r.prevConsumer=e,i.consumersTail=r,!t)for(let n=i.producers;n!==void 0;n=n.nextProducer)fT(n.producer,n)}function Vy(i){let r=i.producer,e=i.nextProducer,t=i.nextConsumer,n=i.prevConsumer;if(i.nextConsumer=void 0,i.prevConsumer=void 0,t!==void 0?t.prevConsumer=n:r.consumersTail=n,n!==void 0)n.nextConsumer=t;else if(r.consumers=t,!nd(r)){let o=r.producers;for(;o!==void 0;)o=Vy(o)}return e}function nd(i){return i.consumerIsAlwaysLive||i.consumers!==void 0}function ug(i){$7?.(i)}function gg(i,r){return Object.is(i,r)}function pg(i,r){let e=Object.create(q7);e.computation=i,r!==void 0&&(e.equal=r);let t=()=>{if(El(e),Tl(e),e.value===Yo)throw e.error;return e.value};return t[qi]=e,ug(e),t}var Nl=Symbol(`UNSET`);var Dl=Symbol(`COMPUTING`);var Yo=Symbol(`ERRORED`);var q7=s(r({},Ts),{value:Nl,dirty:!0,error:null,equal:gg,kind:`computed`,producerMustRecompute(i){return i.value===Nl||i.value===Dl},producerRecomputeValue(i){if(i.value===Dl)throw new Error(``);let r=i.value;i.value=Dl;let e=Es(i),t,n=!1;try{t=i.computation(),$e(null),n=r!==Nl&&r!==Yo&&t!==Yo&&i.equal(r,t)}catch(o){t=Yo,i.error=o}finally{kl(i,e)}if(n){i.value=r;return}i.value=t,i.version++}});function Q7(){throw new Error}var _T=Q7;function xT(i){_T(i)}function Ly(i){_T=i}var K7=null;function zy(i,r){let e=Object.create(Em);e.value=i,r!==void 0&&(e.equal=r);let t=()=>vT(e);return t[qi]=e,ug(e),[t,a=>Rl(e,a),a=>Tm(e,a)]}function vT(i){return Tl(i),i.value}function Rl(i,r){Oy()||xT(i),i.equal(i.value,r)||(i.value=r,Y7(i))}function Tm(i,r){Oy()||xT(i),Rl(i,r(i.value))}var Em=s(r({},Ts),{equal:gg,value:void 0,kind:`signal`});function Y7(i){i.version++,pT(),Py(i),K7?.(i)}var By=s(r({},Ts),{consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:`effect`});function Hy(i){if(i.dirty=!1,i.version>0&&!dg(i))return;i.version++;let r=Es(i);try{i.cleanup(),i.fn()}finally{kl(i,r)}}var Gy;function km(){return Gy}function Zo(i){let r=Gy;return Gy=i,r}var yT=Symbol(`NotFound`);function rd(i){return i===yT||i?.name===`ɵNotFound`}function Uy(i,r,e){let t=Object.create(Z7);t.source=i,t.computation=r,e!=null&&(t.equal=e);let o=()=>{if(El(t),Tl(t),t.value===Yo)throw t.error;return t.value};return o[qi]=t,ug(t),o}function jy(i,r){El(i),Rl(i,r),id(i)}function bT(i,r){if(El(i),i.value===Yo)throw i.error;Tm(i,r),id(i)}var Z7=s(r({},Ts),{value:Nl,dirty:!0,error:null,equal:gg,kind:`linkedSignal`,producerMustRecompute(i){return i.value===Nl||i.value===Dl},producerRecomputeValue(i){if(i.value===Dl)throw new Error(``);let r=i.value;i.value=Dl;let e=Es(i),t,n=!1;try{let o=i.source(),a=r!==Nl&&r!==Yo,s=a?{source:i.sourceValue,value:r}:void 0;t=i.computation(o,s),i.sourceValue=o,$e(null),n=a&&t!==Yo&&i.equal(r,t)}catch(o){t=Yo,i.error=o}finally{kl(i,e)}if(n){i.value=r;return}i.value=t,i.version++}});function ST(i){let r=$e(null);try{return i()}finally{$e(r)}}function Ye(i){return typeof i==`function`}function od(i){let e=i(t=>{Error.call(t),t.stack=new Error().stack});return e.prototype=Object.create(Error.prototype),e.prototype.constructor=e,e}var Mm=od(i=>function(e){i(this),this.message=e?`${e.length} errors occurred during unsubscription: ${e.map((t,n)=>`${n+1}) ${t.toString()}`).join(` - `)}`:``,this.name=`UnsubscriptionError`,this.errors=e});function Ml(i,r){if(i){let e=i.indexOf(r);0<=e&&i.splice(e,1)}}var yi=class i{constructor(r){this.initialTeardown=r,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let r;if(!this.closed){this.closed=!0;let{_parentage:e}=this;if(e)if(this._parentage=null,Array.isArray(e))for(let o of e)o.remove(this);else e.remove(this);let{initialTeardown:t}=this;if(Ze(t))try{t()}catch(o){r=o instanceof Nm?o.errors:[o]}let{_finalizers:n}=this;if(n){this._finalizers=null;for(let o of n)try{vT(o)}catch(a){r=r??[],a instanceof Nm?r=[...r,...a.errors]:r.push(a)}}if(r)throw new Nm(r)}}add(r){var e;if(r&&r!==this)if(this.closed)vT(r);else{if(r instanceof i){if(r.closed||r._hasParent(this))return;r._addParent(this)}(this._finalizers=(e=this._finalizers)!==null&&e!==void 0?e:[]).push(r)}}_hasParent(r){let{_parentage:e}=this;return e===r||Array.isArray(e)&&e.includes(r)}_addParent(r){let{_parentage:e}=this;this._parentage=Array.isArray(e)?(e.push(r),e):e?[e,r]:r}_removeParent(r){let{_parentage:e}=this;e===r?this._parentage=null:Array.isArray(e)&&Ml(e,r)}remove(r){let{_finalizers:e}=this;e&&Ml(e,r),r instanceof i&&r._removeParent(this)}};yi.EMPTY=(()=>{let i=new yi;return i.closed=!0,i})();var Gy=yi.EMPTY;function Dm(i){return i instanceof yi||i&&`closed`in i&&Ze(i.remove)&&Ze(i.add)&&Ze(i.unsubscribe)}function vT(i){Ze(i)?i():i.unsubscribe()}var po={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var td={setTimeout(i,r,...e){let{delegate:t}=td;return t?.setTimeout?t.setTimeout(i,r,...e):setTimeout(i,r,...e)},clearTimeout(i){let{delegate:r}=td;return(r?.clearTimeout||clearTimeout)(i)},delegate:void 0};function Tm(i){td.setTimeout(()=>{let{onUnhandledError:r}=po;if(r)r(i);else throw i})}function wt(){}var yT=Uy(`C`,void 0,void 0);function bT(i){return Uy(`E`,void 0,i)}function ST(i){return Uy(`N`,i,void 0)}function Uy(i,r,e){return{kind:i,value:r,error:e}}var Rl=null;function id(i){if(po.useDeprecatedSynchronousErrorHandling){let r=!Rl;if(r&&(Rl={errorThrown:!1,error:null}),i(),r){let{errorThrown:e,error:t}=Rl;if(Rl=null,e)throw t}}else i()}function wT(i){po.useDeprecatedSynchronousErrorHandling&&Rl&&(Rl.errorThrown=!0,Rl.error=i)}var Al=class extends yi{constructor(r){super(),this.isStopped=!1,r?(this.destination=r,Dm(r)&&r.add(this)):this.destination=Y7}static create(r,e,t){return new Ma(r,e,t)}next(r){this.isStopped?Wy(ST(r),this):this._next(r)}error(r){this.isStopped?Wy(bT(r),this):(this.isStopped=!0,this._error(r))}complete(){this.isStopped?Wy(yT,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(r){this.destination.next(r)}_error(r){try{this.destination.error(r)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}};var Q7=Function.prototype.bind;function jy(i,r){return Q7.call(i,r)}var $y=class{constructor(r){this.partialObserver=r}next(r){let{partialObserver:e}=this;if(e.next)try{e.next(r)}catch(t){Em(t)}}error(r){let{partialObserver:e}=this;if(e.error)try{e.error(r)}catch(t){Em(t)}else Em(r)}complete(){let{partialObserver:r}=this;if(r.complete)try{r.complete()}catch(e){Em(e)}}};var Ma=class extends Al{constructor(r,e,t){super();let n;if(Ze(r)||!r)n={next:r??void 0,error:e??void 0,complete:t??void 0};else{let o;this&&po.useDeprecatedNextContext?(o=Object.create(r),o.unsubscribe=()=>this.unsubscribe(),n={next:r.next&&jy(r.next,o),error:r.error&&jy(r.error,o),complete:r.complete&&jy(r.complete,o)}):n=r}this.destination=new $y(n)}};function Em(i){po.useDeprecatedSynchronousErrorHandling?wT(i):Tm(i)}function K7(i){throw i}function Wy(i,r){let{onStoppedNotification:e}=po;e&&td.setTimeout(()=>e(i,r))}var Y7={closed:!0,next:wt,error:K7,complete:wt};var nd=typeof Symbol==`function`&&Symbol.observable||`@@observable`;function Ir(i){return i}function rd(...i){return qy(i)}function qy(i){return i.length===0?Ir:i.length===1?i[0]:function(e){return i.reduce((t,n)=>n(t),e)}}var qe=class i{constructor(r){r&&(this._subscribe=r)}lift(r){let e=new i;return e.source=this,e.operator=r,e}subscribe(r,e,t){let n=X7(r)?r:new Ma(r,e,t);return id(()=>{let{operator:o,source:a}=this;n.add(o?o.call(n,a):a?this._subscribe(n):this._trySubscribe(n))}),n}_trySubscribe(r){try{return this._subscribe(r)}catch(e){r.error(e)}}forEach(r,e){return e=CT(e),new e((t,n)=>{let o=new Ma({next:a=>{try{r(a)}catch(s){n(s),o.unsubscribe()}},error:n,complete:t});this.subscribe(o)})}_subscribe(r){var e;return(e=this.source)===null||e===void 0?void 0:e.subscribe(r)}[nd](){return this}pipe(...r){return qy(r)(this)}toPromise(r){return r=CT(r),new r((e,t)=>{let n;this.subscribe(o=>n=o,o=>t(o),()=>e(n))})}};qe.create=i=>new qe(i);function CT(i){var r;return(r=i??po.Promise)!==null&&r!==void 0?r:Promise}function Z7(i){return i&&Ze(i.next)&&Ze(i.error)&&Ze(i.complete)}function X7(i){return i&&i instanceof Al||Z7(i)&&Dm(i)}function J7(i){return Ze(i?.lift)}function ht(i){return r=>{if(J7(r))return r.lift(function(e){try{return i(e,this)}catch(t){this.error(t)}});throw new TypeError(`Unable to lift unknown Observable type`)}}function ut(i,r,e,t,n){return new Qy(i,r,e,t,n)}var Qy=class extends Al{constructor(r,e,t,n,o,a){super(r),this.onFinalize=o,this.shouldUnsubscribe=a,this._next=e?function(s){try{e(s)}catch(l){r.error(l)}}:super._next,this._error=n?function(s){try{n(s)}catch(l){r.error(l)}finally{this.unsubscribe()}}:super._error,this._complete=t?function(){try{t()}catch(s){r.error(s)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var r;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){let{closed:e}=this;super.unsubscribe(),!e&&((r=this.onFinalize)===null||r===void 0||r.call(this))}}};var od={schedule(i){let r=requestAnimationFrame,e=cancelAnimationFrame,{delegate:t}=od;t&&(r=t.requestAnimationFrame,e=t.cancelAnimationFrame);let n=r(o=>{e=void 0,i(o)});return new yi(()=>e?.(n))},requestAnimationFrame(...i){let{delegate:r}=od;return(r?.requestAnimationFrame||requestAnimationFrame)(...i)},cancelAnimationFrame(...i){let{delegate:r}=od;return(r?.cancelAnimationFrame||cancelAnimationFrame)(...i)},delegate:void 0};var IT=ed(i=>function(){i(this),this.name=`ObjectUnsubscribedError`,this.message=`object unsubscribed`});var ce=class extends qe{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(r){let e=new km(this,this);return e.operator=r,e}_throwIfClosed(){if(this.closed)throw new IT}next(r){id(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(let e of this.currentObservers)e.next(r)}})}error(r){id(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=r;let{observers:e}=this;for(;e.length;)e.shift().error(r)}})}complete(){id(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;let{observers:r}=this;for(;r.length;)r.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var r;return((r=this.observers)===null||r===void 0?void 0:r.length)>0}_trySubscribe(r){return this._throwIfClosed(),super._trySubscribe(r)}_subscribe(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)}_innerSubscribe(r){let{hasError:e,isStopped:t,observers:n}=this;return e||t?Gy:(this.currentObservers=null,n.push(r),new yi(()=>{this.currentObservers=null,Ml(n,r)}))}_checkFinalizedStatuses(r){let{hasError:e,thrownError:t,isStopped:n}=this;e?r.error(t):n&&r.complete()}asObservable(){let r=new qe;return r.source=this,r}};ce.create=(i,r)=>new km(i,r);var km=class extends ce{constructor(r,e){super(),this.destination=r,this.source=e}next(r){var e,t;(t=(e=this.destination)===null||e===void 0?void 0:e.next)===null||t===void 0||t.call(e,r)}error(r){var e,t;(t=(e=this.destination)===null||e===void 0?void 0:e.error)===null||t===void 0||t.call(e,r)}complete(){var r,e;(e=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||e===void 0||e.call(r)}_subscribe(r){var e,t;return(t=(e=this.source)===null||e===void 0?void 0:e.subscribe(r))!==null&&t!==void 0?t:Gy}};var Gi=class extends ce{constructor(r){super(),this._value=r}get value(){return this.getValue()}_subscribe(r){let e=super._subscribe(r);return!e.closed&&r.next(this._value),e}getValue(){let{hasError:r,thrownError:e,_value:t}=this;if(r)throw e;return this._throwIfClosed(),t}next(r){super.next(this._value=r)}};var lg={now(){return(lg.delegate||Date).now()},delegate:void 0};var cg=class extends ce{constructor(r=Infinity,e=Infinity,t=lg){super(),this._bufferSize=r,this._windowTime=e,this._timestampProvider=t,this._buffer=[],this._infiniteTimeWindow=!0,this._infiniteTimeWindow=e===Infinity,this._bufferSize=Math.max(1,r),this._windowTime=Math.max(1,e)}next(r){let{isStopped:e,_buffer:t,_infiniteTimeWindow:n,_timestampProvider:o,_windowTime:a}=this;e||(t.push(r),!n&&t.push(o.now()+a)),this._trimBuffer(),super.next(r)}_subscribe(r){this._throwIfClosed(),this._trimBuffer();let e=this._innerSubscribe(r),{_infiniteTimeWindow:t,_buffer:n}=this,o=n.slice();for(let a=0;a{class i{constructor(e,t=i.now){this.schedulerActionCtor=e,this.now=t}schedule(e,t=0,n){return new this.schedulerActionCtor(this,e).schedule(n,t)}}return i.now=lg.now,i})();var sd=class extends Ky{constructor(r,e=Ky.now){super(r,e),this.actions=[],this._active=!1}flush(r){let{actions:e}=this;if(this._active){e.push(r);return}let t;this._active=!0;do if(t=r.execute(r.state,r.delay))break;while(r=e.shift());if(this._active=!1,t){for(;r=e.shift();)r.unsubscribe();throw t}}};var Ra=new sd(ad);var NT=Ra;var Rm=class extends ad{constructor(r,e){super(r,e),this.scheduler=r,this.work=e}requestAsyncId(r,e,t=0){return t!==null&&t>0?super.requestAsyncId(r,e,t):(r.actions.push(this),r._scheduled||(r._scheduled=od.requestAnimationFrame(()=>r.flush(void 0))))}recycleAsyncId(r,e,t=0){var n;if(t!=null?t>0:this.delay>0)return super.recycleAsyncId(r,e,t);let{actions:o}=r;e!=null&&e===r._scheduled&&((n=o[o.length-1])===null||n===void 0?void 0:n.id)!==e&&(od.cancelAnimationFrame(e),r._scheduled=void 0)}};var Am=class extends sd{flush(r){this._active=!0;let e;r?e=r.id:(e=this._scheduled,this._scheduled=void 0);let{actions:t}=this,n;r=r||t.shift();do if(n=r.execute(r.state,r.delay))break;while((r=t[0])&&r.id===e&&t.shift());if(this._active=!1,n){for(;(r=t[0])&&r.id===e&&t.shift();)r.unsubscribe();throw n}}};var zn=new Am(Rm);var Ji=new qe(i=>i.complete());function Fm(i){return i&&Ze(i.schedule)}function Yy(i){return i[i.length-1]}function Pm(i){return Ze(Yy(i))?i.pop():void 0}function Ko(i){return Fm(Yy(i))?i.pop():void 0}function DT(i,r){return typeof Yy(i)==`number`?i.pop():r}function Be(i,r,e,t){var n=arguments.length,o=n<3?r:t===null?t=Object.getOwnPropertyDescriptor(r,e):t,a;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)o=Reflect.decorate(i,r,e,t);else for(var s=i.length-1;s>=0;s--)(a=i[s])&&(o=(n<3?a(o):n>3?a(r,e,o):a(r,e))||o);return n>3&&o&&Object.defineProperty(r,e,o),o}function ET(i,r,e,t){function n(o){return o instanceof e?o:new e(function(a){a(o)})}return new(e||(e=Promise))(function(o,a){function s(d){try{c(t.next(d))}catch(p){a(p)}}function l(d){try{c(t.throw(d))}catch(p){a(p)}}function c(d){d.done?o(d.value):n(d.value).then(s,l)}c((t=t.apply(i,r||[])).next())})}function TT(i){var r=typeof Symbol==`function`&&Symbol.iterator,e=r&&i[r],t=0;if(e)return e.call(i);if(i&&typeof i.length==`number`)return{next:function(){return i&&t>=i.length&&(i=void 0),{value:i&&i[t++],done:!i}}};throw new TypeError(r?`Object is not iterable.`:`Symbol.iterator is not defined.`)}function Fl(i){return this instanceof Fl?(this.v=i,this):new Fl(i)}function kT(i,r,e){if(!Symbol.asyncIterator)throw new TypeError(`Symbol.asyncIterator is not defined.`);var t=e.apply(i,r||[]),n,o=[];return n=Object.create((typeof AsyncIterator==`function`?AsyncIterator:Object).prototype),s(`next`),s(`throw`),s(`return`,a),n[Symbol.asyncIterator]=function(){return this},n;function a(v){return function(y){return Promise.resolve(y).then(v,p)}}function s(v,y){t[v]&&(n[v]=function(T){return new Promise(function(M,F){o.push([v,T,M,F])>1||l(v,T)})},y&&(n[v]=y(n[v])))}function l(v,y){try{c(t[v](y))}catch(T){f(o[0][3],T)}}function c(v){v.value instanceof Fl?Promise.resolve(v.value.v).then(d,p):f(o[0][2],v)}function d(v){l(`next`,v)}function p(v){l(`throw`,v)}function f(v,y){v(y),o.shift(),o.length&&l(o[0][0],o[0][1])}}function MT(i){if(!Symbol.asyncIterator)throw new TypeError(`Symbol.asyncIterator is not defined.`);var r=i[Symbol.asyncIterator],e;return r?r.call(i):(i=typeof TT==`function`?TT(i):i[Symbol.iterator](),e={},t(`next`),t(`throw`),t(`return`),e[Symbol.asyncIterator]=function(){return this},e);function t(o){e[o]=i[o]&&function(a){return new Promise(function(s,l){a=i[o](a),n(s,l,a.done,a.value)})}}function n(o,a,s,l){Promise.resolve(l).then(function(c){o({value:c,done:s})},a)}}var ld=(i=>i&&typeof i.length==`number`&&typeof i!=`function`);function Om(i){return Ze(i?.then)}function Vm(i){return Ze(i[nd])}function Lm(i){return Symbol.asyncIterator&&Ze(i?.[Symbol.asyncIterator])}function zm(i){return new TypeError(`You provided ${i!==null&&typeof i==`object`?`an invalid object`:`'${i}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}function ez(){return typeof Symbol!=`function`||!Symbol.iterator?`@@iterator`:Symbol.iterator}var Bm=ez();function Hm(i){return Ze(i?.[Bm])}function Gm(i){return kT(this,arguments,function*(){let e=i.getReader();try{for(;;){let{value:t,done:n}=yield Fl(e.read());if(n)return yield Fl(void 0);yield yield Fl(t)}}finally{e.releaseLock()}})}function Um(i){return Ze(i?.getReader)}function Ht(i){if(i instanceof qe)return i;if(i!=null){if(Vm(i))return tz(i);if(ld(i))return iz(i);if(Om(i))return nz(i);if(Lm(i))return RT(i);if(Hm(i))return rz(i);if(Um(i))return oz(i)}throw zm(i)}function tz(i){return new qe(r=>{let e=i[nd]();if(Ze(e.subscribe))return e.subscribe(r);throw new TypeError(`Provided object does not correctly implement Symbol.observable`)})}function iz(i){return new qe(r=>{for(let e=0;e{i.then(e=>{r.closed||(r.next(e),r.complete())},e=>r.error(e)).then(null,Tm)})}function rz(i){return new qe(r=>{for(let e of i)if(r.next(e),r.closed)return;r.complete()})}function RT(i){return new qe(r=>{az(i,r).catch(e=>r.error(e))})}function oz(i){return RT(Gm(i))}function az(i,r){var e,t,n,o;return ET(this,void 0,void 0,function*(){try{for(e=MT(i);t=yield e.next(),!t.done;){let a=t.value;if(r.next(a),r.closed)return}}catch(a){n={error:a}}finally{try{t&&!t.done&&(o=e.return)&&(yield o.call(e))}finally{if(n)throw n.error}}r.complete()})}function dr(i,r,e,t=0,n=!1){let o=r.schedule(function(){e(),n?i.add(this.schedule(null,t)):this.unsubscribe()},t);if(i.add(o),!n)return o}function jm(i,r=0){return ht((e,t)=>{e.subscribe(ut(t,n=>dr(t,i,()=>t.next(n),r),()=>dr(t,i,()=>t.complete(),r),n=>dr(t,i,()=>t.error(n),r)))})}function Wm(i,r=0){return ht((e,t)=>{t.add(i.schedule(()=>e.subscribe(t),r))})}function AT(i,r){return Ht(i).pipe(Wm(r),jm(r))}function FT(i,r){return Ht(i).pipe(Wm(r),jm(r))}function PT(i,r){return new qe(e=>{let t=0;return r.schedule(function(){t===i.length?e.complete():(e.next(i[t++]),e.closed||this.schedule())})})}function OT(i,r){return new qe(e=>{let t;return dr(e,r,()=>{t=i[Bm](),dr(e,r,()=>{let n,o;try{({value:n,done:o}=t.next())}catch(a){e.error(a);return}o?e.complete():e.next(n)},0,!0)}),()=>Ze(t?.return)&&t.return()})}function $m(i,r){if(!i)throw new Error(`Iterable cannot be null`);return new qe(e=>{dr(e,r,()=>{let t=i[Symbol.asyncIterator]();dr(e,r,()=>{t.next().then(n=>{n.done?e.complete():e.next(n.value)})},0,!0)})})}function VT(i,r){return $m(Gm(i),r)}function LT(i,r){if(i!=null){if(Vm(i))return AT(i,r);if(ld(i))return PT(i,r);if(Om(i))return FT(i,r);if(Lm(i))return $m(i,r);if(Hm(i))return OT(i,r);if(Um(i))return VT(i,r)}throw zm(i)}function ui(i,r){return r?LT(i,r):Ht(i)}function lt(...i){return ui(i,Ko(i))}function Zy(i,r){let e=Ze(i)?i:()=>i,t=n=>n.error(e());return new qe(r?n=>r.schedule(t,0,n):t)}function qm(i){return!!i&&(i instanceof qe||Ze(i.lift)&&Ze(i.subscribe))}var Pl=ed(i=>function(){i(this),this.name=`EmptyError`,this.message=`no elements in sequence`});function zT(i){return i instanceof Date&&!isNaN(i)}function Pt(i,r){return ht((e,t)=>{let n=0;e.subscribe(ut(t,o=>{t.next(i.call(r,o,n++))}))})}var{isArray:sz}=Array;function lz(i,r){return sz(r)?i(...r):i(r)}function cd(i){return Pt(r=>lz(i,r))}var{isArray:cz}=Array,{getPrototypeOf:dz,prototype:uz,keys:gz}=Object;function Qm(i){if(i.length===1){let r=i[0];if(cz(r))return{args:r,keys:null};if(pz(r)){let e=gz(r);return{args:e.map(t=>r[t]),keys:e}}}return{args:i,keys:null}}function pz(i){return i&&typeof i==`object`&&dz(i)===uz}function Km(i,r){return i.reduce((e,t,n)=>(e[t]=r[n],e),{})}function Ym(...i){let r=Ko(i),e=Pm(i),{args:t,keys:n}=Qm(i);if(t.length===0)return ui([],r);let o=new qe(hz(t,r,n?a=>Km(n,a):Ir));return e?o.pipe(cd(e)):o}function hz(i,r,e=Ir){return t=>{BT(r,()=>{let{length:n}=i,o=new Array(n),a=n,s=n;for(let l=0;l{let c=ui(i[l],r),d=!1;c.subscribe(ut(t,p=>{o[l]=p,d||(d=!0,s--),s||t.next(e(o.slice()))},()=>{--a||t.complete()}))},t)},t)}}function BT(i,r,e){i?dr(e,i,r):r()}function HT(i,r,e,t,n,o,a,s){let l=[],c=0,d=0,p=!1,f=()=>{p&&!l.length&&!c&&r.complete()},v=T=>c{o&&r.next(T),c++;let M=!1;Ht(e(T,d++)).subscribe(ut(r,F=>{n?.(F),o?v(F):r.next(F)},()=>{M=!0},void 0,()=>{if(M)try{for(c--;l.length&&cy(F)):y(F)}f()}catch(F){r.error(F)}}))};return i.subscribe(ut(r,v,()=>{p=!0,f()})),()=>{s?.()}}function en(i,r,e=Infinity){return Ze(r)?en((t,n)=>Pt((o,a)=>r(t,o,n,a))(Ht(i(t,n))),e):(typeof r==`number`&&(e=r),ht((t,n)=>HT(t,n,i,e)))}function Es(i=Infinity){return en(Ir,i)}function GT(){return Es(1)}function dd(...i){return GT()(ui(i,Ko(i)))}function ug(i){return new qe(r=>{Ht(i()).subscribe(r)})}function Xy(...i){let r=Pm(i),{args:e,keys:t}=Qm(i),n=new qe(o=>{let{length:a}=e;if(!a){o.complete();return}let s=new Array(a),l=a,c=a;for(let d=0;d{p||(p=!0,c--),s[d]=f},()=>l--,void 0,()=>{(!l||!p)&&(c||o.next(t?Km(t,s):s),o.complete())}))}});return r?n.pipe(cd(r)):n}var mz=[`addListener`,`removeListener`];var fz=[`addEventListener`,`removeEventListener`];var _z=[`on`,`off`];function Ct(i,r,e,t){if(Ze(e)&&(t=e,e=void 0),t)return Ct(i,r,e).pipe(cd(t));let[n,o]=yz(i)?fz.map(a=>s=>i[a](r,s,e)):xz(i)?mz.map(UT(i,r)):vz(i)?_z.map(UT(i,r)):[];if(!n&&ld(i))return en(a=>Ct(a,r,e))(Ht(i));if(!n)throw new TypeError(`Invalid event target`);return new qe(a=>{let s=(...l)=>a.next(1o(s)})}function UT(i,r){return e=>t=>i[e](r,t)}function xz(i){return Ze(i.addListener)&&Ze(i.removeListener)}function vz(i){return Ze(i.on)&&Ze(i.off)}function yz(i){return Ze(i.addEventListener)&&Ze(i.removeEventListener)}function Aa(i=0,r,e=NT){let t=-1;return r!=null&&(Fm(r)?e=r:t=r),new qe(n=>{let o=zT(i)?+i-e.now():i;o<0&&(o=0);let a=0;return e.schedule(function(){n.closed||(n.next(a++),0<=t?this.schedule(void 0,t):n.complete())},o)})}function tr(i=0,r=Ra){return i<0&&(i=0),Aa(i,i,r)}function gg(...i){let r=Ko(i),e=DT(i,Infinity),t=i;return t.length?t.length===1?Ht(t[0]):Es(e)(ui(t,r)):Ji}var Jy=new qe(wt);function gt(i,r){return ht((e,t)=>{let n=0;e.subscribe(ut(t,o=>i.call(r,o,n++)&&t.next(o)))})}function ud(i){return ht((r,e)=>{let t=null,n=!1,o;t=r.subscribe(ut(e,void 0,void 0,a=>{o=Ht(i(a,ud(i)(r))),t?(t.unsubscribe(),t=null,o.subscribe(e)):n=!0})),n&&(t.unsubscribe(),t=null,o.subscribe(e))})}function ks(i,r){return Ze(r)?en(i,r,1):en(i,1)}function pg(i){return ht((r,e)=>{let t=!1,n=null,o=null,a=()=>{if(o?.unsubscribe(),o=null,t){t=!1;let s=n;n=null,e.next(s)}};r.subscribe(ut(e,s=>{o?.unsubscribe(),t=!0,n=s,o=ut(e,a,wt),Ht(i(s)).subscribe(o)},()=>{a(),e.complete()},void 0,()=>{n=o=null}))})}function hg(i,r=Ra){return ht((e,t)=>{let n=null,o=null,a=null,s=()=>{if(n){n.unsubscribe(),n=null;let c=o;o=null,t.next(c)}};function l(){let c=a+i,d=r.now();if(d{o=c,a=r.now(),n||(n=r.schedule(l,i),t.add(n))},()=>{s(),t.complete()},void 0,()=>{o=n=null}))})}function jT(i){return ht((r,e)=>{let t=!1;r.subscribe(ut(e,n=>{t=!0,e.next(n)},()=>{t||e.next(i),e.complete()}))})}function ur(i){return i<=0?()=>Ji:ht((r,e)=>{let t=0;r.subscribe(ut(e,n=>{++t<=i&&(e.next(n),i<=t&&e.complete())}))})}function WT(i=bz){return ht((r,e)=>{let t=!1;r.subscribe(ut(e,n=>{t=!0,e.next(n)},()=>t?e.complete():e.error(i())))})}function bz(){return new Pl}function gd(i){return ht((r,e)=>{try{r.subscribe(e)}finally{e.add(i)}})}function zt(i,r){let e=arguments.length>=2;return t=>t.pipe(i?gt((n,o)=>i(n,o,t)):Ir,ur(1),e?jT(r):WT(()=>new Pl))}function Zm(i){return i<=0?()=>Ji:ht((r,e)=>{let t=[];r.subscribe(ut(e,n=>{t.push(n),i{for(let n of t)e.next(n);e.complete()},void 0,()=>{t=null}))})}function $T(i){return ht((r,e)=>{let t=!1,n=null;r.subscribe(ut(e,o=>{t=!0,n=o})),Ht(i).subscribe(ut(e,()=>{if(t){t=!1;let o=n;n=null,e.next(o)}},wt))})}function eb(i,r=Ra){return $T(tr(i,r))}function qT(i={}){let{connector:r=()=>new ce,resetOnError:e=!0,resetOnComplete:t=!0,resetOnRefCountZero:n=!0}=i;return o=>{let a,s,l,c=0,d=!1,p=!1,f=()=>{s?.unsubscribe(),s=void 0},v=()=>{f(),a=l=void 0,d=p=!1},y=()=>{let T=a;v(),T?.unsubscribe()};return ht((T,M)=>{c++,!p&&!d&&f();let F=l=l??r();M.add(()=>{c--,c===0&&!p&&!d&&(s=tb(y,n))}),F.subscribe(M),!a&&c>0&&(a=new Ma({next:A=>F.next(A),error:A=>{p=!0,f(),s=tb(v,e,A),F.error(A)},complete:()=>{d=!0,f(),s=tb(v,t),F.complete()}}),Ht(T).subscribe(a))})(o)}}function tb(i,r,...e){if(r===!0){i();return}if(r===!1)return;let t=new Ma({next:()=>{t.unsubscribe(),i()}});return Ht(r(...e)).subscribe(t)}function ib(i,r,e){let t,n=!1;return i&&typeof i==`object`?{bufferSize:t=Infinity,windowTime:r=Infinity,refCount:n=!1,scheduler:e}=i:t=i??Infinity,qT({connector:()=>new cg(t,r,e),resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:n})}function nb(i){return i<=0?Ir:ht((r,e)=>{let t=new Array(i),n=0;return r.subscribe(ut(e,o=>{let a=n++;if(a{t=null}})}function rb(...i){let r=Ko(i);return ht((e,t)=>{(r?dd(i,e,r):dd(i,e)).subscribe(t)})}function Ui(i,r){return ht((e,t)=>{let n=null,o=0,a=!1,s=()=>a&&!n&&t.complete();e.subscribe(ut(t,l=>{n?.unsubscribe();let c=0,d=o++;Ht(i(l,d)).subscribe(n=ut(t,p=>t.next(r?r(l,p,d,c++):p),()=>{n=null,s()}))},()=>{a=!0,s()}))})}function U(i){return ht((r,e)=>{Ht(i).subscribe(ut(e,()=>e.complete(),wt)),!e.closed&&r.subscribe(e)})}function Ol(i,r=!1){return ht((e,t)=>{let n=0;e.subscribe(ut(t,o=>{let a=i(o,n++);(a||r)&&t.next(o),!a&&t.complete()}))})}function gr(i,r,e){let t=Ze(i)||r||e?{next:i,error:r,complete:e}:i;return t?ht((n,o)=>{var a;(a=t.subscribe)===null||a===void 0||a.call(t);let s=!0;n.subscribe(ut(o,l=>{var c;(c=t.next)===null||c===void 0||c.call(t,l),o.next(l)},()=>{var l;s=!1,(l=t.complete)===null||l===void 0||l.call(t),o.complete()},l=>{var c;s=!1,(c=t.error)===null||c===void 0||c.call(t,l),o.error(l)},()=>{var l,c;s&&((l=t.unsubscribe)===null||l===void 0||l.call(t)),(c=t.finalize)===null||c===void 0||c.call(t)}))}):Ir}function ho(i,r){return ht((e,t)=>{let{leading:n=!0,trailing:o=!1}=r??{},a=!1,s=null,l=null,c=!1,d=()=>{l?.unsubscribe(),l=null,o&&(v(),c&&t.complete())},p=()=>{l=null,c&&t.complete()},f=y=>l=Ht(i(y)).subscribe(ut(t,d,p)),v=()=>{if(a){a=!1;let y=s;s=null,t.next(y),!c&&f(y)}};e.subscribe(ut(t,y=>{a=!0,s=y,!(l&&!l.closed)&&(n?v():f(y))},()=>{c=!0,!(o&&a&&l&&!l.closed)&&t.complete()}))})}function Nr(i,r=Ra,e){let t=Aa(i,r);return ho(()=>t,e)}var of=`https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss`;var X=class extends Error{code;constructor(r,e){super(Dr(r,e)),this.code=r}};function Sz(i){return`NG0${Math.abs(i)}`}function Dr(i,r){return`${Sz(i)}${r?`: `+r:``}`}function Kt(i){for(let r in i)if(i[r]===Kt)return r;throw Error(``)}function JT(i,r){for(let e in r)Object.hasOwn(r,e)&&!Object.hasOwn(i,e)&&(i[e]=r[e])}function bg(i){if(typeof i==`string`)return i;if(Array.isArray(i))return`[${i.map(bg).join(`, `)}]`;if(i==null)return``+i;let r=i.overriddenName||i.name;if(r)return`${r}`;let e=i.toString();if(e==null)return``+e;let t=e.indexOf(` -`);return t>=0?e.slice(0,t):e}function af(i,r){return i?r?`${i} ${r}`:i:r||``}var wz=Kt({__forward_ref__:Kt});function rn(i){return i.__forward_ref__=rn,i}function tn(i){return xb(i)?i():i}function xb(i){return typeof i==`function`&&Object.hasOwn(i,wz)&&i.__forward_ref__===rn}function de(i){return{token:i.token,providedIn:i.providedIn||null,factory:i.factory,value:void 0}}function Ee(i){return{providers:i.providers||[],imports:i.imports||[]}}function Sg(i){return Cz(i,sf)}function vb(i){return Sg(i)!==null}function Cz(i,r){return Object.hasOwn(i,r)&&i[r]||null}function Iz(i){return(i?.[sf]??null)||null}function ab(i){return i&&Object.hasOwn(i,Jm)?i[Jm]:null}var sf=Kt({ɵprov:Kt});var Jm=Kt({ɵinj:Kt});var le=class{_desc;ngMetadataName=`InjectionToken`;ɵprov;constructor(r,e){this._desc=r,this.ɵprov=void 0,typeof e==`number`?this.__NG_ELEMENT_ID__=e:e!==void 0&&(this.ɵprov=de({token:this,providedIn:e.providedIn||`root`,factory:e.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function yb(i){return i&&!!i.ɵproviders}var wg=Kt({ɵcmp:Kt});var Cg=Kt({ɵdir:Kt});var bb=Kt({ɵpipe:Kt});var Sb=Kt({ɵmod:Kt});var _g=Kt({ɵfac:Kt});var Bl=Kt({__NG_ELEMENT_ID__:Kt});var QT=Kt({__NG_ENV_ID__:Kt});function eE(i){return cf(i,`@NgModule`),i[Sb]||null}function za(i){return cf(i,`@Component`),i[wg]||null}function lf(i){return cf(i,`@Directive`),i[Cg]||null}function tE(i){return cf(i,`@Pipe`),i[bb]||null}function cf(i,r){if(i==null)throw new X(-919,!1)}function As(i){return typeof i==`string`?i:i==null?``:String(i)}var iE=Kt({ngErrorCode:Kt});var Nz=Kt({ngErrorMessage:Kt});var Dz=Kt({ngTokenPath:Kt});function wb(i,r){return nE(``,-200,r)}function df(i,r){throw new X(-201,!1)}function nE(i,r,e){let t=new X(r,i);return t[iE]=r,t[Nz]=i,e&&(t[Dz]=e),t}function Tz(i){return i[iE]}var sb;function rE(){return sb}function ir(i){let r=sb;return sb=i,r}function Cb(i,r,e){let t=Sg(i);if(t&&t.providedIn==`root`)return t.value===void 0?t.value=t.factory():t.value;if(e&8)return null;if(r!==void 0)return r;df(i,``)}var on=globalThis;var Vl={};var kz=`__NG_DI_FLAG__`;var lb=class{injector;constructor(r){this.injector=r}retrieve(r,e){let t=Ll(e)||0;try{return this.injector.get(r,t&8?null:Vl,t)}catch(n){if(Jc(n))return n;throw n}}};function Mz(i,r=0){let e=Im();if(e===void 0)throw new X(-203,!1);if(e===null)return Cb(i,void 0,r);{let t=Rz(r),n=e.retrieve(i,t);if(Jc(n)){if(t.optional)return null;throw n}return n}}function Te(i,r=0){return(rE()||Mz)(tn(i),r)}function _(i,r){return Te(i,Ll(r))}function Ll(i){return typeof i>`u`||typeof i==`number`?i:0|(i.optional&&8)|(i.host&&1)|(i.self&&2)|(i.skipSelf&&4)}function Rz(i){return{optional:!!(i&8),host:!!(i&1),self:!!(i&2),skipSelf:!!(i&4)}}function cb(i){let r=[];for(let e=0;eArray.isArray(e)?uf(e,r):r(e))}function Ib(i,r,e){r>=i.length?i.push(e):i.splice(r,0,e)}function Ig(i,r){return r>=i.length-1?i.pop():i.splice(r,1)[0]}function sE(i,r){let e=[];for(let t=0;tr;)i[n]=i[n-2],n--;i[r]=e,i[r+1]=t}}function gf(i,r,e){let t=fd(i,r);return t>=0?i[t|1]=e:(t=~t,lE(i,t,r,e)),t}function pf(i,r){let e=fd(i,r);if(e>=0)return i[e|1]}function fd(i,r){return Fz(i,r,1)}function Fz(i,r,e){let t=0,n=i.length>>e;for(;n!==t;){let o=t+(n-t>>1),a=i[o<r?n=o:t=o+1}return~(n<{e.push(a)};return uf(r,a=>{let s=a;ef(s,o,[],t)&&(n||=[],n.push(s))}),n!==void 0&&cE(n,o),e}function cE(i,r){for(let e=0;e{r(o,t)})}}function ef(i,r,e,t){if(i=tn(i),!i)return!1;let n=null,o=ab(i),a=!o&&za(i);if(!o&&!a){let l=i.ngModule;if(o=ab(l),o)n=l;else return!1}else{if(a&&!a.standalone)return!1;n=i}let s=t.has(n);if(a){if(s)return!1;if(t.add(n),a.dependencies){let l=typeof a.dependencies==`function`?a.dependencies():a.dependencies;for(let c of l)ef(c,r,e,t)}}else if(o){if(o.imports!=null&&!s){t.add(n);let c;uf(o.imports,d=>{ef(d,r,e,t)&&(c||=[],c.push(d))}),c!==void 0&&cE(c,r)}if(!s){let c=Rs(n)||(()=>new n);r({provide:n,useFactory:c,deps:Bn},n),r({provide:Nb,useValue:n,multi:!0},n),r({provide:_d,useValue:()=>Te(n),multi:!0},n)}let l=o.providers;if(l!=null&&!s){let c=i;Tb(l,d=>{r(d,c)})}}else return!1;return n!==i&&i.providers!==void 0}function Tb(i,r){for(let e of i)yb(e)&&(e=e.ɵproviders),Array.isArray(e)?Tb(e,r):r(e)}var Pz=Kt({provide:String,useValue:Kt});function dE(i){return i!==null&&typeof i==`object`&&Pz in i}function Oz(i){return!!(i&&i.useExisting)}function Vz(i){return!!(i&&i.useFactory)}function zl(i){return typeof i==`function`}function uE(i){return!!i.useClass}var Dg=new le(``);var Xm={};var KT={};var ob;function xd(){return ob===void 0&&(ob=new hd),ob}var Yt=class{};var Pa=class extends Yt{parent;source;scopes;records=new Map;_ngOnDestroyHooks=new Set;_onDestroyHooks=[];get destroyed(){return this._destroyed}_destroyed=!1;injectorDefTypes;constructor(r,e,t,n){super(),this.parent=e,this.source=t,this.scopes=n,ub(r,a=>this.processProvider(a)),this.records.set(Ng,pd(void 0,this)),n.has(`environment`)&&this.records.set(Yt,pd(void 0,this));let o=this.records.get(Dg);o!=null&&typeof o.value==`string`&&this.scopes.add(o.value),this.injectorDefTypes=new Set(this.get(Nb,Bn,{self:!0}))}retrieve(r,e){let t=Ll(e)||0;try{return this.get(r,Vl,t)}catch(n){if(Jc(n))return n;throw n}}destroy(){mg(this),this._destroyed=!0;let r=We(null);try{for(let t of this._ngOnDestroyHooks)t.ngOnDestroy();let e=this._onDestroyHooks;this._onDestroyHooks=[];for(let t of e)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),We(r)}}onDestroy(r){return mg(this),this._onDestroyHooks.push(r),()=>this.removeOnDestroy(r)}runInContext(r){mg(this);let e=Qo(this),t=ir(void 0);try{return r()}finally{Qo(e),ir(t)}}get(r,e=Vl,t){if(mg(this),Object.hasOwn(r,QT))return r[QT](this);let n=Ll(t),a=Qo(this),s=ir(void 0);try{if(!(n&4)){let c=this.records.get(r);if(c===void 0){let d=Gz(r)&&Sg(r);d&&this.injectableDefInScope(d)?c=pd(db(r),Xm):c=null,this.records.set(r,c)}if(c!=null)return this.hydrate(r,c,n)}let l=n&2?xd():this.parent;return e=n&8&&e===Vl?null:e,l.get(r,e)}catch(l){let c=Tz(l);throw c===-200||c===-201?new X(c,null):l}finally{ir(s),Qo(a)}}resolveInjectorInitializers(){let r=We(null),e=Qo(this),t=ir(void 0);try{let o=this.get(_d,Bn,{self:!0});for(let a of o)a()}finally{Qo(e),ir(t),We(r)}}toString(){return`R3Injector[...]`}processProvider(r){r=tn(r);let e=zl(r)?r:tn(r&&r.provide),t=zz(r);if(!zl(r)&&r.multi===!0){let n=this.records.get(e);n||(n=pd(void 0,Xm,!0),n.factory=()=>cb(n.multi),this.records.set(e,n)),e=r,n.multi.push(r)}this.records.set(e,t)}hydrate(r,e,t){let n=We(null);try{if(e.value===KT)throw wb(``);return e.value===Xm&&(e.value=KT,e.value=e.factory(void 0,t)),typeof e.value==`object`&&e.value&&Hz(e.value)&&this._ngOnDestroyHooks.add(e.value),e.value}finally{We(n)}}injectableDefInScope(r){if(!r.providedIn)return!1;let e=tn(r.providedIn);return typeof e==`string`?e===`any`||this.scopes.has(e):this.injectorDefTypes.has(e)}removeOnDestroy(r){let e=this._onDestroyHooks.indexOf(r);e!==-1&&this._onDestroyHooks.splice(e,1)}};function db(i){let r=Sg(i),e=r!==null?r.factory:Rs(i);if(e!==null)return e;if(i instanceof le)throw new X(-204,!1);if(i instanceof Function)return Lz(i);throw new X(-204,!1)}function Lz(i){if(i.length>0)throw new X(-204,!1);let e=Iz(i);return e!==null?()=>e.factory(i):()=>new i}function zz(i){if(dE(i))return pd(void 0,i.useValue);return pd(Eb(i),Xm)}function Eb(i,r,e){let t;if(zl(i)){let n=tn(i);return Rs(n)||db(n)}else if(dE(i))t=()=>tn(i.useValue);else if(Vz(i))t=()=>i.useFactory(...cb(i.deps||[]));else if(Oz(i))t=(n,o)=>Te(tn(i.useExisting),o!==void 0&&o&8?8:void 0);else{let n=tn(i&&(i.useClass||i.provide));if(Bz(i))t=()=>new n(...cb(i.deps));else return Rs(n)||db(n)}return t}function mg(i){if(i.destroyed)throw new X(-205,!1)}function pd(i,r,e=!1){return{factory:i,value:r,multi:e?[]:void 0}}function Bz(i){return!!i.deps}function Hz(i){return i!==null&&typeof i==`object`&&typeof i.ngOnDestroy==`function`}function Gz(i){return typeof i==`function`||typeof i==`object`&&i.ngMetadataName===`InjectionToken`}function ub(i,r){for(let e of i)Array.isArray(e)?ub(e,r):e&&yb(e)?ub(e.ɵproviders,r):r(e)}function qi(i,r){let e;i instanceof Pa?(mg(i),e=i):e=new lb(i);let n=Qo(e),o=ir(void 0);try{return r()}finally{Qo(n),ir(o)}}function kb(){return rE()!==void 0||Im()!=null}var mo=0;var je=1;var nt=2;var nn=3;var qr=4;var Hn=5;var Hl=6;var vd=7;var Pi=8;var Yo=9;var fo=10;var Zt=11;var yd=12;var Mb=13;var Ps=14;var Gn=15;var Os=16;var Gl=17;var Zo=18;var Xo=19;var Rb=20;var Fa=21;var mf=22;var Oa=23;var Tr=24;var Ul=25;var Jo=26;var Xt=27;var gE=1;var Ab=6;var jl=7;var Tg=8;var Wl=9;var Ei=10;function Ha(i){return Array.isArray(i)&&typeof i[gE]==`object`}function Qr(i){return Array.isArray(i)&&i[gE]===!0}function Fb(i){return(i.flags&4)!==0}function ea(i){return i.componentOffset>-1}function bd(i){return(i.flags&1)===1}function _o(i){return!!i.template}function Sd(i){return(i[nt]&512)!==0}function $l(i){return(i[nt]&256)===256}var bi=(function(i){return i[i.NONE=0]=`NONE`,i[i.HTML=1]=`HTML`,i[i.STYLE=2]=`STYLE`,i[i.SCRIPT=3]=`SCRIPT`,i[i.URL=4]=`URL`,i[i.RESOURCE_URL=5]=`RESOURCE_URL`,i[i.ATTRIBUTE_NO_BINDING=6]=`ATTRIBUTE_NO_BINDING`,i})(bi||{});var fg;var md=`svg`;var ff=`math`;var pE=``;var YT=`*`;var gb=()=>Object.create(null);function Uz(){return fg||(fg=gb(),Ms(bi.HTML,void 0,[[`iframe`,[`srcdoc`]],[`*`,[`innerHTML`,`outerHTML`]]]),Ms(bi.STYLE,void 0,[[`*`,[`style`]]]),Ms(bi.URL,void 0,[[`*`,[`formAction`]],[`area`,[`href`]],[`a`,[`href`,`xlink:href`]],[`form`,[`action`]],[`img`,[`src`]],[`video`,[`src`]]]),Ms(bi.URL,ff,[[`*`,[`href`,`xlink:href`]]]),Ms(bi.RESOURCE_URL,void 0,[[`base`,[`href`]],[`embed`,[`src`]],[`frame`,[`src`]],[`iframe`,[`src`]],[`link`,[`href`]],[`object`,[`codebase`,`data`]]]),Ms(bi.URL,md,[[`a`,[`href`,`xlink:href`]]]),Ms(bi.ATTRIBUTE_NO_BINDING,md,[[`animate`,[`attributeName`,`values`,`to`,`from`]],[`set`,[`to`,`attributeName`]],[`animateMotion`,[`attributeName`]],[`animateTransform`,[`attributeName`]]]),Ms(bi.ATTRIBUTE_NO_BINDING,void 0,[[`unknown`,[`attributeName`,`values`,`to`,`from`,`sandbox`,`allow`,`allowFullscreen`,`referrerPolicy`,`csp`,`fetchPriority`,`credentialless`]],[`iframe`,[`sandbox`,`allow`,`allowFullscreen`,`referrerPolicy`,`csp`,`fetchPriority`,`credentialless`]]]),fg)}function Ms(i,r,e){let t=r??pE;for(let[n,o]of e){let a=n.toLowerCase();for(let s of o){let l=s.toLowerCase(),c=fg[l]??=gb(),d=c[t]??=gb();d[a]=i}}}function hE(i,r,e){let n=Uz()[r.toLowerCase()];if(!n)return bi.NONE;let o=i.toLowerCase(),a;if(e){let s=n[e];s&&(a=s[o]??s[YT])}if(a===void 0){let s=n[pE];s&&(a=s[o]??s[YT])}return a??bi.NONE}function En(i){for(;Array.isArray(i);)i=i[mo];return i}function Pb(i,r){return En(r[i])}function pr(i,r){return En(r[i.index])}function _f(i,r){return i.data[r]}function Vs(i,r){return i[r]}function Eg(i,r,e,t){e>=i.data.length&&(i.data[e]=null,i.blueprint[e]=null),r[e]=t}function Kr(i,r){let e=r[i];return Ha(e)?e:e[mo]}function mE(i){return(i[nt]&4)===4}function xf(i){return(i[nt]&128)===128}function fE(i){return Qr(i[nn])}function Yr(i,r){return r==null?null:i[r]}function Ob(i){i[Gl]=0}function Vb(i){i[nt]&1024||(i[nt]|=1024,xf(i)&&ql(i))}function _E(i,r){for(;i>0;)r=r[Ps],i--;return r}function kg(i){return!!(i[nt]&9216||i[Tr]?.dirty)}function vf(i){i[fo].changeDetectionScheduler?.notify(8),i[nt]&64&&(i[nt]|=1024),kg(i)&&ql(i)}function ql(i){i[fo].changeDetectionScheduler?.notify(0);let r=Va(i);for(;r!==null&&!(r[nt]&8192||(r[nt]|=8192,!xf(r)));)r=Va(r)}function yf(i,r){if($l(i))throw new X(911,!1);i[Fa]===null&&(i[Fa]=[]),i[Fa].push(r)}function xE(i,r){if(i[Fa]===null)return;let e=i[Fa].indexOf(r);e!==-1&&i[Fa].splice(e,1)}function Va(i){let r=i[nn];return Qr(r)?r[nn]:r}function Lb(i){return i[vd]??=[]}function zb(i){return i.cleanup??=[]}function vE(i,r,e,t){let n=Lb(r);n.push(e),i.firstCreatePass&&zb(i).push(t,n.length-1)}var vt={lFrame:kE(null),bindingsEnabled:!0,skipHydrationRootTNode:null};var pb=!1;function yE(){return vt.lFrame.elementDepthCount}function bE(){vt.lFrame.elementDepthCount++}function Bb(){vt.lFrame.elementDepthCount--}function bf(){return vt.bindingsEnabled}function Hb(){return vt.skipHydrationRootTNode!==null}function Gb(i){return vt.skipHydrationRootTNode===i}function Ub(){vt.skipHydrationRootTNode=null}function Ie(){return vt.lFrame.lView}function Jt(){return vt.lFrame.tView}function I(i){return vt.lFrame.contextLView=i,i[Pi]}function N(i){return vt.lFrame.contextLView=null,i}function an(){let i=jb();for(;i!==null&&i.type===64;)i=i.parent;return i}function jb(){return vt.lFrame.currentTNode}function SE(){let i=vt.lFrame,r=i.currentTNode;return i.isParent?r:r.parent}function Ql(i,r){let e=vt.lFrame;e.currentTNode=i,e.isParent=r}function Wb(){return vt.lFrame.isParent}function $b(){vt.lFrame.isParent=!1}function qb(){return vt.lFrame.contextLView}function Qb(){return pb}function xg(i){let r=pb;return pb=i,r}function Un(){let i=vt.lFrame,r=i.bindingRootIndex;return r===-1&&(r=i.bindingRootIndex=i.tView.bindingStartIndex),r}function wE(){return vt.lFrame.bindingIndex}function CE(i){return vt.lFrame.bindingIndex=i}function ta(){return vt.lFrame.bindingIndex++}function Sf(i){let r=vt.lFrame,e=r.bindingIndex;return r.bindingIndex=r.bindingIndex+i,e}function IE(){return vt.lFrame.inI18n}function NE(i,r){let e=vt.lFrame;e.bindingIndex=e.bindingRootIndex=i,wf(r)}function DE(){return vt.lFrame.currentDirectiveIndex}function wf(i){vt.lFrame.currentDirectiveIndex=i}function TE(i){let r=vt.lFrame.currentDirectiveIndex;return r===-1?null:i[r]}function Cf(){return vt.lFrame.currentQueryIndex}function Mg(i){vt.lFrame.currentQueryIndex=i}function jz(i){let r=i[je];return r.type===2?r.declTNode:r.type===1?i[Hn]:null}function Kb(i,r,e){if(e&4){let n=r,o=i;for(;n=n.parent,n===null&&!(e&1);)if(n=jz(o),n===null||(o=o[Ps],n.type&10))break;if(n===null)return!1;r=n,i=o}let t=vt.lFrame=EE();return t.currentTNode=r,t.lView=i,!0}function If(i){let r=EE(),e=i[je];vt.lFrame=r,r.currentTNode=e.firstChild,r.lView=i,r.tView=e,r.contextLView=i,r.bindingIndex=e.bindingStartIndex,r.inI18n=!1}function EE(){let i=vt.lFrame,r=i===null?null:i.child;return r===null?kE(i):r}function kE(i){let r={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:i,child:null,inI18n:!1};return i!==null&&(i.child=r),r}function ME(){let i=vt.lFrame;return vt.lFrame=i.parent,i.currentTNode=null,i.lView=null,i}var Yb=ME;function Nf(){let i=ME();i.isParent=!0,i.tView=null,i.selectedIndex=-1,i.contextLView=null,i.elementDepthCount=0,i.currentDirectiveIndex=-1,i.currentNamespace=null,i.bindingRootIndex=-1,i.bindingIndex=-1,i.currentQueryIndex=0}function RE(i){return(vt.lFrame.contextLView=_E(i,vt.lFrame.contextLView))[Pi]}function Zr$1(){return vt.lFrame.selectedIndex}function Ls(i){vt.lFrame.selectedIndex=i}function zs(){let i=vt.lFrame;return _f(i.tView,i.selectedIndex)}function xo(){vt.lFrame.currentNamespace=md}function Df(){Wz()}function Wz(){vt.lFrame.currentNamespace=null}function Zb(){return vt.lFrame.currentNamespace}var AE=!0;function Tf(){return AE}function Rg(i){AE=i}function hb(i,r=null,e=null,t){let n=Xb(i,r,e,t);return n.resolveInjectorInitializers(),n}function Xb(i,r=null,e=null,t,n=new Set){return new Pa([e||Bn,hf(i)],r||xd(),null,n)}var qt=class i{static THROW_IF_NOT_FOUND=Vl;static NULL=new hd;static create(r,e){if(Array.isArray(r))return hb({name:``},e,r,``);{let t=r.name??``;return hb({name:t},r.parent,r.providers,t)}}static ɵprov=de({token:i,providedIn:`any`,factory:()=>Te(Ng)});static __NG_ELEMENT_ID__=-1};var $e=new le(``);var Mt=class{static __NG_ELEMENT_ID__=$z;static __NG_ENV_ID__=r=>r};var tf=class extends Mt{_lView;constructor(r){super(),this._lView=r}get destroyed(){return $l(this._lView)}onDestroy(r){let e=this._lView;return yf(e,r),()=>xE(e,r)}};function $z(){return new tf(Ie())}var FE=!1;var PE=new le(``);var ia=(()=>{class i{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Gi(!1);debugTaskTracker=_(PE,{optional:!0});get hasPendingTasks(){return this.destroyed?!1:this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new qe(e=>{e.next(!1),e.complete()}):this.pendingTask}add(){!this.hasPendingTasks&&!this.destroyed&&this.pendingTask.next(!0);let e=this.taskId++;return this.pendingTasks.add(e),this.debugTaskTracker?.add(e),e}has(e){return this.pendingTasks.has(e)}remove(e){this.pendingTasks.delete(e),this.debugTaskTracker?.remove(e),this.pendingTasks.size===0&&this.hasPendingTasks&&this.pendingTask.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this.hasPendingTasks&&this.pendingTask.next(!1),this.destroyed=!0,this.pendingTask.unsubscribe()}static ɵprov=de({token:i,providedIn:`root`,factory:()=>new i})}return i})();var mb=class extends ce{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(r=!1){super(),this.__isAsync=r,kb()&&(this.destroyRef=_(Mt,{optional:!0})??void 0,this.pendingTasks=_(ia,{optional:!0})??void 0)}emit(r){let e=We(null);try{super.next(r)}finally{We(e)}}subscribe(r,e,t){let n=r,o=e||(()=>null),a=t;if(r&&typeof r==`object`){let l=r;n=l.next?.bind(l),o=l.error?.bind(l),a=l.complete?.bind(l)}this.__isAsync&&(o=this.wrapInTimeout(o),n&&(n=this.wrapInTimeout(n)),a&&(a=this.wrapInTimeout(a)));let s=super.subscribe({next:n,error:o,complete:a});return r instanceof yi&&r.add(s),s}wrapInTimeout(r){return e=>{let t=this.pendingTasks?.add();setTimeout(()=>{try{r(e)}finally{t!==void 0&&this.pendingTasks?.remove(t)}})}}};var k=mb;function nf(...i){}function Jb(i){let r,e;function t(){i=nf;try{e!==void 0&&typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(e),r!==void 0&&clearTimeout(r)}catch{}}return r=setTimeout(()=>{i(),t()}),typeof requestAnimationFrame==`function`&&(e=requestAnimationFrame(()=>{i(),t()})),()=>t()}function OE(i){return queueMicrotask(()=>i()),()=>{i=nf}}var e1=`isAngularZone`;var vg=e1+`_ID`;var qz=0;var Qe=class i{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new k(!1);onMicrotaskEmpty=new k(!1);onStable=new k(!1);onError=new k(!1);constructor(r){let{enableLongStackTrace:e=!1,shouldCoalesceEventChangeDetection:t=!1,shouldCoalesceRunChangeDetection:n=!1,scheduleInRootZone:o=FE}=r;if(typeof Zone>`u`)throw new X(908,!1);Zone.assertZonePatched();let a=this;a._nesting=0,a._outer=a._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(a._inner=a._inner.fork(new Zone.TaskTrackingZoneSpec)),e&&Zone.longStackTraceZoneSpec&&(a._inner=a._inner.fork(Zone.longStackTraceZoneSpec)),a.shouldCoalesceEventChangeDetection=!n&&t,a.shouldCoalesceRunChangeDetection=n,a.callbackScheduled=!1,a.scheduleInRootZone=o,Yz(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(e1)===!0}static assertInAngularZone(){if(!i.isInAngularZone())throw new X(909,!1)}static assertNotInAngularZone(){if(i.isInAngularZone())throw new X(909,!1)}run(r,e,t){return this._inner.run(r,e,t)}runTask(r,e,t,n){let o=this._inner,a=o.scheduleEventTask(`NgZoneEvent: `+n,r,Qz,nf,nf);try{return o.runTask(a,e,t)}finally{o.cancelTask(a)}}runGuarded(r,e,t){return this._inner.runGuarded(r,e,t)}runOutsideAngular(r){return this._outer.run(r)}};var Qz={};function t1(i){if(i._nesting==0&&!i.hasPendingMicrotasks&&!i.isStable)try{i._nesting++,i.onMicrotaskEmpty.emit(null)}finally{if(i._nesting--,!i.hasPendingMicrotasks)try{i.runOutsideAngular(()=>i.onStable.emit(null))}finally{i.isStable=!0}}}function Kz(i){if(i.isCheckStableRunning||i.callbackScheduled)return;i.callbackScheduled=!0;function r(){Jb(()=>{i.callbackScheduled=!1,fb(i),i.isCheckStableRunning=!0,t1(i),i.isCheckStableRunning=!1})}i.scheduleInRootZone?Zone.root.run(()=>{r()}):i._outer.run(()=>{r()}),fb(i)}function Yz(i){let r=()=>{Kz(i)},e=qz++;i._inner=i._inner.fork({name:`angular`,properties:{[e1]:!0,[vg]:e,[vg+e]:!0},onInvokeTask:(t,n,o,a,s,l)=>{if(Zz(l))return t.invokeTask(o,a,s,l);try{return ZT(i),t.invokeTask(o,a,s,l)}finally{(i.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||i.shouldCoalesceRunChangeDetection)&&r(),XT(i)}},onInvoke:(t,n,o,a,s,l,c)=>{try{return ZT(i),t.invoke(o,a,s,l,c)}finally{i.shouldCoalesceRunChangeDetection&&!i.callbackScheduled&&!Xz(l)&&r(),XT(i)}},onHasTask:(t,n,o,a)=>{t.hasTask(o,a),n===o&&(a.change==`microTask`?(i._hasPendingMicrotasks=a.microTask,fb(i),t1(i)):a.change==`macroTask`&&(i.hasPendingMacrotasks=a.macroTask))},onHandleError:(t,n,o,a)=>(t.handleError(o,a),i.runOutsideAngular(()=>i.onError.emit(a)),!1)})}function fb(i){i._hasPendingMicrotasks||(i.shouldCoalesceEventChangeDetection||i.shouldCoalesceRunChangeDetection)&&i.callbackScheduled===!0?i.hasPendingMicrotasks=!0:i.hasPendingMicrotasks=!1}function ZT(i){i._nesting++,i.isStable&&(i.isStable=!1,i.onUnstable.emit(null))}function XT(i){i._nesting--,t1(i)}var yg=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new k;onMicrotaskEmpty=new k;onStable=new k;onError=new k;run(r,e,t){return r.apply(e,t)}runGuarded(r,e,t){return r.apply(e,t)}runOutsideAngular(r){return r()}runTask(r,e,t,n){return r.apply(e,t)}};function Zz(i){return VE(i,`__ignore_ng_zone__`)}function Xz(i){return VE(i,`__scheduler_tick__`)}function VE(i,r){return!Array.isArray(i)||i.length!==1?!1:i[0]?.data?.[r]===!0}var $r=class{_console=console;handleError(r){this._console.error(`ERROR`,r)}};var Xr=new le(``,{factory:()=>{let i=_(Qe),r=_(Yt),e;return t=>{i.runOutsideAngular(()=>{r.destroyed&&!e?setTimeout(()=>{throw t}):(e??=r.get($r),e.handleError(t))})}}});var LE={provide:_d,useValue:()=>{_($r,{optional:!0})},multi:!0};function gi(i,r){let[e,t,n]=Oy(i,r?.equal),o=e;o[$i];return o.set=t,o.update=n,o.asReadonly=Ef.bind(o),o}function Ef(){let i=this[$i];if(i.readonlyFn===void 0){let r=()=>this();r[$i]=i,i.readonlyFn=r}return i.readonlyFn}var Ag=new le(``,{factory:()=>Jz});var Jz=`ng`;var kf=new le(``);var Ga=new le(``,{providedIn:`platform`,factory:()=>`unknown`});var wd=new le(``);var Fg=new le(``,{factory:()=>_($e).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null});var Pg=(()=>{class i{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=e9}return i})();function e9(){return new Pg(Ie(),an())}var La=class{};var Og=new le(``,{factory:()=>!0});var i1=new le(``);var Mf=(()=>{class i{static ɵprov=de({token:i,providedIn:`root`,factory:()=>new _b})}return i})();var _b=class{dirtyEffectCount=0;queues=new Map;add(r){this.enqueue(r),this.schedule(r)}schedule(r){r.dirty&&this.dirtyEffectCount++}remove(r){let e=r.zone,t=this.queues.get(e);t.has(r)&&(t.delete(r),r.dirty&&this.dirtyEffectCount--)}enqueue(r){let e=r.zone;this.queues.has(e)||this.queues.set(e,new Set);let t=this.queues.get(e);t.has(r)||t.add(r)}flush(){for(;this.dirtyEffectCount>0;){let r=!1;for(let[e,t]of this.queues)e===null?r||=this.flushQueue(t):r||=e.run(()=>this.flushQueue(t));r||(this.dirtyEffectCount=0)}}flushQueue(r){let e=!1;for(let t of r)t.dirty&&(this.dirtyEffectCount--,e=!0,t.run());return e}};var rf=class{[$i];constructor(r){this[$i]=r}destroy(){this[$i].destroy()}};function Bs(i,r){let e=r?.injector??_(qt),t=r?.manualCleanup!==!0?e.get(Mt):null,n,o=e.get(Pg,null,{optional:!0}),a=e.get(La);return o!==null?(n=n9(o.view,a,i),t instanceof tf&&t._lView===o.view&&(t=null)):n=r9(i,e.get(Mf),a),n.injector=e,t!==null&&(n.onDestroyFns=[t.onDestroy(()=>n.destroy())]),new rf(n)}var zE=s(r({},Vy),{cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let i=xg(!1);try{Ly(this)}finally{xg(i)}},cleanup(){if(!this.cleanupFns?.length)return;let i=We(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],We(i)}}});var t9=s(r({},zE),{consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(El(this),this.onDestroyFns!==null)for(let i of this.onDestroyFns)i();this.cleanup(),this.scheduler.remove(this)}});var i9=s(r({},zE),{consumerMarkedDirty(){this.view[nt]|=8192,ql(this.view),this.notifier.notify(13)},destroy(){if(El(this),this.onDestroyFns!==null)for(let i of this.onDestroyFns)i();this.cleanup(),this.view[Oa]?.delete(this)}});function n9(i,r,e){let t=Object.create(i9);return t.view=i,t.zone=typeof Zone<`u`?Zone.current:null,t.notifier=r,t.fn=BE(t,e),i[Oa]??=new Set,i[Oa].add(t),t.consumerMarkedDirty(t),t}function r9(i,r,e){let t=Object.create(t9);return t.fn=BE(t,i),t.scheduler=r,t.notifier=e,t.zone=typeof Zone<`u`?Zone.current:null,t.scheduler.add(t),t.notifier.notify(12),t}function BE(i,r){return()=>{r(e=>(i.cleanupFns??=[]).push(e))}}function Vg(i){return typeof i==`function`&&i[$i]!==void 0}function Rf(i){return Vg(i)&&typeof i.set==`function`}var Kl=(()=>{class i{internalPendingTasks=_(ia);scheduler=_(La);errorHandler=_(Xr);add(){let e=this.internalPendingTasks.add();return()=>{this.internalPendingTasks.has(e)&&(this.scheduler.notify(11),this.internalPendingTasks.remove(e))}}run(e){let t=this.add();try{e().catch(this.errorHandler).finally(t)}catch(n){this.errorHandler(n),t()}}static ɵprov=de({token:i,providedIn:`root`,factory:()=>new i})}return i})();function Qg(i){return{toString:i}.toString()}var Gt=(function(i){return i[i.TemplateCreateStart=0]=`TemplateCreateStart`,i[i.TemplateCreateEnd=1]=`TemplateCreateEnd`,i[i.TemplateUpdateStart=2]=`TemplateUpdateStart`,i[i.TemplateUpdateEnd=3]=`TemplateUpdateEnd`,i[i.LifecycleHookStart=4]=`LifecycleHookStart`,i[i.LifecycleHookEnd=5]=`LifecycleHookEnd`,i[i.OutputStart=6]=`OutputStart`,i[i.OutputEnd=7]=`OutputEnd`,i[i.BootstrapApplicationStart=8]=`BootstrapApplicationStart`,i[i.BootstrapApplicationEnd=9]=`BootstrapApplicationEnd`,i[i.BootstrapComponentStart=10]=`BootstrapComponentStart`,i[i.BootstrapComponentEnd=11]=`BootstrapComponentEnd`,i[i.ChangeDetectionStart=12]=`ChangeDetectionStart`,i[i.ChangeDetectionEnd=13]=`ChangeDetectionEnd`,i[i.ChangeDetectionSyncStart=14]=`ChangeDetectionSyncStart`,i[i.ChangeDetectionSyncEnd=15]=`ChangeDetectionSyncEnd`,i[i.AfterRenderHooksStart=16]=`AfterRenderHooksStart`,i[i.AfterRenderHooksEnd=17]=`AfterRenderHooksEnd`,i[i.ComponentStart=18]=`ComponentStart`,i[i.ComponentEnd=19]=`ComponentEnd`,i[i.DeferBlockStateStart=20]=`DeferBlockStateStart`,i[i.DeferBlockStateEnd=21]=`DeferBlockStateEnd`,i[i.DynamicComponentStart=22]=`DynamicComponentStart`,i[i.DynamicComponentEnd=23]=`DynamicComponentEnd`,i[i.HostBindingsUpdateStart=24]=`HostBindingsUpdateStart`,i[i.HostBindingsUpdateEnd=25]=`HostBindingsUpdateEnd`,i})(Gt||{});var Nd=class{previousValue;currentValue;firstChange;constructor(r,e,t){this.previousValue=r,this.currentValue=e,this.firstChange=t}isFirstChange(){return this.firstChange}};function Tk(i,r,e,t){r!==null?r.applyValueToInputSignal(r,t):i[e]=t}var Ek=null;var Si=(()=>{Ek=HE;let i=()=>HE;return i.ngInherit=!0,i})();function p9(){return Ek}function HE(i){return i.type.prototype.ngOnChanges&&(i.setInput=m9),h9}function h9(){let i=kk(this),r=i?.current;if(r){let e=i.previous;if(e===Fs)i.previous=r;else for(let t in r)e[t]=r[t];i.current=null,this.ngOnChanges(r)}}function m9(i,r,e,t,n){let o=this.declaredInputs[t],a=kk(i)||f9(i,{previous:Fs,current:null}),s=a.current||(a.current={}),l=a.previous,c=l[o];s[o]=new Nd(c&&c.currentValue,e,l===Fs),Tk(i,r,n,e)}var h1=`__ngSimpleChanges__`;function kk(i){return Object.hasOwn(i,h1)&&i[h1]||null}function f9(i,r){return i[h1]=r}var GE=[];var ei=function(i,r=null,e){for(let t=0;t=t)break}else r[l]<0&&(i[Gl]+=65536),(s>14>16&&(i[nt]&3)===r&&(i[nt]+=16384,UE(s,o)):UE(s,o)}var Id=-1;var Xl=class{factory;name;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(r,e,t,n){this.factory=r,this.name=n,this.canSeeViewProviders=e,this.injectImpl=t}};function v9(i){return(i.flags&8)!==0}function y9(i){return(i.flags&16)!==0}function b9(i,r,e){let t=0;for(;tr){a=o-1;break}}}for(;o>16}function Gf(i,r){let e=C9(i),t=r;for(;e>0;)t=t[Ps],e--;return t}var m1=!0;function Uf(i){let r=m1;return m1=i,r}var Fk=255;var Pk=5;var N9=0;var na={};function D9(i,r,e){let t;typeof e==`string`?t=e.charCodeAt(0)||0:Object.hasOwn(e,Bl)&&(t=e[Bl]),t??=e[Bl]=N9++;let n=t&Fk,o=1<>Pk)]|=o}function jf(i,r){let e=Ok(i,r);if(e!==-1)return e;let t=r[je];t.firstCreatePass&&(i.injectorIndex=r.length,r1(t.data,i),r1(r,null),r1(t.blueprint,null));let n=Z1(i,r),o=i.injectorIndex;if(Ak(n)){let a=Hf(n),s=Gf(n,r),l=s[je].data;for(let c=0;c<8;c++)r[o+c]=s[a+c]|l[a+c]}return r[o+8]=n,o}function r1(i,r){i.push(0,0,0,0,0,0,0,0,r)}function Ok(i,r){return i.injectorIndex===-1||i.parent&&i.parent.injectorIndex===i.injectorIndex||r[i.injectorIndex+8]===null?-1:i.injectorIndex}function Z1(i,r){if(i.parent&&i.parent.injectorIndex!==-1)return i.parent.injectorIndex;let e=0,t=null,n=r;for(;n!==null;){if(t=Hk(n),t===null)return Id;if(e++,n=n[Ps],t.injectorIndex!==-1)return t.injectorIndex|e<<16}return Id}function f1(i,r,e){D9(i,r,e)}function Vk(i,r,e){if(e&8||i!==void 0)return i;df(r,`NodeInjector`)}function Lk(i,r,e,t){if(e&8&&t===void 0&&(t=null),(e&3)===0){let n=i[Yo],o=ir(void 0);try{return n?n.get(r,t,e&8):Cb(r,t,e&8)}finally{ir(o)}}return Vk(t,r,e)}function zk(i,r,e,t=0,n){if(i!==null){if(r[nt]&2048&&!(t&2)){let a=M9(i,r,e,t,na);if(a!==na)return a}let o=Bk(i,r,e,t,na);if(o!==na)return o}return Lk(r,e,t,n)}function Bk(i,r,e,t,n){let o=E9(e);if(typeof o==`function`){if(!Kb(r,i,t))return t&1?Vk(n,e,t):Lk(r,e,t,n);try{let a;if(a=o(t),a==null&&!(t&8))df(e);else return a}finally{Yb()}}else if(typeof o==`number`){let a=null,s=Ok(i,r),l=Id,c=t&1?r[Gn][Hn]:null;for((s===-1||t&4)&&(l=s===-1?Z1(i,r):r[s+8],l===Id||!$E(t,!1)?s=-1:(a=r[je],s=Hf(l),r=Gf(l,r)));s!==-1;){let d=r[je];if(WE(o,s,d.data)){let p=T9(s,r,e,a,t,c);if(p!==na)return p}l=r[s+8],l!==Id&&$E(t,r[je].data[s+8]===c)&&WE(o,s,r)?(a=d,s=Hf(l),r=Gf(l,r)):s=-1}}return n}function T9(i,r,e,t,n,o){let a=r[je],s=a.data[i+8],d=zf(s,a,e,t==null?ea(s)&&m1:t!=a&&(s.type&3)!==0,n&1&&o===s);return d!==null?Gg(r,a,d,s,n):na}function zf(i,r,e,t,n){let o=i.providerIndexes,a=r.data,s=o&1048575,l=i.directiveStart,c=i.directiveEnd,d=o>>20,p=t?s:s+d,f=n?s+d:c;for(let v=p;v=l&&y.type===e)return v}if(n){let v=a[l];if(v&&_o(v)&&v.type===e)return l}return null}function Gg(i,r,e,t,n){let o=i[e],a=r.data;if(o instanceof Xl){let s=o;if(s.resolving)throw wb(``);let l=Uf(s.canSeeViewProviders);s.resolving=!0;a[e].type||a[e];let p=s.injectImpl?ir(s.injectImpl):null;Kb(i,t,0);try{o=i[e]=s.factory(void 0,n,a,i,t),r.firstCreatePass&&e>=t.directiveStart&&_9(e,a[e],r)}finally{p!==null&&ir(p),Uf(l),s.resolving=!1,Yb()}}return o}function E9(i){if(typeof i==`string`)return i.charCodeAt(0)||0;let r=Object.hasOwn(i,Bl)?i[Bl]:void 0;return typeof r==`number`?r>=0?r&Fk:k9:r}function WE(i,r,e){let t=1<>Pk)]&t)}function $E(i,r){return!(i&2)&&!(i&1&&r)}var Hs=class{_tNode;_lView;constructor(r,e){this._tNode=r,this._lView=e}get(r,e,t){return zk(this._tNode,this._lView,r,Ll(t),e)}};function k9(){return new Hs(an(),Ie())}function be(i){return Qg(()=>{let r=i.prototype.constructor,e=r[_g]||_1(r),t=Object.prototype,n=Object.getPrototypeOf(i.prototype).constructor;for(;n&&n!==t;){let o=n[_g]||_1(n);if(o&&o!==e)return o;n=Object.getPrototypeOf(n)}return o=>new o})}function _1(i){return xb(i)?()=>{let r=_1(tn(i));return r&&r()}:Rs(i)}function M9(i,r,e,t,n){let o=i,a=r;for(;o!==null&&a!==null&&a[nt]&2048&&!Sd(a);){let s=Bk(o,a,e,t|2,na);if(s!==na)return s;let l=o.parent;if(!l){let c=a[Rb];if(c){let d=c.get(e,na,t&-5);if(d!==na)return d}l=Hk(a),a=a[Ps]}o=l}return n}function Hk(i){let r=i[je],e=r.type;return e===2?r.declTNode:e===1?i[Hn]:null}function ai(i){return{token:i.token,providedIn:i.autoProvided===!1?null:`root`,factory:i.factory,value:void 0}}function R9(){return Ad(an(),Ie())}function Ad(i,r){return new ne(pr(i,r))}var ne=(()=>{class i{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=R9}return i})();function Gk(i){return i instanceof ne?i.nativeElement:i}function A9(){return this._results[Symbol.iterator]()}var sn=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new ce}constructor(r=!1){this._emitDistinctChangesOnly=r}get(r){return this._results[r]}map(r){return this._results.map(r)}filter(r){return this._results.filter(r)}find(r){return this._results.find(r)}reduce(r,e){return this._results.reduce(r,e)}forEach(r){this._results.forEach(r)}some(r){return this._results.some(r)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(r,e){this.dirty=!1;let t=aE(r);(this._changesDetected=!oE(this._results,t,e))&&(this._results=t,this.length=t.length,this.last=t[this.length-1],this.first=t[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(r){this._onDirty=r}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=A9};function Uk(i){return(i.flags&128)===128}var X1=(function(i){return i[i.OnPush=0]=`OnPush`,i[i.Eager=1]=`Eager`,i[i.Default=1]=`Default`,i})(X1||{});var jk=new Map;var F9=0;function P9(){return F9++}function O9(i){jk.set(i[Xo],i)}function x1(i){jk.delete(i[Xo])}var qE=`__ngContext__`;function Td(i,r){Ha(r)?(i[qE]=r[Xo],O9(r)):i[qE]=r}function Wk(i){return qk(i[yd])}function $k(i){return qk(i[qr])}function qk(i){for(;i!==null&&!Qr(i);)i=i[qr];return i}var v1;function J1(i){v1=i}function eS(){if(v1!==void 0)return v1;if(typeof document<`u`)return document;throw new X(210,!1)}var Qk=`r`;var Kk=`di`;var tS=new le(``);var Yk=!1;var Zk=new le(``,{factory:()=>Yk});var r_=new le(``);var QE=new WeakMap;function V9(i,r){if(i==null||typeof i!=`object`)return;let e=QE.get(i);e||(e=new WeakSet,QE.set(i,e)),e.add(r)}function o_(i){return(i.flags&32)===32}var B9=()=>null;function Xk(i,r,e=!1){return B9(i,r,e)}function Jk(i,r){let e=i.contentQueries;if(e!==null){let t=We(null);try{for(let n=0;ni,createScript:i=>i,createScriptURL:i=>i})}catch{}return Af}function a_(i){return G9()?.createHTML(i)||i}var Ff;function U9(){if(Ff===void 0&&(Ff=null,on.trustedTypes))try{Ff=on.trustedTypes.createPolicy(`angular#unsafe-bypass`,{createHTML:i=>i,createScript:i=>i,createScriptURL:i=>i})}catch{}return Ff}function KE(i){return U9()?.createHTML(i)||i}var Ua=class{changingThisBreaksApplicationSecurity;constructor(r){this.changingThisBreaksApplicationSecurity=r}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${of})`}};var b1=class extends Ua{getTypeName(){return`HTML`}};var S1=class extends Ua{getTypeName(){return`Style`}};var w1=class extends Ua{getTypeName(){return`Script`}};var C1=class extends Ua{getTypeName(){return`URL`}};var I1=class extends Ua{getTypeName(){return`ResourceURL`}};function kr(i){return i instanceof Ua?i.changingThisBreaksApplicationSecurity:i}function ja(i,r){let e=eM(i);if(e!=null&&e!==r){if(e===`ResourceURL`&&r===`URL`)return!0;throw new Error(`Required a safe ${r}, got a ${e} (see ${of})`)}return e===r}function eM(i){return i instanceof Ua&&i.getTypeName()||null}function nS(i){return new b1(i)}function rS(i){return new S1(i)}function oS(i){return new w1(i)}function aS(i){return new C1(i)}function sS(i){return new I1(i)}function j9(i){let r=new D1(i);return W9()?new N1(r):r}var N1=class{inertDocumentHelper;constructor(r){this.inertDocumentHelper=r}getInertBodyElement(r){r=``+r;try{let e=new window.DOMParser().parseFromString(a_(r),`text/html`).body;return e===null?this.inertDocumentHelper.getInertBodyElement(r):(e.firstChild?.remove(),e)}catch{return null}}};var D1=class{defaultDoc;inertDocument;constructor(r){this.defaultDoc=r,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument(`sanitization-inert`)}getInertBodyElement(r){let e=this.inertDocument.createElement(`template`);return e.innerHTML=a_(r),e}};function W9(){try{return!!new window.DOMParser().parseFromString(a_(``),`text/html`)}catch{return!1}}var $9=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function Kg(i){return i=String(i),i.match($9)?i:`unsafe:`+i}function Wa(i){let r={};for(let e of i.split(`,`))r[e]=!0;return r}function Yg(...i){let r={};for(let e of i)for(let t in e)Object.hasOwn(e,t)&&(r[t]=!0);return r}var tM=Wa(`area,br,col,hr,img,wbr`);var iM=Wa(`colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr`);var nM=Wa(`rp,rt`);var q9=Yg(nM,iM);var YE=Yg(tM,Yg(iM,Wa(`address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul`)),Yg(nM,Wa(`a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video`)),q9);var rM=Wa(`background,cite,href,itemtype,longdesc,poster,src,xlink:href`);var X9=Yg(rM,Wa(`abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width`),Wa(`aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext`));var J9=Wa(`script,style,template`);var T1=class{sanitizedSomething=!1;buf=[];sanitizeChildren(r){let e=r.firstChild,t=!0,n=[];for(;e;){if(e.nodeType===Node.ELEMENT_NODE?t=this.startElement(e):e.nodeType===Node.TEXT_NODE?this.chars(e.nodeValue):this.sanitizedSomething=!0,t&&e.firstChild){n.push(e),e=iB(e);continue}for(;e;){e.nodeType===Node.ELEMENT_NODE&&this.endElement(e);let o=tB(e);if(o){e=o;break}e=n.pop()}}return this.buf.join(``)}startElement(r){let e=ZE(r).toLowerCase();if(!Object.hasOwn(YE,e))return this.sanitizedSomething=!0,!Object.hasOwn(J9,e);this.buf.push(`<`),this.buf.push(e);let t=r.attributes;for(let n=0;n`),!0}endElement(r){let e=ZE(r).toLowerCase();Object.hasOwn(YE,e)&&!Object.hasOwn(tM,e)&&(this.buf.push(``))}chars(r){this.buf.push(XE(r))}};function eB(i,r){return(i.compareDocumentPosition(r)&Node.DOCUMENT_POSITION_CONTAINED_BY)!==Node.DOCUMENT_POSITION_CONTAINED_BY}function tB(i){let r=i.nextSibling;if(r&&i!==r.previousSibling)throw oM(r);return r}function iB(i){let r=i.firstChild;if(r&&eB(i,r))throw oM(r);return r}function ZE(i){let r=i.nodeName;return typeof r==`string`?r:`FORM`}function oM(i){return new Error(`Failed to sanitize html because the element is clobbered: ${i.outerHTML}`)}var nB=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;var rB=/([^\#-~ |!])/g;function XE(i){return i.replace(/&/g,`&`).replace(nB,function(r){let e=r.charCodeAt(0),t=r.charCodeAt(1);return`&#`+((e-55296)*1024+(t-56320)+65536)+`;`}).replace(rB,function(r){return`&#`+r.charCodeAt(0)+`;`}).replace(//g,`>`)}var Pf;function s_(i,r){let e=null;try{Pf=Pf||j9(i);let t=r?String(r):``;e=Pf.getInertBodyElement(t);let n=5,o=t;do{if(n===0)throw new Error(`Failed to sanitize html because the input is unstable`);n--,t=o,o=e.innerHTML,e=Pf.getInertBodyElement(t)}while(t!==o);return a_(new T1().sanitizeChildren(JE(e)||e))}finally{if(e){let t=JE(e)||e;for(;t.firstChild;)t.firstChild.remove()}}}function JE(i){return`content`in i&&oB(i)?i.content:null}function oB(i){return i.nodeType===Node.ELEMENT_NODE&&i.nodeName===`TEMPLATE`}var aB=/^>|^->||--!>|)/g;var lB=`​$1​`;function cB(i){return i.replace(aB,r=>r.replace(sB,lB))}function dB(i,r){return i.createText(r)}function uB(i,r,e){i.setValue(r,e)}function gB(i,r){return i.createComment(cB(r))}function aM(i,r,e){return i.createElement(r,e)}function Yl(i,r,e,t,n){i.insertBefore(r,e,t,n)}function sM(i,r,e){i.appendChild(r,e)}function ek(i,r,e,t,n){t!==null?Yl(i,r,e,t,n):sM(i,r,e)}function lM(i,r,e,t){i.removeChild(null,r,e,t)}function pB(i,r,e){i.setAttribute(r,`style`,e)}function hB(i,r,e){e===``?i.removeAttribute(r,`class`):i.setAttribute(r,`class`,e)}function cM(i,r,e){let{mergedAttrs:t,classes:n,styles:o}=e;t!==null&&b9(i,r,t),n!==null&&hB(i,r,n),o!==null&&pB(i,r,o)}function mB(i,r=!0){if(i[0]!=`:`)return[null,i];let e=i.indexOf(`:`,1);if(e===-1){if(r)throw new Error(`Unsupported format "${i}" expecting ":namespace:name"`);return[null,i]}return[i.slice(1,e),i.slice(e+1)]}function lS(i,r,e){if(r!==void 0&&e!==void 0&&fB(r,e)!==bi.HTML)return i;let t=dM();return t?KE(t.sanitize(bi.HTML,i)||``):ja(i,`HTML`)?KE(kr(i)):s_(eS(),As(i))}function Zg(i){let r=dM();return r?r.sanitize(bi.URL,i)||``:ja(i,`URL`)?kr(i):Kg(As(i))}function dM(){let i=Ie();return i&&i[fo].sanitizer}function fB(i,r){let[e,t]=_B(i);return hE(t,r,e)}function _B(i){i=i.toLowerCase();let r=mB(i,!1);if(r[0])return r;let t=Zr$1()===-1?null:zs(),n=t?.namespace;if(i===`#host`&&t?.type===2){let o=pr(t,Ie());if(o.tagName&&(i=o.tagName.toLowerCase()),n==null){let a=o.namespaceURI;n=a&&H9[a]}}return[n,i]}function xB(i){return i instanceof Function?i():i}function vB(i,r,e){let t=i.length;for(;;){let n=i.indexOf(r,e);if(n===-1)return n;if(n===0||i.charCodeAt(n-1)<=32){let o=r.length;if(n+o===t||i.charCodeAt(n+o)<=32)return n}e=n+1}}var uM=`ng-template`;function yB(i,r,e,t){let n=0;if(t){for(;n-1){let o;for(;++no?p=``:p=n[d+1].toLowerCase(),t&2&&c!==p){if(vo(t))return!1;a=!0}}}}return vo(t)||a}function vo(i){return(i&1)===0}function wB(i,r,e,t){if(r===null)return-1;let n=0;if(t||!e){let o=!1;for(;n-1)for(e++;e0?`="`+s+`"`:``)+`]`}else t&8?n+=`.`+a:t&4&&(n+=` `+a);else n!==``&&!vo(a)&&(r+=tk(o,n),n=``),t=a,o=o||!vo(t);e++}return n!==``&&(r+=tk(o,n)),r}function EB(i){return i.map(TB).join(`,`)}function kB(i){let r=[],e=[],t=1,n=2;for(;t=0;s--){let{el:l,declarationView:c}=t[s],d=l.parentNode;l===r?(t.splice(s,1),zg.add(l),l.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}}))):o&&l===o?(t.splice(s,1),l.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}})),l.parentNode?.removeChild(l)):d&&n&&d!==n&&(a===null||c===null||a===c)&&(t.splice(s,1),l.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}})),l.parentNode?.removeChild(l))}}function AB(i,r,e){let t=pM(e),n=E1.get(i);n?n.some(o=>o.el===r)||n.push({el:r,declarationView:t}):E1.set(i,[{el:r,declarationView:t}])}var l_=(function(i){return i[i.CHANGE_DETECTION=0]=`CHANGE_DETECTION`,i[i.AFTER_NEXT_RENDER=1]=`AFTER_NEXT_RENDER`,i})(l_||{});var ra=new le(``);var ik=new Set;function nr(i){ik.has(i)||(ik.add(i),performance?.mark?.(`mark_feature_usage`,{detail:{feature:i}}))}var uS=(()=>{class i{impl=null;execute(){this.impl?.execute()}static ɵprov=de({token:i,providedIn:`root`,factory:()=>new i})}return i})();var hM=[0,1,2,3];var mM=(()=>{class i{ngZone=_(Qe);scheduler=_(La);errorHandler=_($r,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){_(ra,{optional:!0})}execute(){let e=this.sequences.size>0;e&&ei(Gt.AfterRenderHooksStart),this.executing=!0;for(let t of hM)for(let n of this.sequences)if(!(n.erroredOrDestroyed||!n.hooks[t]))try{n.pipelinedValue=this.ngZone.runOutsideAngular(()=>this.maybeTrace(()=>{let o=n.hooks[t];return o(n.pipelinedValue)},n.snapshot))}catch(o){n.erroredOrDestroyed=!0,this.errorHandler?.handleError(o)}this.executing=!1;for(let t of this.sequences)t.afterRun(),t.once&&(this.sequences.delete(t),t.destroy());for(let t of this.deferredRegistrations)this.sequences.add(t);this.deferredRegistrations.size>0&&this.scheduler.notify(7),this.deferredRegistrations.clear(),e&&ei(Gt.AfterRenderHooksEnd)}register(e){let{view:t}=e;t!==void 0?((t[Ul]??=[]).push(e),ql(t),t[nt]|=8192):this.executing?this.deferredRegistrations.add(e):this.addSequence(e)}addSequence(e){this.sequences.add(e),this.scheduler.notify(7)}unregister(e){this.executing&&this.sequences.has(e)?(e.erroredOrDestroyed=!0,e.pipelinedValue=void 0,e.once=!0):(this.sequences.delete(e),this.deferredRegistrations.delete(e))}maybeTrace(e,t){return t?t.run(l_.AFTER_NEXT_RENDER,e):e()}static ɵprov=de({token:i,providedIn:`root`,factory:()=>new i})}return i})();var Wf=class{impl;hooks;view;once;snapshot;erroredOrDestroyed=!1;pipelinedValue=void 0;unregisterOnDestroy;constructor(r,e,t,n,o,a=null){this.impl=r,this.hooks=e,this.view=t,this.once=n,this.snapshot=a,this.unregisterOnDestroy=o?.onDestroy(()=>this.destroy())}afterRun(){this.erroredOrDestroyed=!1,this.pipelinedValue=void 0,this.snapshot?.dispose(),this.snapshot=null}destroy(){this.impl.unregister(this),this.unregisterOnDestroy?.();let r=this.view?.[Ul];r&&(this.view[Ul]=r.filter(e=>e!==this))}};function $a(i,r){let e=r?.injector??_(qt);return nr(`NgAfterNextRender`),PB(i,e,r,!0)}function FB(i){return i instanceof Function?[void 0,void 0,i,void 0]:[i.earlyRead,i.write,i.mixedReadWrite,i.read]}function PB(i,r,e,t){let n=r.get(uS);n.impl??=r.get(mM);let o=r.get(ra,null,{optional:!0}),a=e?.manualCleanup!==!0?r.get(Mt):null,s=r.get(Pg,null,{optional:!0}),l=new Wf(n.impl,FB(i),s?.view,t,a,o?.snapshot(null));return n.impl.register(l),l}var gS=new le(``,{factory:()=>{let i=_(Yt),r=new Set;return i.onDestroy(()=>r.clear()),{queue:r,isScheduled:!1,scheduler:null,injector:i}}});function fM(i,r,e){let t=i.get(gS);if(Array.isArray(r))for(let n of r)t.queue.add(n),e?.detachedLeaveAnimationFns?.push(n);else t.queue.add(r),e?.detachedLeaveAnimationFns?.push(r);t.scheduler&&t.scheduler(i)}function OB(i,r){let e=i.get(gS);if(Array.isArray(r))for(let t of r)e.queue.delete(t);else e.queue.delete(r)}function VB(i,r){let e=i.get(gS);if(r.detachedLeaveAnimationFns){for(let t of r.detachedLeaveAnimationFns)e.queue.delete(t);r.detachedLeaveAnimationFns=void 0}}function LB(i,r){for(let[e,t]of r)fM(i,t.animateFns)}function nk(i,r,e,t){let n=i?.[Jo]?.enter;r!==null&&n&&n.has(e.index)&&LB(t,n)}function rk(i,r,e,t){try{e.get(Ng)}catch{return t(!1)}let n=i?.[Jo];n?.enter?.has(r.index)&&OB(e,n.enter.get(r.index).animateFns);let o=zB(i,r,n);if(o.size===0){let a=!1;if(i){let s=[];c_(i,r,s),a=s.length>0}if(!a)return t(!1)}i&&Gs.add(i[Xo]),fM(e,()=>BB(i,r,n||void 0,o,t),n||void 0)}function zB(i,r,e){let t=new Map,n=e?.leave;if(n&&n.has(r.index)&&t.set(r.index,n.get(r.index)),i&&n)for(let[o,a]of n){if(t.has(o))continue;let l=i[je].data[o].parent;for(;l;){if(l===r){t.set(o,a);break}l=l.parent}}return t}function BB(i,r,e,t,n){let o=[];if(e&&e.leave)for(let[a]of t){if(!e.leave.has(a))continue;let s=e.leave.get(a);for(let l of s.animateFns){let{promise:c}=l();o.push(c)}e.detachedLeaveAnimationFns=void 0}if(i&&c_(i,r,o),o.length>0){let a=e||i?.[Jo];if(a){let s=a.running;s&&o.push(s),a.running=Promise.allSettled(o),GB(i,a.running,n)}else Promise.allSettled(o).then(()=>{i&&Gs.delete(i[Xo]),n(!0)})}else i&&Gs.delete(i[Xo]),n(!1)}function c_(i,r,e){if(r.type&12){let n=i[r.index];if(Qr(n))for(let o=Ei;o{i[Jo]?.running===r&&(i[Jo].running=void 0,Gs.delete(i[Xo])),e(!0)})}function Cd(i,r,e,t,n,o,a,s){if(n!=null){let l,c=!1;Qr(n)?l=n:Ha(n)&&(c=!0,n=n[mo]);let d=En(n);i===0&&t!==null?(nk(s,t,o,e),a==null?sM(r,t,d):Yl(r,t,d,a||null,!0)):i===1&&t!==null?(nk(s,t,o,e),Yl(r,t,d,a||null,!0),RB(o,d,s)):i===2?(s?.[Jo]?.leave?.has(o.index)&&AB(o,d,s),zg.delete(d),rk(s,o,e,p=>{if(zg.has(d)){zg.delete(d);return}lM(r,d,c,p)})):i===3&&(zg.delete(d),rk(s,o,e,()=>{r.destroyNode(d)})),l!=null&&JB(r,i,e,l,o,t,a)}}function UB(i,r){_M(i,r),r[mo]=null,r[Hn]=null}function jB(i,r,e,t,n,o){t[mo]=n,t[Hn]=r,u_(i,t,e,1,n,o)}function _M(i,r){r[fo].changeDetectionScheduler?.notify(9),u_(i,r,r[Zt],2,null,null)}function WB(i){let r=i[yd];if(!r)return o1(i[je],i);for(;r;){let e=null;if(Ha(r))e=r[yd];else{let t=r[Ei];t&&(e=t)}if(!e){for(;r&&!r[qr]&&r!==i;)Ha(r)&&o1(r[je],r),r=r[nn];r===null&&(r=i),Ha(r)&&o1(r[je],r),e=r&&r[qr]}r=e}}function pS(i,r){let e=i[Wl],t=e.indexOf(r);e.splice(t,1)}function d_(i,r){if($l(r))return;let e=r[Zt];e.destroyNode&&u_(i,r,e,3,null,null),WB(r)}function o1(i,r){if($l(r))return;let e=We(null);try{r[nt]&=-129,r[nt]|=256,r[Tr]&&El(r[Tr]),qB(i,r),$B(i,r),r[je].type===1&&r[Zt].destroy();let t=r[Os];if(t!==null&&Qr(r[nn])){t!==r[nn]&&pS(t,r);let n=r[Zo];n!==null&&n.detachView(i)}x1(r)}finally{We(e)}}function $B(i,r){let e=i.cleanup,t=r[vd];if(e!==null)for(let a=0;a=0?t[s]():t[-s].unsubscribe(),a+=2}else{let s=t[e[a+1]];e[a].call(s)}t!==null&&(r[vd]=null);let n=r[Fa];if(n!==null){r[Fa]=null;for(let a=0;aXt&&CM(i,r,Xt,!1);ei(a?Gt.TemplateUpdateStart:Gt.TemplateCreateStart,n,e),e(t,n)}finally{Ls(o);ei(a?Gt.TemplateUpdateEnd:Gt.TemplateCreateEnd,n,e)}}function p_(i,r,e){lH(i,r,e),(e.flags&64)===64&&cH(i,r,e)}function Xg(i,r,e=pr){let t=r.localNames;if(t!==null){let n=r.index+1;for(let o=0;o=s&&v<=l){let y=r.data[v],T=p[f+1];Jl(y,e[v],T,o),c=!0}else if(v>l)break}}return a!==null&&Object.hasOwn(t.inputs,n)&&(Jl(t,e[a],n,o),c=!0),c}function mH(i,r){let e=Kr(r,i),t=e[je];fH(t,e);let n=e[mo];n!==null&&e[Hl]===null&&(e[Hl]=Xk(n,e[Yo])),ei(Gt.ComponentStart);try{SS(t,e,e[Pi])}finally{ei(Gt.ComponentEnd,e[Pi])}}function fH(i,r){for(let e=r.length;e{ql(i.lView)},consumerOnSignalRead(){this.lView[Tr]=this}});function SH(i){let r=i[Tr]??Object.create(wH);return r.lView=i,r}var wH=s(r({},Ds),{consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:i=>{let r=Va(i.lView);for(;r&&!AM(r[je]);)r=Va(r);r&&Vb(r)},consumerOnSignalRead(){this.lView[Tr]=this}});function AM(i){return i.type!==2}function FM(i){if(i[Oa]===null)return;let r=!0;for(;r;){let e=!1;for(let t of i[Oa])if(t.dirty&&(e=!0,t.zone===null||Zone.current===t.zone?t.run():t.zone.run(()=>t.run()),i[Oa]===null))return;r=e&&!!(i[nt]&8192)}}var CH=100;function PM(i,r=0){let t=i[fo].rendererFactory;t.begin?.();try{IH(i,r)}finally{t.end?.()}}function IH(i,r){let e=Qb();try{xg(!0),M1(i,r);let t=0;for(;kg(i);){if(t===CH)throw new X(103,!1);t++,M1(i,1)}}finally{xg(e)}}function NH(i,r,e,t){if($l(r))return;let n=r[nt];If(r);let s=!0,l=null,c=null;AM(i)?(c=xH(r),l=Ts(c)):Sm()===null?(s=!1,c=SH(r),l=Ts(c)):r[Tr]&&(El(r[Tr]),r[Tr]=null);try{Ob(r),CE(i.bindingStartIndex),e!==null&&IM(i,r,e,2,t);let d=(n&3)===3;if(d){let v=i.preOrderCheckHooks;v!==null&&Vf(r,v,null)}else{let v=i.preOrderHooks;v!==null&&Lf(r,v,0,null),n1(r,0)}if(DH(r),FM(r),OM(r,0),i.contentQueries!==null&&Jk(i,r),true)if(d){let v=i.contentCheckHooks;v!==null&&Vf(r,v)}else{let v=i.contentHooks;v!==null&&Lf(r,v,1),n1(r,1)}EH(i,r);let p=i.components;p!==null&&LM(r,p,0);let f=i.viewQuery;if(f!==null&&y1(2,f,t),true)if(d){let v=i.viewCheckHooks;v!==null&&Vf(r,v)}else{let v=i.viewHooks;v!==null&&Lf(r,v,2),n1(r,2)}if(i.firstUpdatePass===!0&&(i.firstUpdatePass=!1),r[mf]){for(let v of r[mf])v();r[mf]=null}MM(r),r[nt]&=-73}catch(d){throw ql(r),d}finally{c!==null&&(Tl(c,l),s&&yH(c)),Nf()}}function OM(i,r){for(let e=Wk(i);e!==null;e=$k(e))for(let t=Ei;t0&&(i[e-1][qr]=t[qr]);let o=Ig(i,Ei+r);UB(t[je],t);let a=o[Zo];a!==null&&a.detachView(o[je]),t[nn]=null,t[qr]=null,t[nt]&=-129}return t}function kH(i,r,e,t){let n=Ei+t,o=e.length;t>0&&(e[n-1][qr]=r),t-1&&(jg(r,t),Ig(e,t))}this._attachedToViewContainer=!1}d_(this._lView[je],this._lView)}onDestroy(r){yf(this._lView,r)}markForCheck(){wS(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[nt]&=-129}reattach(){vf(this._lView),this._lView[nt]|=128}detectChanges(){this._lView[nt]|=1024,PM(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new X(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let r=Sd(this._lView),e=this._lView[Os];e!==null&&!r&&pS(e,this._lView),_M(this._lView[je],this._lView)}attachToAppRef(r){if(this._attachedToViewContainer)throw new X(902,!1);this._appRef=r;let e=Sd(this._lView),t=this._lView[Os];t!==null&&!e&&GM(t,this._lView),vf(this._lView)}};var te=(()=>{class i{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=MH;constructor(e,t,n){this._declarationLView=e,this._declarationTContainer=t,this.elementRef=n}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(e,t){return this.createEmbeddedViewImpl(e,t)}createEmbeddedViewImpl(e,t,n){return new Us(Jg(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:n}))}}return i})();function MH(){return m_(an(),Ie())}function m_(i,r){return i.type&4?new te(r,i,Ad(i,r)):null}function nc(i,r,e,t,n){let o=i.data[r];if(o===null)o=RH(i,r,e,t,n),IE()&&(o.flags|=32);else if(o.type&64){o.type=e,o.value=t,o.attrs=n;let a=SE();o.injectorIndex=a===null?-1:a.injectorIndex}return Ql(o,!0),o}function RH(i,r,e,t,n){let o=jb(),a=Wb(),s=a?o:o&&o.parent,l=i.data[r]=FH(i,s,e,r,t,n);return AH(i,l,o,a),l}function AH(i,r,e,t){i.firstChild===null&&(i.firstChild=r),e!==null&&(t?e.child==null&&r.parent!==null&&(e.child=r):e.next===null&&(e.next=r,r.prev=e))}function FH(i,r,e,t,n,o){let a=r?r.injectorIndex:-1,s=0;return Hb()&&(s|=128),{type:e,index:t,insertBeforeIndex:null,injectorIndex:a,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,controlDirectiveIndex:-1,customControlIndex:-1,propertyBindings:null,flags:s,providerIndexes:0,value:n,namespace:Zb(),attrs:o,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:r,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}function PH(i){let r=i[Ab]??[],t=i[nn][Zt],n=[];for(let o of r)o.data[Kk]!==void 0?n.push(o):OH(o,t);i[Ab]=n}function OH(i,r){let e=0,t=i.firstChild;if(t){let n=i.data[Qk];for(;enull;var LH=()=>null;function $f(i,r){return VH(i,r)}function UM(i,r,e){return LH(i,r,e)}var jM=class{};var bo=class{};var Ot=class{destroyNode=null;static __NG_ELEMENT_ID__=()=>zH()};function zH(){let i=Ie(),e=Kr(an().index,i);return(Ha(e)?e:i)[Zt]}var WM=(()=>{class i{static ɵprov=de({token:i,providedIn:`root`,factory:()=>null})}return i})();function $M(i){return i.debugInfo?.className||i.type.name||null}var Bf={};var qf=class{injector;parentInjector;constructor(r,e){this.injector=r,this.parentInjector=e}get(r,e,t){let n=this.injector.get(r,Bf,t);return n!==Bf||e===Bf?n:this.parentInjector.get(r,e,t)}};function CS(i){return f_(i)?Array.isArray(i)||!(i instanceof Map)&&Symbol.iterator in i:!1}function qM(i,r){if(Array.isArray(i))for(let e=0;et(En(T[i.index])):i.index,r,e,o,s,v,!1)}return c}function BH(i){return i.startsWith(`animation`)||i.startsWith(`transition`)}function HH(i,r,e,t){let n=i.cleanup;if(n!=null)for(let o=0;ol?s[l]:null}typeof a==`string`&&(o+=2)}return null}function KM(i,r,e,t,n,o,a){let s=r.firstCreatePass?zb(r):null,l=Lb(e),c=l.length;l.push(n,o),s&&s.push(t,i,c,(c+1)*(a?-1:1))}function sk(i,r,e,t,n){let o=null,a=null,s=null,l=!1,c=i.directiveToIndex.get(e.type);if(typeof c==`number`?o=c:[o,a,s]=c,a!==null&&s!==null&&i.hostDirectiveOutputs&&Object.hasOwn(i.hostDirectiveOutputs,t)){let d=i.hostDirectiveOutputs[t];for(let p=0;p=a&&f<=s)l=!0,Qf(i,r,f,d[p+1],t,n);else if(f>s)break}}return Object.hasOwn(e.outputs,t)&&(l=!0,Qf(i,r,o,t,t,n)),l}function Qf(i,r,e,t,n,o){let a=r[e],s=r[je],p=a[s.data[e].outputs[t]].subscribe(o);KM(i.index,s,r,n,o,p,!0)}function He(){GH()}function GH(){let i=Ie(),r=Jt(),e=an();if(r.firstCreatePass&&jH(r,e),e.controlDirectiveIndex===-1)return;nr(`NgSignalForms`);let t=i[e.controlDirectiveIndex];r.data[e.controlDirectiveIndex].controlDef.create(t,new Kf(i,r,e))}function Ge(){UH()}function UH(){let i=Ie(),r=Jt(),e=zs();if(e.controlDirectiveIndex===-1)return;let t=r.data[e.controlDirectiveIndex].controlDef,n=i[e.controlDirectiveIndex];t.update(n,new Kf(i,r,e))}var Kf=class{lView;tView;tNode;hasPassThrough;constructor(r,e,t){this.lView=r,this.tView=e,this.tNode=t,this.hasPassThrough=!!(t.flags&4096)}get customControl(){return this.tNode.customControlIndex!==-1?this.lView[this.tNode.customControlIndex]:void 0}get nativeElement(){return pr(this.tNode,this.lView)}get descriptor(){return`<${this.tNode.value}>`}listenToCustomControlOutput(r,e){let t=this.tView.data[this.tNode.customControlIndex];sk(this.tNode,this.lView,t,r,Zl(this.tNode,this.lView,e))}listenToCustomControlModel(r){let e=this.tNode.flags&1024?`valueChange`:`checkedChange`,t=this.tView.data[this.tNode.customControlIndex];sk(this.tNode,this.lView,t,e,Zl(this.tNode,this.lView,r))}listenToDom(r,e){IS(this.tNode,this.tView,this.lView,void 0,this.lView[Zt],r,e,Zl(this.tNode,this.lView,e))}setInputOnDirectives(r,e){let t=this.tNode.inputs?.[r],n=this.tNode.hostDirectiveInputs?.[r];if(!t&&!n)return!1;let o=!1;if(t)for(let a of t){if(a===this.tNode.controlDirectiveIndex)continue;let s=this.tView.data[a],l=this.lView[a];Jl(s,l,r,e),o=!0}if(n)for(let a=0;a0;){let n=t.shift();if(typeof n!=`function`){for(let a in n.inputs)e[n.inputs[a]]=!0;let o=lk(n.directive);o!==null&&t.push(...o);continue}for(let o of n()){if(typeof o==`function`)continue;if(o.inputs)for(let s=0;s1){r.flags|=4096;return}WH(i,r)}function WH(i,r){for(let e=r.directiveStart;e{let o=r.hostDirectiveInputs[t],a=r.hostDirectiveOutputs[t+`Change`];if(!o||!a)return!1;for(let s=0;s=v&&l<=y)return r.flags|=n,r.customControlIndex=f,!0}}return!1};if(e(`value`,1024)||e(`checked`,2048))return}}function ck(i,r){return $H(i,r)&&qH(i,r+`Change`)}function $H(i,r){return r in i.inputs}function qH(i,r){return r in i.outputs}var R1=Symbol(`BINDING`);var rc=new le(``);function Yf(i,r,e){let t=e?i.styles:null,n=e?i.classes:null,o=0;if(r!==null)for(let a=0;a0&&(e.directiveToIndex=new Map);for(let f=0;f0;){let e=i[--r];if(typeof e==`number`&&e<0)return e}return 0}function tG(i,r,e){if(e){if(r.exportAs)for(let t=0;t{let[e,t,n]=i[r],o={propName:e,templateName:r,isSignal:(t&g_.SignalBased)!==0};return n&&(o.transform=n),o})}function aG(i){return Object.keys(i).map(r=>({propName:i[r],templateName:r}))}function sG(i,r,e){let t=r instanceof Yt?r:r?.injector;return t&&i.getStandaloneInjector!==null&&(t=i.getStandaloneInjector(t)||t),t?new qf(e,t):e}function lG(i){let r=i.get(bo,null);if(r===null)throw new X(407,!1);return{rendererFactory:r,sanitizer:i.get(WM,null),changeDetectionScheduler:i.get(La,null),ngReflect:!1,tracingService:i.get(ra,null,{optional:!0})}}function cG(i,r){let e=JM(i);return aM(r,e,e===`svg`?md:e===`math`?ff:null)}function dG(i){if((i&&`localName`in i&&typeof i.localName==`string`?i.localName:i?.tagName)?.toLowerCase()===`script`)throw new X(905,!1)}function JM(i){return(i.selectors[0][0]||`div`).toLowerCase()}var ec=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=oG(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=aG(this.componentDef.outputs),this.cachedOutputs}constructor(r,e){this.componentDef=r,this.ngModule=e,this.componentType=r.type,this.selector=EB(r.selectors),this.ngContentSelectors=r.ngContentSelectors??[],this.isBoundToModule=!!e}create(r,e,t,n,o,a){ei(Gt.DynamicComponentStart);let s=We(null);try{let l=this.componentDef,c=sG(l,n||this.ngModule,r),d=lG(c),p=d.tracingService;return p&&p.componentCreate?p.componentCreate($M(l),()=>this.createComponentRef(d,c,e,t,o,a)):this.createComponentRef(d,c,e,t,o,a)}finally{We(s)}}createComponentRef(r,e,t,n,o,a){let s=this.componentDef,l=uG(n,s,a,o),c=r.rendererFactory.createRenderer(null,s),d=n?rH(c,n,s.encapsulation,e):cG(s,c);dG(d);let p=e.get(rc,null),f=gG(d,()=>e.get($e,null)??eS());p&&p.addHost(f);let v=a?.some(pk)||o?.some(M=>typeof M!=`function`&&M.bindings.some(pk)),y=_S(null,l,null,512|SM(s),null,null,r,c,e,null,Xk(d,e,!0));p&&XM&&f instanceof ShadowRoot&&yf(y,()=>{p.removeHost(f)}),y[Xt]=d,If(y);let T=null;try{let M=NS(Xt,y,2,`#host`,()=>l.directiveRegistry,!0,0);cM(c,d,M),Td(d,y),p_(l,y,M),iS(l,M,y),DS(l,M),t!==void 0&&hG(M,this.ngContentSelectors,t),T=Kr(M.index,y),y[Pi]=T[Pi],SS(l,y,null)}catch(M){throw T!==null&&x1(T),x1(y),M}finally{ei(Gt.DynamicComponentEnd),Nf()}return new Zf(this.componentType,y,!!v)}};function uG(i,r,e,t){let n=i?[`ng-version`,`22.1.3`]:kB(r.selectors[0]),o=null,a=null,s=0;if(e)for(let d of e)s+=d[R1].requiredVars,d.create&&(d.targetIdx=0,(o??=[]).push(d)),d.update&&(d.targetIdx=0,(a??=[]).push(d));if(t)for(let d=0;d{if(e&1&&i)for(let t of i)t.create();if(e&2&&r)for(let t of r)t.update()}}function pk(i){let r=i[R1].kind;return r===`input`||r===`twoWay`}var Zf=class extends jM{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(r,e,t){super(),this._rootLView=e,this._hasInputBindings=t,this._tNode=_f(e[je],Xt),this.location=Ad(this._tNode,e),this.instance=Kr(this._tNode.index,e)[Pi],this.hostView=this.changeDetectorRef=new Us(e,void 0),this.componentType=r}setInput(r,e){this._hasInputBindings;let t=this._tNode;if(this.previousInputValues??=new Map,this.previousInputValues.has(r)&&Object.is(this.previousInputValues.get(r),e))return;let n=this._rootLView;h_(t,n[je],n,r,e);this.previousInputValues.set(r,e);wS(Kr(t.index,n),1)}get injector(){return new Hs(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(r){this.hostView.onDestroy(r)}};function hG(i,r,e){let t=i.projection=[];for(let n=0;n{class i{static __NG_ELEMENT_ID__=mG}return i})();function mG(){return e5(an(),Ie())}var A1=class i extends hi{_lContainer;_hostTNode;_hostLView;constructor(r,e,t){super(),this._lContainer=r,this._hostTNode=e,this._hostLView=t}get element(){return Ad(this._hostTNode,this._hostLView)}get injector(){return new Hs(this._hostTNode,this._hostLView)}get parentInjector(){let r=Z1(this._hostTNode,this._hostLView);if(Ak(r)){let e=Gf(r,this._hostLView),t=Hf(r),n=e[je].data[t+8];return new Hs(n,e)}else return new Hs(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(r){let e=hk(this._lContainer);return e!==null&&e[r]||null}get length(){return this._lContainer.length-Ei}createEmbeddedView(r,e,t){let n,o;typeof t==`number`?n=t:t!=null&&(n=t.index,o=t.injector);let a=$f(this._lContainer,r.ssrId),s=r.createEmbeddedViewImpl(e||{},o,a);return this.insertImpl(s,n,Ed(this._hostTNode,a)),s}createComponent(r,e,t,n,o,a,s){let l,c=e||{};l=c.index,t=c.injector,n=c.projectableNodes,o=c.environmentInjector||c.ngModuleRef,a=c.directives,s=c.bindings;let d=new ec(za(r)),p=t||this.parentInjector;if(!o&&d.ngModule==null){let F=this.parentInjector.get(Yt,null);F&&(o=F)}let f=za(d.componentType??{}),v=$f(this._lContainer,f?.id??null),y=v?.firstChild??null,T=d.create(p,n,y,o,a,s);return this.insertImpl(T.hostView,l,Ed(this._hostTNode,v)),T}insert(r,e){return this.insertImpl(r,e,!0)}insertImpl(r,e,t){let n=r._lView;if(fE(n)){let s=this.indexOf(r);if(s!==-1)this.detach(s);else{let l=n[nn],c=new i(l,l[Hn],l[nn]);c.detach(c.indexOf(r))}}let o=this._adjustIndex(e),a=this._lContainer;return ep(a,n,o,t),r.attachToViewContainerRef(),Ib(a1(a),o,r),r}move(r,e){return this.insert(r,e)}indexOf(r){let e=hk(this._lContainer);return e!==null?e.indexOf(r):-1}remove(r){let e=this._adjustIndex(r,-1),t=jg(this._lContainer,e);t&&(Ig(a1(this._lContainer),e),d_(t[je],t))}detach(r){let e=this._adjustIndex(r,-1),t=jg(this._lContainer,e);return t&&Ig(a1(this._lContainer),e)!=null?new Us(t):null}_adjustIndex(r,e=0){return r??this.length+e}};function hk(i){return i[Tg]}function a1(i){return i[Tg]||(i[Tg]=[])}function e5(i,r){let e,t=r[i.index];return Qr(t)?e=t:(e=zM(t,r,null,i),r[i.index]=e,xS(r,e)),_G(e,r,i,t),new A1(e,i,r)}function fG(i,r){let e=i[Zt],t=e.createComment(``),n=pr(r,i);return Yl(e,e.parentNode(n),t,e.nextSibling(n),!1),t}var _G=yG;var xG=()=>!1;function vG(i,r,e){return xG(i,r,e)}function yG(i,r,e,t){if(i[jl])return;let n;e.type&8?n=En(t):n=fG(r,e),i[jl]=n}var F1=class i{queryList;matches=null;constructor(r){this.queryList=r}clone(){return new i(this.queryList)}setDirty(){this.queryList.setDirty()}};var P1=class i{queries;constructor(r=[]){this.queries=r}createEmbeddedView(r){let e=r.queries;if(e!==null){let t=r.contentQueries!==null?r.contentQueries[0]:e.length,n=[];for(let o=0;o0)t.push(a[s/2]);else{let c=o[s+1],d=r[-l];for(let p=Ei;pr.trim())}function r5(i,r,e){i.queries===null&&(i.queries=new O1),i.queries.track(new V1(r,e))}function DG(i,r){let e=i.contentQueries||(i.contentQueries=[]);r!==(e.length?e[e.length-1]:-1)&&e.push(i.queries.length-1,r)}function ES(i,r){return i.queries.getByIndex(r)}function o5(i,r){let e=i[je],t=ES(e,r);return t.crossesNgTemplate?L1(e,i,r,[]):t5(e,i,t,r)}function a5(i,r,e){let t,n=sg(()=>{t._dirtyCounter();let o=EG(t,i);if(r&&o===void 0)throw new X(-951,!1);return o});return t=n[$i],t._dirtyCounter=gi(0),t._flatValue=void 0,n}function s5(i){return a5(!0,!1,i)}function l5(i){return a5(!0,!0,i)}function TG(i,r){let e=i[$i];e._lView=Ie(),e._queryIndex=r,e._queryList=TS(e._lView,r),e._queryList.onDirty(()=>e._dirtyCounter.update(t=>t+1))}function EG(i,r){let e=i._lView,t=i._queryIndex;if(e===void 0||t===void 0||e[nt]&4)return r?void 0:Bn;let n=TS(e,t),o=o5(e,t);return n.reset(o,Gk),r?n.first:n._changesDetected||i._flatValue===void 0?i._flatValue=n.toArray():i._flatValue}function qa(i){return!!i&&typeof i.then==`function`}function __(i){return!!i&&typeof i.subscribe==`function`}var tc=class{};var x_=class{};var Jf=class extends tc{ngModuleType;_parent;_bootstrapComponents=[];_r3Injector;instance;destroyCbs=[];constructor(r,e,t,n=!0){super(),this.ngModuleType=r,this._parent=e;let o=eE(r);this._bootstrapComponents=xB(o.bootstrap),this._r3Injector=Xb(r,e,[{provide:tc,useValue:this},...t],bg(r),new Set([`environment`])),n&&this.resolveInjectorInitializers()}resolveInjectorInitializers(){this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(this.ngModuleType)}get injector(){return this._r3Injector}destroy(){let r=this._r3Injector;!r.destroyed&&r.destroy(),this.destroyCbs.forEach(e=>e()),this.destroyCbs=null}onDestroy(r){this.destroyCbs.push(r)}};var e_=class extends x_{moduleType;constructor(r){super(),this.moduleType=r}create(r){return new Jf(this.moduleType,r,[])}};var Wg=class extends tc{injector;instance=null;constructor(r){super();let e=new Pa([...r.providers,{provide:tc,useValue:this}],r.parent||xd(),r.debugName,new Set([`environment`]));this.injector=e,r.runEnvironmentInitializers&&e.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(r){this.injector.onDestroy(r)}};function Fd(i,r,e=null){return new Wg({providers:i,parent:r,debugName:e,runEnvironmentInitializers:!0}).injector}var kG=(()=>{class i{_injector;cachedInjectors=new Map;constructor(e){this._injector=e}getOrCreateStandaloneInjector(e){if(!e.standalone)return null;if(!this.cachedInjectors.has(e)){let t=Db(!1,e.type),n=t.length>0?Fd([t],this._injector,``):null;this.cachedInjectors.set(e,n)}return this.cachedInjectors.get(e)}ngOnDestroy(){try{for(let e of this.cachedInjectors.values())e!==null&&e.destroy()}finally{this.cachedInjectors.clear()}}static ɵprov=de({token:i,providedIn:`environment`,factory:()=>new i(Te(Yt))})}return i})();function Z(i){return Qg(()=>{let r$1=c5(i),e=s(r({},r$1),{decls:i.decls,vars:i.vars,template:i.template,consts:i.consts||null,ngContentSelectors:i.ngContentSelectors,onPush:i.changeDetection!==X1.Eager,directiveDefs:null,pipeDefs:null,dependencies:r$1.standalone&&i.dependencies||null,getStandaloneInjector:r$1.standalone?n=>n.get(kG).getOrCreateStandaloneInjector(e):null,getExternalStyles:null,signals:i.signals??!1,data:i.data||{},encapsulation:i.encapsulation||Er.Emulated,styles:i.styles||Bn,_:null,schemas:i.schemas||null,tView:null,id:``});r$1.standalone&&nr(`NgStandalone`),d5(e);let t=i.dependencies;return e.directiveDefs=mk(t,MG),e.pipeDefs=mk(t,tE),e.id=FG(e),e})}function MG(i){return za(i)||lf(i)}function Me(i){return Qg(()=>({type:i.type,bootstrap:i.bootstrap||Bn,declarations:i.declarations||Bn,imports:i.imports||Bn,exports:i.exports||Bn,transitiveCompileScopes:null,schemas:i.schemas||null,id:i.id||null}))}function RG(i,r){if(i==null)return Fs;let e={};for(let t in i)if(Object.hasOwn(i,t)){let n=i[t],o,a,s,l;Array.isArray(n)?(s=n[0],o=n[1],a=n[2]??o,l=n[3]||null):(o=n,a=n,s=g_.None,l=null),e[o]=[t,s,l],r[o]=a}return e}function AG(i){if(i==null)return Fs;let r={};for(let e in i)Object.hasOwn(i,e)&&(r[i[e]]=e);return r}function L(i){return Qg(()=>{let r=c5(i);return d5(r),r})}function Oe(i){return{type:i.type,name:i.name,factory:null,pure:i.pure!==!1,standalone:i.standalone??!0,onDestroy:i.type.prototype.ngOnDestroy||null}}function c5(i){let r={};return{type:i.type,providersResolver:null,viewProvidersResolver:null,factory:null,hostBindings:i.hostBindings||null,hostVars:i.hostVars||0,hostAttrs:i.hostAttrs||null,contentQueries:i.contentQueries||null,declaredInputs:r,inputConfig:i.inputs||Fs,exportAs:i.exportAs||null,standalone:i.standalone??!0,signals:i.signals===!0,selectors:i.selectors||Bn,viewQuery:i.viewQuery||null,features:i.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,signalFormsInputPresence:null,inputs:RG(i.inputs,r),outputs:AG(i.outputs),debugInfo:null}}function d5(i){i.features?.forEach(r=>r(i))}function mk(i,r){return i?()=>{let e=typeof i==`function`?i():i,t=[];for(let n of e){let o=r(n);o!==null&&t.push(o)}return t}:null}function FG(i){let r=0,e=typeof i.consts==`function`?``:i.consts,t=[i.selectors,i.ngContentSelectors,i.hostVars,i.hostAttrs,e,i.vars,i.decls,i.encapsulation,i.standalone,i.signals,i.exportAs,JSON.stringify(i.inputs),JSON.stringify(i.outputs),Object.getOwnPropertyNames(i.type.prototype),!!i.contentQueries,!!i.viewQuery];for(let o of t.join(`|`))r=Math.imul(31,r)+o.charCodeAt(0)<<0;return r+=2147483648,`c`+r}var kS=new le(``);function v_(i){return Ba([{provide:kS,multi:!0,useValue:i}])}var MS=(()=>{class i{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=_(kS,{optional:!0})??[];injector=_(qt);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let n of this.appInits){let o=qi(this.injector,n);if(qa(o))e.push(o);else if(__(o)){let a=new Promise((s,l)=>{o.subscribe({complete:s,error:l})});e.push(a)}}let t=()=>{this.done=!0,this.resolve()};Promise.all(e).then(()=>{t()}).catch(n=>{this.reject(n)}),e.length===0&&t(),this.initialized=!0}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();function y_(i){return r=>{r.controlDef={create:(e,t)=>{e?.ɵngControlCreate(t)},update:(e,t)=>{e?.ɵngControlUpdate?.(t)},passThroughInput:i}}}function Mn(i){let r=e=>{let t=Array.isArray(i);e.hostDirectives===null?(e.resolveHostDirectives=PG,e.hostDirectives=t?i.map(z1):[i]):t?e.hostDirectives.unshift(...i.map(z1)):e.hostDirectives.unshift(i)};return r.ngInherit=!0,r}function PG(i){let r=[],e=!1,t=null,n=null;for(let o=0;o{OG(a.declaredInputs,o.inputs)}),[r,t,n]}function u5(i,r,e,t){if(i.hostDirectives!==null)for(let n of i.hostDirectives)if(typeof n==`function`){let o=n();for(let a of o)fk(z1(a),r,e,t)}else fk(n,r,e,t)}function fk(i,r,e,t){let n=lf(i.directive);if(u5(n,r,e,t),e.has(n)){let o=e.get(n);_k(o,i.inputs,`input`),_k(o,i.outputs,`output`)}else t.includes(n)||(e.set(n,i),r.push(n))}function _k(i,r,e){let t=e===`input`?i.inputs:i.outputs;Object.keys(r).forEach(n=>{let o=r[n];(!Object.hasOwn(t,n)||t[n]===o)&&(t[n]=o)})}function z1(i){return typeof i==`function`?{directive:tn(i),inputs:{},outputs:{}}:{directive:tn(i.directive),inputs:xk(i.inputs),outputs:xk(i.outputs)}}function xk(i){let r={};if(i!==void 0&&i.length>0)for(let e=0;e=0;t--){let n=i[t];n.hostVars=r+=n.hostVars,n.hostAttrs=Dd(n.hostAttrs,e=Dd(e,n.hostAttrs))}}function s1(i){return i===Fs?{}:i===Bn?[]:i}function BG(i,r){let e=i.viewQuery;e?i.viewQuery=(t,n)=>{r(t,n),e(t,n)}:i.viewQuery=r}function HG(i,r){let e=i.contentQueries;e?i.contentQueries=(t,n,o)=>{r(t,n,o),e(t,n,o)}:i.contentQueries=r}function GG(i,r){let e=i.hostBindings;e?i.hostBindings=(t,n)=>{r(t,n),e(t,n)}:i.hostBindings=r}function g5(i,r,e,t,n,o,a,s){if(e.firstCreatePass){i.mergedAttrs=Dd(i.mergedAttrs,i.attrs);let d=i.tView=fS(2,i,n,o,a,e.directiveRegistry,e.pipeRegistry,null,e.schemas,e.consts,null);e.queries!==null&&(e.queries.template(e,i),d.queries=e.queries.embeddedTView(i))}s&&(i.flags|=s),Ql(i,!1);let l=jG(e,r,i,t);Tf()&&hS(e,r,l,i),Td(l,r);let c=zM(l,r,l,i);r[t+Xt]=c,xS(r,c),vG(c,i,r)}function UG(i,r,e,t,n,o,a,s,l,c,d){let p=e+Xt,f;return r.firstCreatePass?(f=nc(r,p,4,a||null,s||null),bf()&&YM(r,i,f,Yr(r.consts,c),vS),Mk(r,f)):f=r.data[p],g5(f,i,r,e,t,n,o,l),bd(f)&&p_(r,i,f),c!=null&&Xg(i,f,d),f}function $g(i,r,e,t,n,o,a,s,l,c,d){let p=e+Xt,f;if(r.firstCreatePass){if(f=nc(r,p,4,a||null,s||null),c!=null){let v=Yr(r.consts,c);f.localNames=[];for(let y=0;y{class i{log(e){console.log(e)}warn(e){console.warn(e)}static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:i.ɵfac,providedIn:`platform`})}return i})();var S_=new le(``);var Pd=new le(``);var RS=new le(`USE_PENDING_TASKS`,{providedIn:`root`,factory:()=>typeof Zone>`u`});var np=(()=>{class i{_ngZone;registry;_isZoneStable=!0;_callbacks=[];_taskTrackingZone=null;_destroyRef;pendingTasksInternal=_(ia);_usePendingTasks=_(RS);constructor(e,t,n){this._ngZone=e,this.registry=t,kb()&&(this._destroyRef=_(Mt,{optional:!0})??void 0),AS||(p5(n),n.addToWindow(t)),this._watchAngularEvents(),e.run(()=>{this._taskTrackingZone=typeof Zone>`u`?null:Zone.current.get(`TaskTrackingZone`)})}_watchAngularEvents(){let e=this._ngZone.onUnstable.subscribe({next:()=>{this._isZoneStable=!1}}),t,n;this._ngZone.runOutsideAngular(()=>{this._usePendingTasks&&(t=this.pendingTasksInternal.hasPendingTasksObservable.subscribe(()=>{this.isStable()&&this._ngZone.runOutsideAngular(()=>{this._runCallbacksIfReady()})})),n=this._ngZone.onStable.subscribe({next:()=>{Qe.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})}),this._destroyRef?.onDestroy(()=>{e.unsubscribe(),t?.unsubscribe(),n.unsubscribe()})}isStable(){return this._isZoneStable&&!this._ngZone.hasPendingMacrotasks&&(!this._usePendingTasks||!this.pendingTasksInternal.hasPendingTasks)}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;this._callbacks.length!==0;){let e=this._callbacks.pop();clearTimeout(e.timeoutId),e.doneCb()}});else{let e=this.getPendingTasks();this._callbacks=this._callbacks.filter(t=>t.updateCb&&t.updateCb(e)?(clearTimeout(t.timeoutId),!1):!0)}}getPendingTasks(){return this._taskTrackingZone?this._taskTrackingZone.macroTasks.map(e=>({source:e.source,creationLocation:e.creationLocation,data:e.data})):[]}addCallback(e,t,n){let o=-1;t&&t>0&&(o=setTimeout(()=>{this._callbacks=this._callbacks.filter(a=>a.timeoutId!==o),e()},t)),this._callbacks.push({doneCb:e,timeoutId:o,updateCb:n})}whenStable(e,t,n){if(n&&!this._taskTrackingZone)throw new Error(`Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?`);this.addCallback(e,t,n),this._runCallbacksIfReady()}registerApplication(e){this.registry.registerApplication(e,this)}unregisterApplication(e){this.registry.unregisterApplication(e)}findProviders(e,t,n){return[]}static ɵfac=function(t){return new(t||i)(Te(Qe),Te(rp),Te(Pd))};static ɵprov=de({token:i,factory:i.ɵfac})}return i})();var rp=(()=>{class i{_applications=new Map;registerApplication(e,t){this._applications.set(e,t)}unregisterApplication(e){this._applications.delete(e)}unregisterAllApplications(){this._applications.clear()}getTestability(e){return this._applications.get(e)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(e,t=!0){return AS?.findTestabilityInTree(this,e,t)??null}static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:i.ɵfac,providedIn:`platform`})}return i})();function p5(i){AS=i}var AS;var op=new le(``);function h5(){Py(()=>{throw new X(600,``)})}var $G=10;var Jr=(()=>{class i{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=_(Xr);afterRenderManager=_(uS);zonelessEnabled=_(Og);rootEffectScheduler=_(Mf);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new ce;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=_(ia);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(Pt(e=>!e))}constructor(){_(ra,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:n=>{n&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=_(Yt);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=qt.NULL){return this._injector.get(Qe).run(()=>{if(ei(Gt.BootstrapComponentStart),!this._injector.get(MS).done)throw new X(405,``);let s=za(e),l=this._injector.get(tc),c=new ec(s,l);this.componentTypes.push(e);let{hostElement:d,directives:p,bindings:f}=qG(t),v=d||c.selector,y=c.create(n,[],v,l.injector,p,f),T=y.location.nativeElement,M=y.injector.get(S_,null);return M?.registerApplication(T),y.onDestroy(()=>{this.detachView(y.hostView),Hg(this.components,y),M?.unregisterApplication(T)}),this._loadComponent(y),ei(Gt.BootstrapComponentEnd,y),y})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){ei(Gt.ChangeDetectionStart),this.tracingSnapshot!==null?this.tracingSnapshot.run(l_.CHANGE_DETECTION,this.tickImpl):this.tickImpl()}tickImpl=()=>{if(this._runningTick)throw ei(Gt.ChangeDetectionEnd),new X(101,!1);let e=We(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,We(e),this.afterTick.next(),ei(Gt.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(bo,null,{optional:!0}));let e=0;for(;this.dirtyFlags!==0&&e++<$G;){ei(Gt.ChangeDetectionSyncStart);try{this.synchronizeOnce()}finally{ei(Gt.ChangeDetectionSyncEnd)}}}synchronizeOnce(){this.dirtyFlags&16&&(this.dirtyFlags&=-17,this.rootEffectScheduler.flush());let e=!1;if(this.dirtyFlags&7){let t=!!(this.dirtyFlags&1);this.dirtyFlags&=-8,this.dirtyFlags|=8;for(let{_lView:n}of this.allViews){if(!t&&!kg(n))continue;PM(n,t&&!this.zonelessEnabled?0:1),e=!0}if(this.dirtyFlags&=-5,this.syncDirtyFlagsWithViews(),this.dirtyFlags&23)return}e||(this._rendererFactory?.begin?.(),this._rendererFactory?.end?.()),this.dirtyFlags&8&&(this.dirtyFlags&=-9,this.afterRenderManager.execute()),this.syncDirtyFlagsWithViews()}syncDirtyFlagsWithViews(){if(this.allViews.some(({_lView:e})=>kg(e))){this.dirtyFlags|=2;return}else this.dirtyFlags&=-8}attachView(e){let t=e;this._views.push(t),t.attachToAppRef(this)}detachView(e){let t=e;Hg(this._views,t),t.detachFromAppRef()}_loadComponent(e){this.attachView(e.hostView);try{this.tick()}catch(n){this.internalErrorHandler(n)}this.components.push(e),this._injector.get(op,[]).forEach(n=>n(e))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(e=>e()),this._views.slice().forEach(e=>e.destroy())}finally{this._destroyed=!0,this._views=[],this._destroyListeners=[]}}onDestroy(e){return this._destroyListeners.push(e),()=>Hg(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new X(406,!1);let e=this._injector;e.destroy&&!e.destroyed&&e.destroy()}get viewCount(){return this._views.length}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();function qG(i){return i===void 0||typeof i==`string`||i instanceof Element?{hostElement:i}:i}function Hg(i,r){let e=i.indexOf(r);e>-1&&i.splice(e,1)}function oc(i,r){let e=Ie();if(kn(e,ta(),r)){let n=Jt(),o=zs();if(h_(o,n,e,i,r))ea(o)&&TM(e,o.index);else{let s=pr(o,e);EM(e[Zt],s,null,o.value,i,r,null)}}return oc}function B(i,r,e,t){let n=Ie();if(kn(n,ta(),r)){Jt();uH(zs(),n,i,r,e,t)}return B}function FS(){return Ie()[Gn][Pi]}var B1=class{destroy(r){}updateValue(r,e){}swap(r,e){let t=Math.min(r,e),n=Math.max(r,e),o=this.detach(n);if(n-t>1){let a=this.detach(t);this.attach(t,o),this.attach(n,a)}else this.attach(t,o)}move(r,e){this.attach(e,this.detach(r))}};function l1(i,r,e,t,n){return i===e&&Object.is(r,t)?1:Object.is(n(i,r),n(e,t))?-1:0}function QG(i,r,e,t){let n,o,a=0,s=i.length-1;if(Array.isArray(r)){We(t);let c=r.length-1;for(We(null);a<=s&&a<=c;){let d=i.at(a),p=r[a],f=l1(a,d,a,p,e);if(f!==0){f<0&&i.updateValue(a,p),a++;continue}let v=i.at(s),y=r[c],T=l1(s,v,c,y,e);if(T!==0){T<0&&i.updateValue(s,y),s--,c--;continue}let M=e(a,d),F=e(s,v),A=e(a,p);if(Object.is(A,F)){let W=e(c,y);Object.is(W,M)?(i.swap(a,s),i.updateValue(s,y),c--,s--):i.move(s,a),i.updateValue(a,p),a++;continue}if(n??=new t_,o??=yk(i,a,s,e),H1(i,n,a,A))i.updateValue(a,p),a++,s++;else if(o.has(A))n.set(M,i.detach(a)),s--;else{let W=i.create(a,r[a]);i.attach(a,W),a++,s++}}for(;a<=c;)vk(i,n,e,a,r[a]),a++}else if(r!=null){We(t);let c=r[Symbol.iterator]();We(null);let d=c.next();for(;!d.done&&a<=s;){let p=i.at(a),f=d.value,v=l1(a,p,a,f,e);if(v!==0)v<0&&i.updateValue(a,f),a++,d=c.next();else{n??=new t_,o??=yk(i,a,s,e);let y=e(a,f);if(H1(i,n,a,y))i.updateValue(a,f),a++,s++,d=c.next();else if(!o.has(y))i.attach(a,i.create(a,f)),a++,s++,d=c.next();else{let T=e(a,p);n.set(T,i.detach(a)),s--}}}for(;!d.done;)vk(i,n,e,i.length,d.value),d=c.next()}for(;a<=s;)i.destroy(i.detach(s--));n?.forEach(c=>{i.destroy(c)})}function H1(i,r,e,t){return r!==void 0&&r.has(t)?(i.attach(e,r.get(t)),r.delete(t),!0):!1}function vk(i,r,e,t,n){if(H1(i,r,t,e(t,n)))i.updateValue(t,n);else{let o=i.create(t,n);i.attach(t,o)}}function yk(i,r,e,t){let n=new Set;for(let o=r;o<=e;o++)n.add(t(o,i.at(o)));return n}var t_=class{kvMap=new Map;_vMap=void 0;has(r){return this.kvMap.has(r)}delete(r){if(!this.has(r))return!1;let e=this.kvMap.get(r);return this._vMap!==void 0&&this._vMap.has(e)?(this.kvMap.set(r,this._vMap.get(e)),this._vMap.delete(e)):this.kvMap.delete(r),!0}get(r){return this.kvMap.get(r)}set(r,e){if(this.kvMap.has(r)){let t=this.kvMap.get(r);this._vMap===void 0&&(this._vMap=new Map);let n=this._vMap;for(;n.has(t);)t=n.get(t);n.set(t,e)}else this.kvMap.set(r,e)}forEach(r){for(let[e,t]of this.kvMap)if(r(t,e),this._vMap!==void 0){let n=this._vMap;for(;n.has(t);)t=n.get(t),r(t,e)}}};function b(i,r,e,t,n,o,a,s){nr(`NgControlFlow`);let l=Ie(),c=Jt();return $g(l,c,i,r,e,t,n,Yr(c.consts,o),256,a,s),PS}function PS(i,r,e,t,n,o,a,s){nr(`NgControlFlow`);let l=Ie(),c=Jt();return $g(l,c,i,r,e,t,n,Yr(c.consts,o),512,a,s),PS}function S(i,r){nr(`NgControlFlow`);let e=Ie(),t=ta(),n=e[t]!==jn?e[t]:-1,o=n!==-1?i_(e,Xt+n):void 0,a=0;if(kn(e,t,i)){let s=We(null);try{if(o!==void 0&&HM(o,a),i!==-1){let l=Xt+i,c=i_(e,l),d=W1(e[je],l),p=UM(c,d,e);ep(c,Jg(e,d,r,{dehydratedView:p}),a,Ed(d,p))}}finally{We(s)}}else if(o!==void 0){let s=BM(o,a);s!==void 0&&(s[Pi]=r)}}var G1=class{lContainer;$implicit;$index;constructor(r,e,t){this.lContainer=r,this.$implicit=e,this.$index=t}get $count(){return this.lContainer.length-Ei}};function ac(i){return i}function At(i,r){return r}var U1=class{hasEmptyBlock;trackByFn;liveCollection;constructor(r,e,t){this.hasEmptyBlock=r,this.trackByFn=e,this.liveCollection=t}};function _e(i,r,e,t,n,o,a,s,l,c,d,p,f){nr(`NgControlFlow`);let v=Ie(),y=Jt(),T=l!==void 0,M=Ie(),A=new U1(T,s?a.bind(M[Gn][Pi]):a);M[Xt+i]=A,$g(v,y,i+1,r,e,t,n,Yr(y.consts,o),256),T&&$g(v,y,i+2,l,c,d,p,Yr(y.consts,f),512)}var j1=class extends B1{lContainer;hostLView;templateTNode;operationsCounter=void 0;needsIndexUpdate=!1;constructor(r,e,t){super(),this.lContainer=r,this.hostLView=e,this.templateTNode=t}get length(){return this.lContainer.length-Ei}at(r){return this.getLView(r)[Pi].$implicit}attach(r,e){let t=e[Hl];this.needsIndexUpdate||=r!==this.length,ep(this.lContainer,e,r,Ed(this.templateTNode,t)),KG(this.lContainer,r)}detach(r){return this.needsIndexUpdate||=r!==this.length-1,YG(this.lContainer,r),ZG(this.lContainer,r)}create(r,e){let t=$f(this.lContainer,this.templateTNode.tView.ssrId);return Jg(this.hostLView,this.templateTNode,new G1(this.lContainer,e,r),{dehydratedView:t})}destroy(r){d_(r[je],r)}updateValue(r,e){this.getLView(r)[Pi].$implicit=e}reset(){this.needsIndexUpdate=!1}updateIndexes(){if(this.needsIndexUpdate)for(let r=0;r0){let o=t[Yo];VB(o,n),Gs.delete(t[Xo]),n.detachedLeaveAnimationFns=void 0}}function YG(i,r){if(i.length<=Ei)return;let t=i[Ei+r],n=t?t[Jo]:void 0;n&&n.leave&&n.leave.size>0&&(n.detachedLeaveAnimationFns=[])}function ZG(i,r){return jg(i,r)}function XG(i,r){return BM(i,r)}function W1(i,r){return _f(i,r)}function x(i,r,e){let t=Ie();if(kn(t,ta(),r)){Jt();NM(zs(),t,i,r,t[Zt],e)}return x}function $1(i,r,e,t,n){h_(r,i,e,n?`class`:`style`,t)}function h(i,r,e,t){let n=Ie(),o=n[je],a=i+Xt,s=o.firstCreatePass?NS(a,n,2,r,vS,bf(),e,t):o.data[a];if(ea(s)){let l=n[fo].tracingService;if(l&&l.componentCreate){let c=o.data[s.directiveStart+s.componentOffset];return l.componentCreate($M(c),()=>(bk(i,r,n,s,t),h))}}return bk(i,r,n,s,t),h}function bk(i,r,e,t,n){if(yS(t,e,i,r,m5),bd(t)){let o=e[je];p_(o,e,t),iS(o,t,e)}n!=null&&Xg(e,t)}function m(){let i=Jt(),e=bS(an());return i.firstCreatePass&&DS(i,e),Gb(e)&&Ub(),Bb(),e.classesWithoutHost!=null&&v9(e)&&$1(i,e,Ie(),e.classesWithoutHost,!0),e.stylesWithoutHost!=null&&y9(e)&&$1(i,e,Ie(),e.stylesWithoutHost,!1),m}function R(i,r,e,t){return h(i,r,e,t),m(),R}function Oi(i,r,e,t){let n=Ie(),o=n[je],a=i+Xt,s=o.firstCreatePass?nG(a,o,2,r,e,t):o.data[a];return yS(s,n,i,r,m5),t!=null&&Xg(n,s),Oi}function Vi(){return Gb(bS(an()))&&Ub(),Bb(),Vi}function sc(i,r,e,t){return Oi(i,r,e,t),Vi(),sc}var m5=(i,r,e,t,n)=>(Rg(!0),aM(r[Zt],t,Zb()));function It(i,r,e){let t=Ie(),n=t[je],o=i+Xt,a=n.firstCreatePass?NS(o,t,8,`ng-container`,vS,bf(),r,e):n.data[o];if(yS(a,t,i,`ng-container`,JG),bd(a)){let s=t[je];p_(s,t,a),iS(s,a,t)}return e!=null&&Xg(t,a),It}function Nt(){let i=Jt(),e=bS(an());return i.firstCreatePass&&DS(i,e),Nt}function J(i,r,e){return It(i,r,e),Nt(),J}var JG=(i,r,e,t,n)=>(Rg(!0),gB(r[Zt],``));function j(){return Ie()}function So(i,r,e){let t=Ie();if(kn(t,ta(),r)){Jt();DM(zs(),t,i,r,t[Zt],e)}return So}var Lg=void 0;function eU(i){let r=Math.floor(Math.abs(i)),e=i.toString().replace(/^[^.]*\.?/,``).length;return r===1&&e===0?1:5}var tU=[`en`,[[`a`,`p`],[`AM`,`PM`]],[[`AM`,`PM`]],[[`S`,`M`,`T`,`W`,`T`,`F`,`S`],[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`],[`Su`,`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`]],Lg,[[`J`,`F`,`M`,`A`,`M`,`J`,`J`,`A`,`S`,`O`,`N`,`D`],[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`]],Lg,[[`B`,`A`],[`BC`,`AD`],[`Before Christ`,`Anno Domini`]],0,[6,0],[`M/d/yy`,`MMM d, y`,`MMMM d, y`,`EEEE, MMMM d, y`],[`h:mm a`,`h:mm:ss a`,`h:mm:ss a z`,`h:mm:ss a zzzz`],[`{1}, {0}`,Lg,Lg,Lg],[`.`,`,`,`;`,`%`,`+`,`-`,`E`,`×`,`‰`,`∞`,`NaN`,`:`],[`#,##0.###`,`#,##0%`,`¤#,##0.00`,`#E0`],`USD`,`$`,`US Dollar`,{},`ltr`,eU];var c1=Object.create(null);function Rn(i){let r=iU(i),e=Sk(r);if(e)return e;let t=r.split(`-`)[0];if(e=Sk(t),e)return e;if(t===`en`)return tU;throw new X(701,!1)}function OS(i){return Rn(i)[Di.CurrencyCode]||null}function Sk(i){if(!(i in c1)){let r=on.ng&&on.ng.common&&on.ng.common.locales&&on.ng.common.locales[i];return r!==void 0&&(c1[i]=r),r}return c1[i]}var Di={LocaleId:0,DayPeriodsFormat:1,DayPeriodsStandalone:2,DaysFormat:3,DaysStandalone:4,MonthsFormat:5,MonthsStandalone:6,Eras:7,FirstDayOfWeek:8,WeekendRange:9,DateFormat:10,TimeFormat:11,DateTimeFormat:12,NumberSymbols:13,NumberFormats:14,CurrencyCode:15,CurrencySymbol:16,CurrencyName:17,Currencies:18,Directionality:19,PluralCase:20,ExtraData:21};function iU(i){return i.toLowerCase().replace(/_/g,`-`)}var ap=`en-US`;var nU=`USD`;function f5(i){typeof i==`string`&&i.toLowerCase().replace(/_/g,`-`)}function E(i,r,e){let t=Ie(),n=Jt(),o=an();return _5(n,t,t[Zt],o,i,r,e),E}function Od(i,r,e){let t=Ie(),n=Jt(),o=an();return(o.type&3||e)&&IS(o,n,t,e,t[Zt],i,r,Zl(o,t,r)),Od}function _5(i,r,e,t,n,o,a){let s=!0,l=null;if((t.type&3||a)&&(l??=Zl(t,r,o),IS(t,i,r,a,e,n,o,l)&&(s=!1)),s){let c=t.outputs?.[n],d=t.hostDirectiveOutputs?.[n];if(d&&d.length)for(let p=0;p>17&32767}function sU(i){return(i&2)==2}function lU(i,r){return i&131071|r<<17}function q1(i){return i|2}function Rd(i){return(i&131068)>>2}function d1(i,r){return i&-131069|r<<2}function cU(i){return(i&1)===1}function Q1(i){return i|1}function dU(i,r,e,t,n,o){let a=o?r.classBindings:r.styleBindings,s=ic(a),l=Rd(a);i[t]=e;let c=!1,d;if(Array.isArray(e)){let p=e;d=p[1],(d===null||fd(p,d)>0)&&(c=!0)}else d=e;if(n)if(l!==0){let f=ic(i[s+1]);i[t+1]=Of(f,s),f!==0&&(i[f+1]=d1(i[f+1],t)),i[s+1]=lU(i[s+1],t)}else i[t+1]=Of(s,0),s!==0&&(i[s+1]=d1(i[s+1],t)),s=t;else i[t+1]=Of(l,0),s===0?s=t:i[l+1]=d1(i[l+1],t),l=t;c&&(i[t+1]=q1(i[t+1])),wk(i,d,t,!0),wk(i,d,t,!1),uU(r,d,i,t,o),a=Of(s,l),o?r.classBindings=a:r.styleBindings=a}function uU(i,r,e,t,n){let o=n?i.residualClasses:i.residualStyles;o!=null&&typeof r==`string`&&fd(o,r)>=0&&(e[t+1]=Q1(e[t+1]))}function wk(i,r,e,t){let n=i[e+1],o=r===null,a=t?ic(n):Rd(n),s=!1;for(;a!==0&&(s===!1||o);){let l=i[a],c=i[a+1];gU(l,r)&&(s=!0,i[a+1]=t?Q1(c):q1(c)),a=t?ic(c):Rd(c)}s&&(i[e+1]=t?q1(n):Q1(n))}function gU(i,r){return i===null||r==null||(Array.isArray(i)?i[1]:i)===r?!0:Array.isArray(i)&&typeof r==`string`?fd(i,r)>=0:!1}var yo={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function pU(i){return i.substring(yo.key,yo.keyEnd)}function hU(i){return mU(i),x5(i,v5(i,0,yo.textEnd))}function x5(i,r){let e=yo.textEnd;return e===r?-1:(r=yo.keyEnd=fU(i,yo.key=r,e),v5(i,r,e))}function mU(i){yo.key=0,yo.keyEnd=0,yo.value=0,yo.valueEnd=0,yo.textEnd=i.length}function v5(i,r,e){for(;r32;)r++;return r}function re(i,r,e){return y5(i,r,e,!1),re}function ee(i,r){return y5(i,r,null,!0),ee}function jt(i){xU(CU,_U,i,!0)}function _U(i,r){for(let e=hU(r);e>=0;e=x5(r,e))gf(i,pU(r),!0)}function y5(i,r,e,t){let n=Ie(),o=Jt(),a=Sf(2);if(o.firstUpdatePass&&S5(o,i,a,t),r!==jn&&kn(n,a,r)){let s=o.data[Zr$1()];w5(o,s,n,n[Zt],i,n[a+1]=NU(r,e),t,a)}}function xU(i,r,e,t){let n=Jt(),o=Sf(2);n.firstUpdatePass&&S5(n,null,o,t);let a=Ie();if(e!==jn&&kn(a,o,e)){let s=n.data[Zr$1()];if(C5(s,t)&&!b5(n,o)){let l=t?s.classesWithoutHost:s.stylesWithoutHost;l!==null&&(e=af(l,e||``)),$1(n,s,a,e,t)}else IU(n,s,a,a[Zt],a[o+1],a[o+1]=wU(i,r,e),t,o)}}function b5(i,r){return r>=i.expandoStartIndex}function S5(i,r,e,t){let n=i.data;if(n[e+1]===null){let o=n[Zr$1()],a=b5(i,e);C5(o,t)&&r===null&&!a&&(r=!1),r=vU(n,o,r,t),dU(n,o,r,e,a,t)}}function vU(i,r,e,t){let n=TE(i),o=t?r.residualClasses:r.residualStyles;if(n===null)(t?r.classBindings:r.styleBindings)===0&&(e=u1(null,i,r,e,t),e=qg(e,r.attrs,t),o=null);else{let a=r.directiveStylingLast;if(a===-1||i[a]!==n)if(e=u1(n,i,r,e,t),o===null){let l=yU(i,r,t);l!==void 0&&Array.isArray(l)&&(l=u1(null,i,r,l[1],t),l=qg(l,r.attrs,t),bU(i,r,t,l))}else o=SU(i,r,t)}return o!==void 0&&(t?r.residualClasses=o:r.residualStyles=o),e}function yU(i,r,e){let t=e?r.classBindings:r.styleBindings;if(Rd(t)!==0)return i[ic(t)]}function bU(i,r,e,t){let n=e?r.classBindings:r.styleBindings;i[ic(n)]=t}function SU(i,r,e){let t,n=r.directiveEnd;for(let o=1+r.directiveStylingLast;o0;){let l=i[n],c=Array.isArray(l),d=c?l[1]:l,p=d===null,f=e[n+1];f===jn&&(f=p?Bn:void 0);let v=p?pf(f,t):d===t?f:void 0;if(c&&!n_(v)&&(v=pf(l,t)),n_(v)&&(s=v,a))return s;let y=i[n+1];n=a?ic(y):Rd(y)}if(r!==null){let l=o?r.residualClasses:r.residualStyles;l!=null&&(s=pf(l,t))}return s}function n_(i){return i!==void 0}function NU(i,r){return i==null||i===``||(typeof r==`string`?i=kr(i)+r:typeof i==`object`&&(i=bg(kr(i)))),i}function C5(i,r){return(i.flags&(r?8:16))!==0}function D(i,r=``){let e=Ie(),t=Jt(),n=i+Xt,o=t.firstCreatePass?nc(t,n,1,r,null):t.data[n],a=DU(t,e,o,r);e[n]=a,Tf()&&hS(t,e,a,o),Ql(o,!1)}var DU=(i,r,e,t)=>(Rg(!0),dB(r[Zt],t));function I5(i,r,e,t=``){return kn(i,ta(),e)?r+As(e)+t:jn}function N5(i,r,e,t,n,o=``){let s=kd(i,wE(),e,n);return Sf(2),s?r+As(e)+t+As(n)+o:jn}function Q(i){return q(``,i),Q}function q(i,r,e){let t=Ie(),n=I5(t,i,r,e);return n!==jn&&D5(t,Zr$1(),n),q}function Vd(i,r,e,t,n){let o=Ie(),a=N5(o,i,r,e,t,n);return a!==jn&&D5(o,Zr$1(),a),Vd}function D5(i,r,e){let t=Pb(r,i);uB(i[Zt],t,e)}function Ke(i,r,e){Rf(r)&&(r=r());let t=Ie();if(kn(t,ta(),r)){Jt();NM(zs(),t,i,r,t[Zt],e)}return Ke}function Ye(i,r){let e=Rf(i);return e&&i.set(r),e}function Je(i,r){let e=Ie(),t=Jt(),n=an();return _5(t,e,e[Zt],n,i,r),Je}var T5={};function C_(i){nr(`NgLet`);let r=Jt(),e=Ie(),t=i+Xt;return Ql(nc(r,t,128,null,null),!1),Eg(r,e,t,T5),C_}function LS(i){return Eg(Jt(),Ie(),Zr$1(),i),i}function Ld(i){let e=Vs(qb(),Xt+i);if(e===T5)throw new X(314,!1);return e}function wo(i){return kn(Ie(),ta(),i)?As(i):jn}function zd(i,r,e=``){return I5(Ie(),i,r,e)}function zS(i,r,e,t,n=``){return N5(Ie(),i,r,e,t,n)}function Ik(i,r,e){let t=Jt();t.firstCreatePass&&E5(r,t.data,t.blueprint,_o(i),e)}function E5(i,r,e,t,n){if(i=tn(i),Array.isArray(i))for(let o=0;o>20;if(zl(i)||!i.multi){let v=new Xl(c,n,ct,null),y=p1(l,r,n?d:d+f,p);y===-1?(f1(jf(s,a),o,l),g1(o,i,r.length),r.push(l),s.directiveStart++,s.directiveEnd++,n&&(s.providerIndexes+=1048576),e.push(v),a.push(v)):(e[y]=v,a[y]=v)}else{let v=p1(l,r,d+f,p),y=p1(l,r,d,d+f),T=v>=0&&e[v],M=y>=0&&e[y];if(n&&!M||!n&&!T){f1(jf(s,a),o,l);let F=kU(n?EU:TU,e.length,n,t,c,i);!n&&M&&(e[y].providerFactory=F),g1(o,i,r.length,0),r.push(l),s.directiveStart++,s.directiveEnd++,n&&(s.providerIndexes+=1048576),e.push(F),a.push(F)}else{let F=k5(e[n?y:v],c,!n&&t);g1(o,i,v>-1?v:y,F)}!n&&t&&M&&e[y].componentProviders++}}}function g1(i,r,e,t){let n=zl(r),o=uE(r);if(n||o){let l=(o?tn(r.useClass):r).prototype.ngOnDestroy;if(l){let c=i.destroyHooks||(i.destroyHooks=[]);if(!n&&r.multi){let d=c.indexOf(e);d===-1?c.push(e,[t,l]):c[d+1].push(t,l)}else c.push(e,l)}}}function k5(i,r,e){return e&&i.componentProviders++,i.multi.push(r)-1}function p1(i,r,e,t){for(let n=e;n{e.providersResolver=(t,n)=>Ik(t,n?n(i):i,!1),r&&(e.viewProvidersResolver=(t,n)=>Ik(t,n?n(r):r,!0))}}function aa(i,r){let e=Un()+i,t=Ie();return t[e]===jn?oa(t,e,r()):tp(t,e)}function rt(i,r,e){return M5(Ie(),Un(),i,r,e)}function Wn(i,r,e,t){return R5(Ie(),Un(),i,r,e,t)}function sa(i,r,e,t,n){return A5(Ie(),Un(),i,r,e,t,n)}function hr(i,r,e,t,n,o,a){return F5(Ie(),Un(),i,r,e,t,n,o)}function Qi(i,r,e,t,n,o,a){let s=Un()+i,l=Ie(),c=Md(l,s,e,t,n,o);return kn(l,s+4,a)||c?oa(l,s+5,r(e,t,n,o,a)):tp(l,s+5)}function pn(i,r,e,t,n,o,a,s){let l=Un()+i,c=Ie(),d=Md(c,l,e,t,n,o);return kd(c,l+4,a,s)||d?oa(c,l+6,r(e,t,n,o,a,s)):tp(c,l+6)}function js(i,r,e,t,n,o,a,s,l){let c=Un()+i,d=Ie(),p=Md(d,c,e,t,n,o);return QM(d,c+4,a,s,l)||p?oa(d,c+7,r(e,t,n,o,a,s,l)):tp(d,c+7)}function I_(i,r,e,t,n,o,a,s,l,c){let d=Un()+i,p=Ie(),f=Md(p,d,e,t,n,o);return Md(p,d+4,a,s,l,c)||f?oa(p,d+8,r(e,t,n,o,a,s,l,c)):tp(p,d+8)}function sp(i,r,e){return P5(Ie(),Un(),i,r,e)}function lp(i,r){let e=i[r];return e===jn?void 0:e}function M5(i,r,e,t,n,o){let a=r+e;return kn(i,a,n)?oa(i,a+1,o?t.call(o,n):t(n)):lp(i,a+1)}function R5(i,r,e,t,n,o,a){let s=r+e;return kd(i,s,n,o)?oa(i,s+2,a?t.call(a,n,o):t(n,o)):lp(i,s+2)}function A5(i,r,e,t,n,o,a,s){let l=r+e;return QM(i,l,n,o,a)?oa(i,l+3,s?t.call(s,n,o,a):t(n,o,a)):lp(i,l+3)}function F5(i,r,e,t,n,o,a,s,l){let c=r+e;return Md(i,c,n,o,a,s)?oa(i,c+4,l?t.call(l,n,o,a,s):t(n,o,a,s)):lp(i,c+4)}function P5(i,r,e,t,n,o){let a=r+e,s=!1;for(let l=0;l=0;e--){let t=r[e];if(i===t.name)return t}}function yt(i,r,e){let t=i+Xt,n=Ie(),o=Vs(n,t);return cp(n,t)?M5(n,Un(),r,o.transform,e,o):o.transform(e)}function ki(i,r,e,t){let n=i+Xt,o=Ie(),a=Vs(o,n);return cp(o,n)?R5(o,Un(),r,a.transform,e,t,a):a.transform(e,t)}function Ue(i,r,e,t,n){let o=i+Xt,a=Ie(),s=Vs(a,o);return cp(a,o)?A5(a,Un(),r,s.transform,e,t,n,s):s.transform(e,t,n)}function Li(i,r,e,t,n,o){let a=i+Xt,s=Ie(),l=Vs(s,a);return cp(s,a)?F5(s,Un(),r,l.transform,e,t,n,o,l):l.transform(e,t,n,o)}function ot(i,r,e){let t=i+Xt,n=Ie(),o=Vs(n,t);return cp(n,t)?P5(n,Un(),r,o.transform,e,o):o.transform.apply(o,e)}function cp(i,r){return i[je].data[r].pure}function Y(i,r){return m_(i,r)}var O5=(()=>{class i{applicationErrorHandler=_(Xr);appRef=_(Jr);taskService=_(ia);ngZone=_(Qe);zonelessEnabled=_(Og);tracing=_(ra,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new yi;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(vg):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(_(i1,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{let e=this.taskService.add();if(!this.runningTick&&(this.cleanup(),!this.zonelessEnabled||this.appRef.includeAllTestViews)){this.taskService.remove(e);return}this.switchToMicrotaskScheduler(),this.taskService.remove(e)})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()}))}switchToMicrotaskScheduler(){this.ngZone.runOutsideAngular(()=>{let e=this.taskService.add();this.useMicrotaskScheduler=!0,queueMicrotask(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(e)})})}notify(e){if(!this.zonelessEnabled&&e===5)return;switch(e){case 0:case 2:this.appRef.dirtyFlags|=2;break;case 3:case 4:case 5:case 1:this.appRef.dirtyFlags|=4;break;case 6:this.appRef.dirtyFlags|=2;break;case 12:this.appRef.dirtyFlags|=16;break;case 13:this.appRef.dirtyFlags|=2;break;case 11:break;default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick())return;let t=this.useMicrotaskScheduler?OE:Jb;this.pendingRenderTaskId=this.taskService.add(),this.scheduleInRootZone?this.cancelScheduledCallback=Zone.root.run(()=>t(()=>this.tick())):this.cancelScheduledCallback=this.ngZone.runOutsideAngular(()=>t(()=>this.tick()))}shouldScheduleTick(){return!(this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(vg+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let e=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(t){this.applicationErrorHandler(t)}finally{this.taskService.remove(e),this.cleanup()}}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let e=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(e)}}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();function BS(){return nr(`NgZoneless`),Ba([...HS(),[]])}function HS(){return[{provide:La,useExisting:O5},{provide:Qe,useClass:yg},{provide:Og,useValue:!0}]}var GS=(()=>{class i{compileModuleSync(e){return new e_(e)}compileModuleAsync(e){return Promise.resolve(this.compileModuleSync(e))}clearCache(){}clearCacheFor(e){}getModuleId(e){}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();function RU(){return typeof $localize<`u`&&$localize.locale||ap}var ln=new le(``,{factory:()=>_(ln,{optional:!0,skipSelf:!0})||RU()});var US=new le(``,{factory:()=>nU});var N_=class{destroyed=!1;listeners=null;errorHandler=_($r,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=_(Mt);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(r){if(this.destroyed)throw new X(953,!1);return(this.listeners??=[]).push(r),{unsubscribe:()=>{let e=this.listeners?this.listeners.indexOf(r):-1;e>-1&&(this.isEmitting?(this.hasNullListeners=!0,this.listeners[e]=null):this.listeners.splice(e,1))}}}emit(r){if(this.destroyed){console.warn(Dr(953,!1));return}if(this.listeners===null)return;this.isEmitting=!0;let e=We(null);try{for(let t of this.listeners)try{t!==null&&t(r)}catch(n){this.errorHandler?.handleError(n)}}finally{this.hasNullListeners&&(this.hasNullListeners=!1,this.listeners&&AU(this.listeners)),We(e),this.isEmitting=!1}}};function AU(i){let r=i.length-1;for(;r>-1;)i[r]===null&&i.splice(r,1),r--}function Co(i,r){return sg(i,r?.equal)}function pi(i){return xT(i)}(class i extends Error{_brand;constructor(r){super(r)}static IDLE=new i(`IDLE`);static LOADING=new i(`LOADING`)});var FU=i=>i;function D_(i,r){if(typeof i==`function`)return L5(By(i,FU,r?.equal),r?.debugName,r?.set);else return L5(By(i.source,i.computation,i.equal),i.debugName,i.set)}function L5(i,r,e){let t=i[$i],n=i;if(e!==void 0){let o=a=>Hy(t,a);n.set=a=>e(a,o),n.update=a=>e(a(pi(i)),o)}else n.set=o=>Hy(t,o),n.update=o=>_T(t,o);return n.asReadonly=Ef.bind(i),n}var $5=Symbol(`InputSignalNode#UNSET`);var UU=s(r({},Cm),{transformFn:void 0,applyValueToInputSignal(i,r){kl(i,r)}});function q5(i,r){let e=Object.create(UU);e.value=i,e.transformFn=r?.transform;function t(){if(Nl(e),e.value===$5)throw new X(-950,null);return e.value}return t[$i]=e,t}function JS(i){return jU(i)?i.default:i}function jU(i){return i&&typeof i==`object`&&`default`in i}function up(i){return new N_}function z5(i,r){return q5(i,r)}function WU(i){return q5($5,i)}var lc=(z5.required=WU,z5);function B5(i,r){return s5(r)}function $U(i,r){return l5(r)}var Io=(B5.required=$U,B5);var Q5=(()=>{class i{constructor(e){}static ɵfac=function(t){return new(t||i)(Te(Jr))};static ɵmod=Me({type:i});static ɵinj=Ee({})}return i})();var jS=class{supports(r){return CS(r)}create(r){return new WS(r)}};var QU=(i,r)=>r;var WS=class{length=0;collection;_linkedRecords=null;_unlinkedRecords=null;_previousItHead=null;_itHead=null;_itTail=null;_additionsHead=null;_additionsTail=null;_movesHead=null;_movesTail=null;_removalsHead=null;_removalsTail=null;_identityChangesHead=null;_identityChangesTail=null;_trackByFn;constructor(r){this._trackByFn=r||QU}forEachItem(r){let e;for(e=this._itHead;e!==null;e=e._next)r(e)}forEachOperation(r){let e=this._itHead,t=this._removalsHead,n=0,o=null;for(;e||t;){let a=!t||e&&e.currentIndex{a=this._trackByFn(n,s),e===null||!Object.is(e.trackById,a)?(e=this._mismatch(e,s,a,n),t=!0):(t&&(e=this._verifyReinsertion(e,s,a,n)),Object.is(e.item,s)||this._addIdentityChange(e,s)),e=e._next,n++}),this.length=n;return this._truncate(e),this.collection=r,this.isDirty}get isDirty(){return this._additionsHead!==null||this._movesHead!==null||this._removalsHead!==null||this._identityChangesHead!==null}_reset(){if(this.isDirty){let r;for(r=this._previousItHead=this._itHead;r!==null;r=r._next)r._nextPrevious=r._next;for(r=this._additionsHead;r!==null;r=r._nextAdded)r.previousIndex=r.currentIndex;for(this._additionsHead=this._additionsTail=null,r=this._movesHead;r!==null;r=r._nextMoved)r.previousIndex=r.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(r,e,t,n){let o;return r===null?o=this._itTail:(o=r._prev,this._remove(r)),r=this._unlinkedRecords===null?null:this._unlinkedRecords.get(t,null),r!==null?(Object.is(r.item,e)||this._addIdentityChange(r,e),this._reinsertAfter(r,o,n)):(r=this._linkedRecords===null?null:this._linkedRecords.get(t,n),r!==null?(Object.is(r.item,e)||this._addIdentityChange(r,e),this._moveAfter(r,o,n)):r=this._addAfter(new $S(e,t),o,n)),r}_verifyReinsertion(r,e,t,n){let o=this._unlinkedRecords===null?null:this._unlinkedRecords.get(t,null);return o!==null?r=this._reinsertAfter(o,r._prev,n):r.currentIndex!=n&&(r.currentIndex=n,this._addToMoves(r,n)),r}_truncate(r){for(;r!==null;){let e=r._next;this._addToRemovals(this._unlink(r)),r=e}this._unlinkedRecords!==null&&this._unlinkedRecords.clear(),this._additionsTail!==null&&(this._additionsTail._nextAdded=null),this._movesTail!==null&&(this._movesTail._nextMoved=null),this._itTail!==null&&(this._itTail._next=null),this._removalsTail!==null&&(this._removalsTail._nextRemoved=null),this._identityChangesTail!==null&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(r,e,t){this._unlinkedRecords!==null&&this._unlinkedRecords.remove(r);let n=r._prevRemoved,o=r._nextRemoved;return n===null?this._removalsHead=o:n._nextRemoved=o,o===null?this._removalsTail=n:o._prevRemoved=n,this._insertAfter(r,e,t),this._addToMoves(r,t),r}_moveAfter(r,e,t){return this._unlink(r),this._insertAfter(r,e,t),this._addToMoves(r,t),r}_addAfter(r,e,t){return this._insertAfter(r,e,t),this._additionsTail===null?this._additionsTail=this._additionsHead=r:this._additionsTail=this._additionsTail._nextAdded=r,r}_insertAfter(r,e,t){let n=e===null?this._itHead:e._next;return r._next=n,r._prev=e,n===null?this._itTail=r:n._prev=r,e===null?this._itHead=r:e._next=r,this._linkedRecords===null&&(this._linkedRecords=new E_),this._linkedRecords.put(r),r.currentIndex=t,r}_remove(r){return this._addToRemovals(this._unlink(r))}_unlink(r){this._linkedRecords!==null&&this._linkedRecords.remove(r);let e=r._prev,t=r._next;return e===null?this._itHead=t:e._next=t,t===null?this._itTail=e:t._prev=e,r}_addToMoves(r,e){return r.previousIndex===e||(this._movesTail===null?this._movesTail=this._movesHead=r:this._movesTail=this._movesTail._nextMoved=r),r}_addToRemovals(r){return this._unlinkedRecords===null&&(this._unlinkedRecords=new E_),this._unlinkedRecords.put(r),r.currentIndex=null,r._nextRemoved=null,this._removalsTail===null?(this._removalsTail=this._removalsHead=r,r._prevRemoved=null):(r._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=r),r}_addIdentityChange(r,e){return r.item=e,this._identityChangesTail===null?this._identityChangesTail=this._identityChangesHead=r:this._identityChangesTail=this._identityChangesTail._nextIdentityChange=r,r}};var $S=class{item;trackById;currentIndex=null;previousIndex=null;_nextPrevious=null;_prev=null;_next=null;_prevDup=null;_nextDup=null;_prevRemoved=null;_nextRemoved=null;_nextAdded=null;_nextMoved=null;_nextIdentityChange=null;constructor(r,e){this.item=r,this.trackById=e}};var qS=class{_head=null;_tail=null;add(r){this._head===null?(this._head=this._tail=r,r._nextDup=null,r._prevDup=null):(this._tail._nextDup=r,r._prevDup=this._tail,r._nextDup=null,this._tail=r)}get(r,e){let t;for(t=this._head;t!==null;t=t._nextDup)if((e===null||e<=t.currentIndex)&&Object.is(t.trackById,r))return t;return null}remove(r){let e=r._prevDup,t=r._nextDup;return e===null?this._head=t:e._nextDup=t,t===null?this._tail=e:t._prevDup=e,this._head===null}};var E_=class{map=new Map;put(r){let e=r.trackById,t=this.map.get(e);t||(t=new qS,this.map.set(e,t)),t.add(r)}get(r,e){let t=r,n=this.map.get(t);return n?n.get(r,e):null}remove(r){let e=r.trackById;return this.map.get(e).remove(r)&&this.map.delete(e),r}get isEmpty(){return this.map.size===0}clear(){this.map.clear()}};function H5(i,r,e){let t=i.previousIndex;if(t===null)return t;let n=0;return e&&t{if(e&&e.key===n)this._maybeAddToChanges(e,t),this._appendAfter=e,e=e._next;else{let o=this._getOrCreateRecordForKey(n,t);e=this._insertBeforeOrAppend(e,o)}}),e){e._prev&&(e._prev._next=null),this._removalsHead=e;for(let t=e;t!==null;t=t._nextRemoved)t===this._mapHead&&(this._mapHead=null),this._records.delete(t.key),t._nextRemoved=t._next,t.previousValue=t.currentValue,t.currentValue=null,t._prev=null,t._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(r,e){if(r){let t=r._prev;return e._next=r,e._prev=t,r._prev=e,t&&(t._next=e),r===this._mapHead&&(this._mapHead=e),this._appendAfter=r,r}return this._appendAfter?(this._appendAfter._next=e,e._prev=this._appendAfter):this._mapHead=e,this._appendAfter=e,null}_getOrCreateRecordForKey(r,e){if(this._records.has(r)){let n=this._records.get(r);this._maybeAddToChanges(n,e);let o=n._prev,a=n._next;return o&&(o._next=a),a&&(a._prev=o),n._next=null,n._prev=null,n}let t=new YS(r);return this._records.set(r,t),t.currentValue=e,this._addToAdditions(t),t}_reset(){if(this.isDirty){let r;for(this._previousMapHead=this._mapHead,r=this._previousMapHead;r!==null;r=r._next)r._nextPrevious=r._next;for(r=this._changesHead;r!==null;r=r._nextChanged)r.previousValue=r.currentValue;for(r=this._additionsHead;r!=null;r=r._nextAdded)r.previousValue=r.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(r,e){Object.is(e,r.currentValue)||(r.previousValue=r.currentValue,r.currentValue=e,this._addToChanges(r))}_addToAdditions(r){this._additionsHead===null?this._additionsHead=this._additionsTail=r:(this._additionsTail._nextAdded=r,this._additionsTail=r)}_addToChanges(r){this._changesHead===null?this._changesHead=this._changesTail=r:(this._changesTail._nextChanged=r,this._changesTail=r)}_forEach(r,e){r instanceof Map?r.forEach(e):Object.keys(r).forEach(t=>e(r[t],t))}};var YS=class{key;previousValue=null;currentValue=null;_nextPrevious=null;_next=null;_prev=null;_nextAdded=null;_nextRemoved=null;_nextChanged=null;constructor(r){this.key=r}};function G5(){return new eo([new jS])}var eo=(()=>{class i{factories;static ɵprov=de({token:i,providedIn:`root`,factory:G5});constructor(e){this.factories=e}static create(e,t){if(t!=null){let n=t.factories.slice();e=e.concat(n)}return new i(e)}static extend(e){return{provide:i,useFactory:()=>{let t=_(i,{optional:!0,skipSelf:!0});return i.create(e,t||G5())}}}find(e){let t=this.factories.find(n=>n.supports(e));if(t!=null)return t;throw new X(901,!1)}}return i})();function U5(){return new ew([new QS])}var ew=(()=>{class i{static ɵprov=de({token:i,providedIn:`root`,factory:U5});factories;constructor(e){this.factories=e}static create(e,t){if(t){let n=t.factories.slice();e=e.concat(n)}return new i(e)}static extend(e){return{provide:i,useFactory:()=>{let t=_(i,{optional:!0,skipSelf:!0});return i.create(e,t||U5())}}}find(e){let t=this.factories.find(n=>n.supports(e));if(t)return t;throw new X(901,!1)}}return i})();var Ne=(()=>{class i{static __NG_ELEMENT_ID__=KU}return i})();function KU(i){return YU(an(),Ie(),(i&16)===16)}function YU(i,r,e){if(ea(i)&&!e){let t=Kr(i.index,r);return new Us(t,t)}else if(i.type&175){let t=r[Gn];return new Us(t,r)}return null}var ZS=new le(``);var ZU=new le(``);function dp(i){return!i.moduleRef}function XU(i){let r=dp(i)?i.r3Injector:i.moduleRef.injector,e=r.get(Qe);return e.run(()=>{dp(i)?i.r3Injector.resolveInjectorInitializers():i.moduleRef.resolveInjectorInitializers();let t=r.get(Xr),n;if(e.runOutsideAngular(()=>{n=e.onError.subscribe({next:t})}),dp(i)){let o=()=>r.destroy(),a=i.platformInjector.get(ZS);a.add(o),r.onDestroy(()=>{n.unsubscribe(),a.delete(o)})}else{let o=()=>i.moduleRef.destroy(),a=i.platformInjector.get(ZS);a.add(o),i.moduleRef.onDestroy(()=>{Hg(i.allPlatformModules,i.moduleRef),n.unsubscribe(),a.delete(o)})}return ej(t,e,()=>{let o=r.get(ia),a=o.add(),s=r.get(MS);return s.runInitializers(),s.donePromise.then(()=>{if(f5(r.get(ln,ap)||ap),!r.get(ZU,!0))return dp(i)?r.get(Jr):(i.allPlatformModules.push(i.moduleRef),i.moduleRef);if(dp(i)){let d=r.get(Jr);return i.rootComponent!==void 0&&d.bootstrap(i.rootComponent),d}else return JU?.(i.moduleRef,i.allPlatformModules),i.moduleRef}).finally(()=>{o.remove(a)})})})}var JU;function ej(i,r,e){try{let t=e();return qa(t)?t.catch(n=>{throw r.runOutsideAngular(()=>i(n)),n}):t}catch(t){throw r.runOutsideAngular(()=>i(t)),t}}var T_=null;function tj(i=[],r){return qt.create({name:r,providers:[{provide:Dg,useValue:`platform`},{provide:ZS,useValue:new Set([()=>T_=null])},...i]})}function ij(i=[]){if(T_)return T_;let r=tj(i);return T_=r,h5(),nj(r),r}function nj(i){let r=i.get(kf,null);qi(i,()=>{r?.forEach(e=>e())})}function K5(i){let{rootComponent:r,appProviders:e,platformProviders:t,platformRef:n}=i;ei(Gt.BootstrapApplicationStart);try{let o=n?.injector??ij(t);return XU({r3Injector:new Wg({providers:[HS(),LE,...e||[]],parent:o,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:o,rootComponent:r})}catch(o){return Promise.reject(o)}finally{ei(Gt.BootstrapApplicationEnd)}}function O(i){return typeof i==`boolean`?i:i!=null&&i!==`false`}function cc(i,r){let e=za(i),t=r.elementInjector||xd();return new ec(e).create(t,r.projectableNodes,r.hostElement,r.environmentInjector,r.directives,r.bindings)}function Y5(i){let r=za(i);if(!r)return null;let e=new ec(r);return{get selector(){return e.selector},get type(){return e.componentType},get inputs(){return e.inputs},get outputs(){return e.outputs},get ngContentSelectors(){return e.ngContentSelectors},get isStandalone(){return r.standalone},get isSignal(){return r.signals}}}function Z5(){return!1}var X5={production:!0};var J5=null;function Rr(){return J5}function tw(i){J5??=i}var gp=class{};var Qa=(()=>{class i{historyGo(e){throw new Error(``)}static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:()=>_(eR),providedIn:`platform`})}return i})();var iw=new le(``);var eR=(()=>{class i extends Qa{_location;_history;_doc=_($e);constructor(){super(),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return Rr().getBaseHref(this._doc)}onPopState(e){let t=Rr().getGlobalEventTarget(this._doc,`window`);return t.addEventListener(`popstate`,e,!1),()=>t.removeEventListener(`popstate`,e)}onHashChange(e){let t=Rr().getGlobalEventTarget(this._doc,`window`);return t.addEventListener(`hashchange`,e,!1),()=>t.removeEventListener(`hashchange`,e)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(e){this._location.pathname=e}pushState(e,t,n){this._history.pushState(e,t,n)}replaceState(e,t,n){this._history.replaceState(e,t,n)}forward(){this._history.forward()}back(){this._history.back()}historyGo(e=0){this._history.go(e)}getState(){return this._history.state}static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:()=>new i,providedIn:`platform`})}return i})();function k_(i,r){return i?r?i.endsWith(`/`)?r.startsWith(`/`)?i+r.slice(1):i+r:r.startsWith(`/`)?i+r:`${i}/${r}`:i:r}function tR(i){let r=i.search(/#|\?|$/);return i[r-1]===`/`?i.slice(0,r-1)+i.slice(r):i}function No(i){return i&&i[0]!==`?`?`?${i}`:i}var Ka=(()=>{class i{historyGo(e){throw new Error(``)}static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:()=>_(R_),providedIn:`root`})}return i})();var M_=new le(``);var R_=(()=>{class i extends Ka{_platformLocation;_baseHref;_removeListenerFns=[];constructor(e,t){super(),this._platformLocation=e,this._baseHref=t??this._platformLocation.getBaseHrefFromDOM()??_($e).location?.origin??``}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(e){this._removeListenerFns.push(this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e))}getBaseHref(){return this._baseHref}prepareExternalUrl(e){return k_(this._baseHref,e)}path(e=!1){let t=this._platformLocation.pathname+No(this._platformLocation.search),n=this._platformLocation.hash;return n&&e?`${t}${n}`:t}pushState(e,t,n,o){let a=this.prepareExternalUrl(n+No(o));this._platformLocation.pushState(e,t,a)}replaceState(e,t,n,o){let a=this.prepareExternalUrl(n+No(o));this._platformLocation.replaceState(e,t,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(e=0){this._platformLocation.historyGo?.(e)}static ɵfac=function(t){return new(t||i)(Te(Qa),Te(M_,8))};static ɵprov=de({token:i,factory:i.ɵfac,providedIn:`root`})}return i})();var Ws=(()=>{class i{_subject=new ce;_basePath;_locationStrategy;_urlChangeListeners=[];_urlChangeSubscription=null;constructor(e){this._locationStrategy=e;let t=this._locationStrategy.getBaseHref();this._basePath=aj(tR(iR(t))),this._locationStrategy.onPopState(n=>{this._subject.next({url:this.path(!0),pop:!0,state:n.state,type:n.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(e=!1){return this.normalize(this._locationStrategy.path(e))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(e,t=``){return this.path()==this.normalize(e+No(t))}normalize(e){return i.stripTrailingSlash(oj(this._basePath,iR(e)))}prepareExternalUrl(e){return e&&e[0]!==`/`&&(e=`/`+e),this._locationStrategy.prepareExternalUrl(e)}go(e,t=``,n=null){this._locationStrategy.pushState(n,``,e,t),this._notifyUrlChangeListeners(this.prepareExternalUrl(e+No(t)),n)}replaceState(e,t=``,n=null){this._locationStrategy.replaceState(n,``,e,t),this._notifyUrlChangeListeners(this.prepareExternalUrl(e+No(t)),n)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(e=0){this._locationStrategy.historyGo?.(e)}onUrlChange(e){return this._urlChangeListeners.push(e),this._urlChangeSubscription??=this.subscribe(t=>{this._notifyUrlChangeListeners(t.url,t.state)}),()=>{let t=this._urlChangeListeners.indexOf(e);this._urlChangeListeners.splice(t,1),this._urlChangeListeners.length===0&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(e=``,t){this._urlChangeListeners.forEach(n=>n(e,t))}subscribe(e,t,n){return this._subject.subscribe({next:e,error:t??void 0,complete:n??void 0})}static normalizeQueryParams=No;static joinWithSlash=k_;static stripTrailingSlash=tR;static ɵfac=function(t){return new(t||i)(Te(Ka))};static ɵprov=de({token:i,factory:()=>rj(),providedIn:`root`})}return i})();function rj(){return new Ws(Te(Ka))}function oj(i,r){if(!i||!r.startsWith(i))return r;let e=r.substring(i.length);return e===``||[`/`,`;`,`?`,`#`].includes(e[0])?e:r}function iR(i){return i.replace(/\/index\.html$/,``)}function aj(i){if(new RegExp(`^(https?:)?//`).test(i)){let[,e]=i.split(/\/\/[^\/]+/);return e}return i}var uw=(()=>{class i extends Ka{_platformLocation;_baseHref=``;_removeListenerFns=[];constructor(e,t){super(),this._platformLocation=e,t!=null&&(this._baseHref=t)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(e){this._removeListenerFns.push(this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e))}getBaseHref(){return this._baseHref}path(e=!1){let t=this._platformLocation.hash??`#`;return t.length>0?t.substring(1):t}prepareExternalUrl(e){let t=k_(this._baseHref,e);return t.length>0?`#`+t:t}pushState(e,t,n,o){let a=this.prepareExternalUrl(n+No(o))||this._platformLocation.pathname;this._platformLocation.pushState(e,t,a)}replaceState(e,t,n,o){let a=this.prepareExternalUrl(n+No(o))||this._platformLocation.pathname;this._platformLocation.replaceState(e,t,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(e=0){this._platformLocation.historyGo?.(e)}static ɵfac=function(t){return new(t||i)(Te(Qa),Te(M_,8))};static ɵprov=de({token:i,factory:i.ɵfac})}return i})();var sR={ADP:[void 0,void 0,0],AFN:[void 0,`؋`,0],ALL:[void 0,void 0,0],AMD:[void 0,`֏`,2],AOA:[void 0,`Kz`],ARS:[void 0,`$`],AUD:[`A$`,`$`],AZN:[void 0,`₼`],BAM:[void 0,`KM`],BBD:[void 0,`$`],BDT:[void 0,`৳`],BHD:[void 0,void 0,3],BIF:[void 0,void 0,0],BMD:[void 0,`$`],BND:[void 0,`$`],BOB:[void 0,`Bs`],BRL:[`R$`],BSD:[void 0,`$`],BWP:[void 0,`P`],BYN:[void 0,void 0,2],BYR:[void 0,void 0,0],BZD:[void 0,`$`],CAD:[`CA$`,`$`,2],CHF:[void 0,void 0,2],CLF:[void 0,void 0,4],CLP:[void 0,`$`,0],CNY:[`CN¥`,`¥`],COP:[void 0,`$`,2],CRC:[void 0,`₡`,2],CUC:[void 0,`$`],CUP:[void 0,`$`],CZK:[void 0,`Kč`,2],DJF:[void 0,void 0,0],DKK:[void 0,`kr`,2],DOP:[void 0,`$`],EGP:[void 0,`E£`],ESP:[void 0,`₧`,0],EUR:[`€`],FJD:[void 0,`$`],FKP:[void 0,`£`],GBP:[`£`],GEL:[void 0,`₾`],GHS:[void 0,`GH₵`],GIP:[void 0,`£`],GNF:[void 0,`FG`,0],GTQ:[void 0,`Q`],GYD:[void 0,`$`,2],HKD:[`HK$`,`$`],HNL:[void 0,`L`],HRK:[void 0,`kn`],HUF:[void 0,`Ft`,2],IDR:[void 0,`Rp`,2],ILS:[`₪`],INR:[`₹`],IQD:[void 0,void 0,0],IRR:[void 0,void 0,0],ISK:[void 0,`kr`,0],ITL:[void 0,void 0,0],JMD:[void 0,`$`],JOD:[void 0,void 0,3],JPY:[`¥`,void 0,0],KGS:[void 0,`⃀`],KHR:[void 0,`៛`],KMF:[void 0,`CF`,0],KPW:[void 0,`₩`,0],KRW:[`₩`,void 0,0],KWD:[void 0,void 0,3],KYD:[void 0,`$`],KZT:[void 0,`₸`],LAK:[void 0,`₭`,0],LBP:[void 0,`L£`,0],LKR:[void 0,`Rs`],LRD:[void 0,`$`],LTL:[void 0,`Lt`],LUF:[void 0,void 0,0],LVL:[void 0,`Ls`],LYD:[void 0,void 0,3],MGA:[void 0,`Ar`,0],MGF:[void 0,void 0,0],MMK:[void 0,`K`,0],MNT:[void 0,`₮`,2],MRO:[void 0,void 0,0],MUR:[void 0,`Rs`,2],MXN:[`MX$`,`$`],MYR:[void 0,`RM`],NAD:[void 0,`$`],NGN:[void 0,`₦`],NIO:[void 0,`C$`],NOK:[void 0,`kr`,2],NPR:[void 0,`Rs`],NZD:[`NZ$`,`$`],OMR:[void 0,void 0,3],PHP:[`₱`],PKR:[void 0,`Rs`,2],PLN:[void 0,`zł`],PYG:[void 0,`₲`,0],RON:[void 0,`lei`],RSD:[void 0,void 0,0],RUB:[void 0,`₽`],RWF:[void 0,`RF`,0],SBD:[void 0,`$`],SEK:[void 0,`kr`,2],SGD:[void 0,`$`],SHP:[void 0,`£`],SLE:[void 0,void 0,2],SLL:[void 0,void 0,0],SOS:[void 0,void 0,0],SRD:[void 0,`$`],SSP:[void 0,`£`],STD:[void 0,void 0,0],STN:[void 0,`Db`],SYP:[void 0,`£`,0],THB:[void 0,`฿`],TMM:[void 0,void 0,0],TND:[void 0,void 0,3],TOP:[void 0,`T$`],TRL:[void 0,void 0,0],TRY:[void 0,`₺`],TTD:[void 0,`$`],TWD:[`NT$`,`$`,2],TZS:[void 0,void 0,2],UAH:[void 0,`₴`],UGX:[void 0,void 0,0],USD:[`$`],UYI:[void 0,void 0,0],UYU:[void 0,`$`],UYW:[void 0,void 0,4],UZS:[void 0,void 0,2],VEF:[void 0,`Bs`,2],VND:[`₫`,void 0,0],VUV:[void 0,void 0,0],XAF:[`FCFA`,void 0,0],XCD:[`EC$`,`$`],XCG:[`Cg.`],XOF:[`F CFA`,void 0,0],XPF:[`CFPF`,void 0,0],XXX:[`¤`],YER:[void 0,void 0,0],ZAR:[void 0,`R`],ZMK:[void 0,void 0,0],ZMW:[void 0,`ZK`],ZWD:[void 0,void 0,0]};var _p=(function(i){return i[i.Decimal=0]=`Decimal`,i[i.Percent=1]=`Percent`,i[i.Currency=2]=`Currency`,i[i.Scientific=3]=`Scientific`,i})(_p||{});var $n=(function(i){return i[i.Format=0]=`Format`,i[i.Standalone=1]=`Standalone`,i})($n||{});var ci=(function(i){return i[i.Narrow=0]=`Narrow`,i[i.Abbreviated=1]=`Abbreviated`,i[i.Wide=2]=`Wide`,i[i.Short=3]=`Short`,i})(ci||{});var mr=(function(i){return i[i.Short=0]=`Short`,i[i.Medium=1]=`Medium`,i[i.Long=2]=`Long`,i[i.Full=3]=`Full`,i})(mr||{});var ji={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};function lR(i){return Rn(i)[Di.LocaleId]}function cR(i,r,e){let t=Rn(i);return to(to([t[Di.DayPeriodsFormat],t[Di.DayPeriodsStandalone]],r),e)}function dR(i,r,e){let t=Rn(i);return to(to([t[Di.DaysFormat],t[Di.DaysStandalone]],r),e)}function uR(i,r,e){let t=Rn(i);return to(to([t[Di.MonthsFormat],t[Di.MonthsStandalone]],r),e)}function gR(i,r){let t=Rn(i)[Di.Eras];return to(t,r)}function B_(i){return Rn(i)[Di.FirstDayOfWeek]}function pp(i,r){return to(Rn(i)[Di.DateFormat],r)}function hp(i,r){return to(Rn(i)[Di.TimeFormat],r)}function mp(i,r){let t=Rn(i)[Di.DateTimeFormat];return to(t,r)}function Ar(i,r){let e=Rn(i),t=e[Di.NumberSymbols][r];if(typeof t>`u`){if(r===ji.CurrencyDecimal)return e[Di.NumberSymbols][ji.Decimal];if(r===ji.CurrencyGroup)return e[Di.NumberSymbols][ji.Group]}return t}function H_(i,r){return Rn(i)[Di.NumberFormats][r]}function gw(i){return OS(i)}function sj(i){return Rn(i)[Di.Currencies]}function pR(i){if(!i[Di.ExtraData])throw new X(2303,!1)}function hR(i){let r=Rn(i);return pR(r),(r[Di.ExtraData][2]||[]).map(t=>typeof t==`string`?nw(t):[nw(t[0]),nw(t[1])])}function mR(i,r,e){let t=Rn(i);pR(t);return to(to([t[Di.ExtraData][0],t[Di.ExtraData][1]],r)||[],e)||[]}function to(i,r){for(let e=r;e>-1;e--)if(typeof i[e]<`u`)return i[e];throw new X(2304,!1)}function nw(i){let[r,e]=i.split(`:`);return{hours:+r,minutes:+e}}function G_(i,r,e=`en`){let t=sj(e)[i]||sR[i]||[],n=t[1];return r===`narrow`&&typeof n==`string`?n:t[0]||i}var lj=2;function fR(i){let r,e=sR[i];return e&&(r=e[2]),typeof r==`number`?r:lj}var cj=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;var A_=Object.create(null);var dj=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var uj=256;function U_(i,r,e,t){let n=bj(i);gj(r),r=Ya(e,r)||r;let a=[],s;for(;r;)if(s=dj.exec(r),s){a=a.concat(s.slice(1));let d=a.pop();if(!d)break;r=d}else{a.push(r);break}let l=n.getTimezoneOffset();t&&(l=xR(t,l),n=yj(n,t));let c=``;return a.forEach(d=>{let p=xj(d);c+=p?p(n,e,l):d===`''`?`'`:d.replace(/(^'|'$)/g,``).replace(/''/g,`'`)}),c}function gj(i){if(i.length>uj)throw new X(2300,!1)}function L_(i,r,e){let t=new Date(0);return t.setFullYear(i,r,e),t.setHours(0,0,0),t}function Ya(i,r){let e=lR(i);if(A_[e]??=Object.create(null),A_[e][r])return A_[e][r];let t=``;switch(r){case`shortDate`:t=pp(i,mr.Short);break;case`mediumDate`:t=pp(i,mr.Medium);break;case`longDate`:t=pp(i,mr.Long);break;case`fullDate`:t=pp(i,mr.Full);break;case`shortTime`:t=hp(i,mr.Short);break;case`mediumTime`:t=hp(i,mr.Medium);break;case`longTime`:t=hp(i,mr.Long);break;case`fullTime`:t=hp(i,mr.Full);break;case`short`:let n=Ya(i,`shortTime`),o=Ya(i,`shortDate`);t=F_(mp(i,mr.Short),[n,o]);break;case`medium`:let a=Ya(i,`mediumTime`),s=Ya(i,`mediumDate`);t=F_(mp(i,mr.Medium),[a,s]);break;case`long`:let l=Ya(i,`longTime`),c=Ya(i,`longDate`);t=F_(mp(i,mr.Long),[l,c]);break;case`full`:let d=Ya(i,`fullTime`),p=Ya(i,`fullDate`);t=F_(mp(i,mr.Full),[d,p]);break}return t&&(A_[e][r]=t),t}function F_(i,r){return r&&(i=i.replace(/\{([^}]+)}/g,function(e,t){return Object.hasOwn(r,t)?r[t]:e})),i}function Do(i,r,e=`-`,t,n){let o=``;(i<0||n&&i<=0)&&(n?i=-i+1:(i=-i,o=e));let a=String(i);for(;a.length0||s>-e)&&(s+=e),i===3)s===0&&e===-12&&(s=12);else if(i===6)return pj(s,r);let l=Ar(a,ji.MinusSign);return Do(s,r,l,t,n)}}function hj(i,r){switch(i){case 0:return r.getFullYear();case 1:return r.getMonth();case 2:return r.getDate();case 3:return r.getHours();case 4:return r.getMinutes();case 5:return r.getSeconds();case 6:return r.getMilliseconds();case 7:return r.getDay();default:throw new X(2301,!1)}}function mi(i,r,e=$n.Format,t=!1){return function(n,o){return mj(n,o,i,r,e,t)}}function mj(i,r,e,t,n,o){switch(e){case 2:return uR(r,n,t)[i.getMonth()];case 1:return dR(r,n,t)[i.getDay()];case 0:let a=i.getHours(),s=i.getMinutes();if(o){let c=hR(r),d=mR(r,n,t),p=c.findIndex(f=>{if(Array.isArray(f)){let[v,y]=f,T=a>=v.hours&&s>=v.minutes,M=a0?Math.floor(n/60):Math.ceil(n/60);switch(i){case 0:return(n>=0?`+`:``)+Do(a,2,o)+Do(Math.abs(n%60),2,o);case 1:return`GMT`+(n>=0?`+`:``)+Do(a,1,o);case 2:return`GMT`+(n>=0?`+`:``)+Do(a,2,o)+`:`+Do(Math.abs(n%60),2,o);case 3:return t===0?`Z`:(n>=0?`+`:``)+Do(a,2,o)+`:`+Do(Math.abs(n%60),2,o);default:throw new X(2310,!1)}}}var fj=0;var V_=4;function _j(i){let r=L_(i,fj,1).getDay();return L_(i,0,1+(r<=V_?V_:V_+7)-r)}function _R(i){let r=i.getDay(),e=r===0?-3:V_-r;return L_(i.getFullYear(),i.getMonth(),i.getDate()+e)}function rw(i,r=!1){return function(e,t){let n;if(r){let o=new Date(e.getFullYear(),e.getMonth(),1).getDay()-1,a=e.getDate();n=1+Math.floor((a+o)/7)}else{let o=_R(e),a=_j(o.getFullYear()),s=o.getTime()-a.getTime();n=1+Math.round(s/6048e5)}return Do(n,i,Ar(t,ji.MinusSign))}}function O_(i,r=!1){return function(e,t){return Do(_R(e).getFullYear(),i,Ar(t,ji.MinusSign),r)}}var ow=Object.create(null);function xj(i){if(ow[i])return ow[i];let r;switch(i){case`G`:case`GG`:case`GGG`:r=mi(3,ci.Abbreviated);break;case`GGGG`:r=mi(3,ci.Wide);break;case`GGGGG`:r=mi(3,ci.Narrow);break;case`y`:r=Ki(0,1,0,!1,!0);break;case`yy`:r=Ki(0,2,0,!0,!0);break;case`yyy`:r=Ki(0,3,0,!1,!0);break;case`yyyy`:r=Ki(0,4,0,!1,!0);break;case`Y`:r=O_(1);break;case`YY`:r=O_(2,!0);break;case`YYY`:r=O_(3);break;case`YYYY`:r=O_(4);break;case`M`:case`L`:r=Ki(1,1,1);break;case`MM`:case`LL`:r=Ki(1,2,1);break;case`MMM`:r=mi(2,ci.Abbreviated);break;case`MMMM`:r=mi(2,ci.Wide);break;case`MMMMM`:r=mi(2,ci.Narrow);break;case`LLL`:r=mi(2,ci.Abbreviated,$n.Standalone);break;case`LLLL`:r=mi(2,ci.Wide,$n.Standalone);break;case`LLLLL`:r=mi(2,ci.Narrow,$n.Standalone);break;case`w`:r=rw(1);break;case`ww`:r=rw(2);break;case`W`:r=rw(1,!0);break;case`d`:r=Ki(2,1);break;case`dd`:r=Ki(2,2);break;case`c`:case`cc`:r=Ki(7,1);break;case`ccc`:r=mi(1,ci.Abbreviated,$n.Standalone);break;case`cccc`:r=mi(1,ci.Wide,$n.Standalone);break;case`ccccc`:r=mi(1,ci.Narrow,$n.Standalone);break;case`cccccc`:r=mi(1,ci.Short,$n.Standalone);break;case`E`:case`EE`:case`EEE`:r=mi(1,ci.Abbreviated);break;case`EEEE`:r=mi(1,ci.Wide);break;case`EEEEE`:r=mi(1,ci.Narrow);break;case`EEEEEE`:r=mi(1,ci.Short);break;case`a`:case`aa`:case`aaa`:r=mi(0,ci.Abbreviated);break;case`aaaa`:r=mi(0,ci.Wide);break;case`aaaaa`:r=mi(0,ci.Narrow);break;case`b`:case`bb`:case`bbb`:r=mi(0,ci.Abbreviated,$n.Standalone,!0);break;case`bbbb`:r=mi(0,ci.Wide,$n.Standalone,!0);break;case`bbbbb`:r=mi(0,ci.Narrow,$n.Standalone,!0);break;case`B`:case`BB`:case`BBB`:r=mi(0,ci.Abbreviated,$n.Format,!0);break;case`BBBB`:r=mi(0,ci.Wide,$n.Format,!0);break;case`BBBBB`:r=mi(0,ci.Narrow,$n.Format,!0);break;case`h`:r=Ki(3,1,-12);break;case`hh`:r=Ki(3,2,-12);break;case`H`:r=Ki(3,1);break;case`HH`:r=Ki(3,2);break;case`m`:r=Ki(4,1);break;case`mm`:r=Ki(4,2);break;case`s`:r=Ki(5,1);break;case`ss`:r=Ki(5,2);break;case`S`:r=Ki(6,1);break;case`SS`:r=Ki(6,2);break;case`SSS`:r=Ki(6,3);break;case`Z`:case`ZZ`:case`ZZZ`:r=P_(0);break;case`ZZZZZ`:r=P_(3);break;case`O`:case`OO`:case`OOO`:case`z`:case`zz`:case`zzz`:r=P_(1);break;case`OOOO`:case`ZZZZ`:case`zzzz`:r=P_(2);break;default:return null}return ow[i]=r,r}function xR(i,r){i=i.replace(/:/g,``);let e=Date.parse(`Jan 01, 1970 00:00:00 `+i)/6e4;return isNaN(e)?r:e}function vj(i,r){return i=new Date(i.getTime()),i.setMinutes(i.getMinutes()+r),i}function yj(i,r,e){let n=i.getTimezoneOffset();return vj(i,-1*(xR(r,n)-n))}function bj(i){if(nR(i))return i;if(typeof i==`number`&&!isNaN(i))return new Date(i);if(typeof i==`string`){if(i=i.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(i)){let[n,o=1,a=1]=i.split(`-`).map(s=>+s);return L_(n,o-1,a)}let e=parseFloat(i);if(!isNaN(i-e))return new Date(e);let t;if(t=i.match(cj))return Sj(t)}let r=new Date(i);if(!nR(r))throw new X(2311,!1);return r}function Sj(i){let r=new Date(0),e=0,t=0,n=i[8]?r.setUTCFullYear:r.setFullYear,o=i[8]?r.setUTCHours:r.setHours;i[9]&&(e=Number(i[9]+i[10]),t=Number(i[9]+i[11])),n.call(r,Number(i[1]),Number(i[2])-1,Number(i[3]));let a=Number(i[4]||0)-e,s=Number(i[5]||0)-t,l=Number(i[6]||0),c=Math.floor(parseFloat(`0.`+(i[7]||0))*1e3);return o.call(r,a,s,l,c),r}function nR(i){return i instanceof Date&&!isNaN(i.valueOf())}var wj=/^(\d+)?\.((\d+)(-(\d+))?)?$/;var rR=22;var z_=`.`;var fp=`0`;var Cj=`;`;var Ij=`,`;var aw=`#`;var oR=`¤`;var Nj=`%`;function pw(i,r,e,t,n,o,a=!1){let s=``,l=!1;if(!isFinite(i))s=Ar(e,ji.Infinity);else{let c=Tj(i);a&&(c=Dj(c));let d=r.minInt,p=r.minFrac,f=r.maxFrac;if(o){let A=o.match(wj);if(A===null)throw new X(2306,!1);let W=A[1],ie=A[3],oe=A[5];W!=null&&(d=sw(W)),ie!=null&&(p=sw(ie)),oe!=null?f=sw(oe):ie!=null&&p>f&&(f=p);let H=100;if(d>H||p>H||f>H)throw new X(2306,!1)}Ej(c,p,f);let v=c.digits,y=c.integerLen,T=c.exponent,M=[];for(l=v.every(A=>!A);y0?M=v.splice(y,v.length):(M=v,v=[0]);let F=[];for(v.length>=r.lgSize&&F.unshift(v.splice(-r.lgSize,v.length).join(``));v.length>r.gSize;)F.unshift(v.splice(-r.gSize,v.length).join(``));v.length&&F.unshift(v.join(``)),s=F.join(Ar(e,t)),M.length&&(s+=Ar(e,n)+M.join(``)),T&&(s+=Ar(e,ji.Exponential)+`+`+T)}return i<0&&!l?s=r.negPre+s+r.negSuf:s=r.posPre+s+r.posSuf,s}function vR(i,r,e,t,n){let a=mw(H_(r,_p.Currency),Ar(r,ji.MinusSign));return a.minFrac=fR(t),a.maxFrac=a.minFrac,pw(i,a,r,ji.CurrencyGroup,ji.CurrencyDecimal,n).replace(oR,e).replace(oR,``).trim()}function j_(i,r,e){return pw(i,mw(H_(r,_p.Percent),Ar(r,ji.MinusSign)),r,ji.Group,ji.Decimal,e,!0).replace(new RegExp(Nj,`g`),Ar(r,ji.PercentSign))}function hw(i,r,e){return pw(i,mw(H_(r,_p.Decimal),Ar(r,ji.MinusSign)),r,ji.Group,ji.Decimal,e)}function mw(i,r=`-`){let e={minInt:1,minFrac:0,maxFrac:0,posPre:``,posSuf:``,negPre:``,negSuf:``,gSize:0,lgSize:0},t=i.split(Cj),n=t[0],o=t[1],a=n.indexOf(z_)!==-1?n.split(z_):[n.substring(0,n.lastIndexOf(fp)+1),n.substring(n.lastIndexOf(fp)+1)],s=a[0],l=a[1]||``;e.posPre=s.substring(0,s.indexOf(aw));for(let d=0;d-1&&(r=r.replace(z_,``)),(o=r.search(/e/i))>0?(n<0&&(n=o),n+=+r.slice(o+1),r=r.substring(0,o)):n<0&&(n=r.length),o=0;r.charAt(o)===fp;o++);if(o===(s=r.length))t=[0],n=1;else{for(s--;r.charAt(s)===fp;)s--;for(n-=o,t=[],a=0;o<=s;o++,a++)t[a]=Number(r.charAt(o))}return n>rR&&(t=t.splice(0,rR-1),e=n-1,n=1),{digits:t,exponent:e,integerLen:n}}function Ej(i,r,e){if(r>e)throw new X(2307,!1);let t=i.digits,n=t.length-i.integerLen,o=Math.min(Math.max(r,n),e),a=o+i.integerLen,s=t[a];if(a>0){t.splice(Math.max(i.integerLen,a));for(let p=a;p=5)if(a-1<0){for(let p=0;p>a;p--)t.unshift(0),i.integerLen++;t.unshift(1),i.integerLen++}else t[a-1]++;for(;n=c?y.pop():l=!1),f>=10?1:0},0);d&&(t.unshift(d),i.integerLen++)}function sw(i){let r=parseInt(i);if(isNaN(r))throw new X(2305,!1);return r}var lw=/\s+/;var aR=[];var Vt=(()=>{class i{_ngEl;_renderer;initialClasses=aR;rawClass;stateMap=new Map;constructor(e,t){this._ngEl=e,this._renderer=t}set klass(e){this.initialClasses=e!=null?e.trim().split(lw):aR}set ngClass(e){this.rawClass=typeof e==`string`?e.trim().split(lw):e}ngDoCheck(){for(let t of this.initialClasses)this._updateState(t,!0);let e=this.rawClass;if(Array.isArray(e)||e instanceof Set)for(let t of e)this._updateState(t,!0);else if(e!=null)for(let t of Object.keys(e))this._updateState(t,!!e[t]);this._applyStateDiff()}_updateState(e,t){let n=this.stateMap.get(e);n!==void 0?(n.enabled!==t&&(n.changed=!0,n.enabled=t),n.touched=!0):this.stateMap.set(e,{enabled:t,changed:!0,touched:!0})}_applyStateDiff(){for(let e of this.stateMap){let t=e[0],n=e[1];n.changed?(this._toggleClass(t,n.enabled),n.changed=!1):n.touched||(n.enabled&&this._toggleClass(t,!1),this.stateMap.delete(t)),n.touched=!1}}_toggleClass(e,t){e=e.trim(),e.length>0&&e.split(lw).forEach(n=>{t?this._renderer.addClass(this._ngEl.nativeElement,n):this._renderer.removeClass(this._ngEl.nativeElement,n)})}static ɵfac=function(t){return new(t||i)(ct(ne),ct(Ot))};static ɵdir=L({type:i,selectors:[[``,`ngClass`,``]],inputs:{klass:[0,`class`,`klass`],ngClass:`ngClass`}})}return i})();var dc=(()=>{class i{_ngEl;_differs;_renderer;_ngStyle=null;_differ=null;constructor(e,t,n){this._ngEl=e,this._differs=t,this._renderer=n}set ngStyle(e){this._ngStyle=e,!this._differ&&e&&(this._differ=this._differs.find(e).create())}ngDoCheck(){if(this._differ){let e=this._differ.diff(this._ngStyle);e&&this._applyChanges(e)}}_setStyle(e,t){let[n,o]=e.split(`.`),a=n.indexOf(`-`)===-1?void 0:Mr.DashCase;t!=null?this._renderer.setStyle(this._ngEl.nativeElement,n,o?`${t}${o}`:t,a):this._renderer.removeStyle(this._ngEl.nativeElement,n,a)}_applyChanges(e){e.forEachRemovedItem(t=>this._setStyle(t.key,null)),e.forEachAddedItem(t=>this._setStyle(t.key,t.currentValue)),e.forEachChangedItem(t=>this._setStyle(t.key,t.currentValue))}static ɵfac=function(t){return new(t||i)(ct(ne),ct(ew),ct(Ot))};static ɵdir=L({type:i,selectors:[[``,`ngStyle`,``]],inputs:{ngStyle:`ngStyle`}})}return i})();var st=(()=>{class i{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=_(qt);constructor(e){this._viewContainerRef=e}ngOnChanges(e){if(this._shouldRecreateView(e)){let t=this._viewContainerRef;if(this._viewRef&&t.remove(t.indexOf(this._viewRef)),!this.ngTemplateOutlet){this._viewRef=null;return}let n=this._createContextForwardProxy();this._viewRef=t.createEmbeddedView(this.ngTemplateOutlet,n,{injector:this._getInjector()})}}_getInjector(){return this.ngTemplateOutletInjector===`outlet`?this.injector:this.ngTemplateOutletInjector??void 0}_shouldRecreateView(e){return!!e.ngTemplateOutlet||!!e.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(e,t,n)=>this.ngTemplateOutletContext?Reflect.set(this.ngTemplateOutletContext,t,n):!1,get:(e,t,n)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,t,n)}})}static ɵfac=function(t){return new(t||i)(ct(hi))};static ɵdir=L({type:i,selectors:[[``,`ngTemplateOutlet`,``]],inputs:{ngTemplateOutletContext:`ngTemplateOutletContext`,ngTemplateOutlet:`ngTemplateOutlet`,ngTemplateOutletInjector:`ngTemplateOutletInjector`},features:[Si]})}return i})();function xp(i,r){return new X(2100,!1)}var cw=class{createSubscription(r,e,t){return pi(()=>r.subscribe({next:e,error:t}))}dispose(r){pi(()=>r.unsubscribe())}};var dw=class{createSubscription(r,e,t){return r.then(n=>e?.(n),n=>t?.(n)),{unsubscribe:()=>{e=null,t=null}}}dispose(r){r.unsubscribe()}};var kj=new dw;var Mj=new cw;var W_=(()=>{class i{_ref;_latestValue=null;markForCheckOnValueUpdate=!0;_subscription=null;_obj=null;_strategy=null;applicationErrorHandler=_(Xr);constructor(e){this._ref=e}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(e){if(!this._obj){if(e)try{this.markForCheckOnValueUpdate=!1,this._subscribe(e)}finally{this.markForCheckOnValueUpdate=!0}return this._latestValue}return e!==this._obj?(this._dispose(),this.transform(e)):this._latestValue}_subscribe(e){this._obj=e,this._strategy=this._selectStrategy(e),this._subscription=this._strategy.createSubscription(e,t=>this._updateLatestValue(e,t),t=>this.applicationErrorHandler(t))}_selectStrategy(e){if(qa(e))return kj;if(__(e))return Mj;throw xp(i,e)}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(e,t){e===this._obj&&(this._latestValue=t,this.markForCheckOnValueUpdate&&this._ref?.markForCheck())}static ɵfac=function(t){return new(t||i)(ct(Ne,16))};static ɵpipe=Oe({name:`async`,type:i,pure:!1})}return i})();var Rj=/(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g;var $_=(()=>{class i{transform(e){return e==null?null:(Aj(i,e),e.replace(Rj,t=>t[0].toUpperCase()+t.slice(1).toLowerCase()))}static ɵfac=function(t){return new(t||i)};static ɵpipe=Oe({name:`titlecase`,type:i,pure:!0})}return i})();function Aj(i,r){if(typeof r!=`string`)throw xp(i,r)}var Fj=`mediumDate`;var yR=new le(``);var bR=new le(``);var Za=(()=>{class i{locale;defaultTimezone;defaultOptions;constructor(e,t,n){this.locale=e,this.defaultTimezone=t,this.defaultOptions=n}transform(e,t,n,o){if(e==null||e===``||e!==e)return null;try{let a=t??this.defaultOptions?.dateFormat??Fj,s=n??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return U_(e,a,o||this.locale,s)}catch(a){throw xp(i,a.message)}}static ɵfac=function(t){return new(t||i)(ct(ln,16),ct(yR,24),ct(bR,24))};static ɵpipe=Oe({name:`date`,type:i,pure:!0})}return i})();var fw=(()=>{class i{_locale;constructor(e){this._locale=e}transform(e,t,n){if(!SR(e))return null;n||=this._locale;try{return j_(wR(e),n,t)}catch(o){throw xp(i,o.message)}}static ɵfac=function(t){return new(t||i)(ct(ln,16))};static ɵpipe=Oe({name:`percent`,type:i,pure:!0})}return i})();var _w=(()=>{class i{_locale;_defaultCurrencyCode;constructor(e,t=`USD`){this._locale=e,this._defaultCurrencyCode=t}transform(e,t=this._defaultCurrencyCode,n=`symbol`,o,a){if(!SR(e))return null;a||=this._locale,typeof n==`boolean`&&(n=n?`symbol`:`code`);let s=t||this._defaultCurrencyCode;n!==`code`&&(n===`symbol`||n===`symbol-narrow`?s=G_(s,n===`symbol`?`wide`:`narrow`,a):s=n);try{return vR(wR(e),a,s,t,o)}catch(l){throw xp(i,l.message)}}static ɵfac=function(t){return new(t||i)(ct(ln,16),ct(US,16))};static ɵpipe=Oe({name:`currency`,type:i,pure:!0})}return i})();function SR(i){return!(i==null||i===``||i!==i)}function wR(i){if(typeof i==`string`&&!isNaN(Number(i)-parseFloat(i)))return Number(i);if(typeof i!=`number`)throw new X(2309,!1);return i}var vp=(()=>{class i{static ɵfac=function(t){return new(t||i)};static ɵmod=Me({type:i});static ɵinj=Ee({})}return i})();function yp(i,r){r=encodeURIComponent(r);for(let e of i.split(`;`)){let t=e.indexOf(`=`),[n,o]=t==-1?[e,``]:[e.slice(0,t),e.slice(t+1)];if(n.trim()!==r)continue;let a=o;try{a=decodeURIComponent(o)}catch{}return a.length>1&&a[0]===`"`&&a[a.length-1]===`"`&&(a=a.slice(1,-1)),a}return null}var Pj=(()=>{class i{build(){return new XMLHttpRequest}static ɵfac=function(t){return new(t||i)};static ɵprov=ai({token:i,factory:i.ɵfac})}return i})();var xw=(()=>{class i{static ɵfac=function(t){return new(t||i)};static ɵprov=de({token:i,factory:function(t){let n=null;return t?n=new(t||i):n=Te(Pj),n},providedIn:`root`})}return i})();var yw=`browser`;function q_(i){return i===yw}var bw=(()=>{class i{static ɵprov=de({token:i,providedIn:`root`,factory:()=>new vw(_($e),window)})}return i})();var vw=class{document;window;offset=()=>[0,0];constructor(r,e){this.document=r,this.window=e}setOffset(r){Array.isArray(r)?this.offset=()=>r:this.offset=r}getScrollPosition(){return[this.window.scrollX,this.window.scrollY]}scrollToPosition(r$2,e){this.window.scrollTo(s(r({},e),{left:r$2[0],top:r$2[1]}))}scrollToAnchor(r,e){let t=Vj(this.document,r);t&&(this.scrollToElement(t,e),t.focus({preventScroll:!0}))}setHistoryScrollRestoration(r){try{this.window.history.scrollRestoration=r}catch{console.warn(Dr(2400,!1))}}scrollToElement(r$3,e){let t=r$3.getBoundingClientRect(),n=t.left+this.window.pageXOffset,o=t.top+this.window.pageYOffset,a=this.offset();this.window.scrollTo(s(r({},e),{left:n-a[0],top:o-a[1]}))}};function Vj(i,r){let e=i.getElementById(r)||i.getElementsByName(r)[0];if(e)return e;if(typeof i.createTreeWalker==`function`&&i.body&&typeof i.body.attachShadow==`function`){let t=i.createTreeWalker(i.body,NodeFilter.SHOW_ELEMENT),n=t.currentNode;for(;n;){let o=n.shadowRoot;if(o){let a=o.getElementById(r)||o.querySelector(`[name="${CSS.escape(r)}"]`);if(a)return a}n=t.nextNode()}}return null}var kR=(()=>{class i{_renderer;_elementRef;onChange=e=>{};onTouched=()=>{};constructor(e,t){this._renderer=e,this._elementRef=t}setProperty(e,t){this._renderer.setProperty(this._elementRef.nativeElement,e,t)}registerOnTouched(e){this.onTouched=e}registerOnChange(e){this.onChange=e}setDisabledState(e){this.setProperty(`disabled`,e)}static ɵfac=function(t){return new(t||i)(ct(Ot),ct(ne))};static ɵdir=L({type:i})}return i})();var MR=(()=>{class i extends kR{static ɵfac=(()=>{let e;return function(n){return(e||(e=be(i)))(n||i)}})();static ɵdir=L({type:i,features:[pe]})}return i})();var zi=new le(``);var zj={provide:zi,useExisting:rn(()=>hn),multi:!0};function Bj(){let i=Rr()?Rr().getUserAgent():``;return/android (\d+)/.test(i.toLowerCase())}var Hj=new le(``);var hn=(()=>{class i extends kR{_compositionMode;_composing=!1;constructor(e,t,n){super(e,t),this._compositionMode=n,this._compositionMode??=!Bj()}writeValue(e){let t=e??``;this.setProperty(`value`,t)}_handleInput(e){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(e)}_compositionStart(){this._composing=!0}_compositionEnd(e){this._composing=!1,this._compositionMode&&this.onChange(e)}static ɵfac=function(t){return new(t||i)(ct(Ot),ct(ne),ct(Hj,8))};static ɵdir=L({type:i,selectors:[[`input`,`formControlName`,``,3,`type`,`checkbox`,3,`ngNoCva`,``],[`textarea`,`formControlName`,``,3,`ngNoCva`,``],[`input`,`formControl`,``,3,`type`,`checkbox`,3,`ngNoCva`,``],[`textarea`,`formControl`,``,3,`ngNoCva`,``],[`input`,`ngModel`,``,3,`type`,`checkbox`,3,`ngNoCva`,``],[`textarea`,`ngModel`,``,3,`ngNoCva`,``],[``,`ngDefaultControl`,``]],hostBindings:function(t,n){t&1&&E(`input`,function(a){return n._handleInput(a.target.value)})(`blur`,function(){return n.onTouched()})(`compositionstart`,function(){return n._compositionStart()})(`compositionend`,function(a){return n._compositionEnd(a.target.value)})},standalone:!1,features:[Ae([zj]),pe]})}return i})();function Nw(i){return i==null||Dw(i)===0}function Dw(i){return i==null?null:Array.isArray(i)||typeof i==`string`?i.length:i instanceof Set?i.size:null}var rr=new le(``);var Tw=new le(``);var Gj=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;var Cp=class{static min(r){return Uj(r)}static max(r){return jj(r)}static required(r){return RR(r)}static requiredTrue(r){return Wj(r)}static email(r){return $j(r)}static minLength(r){return AR(r)}static maxLength(r){return qj(r)}static pattern(r){return Qj(r)}static nullValidator(r){return K_()}static compose(r){return zR(r)}static composeAsync(r){return HR(r)}};function Uj(i){return r=>{if(r.value==null||i==null)return null;let e=parseFloat(r.value);return!isNaN(e)&&e{if(r.value==null||i==null)return null;let e=parseFloat(r.value);return!isNaN(e)&&e>i?{max:{max:i,actual:r.value}}:null}}function RR(i){return Nw(i.value)?{required:!0}:null}function Wj(i){return i.value===!0?null:{required:!0}}function $j(i){return Nw(i.value)||Gj.test(i.value)?null:{email:!0}}function AR(i){return r=>{let e=r.value?.length??Dw(r.value);return e===null||e===0?null:e{let e=r.value?.length??Dw(r.value);return e!==null&&e>i?{maxlength:{requiredLength:i,actualLength:e}}:null}}function Qj(i){if(!i)return K_;let r,e;return typeof i==`string`?(e=``,i.charAt(0)!==`^`&&(e+=`^`),e+=i,i.charAt(i.length-1)!==`$`&&(e+=`$`),r=new RegExp(e)):(e=i.toString(),r=i),t=>{if(Nw(t.value))return null;let n=t.value;return r.test(n)?null:{pattern:{requiredPattern:e,actualValue:n}}}}function K_(i){return null}function FR(i){return i!=null}function PR(i){return qa(i)?ui(i):i}function OR(i){let r$4={};return i.forEach(e=>{r$4=e!=null?r(r({},r$4),e):r$4}),Object.keys(r$4).length===0?null:r$4}function VR(i,r){return r.map(e=>e(i))}function Kj(i){return!i.validate}function LR(i){return i.map(r=>Kj(r)?r:e=>r.validate(e))}function zR(i){if(!i)return null;let r=i.filter(FR);return r.length==0?null:function(e){return OR(VR(e,r))}}function BR(i){return i!=null?zR(LR(i)):null}function HR(i){if(!i)return null;let r=i.filter(FR);return r.length==0?null:function(e){return Xy(VR(e,r).map(PR)).pipe(Pt(OR))}}function GR(i){return i!=null?HR(LR(i)):null}function CR(i,r){return i===null?[r]:Array.isArray(i)?[...i,r]:[i,r]}function UR(i){return i._rawValidators}function jR(i){return i._rawAsyncValidators}function Sw(i){return i?Array.isArray(i)?i:[i]:[]}function Y_(i,r){return Array.isArray(i)?i.includes(r):i===r}function IR(i,r){let e=Sw(r);return Sw(i).forEach(n=>{Y_(e,n)||e.push(n)}),e}function NR(i,r){return Sw(r).filter(e=>!Y_(i,e))}var Z_=class{get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators=[];_rawAsyncValidators=[];_setValidators(r){this._rawValidators=r||[],this._composedValidatorFn=BR(this._rawValidators)}_setAsyncValidators(r){this._rawAsyncValidators=r||[],this._composedAsyncValidatorFn=GR(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_onDestroyCallbacks=[];_registerOnDestroy(r){this._onDestroyCallbacks.push(r)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(r=>r()),this._onDestroyCallbacks=[]}reset(r=void 0){this.control?.reset(r)}hasError(r,e){return this.control?this.control.hasError(r,e):!1}getError(r,e){return this.control?this.control.getError(r,e):null}};var Gd=class extends Z_{name;get formDirective(){return null}get path(){return null}};var bp=`VALID`;var Q_=`INVALID`;var Bd=`PENDING`;var Sp=`DISABLED`;var $s=class{};var X_=class extends $s{value;source;constructor(r,e){super(),this.value=r,this.source=e}};var wp=class extends $s{pristine;source;constructor(r,e){super(),this.pristine=r,this.source=e}};var uc=class extends $s{touched;source;constructor(r,e){super(),this.touched=r,this.source=e}};var Hd=class extends $s{status;source;constructor(r,e){super(),this.status=r,this.source=e}};var ww=class extends $s{source;constructor(r){super(),this.source=r}};var Ud=class extends $s{source;constructor(r){super(),this.source=r}};function WR(i){return(rx(i)?i.validators:i)||null}function Yj(i){return Array.isArray(i)?BR(i):i||null}function $R(i,r){return(rx(r)?r.asyncValidators:i)||null}function Zj(i){return Array.isArray(i)?GR(i):i||null}function rx(i){return i!=null&&!Array.isArray(i)&&typeof i==`object`}function Xj(i,r,e){let t=i.controls;if(!(r?Object.keys(t):t).length)throw new X(1e3,``);if(!qR(t,e))throw new X(1001,``)}function Jj(i,r,e){i._forEachChild((t,n)=>{if(e[n]===void 0)throw new X(-1002,``)})}var J_=class{_pendingDirty=!1;_hasOwnPendingAsyncValidator=null;_pendingTouched=!1;_onCollectionChange=()=>{};_updateOn;_hasRequired=gi(!1);_parent=null;_asyncValidationSubscription;_composedValidatorFn;_composedAsyncValidatorFn;_rawValidators;_rawAsyncValidators;value;constructor(r,e){this._assignValidators(r),this._assignAsyncValidators(e)}get validator(){return this._composedValidatorFn}set validator(r){this._rawValidators=this._composedValidatorFn=r,this._updateHasRequiredValidator()}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(r){this._rawAsyncValidators=this._composedAsyncValidatorFn=r}get parent(){return this._parent}get status(){return pi(this.statusReactive)}set status(r){pi(()=>this.statusReactive.set(r))}_status=Co(()=>this.statusReactive());statusReactive=gi(void 0);get valid(){return this.status===bp}get invalid(){return this.status===Q_}get pending(){return this.status===Bd}get disabled(){return this.status===Sp}get enabled(){return this.status!==Sp}errors;get pristine(){return pi(this.pristineReactive)}set pristine(r){pi(()=>this.pristineReactive.set(r))}_pristine=Co(()=>this.pristineReactive());pristineReactive=gi(!0);get dirty(){return!this.pristine}get touched(){return pi(this.touchedReactive)}set touched(r){pi(()=>this.touchedReactive.set(r))}_touched=Co(()=>this.touchedReactive());touchedReactive=gi(!1);get untouched(){return!this.touched}_events=new ce;events=this._events.asObservable();valueChanges;statusChanges;get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:`change`}setValidators(r){this._assignValidators(r)}setAsyncValidators(r){this._assignAsyncValidators(r)}addValidators(r){this.setValidators(IR(r,this._rawValidators))}addAsyncValidators(r){this.setAsyncValidators(IR(r,this._rawAsyncValidators))}removeValidators(r){this.setValidators(NR(r,this._rawValidators))}removeAsyncValidators(r){this.setAsyncValidators(NR(r,this._rawAsyncValidators))}hasValidator(r){return Y_(this._rawValidators,r)}hasAsyncValidator(r){return Y_(this._rawAsyncValidators,r)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(r$5={}){let e=this.touched===!1;this.touched=!0;let t=r$5.sourceControl??this;r$5.onlySelf||this._parent?.markAsTouched(s(r({},r$5),{sourceControl:t})),e&&r$5.emitEvent!==!1&&this._events.next(new uc(!0,t))}markAllAsDirty(r={}){this.markAsDirty({onlySelf:!0,emitEvent:r.emitEvent,sourceControl:this}),this._forEachChild(e=>e.markAllAsDirty(r))}markAllAsTouched(r={}){this.markAsTouched({onlySelf:!0,emitEvent:r.emitEvent,sourceControl:this}),this._forEachChild(e=>e.markAllAsTouched(r))}markAsUntouched(r={}){let e=this.touched===!0;this.touched=!1,this._pendingTouched=!1;let t=r.sourceControl??this;this._forEachChild(n=>{n.markAsUntouched({onlySelf:!0,emitEvent:r.emitEvent,sourceControl:t})}),r.onlySelf||this._parent?._updateTouched(r,t),e&&r.emitEvent!==!1&&this._events.next(new uc(!1,t))}markAsDirty(r$6={}){let e=this.pristine===!0;this.pristine=!1;let t=r$6.sourceControl??this;r$6.onlySelf||this._parent?.markAsDirty(s(r({},r$6),{sourceControl:t})),e&&r$6.emitEvent!==!1&&this._events.next(new wp(!1,t))}markAsPristine(r={}){let e=this.pristine===!1;this.pristine=!0,this._pendingDirty=!1;let t=r.sourceControl??this;this._forEachChild(n=>{n.markAsPristine({onlySelf:!0,emitEvent:r.emitEvent})}),r.onlySelf||this._parent?._updatePristine(r,t),e&&r.emitEvent!==!1&&this._events.next(new wp(!0,t))}markAsPending(r$7={}){this.status=Bd;let e=r$7.sourceControl??this;r$7.emitEvent!==!1&&(this._events.next(new Hd(this.status,e)),this.statusChanges.emit(this.status)),r$7.onlySelf||this._parent?.markAsPending(s(r({},r$7),{sourceControl:e}))}disable(r$8={}){let e=this._parentMarkedDirty(r$8.onlySelf);this.status=Sp,this.errors=null,this._forEachChild(n=>{n.disable(s(r({},r$8),{onlySelf:!0}))}),this._updateValue();let t=r$8.sourceControl??this;r$8.emitEvent!==!1&&(this._events.next(new X_(this.value,t)),this._events.next(new Hd(this.status,t)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(s(r({},r$8),{skipPristineCheck:e}),this),this._onDisabledChange.forEach(n=>n(!0))}enable(r$9={}){let e=this._parentMarkedDirty(r$9.onlySelf);this.status=bp,this._forEachChild(t=>{t.enable(s(r({},r$9),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:r$9.emitEvent}),this._updateAncestors(s(r({},r$9),{skipPristineCheck:e}),this),this._onDisabledChange.forEach(t=>t(!1))}_updateAncestors(r,e){r.onlySelf||(this._parent?.updateValueAndValidity(r),r.skipPristineCheck||this._parent?._updatePristine({},e),this._parent?._updateTouched({},e))}setParent(r){this._parent=r}getRawValue(){return this.value}updateValueAndValidity(r$10={}){if(this._setInitialStatus(),this._updateValue(),this.enabled){let t=this._cancelExistingSubscription();this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===bp||this.status===Bd)&&this._runAsyncValidator(t,r$10.emitEvent)}let e=r$10.sourceControl??this;r$10.emitEvent!==!1&&(this._events.next(new X_(this.value,e)),this._events.next(new Hd(this.status,e)),this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),r$10.onlySelf||this._parent?.updateValueAndValidity(s(r({},r$10),{sourceControl:e}))}_updateTreeValidity(r={emitEvent:!0}){this._forEachChild(e=>e._updateTreeValidity(r)),this.updateValueAndValidity({onlySelf:!0,emitEvent:r.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?Sp:bp}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(r,e){if(this.asyncValidator){this.status=Bd,this._hasOwnPendingAsyncValidator={emitEvent:e!==!1,shouldHaveEmitted:r!==!1};let t=PR(this.asyncValidator(this));this._asyncValidationSubscription=t.subscribe(n=>{this._hasOwnPendingAsyncValidator=null,this.setErrors(n,{emitEvent:e,shouldHaveEmitted:r})})}}_cancelExistingSubscription(){if(this._asyncValidationSubscription){this._asyncValidationSubscription.unsubscribe();let r=(this._hasOwnPendingAsyncValidator?.emitEvent||this._hasOwnPendingAsyncValidator?.shouldHaveEmitted)??!1;return this._hasOwnPendingAsyncValidator=null,r}return!1}setErrors(r,e={}){this.errors=r,this._updateControlsErrors(e.emitEvent!==!1,this,e.shouldHaveEmitted)}get(r){let e=r;return e==null||(Array.isArray(e)||(e=e.split(`.`)),e.length===0)?null:e.reduce((t,n)=>t&&t._find(n),this)}getError(r,e){let t=e?this.get(e):this;return t?.errors?t.errors[r]:null}hasError(r,e){return!!this.getError(r,e)}get root(){let r=this;for(;r._parent;)r=r._parent;return r}_updateControlsErrors(r,e,t){this.status=this._calculateStatus(),r&&this.statusChanges.emit(this.status),(r||t)&&this._events.next(new Hd(this.status,e)),this._parent&&this._parent._updateControlsErrors(r,e,t)}_initObservables(){this.valueChanges=new k,this.statusChanges=new k}_calculateStatus(){return this._allControlsDisabled()?Sp:this.errors?Q_:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Bd)?Bd:this._anyControlsHaveStatus(Q_)?Q_:bp}_anyControlsHaveStatus(r){return this._anyControls(e=>e.status===r)}_anyControlsDirty(){return this._anyControls(r=>r.dirty)}_anyControlsTouched(){return this._anyControls(r=>r.touched)}_updatePristine(r,e){let t=!this._anyControlsDirty(),n=this.pristine!==t;this.pristine=t,r.onlySelf||this._parent?._updatePristine(r,e),n&&this._events.next(new wp(this.pristine,e))}_updateTouched(r={},e){this.touched=this._anyControlsTouched(),this._events.next(new uc(this.touched,e)),r.onlySelf||this._parent?._updateTouched(r,e)}_onDisabledChange=[];_registerOnCollectionChange(r){this._onCollectionChange=r}_setUpdateStrategy(r){rx(r)&&r.updateOn!=null&&(this._updateOn=r.updateOn)}_parentMarkedDirty(r){return!r&&!!this._parent?.dirty&&!this._parent._anyControlsDirty()}_find(r){return null}_assignValidators(r){this._rawValidators=Array.isArray(r)?r.slice():r,this._composedValidatorFn=Yj(this._rawValidators),this._updateHasRequiredValidator()}_assignAsyncValidators(r){this._rawAsyncValidators=Array.isArray(r)?r.slice():r,this._composedAsyncValidatorFn=Zj(this._rawAsyncValidators)}_updateHasRequiredValidator(){pi(()=>this._hasRequired.set(this.hasValidator(Cp.required)))}};function qR(i,r){return Object.hasOwn(i,r)}function eW(i){return i.tagName===`INPUT`||i.tagName===`SELECT`||i.tagName===`TEXTAREA`}function tW(i,r,e,t){switch(e){case`name`:i.setAttribute(r,e,t);break;case`disabled`:case`readonly`:case`required`:t?i.setAttribute(r,e,``):i.removeAttribute(r,e);break;case`max`:case`min`:case`minLength`:case`maxLength`:t!==void 0?i.setAttribute(r,e,t.toString()):i.removeAttribute(r,e);break}}var Cw=class{kind;context;control;message;constructor({kind:r,context:e,control:t}){this.kind=r,this.context=e,this.control=t}};function iW(i){return typeof i==`number`?i:parseInt(i,10)}var QR=(()=>{class i{_validator=K_;_onChange;_enabled;ngOnChanges(e){if(this.inputName in e){let t=this.normalizeInput(e[this.inputName].currentValue);this._enabled=this.enabled(t),this._validator=this._enabled?this.createValidator(t):K_,this._onChange?.()}}validate(e){return this._validator(e)}registerOnValidatorChange(e){this._onChange=e}enabled(e){return e!=null}static ɵfac=function(t){return new(t||i)};static ɵdir=L({type:i,features:[Si]})}return i})();var nW={provide:rr,useExisting:rn(()=>jd),multi:!0};var jd=(()=>{class i extends QR{required;inputName=`required`;normalizeInput=O;createValidator=e=>RR;enabled(e){return e}static ɵfac=(()=>{let e;return function(n){return(e||(e=be(i)))(n||i)}})();static ɵdir=L({type:i,selectors:[[``,`required`,``,`formControlName`,``,3,`type`,`checkbox`],[``,`required`,``,`formControl`,``,3,`type`,`checkbox`],[``,`required`,``,`ngModel`,``,3,`type`,`checkbox`]],hostVars:1,hostBindings:function(t,n){t&2&&B(`required`,n._enabled?``:null)},inputs:{required:`required`},standalone:!1,features:[Ae([nW]),pe]})}return i})();var rW={provide:rr,useExisting:rn(()=>Ew),multi:!0};var Ew=(()=>{class i extends QR{minlength;inputName=`minlength`;normalizeInput=e=>iW(e);createValidator=e=>AR(e);static ɵfac=(()=>{let e;return function(n){return(e||(e=be(i)))(n||i)}})();static ɵdir=L({type:i,selectors:[[``,`minlength`,``,`formControlName`,``],[``,`minlength`,``,`formControl`,``],[``,`minlength`,``,`ngModel`,``]],hostVars:1,hostBindings:function(t,n){t&2&&B(`minlength`,n._enabled?n.minlength:null)},inputs:{minlength:`minlength`},standalone:!1,features:[Ae([rW]),pe]})}return i})();var oW=new le(``);var Np=new le(``,{factory:()=>ox});var ox=`always`;function aW(i,r){return[...r.path,i]}function Iw(i,r,e=ox){kw(i,r),r.valueAccessor.writeValue(i.value),(i.disabled||e===`always`)&&r.valueAccessor.setDisabledState?.(i.disabled),lW(i,r),dW(i,r),cW(i,r),sW(i,r)}function ex(i,r,e=!0){let t=()=>{};r?.valueAccessor?.registerOnChange(t),r?.valueAccessor?.registerOnTouched(t),ix(i,r),i&&(r._invokeOnDestroyCallbacks(),i._registerOnCollectionChange(()=>{}))}function tx(i,r){i.forEach(e=>{e.registerOnValidatorChange&&e.registerOnValidatorChange(r)})}function sW(i,r){if(r.valueAccessor.setDisabledState){let e=t=>{r.valueAccessor.setDisabledState(t)};i.registerOnDisabledChange(e),r._registerOnDestroy(()=>{i._unregisterOnDisabledChange(e)})}}function kw(i,r){let e=UR(i);r.validator!==null?i.setValidators(CR(e,r.validator)):typeof e==`function`&&i.setValidators([e]);let t=jR(i);r.asyncValidator!==null?i.setAsyncValidators(CR(t,r.asyncValidator)):typeof t==`function`&&i.setAsyncValidators([t]);let n=()=>i.updateValueAndValidity();tx(r._rawValidators,n),tx(r._rawAsyncValidators,n)}function ix(i,r){let e=!1;if(i!==null){if(r.validator!==null){let n=UR(i);if(Array.isArray(n)&&n.length>0){let o=n.filter(a=>a!==r.validator);o.length!==n.length&&(e=!0,i.setValidators(o))}}if(r.asyncValidator!==null){let n=jR(i);if(Array.isArray(n)&&n.length>0){let o=n.filter(a=>a!==r.asyncValidator);o.length!==n.length&&(e=!0,i.setAsyncValidators(o))}}}let t=()=>{};return tx(r._rawValidators,t),tx(r._rawAsyncValidators,t),e}function lW(i,r){r.valueAccessor.registerOnChange(e=>{i._pendingValue=e,i._pendingChange=!0,i._pendingDirty=!0,i.updateOn===`change`&&KR(i,r)})}function cW(i,r){r.valueAccessor.registerOnTouched(()=>{i._pendingTouched=!0,i.updateOn===`blur`&&i._pendingChange&&KR(i,r),i.updateOn!==`submit`&&i.markAsTouched()})}function KR(i,r){i._pendingDirty&&i.markAsDirty(),i.setValue(i._pendingValue,{emitModelToViewChange:!1}),r.viewToModelUpdate(i._pendingValue),i._pendingChange=!1}function dW(i,r){let e=(t,n)=>{r.valueAccessor.writeValue(t),n&&r.viewToModelUpdate(t)};i.registerOnChange(e),r._registerOnDestroy(()=>{i._unregisterOnChange(e)})}function uW(i,r){kw(i,r)}function gW(i,r){return ix(i,r)}function YR(i,r){if(!Object.hasOwn(i,`model`))return!1;let e=i.model;return e.isFirstChange()?!0:!Object.is(r,e.currentValue)}function pW(i){return Object.getPrototypeOf(i.constructor)===MR}function hW(i,r){i._syncPendingControls(),r.forEach(e=>{let t=e.control;t.updateOn===`submit`&&t._pendingChange&&(e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1)})}function mW(i,r){if(!r)return null;let e,t,n;return r.forEach(o=>{o.constructor===hn?e=o:pW(o)?t=o:n=o}),n||t||e||null}function fW(i,r){let e=i.indexOf(r);e>-1&&i.splice(e,1)}var ZR={provide:oW,useFactory:()=>{let i=_(Yi,{self:!0});return{setParseErrors:r=>{i.setParseErrorSource(r)},set onReset(r){i.onReset=r}}}};var Yi=class extends Z_{_parent=null;name=null;valueAccessor=null;isCustomControlBased=!1;userOnReset;resetSubscription;set onReset(r){this.userOnReset=r,this.resetSubscription?.unsubscribe(),this.resetSubscription=void 0,this.control&&(this.resetSubscription=this.control.events.subscribe(e=>{e instanceof Ud&&this.control&&this.userOnReset?.(this.control.value)}),this.subscription?.add(this.resetSubscription))}isNativeFormElement=!1;rawValueAccessors;_selectedValueAccessor=null;get selectedValueAccessor(){return this._selectedValueAccessor??=mW(this,this.rawValueAccessors)}parseErrorsValidator=null;renderer;injector;requiredValidatorViaDi;subscription;customControlBindings=null;constructor(r,e,t){super(),this.injector=r,this.renderer=e,this.rawValueAccessors=t,this.injector?.get(Mt)?.onDestroy(()=>{this.removeParseErrorsValidator(this.control),this.subscription?.unsubscribe()})}setupCustomControl(){this.subscription?.unsubscribe();let r=this.injector?.get(Ne);if(!this.control||!r)return;let e=r.markForCheck.bind(r);this.subscription=new yi,this.subscription.add(this.control.valueChanges.subscribe(e)),this.subscription.add(this.control.statusChanges.subscribe(e)),this.resetSubscription?.unsubscribe(),this.resetSubscription=void 0,this.userOnReset&&(this.resetSubscription=this.control.events.subscribe(t=>{t instanceof Ud&&this.control&&this.userOnReset?.(this.control.value)}),this.subscription.add(this.resetSubscription)),this.parseErrorsValidator&&this.control.addValidators(this.parseErrorsValidator)}ngControlCreate(r){!r.nativeElement.hasAttribute?.(`ngNoCva`)&&(this.rawValueAccessors&&this.rawValueAccessors.length>0||this.valueAccessor!==null)||!r.customControl||(this.isCustomControlBased=!0,r.listenToCustomControlModel(n=>{this.control?.setValue(n,{emitModelToViewChange:!1}),this.control?.markAsDirty(),this.viewToModelUpdate(n)}),r.listenToCustomControlOutput(`touch`,()=>{this.control?.markAsTouched()}),this.customControlBindings={},this.isNativeFormElement=eW(r.nativeElement),this.requiredValidatorViaDi=this._rawValidators.find(n=>n instanceof jd))}ngControlUpdate(r,e){if(!this.isCustomControlBased)return;let t=this.control,n=this.customControlBindings;Object.is(n.value,t.value)||(n.value=t.value,r.setCustomControlModelInput(t.value)),this.bindControlProperty(r,n,`touched`,t.touched),this.bindControlProperty(r,n,`dirty`,t.dirty),this.bindControlProperty(r,n,`valid`,t.valid),this.bindControlProperty(r,n,`invalid`,t.invalid),this.bindControlProperty(r,n,`pending`,t.pending),this.bindControlProperty(r,n,`disabled`,t.disabled),this.shouldBindRequired&&this.bindControlProperty(r,n,`required`,this.isRequired);let o=t.errors;if(n.errors!==o){n.errors=o;let a=this._convertErrors(o);r.setInputOnDirectives(`errors`,a)}}get isRequired(){return(this.requiredValidatorViaDi?._enabled||this.control?._hasRequired())??!1}get shouldBindRequired(){return!0}bindControlProperty(r,e,t,n){if(e[t]===n)return;e[t]=n;let o=r.setInputOnDirectives(t,n);this.isNativeFormElement&&!o&&(t===`disabled`||t===`required`)&&this.renderer&&tW(this.renderer,r.nativeElement,t,n)}_convertErrors(r){if(r===null)return[];let e=this.control;return Object.entries(r).map(([t,n])=>new Cw({context:n,kind:t,control:e}))}setParseErrorSource(r){if(r===void 0)return;let e=null,t=Co(()=>{let n=r();return n.length===0?null:n.reduce((o,a)=>(o[a.kind]=a,o),{})});this.parseErrorsValidator=(()=>e).bind(this),Bs(()=>{e=t(),this.control?.updateValueAndValidity({emitEvent:!1})},{injector:this.injector})}removeParseErrorsValidator(r){this.parseErrorsValidator&&(r?.removeValidators(this.parseErrorsValidator),r?.updateValueAndValidity({emitEvent:!1}))}};var nx=class{_cd;constructor(r){this._cd=r}get isTouched(){return this._cd?.control?._touched?.(),!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return this._cd?.control?._pristine?.(),!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return this._cd?.control?._status?.(),!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return this._cd?._submitted?.(),!!this._cd?.submitted}};var mn=(()=>{class i extends nx{constructor(e){super(e)}static ɵfac=function(t){return new(t||i)(ct(Yi,2))};static ɵdir=L({type:i,selectors:[[``,`formControlName`,``],[``,`ngModel`,``],[``,`formControl`,``]],hostVars:14,hostBindings:function(t,n){t&2&&ee(`ng-untouched`,n.isUntouched)(`ng-touched`,n.isTouched)(`ng-pristine`,n.isPristine)(`ng-dirty`,n.isDirty)(`ng-valid`,n.isValid)(`ng-invalid`,n.isInvalid)(`ng-pending`,n.isPending)},standalone:!1,features:[pe]})}return i})();var ax=(()=>{class i extends nx{constructor(e){super(e)}static ɵfac=function(t){return new(t||i)(ct(Gd,10))};static ɵdir=L({type:i,selectors:[[``,`formGroupName`,``],[``,`formArrayName`,``],[``,`ngModelGroup`,``],[``,`formGroup`,``],[``,`formArray`,``],[`form`,3,`ngNoForm`,``],[``,`ngForm`,``]],hostVars:16,hostBindings:function(t,n){t&2&&ee(`ng-untouched`,n.isUntouched)(`ng-touched`,n.isTouched)(`ng-pristine`,n.isPristine)(`ng-dirty`,n.isDirty)(`ng-valid`,n.isValid)(`ng-invalid`,n.isInvalid)(`ng-pending`,n.isPending)(`ng-submitted`,n.isSubmitted)},standalone:!1,features:[pe]})}return i})();var Ip=class extends J_{constructor(r,e,t){super(WR(e),$R(t,e)),this.controls=r,this._initObservables(),this._setUpdateStrategy(e),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}controls;registerControl(r,e){return this._find(r)||(this.controls[r]=e,e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange),e)}addControl(r,e,t={}){this.registerControl(r,e),this.updateValueAndValidity({emitEvent:t.emitEvent}),this._onCollectionChange()}removeControl(r,e={}){let t=this._find(r);t&&t._registerOnCollectionChange(()=>{}),delete this.controls[r],this.updateValueAndValidity({emitEvent:e.emitEvent}),this._onCollectionChange()}setControl(r,e,t={}){let n=this._find(r);n&&n._registerOnCollectionChange(()=>{}),delete this.controls[r],e&&this.registerControl(r,e),this.updateValueAndValidity({emitEvent:t.emitEvent}),this._onCollectionChange()}contains(r){return this._find(r)?.enabled===!0}setValue(r,e={}){pi(()=>{Jj(this,!0,r),Object.keys(r).forEach(t=>{Xj(this,!0,t),this.controls[t].setValue(r[t],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)})}patchValue(r,e={}){r!=null&&(Object.keys(r).forEach(t=>{let n=this._find(t);n&&n.patchValue(r[t],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e))}reset(r$11={},e={}){this._forEachChild((t,n)=>{t.reset(r$11?r$11[n]:null,s(r({},e),{onlySelf:!0}))}),this._updatePristine(e,this),this._updateTouched(e,this),this.updateValueAndValidity(e),e?.emitEvent!==!1&&this._events.next(new Ud(this))}getRawValue(){return this._reduceChildren({},(r,e,t)=>(r[t]=e.getRawValue(),r))}_syncPendingControls(){let r=this._reduceChildren(!1,(e,t)=>t._syncPendingControls()?!0:e);return r&&this.updateValueAndValidity({onlySelf:!0}),r}_forEachChild(r){Object.keys(this.controls).forEach(e=>{let t=this.controls[e];t&&r(t,e)})}_setUpControls(){this._forEachChild(r=>{r.setParent(this),r._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(r){for(let[e,t]of Object.entries(this.controls))if(this.contains(e)&&r(t))return!0;return!1}_reduceValue(){return this._reduceChildren({},(e,t,n)=>((t.enabled||this.disabled)&&(e[n]=t.value),e))}_reduceChildren(r,e){let t=r;return this._forEachChild((n,o)=>{t=e(t,n,o)}),t}_allControlsDisabled(){for(let r of Object.keys(this.controls))if(this.controls[r].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(r){return qR(this.controls,r)?this.controls[r]:null}};function DR(i,r){let e=i.indexOf(r);e>-1&&i.splice(e,1)}function TR(i){return typeof i==`object`&&i!==null&&Object.keys(i).length===2&&`value`in i&&`disabled`in i}var sx=class extends J_{defaultValue=null;_onChange=[];_pendingValue;_pendingChange=!1;constructor(r=null,e,t){super(WR(e),$R(t,e)),this._applyFormState(r),this._setUpdateStrategy(e),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),rx(e)&&(e.nonNullable||e.initialValueIsDefault)&&(TR(r)?this.defaultValue=r.value:this.defaultValue=r)}setValue(r,e={}){pi(()=>{this.value=this._pendingValue=r,this._onChange.length&&e.emitModelToViewChange!==!1&&this._onChange.forEach(t=>t(this.value,e.emitViewToModelChange!==!1)),this.updateValueAndValidity(e)})}patchValue(r,e={}){this.setValue(r,e)}reset(r=this.defaultValue,e={}){this._applyFormState(r),this.markAsPristine(e),this.markAsUntouched(e),this.setValue(this.value,e),e.overwriteDefaultValue&&(this.defaultValue=this.value),this._pendingChange=!1,e?.emitEvent!==!1&&this._events.next(new Ud(this))}_updateValue(){}_anyControls(r){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(r){this._onChange.push(r)}_unregisterOnChange(r){DR(this._onChange,r)}registerOnDisabledChange(r){this._onDisabledChange.push(r)}_unregisterOnDisabledChange(r){DR(this._onDisabledChange,r)}_forEachChild(r){}_syncPendingControls(){return this.updateOn===`submit`&&(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),this._pendingChange)?(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),!0):!1}_applyFormState(r){TR(r)?(this.value=this._pendingValue=r.value,r.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=r}};var _W=i=>i instanceof sx;var xW=(()=>{class i extends Gd{callSetDisabledState;get submitted(){return pi(this._submittedReactive)}set submitted(e){this._submittedReactive.set(e)}_submitted=Co(()=>this._submittedReactive());_submittedReactive=gi(!1);_oldForm;_onCollectionChange=()=>this._updateDomValue();directives=[];constructor(e,t,n){super(),this.callSetDisabledState=n,this._setValidators(e),this._setAsyncValidators(t)}ngOnChanges(e){this.onChanges(e)}ngOnDestroy(){this.onDestroy()}onChanges(e){this._checkFormPresent(),Object.hasOwn(e,`form`)&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}onDestroy(){this.form&&(ix(this.form,this),this.form._onCollectionChange===this._onCollectionChange&&this.form._registerOnCollectionChange(()=>{}))}get formDirective(){return this}get path(){return[]}addControl(e){let t=this.form.get(e.path);return e._setupWithForm(t,this.callSetDisabledState),t.updateValueAndValidity({emitEvent:!1}),this.directives.push(e),t}getControl(e){return this.form.get(e.path)}removeControl(e){ex(e.control||null,e,!1),fW(this.directives,e)}addFormGroup(e){this._setUpFormContainer(e)}removeFormGroup(e){this._cleanUpFormContainer(e)}getFormGroup(e){return this.form.get(e.path)}getFormArray(e){return this.form.get(e.path)}addFormArray(e){this._setUpFormContainer(e)}removeFormArray(e){this._cleanUpFormContainer(e)}updateModel(e,t){this.form.get(e.path).setValue(t)}onReset(){this.resetForm()}resetForm(e=void 0,t={}){this.form.reset(e,t),this._submittedReactive.set(!1)}onSubmit(e){return this.submitted=!0,hW(this.form,this.directives),this.ngSubmit.emit(e),this.form._events.next(new ww(this.control)),e?.target?.method===`dialog`}_updateDomValue(){this.directives.forEach(e=>{let t=e.control,n=this.form.get(e.path);t!==n&&(ex(t||null,e),_W(n)&&e._setupWithForm(n,this.callSetDisabledState))}),this.form._updateTreeValidity({emitEvent:!1})}_setUpFormContainer(e){let t=this.form.get(e.path);uW(t,e),t.updateValueAndValidity({emitEvent:!1})}_cleanUpFormContainer(e){let t=this.form?.get(e.path);t&&gW(t,e)&&t.updateValueAndValidity({emitEvent:!1})}_updateRegistrations(){this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm?._registerOnCollectionChange(()=>{})}_updateValidators(){kw(this.form,this),this._oldForm&&ix(this._oldForm,this)}_checkFormPresent(){this.form}static ɵfac=function(t){return new(t||i)(ct(rr,10),ct(Tw,10),ct(Np,8))};static ɵdir=L({type:i,features:[pe,Si]})}return i})();var vW={provide:Gd,useExisting:rn(()=>Dp)};var Dp=(()=>{class i extends xW{form=null;ngSubmit=new k;get control(){return this.form}static ɵfac=(()=>{let e;return function(n){return(e||(e=be(i)))(n||i)}})();static ɵdir=L({type:i,selectors:[[``,`formGroup`,``]],hostBindings:function(t,n){t&1&&E(`submit`,function(a){return n.onSubmit(a)})(`reset`,function(){return n.onReset()})},inputs:{form:[0,`formGroup`,`form`]},outputs:{ngSubmit:`ngSubmit`},exportAs:[`ngForm`],standalone:!1,features:[Ae([vW]),pe]})}return i})();var yW={provide:Yi,useExisting:rn(()=>fn$1)};var ER=Promise.resolve();var fn$1=(()=>{class i extends Yi{_changeDetectorRef;callSetDisabledState;control=new sx;static ngAcceptInputType_isDisabled;_registered=!1;_ngModelInjector;viewModel;name=``;isDisabled;model;options;update=new k;constructor(e,t,n,o,a,s,l,c){super(l,c,o),this._changeDetectorRef=a,this.callSetDisabledState=s,this._parent=e,this._setValidators(t),this._setAsyncValidators(n)}ngOnChanges(e){if(this._registered,this._checkForErrors(),!this._registered||`name`in e){if(this._registered&&(this._checkName(),this.formDirective)){let t=e.name.previousValue;this.formDirective.removeControl({name:t,path:this._getPath(t)})}this._setUpControl()}`isDisabled`in e&&this._updateDisabled(e),YR(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective?.removeControl(this)}ɵngControlCreate(e){super.ngControlCreate(e)}ɵngControlUpdate(e){super.ngControlUpdate(e,!1)}get shouldBindRequired(){return!1}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(e){this.viewModel=e,this.update.emit(e)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!!(this.options&&this.options.standalone)}_setUpStandalone(){this.isCustomControlBased?this.setupCustomControl():(this.valueAccessor??=this.selectedValueAccessor,Iw(this.control,this,this.callSetDisabledState)),this.control.updateValueAndValidity({emitEvent:!1})}_setupWithForm(e){this.isCustomControlBased?this.setupCustomControl():(this.valueAccessor??=this.selectedValueAccessor,Iw(this.control,this,e))}_checkForErrors(){this._checkName()}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),!this._isStandalone()&&this.name}_updateValue(e){ER.then(()=>{this.control.setValue(e,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(e){let t=e.isDisabled.currentValue,n=t!==0&&O(t);ER.then(()=>{n&&!this.control.disabled?this.control.disable():!n&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(e){return this._parent?aW(e,this._parent):[e]}static ɵfac=function(t){return new(t||i)(ct(Gd,9),ct(rr,10),ct(Tw,10),ct(zi,10),ct(Ne,8),ct(Np,8),ct(qt,8),ct(Ot,8))};static ɵdir=L({type:i,selectors:[[``,`ngModel`,``,3,`formControlName`,``,3,`formControl`,``]],inputs:{name:`name`,isDisabled:[0,`disabled`,`isDisabled`],model:[0,`ngModel`,`model`],options:[0,`ngModelOptions`,`options`]},outputs:{update:`ngModelChange`},exportAs:[`ngModel`],standalone:!1,features:[Ae([yW,ZR]),pe,Si,y_(null)]})}return i})();var bW={provide:zi,useExisting:rn(()=>Tp),multi:!0};var Tp=(()=>{class i extends MR{writeValue(e){let t=e??``;this.setProperty(`value`,t)}registerOnChange(e){this.onChange=t=>{e(t==``?null:parseFloat(t))}}static ɵfac=(()=>{let e;return function(n){return(e||(e=be(i)))(n||i)}})();static ɵdir=L({type:i,selectors:[[`input`,`type`,`number`,`formControlName`,``,3,`ngNoCva`,``],[`input`,`type`,`number`,`formControl`,``,3,`ngNoCva`,``],[`input`,`type`,`number`,`ngModel`,``,3,`ngNoCva`,``]],hostBindings:function(t,n){t&1&&E(`input`,function(a){return n.onChange(a.target.value)})(`blur`,function(){return n.onTouched()})},standalone:!1,features:[Ae([bW]),pe]})}return i})();var XR=new le(``);var SW={provide:Yi,useExisting:rn(()=>Ep)};var Ep=(()=>{class i extends Yi{_ngModelWarningConfig;callSetDisabledState;viewModel;form;set isDisabled(e){}model;update=new k;static _ngModelWarningSentOnce=!1;_ngModelWarningSent=!1;constructor(e,t,n,o,a,s,l){super(l,s,n),this._ngModelWarningConfig=o,this.callSetDisabledState=a,this._setValidators(e),this._setAsyncValidators(t)}ngOnChanges(e){if(this._isControlChanged(e)){let t=e.form.previousValue;t&&(ex(t,this,!1),this.removeParseErrorsValidator(t)),this.isCustomControlBased?this.setupCustomControl():(this.valueAccessor??=this.selectedValueAccessor,Iw(this.form,this,this.callSetDisabledState)),this.form.updateValueAndValidity({emitEvent:!1})}YR(e,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.form&&ex(this.form,this,!1)}get path(){return[]}get control(){return this.form}viewToModelUpdate(e){this.viewModel=e,this.update.emit(e)}_isControlChanged(e){return Object.hasOwn(e,`form`)}ɵngControlCreate(e){super.ngControlCreate(e)}ɵngControlUpdate(e){super.ngControlUpdate(e,!0)}static ɵfac=function(t){return new(t||i)(ct(rr,10),ct(Tw,10),ct(zi,10),ct(XR,8),ct(Np,8),ct(Ot,8),ct(qt,8))};static ɵdir=L({type:i,selectors:[[``,`formControl`,``]],inputs:{form:[0,`formControl`,`form`],isDisabled:[0,`disabled`,`isDisabled`],model:[0,`ngModel`,`model`]},outputs:{update:`ngModelChange`},exportAs:[`ngForm`],standalone:!1,features:[Ae([SW,ZR]),pe,Si,y_(null)]})}return i})();var JR=(()=>{class i{static ɵfac=function(t){return new(t||i)};static ɵmod=Me({type:i});static ɵinj=Ee({})}return i})();var cn=(()=>{class i{static withConfig(e){return{ngModule:i,providers:[{provide:Np,useValue:e.callSetDisabledState??ox}]}}static ɵfac=function(t){return new(t||i)};static ɵmod=Me({type:i});static ɵinj=Ee({imports:[JR]})}return i})();var lx=(()=>{class i{static withConfig(e){return{ngModule:i,providers:[{provide:XR,useValue:e.warnOnNgModelWithFormControl??`always`},{provide:Np,useValue:e.callSetDisabledState??ox}]}}static ɵfac=function(t){return new(t||i)};static ɵmod=Me({type:i});static ɵinj=Ee({imports:[JR]})}return i})();var cx=typeof global==`object`&&global&&global.Object===Object&&global;var CW=typeof self==`object`&&self&&self.Object===Object&&self;var Zi=cx||CW||Function(`return this`)();var Xa=Zi.Symbol;var eA=Object.prototype;var DW=eA.hasOwnProperty;var TW=eA.toString;var kp=Xa?Xa.toStringTag:void 0;function EW(i){var r=DW.call(i,kp),e=i[kp];try{i[kp]=void 0;var t=!0}catch{}var n=TW.call(i);return t&&(r?i[kp]=e:delete i[kp]),n}var tA=EW;var MW=Object.prototype.toString;function RW(i){return MW.call(i)}var iA=RW;var AW=`[object Null]`;var FW=`[object Undefined]`;var nA=Xa?Xa.toStringTag:void 0;function PW(i){return i==null?i===void 0?FW:AW:nA&&nA in Object(i)?tA(i):iA(i)}var To=PW;function OW(i){return i!=null&&typeof i==`object`}var Fr=OW;var la=Array.isArray;function LW(i){var r=typeof i;return i!=null&&(r==`object`||r==`function`)}var fr=LW;function zW(i){return i}var dx=zW;var BW=`[object AsyncFunction]`;var HW=`[object Function]`;var GW=`[object GeneratorFunction]`;var UW=`[object Proxy]`;function jW(i){if(!fr(i))return!1;var r=To(i);return r==HW||r==GW||r==BW||r==UW}var Wd=jW;var ux=Zi[`__core-js_shared__`];var rA=(function(){var i=/[^.]+$/.exec(ux&&ux.keys&&ux.keys.IE_PROTO||``);return i?`Symbol(src)_1.`+i:``})();function $W(i){return!!rA&&rA in i}var oA=$W;var QW=Function.prototype.toString;function KW(i){if(i!=null){try{return QW.call(i)}catch{}try{return i+``}catch{}}return``}var Ja=KW;var YW=/[\\^$.*+?()[\]{}|]/g;var ZW=/^\[object .+?Constructor\]$/;var XW=Function.prototype;var JW=Object.prototype;var e$=XW.toString;var t$=JW.hasOwnProperty;var i$=RegExp(`^`+e$.call(t$).replace(YW,`\\$&`).replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,`$1.*?`)+`$`);function n$(i){if(!fr(i)||oA(i))return!1;return(Wd(i)?i$:ZW).test(Ja(i))}var aA=n$;function r$(i,r){return i?.[r]}var sA=r$;function o$(i,r){var e=sA(i,r);return aA(e)?e:void 0}var _r=o$;var gx=_r(Zi,`WeakMap`);var lA=Object.create;var cA=(function(){function i(){}return function(r){if(!fr(r))return{};if(lA)return lA(r);i.prototype=r;var e=new i;return i.prototype=void 0,e}})();function l$(i,r,e){switch(e.length){case 0:return i.call(r);case 1:return i.call(r,e[0]);case 2:return i.call(r,e[0],e[1]);case 3:return i.call(r,e[0],e[1],e[2])}return i.apply(r,e)}var dA=l$;function c$(i,r){var e=-1,t=i.length;for(r||(r=Array(t));++e0){if(++r>=d$)return arguments[0]}else r=0;return i.apply(void 0,arguments)}}var gA=p$;function h$(i){return function(){return i}}var pA=h$;var $d=(function(){try{var i=_r(Object,`defineProperty`);return i({},``,{}),i}catch{}})();var mA=gA($d?function(i,r){return $d(i,`toString`,{configurable:!0,enumerable:!1,value:pA(r),writable:!0})}:dx);var x$=9007199254740991;var v$=/^(?:0|[1-9]\d*)$/;function y$(i,r){var e=typeof i;return r=r??x$,!!r&&(e==`number`||e!=`symbol`&&v$.test(i))&&i>-1&&i%1==0&&i-1&&i%1==0&&i<=E$}var hx=k$;function M$(i){return i!=null&&hx(i.length)&&!Wd(i)}var qs=M$;function R$(i,r,e){if(!fr(e))return!1;var t=typeof r;return(t==`number`?qs(e)&&px(r,e.length):t==`string`&&r in e)?ca(e[r],i):!1}var bA=R$;function A$(i){return yA(function(r,e){var t=-1,n=e.length,o=n>1?e[n-1]:void 0,a=n>2?e[2]:void 0;for(o=i.length>3&&typeof o==`function`?(n--,o):void 0,a&&bA(e[0],e[1],a)&&(o=n<3?void 0:o,n=1),r=Object(r);++t-1}var $A=Jq;function eQ(i,r){var e=this.__data__,t=Qs(e,i);return t<0?(++this.size,e.push([i,r])):e[t][1]=r,this}var qA=eQ;function Zd(i){var r=-1,e=i==null?0:i.length;for(this.clear();++rs))return!1;var c=o.get(i),d=o.get(r);if(c&&d)return c==r&&d==i;var p=-1,f=!0,v=e&ZQ?new T3:void 0;for(o.set(i,r),o.set(r,i);++p\d{4})-(?\d{1,2})(?:-(?\d{1,2}))?(?