From bb13dd0881ca197b541f4f94847623acd214eb43 Mon Sep 17 00:00:00 2001 From: nicolethoen Date: Fri, 13 Jun 2025 13:43:45 -0400 Subject: [PATCH 01/21] feat: updated dependencies and add guidance for ai enabled development --- .cursor/rules/patternfly-vibe-coding.mdc | 31 + README.md | 15 + ai-documentation/README.md | 58 + ai-documentation/charts/README.md | 191 + ai-documentation/chatbot/README.md | 191 + ai-documentation/component-groups/README.md | 99 + .../components/data-display/README.md | 281 + .../components/data-display/table.md | 123 + ai-documentation/components/layout/README.md | 471 + ai-documentation/guidelines/README.md | 83 + .../guidelines/component-architecture.md | 178 + .../guidelines/styling-standards.md | 221 + ai-documentation/resources/external-links.md | 217 + ai-documentation/resources/local-files.md | 217 + ai-documentation/setup/README.md | 81 + .../setup/development-environment.md | 237 + ai-documentation/setup/quick-start.md | 129 + .../troubleshooting/common-issues.md | 569 ++ package-lock.json | 8066 +++++++---------- package.json | 26 +- src/app/app.test.tsx | 8 +- 21 files changed, 6833 insertions(+), 4659 deletions(-) create mode 100644 .cursor/rules/patternfly-vibe-coding.mdc create mode 100644 ai-documentation/README.md create mode 100644 ai-documentation/charts/README.md create mode 100644 ai-documentation/chatbot/README.md create mode 100644 ai-documentation/component-groups/README.md create mode 100644 ai-documentation/components/data-display/README.md create mode 100644 ai-documentation/components/data-display/table.md create mode 100644 ai-documentation/components/layout/README.md create mode 100644 ai-documentation/guidelines/README.md create mode 100644 ai-documentation/guidelines/component-architecture.md create mode 100644 ai-documentation/guidelines/styling-standards.md create mode 100644 ai-documentation/resources/external-links.md create mode 100644 ai-documentation/resources/local-files.md create mode 100644 ai-documentation/setup/README.md create mode 100644 ai-documentation/setup/development-environment.md create mode 100644 ai-documentation/setup/quick-start.md create mode 100644 ai-documentation/troubleshooting/common-issues.md diff --git a/.cursor/rules/patternfly-vibe-coding.mdc b/.cursor/rules/patternfly-vibe-coding.mdc new file mode 100644 index 00000000..b9794c69 --- /dev/null +++ b/.cursor/rules/patternfly-vibe-coding.mdc @@ -0,0 +1,31 @@ +--- +description: +globs: +alwaysApply: false +--- +# PatternFly Vibe Coding Rule + +## Purpose +Always reference the README and markdown documentation in this repository when generating, editing, or reviewing any PatternFly (PF) code. These files contain the authoritative best practices, guidelines, and up-to-date standards for PatternFly development. + +## Scope +This rule applies to all code generation, refactoring, and review tasks involving PatternFly React, PatternFly Chatbot, and related UI components in this project. + +## Documentation to Reference +- The root `README.md` +- The `documentation/README.md` file, which serves as the table of contents for all documentation in the `documentation/` directory and its subdirectories. Use this file to discover and navigate all relevant rules, guidelines, and best practices for PatternFly development. +- All markdown files referenced by `documentation/README.md`. + +## Rule +- **Always consult the above documentation before generating or editing any PatternFly code.** +- **Use the documented best practices for component usage, styling, accessibility, and layout.** +- **Prefer semantic design tokens and utility classes as described in the docs.** +- **Follow accessibility and ARIA guidelines from the documentation.** +- **Reference official PatternFly components and avoid custom solutions unless explicitly allowed.** +- **If a question arises, search these docs first before using external sources.** + +## Example Prompt +> "When generating PatternFly code, use the guidelines and examples from all README and markdown files in this repository, especially those referenced in documentation/README.md. Follow the documented best practices for styling, accessibility, and component usage." + +## Enforcement +If code is generated or edited without following these documentation sources, request changes and point to the relevant section in the docs. diff --git a/README.md b/README.md index f4507bc1..53ffb064 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,21 @@ When importing CSS from a third-party package for the first time, you may encoun * To keep our code logic and test coverage in check, we use [jest](https://github.com/facebook/jest) * To ensure code styles remain consistent, we use [eslint](https://eslint.org/) +## AI Documentation & Development Rules + +This project includes an [`ai-documentation`](./ai-documentation/README.md) directory designed primarily for use by AI agents in AI-enabled IDEs (such as Cursor, Claude, and others). These files provide essential rules, guidelines, and best practices for building web applications with PatternFly React, enabling AI coding assistants to: + +- Offer context-aware suggestions and enforce consistent component architecture and styling standards +- Guide developers to use PatternFly v6 components and utility classes +- Promote accessibility and state management best practices +- Reference troubleshooting tips and specialized rules (charts, chatbot, etc.) + +**How to use:** +- If you are using an AI-enabled IDE, the AI agent will automatically leverage the [AI Documentation & Rules](./ai-documentation/README.md) to assist you as you develop. +- Human contributors can also consult these files directly for detailed standards and examples, but the primary audience is AI coding assistants. + +By following these rulesβ€”either directly or via your AI assistantβ€”you'll ensure your app is maintainable, accessible, and consistent with PatternFly best practices. + ## Multi environment configuration This project uses [dotenv-webpack](https://www.npmjs.com/package/dotenv-webpack) for exposing environment variables to your code. Either export them at the system level like `export MY_ENV_VAR=http://dev.myendpoint.com && npm run start:dev` or simply drop a `.env` file in the root that contains your key-value pairs like below: diff --git a/ai-documentation/README.md b/ai-documentation/README.md new file mode 100644 index 00000000..bf319965 --- /dev/null +++ b/ai-documentation/README.md @@ -0,0 +1,58 @@ +# PatternFly React Development Rules + +> **Starting a new project?** +> For a quick start with PatternFly React, use the [patternfly/patternfly-react-seed](https://github.com/patternfly/patternfly-react-seed) app. It provides a basic build, layout, and scaffolding for new PatternFly applications, including recommended tooling and project structure. + +Essential rules and guidelines for AI coders working with PatternFly React applications. + +## Quick Navigation + +### πŸš€ Setup & Environment +- [**Setup Rules**](./setup/README.md) - Project initialization requirements +- [**Quick Start**](./setup/quick-start.md) - Essential setup steps +- [**Environment Rules**](./setup/development-environment.md) - Development configuration + +### πŸ“š Core Rules +- [**PatternFly Guidelines**](./guidelines/README.md) - Core development principles +- [**Component Rules**](./guidelines/component-architecture.md) - Component structure requirements +- [**Styling Rules**](./guidelines/styling-standards.md) - CSS and styling requirements + +### 🧩 Component Rules +- [**Layout Rules**](./components/layout/README.md) - Page structure requirements +- [**Table Component Rules**](./components/data-display/table.md) - Table usage and best practices +- [**Data View Component Rules**](./components/data-display/README.md) - Data view usage and best practices + +### πŸ“Š Specialized Rules +- [**Charts Rules**](./charts/README.md) - PatternFly Charts requirements +- [**Chatbot Rules**](./chatbot/README.md) - PatternFly Chatbot requirements + +### πŸ”§ Troubleshooting +- [**Common Issues**](./troubleshooting/common-issues.md) - Problem resolution rules + +### πŸ“– Resources +- [**External Links**](./resources/external-links.md) - Official documentation links +- [**Local Files**](./resources/local-files.md) - Project-specific resources + +## Usage Rules for AI Coders + +1. **Always use PatternFly v6** - Use `pf-v6-` prefixed classes only +2. **Component-first approach** - Use PatternFly components before custom solutions +3. **Consult documentation** - Reference [PatternFly.org](https://www.patternfly.org/) for examples +4. **Follow accessibility** - Implement proper ARIA labels and keyboard navigation +5. **Use utility classes** - Prefer PatternFly utilities over custom CSS +6. **Handle states** - Always implement loading, error, and empty states + +## Documentation Structure + +Each file contains: +- **Rules** - Specific requirements to follow +- **Do's and Don'ts** - Clear guidance on what to avoid +- **Links** - References to official PatternFly documentation +- **Quick examples** - Minimal code patterns when needed + +## Reference Documentation + +- [PatternFly.org](https://www.patternfly.org/) +- [PatternFly React GitHub Repository](https://github.com/patternfly/patternfly-react) + +> For all rules and examples, consult both PatternFly.org and the official GitHub repository. When using AI tools, leverage context7 to fetch the latest docs from these sources. \ No newline at end of file diff --git a/ai-documentation/charts/README.md b/ai-documentation/charts/README.md new file mode 100644 index 00000000..47ee0b0d --- /dev/null +++ b/ai-documentation/charts/README.md @@ -0,0 +1,191 @@ +# Charts Rules + +Essential rules for PatternFly Charts implementation using Victory.js and ECharts. + +## Related Files +- [**Component Architecture**](../guidelines/component-architecture.md) - Chart component structure rules +- [**Performance Optimization**](../troubleshooting/performance.md) - Chart performance considerations + +## Installation Rules + +### Required Installation +```bash +# βœ… Victory-based charts (recommended) +npm install @patternfly/react-charts victory + +# βœ… ECharts-based charts (alternative) +npm install @patternfly/react-charts echarts +``` + +### Import Rules +- βœ… **Use specific import paths** - Import from `/victory` or `/echarts` subdirectories +- ❌ **Don't use general imports** - Avoid importing from main package + +```jsx +// βœ… Correct imports +import { ChartDonut, ChartLine, ChartBar } from '@patternfly/react-charts/victory'; +import { EChart } from '@patternfly/react-charts/echarts'; + +// ❌ Wrong imports +import { ChartDonut } from '@patternfly/react-charts'; +``` + +### Troubleshooting Import Issues +If "module not found" errors occur: +1. **Clear cache**: `rm -rf node_modules package-lock.json` +2. **Reinstall**: `npm install` +3. **Verify paths**: Check import paths match installed version + +## Chart Implementation Rules + +### Color Rules +- βœ… **Use PatternFly chart color tokens** - For consistency with design system +- ❌ **Don't use hardcoded colors** - Use design tokens instead + +```jsx +// βœ… Correct - Use PatternFly color tokens +const chartColors = [ + 'var(--pf-v6-chart-color-blue-300)', + 'var(--pf-v6-chart-color-green-300)', + 'var(--pf-v6-chart-color-orange-300)' +]; + + +``` + +### Responsive Rules +- βœ… **Implement responsive sizing** - Charts must work on all screen sizes +- βœ… **Use container-based dimensions** - Not fixed width/height +- ❌ **Don't hardcode dimensions** - Charts must be responsive + +```jsx +// βœ… Required responsive pattern +const [dimensions, setDimensions] = useState({ width: 0, height: 0 }); + +useEffect(() => { + const updateDimensions = () => { + if (containerRef.current) { + const { width, height } = containerRef.current.getBoundingClientRect(); + setDimensions({ width, height }); + } + }; + updateDimensions(); + window.addEventListener('resize', updateDimensions); + return () => window.removeEventListener('resize', updateDimensions); +}, []); +``` + +### Accessibility Rules +- βœ… **Provide ARIA labels** - For screen reader support +- βœ… **Use high contrast colors** - Meet WCAG standards +- βœ… **Support keyboard navigation** - Add tabIndex and role + +```jsx +// βœ… Required accessibility pattern + +``` + +### State Management Rules +- βœ… **Handle loading states** - Show spinners during data loading +- βœ… **Handle error states** - Show error messages with retry +- βœ… **Handle empty states** - Show appropriate empty messages +- βœ… **Use data memoization** - For performance optimization + +```jsx +// βœ… Required state handling +if (isLoading) return ; +if (error) return ; +if (!data?.length) return ; + +const processedData = useMemo(() => { + return rawData.map(item => ({ x: item.date, y: item.value })); +}, [rawData]); +``` + +### Integration Rules +- βœ… **Use with PatternFly components** - Integrate charts in Cards, PageSections +- βœ… **Follow grid layouts** - Use PatternFly grid for chart dashboards +- ❌ **Don't create standalone chart pages** - Integrate with PatternFly layout + +```jsx +// βœ… Required integration pattern +import { Card, CardTitle, CardBody } from '@patternfly/react-core'; + + + Chart Title + + + + +``` + +## Performance Rules + +### Required Optimizations +- βœ… **Use lazy loading for heavy charts** - Improve initial page load +- βœ… **Memoize data processing** - Use useMemo for expensive calculations +- βœ… **Implement proper loading states** - Show feedback during data loading + +```jsx +// βœ… Required performance patterns +const LazyChart = lazy(() => import('./HeavyChart')); + +}> + + +``` + +## Essential Do's and Don'ts + +### βœ… Do's +- Use PatternFly chart color tokens for consistency +- Implement responsive sizing for different screen sizes +- Provide proper ARIA labels and descriptions +- Handle loading, error, and empty states +- Use appropriate chart types for your data +- Optimize performance with data memoization +- Integrate charts with PatternFly layout components + +### ❌ Don'ts +- Hardcode chart dimensions without responsive design +- Use colors that don't meet accessibility standards +- Skip loading states for charts with async data +- Ignore keyboard navigation and screen reader support +- Create overly complex charts +- Mix different charting libraries inconsistently +- Forget to handle empty data states + +## Common Issues + +### Module Not Found +- **Clear cache**: `rm -rf node_modules package-lock.json` +- **Reinstall**: `npm install` +- **Check paths**: Verify import paths are correct + +### Chart Not Rendering +- **Check container dimensions**: Ensure parent has width/height +- **Verify data format**: Data must match chart expectations +- **Check console**: Look for Victory.js or ECharts warnings + +### Performance Issues +- **Use data memoization**: useMemo for expensive calculations +- **Implement lazy loading**: For heavy chart components +- **Optimize re-renders**: Use React.memo for chart components + +## Quick Reference +- **[PatternFly Charts README](https://github.com/patternfly/patternfly-react/tree/main/packages/react-charts#readme)** - Installation and usage +- **[Victory.js Documentation](https://formidable.com/open-source/victory/)** - Chart library documentation +- **[PatternFly Chart Guidelines](https://www.patternfly.org/charts/about)** - Design guidelines + +## Reference Documentation + +- [PatternFly Charts on PatternFly.org](https://www.patternfly.org/charts/about) +- [PatternFly React Charts GitHub Repository](https://github.com/patternfly/patternfly-react/tree/main/packages/react-charts) + +> For the most up-to-date documentation and code examples, consult both PatternFly.org and the official GitHub repository. When using AI tools, leverage context7 to fetch the latest docs from these sources. \ No newline at end of file diff --git a/ai-documentation/chatbot/README.md b/ai-documentation/chatbot/README.md new file mode 100644 index 00000000..815a0b60 --- /dev/null +++ b/ai-documentation/chatbot/README.md @@ -0,0 +1,191 @@ +# Chatbot Rules + +Essential rules for PatternFly Chatbot implementation and integration patterns. + +## Related Files + +- [**Local Resources**](../resources/local-files.md) - Reference to patternfly-chatbot.txt +- [**Component Architecture**](../guidelines/component-architecture.md) - Component structure guidelines + +## Installation Rules + +### Required Installation + +```bash +# βœ… Install PatternFly Chatbot package +npm install @patternfly/chatbot +``` + +### Required CSS Import + +```jsx +// βœ… MUST import CSS - chatbot components require specific styling +import '@patternfly/chatbot/dist/css/main.css'; +``` + +### Webpack Configuration (if needed) + +```javascript +// stylePaths.js - Add to webpack if CSS not loading +module.exports = [ + require.resolve('@patternfly/chatbot/dist/css/main.css') +]; +``` + +## Import Rules + +### Required Import Pattern + +- βœ… **Use dynamic imports** - Import from `/dist/dynamic/` paths +- ❌ **Don't use standard imports** - May not work with current package structure + +```jsx +// βœ… Correct - Use dynamic imports +import { Chatbot } from '@patternfly/chatbot/dist/dynamic/Chatbot'; +import { ChatbotContent } from '@patternfly/chatbot/dist/dynamic/ChatbotContent'; +import { MessageBox } from '@patternfly/chatbot/dist/dynamic/MessageBox'; +import { Message } from '@patternfly/chatbot/dist/dynamic/Message'; + +// ❌ Wrong - Standard imports may not work +import { Chatbot, ChatbotContent } from '@patternfly/chatbot'; +``` + +## Implementation Rules + +### Required Component Structure + +- βœ… **Use standard chatbot hierarchy** - Chatbot > ChatbotContent > MessageBox + ChatbotFooter +- βœ… **Reference official demos** - Use PatternFly demo source code as templates +- ❌ **Don't create custom chat UI** - Use PatternFly chatbot components + +```jsx +// βœ… Required chatbot structure + + + + + {messages.map(message => ( + + ))} + + + + + + +``` + +### Message State Rules + +- βœ… **Use proper message roles** - 'user', 'assistant', 'system' +- βœ… **Include timestamps** - For message ordering and display +- βœ… **Handle loading states** - Show indicators during API calls +- βœ… **Handle error states** - Show error messages with retry options + +```jsx +// βœ… Required message structure +const createMessage = (content, role) => ({ + id: generateId(), + content, + role, // 'user' | 'assistant' | 'system' + timestamp: new Date(), + status: 'sent' +}); +``` + +### Demo Implementation Rules + +- βœ… **Study official demos** - [Basic](https://www.patternfly.org/patternfly-ai/chatbot/overview/demo/basic-chatbot) and [Embedded](https://www.patternfly.org/patternfly-ai/chatbot/overview/demo/embedded-chatbot) +- βœ… **Use demo source code** - Copy patterns from "View Code" sections +- βœ… **Follow demo structure** - Don't deviate from proven patterns + +### Integration Rules + +- βœ… **Use with PatternFly layout** - Integrate in PageSection, Modal, or Card +- βœ… **Handle responsive design** - Chatbot must work on all screen sizes +- ❌ **Don't create standalone chatbot pages** - Integrate with app layout + +```jsx +// βœ… Required integration pattern + +
+ + {/* Chatbot content */} + +
+
+``` + +## Accessibility Rules + +### Required Accessibility + +- βœ… **Use proper ARIA labels** - For screen reader support +- βœ… **Implement keyboard navigation** - Full keyboard accessibility +- βœ… **Use semantic roles** - role="application", role="log" +- βœ… **Auto-scroll to new messages** - For better UX + +```jsx +// βœ… Required accessibility pattern + + + {messages.map(message => ( + + ))} + + +``` + +## Essential Do's and Don'ts + +### βœ… Do's + +- Import CSS from `@patternfly/chatbot/dist/css/main.css` +- Use dynamic imports for chatbot components +- Reference official PatternFly demo pages for implementation +- Provide proper ARIA labels and roles for accessibility +- Handle loading states during message processing +- Implement proper error handling for API failures +- Use semantic message roles (user, assistant, system) + +### ❌ Don'ts + +- Skip CSS imports - chatbot components require specific styling +- Ignore demo source code from PatternFly documentation +- Create custom chat UI when PatternFly components exist +- Skip accessibility considerations for screen readers +- Hardcode chatbot dimensions without responsive design +- Mix different chatbot libraries with PatternFly Chatbot + +## Common Issues + +### Styling Issues + +- **Missing styles**: Ensure CSS is imported in main app file +- **Webpack config**: Add CSS path to stylePaths.js if needed + +### Component Issues + +- **Import errors**: Use dynamic import paths `/dist/dynamic/` +- **Component not found**: Verify package is installed and paths are correct + +### Performance Issues + +- **Long conversations**: Implement message virtualization +- **Memory leaks**: Clean up event listeners and subscriptions + +## Quick Reference + +- **[Chatbot Overview](https://www.patternfly.org/patternfly-ai/chatbot/overview)** - Main documentation +- **[Basic Demo](https://www.patternfly.org/patternfly-ai/chatbot/overview/demo/basic-chatbot)** - Simple implementation +- **[Embedded Demo](https://www.patternfly.org/patternfly-ai/chatbot/overview/demo/embedded-chatbot)** - Embedded pattern +- **[Local Documentation](../resources/local-files.md#patternfly-chatbot-txt)** - Project-specific context + +**Note**: This chatbot guidance takes precedence over general PatternFly patterns. Always consult the latest PatternFly Chatbot documentation and demo source code. + +## Reference Documentation + +- [PatternFly Chatbot on PatternFly.org](https://www.patternfly.org/patternfly-ai/chatbot/overview) +- [PatternFly Chatbot GitHub Repository](https://github.com/patternfly/chatbot) + +> For the most up-to-date documentation and code examples, consult both PatternFly.org and the official GitHub repository. When using AI tools, leverage context7 to fetch the latest docs from these sources. \ No newline at end of file diff --git a/ai-documentation/component-groups/README.md b/ai-documentation/component-groups/README.md new file mode 100644 index 00000000..dfd96421 --- /dev/null +++ b/ai-documentation/component-groups/README.md @@ -0,0 +1,99 @@ +# PatternFly Component Groups Rules + +Essential rules for using and contributing to PatternFly React Component Groups. + +## Overview +PatternFly Component Groups are opinionated React components that combine and extend PatternFly base components to provide standardized, reusable solutions for common product needs. They are maintained collaboratively by the PatternFly and Red Hat Hybrid Cloud Console teams, with a focus on accessibility, design consistency, and extensibility. + +- [Component Groups NPM](https://www.npmjs.com/package/@patternfly/react-component-groups) +- [Component Groups GitHub](https://github.com/patternfly/react-component-groups) +- [Migration Guide](https://github.com/patternfly/react-component-groups/blob/main/migration.md) + +## Installation Rules + +### Required Installation +```bash +npm install @patternfly/react-component-groups +``` + +### Required CSS Import +```jsx +import '@patternfly/react-component-groups/dist/css/main.css'; +``` + +## Import Rules + +### Required Import Pattern +- βœ… **Use dynamic imports** from `/dist/dynamic/` paths +- ❌ **Don't use standard imports** + +```jsx +// βœ… Correct +import { BulkSelect } from '@patternfly/react-component-groups/dist/dynamic/BulkSelect'; + +// ❌ Wrong +import { BulkSelect } from '@patternfly/react-component-groups'; +``` + +## Implementation Rules + +### Component Usage +- βœ… **Use component groups for complex, opinionated UI patterns** +- βœ… **Reference official PatternFly and component group demos** +- ❌ **Don't reimplement existing group functionality with custom code** + +### Example Usage +```jsx +import { BulkSelect } from '@patternfly/react-component-groups/dist/dynamic/BulkSelect'; + + +``` + +### Component API Rules +- Use PatternFly naming conventions for props (e.g., `variant`, `onClick`) +- Extend PatternFly types when possible +- Document all props and usage examples +- Avoid unnecessary external dependencies + +## Contribution Guidelines +- Ensure new components are sufficiently complex and valuable +- Follow the [component structure and API rules](https://github.com/patternfly/react-component-groups#readme) +- Add unit and Cypress tests for all new components +- Document new components with markdown and usage examples + +## Accessibility Rules +- Provide proper ARIA labels and roles +- Ensure keyboard navigation and screen reader support +- Follow PatternFly accessibility best practices + +## Essential Do's and Don'ts + +### βœ… Do's +- Use dynamic imports and import required CSS +- Reference official demos and documentation +- Write accessible, well-documented components +- Use JSS for styling and follow naming conventions +- Add tests for all new functionality + +### ❌ Don'ts +- Skip CSS imports or use standard imports +- Reimplement existing group components from scratch +- Ignore accessibility or documentation requirements +- Use `pf-v6-u-XXX` utility classes (use CSS variables instead) + +## Common Issues +- **Missing styles:** Ensure CSS is imported +- **Import errors:** Use `/dist/dynamic/` paths +- **Component not found:** Check package installation and import paths +- **Accessibility:** Run a11y tests and review ARIA usage + +## Quick Reference +- [Component Groups Gallery](https://www.patternfly.org/patternfly-ai/component-groups/overview) +- [Component Groups GitHub](https://github.com/patternfly/react-component-groups) +- [Migration Guide](https://github.com/patternfly/react-component-groups/blob/main/migration.md) + +**Note:** Component group guidance takes precedence over general PatternFly patterns for these components. Always consult the latest documentation and demo source code. \ No newline at end of file diff --git a/ai-documentation/components/data-display/README.md b/ai-documentation/components/data-display/README.md new file mode 100644 index 00000000..419eb9ff --- /dev/null +++ b/ai-documentation/components/data-display/README.md @@ -0,0 +1,281 @@ +# Data Display Rules + +Essential rules for PatternFly data display components including lists, data presentation, and data view patterns. + +## Related Files +- [**Component Architecture**](../../guidelines/component-architecture.md) - Data component structure rules +- [**Layout Rules**](../layout/README.md) - Page structure patterns +- [**Table Documentation**](./table.md) - Table component rules and best practices + +## Dropdown Action Rules + +### Required Dropdown Pattern +- βœ… **Use MenuToggle with variant="plain"** - For kebab-style dropdowns +- βœ… **Configure popperProps** - Prevent clipping issues +- βœ… **Use EllipsisVIcon** - Standard kebab menu icon + +```jsx +// βœ… Required dropdown pattern +import { Dropdown, DropdownList, DropdownItem, MenuToggle, Divider } from '@patternfly/react-core'; +import { EllipsisVIcon } from '@patternfly/react-icons'; + + document.body // Prevents clipping + }} + toggle={(toggleRef) => ( + + + + )} +> + + onEdit(item)}>Edit + + onDelete(item)}>Delete + + +``` + +## Toolbar Rules + +### Required Toolbar Pattern +- βœ… **Use clearAllFilters prop** - For "Clear all filters" functionality +- βœ… **Use ToolbarFilter with labels** - Display active filters as chips +- βœ… **Use ToolbarToggleGroup** - For responsive filter collapsing +- βœ… **Show bulk actions when items selected** - Conditional bulk action UI + +```jsx +// βœ… Required toolbar pattern +import { Toolbar, ToolbarContent, ToolbarFilter, ToolbarToggleGroup } from '@patternfly/react-core'; + + + + {selectedCount > 0 && ( + + {selectedCount} selected + + + )} + } breakpoint="xl"> + + + + + + +``` + +## State Management Rules + +### Required State Patterns +- βœ… **Use Set for selection** - More efficient than arrays +- βœ… **Handle loading states** - Show spinners or skeletons +- βœ… **Handle empty states** - Show appropriate messages +- βœ… **Handle error states** - Show error messages with retry + +```jsx +// βœ… Required state management +const [selectedItems, setSelectedItems] = useState(new Set()); +const [isLoading, setIsLoading] = useState(false); +const [error, setError] = useState(null); + +if (isLoading) return ; +if (error) return ; +if (!data?.length) return ; +``` + +## Performance Rules + +### Required Optimizations +- βœ… **Use virtualization for 1000+ rows** - react-window library +- βœ… **Use pagination for large datasets** - Better UX than virtualization +- βœ… **Memoize table rows** - React.memo for performance +- βœ… **Use useCallback for handlers** - Stable references + +```jsx +// βœ… Required for large datasets +import { FixedSizeList as List } from 'react-window'; +import { Pagination } from '@patternfly/react-core'; + +// For 1000+ items, use virtualization + + {Row} + + +// For better UX, use pagination + +``` + +## Essential Do's and Don'ts + +### βœ… Do's +- Use composable Table components (Thead, Tbody, Tr, Th, Td) +- Implement proper sorting with sort prop on Th components +- Use Checkbox components for selectable rows +- Configure dropdown positioning with popperProps +- Provide empty states for no data and filtered results +- Implement loading states with skeletons or spinners +- Use proper ARIA labels for accessibility + +### ❌ Don'ts +- Create custom table components when PatternFly Table exists +- Ignore responsive design for data tables +- Skip loading and empty states +- Forget to handle dropdown clipping issues +- Use inconsistent selection patterns +- Skip accessibility considerations for interactive elements + +## Common Issues + +### Dropdown Clipping +```jsx +// βœ… Solution: Use appendTo to prevent clipping + document.body }}> +``` + +### Performance Issues +- **1000+ rows**: Use virtualization with react-window +- **Large datasets**: Implement pagination +- **Slow rendering**: Memoize components with React.memo + +### Selection Issues +- **Use Set not Array**: More efficient for selection state +- **Handle indeterminate**: For "select all" checkbox state +- **Provide feedback**: Show selected count and bulk actions + +## Quick Reference +- **[Table Component](https://www.patternfly.org/components/table)** - Official table documentation +- **[Toolbar Component](https://www.patternfly.org/components/toolbar)** - Toolbar with filters +- **[Dropdown Component](https://www.patternfly.org/components/menus/dropdown)** - Dropdown positioning + +## Data View Component Rules + +PatternFly Data View provides a standardized way to present and interact with tabular or list-based data, following PatternFly design and accessibility guidelines. + +### Installation +```bash +npm install @patternfly/react-data-view +``` + +### Required CSS Import +```jsx +import '@patternfly/react-data-view/dist/css/main.css'; +``` + +### Import Pattern +- βœ… **Use dynamic imports** from `/dist/dynamic/` paths +- ❌ **Don't use standard imports** + +```jsx +// βœ… Correct +import DataView from '@patternfly/react-data-view/dist/dynamic/DataView'; +``` + +### Basic Usage Example +```jsx +import DataView from '@patternfly/react-data-view/dist/dynamic/DataView'; + + +``` + +### Component API +- Use PatternFly naming conventions for props (e.g., `variant`, `onClick`) +- Extend PatternFly types when possible +- Document all props and usage examples +- Avoid unnecessary external dependencies + +#### Example API Extension +```ts +// when possible, extend available PatternFly types +export interface DataViewProps extends TableProps { + customLabel?: string; +} + +export const DataView: React.FunctionComponent = ({ customLabel, ...props }) => ( /* ... */ ); +``` + +### Directory Structure +``` +src +|- DataView + |- index.ts + |- DataView.tsx +``` + +### OUIA ID Convention +For testing, use the component name as the default OUIA ID, and for subcomponents, use `ComponentName-element-specification`. +```ts +ouiaId="DataView-actions-button" +``` + +### Testing & Linting +- Add unit tests to `DataView.test.tsx` +- Add Cypress component/E2E tests to `cypress/component/DataView.cy.tsx` and `cypress/e2e/DataView.spec.cy.ts` +- Run tests and linting: +```bash +npm run test +npm run lint +``` + +### Accessibility +- Provide proper ARIA labels and roles +- Ensure keyboard navigation and screen reader support +- Run accessibility tests: +```bash +npm run build:docs +npm run serve:docs +npm run test:a11y +npm run serve:a11y +``` + +### Documentation Example (Markdown) +```md +--- +section: extensions +subsection: Data view +id: DataView +propComponents: ['DataView'] +sourceLink: https://github.com/patternfly/react-data-view/blob/main/packages/module/patternfly-docs/content/extensions/data-view/examples/DataView/DataView.md +--- + +import DataView from "@patternfly/react-data-view/dist/dynamic/DataView"; + +## Component usage + + + +### DataView component example label + +```js file="./DataViewExample.tsx"``` +``` + +### References +- [PatternFly React Data View GitHub](https://github.com/patternfly/react-data-view) +- [PatternFly Data View NPM](https://www.npmjs.com/package/@patternfly/react-data-view) + +> **Note:** Always consult the latest PatternFly Data View documentation and demo source code for up-to-date usage patterns and best practices. + +### Real-World Example: OpenShift Console + +A production example of PatternFly Data View usage can be found in the OpenShift Console codebase: +- [DataViewPodList.tsx on GitHub](https://github.com/openshift/console/blob/79d29bca8440a5ad82b5257bb0f37bc24384eb0e/frontend/public/components/data-view-poc/DataViewPodList.tsx) + +**Key integration patterns and best practices from this example:** +- Integrates Data View with live Kubernetes data (pods) and application state. +- Demonstrates how to pass dynamic data and columns to the Data View component. +- Shows how to handle loading, error, and empty states in a real product context. +- Illustrates the use of PatternFly composable components for custom row rendering and actions. +- Provides a template for connecting Data View to Redux or other state management solutions. + +> For advanced usage, review the linked file to see how Data View is composed with other PatternFly and application-specific components. diff --git a/ai-documentation/components/data-display/table.md b/ai-documentation/components/data-display/table.md new file mode 100644 index 00000000..691ec48e --- /dev/null +++ b/ai-documentation/components/data-display/table.md @@ -0,0 +1,123 @@ +# Table Component Rules + +Essential rules for PatternFly table components, including usage, sorting, selection, performance, accessibility, and best practices. + +## Required Table Structure +- βœ… **Use composable Table components** - `Table`, `Thead`, `Tbody`, `Tr`, `Th`, `Td` +- βœ… **Import from @patternfly/react-table** - Not @patternfly/react-core +- ❌ **Don't create custom table components** - Use PatternFly's composable approach + +```jsx +// βœ… Correct table structure +import { Table, Thead, Tbody, Tr, Th, Td } from '@patternfly/react-table'; + + + + + + + + + + {data.map(item => ( + + + + + ))} + +
NameEmail
{item.name}{item.email}
+``` + +## Sorting Rules +- βœ… **Use sort prop on Th components** - Configure sorting via the `sort` prop +- βœ… **Manage sort state with useState** - Track sortBy state +- βœ… **Use useMemo for sorted data** - Performance optimization + +```jsx +// βœ… Required sorting pattern +const [sortBy, setSortBy] = useState({}); + + + Name + +``` + +## Selection Rules +- βœ… **Use Set for selection state** - More efficient than arrays +- βœ… **Handle indeterminate state** - For "select all" checkbox +- βœ… **Use proper ARIA labels** - For accessibility + +```jsx +// βœ… Required selection pattern +const [selectedItems, setSelectedItems] = useState(new Set()); + +const isAllSelected = selectedItems.size === data.length && data.length > 0; +const isPartiallySelected = selectedItems.size > 0 && selectedItems.size < data.length; + + +``` + +## Performance Rules +- βœ… **Use virtualization for 1000+ rows** - react-window library +- βœ… **Use pagination for large datasets** - Better UX than virtualization +- βœ… **Memoize table rows** - React.memo for performance +- βœ… **Use useCallback for handlers** - Stable references + +```jsx +// βœ… Required for large datasets +import { FixedSizeList as List } from 'react-window'; +import { Pagination } from '@patternfly/react-core'; + +// For 1000+ items, use virtualization + + {Row} + + +// For better UX, use pagination + +``` + +## Essential Do's and Don'ts + +### βœ… Do's +- Use composable Table components (Thead, Tbody, Tr, Th, Td) +- Implement proper sorting with sort prop on Th components +- Use Checkbox components for selectable rows +- Configure dropdown positioning with popperProps +- Provide empty states for no data and filtered results +- Implement loading states with skeletons or spinners +- Use proper ARIA labels for accessibility + +### ❌ Don'ts +- Create custom table components when PatternFly Table exists +- Ignore responsive design for data tables +- Skip loading and empty states +- Forget to handle dropdown clipping issues +- Use inconsistent selection patterns +- Skip accessibility considerations for interactive elements + +## Common Issues + +### Dropdown Clipping +```jsx +// βœ… Solution: Use appendTo to prevent clipping + document.body }}> +``` + +### Performance Issues +- **1000+ rows**: Use virtualization with react-window +- **Large datasets**: Implement pagination +- **Slow rendering**: Memoize components with React.memo + +### Selection Issues +- **Use Set not Array**: More efficient for selection state +- **Handle indeterminate**: For "select all" checkbox state +- **Provide feedback**: Show selected count and bulk actions + +## Quick Reference +- **[Table Component](https://www.patternfly.org/components/table)** - Official table documentation \ No newline at end of file diff --git a/ai-documentation/components/layout/README.md b/ai-documentation/components/layout/README.md new file mode 100644 index 00000000..9d5f9a0c --- /dev/null +++ b/ai-documentation/components/layout/README.md @@ -0,0 +1,471 @@ +# Layout Components + +This section covers PatternFly layout components and page structure patterns for building consistent application layouts. + +## Introduction + +PatternFly layout components provide the foundation for structuring application pages and organizing content. These components ensure consistent spacing, responsive behavior, and proper semantic structure across your application. + +## Reference Documentation + +- [PatternFly Layouts on PatternFly.org](https://www.patternfly.org/layouts) +- [PatternFly React GitHub Repository](https://github.com/patternfly/patternfly-react) + +> For the most up-to-date documentation and code examples, consult both PatternFly.org and the official GitHub repository. When using AI tools, leverage context7 to fetch the latest docs from these sources. + +## Related Files + +- [**Page Sections**](./page-sections.md) - PageSection component usage and patterns +- [**Grid System**](./grid-system.md) - Grid layout and responsive design +- [**Component Architecture**](../../guidelines/component-architecture.md) - Component structure patterns +- [**Styling Standards**](../../guidelines/styling-standards.md) - Layout styling guidelines + +## Core Layout Components + +### PageSection Component + +The [`PageSection`](https://www.patternfly.org/components/page/page-section) component is the primary building block for page content structure. + +#### Basic Usage +```jsx +import { PageSection, Content } from '@patternfly/react-core'; + +const BasicPage = () => ( + + {/* Page Title Section */} + + Page Title + + + {/* Main Content Section */} + + Main page content goes here + + +); +``` + +#### PageSection Variants +```jsx +// Light background for headers/titles + + Application Title + + +// Default background for main content + + + + +// Secondary background for supporting content + + + + +// Dark background for special sections + + + +``` + +#### Padding Configuration +```jsx +// Standard padding + + Standard padded content + + +// No padding + + Content with no padding + + +// Responsive padding + + Responsive padding content + +``` + +#### Body Wrapper +```jsx +// Adds pf-vX-c-page__main-body wrapper for standard content padding + +
+ Content with body wrapper styling +
+
+``` + +## Common Layout Patterns + +### Standard Page Layout +```jsx +import { + PageSection, + Content, + Toolbar, + ToolbarContent +} from '@patternfly/react-core'; + +const StandardPageLayout = () => ( + + {/* 1. Page Title Section */} + + User Management + Manage user accounts and permissions + + + {/* 2. Toolbar Section */} + + + + {/* Filters, search, actions */} + + + + + {/* 3. Main Content Section */} + + + + +); +``` + +### Dashboard Layout +```jsx +const DashboardLayout = () => ( + + {/* Dashboard Header */} + + Dashboard + System overview and key metrics + + + {/* Metrics Cards */} + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + {/* Charts and Detailed Content */} + +
+
+ +
+
+ +
+
+
+
+); +``` + +### Form Layout +```jsx +const FormPageLayout = () => ( + + {/* Form Header */} + + Create User + Add a new user to the system + + + {/* Form Content */} + +
+
+ + User Information + + + + +
+
+ + Help + + + + +
+
+
+
+); +``` + +## Grid System Integration + +### Basic Grid Layout +```jsx +import { PageSection } from '@patternfly/react-core'; + +const GridLayout = () => ( + +
+
+ Left Content +
+
+ Right Content +
+
+
+); +``` + +### Responsive Grid Patterns +```jsx +// Three-column responsive layout +
+
+ Column 1 +
+
+ Column 2 +
+
+ Column 3 +
+
+``` + +## Responsive Design Considerations + +### Breakpoint-Aware Layouts +```jsx +const ResponsiveLayout = () => ( + + {/* Mobile: Stack vertically, Desktop: Side by side */} +
+
+ +
+
+ +
+
+
+); +``` + +### Mobile-First Approach +```jsx +// Start with mobile layout, enhance for larger screens + +
+
+ +
+
+ +
+
+
+``` + +## Accessibility Considerations + +### Semantic Structure +```jsx +// Use proper heading hierarchy + + Main Page Title {/* h1 for page title */} + + + + Section Title {/* h2 for major sections */} +
+ Subsection {/* h3 for subsections */} +
+
+``` + +### Skip Links and Navigation +```jsx +// Add skip links for keyboard navigation + + + Skip to main content + + + + + + +``` + +### ARIA Landmarks +```jsx +// Use proper ARIA landmarks + + + + + + + +``` + +## Performance Optimization + +### Lazy Loading Sections +```jsx +import { lazy, Suspense } from 'react'; +import { Spinner } from '@patternfly/react-core'; + +const LazySection = lazy(() => import('./HeavySection')); + +const OptimizedLayout = () => ( + + + Page Title + + + + }> + + + + +); +``` + +### Conditional Rendering +```jsx +const ConditionalLayout = ({ showSidebar, isLoading }) => ( + +
+
+ {isLoading ? : } +
+ {showSidebar && ( +
+ +
+ )} +
+
+); +``` + +## Best Practices + +### Layout Do's +- βœ… Use PageSection for all major page areas +- βœ… Follow consistent page structure patterns +- βœ… Implement responsive design from mobile-first +- βœ… Use proper semantic HTML structure +- βœ… Maintain consistent spacing with PatternFly utilities +- βœ… Test layouts across different screen sizes +- βœ… Use hasBodyWrapper for standard content padding + +### Layout Don'ts +- ❌ Skip PageSection for page structure +- ❌ Mix layout systems inconsistently +- ❌ Ignore responsive design requirements +- ❌ Use custom CSS when PatternFly layout classes exist +- ❌ Create overly complex nested layouts +- ❌ Forget accessibility considerations +- ❌ Hardcode spacing values instead of using utilities + +## Common Layout Issues + +### Troubleshooting +1. **Spacing Issues**: Use PatternFly spacing utilities instead of custom margins +2. **Responsive Problems**: Test on actual devices, not just browser resize +3. **Overflow Issues**: Check container widths and use proper flex/grid properties +4. **Accessibility Violations**: Validate semantic structure and ARIA labels +5. **Performance Problems**: Implement lazy loading for heavy sections + +For detailed troubleshooting, see [Common Issues](../../troubleshooting/common-issues.md#layout-issues). + +## Valid PatternFly Page Layout (v6+) + +PatternFly v6+ provides a flexible, composable layout system for full-page apps. Here are the key best practices for structuring your app layout: + +### Key Lessons +- **Use the `Page` component as the root**. Pass `masthead`, `sidebar`, and `breadcrumb` as props (not children). +- **Masthead**: Use `Masthead`, `MastheadMain`, `MastheadBrand`, `MastheadToggle`, and `MastheadContent` for the top bar. +- **Sidebar navigation**: Use `PageSidebar` and `PageSidebarBody` with `Nav` and `NavList` for navigation. +- **Page sections**: Use `PageSection` for all main content areas. Use `Title` for headings and `Content` for paragraphs. +- **No `PageHeader`**: This is not a valid PatternFly v6+ component. Use `PageSection` + `Title` for page headers. +- **Breadcrumbs**: Pass as the `breadcrumb` prop to `Page`. +- **No inline styles for layout**: Use PatternFly layout and spacing utilities. + +### Example: Valid Layout +```jsx +import { + Page, Masthead, MastheadMain, MastheadBrand, MastheadToggle, MastheadContent, + PageSidebar, PageSidebarBody, Nav, NavList, NavItem, PageSection, Title, Content +} from '@patternfly/react-core'; + +const masthead = ( + + + {/* ... */} + {/* ... */} + + {/* ... */} + +); + +const sidebar = ( + + + + + +); + +export default function AppLayout() { + return ( + + + Dashboard + This is a PatternFly + Vite + TypeScript + React 19 app. + + + ); +} +``` + +### Layout Summary Table + +| Layout Element | PatternFly Component(s) | Notes | +|---------------|------------------------|-------| +| Root | `Page` | Use `masthead`, `sidebar`, `breadcrumb` props | +| Masthead | `Masthead`, `MastheadMain`, `MastheadBrand`, etc. | Compose for logo, toggles, user menu | +| Sidebar | `PageSidebar`, `PageSidebarBody`, `Nav` | Use for navigation | +| Main Content | `PageSection`, `Title`, `Content` | Use for each page/view | +| Breadcrumbs | `Breadcrumb` | Pass as `breadcrumb` prop to `Page` | +| Page Header | *No `PageHeader`* | Use `PageSection` + `Title` instead | + +> **Note:** `PageHeader` is not a PatternFly component in v6+. Use `PageSection`, `Title`, and layout components instead. \ No newline at end of file diff --git a/ai-documentation/guidelines/README.md b/ai-documentation/guidelines/README.md new file mode 100644 index 00000000..a8e9d11d --- /dev/null +++ b/ai-documentation/guidelines/README.md @@ -0,0 +1,83 @@ +# PatternFly Guidelines + +Core development rules for AI coders building PatternFly React applications. + +## Related Files + +- [**Component Rules**](./component-architecture.md) - Component structure requirements +- [**Styling Rules**](./styling-standards.md) - CSS and styling requirements +- [**Layout Rules**](../components/layout/README.md) - Page structure requirements + +## Essential Rules + +### Version Requirements + +- βœ… **ALWAYS use PatternFly v6** - Use `pf-v6-` prefixed classes only +- ❌ **NEVER use legacy versions** - No `pf-v5-`, `pf-v4-`, or `pf-c-` classes +- βœ… **Match component and CSS versions** - Ensure compatibility + +### Component Usage Rules + +- βœ… **Use PatternFly components first** - Before creating custom solutions +- βœ… **Compose components** - Build complex UIs by combining PatternFly components +- ❌ **Don't override component internals** - Use provided props and APIs + +### Text Components (v6+) +```jsx +// βœ… Correct +import { Content } from '@patternfly/react-core'; +Title + +// ❌ Wrong - Don't use old Text components +Title +``` + +### Icon Usage +```jsx +// βœ… Correct - Wrap with Icon component +import { Icon } from '@patternfly/react-core'; +import { UserIcon } from '@patternfly/react-icons'; + +``` + +### Styling Rules + +- βœ… **Use PatternFly utilities** - Before writing custom CSS +- βœ… **Use semantic design tokens** for custom CSS (e.g., `var(--pf-v6-global--primary-color--light)`), not base tokens with numbers (e.g., `--pf-v6-global--Color--100`) or hardcoded values +- ❌ **Don't mix PatternFly versions** - Stick to v6 throughout + +### Documentation Requirements + +1. **Check [PatternFly.org](https://www.patternfly.org/) first** - Primary source for APIs +2. **Check the [PatternFly React GitHub repository](https://github.com/patternfly/patternfly-react)** for the latest source code, examples, and release notes +3. **Use "View Code" sections** - Copy working examples +4. **Reference version-specific docs** - Match your project's PatternFly version +5. **Provide context to AI** - Share links and code snippets when asking for help + +> For the most up-to-date documentation, use both the official docs and the source repositories. When using AI tools, encourage them to leverage context7 to fetch the latest documentation from these sources. + +### Accessibility Requirements + +- βœ… **WCAG 2.1 AA compliance** - All components must meet standards +- βœ… **Proper ARIA labels** - Use semantic markup and labels +- βœ… **Keyboard navigation** - Ensure full keyboard accessibility +- βœ… **Focus management** - Logical focus order and visible indicators + +## Quality Checklist + +- [ ] Uses PatternFly v6 classes only +- [ ] Components render correctly across browsers +- [ ] Responsive on mobile and desktop +- [ ] Keyboard navigation works +- [ ] Screen readers can access content +- [ ] No console errors or warnings +- [ ] Performance is acceptable + +## When Issues Occur + +1. **Check [PatternFly.org](https://www.patternfly.org/)** - Verify component API +2. **Inspect elements** - Use browser dev tools for PatternFly classes +3. **Search [GitHub issues](https://github.com/patternfly/patternfly-react/issues)** - Look for similar problems +4. **Provide context** - Share code snippets and error messages + +See [Common Issues](../troubleshooting/common-issues.md) for specific problems. \ No newline at end of file diff --git a/ai-documentation/guidelines/component-architecture.md b/ai-documentation/guidelines/component-architecture.md new file mode 100644 index 00000000..77ba4a3a --- /dev/null +++ b/ai-documentation/guidelines/component-architecture.md @@ -0,0 +1,178 @@ +# Component Architecture + +Essential rules for structuring PatternFly components and organizing component hierarchies. + +## Related Files +- [**PatternFly Guidelines**](./README.md) - Core development principles +- [**Styling Rules**](./styling-standards.md) - CSS and styling approaches +- [**Layout Rules**](../components/layout/README.md) - Page structure patterns +- [**Table Component Rules**](../components/data-display/table.md) - Table usage and best practices +- [**Data View Component Rules**](../components/data-display/README.md) - Data view usage and best practices + +## Component Composition Rules + +### PatternFly-First Approach +- βœ… **Always start with PatternFly components** - Before creating custom solutions +- βœ… **Compose PatternFly components** - Build complex UIs by combining them +- ❌ **Don't create custom components** - When PatternFly components exist + +```jsx +// βœ… Correct - Compose PatternFly components +import { Card, CardTitle, CardBody, Button, Content } from '@patternfly/react-core'; + +const UserCard = ({ user, onEdit }) => ( + + + {user.name} + + + {user.email} + + + +); +``` + +### Page Structure Rules +```jsx +// βœ… Standard page pattern + + + Page Title + + + {/* filters */} + + + +``` + +### Component Hierarchy +1. **Page Components** - Top-level page structure +2. **Section Components** - Major page sections +3. **Feature Components** - Specific functionality +4. **PatternFly Components** - Base components + +### PatternFly Data Display Best Practices +> For all key-value or labeled data, use PatternFly's DescriptionList components for clarity and accessibility: +- **No `` for labels:** Use PatternFly's `DescriptionList` for key-value pairs, with `DescriptionListTerm` and `DescriptionListDescription`. +- **No direct `` for labeled data:** Use `DescriptionList` for any labeled data instead of lists with bold/strong labels. + +## State Management Rules + +### Local State +- βœ… **Use useState for component-specific state** - Form inputs, toggles, local UI state +- βœ… **Use useCallback and useMemo** - For performance optimization +- ❌ **Don't lift state unnecessarily** - Keep state as local as possible + +### Shared State +- βœ… **Use Context for shared state** - When multiple components need same data +- βœ… **Use useReducer for complex state** - When state logic is complex +- ❌ **Don't use global state for everything** - Only when truly needed + +## Common Pattern Rules + +### Table with Selection +```jsx +// βœ… Required pattern for selectable tables +import { Table, Thead, Tbody, Tr, Th, Td, Checkbox } from '@patternfly/react-table'; + +// Use Set for selection state management +const [selectedItems, setSelectedItems] = useState(new Set()); + +// Handle indeterminate state for "select all" +const isAllSelected = selectedItems.size === data.length && data.length > 0; +const isPartiallySelected = selectedItems.size > 0 && selectedItems.size < data.length; + + +``` + +### Dropdown Actions +```jsx +// βœ… Required pattern for action dropdowns +import { Dropdown, DropdownList, DropdownItem, MenuToggle } from '@patternfly/react-core'; +import { EllipsisVIcon } from '@patternfly/react-icons'; + +// Always use popperProps to prevent clipping + document.body }} + toggle={(toggleRef) => ( + + + + )} +> +``` + +### Toolbar with Filters +```jsx +// βœ… Required pattern for data filtering +import { Toolbar, ToolbarContent, ToolbarFilter, ToolbarToggleGroup } from '@patternfly/react-core'; + + + + } breakpoint="xl"> + + {/* Filter components */} + + + + +``` + +## Error Handling Rules + +### Required Error States +- βœ… **Always implement error boundaries** - Catch component errors +- βœ… **Handle loading states** - Show spinners or skeletons +- βœ… **Handle empty states** - Show appropriate empty state messages +- βœ… **Handle error states** - Show error messages with retry options + +```jsx +// βœ… Required error boundary pattern +import { EmptyState, EmptyStateHeader, EmptyStateIcon } from '@patternfly/react-core'; + +if (isLoading) return ; +if (error) return ; +if (!data?.length) return ; +``` + +## Performance Rules + +### Required Optimizations +- βœ… **Use React.memo for list items** - Prevent unnecessary re-renders +- βœ… **Use useCallback for event handlers** - Stable references +- βœ… **Use useMemo for expensive calculations** - Cache computed values +- βœ… **Implement virtualization for large lists** - Use react-window for 1000+ items + +### Testing Rules +- βœ… **Test component interactions** - User events and state changes +- βœ… **Test accessibility** - ARIA labels and keyboard navigation +- βœ… **Test error states** - Loading, error, and empty states +- ❌ **Don't test PatternFly component internals** - Focus on your component logic + +## Essential Do's and Don'ts + +### βœ… Do's +- Compose PatternFly components to build complex UIs +- Use proper component hierarchy and separation of concerns +- Implement error boundaries and loading states +- Use React hooks for state management +- Memoize expensive computations and callbacks +- Write tests for component behavior + +### ❌ Don'ts +- Create custom components when PatternFly components exist +- Mix state management patterns inconsistently +- Ignore error handling and loading states +- Create deeply nested component hierarchies +- Skip performance optimization for large data sets +- Tightly couple components to specific data structures + +## Quick Reference +- **[PatternFly Components](https://www.patternfly.org/components)** - Official component documentation +- **[React Patterns](https://reactpatterns.com/)** - Common React patterns +- **[Testing Library](https://testing-library.com/)** - Component testing best practices \ No newline at end of file diff --git a/ai-documentation/guidelines/styling-standards.md b/ai-documentation/guidelines/styling-standards.md new file mode 100644 index 00000000..20ff15ef --- /dev/null +++ b/ai-documentation/guidelines/styling-standards.md @@ -0,0 +1,221 @@ +# Styling Standards + +Essential CSS and styling rules for PatternFly React applications. + +## Related Files +- [**PatternFly Guidelines**](./README.md) - Core development principles +- [**Component Rules**](./component-architecture.md) - Component structure patterns +- [**Layout Rules**](../components/layout/README.md) - Page layout styling + +## Class Naming Rules + +### PatternFly v6 Requirements +- βœ… **ALWAYS use `pf-v6-` prefix** - All PatternFly v6 classes +- ❌ **NEVER use legacy prefixes** - No `pf-v5-`, `pf-v4-`, or `pf-c-` + +```css +/* βœ… Correct v6 classes */ +.pf-v6-c-button /* Components */ +.pf-v6-u-margin-md /* Utilities */ +.pf-v6-l-grid /* Layouts */ + +/* ❌ Wrong - Don't use these */ +.pf-v5-c-button +.pf-c-button +``` + +## Utility-First Rules + +> **No inline styles:** Use PatternFly layout and spacing utilities instead of `style` props or custom CSS for layout and spacing. + +### Use PatternFly Utilities First +```jsx +// βœ… Correct - Use PatternFly utilities +
+ +// ❌ Wrong - Custom CSS when utilities exist +
+``` + +### Common Utility Patterns +```css +/* Spacing */ +.pf-v6-u-margin-{xs|sm|md|lg|xl} +.pf-v6-u-padding-{xs|sm|md|lg|xl} +.pf-v6-u-margin-top-md +.pf-v6-u-padding-left-lg + +/* Typography */ +.pf-v6-u-text-align-{left|center|right} +.pf-v6-u-font-weight-{light|normal|bold} +.pf-v6-u-font-size-{sm|md|lg} + +/* Colors */ +.pf-v6-u-color-{primary|secondary|success|warning|danger} +.pf-v6-u-background-color-primary +``` + +## Design Token Rules + +### Use Semantic PatternFly Tokens for Custom CSS +- βœ… **Use semantic tokens** (e.g., `--pf-v6-global--primary-color--light`) for custom CSS. These tokens do not end in numbers and are intended for application-level styling. +- ❌ **Don't use base tokens** (which end in numbers, e.g., `--pf-v6-global--Color--100`) for custom CSS. Base tokens are for internal PatternFly use and may change. + +```css +.custom-component { + /* βœ… Correct - Use semantic tokens */ + color: var(--pf-v6-global--primary-color--light); + margin: var(--pf-v6-global--spacer--md); + + /* ❌ Wrong - Hardcoded values or base tokens */ + /* color: #333333; */ + /* color: var(--pf-v6-global--Color--100); */ + /* margin: 16px; */ +} +``` + +### Essential Token Categories +```css +/* Semantic Colors */ +--pf-v6-global--primary-color--light +--pf-v6-global--primary-color--dark +--pf-v6-global--background-color--light + +/* Spacing */ +--pf-v6-global--spacer--{xs|sm|md|lg|xl} + +/* Typography */ +--pf-v6-global--FontFamily--text +--pf-v6-global--FontSize--md +``` + +## Responsive Design Rules + +### Use PatternFly Responsive Utilities +```css +/* Mobile-first responsive patterns */ +.pf-v6-u-display-none-on-sm /* Hide on small screens */ +.pf-v6-u-display-block-on-md /* Show on medium+ */ +.pf-v6-u-text-align-center-on-lg /* Center on large+ */ +``` + +### Grid Layout Patterns +```jsx +
+
+ Responsive content +
+
+``` + +## Component Styling Rules + +> **No emojis or raw icons:** Always use PatternFly's React icon components (from `@patternfly/react-icons`) for all icons, including status, trend, and navigation icons. +> +> **No direct HTML headings or paragraphs:** Use PatternFly's `Title` for headings and `Content` with `component="p"` for paragraphs. + +### Button Styling +```jsx +// βœ… Use PatternFly variants + + + +// βœ… Add utilities for spacing + +``` + +### Form Styling +```jsx +
+ + + +
+``` + +## Performance Rules + +### CSS Efficiency +- βœ… **Use single utility classes** - More efficient than custom CSS +- βœ… **Import only needed CSS** - Tree shake unused styles +- ❌ **Don't create custom classes** - When PatternFly utilities exist + +## Troubleshooting Rules + +### Common Issues +1. **Missing styles** - Ensure PatternFly CSS is imported +2. **Class conflicts** - PatternFly classes should not be overridden +3. **Version mismatches** - All PatternFly packages must use same version + +### Debug Tools +- **Browser DevTools** - Inspect applied PatternFly classes +- **PatternFly DevTools** - Browser extension for debugging + +## Utility Class Usage Guidance + +> **Caution:** Avoid over-relying on utility classes to style components. Prefer using the component's own props and API for layout and appearance, as these are designed for recommended use cases. Use utility classes only when necessary, and add a comment explaining why the utility class is required. This approach helps ensure your code remains maintainable and aligned with future PatternFly updates. + +## Essential Do's and Don'ts + +### βœ… Do's +- Use PatternFly v6 classes exclusively +- Prefer component props and API for styling before using utility classes +- Use utility classes minimally, with comments explaining their necessity +- Use PatternFly design tokens for custom styles +- Test responsive behavior on different screen sizes +- Follow mobile-first responsive patterns + +### ❌ Don'ts +- Over-rely on utility classes to force component appearance +- Mix PatternFly versions +- Override PatternFly component internals +- Use hardcoded values instead of design tokens +- Create custom CSS when utilities exist +- Ignore responsive design requirements + +## Quick Reference +- **[PatternFly Utilities](https://www.patternfly.org/utilities)** - Complete utility documentation +- **[Design Tokens](https://www.patternfly.org/tokens)** - Available design tokens +- **[Responsive Design](https://www.patternfly.org/layouts)** - Layout and responsive patterns + +## Do/Don't Examples + +### No Inline Styles +**Do:** +```jsx +// Use PatternFly utility classes +
Content
+``` +**Don't:** +```jsx +// Avoid style props for layout/spacing +
Content
+``` + +### No Emojis or Raw Icons +**Do:** +```jsx +import ArrowUpIcon from '@patternfly/react-icons/dist/esm/icons/arrow-up-icon'; + +``` +**Don't:** +```jsx +πŸ“ˆ +``` + +### No Direct HTML Headings or Paragraphs +**Do:** +```jsx +import { Title, Content } from '@patternfly/react-core'; +Dashboard +This is a PatternFly app. +``` +**Don't:** +```jsx +

Dashboard

+

This is a PatternFly app.

+``` + +--- + +> **Note:** `PageHeader` is not a PatternFly component in v6+. Use `PageSection`, `Title`, and layout components instead. \ No newline at end of file diff --git a/ai-documentation/resources/external-links.md b/ai-documentation/resources/external-links.md new file mode 100644 index 00000000..d7dd2870 --- /dev/null +++ b/ai-documentation/resources/external-links.md @@ -0,0 +1,217 @@ +# External References + +This document provides links to official PatternFly documentation, repositories, and helpful external resources for AI coders working with PatternFly React applications. + +## Introduction + +External resources are essential for staying current with PatternFly updates, finding implementation examples, and troubleshooting issues. This curated list provides direct access to the most important PatternFly resources and community support channels. + +## Related Files + +- [**Local Resources**](./local-files.md) - Project-specific documentation files +- [**Code Examples**](./code-examples.md) - Reusable code snippets and patterns +- [**Setup Guide**](../setup/README.md) - Initial project setup resources +- [**Troubleshooting**](../troubleshooting/common-issues.md) - Problem-solving resources + +## Official PatternFly Documentation + +### Primary Documentation +- **[PatternFly.org](https://www.patternfly.org/)** - Main documentation site with component APIs and examples +- **[PatternFly Design Guidelines](https://www.patternfly.org/get-started/design)** - Design principles and patterns +- **[PatternFly React Components](https://www.patternfly.org/components)** - Complete component library documentation +- **[PatternFly Layouts](https://www.patternfly.org/layouts)** - Layout system and grid documentation + +### Component-Specific Documentation +- **[Button Component](https://www.patternfly.org/components/button)** - Button variants and usage +- **[Table Component](https://www.patternfly.org/components/table)** - Composable table implementation +- **[Dropdown Component](https://www.patternfly.org/components/menus/dropdown)** - Dropdown and menu patterns +- **[Toolbar Component](https://www.patternfly.org/components/toolbar)** - Toolbar with filters and actions +- **[Page Component](https://www.patternfly.org/components/page)** - Page layout and structure +- **[Icon Component](https://www.patternfly.org/components/icon)** - Icon usage and sizing + +### Specialized Features +- **[PatternFly Charts](https://www.patternfly.org/charts/about)** - Data visualization guidelines +- **[PatternFly AI - Chatbot](https://www.patternfly.org/patternfly-ai/chatbot/overview)** - AI chatbot components +- **[Accessibility Guidelines](https://www.patternfly.org/accessibility/accessibility-fundamentals)** - WCAG compliance and best practices + +## Official Repositories + +### Core Repositories +- **[PatternFly React](https://github.com/patternfly/patternfly-react)** - Main React component library +- **[PatternFly Core](https://github.com/patternfly/patternfly)** - HTML/CSS foundation +- **[PatternFly React Seed](https://github.com/patternfly/patternfly-react-seed)** - Starter template for new projects + +### Specialized Packages +- **[PatternFly Charts Repository](https://github.com/patternfly/patternfly-react/tree/main/packages/react-charts)** - Charts package source and examples +- **[PatternFly Icons](https://github.com/patternfly/patternfly-react/tree/main/packages/react-icons)** - Icon library source +- **[PatternFly Tokens](https://github.com/patternfly/patternfly-react/tree/main/packages/react-tokens)** - Design tokens package + +### Example Applications +- **[PatternFly Demo App](https://github.com/patternfly/patternfly-react-demo-app)** - Complete demo application +- **[PatternFly Quickstarts](https://github.com/patternfly/patternfly-quickstarts)** - Interactive tutorials and guides + +## Component Examples and Code Snippets + +### "View Code" Sections +Most PatternFly component pages include "View Code" sections that provide working examples: +- Navigate to any component page on [patternfly.org](https://www.patternfly.org/) +- Look for the "View Code" button or link +- Copy and adapt the provided code snippets +- Use these as starting points for your implementations + +### Repository Examples +Find practical examples in the PatternFly repositories: +- **Component Examples**: `patternfly-react/packages/react-core/src/components/[ComponentName]/examples/` +- **Demo Files**: `*.tsx` and `*.jsx` files in component directories +- **Test Files**: Component test files often contain usage examples + +### Useful Repository Paths +``` +patternfly-react/ +β”œβ”€β”€ packages/react-core/src/components/ +β”‚ β”œβ”€β”€ Button/examples/ +β”‚ β”œβ”€β”€ Table/examples/ +β”‚ β”œβ”€β”€ Dropdown/examples/ +β”‚ └── [ComponentName]/examples/ +β”œβ”€β”€ packages/react-table/src/components/ +└── packages/react-charts/src/components/ +``` + +## Charts and Visualization Resources + +### PatternFly Charts +- **[Charts README](https://github.com/patternfly/patternfly-react/tree/main/packages/react-charts#readme)** - Installation and usage guide +- **[Victory.js Documentation](https://formidable.com/open-source/victory/)** - Underlying charting library +- **[ECharts Documentation](https://echarts.apache.org/)** - Alternative charting library + +### Chart Examples +- **[Chart Component Examples](https://github.com/patternfly/patternfly-react/tree/main/packages/react-charts/src/components)** - Source code examples +- **[PatternFly Chart Demos](https://www.patternfly.org/charts)** - Interactive chart examples + +## Chatbot Resources + +### PatternFly Chatbot +- **[Chatbot Overview](https://www.patternfly.org/patternfly-ai/chatbot/overview)** - Main chatbot documentation +- **[Basic Chatbot Demo](https://www.patternfly.org/patternfly-ai/chatbot/overview/demo/basic-chatbot)** - Simple chatbot implementation +- **[Embedded Chatbot Demo](https://www.patternfly.org/patternfly-ai/chatbot/overview/demo/embedded-chatbot)** - Embedded chatbot pattern +- **[Chatbot Demos Overview](https://www.patternfly.org/patternfly-ai/chatbot/overview/demo)** - All chatbot demo variations + +### Implementation Resources +- **Demo Source Code**: Available on each demo page via "View Code" sections +- **Component API**: Detailed props and usage information +- **Integration Examples**: How to integrate with existing PatternFly applications + +## Community and Support + +### GitHub Resources +- **[Issues](https://github.com/patternfly/patternfly-react/issues)** - Bug reports and feature requests +- **[Discussions](https://github.com/patternfly/patternfly-react/discussions)** - Community Q&A and discussions +- **[Pull Requests](https://github.com/patternfly/patternfly-react/pulls)** - Code contributions and reviews + +### Communication Channels +- **[PatternFly Slack](https://patternfly.slack.com/)** - Real-time community support +- **[PatternFly Forum](https://forum.patternfly.org/)** - Long-form discussions and help +- **[Stack Overflow](https://stackoverflow.com/questions/tagged/patternfly)** - Technical Q&A with `patternfly` tag + +## Development Tools and Extensions + +### Browser Extensions +- **[React Developer Tools](https://chrome.google.com/webstore/detail/react-developer-tools/)** - React component debugging +- **[PatternFly DevTools](https://github.com/patternfly/patternfly-devtools)** - PatternFly-specific debugging tools + +### IDE Extensions +- **[VS Code PatternFly Snippets](https://marketplace.visualstudio.com/search?term=patternfly)** - Code snippets for VS Code +- **[ES7+ React/Redux/React-Native snippets](https://marketplace.visualstudio.com/items?itemName=dsznajder.es7-react-js-snippets)** - React development shortcuts + +## Learning Resources + +### Tutorials and Guides +- **[Getting Started Guide](https://www.patternfly.org/get-started/develop)** - Development setup and first steps +- **[Migration Guides](https://www.patternfly.org/get-started/upgrade)** - Upgrading between PatternFly versions +- **[Design System Principles](https://www.patternfly.org/get-started/design)** - Understanding PatternFly design philosophy + +### Video Resources +- **[PatternFly YouTube Channel](https://www.youtube.com/c/PatternFly)** - Tutorials and presentations +- **[Red Hat Developer](https://www.youtube.com/c/RedHatDeveloper)** - Related development content + +## Version-Specific Resources + +### PatternFly v6 (Current) +- **[v6 Documentation](https://www.patternfly.org/)** - Current version documentation +- **[v6 Migration Guide](https://www.patternfly.org/get-started/upgrade)** - Upgrading from v5 to v6 +- **[v6 Release Notes](https://github.com/patternfly/patternfly-react/releases)** - Latest changes and updates + +### Legacy Versions +- **[v5 Documentation](https://v5.patternfly.org/)** - Previous version (for reference only) +- **[v4 Documentation](https://v4.patternfly.org/)** - Older version (for legacy projects) + +## API References + +### Node.js and npm +- **[Node.js Downloads](https://nodejs.org/)** - Official Node.js installation +- **[npm Documentation](https://docs.npmjs.com/)** - Package manager documentation +- **[nvm (Node Version Manager)](https://github.com/nvm-sh/nvm)** - Managing multiple Node.js versions + +### React Ecosystem +- **[React Documentation](https://react.dev/)** - Official React documentation +- **[React Router](https://reactrouter.com/)** - Client-side routing +- **[React Testing Library](https://testing-library.com/docs/react-testing-library/intro/)** - Component testing + +## Accessibility Resources + +### WCAG Guidelines +- **[WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)** - Web accessibility standards +- **[ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/)** - ARIA implementation patterns +- **[WebAIM](https://webaim.org/)** - Accessibility evaluation and guidance + +### Testing Tools +- **[axe DevTools](https://www.deque.com/axe/devtools/)** - Accessibility testing browser extension +- **[WAVE](https://wave.webaim.org/)** - Web accessibility evaluation tool +- **[Lighthouse](https://developers.google.com/web/tools/lighthouse)** - Performance and accessibility auditing + +## Performance Resources + +### Optimization Guides +- **[React Performance](https://react.dev/learn/render-and-commit)** - React rendering optimization +- **[Webpack Bundle Analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer)** - Bundle size analysis +- **[Web Vitals](https://web.dev/vitals/)** - Core web performance metrics + +### Monitoring Tools +- **[React DevTools Profiler](https://react.dev/blog/2018/09/10/introducing-the-react-profiler)** - Component performance profiling +- **[Chrome DevTools](https://developers.google.com/web/tools/chrome-devtools)** - Browser performance tools + +## Best Practices for Using External Resources + +### Documentation Strategy +1. **Start with Official Docs**: Always check [patternfly.org](https://www.patternfly.org/) first +2. **Use "View Code" Sections**: Copy working examples from component pages +3. **Check Repository Examples**: Look at `*.tsx`/`*.jsx` files in PatternFly repos +4. **Provide Context to AI**: Share links and code snippets when asking for help + +### Staying Current +1. **Follow Release Notes**: Monitor [GitHub releases](https://github.com/patternfly/patternfly-react/releases) +2. **Join Community Channels**: Participate in Slack or forum discussions +3. **Subscribe to Updates**: Watch PatternFly repositories for notifications +4. **Regular Documentation Review**: Periodically review component documentation for updates + +### Troubleshooting Approach +1. **Search Issues First**: Check GitHub issues for similar problems +2. **Consult Multiple Sources**: Cross-reference documentation with examples +3. **Test Incrementally**: Isolate problems with minimal examples +4. **Share Specific Context**: Provide version numbers and code snippets when seeking help + +## Quick Reference Links + +### Most Frequently Used +- [PatternFly Components](https://www.patternfly.org/components) +- [PatternFly React Repository](https://github.com/patternfly/patternfly-react) +- [PatternFly React Seed](https://github.com/patternfly/patternfly-react-seed) +- [Charts README](https://github.com/patternfly/patternfly-react/tree/main/packages/react-charts#readme) +- [Chatbot Overview](https://www.patternfly.org/patternfly-ai/chatbot/overview) + +### Emergency Resources +- [GitHub Issues](https://github.com/patternfly/patternfly-react/issues) +- [Stack Overflow PatternFly Tag](https://stackoverflow.com/questions/tagged/patternfly) +- [PatternFly Slack](https://patternfly.slack.com/) + +Remember: **Always consult the official PatternFly documentation for your project's specific package versions.** Providing AI assistants with working code snippets or links to versioned documentation is highly effective for getting accurate implementation guidance. \ No newline at end of file diff --git a/ai-documentation/resources/local-files.md b/ai-documentation/resources/local-files.md new file mode 100644 index 00000000..a5957904 --- /dev/null +++ b/ai-documentation/resources/local-files.md @@ -0,0 +1,217 @@ +# Local Resources + +This document describes project-specific documentation files and local resources available for PatternFly React development. + +## Introduction + +Local resources provide project-specific context, component information, and specialized guidance that complements the official PatternFly documentation. These files contain curated information about PatternFly components, chatbot implementation details, and project-specific patterns. + +## Related Files + +- [**External References**](./external-links.md) - Official PatternFly documentation and resources +- [**Code Examples**](./code-examples.md) - Reusable code snippets and patterns +- [**PatternFly Guidelines**](../guidelines/README.md) - Core development principles +- [**Chatbot Integration**](../chatbot/README.md) - Chatbot component documentation + +## Available Local Documentation Files + +### patternfly-chatbot.txt + +**Location**: [`patternfly-chatbot.txt`](../../patternfly-chatbot.txt) + +**Purpose**: Primary context file for PatternFly Chatbot structure and components. + +**Contents**: +- Chatbot component architecture and hierarchy +- Implementation patterns for chat interfaces +- Component-specific usage guidelines +- Integration examples with PatternFly applications +- Best practices for chatbot development + +**Usage Guidelines**: +- **Primary Reference**: Use this as the main source for chatbot implementation guidance +- **Component Structure**: Refer to this file for understanding chatbot component relationships +- **AI Assistant Context**: Provide relevant sections to AI assistants when working on chatbot features +- **Implementation Priority**: This guidance takes precedence over general PatternFly patterns for chatbot development + +**When to Reference**: +- Building new chatbot interfaces +- Integrating chatbot components with existing applications +- Troubleshooting chatbot-specific issues +- Understanding chatbot component APIs and props + +### patternfly-react-component-groups.txt + +**Location**: [`patternfly-react-component-groups.txt`](../../patternfly-react-component-groups.txt) + +**Purpose**: Comprehensive reference for PatternFly React component groups and specialized component libraries. + +**Contents**: +- Component group classifications and categories +- Specialized component libraries and packages +- Component relationships and dependencies +- Advanced component patterns and compositions +- Enterprise-specific component implementations + +**Usage Guidelines**: +- **Component Discovery**: Use to find appropriate components for specific use cases +- **Advanced Patterns**: Reference for complex component compositions +- **Enterprise Features**: Guidance for enterprise-specific component implementations +- **Component Groups**: Understanding how components work together in larger patterns + +**When to Reference**: +- Planning complex UI implementations +- Looking for specialized component libraries +- Understanding component group relationships +- Implementing enterprise-level features + +## Local File Integration Patterns + +### Reading Local Documentation +```javascript +// Example: Referencing local documentation in code comments +/** + * User Management Table Component + * + * Implementation follows patterns from: + * - patternfly-react-component-groups.txt (Table patterns section) + * - Local documentation: /documentation/components/data-display/ + * + * Key features: + * - Bulk selection with component group patterns + * - Advanced filtering using specialized components + * - Enterprise-grade data handling + */ +``` + +### AI Assistant Context Sharing +When working with AI assistants, provide relevant local documentation context: + +```markdown +// Example context sharing +"I'm implementing a chatbot feature. Here's the relevant section from our +local patternfly-chatbot.txt file: [paste relevant section]. Please help me +implement this pattern with proper PatternFly components." +``` + +### Documentation Cross-References +```markdown +// Table and data view documentation are now split: +// - Table rules: /documentation/components/data-display/table.md +// - Data view rules: /documentation/components/data-display/README.md +``` + +## Project-Specific Patterns + +### Component Selection Workflow +1. **Check Local Documentation**: Review relevant sections in local `.txt` files +2. **Consult Documentation Repo**: Use this documentation repository for implementation guidance +3. **Reference Official Docs**: Verify with official PatternFly documentation +4. **Implement with Context**: Apply local patterns and project-specific requirements + +### Local Documentation Maintenance +```markdown +// Example documentation update pattern +/** + * When updating local documentation files: + * 1. Update the source .txt file + * 2. Update related documentation in /documentation/ + * 3. Update cross-references and links + * 4. Test examples and code snippets + * 5. Notify team of changes + */ +``` + +## Integration with Development Workflow + +### IDE Integration +```json +// Example VS Code settings for local documentation +{ + "files.associations": { + "*.txt": "markdown" + }, + "search.include": { + "patternfly-*.txt": true, + "documentation/**/*.md": true + } +} +``` + +### Documentation Search Patterns +```bash +# Example search commands for local documentation +grep -r "chatbot" patternfly-*.txt documentation/ +grep -r "component-groups" patternfly-*.txt documentation/ +grep -r "specific-pattern" documentation/ patternfly-*.txt +``` + +### Build Integration +```javascript +// Example build script integration +const fs = require('fs'); + +// Read local documentation for build-time validation +const chatbotDocs = fs.readFileSync('patternfly-chatbot.txt', 'utf8'); +const componentGroups = fs.readFileSync('patternfly-react-component-groups.txt', 'utf8'); + +// Validate component usage against local documentation +// Generate component usage reports +// Update documentation cross-references +``` + +## Best Practices for Local Resources + +### Documentation Usage +- **Primary Source**: Use local documentation as the primary source for project-specific patterns +- **Context Sharing**: Always provide relevant local documentation context to AI assistants +- **Cross-Reference**: Link local documentation with official PatternFly resources +- **Keep Current**: Regularly update local documentation to match project evolution + +### File Organization +- **Centralized Location**: Keep local documentation files in the project root for easy access +- **Clear Naming**: Use descriptive filenames that indicate content and purpose +- **Version Control**: Track changes to local documentation files in version control +- **Team Access**: Ensure all team members can access and contribute to local documentation + +### Integration Strategies +- **Development Workflow**: Integrate local documentation into daily development practices +- **Code Reviews**: Reference local documentation during code reviews +- **Onboarding**: Use local documentation for team member onboarding +- **Knowledge Sharing**: Share local documentation insights across teams + +## Troubleshooting Local Resources + +### Common Issues +1. **File Not Found**: Verify file paths and locations +2. **Outdated Information**: Check file modification dates and update as needed +3. **Inconsistent Patterns**: Cross-reference with official documentation +4. **Missing Context**: Ensure complete information is available for AI assistants + +### Maintenance Tasks +- **Regular Reviews**: Periodically review and update local documentation +- **Link Validation**: Verify internal and external links are working +- **Content Accuracy**: Ensure information matches current PatternFly versions +- **Team Feedback**: Collect and incorporate team feedback on documentation usefulness + +## Quick Reference + +### Local File Locations +- **Chatbot Documentation**: `patternfly-chatbot.txt` +- **Component Groups**: `patternfly-react-component-groups.txt` +- **Documentation Repository**: `documentation/` directory +- **Setup Instructions**: `README.md` + +### Key Usage Patterns +- **Chatbot Development**: Start with `patternfly-chatbot.txt` +- **Component Selection**: Reference `patternfly-react-component-groups.txt` +- **Implementation Guidance**: Use documentation repository structure +- **AI Assistant Context**: Provide relevant local documentation sections + +### Integration Points +- **Development**: Reference during component implementation +- **Code Review**: Validate against local patterns +- **Documentation**: Cross-reference in documentation files +- **Team Communication**: Share context in discussions and planning + +Remember: Local documentation files provide project-specific context that should be used alongside official PatternFly documentation. Always provide relevant sections to AI assistants when seeking implementation guidance, as this context significantly improves the accuracy and relevance of the assistance provided. \ No newline at end of file diff --git a/ai-documentation/setup/README.md b/ai-documentation/setup/README.md new file mode 100644 index 00000000..24084b6f --- /dev/null +++ b/ai-documentation/setup/README.md @@ -0,0 +1,81 @@ +# Setup Guide + +This section covers the initial setup and configuration for PatternFly React development projects. + +## Introduction + +The setup process for PatternFly React applications involves several key steps including environment preparation, project initialization, and dependency management. This guide provides comprehensive instructions for AI coders to establish a proper development environment. + +## Related Files + +- [**Quick Start**](./quick-start.md) - Step-by-step project initialization +- [**Development Environment**](./development-environment.md) - Environment configuration and tools +- [**PatternFly Guidelines**](../guidelines/README.md) - Core development principles +- [**Troubleshooting Setup Issues**](../troubleshooting/common-issues.md#setup-issues) - Common setup problems + +## Prerequisites + +Before starting any PatternFly React project, ensure the following requirements are met: + +### Required Software + +#### Node.js & npm +- **Requirement**: Node.js and npm must be installed and available in PATH +- **Verification**: Run `node --version && npm --version` to confirm installation +- **Installation**: Download from [https://nodejs.org/](https://nodejs.org/) +- **AI Note**: AI can verify these commands and guide installation if needed + +#### Optional: Node Version Manager (nvm) +- **Purpose**: Manage multiple Node.js versions +- **Usage**: If using nvm, ensure it's loaded and the correct Node version is active +- **Verification**: Run `nvm use node` to activate the latest version +- **AI Note**: Check if nvm is being used before proceeding with npm commands + +### System Requirements + +- **Operating System**: Windows, macOS, or Linux +- **Memory**: Minimum 4GB RAM (8GB recommended for development) +- **Storage**: At least 1GB free space for dependencies +- **Network**: Internet connection for package downloads + +## Project Initialization Methods + +### Method 1: PatternFly React Seed (Recommended) + +The PatternFly React Seed provides a complete scaffolding solution with: +- Pre-configured layout components +- Routing setup +- Build and test tools +- Development server configuration + +**Repository**: [patternfly-react-seed](https://github.com/patternfly/patternfly-react-seed) + +### Method 2: Manual Setup + +For custom project structures or specific requirements, manual setup allows full control over: +- Package selection +- Build configuration +- Project structure +- Development workflow + +## Next Steps + +1. Follow the [Quick Start Guide](./quick-start.md) for immediate project setup +2. Configure your [Development Environment](./development-environment.md) +3. Review [PatternFly Guidelines](../guidelines/README.md) for coding standards +4. Explore [Component Documentation](../components/) for implementation guidance + +## Best Practices + +- Always verify Node.js and npm versions before starting +- Use the PatternFly React Seed for new projects unless specific customization is required +- Keep dependencies up to date with PatternFly releases +- Follow semantic versioning for project dependencies +- Document any custom setup steps for team collaboration + +## Common Setup Scenarios + +- **New Project**: Use PatternFly React Seed +- **Existing React App**: Add PatternFly dependencies manually +- **Enterprise Environment**: Consider proxy and security requirements +- **Team Development**: Ensure consistent Node.js versions across team members \ No newline at end of file diff --git a/ai-documentation/setup/development-environment.md b/ai-documentation/setup/development-environment.md new file mode 100644 index 00000000..9eccccae --- /dev/null +++ b/ai-documentation/setup/development-environment.md @@ -0,0 +1,237 @@ +# Development Environment + +This guide covers the configuration of development tools and environment settings for optimal PatternFly React development. + +## Introduction + +A properly configured development environment enhances productivity and ensures consistent code quality when working with PatternFly React applications. This guide covers IDE setup, debugging tools, and development workflow optimization. + +## Related Files + +- [**Setup Guide**](./README.md) - Initial project setup +- [**Quick Start**](./quick-start.md) - Project initialization steps +- [**Styling Standards**](../guidelines/styling-standards.md) - CSS and styling configuration +- [**Performance Optimization**](../troubleshooting/performance.md) - Development performance tips + +## Development Server Configuration + +### Default Configuration +- **Port**: `9000` (default for PatternFly React Seed) +- **Hot Reload**: Enabled by default +- **Source Maps**: Available for debugging +- **Proxy Settings**: Configurable for API integration + +### Server Management +```bash +# Start development server +npm run start:dev + +# Start in background (recommended for AI development) +npm run start:dev & + +# Stop server (if running in foreground) +Ctrl+C +``` + +### Environment Variables +Create a `.env` file in the project root for environment-specific settings: +```env +# Development server port +PORT=9000 + +# API endpoint configuration +REACT_APP_API_URL=http://localhost:3001 + +# Enable/disable specific features +REACT_APP_DEBUG_MODE=true +``` + +## IDE and Editor Configuration + +### Recommended Extensions (VS Code) +- **ES7+ React/Redux/React-Native snippets**: React development shortcuts +- **Auto Rename Tag**: Automatic HTML/JSX tag renaming +- **Bracket Pair Colorizer**: Visual bracket matching +- **GitLens**: Enhanced Git integration +- **Prettier**: Code formatting +- **ESLint**: Code linting + +### TypeScript Configuration +If using TypeScript with PatternFly: +```json +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "es6"], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"] +} +``` + +## Debugging Configuration + +### Browser DevTools Setup +1. **React Developer Tools**: Install browser extension for React debugging +2. **PatternFly DevTools**: Use browser inspector to examine PatternFly classes +3. **Network Tab**: Monitor API calls and resource loading +4. **Console**: Check for PatternFly-specific warnings or errors + +### VS Code Debugging +Create `.vscode/launch.json` for debugging: +```json +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Chrome", + "request": "launch", + "type": "pwa-chrome", + "url": "http://localhost:9000", + "webRoot": "${workspaceFolder}/src", + "breakOnLoad": true, + "sourceMapPathOverrides": { + "webpack:///src/*": "${webRoot}/*" + } + } + ] +} +``` + +## Build and Testing Environment + +### Build Scripts +```bash +# Development build +npm run build:dev + +# Production build +npm run build + +# Analyze bundle size +npm run analyze +``` + +### Testing Configuration +```bash +# Run tests +npm test + +# Run tests with coverage +npm run test:coverage + +# Run tests in watch mode +npm run test:watch +``` + +## Package Management + +### Dependency Management +- **Core Dependencies**: PatternFly React components +- **Peer Dependencies**: React, React-DOM +- **Dev Dependencies**: Build tools, testing utilities + +### Version Compatibility +Ensure compatible versions between: +- React and PatternFly React +- PatternFly Core CSS and PatternFly React +- Node.js and npm versions + +### Update Strategy +```bash +# Check for outdated packages +npm outdated + +# Update PatternFly packages +npm update @patternfly/react-core @patternfly/react-table + +# Verify compatibility after updates +npm test +``` + +## Performance Optimization + +### Development Performance +- **Code Splitting**: Implement lazy loading for large components +- **Bundle Analysis**: Regular bundle size monitoring +- **Memory Management**: Monitor for memory leaks during development + +### Hot Module Replacement (HMR) +- Enabled by default in PatternFly React Seed +- Preserves component state during development +- Faster development iteration cycles + +## Environment-Specific Configuration + +### Development Environment +- Source maps enabled +- Detailed error messages +- Hot reloading active +- Debug mode available + +### Production Environment +- Minified bundles +- Optimized assets +- Error boundaries +- Performance monitoring + +## Workflow Integration + +### Git Hooks +Set up pre-commit hooks for code quality: +```json +{ + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "src/**/*.{js,jsx,ts,tsx}": [ + "eslint --fix", + "prettier --write" + ] + } +} +``` + +### Continuous Integration +Configure CI/CD for: +- Automated testing +- Build verification +- Dependency security scanning +- Performance regression testing + +## Troubleshooting Development Environment + +### Common Issues +- **Port conflicts**: Change port in package.json or environment variables +- **Memory issues**: Increase Node.js memory limit +- **Slow builds**: Optimize webpack configuration +- **Hot reload failures**: Clear cache and restart development server + +### Performance Monitoring +- Monitor build times +- Track bundle size changes +- Profile component rendering +- Analyze network requests + +## Best Practices + +1. **Keep dependencies updated** but test thoroughly +2. **Use environment variables** for configuration +3. **Enable source maps** for debugging +4. **Configure linting and formatting** for consistency +5. **Set up proper debugging tools** for efficient development +6. **Monitor performance** during development +7. **Use version control** for environment configuration files \ No newline at end of file diff --git a/ai-documentation/setup/quick-start.md b/ai-documentation/setup/quick-start.md new file mode 100644 index 00000000..a1380410 --- /dev/null +++ b/ai-documentation/setup/quick-start.md @@ -0,0 +1,129 @@ +# Quick Start Guide + +This guide provides step-by-step instructions to get a PatternFly React application running quickly using the PatternFly React Seed. + +## Introduction + +The Quick Start process uses the official PatternFly React Seed repository to scaffold a complete application with pre-configured components, routing, and build tools. This is the fastest way to begin PatternFly development. + +## Related Files + +- [**Setup Guide**](./README.md) - Prerequisites and setup overview +- [**Development Environment**](./development-environment.md) - Environment configuration +- [**PatternFly Guidelines**](../guidelines/README.md) - Development best practices +- [**Common Issues**](../troubleshooting/common-issues.md) - Troubleshooting setup problems + +## Step-by-Step Instructions + +### Step 1: Clone the Repository + +```bash +git clone https://github.com/patternfly/patternfly-react-seed +``` + +**AI Note**: This command can be executed by AI assistants to initialize the project. + +### Step 2: Navigate to Project Directory + +```bash +cd patternfly-react-seed +``` + +**Important**: All subsequent npm commands must be run from this directory. + +### Step 3: Install Dependencies + +```bash +npm install +``` + +**AI Note**: +- AI can run this command after verifying Node.js and npm are properly installed +- This step downloads all required PatternFly and React dependencies +- May take several minutes depending on network speed + +### Step 4: Start Development Server + +```bash +npm run start:dev +``` + +**Important Considerations**: +- **User Recommendation**: Run this command in a separate terminal to keep it active +- **Default URL**: Development server typically runs at `http://localhost:9000` +- **Additional Information**: Check the project's [README.md](../../README.md) for server configuration details + +## Verification Steps + +After completing the setup: + +1. **Check Server Status**: Ensure the development server starts without errors +2. **Access Application**: Open `http://localhost:9000` in a web browser +3. **Verify Components**: Confirm PatternFly components are rendering correctly +4. **Test Hot Reload**: Make a small change to verify live reloading works + +## What You Get + +The PatternFly React Seed includes: + +### Pre-configured Components +- Page layout structure +- Navigation components +- Basic routing setup +- Example PatternFly components + +### Development Tools +- Webpack configuration +- Hot module replacement +- Development server +- Build scripts + +### Testing Setup +- Jest configuration +- Testing utilities +- Example test files + +## Next Steps + +1. **Explore the Codebase**: Review the generated file structure +2. **Read Documentation**: Check [PatternFly Guidelines](../guidelines/README.md) +3. **Start Development**: Begin building your application components +4. **Configure Environment**: Set up [Development Environment](./development-environment.md) tools + +## Common Post-Setup Tasks + +### Customizing the Application +- Update application name and metadata +- Configure routing for your specific needs +- Add custom components and pages + +### Development Workflow +- Set up version control (if not already done) +- Configure IDE/editor for PatternFly development +- Install additional development tools + +### Team Setup +- Share environment configuration +- Document custom setup steps +- Establish coding standards and practices + +## Troubleshooting Quick Start + +If you encounter issues during setup: + +1. **Verify Prerequisites**: Ensure Node.js and npm are properly installed +2. **Check Network**: Confirm internet connectivity for package downloads +3. **Clear Cache**: Try `npm cache clean --force` if installation fails +4. **Port Conflicts**: If port 9000 is in use, check for alternative ports +5. **Permission Issues**: On Unix systems, avoid using `sudo` with npm + +For detailed troubleshooting, see [Common Issues](../troubleshooting/common-issues.md). + +## Success Indicators + +You've successfully completed the Quick Start when: +- βœ… Repository is cloned without errors +- βœ… Dependencies install successfully +- βœ… Development server starts and runs +- βœ… Application loads in browser at `http://localhost:9000` +- βœ… PatternFly components are visible and styled correctly \ No newline at end of file diff --git a/ai-documentation/troubleshooting/common-issues.md b/ai-documentation/troubleshooting/common-issues.md new file mode 100644 index 00000000..7074bfc8 --- /dev/null +++ b/ai-documentation/troubleshooting/common-issues.md @@ -0,0 +1,569 @@ +# Common Issues + +This document covers frequently encountered problems and their solutions when working with PatternFly React applications. + +## Introduction + +PatternFly development can present various challenges ranging from setup issues to component-specific problems. This guide provides systematic approaches to diagnosing and resolving common issues that AI coders encounter when building PatternFly applications. + +## Related Files + +- [**Component Issues**](./component-issues.md) - Component-specific troubleshooting +- [**Performance Optimization**](./performance.md) - Performance-related problems and solutions +- [**Setup Guide**](../setup/README.md) - Initial setup troubleshooting +- [**External References**](../resources/external-links.md) - Additional troubleshooting resources + +## Setup Issues + +### Node.js and npm Problems + +#### Issue: Command not found errors +```bash +# Error messages +'node' is not recognized as an internal or external command +'npm' is not recognized as an internal or external command +``` + +**Solutions**: +1. **Verify Installation**: + ```bash + # Check if Node.js is installed + node --version + npm --version + ``` + +2. **Reinstall Node.js**: + - Download from [https://nodejs.org/](https://nodejs.org/) + - Choose LTS version for stability + - Restart terminal after installation + +3. **PATH Configuration**: + ```bash + # Windows: Add to PATH environment variable + C:\Program Files\nodejs\ + + # macOS/Linux: Add to shell profile + export PATH="/usr/local/bin/node:$PATH" + ``` + +#### Issue: npm permission errors +```bash +# Error message +EACCES: permission denied, access '/usr/local/lib/node_modules' +``` + +**Solutions**: +1. **Use nvm (Recommended)**: + ```bash + # Install nvm + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash + + # Install and use Node.js + nvm install node + nvm use node + ``` + +2. **Fix npm permissions**: + ```bash + # Create global directory + mkdir ~/.npm-global + npm config set prefix '~/.npm-global' + + # Add to PATH + export PATH=~/.npm-global/bin:$PATH + ``` + +### Project Setup Issues + +#### Issue: Git clone failures +```bash +# Error message +fatal: repository 'https://github.com/patternfly/patternfly-react-seed' not found +``` + +**Solutions**: +1. **Check Network Connection**: Verify internet connectivity +2. **Use HTTPS instead of SSH**: + ```bash + git clone https://github.com/patternfly/patternfly-react-seed + ``` +3. **Check Repository URL**: Verify the repository exists and URL is correct + +#### Issue: npm install failures +```bash +# Error messages +npm ERR! network request failed +npm ERR! peer dep missing +``` + +**Solutions**: +1. **Clear npm cache**: + ```bash + npm cache clean --force + ``` + +2. **Delete node_modules and reinstall**: + ```bash + rm -rf node_modules package-lock.json + npm install + ``` + +3. **Check npm registry**: + ```bash + npm config get registry + # Should return: https://registry.npmjs.org/ + ``` + +4. **Install with legacy peer deps**: + ```bash + npm install --legacy-peer-deps + ``` + +### Development Server Issues + +#### Issue: Port already in use +```bash +# Error message +Error: listen EADDRINUSE: address already in use :::9000 +``` + +**Solutions**: +1. **Find and kill process**: + ```bash + # Windows + netstat -ano | findstr :9000 + taskkill /PID /F + + # macOS/Linux + lsof -ti:9000 | xargs kill -9 + ``` + +2. **Use different port**: + ```bash + PORT=3001 npm run start:dev + ``` + +3. **Update package.json**: + ```json + { + "scripts": { + "start:dev": "webpack serve --port 3001" + } + } + ``` + +#### Issue: Development server not starting +```bash +# Error message +Module not found: Error: Can't resolve 'webpack-dev-server' +``` + +**Solutions**: +1. **Reinstall dependencies**: + ```bash + rm -rf node_modules package-lock.json + npm install + ``` + +2. **Check webpack configuration**: + ```javascript + // Verify webpack.config.js exists and is properly configured + ``` + +3. **Install missing dependencies**: + ```bash + npm install webpack webpack-dev-server --save-dev + ``` + +## Import and Module Issues + +### PatternFly Component Import Errors + +#### Issue: Module not found errors +```bash +# Error message +Module not found: Can't resolve '@patternfly/react-core' +``` + +**Solutions**: +1. **Install PatternFly packages**: + ```bash + npm install @patternfly/react-core @patternfly/react-table @patternfly/react-icons + ``` + +2. **Check import syntax**: + ```jsx + // Correct imports + import { Button, Card } from '@patternfly/react-core'; + import { Table, Thead, Tbody } from '@patternfly/react-table'; + import { UserIcon } from '@patternfly/react-icons'; + ``` + +3. **Verify package.json dependencies**: + ```json + { + "dependencies": { + "@patternfly/react-core": "^6.x.x", + "@patternfly/react-table": "^6.x.x", + "@patternfly/react-icons": "^6.x.x" + } + } + ``` + +#### Issue: Charts module not found +```bash +# Error message +Module not found: Can't resolve '@patternfly/react-charts/victory' +``` + +**Solutions**: +1. **Install charts dependencies**: + ```bash + npm install @patternfly/react-charts victory + ``` + +2. **Use correct import paths**: + ```jsx + // Correct chart imports + import { ChartDonut, ChartLine } from '@patternfly/react-charts/victory'; + ``` + +3. **Clear cache and reinstall**: + ```bash + rm -rf node_modules package-lock.json + npm install + ``` + +#### Issue: Chatbot module not found +```bash +# Error message +Module not found: Can't resolve '@patternfly/chatbot/dist/dynamic/Chatbot' +``` + +**Solutions**: +1. **Install chatbot package**: + ```bash + npm install @patternfly/chatbot + ``` + +2. **Import CSS**: + ```jsx + import '@patternfly/chatbot/dist/css/main.css'; + ``` + +3. **Use correct import paths**: + ```jsx + import { Chatbot } from '@patternfly/chatbot/dist/dynamic/Chatbot'; + ``` + +## Styling Issues + +### CSS and Class Problems + +#### Issue: PatternFly styles not applied +```bash +# Symptoms: Components appear unstyled or with default browser styles +``` + +**Solutions**: +1. **Import PatternFly CSS**: + ```jsx + // In your main App.js or index.js + import '@patternfly/react-core/dist/styles/base.css'; + ``` + +2. **Check CSS import order**: + ```jsx + // PatternFly CSS should be imported before custom CSS + import '@patternfly/react-core/dist/styles/base.css'; + import './custom-styles.css'; + ``` + +3. **Verify webpack CSS handling**: + ```javascript + // webpack.config.js + module.exports = { + module: { + rules: [ + { + test: /\.css$/, + use: ['style-loader', 'css-loader'] + } + ] + } + }; + ``` + +#### Issue: Wrong PatternFly version classes +```jsx +// Problem: Using old class names +
// v4 class +
// v5 class +``` + +**Solutions**: +1. **Use PatternFly v6 classes**: + ```jsx + // Correct v6 classes +
+
+ ``` + +2. **Update class references**: + ```bash + # Find and replace old classes + grep -r "pf-c-" src/ + grep -r "pf-v5-" src/ + ``` + +3. **Use PatternFly components instead**: + ```jsx + // Instead of manual classes, use components + import { Button } from '@patternfly/react-core'; + + ``` + +### Layout and Responsive Issues + +#### Issue: Components not responsive +```jsx +// Problem: Fixed widths and heights +
+``` + +**Solutions**: +1. **Use PatternFly responsive utilities**: + ```jsx +
+ ``` + +2. **Implement responsive patterns**: + ```jsx +
+
+ Content +
+
+ ``` + +3. **Use container-based sizing**: + ```jsx + const [dimensions, setDimensions] = useState({ width: 0, height: 0 }); + + useEffect(() => { + const updateDimensions = () => { + if (containerRef.current) { + const { width, height } = containerRef.current.getBoundingClientRect(); + setDimensions({ width, height }); + } + }; + + updateDimensions(); + window.addEventListener('resize', updateDimensions); + return () => window.removeEventListener('resize', updateDimensions); + }, []); + ``` + +## Component-Specific Issues + +### Dropdown Clipping Issues + +#### Issue: Dropdown menu gets clipped +```jsx +// Problem: Dropdown appears cut off in scrollable containers +``` + +**Solutions**: +1. **Use appendTo prop**: + ```jsx + document.body, + position: 'right', + enableFlip: true + }} + > + ``` + +2. **Configure positioning**: + ```jsx + + ``` + +### Table Performance Issues + +#### Issue: Slow rendering with large datasets +```jsx +// Problem: Table becomes unresponsive with 1000+ rows +``` + +**Solutions**: +1. **Implement pagination**: + ```jsx + import { Pagination } from '@patternfly/react-core'; + + const [page, setPage] = useState(1); + const [perPage, setPerPage] = useState(20); + const paginatedData = data.slice((page - 1) * perPage, page * perPage); + ``` + +2. **Use virtualization**: + ```jsx + import { FixedSizeList as List } from 'react-window'; + + + {Row} + + ``` + +3. **Optimize re-renders**: + ```jsx + const MemoizedRow = React.memo(({ item }) => ( + + {item.name} + {item.email} + + )); + ``` + +## Build and Deployment Issues + +### Build Failures + +#### Issue: Build process fails +```bash +# Error message +npm ERR! Failed at the build script +``` + +**Solutions**: +1. **Check for TypeScript errors**: + ```bash + npx tsc --noEmit + ``` + +2. **Verify all imports**: + ```bash + # Check for unused imports + npm run lint + ``` + +3. **Clear build cache**: + ```bash + rm -rf dist/ build/ + npm run build + ``` + +#### Issue: Bundle size too large +```bash +# Warning: Bundle size exceeds recommended limit +``` + +**Solutions**: +1. **Analyze bundle**: + ```bash + npm install --save-dev webpack-bundle-analyzer + npx webpack-bundle-analyzer dist/ + ``` + +2. **Implement code splitting**: + ```jsx + const LazyComponent = React.lazy(() => import('./HeavyComponent')); + + }> + + + ``` + +3. **Tree shake unused code**: + ```javascript + // webpack.config.js + module.exports = { + optimization: { + usedExports: true, + sideEffects: false + } + }; + ``` + +## Browser Compatibility Issues + +### Cross-Browser Problems + +#### Issue: Components not working in specific browsers +```bash +# Symptoms: Features work in Chrome but not Safari/Firefox +``` + +**Solutions**: +1. **Check browser support**: + ```json + // package.json + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] + ``` + +2. **Add polyfills**: + ```bash + npm install core-js + ``` + ```jsx + // index.js + import 'core-js/stable'; + ``` + +3. **Test across browsers**: + - Use browser dev tools + - Test on actual devices + - Use browser testing services + +## Debugging Strategies + +### General Debugging Approach +1. **Check Console**: Look for error messages and warnings +2. **Isolate Problem**: Create minimal reproduction case +3. **Verify Versions**: Ensure compatible package versions +4. **Check Documentation**: Reference official PatternFly docs +5. **Search Issues**: Look for similar problems in GitHub issues + +### Debug Tools +- **React DevTools**: Inspect component state and props +- **Browser DevTools**: Network, console, and element inspection +- **PatternFly DevTools**: PatternFly-specific debugging +- **Bundle Analyzer**: Analyze build output and dependencies + +### Getting Help +1. **GitHub Issues**: Search and create issues with minimal reproduction +2. **Stack Overflow**: Use `patternfly` tag for questions +3. **Community Slack**: Real-time help from community +4. **Documentation**: Always check latest official documentation + +## Prevention Strategies + +### Best Practices +- **Keep Dependencies Updated**: Regularly update PatternFly packages +- **Follow Semantic Versioning**: Use compatible version ranges +- **Test Incrementally**: Test changes in small increments +- **Use Linting**: Implement ESLint and Prettier +- **Document Issues**: Keep track of solutions for future reference + +### Code Quality +- **Type Safety**: Use TypeScript when possible +- **Testing**: Write unit tests for components +- **Code Review**: Review changes for PatternFly compliance +- **Performance Monitoring**: Track bundle size and performance metrics + +Remember: When encountering issues, always check the [official PatternFly documentation](https://www.patternfly.org/) first, then search [GitHub issues](https://github.com/patternfly/patternfly-react/issues) for similar problems. Provide specific error messages, code snippets, and version information when seeking help. \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9e7683fe..73b1296f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,30 +14,30 @@ "@patternfly/react-styles": "^6.4.0", "react": "^18", "react-dom": "^18", - "sirv-cli": "^3.0.0" + "sirv-cli": "^3.0.1" }, "devDependencies": { "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.2.0", + "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@types/react-router-dom": "^5.3.3", - "@typescript-eslint/eslint-plugin": "^8.17.0", - "@typescript-eslint/parser": "^8.17.0", + "@typescript-eslint/eslint-plugin": "^8.34.0", + "@typescript-eslint/parser": "^8.34.0", "@vitejs/plugin-react": "^4.3.3", - "copy-webpack-plugin": "^12.0.2", + "copy-webpack-plugin": "^13.0.0", "css-loader": "^7.1.2", - "css-minimizer-webpack-plugin": "^7.0.0", + "css-minimizer-webpack-plugin": "^7.0.2", "dotenv-webpack": "^8.1.0", - "eslint": "^8.57.1", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-react": "^7.37.2", - "eslint-plugin-react-hooks": "^5.0.0", + "eslint": "^9.28.0", + "eslint-plugin-prettier": "^5.4.1", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^5.2.0", "html-webpack-plugin": "^5.6.3", "imagemin": "^9.0.0", "jsdom": "^25.0.1", "mini-css-extract-plugin": "^2.9.2", - "postcss": "^8.4.49", - "prettier": "^3.4.2", + "postcss": "^8.5.5", + "prettier": "^3.5.3", "prop-types": "^15.8.1", "raw-loader": "^4.0.2", "react-axe": "^3.5.4", @@ -50,7 +50,7 @@ "ts-loader": "^9.5.1", "tsconfig-paths-webpack-plugin": "^4.2.0", "tslib": "^2.8.1", - "typescript": "^5.7.2", + "typescript": "^5.8.3", "url-loader": "^4.1.1", "vite": "^6.4.1", "vitest": "^4.0.5", @@ -61,25 +61,13 @@ "webpack-merge": "^6.0.1" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@adobe/css-tools": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.1.tgz", - "integrity": "sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==", - "dev": true + "version": "4.4.4", + "dev": true, + "license": "MIT" }, "node_modules/@asamuzakjp/css-color": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", - "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", "dev": true, "license": "MIT", "dependencies": { @@ -92,15 +80,11 @@ }, "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, "license": "ISC" }, "node_modules/@babel/code-frame": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { @@ -114,8 +98,6 @@ }, "node_modules/@babel/compat-data": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "dev": true, "license": "MIT", "engines": { @@ -124,8 +106,6 @@ }, "node_modules/@babel/core": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", "dependencies": { @@ -153,16 +133,16 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/@babel/generator": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -178,8 +158,6 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { @@ -193,27 +171,16 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", "dev": true, "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, "node_modules/@babel/helper-globals": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, "license": "MIT", "engines": { @@ -222,8 +189,6 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", "dependencies": { @@ -236,8 +201,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "license": "MIT", "dependencies": { @@ -254,8 +217,6 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -264,8 +225,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -274,8 +233,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -284,8 +241,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -294,8 +249,6 @@ }, "node_modules/@babel/helpers": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, "license": "MIT", "dependencies": { @@ -308,8 +261,6 @@ }, "node_modules/@babel/parser": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -356,8 +307,6 @@ }, "node_modules/@babel/runtime": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "dev": true, "license": "MIT", "engines": { @@ -366,8 +315,6 @@ }, "node_modules/@babel/template": { "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { @@ -381,8 +328,6 @@ }, "node_modules/@babel/traverse": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "dev": true, "license": "MIT", "dependencies": { @@ -400,8 +345,6 @@ }, "node_modules/@babel/types": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, "license": "MIT", "dependencies": { @@ -412,10 +355,19 @@ "node": ">=6.9.0" } }, + "node_modules/@borewit/text-codec": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", + "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/@csstools/color-helpers": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", - "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", "dev": true, "funding": [ { @@ -434,8 +386,6 @@ }, "node_modules/@csstools/css-calc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", "dev": true, "funding": [ { @@ -458,8 +408,6 @@ }, "node_modules/@csstools/css-color-parser": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", - "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", "dev": true, "funding": [ { @@ -486,8 +434,6 @@ }, "node_modules/@csstools/css-parser-algorithms": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, "funding": [ { @@ -509,8 +455,6 @@ }, "node_modules/@csstools/css-tokenizer": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true, "funding": [ { @@ -529,17 +473,16 @@ }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", - "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], @@ -554,9 +497,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz", - "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], @@ -571,9 +514,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", - "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], @@ -588,9 +531,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz", - "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], @@ -605,9 +548,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", - "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], @@ -622,9 +565,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", - "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" ], @@ -639,9 +582,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", - "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], @@ -656,9 +599,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", - "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" ], @@ -673,9 +616,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", - "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], @@ -690,9 +633,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", - "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], @@ -707,9 +650,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", - "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" ], @@ -724,9 +667,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", - "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], @@ -741,9 +684,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", - "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" ], @@ -758,9 +701,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", - "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" ], @@ -775,9 +718,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", - "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], @@ -792,9 +735,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", - "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], @@ -809,9 +752,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", - "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], @@ -826,9 +769,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", - "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ "arm64" ], @@ -843,9 +786,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", - "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], @@ -860,9 +803,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", - "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", "cpu": [ "arm64" ], @@ -877,9 +820,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", - "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], @@ -894,9 +837,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", - "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", "cpu": [ "arm64" ], @@ -911,9 +854,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", - "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" ], @@ -928,9 +871,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", - "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], @@ -945,9 +888,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", - "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], @@ -962,9 +905,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", - "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], @@ -979,334 +922,247 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.9.0", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "eslint-visitor-keys": "^3.4.3" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@eslint/config-array": { + "version": "0.21.1", "dev": true, + "license": "Apache-2.0", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "engines": { - "node": ">=10" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "*" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@eslint/core": { + "version": "0.17.0", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=12.22" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">= 4" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "engines": { - "node": ">=12" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": "*" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@eslint/js": { + "version": "9.39.1", "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, + "license": "MIT", "engines": { - "node": ">=12" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://eslint.org/donate" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/@eslint/object-schema": { + "version": "2.1.7", "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, + "license": "Apache-2.0", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", "dev": true, + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@humanfs/core": { + "version": "0.19.1", "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, + "license": "Apache-2.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18.18.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@humanfs/node": { + "version": "0.16.7", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18.18.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=12.22" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": ">=18.18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, + "license": "MIT", "engines": { - "node": ">=7.0.0" + "node": "20 || >=22" } }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, "engines": { - "node": ">=8" + "node": "20 || >=22" } }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -1316,8 +1172,6 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1326,35 +1180,29 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.11", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -1364,9 +1212,8 @@ }, "node_modules/@jsonjoy.com/base64": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.0" }, @@ -1378,16 +1225,68 @@ "tslib": "2" } }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", - "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" }, "engines": { "node": ">=10.0" @@ -1401,10 +1300,13 @@ } }, "node_modules/@jsonjoy.com/util": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", - "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", + "version": "1.9.0", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, "engines": { "node": ">=10.0" }, @@ -1418,15 +1320,13 @@ }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1437,18 +1337,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1475,6 +1373,12 @@ "react-dom": "^17 || ^18 || ^19" } }, + "node_modules/@patternfly/react-core/node_modules/@patternfly/react-tokens": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-6.4.0.tgz", + "integrity": "sha512-iZthBoXSGQ/+PfGTdPFJVulaJZI3rwE+7A/whOXPGp3Jyq3k6X52pr1+5nlO6WHasbZ9FyeZGqXf4fazUZNjbw==", + "license": "MIT" + }, "node_modules/@patternfly/react-icons": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-6.4.0.tgz", @@ -1491,28 +1395,20 @@ "integrity": "sha512-EXmHA67s5sy+Wy/0uxWoUQ52jr9lsH2wV3QcgtvVc5zxpyBX89gShpqv4jfVqaowznHGDoL6fVBBrSe9BYOliQ==", "license": "MIT" }, - "node_modules/@patternfly/react-tokens": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-6.4.0.tgz", - "integrity": "sha512-iZthBoXSGQ/+PfGTdPFJVulaJZI3rwE+7A/whOXPGp3Jyq3k6X52pr1+5nlO6WHasbZ9FyeZGqXf4fazUZNjbw==", - "license": "MIT" - }, "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "version": "0.2.9", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/pkgr" } }, "node_modules/@polka/url": { - "version": "1.0.0-next.25", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", - "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==" + "version": "1.0.0-next.29", + "license": "MIT" }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.27", @@ -1522,9 +1418,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", - "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", + "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", "cpu": [ "arm" ], @@ -1536,9 +1432,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", - "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", + "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", "cpu": [ "arm64" ], @@ -1550,9 +1446,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", - "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", + "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==", "cpu": [ "arm64" ], @@ -1564,9 +1460,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", - "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", + "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", "cpu": [ "x64" ], @@ -1578,9 +1474,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", - "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", + "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", "cpu": [ "arm64" ], @@ -1592,9 +1488,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", - "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", + "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", "cpu": [ "x64" ], @@ -1606,9 +1502,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", - "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", + "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", "cpu": [ "arm" ], @@ -1620,9 +1516,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", - "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", + "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", "cpu": [ "arm" ], @@ -1634,9 +1530,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", - "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", + "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", "cpu": [ "arm64" ], @@ -1648,9 +1544,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", - "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", + "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", "cpu": [ "arm64" ], @@ -1662,9 +1558,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", - "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", + "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", "cpu": [ "loong64" ], @@ -1676,9 +1572,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", - "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", + "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", "cpu": [ "ppc64" ], @@ -1690,9 +1586,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", - "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", + "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", "cpu": [ "riscv64" ], @@ -1704,9 +1600,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", - "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", + "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", "cpu": [ "riscv64" ], @@ -1718,9 +1614,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", - "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", + "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", "cpu": [ "s390x" ], @@ -1732,9 +1628,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", - "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", + "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", "cpu": [ "x64" ], @@ -1746,9 +1642,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", - "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", + "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", "cpu": [ "x64" ], @@ -1760,9 +1656,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", - "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", + "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", "cpu": [ "arm64" ], @@ -1774,9 +1670,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", - "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", + "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", "cpu": [ "arm64" ], @@ -1788,9 +1684,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", - "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", + "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", "cpu": [ "ia32" ], @@ -1802,9 +1698,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", - "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", + "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", "cpu": [ "x64" ], @@ -1816,9 +1712,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", - "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", + "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", "cpu": [ "x64" ], @@ -1833,19 +1729,15 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", - "dev": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-6.3.1.tgz", "integrity": "sha512-FX4MfcifwJyFOI2lPoX7PQxCqx8BG1HCho7WdiXwpEQx1Ycij0JxkfYtGK7yqNScrZGSlt6RE6sw8QYoH7eKnQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -1858,6 +1750,7 @@ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -1873,148 +1766,34 @@ "license": "MIT" }, "node_modules/@testing-library/dom": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", - "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "version": "10.4.1", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.3.0", - "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", + "picocolors": "1.1.1", "pretty-format": "^27.0.2" }, "engines": { "node": ">=18" } }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "node_modules/@testing-library/dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/dom/node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@testing-library/dom/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "peer": true - }, - "node_modules/@testing-library/dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@testing-library/jest-dom": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz", - "integrity": "sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==", + "version": "6.9.1", "dev": true, + "license": "MIT", "dependencies": { "@adobe/css-tools": "^4.4.0", "aria-query": "^5.0.0", - "chalk": "^3.0.0", "css.escape": "^1.5.1", "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.21", + "picocolors": "^1.1.1", "redent": "^3.0.0" }, "engines": { @@ -2023,84 +1802,15 @@ "yarn": ">=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true - }, - "node_modules/@testing-library/jest-dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/@testing-library/react": { "version": "16.3.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", - "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5" }, @@ -2125,9 +1835,8 @@ }, "node_modules/@testing-library/user-event": { "version": "14.6.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", - "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12", "npm": ">=6" @@ -2140,28 +1849,17 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "dev": true - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, - "engines": { - "node": ">=10.13.0" - } + "license": "MIT" }, "node_modules/@types/aria-query": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", - "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", + "version": "5.0.4", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@types/babel__core": { "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "license": "MIT", "dependencies": { @@ -2173,38 +1871,34 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.27.0", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.28.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.6", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -2212,9 +1906,8 @@ }, "node_modules/@types/bonjour": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -2231,24 +1924,32 @@ } }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, + "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/deep-eql": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", @@ -2257,10 +1958,9 @@ "license": "MIT" }, "node_modules/@types/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "version": "9.6.1", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -2268,9 +1968,8 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, + "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -2278,28 +1977,24 @@ }, "node_modules/@types/estree": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "4.17.25", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "version": "4.19.7", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2309,20 +2004,21 @@ }, "node_modules/@types/history": { "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "license": "MIT" }, "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "version": "2.0.5", + "dev": true, + "license": "MIT" }, "node_modules/@types/http-proxy": { "version": "1.17.17", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", - "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", "dev": true, "license": "MIT", "dependencies": { @@ -2330,45 +2026,45 @@ } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "version": "2.0.6", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/@types/node": { - "version": "24.9.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", - "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "version": "24.10.0", "dev": true, "license": "MIT", "dependencies": { @@ -2376,68 +2072,44 @@ } }, "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "version": "1.3.14", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "dev": true - }, "node_modules/@types/qs": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", - "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", - "dev": true + "version": "6.14.0", + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "version": "1.2.7", + "dev": true, + "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "19.2.2", "dev": true, + "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, - "node_modules/@types/react-dom": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", - "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/react": "*" - } - }, "node_modules/@types/react-router": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.11.tgz", - "integrity": "sha512-ofHbZMlp0Y2baOHgsWBQ4K3AttxY61bDMkwTiBOkPg7U6C/3UwwB5WaIx28JmSVi/eX3uFEMRo61BV22fDQIvg==", + "version": "5.1.20", "dev": true, + "license": "MIT", "dependencies": { - "@types/history": "*", + "@types/history": "^4.7.11", "@types/react": "*" } }, "node_modules/@types/react-router-dom": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", "dev": true, + "license": "MIT", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -2446,88 +2118,87 @@ }, "node_modules/@types/retry": { "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", - "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/serve-index": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, + "license": "MIT", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "version": "1.15.10", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, "node_modules/@types/sockjs": { "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/ws": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", - "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", + "version": "8.18.1", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.34", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "version": "21.0.3", + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.17.0.tgz", - "integrity": "sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==", + "version": "8.46.4", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.17.0", - "@typescript-eslint/type-utils": "8.17.0", - "@typescript-eslint/utils": "8.17.0", - "@typescript-eslint/visitor-keys": "8.17.0", + "@typescript-eslint/scope-manager": "8.46.4", + "@typescript-eslint/type-utils": "8.46.4", + "@typescript-eslint/utils": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2537,25 +2208,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.46.4", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.17.0.tgz", - "integrity": "sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==", + "version": "8.46.4", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.17.0", - "@typescript-eslint/types": "8.17.0", - "@typescript-eslint/typescript-estree": "8.17.0", - "@typescript-eslint/visitor-keys": "8.17.0", + "@typescript-eslint/scope-manager": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", "debug": "^4.3.4" }, "engines": { @@ -2566,22 +2232,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.17.0.tgz", - "integrity": "sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==", + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.4", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.17.0", - "@typescript-eslint/visitor-keys": "8.17.0" + "@typescript-eslint/tsconfig-utils": "^8.46.4", + "@typescript-eslint/types": "^8.46.4", + "debug": "^4.3.4" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2589,18 +2251,18 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.17.0.tgz", - "integrity": "sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.46.4", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.17.0", - "@typescript-eslint/utils": "8.17.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2608,43 +2270,33 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/types": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.17.0.tgz", - "integrity": "sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.4", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.17.0.tgz", - "integrity": "sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.46.4", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.17.0", - "@typescript-eslint/visitor-keys": "8.17.0", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4", + "@typescript-eslint/utils": "8.46.4", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2653,59 +2305,59 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/@typescript-eslint/types": { + "version": "8.46.4", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.46.4", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@typescript-eslint/project-service": "8.46.4", + "@typescript-eslint/tsconfig-utils": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.17.0.tgz", - "integrity": "sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==", + "version": "8.46.4", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.17.0", - "@typescript-eslint/types": "8.17.0", - "@typescript-eslint/typescript-estree": "8.17.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2715,22 +2367,17 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.17.0.tgz", - "integrity": "sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==", + "version": "8.46.4", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.17.0", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/types": "8.46.4", + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2740,11 +2387,16 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, "node_modules/@vitejs/plugin-react": { "version": "4.7.0", @@ -2768,17 +2420,17 @@ } }, "node_modules/@vitest/expect": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.5.tgz", - "integrity": "sha512-DJctLVlKoddvP/G389oGmKWNG6GD9frm2FPXARziU80Rjo7SIYxQzb2YFzmQ4fVD3Q5utUYY8nUmWrqsuIlIXQ==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.10.tgz", + "integrity": "sha512-3QkTX/lK39FBNwARCQRSQr0TP9+ywSdxSX+LgbJ2M1WmveXP72anTbnp2yl5fH+dU6SUmBzNMrDHs80G8G2DZg==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.5", - "@vitest/utils": "4.0.5", - "chai": "^6.0.1", + "@vitest/spy": "4.0.10", + "@vitest/utils": "4.0.10", + "chai": "^6.2.1", "tinyrainbow": "^3.0.3" }, "funding": { @@ -2786,15 +2438,15 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.5.tgz", - "integrity": "sha512-iYHIy72LfbK+mL5W8zXROp6oOcJKXWeKcNjcPPsqoa18qIEDrhB6/Z08o0wRajTd6SSSDNw8NCSIHVNOMpz0mw==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.10.tgz", + "integrity": "sha512-e2OfdexYkjkg8Hh3L9NVEfbwGXq5IZbDovkf30qW2tOh7Rh9sVtmSr2ztEXOFbymNxS4qjzLXUQIvATvN4B+lg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.5", + "@vitest/spy": "4.0.10", "estree-walker": "^3.0.3", - "magic-string": "^0.30.19" + "magic-string": "^0.30.21" }, "funding": { "url": "https://opencollective.com/vitest" @@ -2813,9 +2465,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.5.tgz", - "integrity": "sha512-t1T/sSdsYyNc5AZl0EMeD0jW9cpJe2cODP0R++ZQe1kTkpgrwEfxGFR/yCG4w8ZybizbXRTHU7lE8sTDD/QsGw==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.10.tgz", + "integrity": "sha512-99EQbpa/zuDnvVjthwz5bH9o8iPefoQZ63WV8+bsRJZNw3qQSvSltfut8yu1Jc9mqOYi7pEbsKxYTi/rjaq6PA==", "dev": true, "license": "MIT", "dependencies": { @@ -2826,13 +2478,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.5.tgz", - "integrity": "sha512-CQVVe+YEeKSiFBD5gBAmRDQglm4PnMBYzeTmt06t5iWtsUN9StQeeKhYCea/oaqBYilf8sARG6fSctUcEL/UmQ==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.10.tgz", + "integrity": "sha512-EXU2iSkKvNwtlL8L8doCpkyclw0mc/t4t9SeOnfOFPyqLmQwuceMPA4zJBa6jw0MKsZYbw7kAn+gl7HxrlB8UQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.5", + "@vitest/utils": "4.0.10", "pathe": "^2.0.3" }, "funding": { @@ -2840,14 +2492,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.5.tgz", - "integrity": "sha512-jfmSAeR6xYNEvcD+/RxFGA1bzpqHtkVhgxo2cxXia+Q3xX7m6GpZij07rz+WyQcA/xEGn4eIS1OItkMyWsGBmQ==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.10.tgz", + "integrity": "sha512-2N4X2ZZl7kZw0qeGdQ41H0KND96L3qX1RgwuCfy6oUsF2ISGD/HpSbmms+CkIOsQmg2kulwfhJ4CI0asnZlvkg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.5", - "magic-string": "^0.30.19", + "@vitest/pretty-format": "4.0.10", + "magic-string": "^0.30.21", "pathe": "^2.0.3" }, "funding": { @@ -2855,9 +2507,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.5.tgz", - "integrity": "sha512-TUmVQpAQign7r8+EnZsgTF3vY9BdGofTUge1rGNbnHn2IN3FChiQoT9lrPz7A7AVUZJU2LAZXl4v66HhsNMhoA==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.10.tgz", + "integrity": "sha512-AsY6sVS8OLb96GV5RoG8B6I35GAbNrC49AO+jNRF9YVGb/g9t+hzNm1H6kD0NDp8tt7VJLs6hb7YMkDXqu03iw==", "dev": true, "license": "MIT", "funding": { @@ -2865,150 +2517,229 @@ } }, "node_modules/@vitest/utils": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.5.tgz", - "integrity": "sha512-V5RndUgCB5/AfNvK9zxGCrRs99IrPYtMTIdUzJMMFs9nrmE5JXExIEfjVtUteyTRiLfCm+dCRMHf/Uu7Mm8/dg==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.10.tgz", + "integrity": "sha512-kOuqWnEwZNtQxMKg3WmPK1vmhZu9WcoX69iwWjVz+jvKTsF1emzsv3eoPcDr6ykA3qP2bsCQE7CwqfNtAVzsmg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.5", + "@vitest/pretty-format": "4.0.10", "tinyrainbow": "^3.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, - "node_modules/@webassemblyjs/helper-numbers/node_modules/@webassemblyjs/floating-point-hex-parser": { + "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@webassemblyjs/helper-numbers/node_modules/@webassemblyjs/helper-api-error": { + "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true - }, - "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } + "license": "MIT" }, - "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } + "license": "MIT" }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "dev": true, + "license": "MIT" }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", "dev": true, + "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, - "node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", "dev": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.15.0" }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "node_modules/acorn-walk/node_modules/acorn": { + "node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -3018,10 +2749,38 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", "engines": { @@ -3030,9 +2789,8 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3046,9 +2804,8 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -3062,15 +2819,14 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -3079,44 +2835,52 @@ }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/ansi-html-community": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, "engines": [ "node >= 0.8.0" ], + "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -3129,27 +2893,24 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -3160,23 +2921,22 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true, "license": "MIT" }, "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3187,9 +2947,8 @@ }, "node_modules/array.prototype.findlast": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3205,16 +2964,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3225,9 +3000,8 @@ }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3240,19 +3014,17 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -3271,16 +3043,23 @@ "node": ">=12" } }, + "node_modules/async-function": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/attr-accept": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", - "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", "license": "MIT", "engines": { "node": ">=4" @@ -3288,9 +3067,8 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -3302,39 +3080,41 @@ } }, "node_modules/axe-core": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", - "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==", + "version": "3.5.6", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=4" } }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.25", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } }, "node_modules/batch": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/big.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "license": "MIT", "engines": { @@ -3346,8 +3126,6 @@ }, "node_modules/body-parser": { "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "license": "MIT", "dependencies": { @@ -3371,36 +3149,21 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/depd": { + "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, "node_modules/bonjour-service": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" @@ -3408,25 +3171,19 @@ }, "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "2.0.2", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -3437,9 +3194,7 @@ } }, "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "version": "4.28.0", "dev": true, "funding": [ { @@ -3455,11 +3210,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" @@ -3469,16 +3226,14 @@ } }, "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "version": "1.1.2", + "dev": true, + "license": "MIT" }, "node_modules/bundle-name": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "dev": true, + "license": "MIT", "dependencies": { "run-applescript": "^7.0.0" }, @@ -3491,8 +3246,6 @@ }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "license": "MIT", "engines": { @@ -3501,8 +3254,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -3520,8 +3271,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3534,8 +3283,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { @@ -3551,18 +3298,16 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camel-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, + "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -3570,9 +3315,8 @@ }, "node_modules/caniuse-api": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -3581,9 +3325,7 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001686", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz", - "integrity": "sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==", + "version": "1.0.30001754", "dev": true, "funding": [ { @@ -3598,23 +3340,40 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chai": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.0.tgz", - "integrity": "sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz", + "integrity": "sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==", "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/change-file-extension": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/change-file-extension/-/change-file-extension-0.1.1.tgz", "integrity": "sha512-lB0j9teu8JtDPDHRfU8pNH33w4wMu5bOaKoT4PxH+AKugBrIfpiJMTTKIm0TErNeJPkeQEgvH31YpccTwOKPRg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -3622,44 +3381,63 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "node_modules/chokidar": { + "version": "3.6.0", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^1.9.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=6.0" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/chrome-trace-event/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "node_modules/chrome-trace-event": { + "version": "1.0.4", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6.0" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" } }, "node_modules/clone-deep": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -3669,23 +3447,38 @@ "node": ">=6" } }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, "node_modules/colord": { "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3694,16 +3487,17 @@ } }, "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "version": "8.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } }, "node_modules/compressible": { "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -3713,8 +3507,6 @@ }, "node_modules/compression": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "dev": true, "license": "MIT", "dependencies": { @@ -3732,77 +3524,39 @@ }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/compression/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/console-clear": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", - "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3812,31 +3566,8 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "license": "MIT", "engines": { @@ -3848,6 +3579,7 @@ "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3855,10 +3587,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, "node_modules/cookie": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", "dev": true, "license": "MIT", "engines": { @@ -3867,23 +3602,19 @@ }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true, "license": "MIT" }, "node_modules/copy-webpack-plugin": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", - "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", + "version": "13.0.1", "dev": true, + "license": "MIT", "dependencies": { - "fast-glob": "^3.3.2", "glob-parent": "^6.0.1", - "globby": "^14.0.0", "normalize-path": "^3.0.0", "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2" + "serialize-javascript": "^6.0.2", + "tinyglobby": "^0.2.12" }, "engines": { "node": ">= 18.12.0" @@ -3896,38 +3627,15 @@ "webpack": "^5.1.0" } }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "version": "1.0.3", + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3938,10 +3646,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "version": "7.3.0", "dev": true, + "license": "ISC", "engines": { "node": "^14 || ^16 || >=18" }, @@ -3951,9 +3658,8 @@ }, "node_modules/css-loader": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", - "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", @@ -3984,31 +3690,15 @@ } } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/css-minimizer-webpack-plugin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-7.0.0.tgz", - "integrity": "sha512-niy66jxsQHqO+EYbhPuIhqRQ1mNcNVUHrMnkzzir9kFOERJUaQDDRhh7dKDz33kBpkWMF9M8Vx0QlDbc5AHOsw==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", - "cssnano": "^7.0.1", + "cssnano": "^7.0.4", "jest-worker": "^29.7.0", - "postcss": "^8.4.38", + "postcss": "^8.4.40", "schema-utils": "^4.2.0", "serialize-javascript": "^6.0.2" }, @@ -4043,122 +3733,53 @@ } } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "4.3.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", "nth-check": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-select/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "node_modules/css-tree": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/css-select/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "node_modules/css-what": { + "version": "6.2.2", "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, + "license": "BSD-2-Clause", "engines": { - "node": ">= 4" + "node": ">= 6" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-select/node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "node_modules/css.escape": { + "version": "1.5.1", "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/css-select/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true + "license": "MIT" }, "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -4167,13 +3788,12 @@ } }, "node_modules/cssnano": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz", - "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==", + "version": "7.1.2", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-preset-default": "^7.0.6", - "lilconfig": "^3.1.2" + "cssnano-preset-default": "^7.0.10", + "lilconfig": "^3.1.3" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" @@ -4183,70 +3803,67 @@ "url": "https://opencollective.com/cssnano" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/cssnano-preset-default": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz", - "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==", + "version": "7.0.10", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.27.0", "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^5.0.0", - "postcss-calc": "^10.0.2", - "postcss-colormin": "^7.0.2", - "postcss-convert-values": "^7.0.4", - "postcss-discard-comments": "^7.0.3", - "postcss-discard-duplicates": "^7.0.1", - "postcss-discard-empty": "^7.0.0", - "postcss-discard-overridden": "^7.0.0", - "postcss-merge-longhand": "^7.0.4", - "postcss-merge-rules": "^7.0.4", - "postcss-minify-font-values": "^7.0.0", - "postcss-minify-gradients": "^7.0.0", - "postcss-minify-params": "^7.0.2", - "postcss-minify-selectors": "^7.0.4", - "postcss-normalize-charset": "^7.0.0", - "postcss-normalize-display-values": "^7.0.0", - "postcss-normalize-positions": "^7.0.0", - "postcss-normalize-repeat-style": "^7.0.0", - "postcss-normalize-string": "^7.0.0", - "postcss-normalize-timing-functions": "^7.0.0", - "postcss-normalize-unicode": "^7.0.2", - "postcss-normalize-url": "^7.0.0", - "postcss-normalize-whitespace": "^7.0.0", - "postcss-ordered-values": "^7.0.1", - "postcss-reduce-initial": "^7.0.2", - "postcss-reduce-transforms": "^7.0.0", - "postcss-svgo": "^7.0.1", - "postcss-unique-selectors": "^7.0.3" + "cssnano-utils": "^5.0.1", + "postcss-calc": "^10.1.1", + "postcss-colormin": "^7.0.5", + "postcss-convert-values": "^7.0.8", + "postcss-discard-comments": "^7.0.5", + "postcss-discard-duplicates": "^7.0.2", + "postcss-discard-empty": "^7.0.1", + "postcss-discard-overridden": "^7.0.1", + "postcss-merge-longhand": "^7.0.5", + "postcss-merge-rules": "^7.0.7", + "postcss-minify-font-values": "^7.0.1", + "postcss-minify-gradients": "^7.0.1", + "postcss-minify-params": "^7.0.5", + "postcss-minify-selectors": "^7.0.5", + "postcss-normalize-charset": "^7.0.1", + "postcss-normalize-display-values": "^7.0.1", + "postcss-normalize-positions": "^7.0.1", + "postcss-normalize-repeat-style": "^7.0.1", + "postcss-normalize-string": "^7.0.1", + "postcss-normalize-timing-functions": "^7.0.1", + "postcss-normalize-unicode": "^7.0.5", + "postcss-normalize-url": "^7.0.1", + "postcss-normalize-whitespace": "^7.0.1", + "postcss-ordered-values": "^7.0.2", + "postcss-reduce-initial": "^7.0.5", + "postcss-reduce-transforms": "^7.0.1", + "postcss-svgo": "^7.1.0", + "postcss-unique-selectors": "^7.0.4" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/cssnano-utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", - "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", + "version": "5.0.1", "dev": true, + "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/csso": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, + "license": "MIT", "dependencies": { "css-tree": "~2.2.0" }, @@ -4257,9 +3874,8 @@ }, "node_modules/csso/node_modules/css-tree": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" @@ -4271,14 +3887,11 @@ }, "node_modules/csso/node_modules/mdn-data": { "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/cssstyle": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", - "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", "dev": true, "license": "MIT", "dependencies": { @@ -4289,23 +3902,13 @@ "node": ">=18" } }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", - "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", - "dev": true, - "license": "MIT" - }, "node_modules/csstype": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/data-urls": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, "license": "MIT", "dependencies": { @@ -4317,14 +3920,13 @@ } }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4334,29 +3936,27 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -4369,14 +3969,11 @@ }, "node_modules/debounce": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -4392,22 +3989,19 @@ } }, "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true + "version": "10.6.0", + "dev": true, + "license": "MIT" }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "version": "0.1.4", + "dev": true, + "license": "MIT" }, "node_modules/default-browser": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "dev": true, + "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" @@ -4421,9 +4015,8 @@ }, "node_modules/default-browser-id": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -4433,9 +4026,8 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -4450,9 +4042,8 @@ }, "node_modules/define-lazy-prop": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -4462,9 +4053,8 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -4482,32 +4072,29 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "license": "MIT", "engines": { @@ -4516,16 +4103,14 @@ } }, "node_modules/detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true + "version": "2.1.0", + "dev": true, + "license": "MIT" }, "node_modules/dns-packet": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, + "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -4534,38 +4119,34 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dom-accessibility-api": { "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/dom-converter": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, + "license": "MIT", "dependencies": { "utila": "~0.4" } }, "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "version": "1.4.1", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -4575,23 +4156,29 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -4604,9 +4191,8 @@ }, "node_modules/domutils": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -4618,9 +4204,8 @@ }, "node_modules/dot-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -4631,6 +4216,7 @@ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-8.0.2.tgz", "integrity": "sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^3.8.0" }, @@ -4641,20 +4227,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/dot-prop/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dotenv": { "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=10" } }, + "node_modules/dotenv-defaults": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "dotenv": "^8.2.0" + } + }, "node_modules/dotenv-webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.1.0.tgz", - "integrity": "sha512-owK1JcsPkIobeqjVrk6h7jPED/W6ZpdFsMPR+5ursB7/SdgDyO+VzAU+szK8C8u3qUhtENyYnj8eyXMR5kkGag==", + "version": "8.1.1", "dev": true, + "license": "MIT", "dependencies": { "dotenv-defaults": "^2.0.2" }, @@ -4665,19 +4270,8 @@ "webpack": "^4 || ^5" } }, - "node_modules/dotenv-webpack/node_modules/dotenv-defaults": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz", - "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==", - "dev": true, - "dependencies": { - "dotenv": "^8.2.0" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", "dependencies": { @@ -4691,48 +4285,39 @@ }, "node_modules/duplexer": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.68", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.68.tgz", - "integrity": "sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==", - "dev": true + "version": "1.5.249", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "version": "9.2.2", + "dev": true, + "license": "MIT" }, "node_modules/emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, "license": "MIT", "engines": { @@ -4740,9 +4325,7 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.18.3", "dev": true, "license": "MIT", "dependencies": { @@ -4753,29 +4336,21 @@ "node": ">=10.13.0" } }, - "node_modules/enhanced-resolve/node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "6.0.1", "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "version": "7.20.0", "dev": true, + "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -4788,6 +4363,7 @@ "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -4796,57 +4372,64 @@ } }, "node_modules/es-abstract": { - "version": "1.23.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", - "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "version": "1.24.0", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -4857,8 +4440,6 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", "engines": { @@ -4867,34 +4448,33 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", - "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", + "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.3", - "safe-array-concat": "^1.1.2" + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -4902,15 +4482,11 @@ }, "node_modules/es-module-lexer": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "license": "MIT", "dependencies": { @@ -4922,8 +4498,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -4937,23 +4511,24 @@ } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -4963,9 +4538,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", - "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -4976,127 +4551,123 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.11", - "@esbuild/android-arm": "0.25.11", - "@esbuild/android-arm64": "0.25.11", - "@esbuild/android-x64": "0.25.11", - "@esbuild/darwin-arm64": "0.25.11", - "@esbuild/darwin-x64": "0.25.11", - "@esbuild/freebsd-arm64": "0.25.11", - "@esbuild/freebsd-x64": "0.25.11", - "@esbuild/linux-arm": "0.25.11", - "@esbuild/linux-arm64": "0.25.11", - "@esbuild/linux-ia32": "0.25.11", - "@esbuild/linux-loong64": "0.25.11", - "@esbuild/linux-mips64el": "0.25.11", - "@esbuild/linux-ppc64": "0.25.11", - "@esbuild/linux-riscv64": "0.25.11", - "@esbuild/linux-s390x": "0.25.11", - "@esbuild/linux-x64": "0.25.11", - "@esbuild/netbsd-arm64": "0.25.11", - "@esbuild/netbsd-x64": "0.25.11", - "@esbuild/openbsd-arm64": "0.25.11", - "@esbuild/openbsd-x64": "0.25.11", - "@esbuild/openharmony-arm64": "0.25.11", - "@esbuild/sunos-x64": "0.25.11", - "@esbuild/win32-arm64": "0.25.11", - "@esbuild/win32-ia32": "0.25.11", - "@esbuild/win32-x64": "0.25.11" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "9.39.1", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "url": "https://eslint.org/donate" }, "peerDependencies": { - "eslint": ">=7.0.0" + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "version": "5.5.4", "dev": true, + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "synckit": "^0.11.7" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -5107,7 +4678,7 @@ "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", - "eslint-config-prettier": "*", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { @@ -5119,29 +4690,39 @@ } } }, - "node_modules/eslint-plugin-react": { - "version": "7.37.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", - "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "node_modules/eslint-plugin-prettier/node_modules/prettier-linter-helpers": { + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.1.0", + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.8", + "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", + "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "engines": { @@ -5152,10 +4733,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", - "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", + "version": "5.2.0", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5163,121 +4743,53 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", "dev": true, + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=7.0.0" + "node": "*" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/eslint-scope": { + "version": "8.4.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { + "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -5285,182 +4797,76 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.1", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -5468,20 +4874,10 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -5489,20 +4885,10 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -5519,17 +4905,14 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, "license": "MIT", "engines": { @@ -5538,16 +4921,13 @@ }, "node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true, "license": "MIT" }, "node_modules/events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "version": "3.3.0", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -5564,8 +4944,6 @@ }, "node_modules/express": { "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, "license": "MIT", "dependencies": { @@ -5611,8 +4989,6 @@ }, "node_modules/express/node_modules/cookie": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, "license": "MIT", "engines": { @@ -5621,131 +4997,108 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/express/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/fast-equals": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", - "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.3.tgz", + "integrity": "sha512-/boTcHZeIAQ2r/tL11voclBHDeP9WPxLt+tyAbVSyyXuUFyh0Tne7gJZTqGbxnvj79TjLdCXLOY7UIPhyG5MTw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true + "version": "1.0.16", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } }, "node_modules/fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", + "version": "1.19.1", "dev": true, + "license": "ISC", "dependencies": { - "reusify": "^1.0.0" + "reusify": "^1.0.4" } }, "node_modules/faye-websocket": { "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -5754,22 +5107,20 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-loader": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -5785,27 +5136,12 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/file-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.3.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -5819,8 +5155,6 @@ }, "node_modules/file-selector": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", - "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", "license": "MIT", "dependencies": { "tslib": "^2.7.0" @@ -5834,6 +5168,7 @@ "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.6.0.tgz", "integrity": "sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==", "dev": true, + "license": "MIT", "dependencies": { "get-stream": "^9.0.1", "strtok3": "^9.0.1", @@ -5847,26 +5182,8 @@ "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/file-type/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", - "dev": true, - "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -5878,8 +5195,6 @@ }, "node_modules/finalhandler": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5897,8 +5212,6 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { @@ -5907,83 +5220,51 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, - "node_modules/finalhandler/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "dev": true + "version": "3.3.3", + "dev": true, + "license": "ISC" }, "node_modules/focus-trap": { "version": "7.6.4", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz", - "integrity": "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==", "license": "MIT", "dependencies": { "tabbable": "^6.2.0" @@ -5991,8 +5272,6 @@ }, "node_modules/follow-redirects": { "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "dev": true, "funding": [ { @@ -6012,8 +5291,6 @@ }, "node_modules/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -6027,12 +5304,11 @@ } }, "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "version": "3.3.1", "dev": true, + "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -6042,22 +5318,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { @@ -6073,8 +5337,6 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "license": "MIT", "engines": { @@ -6083,26 +5345,15 @@ }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ @@ -6114,9 +5365,8 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6126,6 +5376,7 @@ "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz", "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -6134,15 +5385,16 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -6153,26 +5405,30 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6196,8 +5452,7 @@ }, "node_modules/get-port": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -6207,8 +5462,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", "dependencies": { @@ -6219,67 +5472,85 @@ "node": ">= 0.4" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/get-symbol-description": { + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": "*" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "14.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -6292,17 +5563,18 @@ } }, "node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" + "unicorn-magic": "^0.3.0" }, "engines": { "node": ">=18" @@ -6311,34 +5583,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", "engines": { @@ -6350,36 +5596,56 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/handle-thing": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -6388,10 +5654,12 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -6401,8 +5669,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -6414,9 +5680,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -6429,9 +5694,8 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -6441,18 +5705,16 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/hpack.js": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -6460,10 +5722,40 @@ "wbuf": "^1.1.0" } }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6475,15 +5767,33 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } }, "node_modules/html-webpack-plugin": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", + "version": "5.6.4", "dev": true, + "license": "MIT", "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -6511,106 +5821,8 @@ } } }, - "node_modules/html-webpack-plugin/node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "node_modules/html-webpack-plugin/node_modules/clean-css": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", - "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/html-webpack-plugin/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-webpack-plugin/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-webpack-plugin/node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/html-webpack-plugin/node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/html-webpack-plugin/node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/htmlparser2": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -6619,6 +5831,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", @@ -6626,16 +5839,21 @@ "entities": "^2.0.0" } }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/http-deceiver": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6649,36 +5867,13 @@ "node": ">= 0.8" } }, - "node_modules/http-errors/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true + "version": "0.5.10", + "dev": true, + "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6692,8 +5887,6 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", "dependencies": { @@ -6706,8 +5899,6 @@ }, "node_modules/http-proxy-middleware": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6729,10 +5920,19 @@ } } }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/https-proxy-agent": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { @@ -6745,17 +5945,14 @@ }, "node_modules/hyperdyperid": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", - "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.18" } }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { @@ -6767,9 +5964,8 @@ }, "node_modules/icss-utils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -6778,10 +5974,11 @@ } }, "node_modules/identifier-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/identifier-regex/-/identifier-regex-1.0.0.tgz", - "integrity": "sha512-Rcy5cjBOM9iTR+Vwy0Llyip9u0cA99T1yiWOhDW/+PDaTQhyski0tMovsipQ/FRNDkudjLWusJ/IMVIlG5WZnQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/identifier-regex/-/identifier-regex-1.0.1.tgz", + "integrity": "sha512-ZrYyM0sozNPZlvBvE7Oq9Bn44n0qKGrYu5sQ0JzMUnjIhpgWYE2JB6aBoFwEYdPjqj7jPyxXTMJiHDOxDfd8yw==", "dev": true, + "license": "MIT", "dependencies": { "reserved-identifiers": "^1.0.0" }, @@ -6810,27 +6007,45 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "version": "7.0.5", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, + "node_modules/image-dimensions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/image-dimensions/-/image-dimensions-2.5.0.tgz", + "integrity": "sha512-CKZPHjAEtSg9lBV9eER0bhNn/yrY7cFEQEhkwjLhqLY+Na8lcP1pEyWsaGMGc8t2qbKWA/tuqbhFQpOKGN72Yw==", + "dev": true, + "license": "MIT", + "bin": { + "image-dimensions": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/imagemin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-9.0.0.tgz", - "integrity": "sha512-oFlmioXTIrDCNYiKUVPjzUzm8M/7X74WEO6v8NFjn3ZtxjArdVJiRRdbPpq/OG4BdwaHMUz8ej9Fp4AcaDzMnA==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-9.0.1.tgz", + "integrity": "sha512-UoHOfynN8QeqRoUGunn6ilMnLpJ+utbmleP2ufcFqaGal8mY/PeOpV43N31uqtb+CBMFqQ7hxgKzIaAAnmcrdA==", "dev": true, + "license": "MIT", "dependencies": { "change-file-extension": "^0.1.1", "environment": "^1.0.0", "file-type": "^19.0.0", "globby": "^14.0.1", + "image-dimensions": "^2.3.0", "junk": "^4.0.1", "ow": "^2.0.0", "p-pipe": "^4.0.0", @@ -6844,45 +6059,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imagemin/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.1", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "version": "3.2.0", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -6892,51 +6087,40 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -6944,30 +6128,28 @@ }, "node_modules/interpret": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/ipaddr.js": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -6977,12 +6159,15 @@ } }, "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "version": "2.1.1", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -6992,12 +6177,14 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7005,8 +6192,6 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", "dependencies": { @@ -7017,13 +6202,12 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7034,9 +6218,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7045,23 +6228,26 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.1", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -7072,12 +6258,12 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7088,9 +6274,8 @@ }, "node_modules/is-docker": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -7103,20 +6288,18 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", - "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -7127,20 +6310,22 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "version": "1.1.2", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7151,9 +6336,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -7166,6 +6350,7 @@ "resolved": "https://registry.npmjs.org/is-identifier/-/is-identifier-1.0.1.tgz", "integrity": "sha512-HQ5v4rEJ7REUV54bCd2l5FaD299SGDEn2UPoVXaTHAyGviLq2menVUD2udi3trQ32uvB6LdAh/0ck2EuizrtpA==", "dev": true, + "license": "MIT", "dependencies": { "identifier-regex": "^1.0.0", "super-regex": "^1.0.0" @@ -7179,9 +6364,8 @@ }, "node_modules/is-inside-container": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^3.0.0" }, @@ -7197,9 +6381,8 @@ }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7209,9 +6392,8 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7220,10 +6402,9 @@ } }, "node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "version": "1.3.0", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -7233,8 +6414,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -7242,10 +6421,13 @@ } }, "node_modules/is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "version": "1.1.1", "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, "engines": { "node": ">= 0.4" }, @@ -7253,33 +6435,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -7289,18 +6448,18 @@ }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -7311,9 +6470,8 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7322,12 +6480,11 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -7341,6 +6498,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -7349,12 +6507,12 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7364,12 +6522,13 @@ } }, "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.1" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7380,8 +6539,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7396,9 +6553,8 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7407,25 +6563,26 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "version": "2.0.4", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -7436,9 +6593,8 @@ }, "node_modules/is-wsl": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, + "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" }, @@ -7451,20 +6607,16 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "license": "MIT", "engines": { @@ -7472,41 +6624,25 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "version": "1.1.5", "dev": true, + "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, - "node_modules/jackspeak": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", - "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -7519,81 +6655,56 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-util/node_modules/@jest/schemas": { + "version": "29.6.3", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/jest-util/node_modules/@jest/types": { + "version": "29.6.3", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-util/node_modules/@sinclair/typebox": { + "version": "0.27.8", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-util/node_modules/ci-info": { + "version": "3.9.0", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -7604,20 +6715,10 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7630,14 +6731,12 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -7686,32 +6785,15 @@ } } }, - "node_modules/jsdom/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "node_modules/jsdom/node_modules/rrweb-cssom": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } + "license": "MIT" }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -7723,33 +6805,28 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -7758,13 +6835,14 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "version": "3.3.5", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" @@ -7775,6 +6853,7 @@ "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -7784,37 +6863,40 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/kleur": { + "version": "4.1.5", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/launch-editor": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", - "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", + "version": "2.12.0", "dev": true, + "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" } }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -7825,64 +6907,84 @@ }, "node_modules/lilconfig": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, - "engines": { - "node": ">=14" + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/loader-runner": { + "version": "4.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, - "funding": { - "url": "https://github.com/sponsors/antonk52" + "engines": { + "node": ">=8.9.0" } }, "node_modules/local-access": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz", - "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -7892,30 +6994,24 @@ }, "node_modules/lower-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "5.1.1", "dev": true, + "license": "ISC", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "node_modules/lz-string": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, + "license": "MIT", "peer": true, "bin": { "lz-string": "bin/bin.js" @@ -7931,10 +7027,39 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/make-asynchronous": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-asynchronous/-/make-asynchronous-1.0.1.tgz", + "integrity": "sha512-T9BPOmEOhp6SmV25SwLVcHK4E6JyG/coH3C6F1NjNXSziv/fd4GmsqMk8YR6qpPOswfaOCApSNkZv6fxoaYFcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-event": "^6.0.0", + "type-fest": "^4.6.0", + "web-worker": "1.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-asynchronous/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { @@ -7942,15 +7067,12 @@ } }, "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "version": "2.12.2", + "dev": true, + "license": "CC0-1.0" }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "license": "MIT", "engines": { @@ -7958,19 +7080,17 @@ } }, "node_modules/memfs": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.1.tgz", - "integrity": "sha512-Fq5CMEth+2iprLJ5mNizRcWuiwRZYjNkUD0zKk224jZunE9CRacTRDK8QLALbMBlNX2y3nY6lKZbesCwDwacig==", + "version": "4.50.0", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.3.0", - "tree-dump": "^1.0.1", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", "tslib": "^2.0.0" }, - "engines": { - "node": ">= 4.0.0" - }, "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" @@ -7978,8 +7098,6 @@ }, "node_modules/merge-descriptors": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true, "license": "MIT", "funding": { @@ -7988,23 +7106,19 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, "license": "MIT", "engines": { @@ -8013,8 +7127,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -8027,8 +7139,6 @@ }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "license": "MIT", "bin": { @@ -8040,18 +7150,16 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -8061,18 +7169,16 @@ }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "version": "2.9.4", "dev": true, + "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -8088,76 +7194,64 @@ "webpack": "^5.0.0" } }, - "node_modules/mini-css-extract-plugin/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.5", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mri": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", - "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", + "version": "1.2.0", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "version": "2.0.1", + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/multicast-dns": { "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, + "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -8168,8 +7262,6 @@ }, "node_modules/nanoid": { "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -8187,30 +7279,26 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.4", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/no-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, + "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -8218,33 +7306,29 @@ }, "node_modules/node-forge": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true + "version": "2.0.27", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "version": "2.1.1", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -8254,24 +7338,20 @@ }, "node_modules/nwsapi": { "version": "2.2.22", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", - "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", "dev": true, "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "version": "1.13.4", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8281,22 +7361,22 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -8307,14 +7387,14 @@ } }, "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "version": "1.1.9", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "es-object-atoms": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -8322,9 +7402,8 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8339,12 +7418,12 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -8357,14 +7436,11 @@ }, "node_modules/obuf": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "license": "MIT", "dependencies": { @@ -8376,33 +7452,21 @@ }, "node_modules/on-headers": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, "node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "version": "10.2.0", "dev": true, + "license": "MIT", "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" + "wsl-utils": "^0.1.0" }, "engines": { "node": ">=18" @@ -8413,25 +7477,23 @@ }, "node_modules/opener": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, + "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", "dev": true, + "license": "MIT", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -8442,6 +7504,7 @@ "resolved": "https://registry.npmjs.org/ow/-/ow-2.0.0.tgz", "integrity": "sha512-ESUigmGrdhUZ2nQSFNkeKSl6ZRPupXzprMs3yF9DYlNVpJ8XAjM/fI9RUZxA7PI1K9HQDCCvBo1jr/GEIo9joQ==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^6.3.0", "callsites": "^4.1.0", @@ -8462,6 +7525,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.2.0.tgz", "integrity": "sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -8469,31 +7533,64 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-event": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-pipe": { @@ -8501,6 +7598,7 @@ "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-4.0.0.tgz", "integrity": "sha512-HkPfFklpZQPUKBFXzKFB6ihLriIHxnmuQdK9WmLDwe4hf2PdhhfWT/FJa+pc3bA1ywvKXtedxIRmd4Y7BTXE4w==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8510,9 +7608,8 @@ }, "node_modules/p-retry": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", - "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/retry": "0.12.2", "is-network-error": "^1.0.0", @@ -8525,26 +7622,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/package-json-from-dist": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/param-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -8552,9 +7659,8 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -8564,8 +7670,6 @@ }, "node_modules/parse5": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, "license": "MIT", "dependencies": { @@ -8575,33 +7679,18 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/pascal-case": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -8609,69 +7698,43 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", - "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", "dev": true, - "engines": { - "node": "20 || >=22" - } + "license": "MIT" }, "node_modules/path-to-regexp": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true, "license": "MIT" }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -8680,10 +7743,11 @@ "license": "MIT" }, "node_modules/peek-readable": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.3.1.tgz", - "integrity": "sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.4.2.tgz", + "integrity": "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -8694,15 +7758,13 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -8712,9 +7774,8 @@ }, "node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -8722,19 +7783,64 @@ "node": ">=8" } }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "version": "1.1.0", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -8761,12 +7867,11 @@ } }, "node_modules/postcss-calc": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz", - "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==", + "version": "10.1.1", "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -8777,12 +7882,11 @@ } }, "node_modules/postcss-colormin": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", - "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", + "version": "7.0.5", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.27.0", "caniuse-api": "^3.0.0", "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" @@ -8791,115 +7895,107 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-convert-values": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz", - "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==", + "version": "7.0.8", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.27.0", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-discard-comments": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz", - "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==", + "version": "7.0.5", "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.1.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-discard-duplicates": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", - "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", + "version": "7.0.2", "dev": true, + "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-discard-empty": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", - "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", + "version": "7.0.1", "dev": true, + "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-discard-overridden": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", - "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", + "version": "7.0.1", "dev": true, + "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-merge-longhand": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", - "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==", + "version": "7.0.5", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^7.0.4" + "stylehacks": "^7.0.5" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-merge-rules": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz", - "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==", + "version": "7.0.7", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.27.0", "caniuse-api": "^3.0.0", - "cssnano-utils": "^5.0.0", - "postcss-selector-parser": "^6.1.2" + "cssnano-utils": "^5.0.1", + "postcss-selector-parser": "^7.1.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-minify-font-values": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", - "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -8907,64 +8003,60 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-minify-gradients": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", - "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "colord": "^2.9.3", - "cssnano-utils": "^5.0.0", + "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-minify-params": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", - "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", + "version": "7.0.5", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "cssnano-utils": "^5.0.0", + "browserslist": "^4.27.0", + "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-minify-selectors": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz", - "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==", + "version": "7.0.5", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.1.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-modules-extract-imports": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -8973,13 +8065,12 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "version": "4.2.0", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "engines": { @@ -8990,12 +8081,11 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "version": "3.2.1", "dev": true, + "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^10 || ^12 || >= 14" @@ -9006,9 +8096,8 @@ }, "node_modules/postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -9020,22 +8109,20 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", - "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", + "version": "7.0.1", "dev": true, + "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-display-values": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", - "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -9043,14 +8130,13 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-positions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", - "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -9058,14 +8144,13 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-repeat-style": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", - "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -9073,14 +8158,13 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-string": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", - "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -9088,14 +8172,13 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-timing-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", - "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -9103,30 +8186,28 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-unicode": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", - "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", + "version": "7.0.5", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.27.0", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", - "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -9134,14 +8215,13 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-whitespace": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", - "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -9149,46 +8229,43 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-ordered-values": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", - "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-utils": "^5.0.0", + "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-reduce-initial": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", - "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", + "version": "7.0.5", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.27.0", "caniuse-api": "^3.0.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-reduce-transforms": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", - "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -9196,14 +8273,13 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -9213,56 +8289,51 @@ } }, "node_modules/postcss-svgo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", - "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", - "svgo": "^3.3.2" + "svgo": "^4.0.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >= 18" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-unique-selectors": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz", - "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==", + "version": "7.0.4", "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.1.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", - "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "version": "3.6.2", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -9273,28 +8344,49 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "node_modules/pretty-error": { + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "fast-diff": "^1.1.2" + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">=6.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -9303,13 +8395,10 @@ }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "license": "MIT" }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "license": "MIT", "dependencies": { @@ -9322,8 +8411,6 @@ }, "node_modules/proxy-addr/node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "license": "MIT", "engines": { @@ -9332,8 +8419,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -9342,8 +8427,6 @@ }, "node_modules/qs": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -9358,8 +8441,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -9374,30 +8455,27 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "license": "MIT", "dependencies": { @@ -9412,9 +8490,8 @@ }, "node_modules/raw-loader": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -9430,27 +8507,12 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/raw-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/raw-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.3.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -9463,9 +8525,8 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -9475,31 +8536,26 @@ }, "node_modules/react-axe": { "version": "3.5.4", - "resolved": "https://registry.npmjs.org/react-axe/-/react-axe-3.5.4.tgz", - "integrity": "sha512-5xNO0QVCCEZnJiyhAGox0MGFyclgU3XL8se+5H+whdxV1VTtA9/uux9BSCF5mGNSgtSZkb+tQtrOaF+zGf/oWw==", - "deprecated": "deprecated", "dev": true, + "license": "MPL-2.0", "dependencies": { "axe-core": "^3.5.0", "requestidlecallback": "^0.3.0" } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-dropzone": { - "version": "14.3.8", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.8.tgz", - "integrity": "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==", + "version": "14.3.5", "license": "MIT", "dependencies": { "attr-accept": "^2.2.4", @@ -9513,6 +8569,12 @@ "react": ">= 16.8 || 18.0.0" } }, + "node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/react-refresh": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", @@ -9525,8 +8587,6 @@ }, "node_modules/react-router": { "version": "7.9.5", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.5.tgz", - "integrity": "sha512-JmxqrnBZ6E9hWmf02jzNn9Jm3UqyeimyiwzD69NjxGySG6lIz/1LVPsoTCwN7NBX2XjCEa1LIX5EMz1j2b6u6A==", "dev": true, "license": "MIT", "dependencies": { @@ -9548,8 +8608,6 @@ }, "node_modules/react-router-dom": { "version": "7.9.5", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.5.tgz", - "integrity": "sha512-mkEmq/K8tKN63Ae2M7Xgz3c9l9YNbY+NHH6NNeUmLA3kDkhKXRsNb/ZpxaEunvGo2/3YXdk5EJU3Hxp3ocaBPw==", "dev": true, "license": "MIT", "dependencies": { @@ -9564,31 +8622,20 @@ } }, "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "3.6.2", "dev": true, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", "dependencies": { @@ -9600,9 +8647,8 @@ }, "node_modules/rechoir": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.20.0" }, @@ -9611,27 +8657,28 @@ } }, "node_modules/rechoir/node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.11", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -9641,18 +8688,18 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", - "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "version": "1.0.10", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "which-builtin-type": "^1.1.4" + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -9663,19 +8710,19 @@ }, "node_modules/regenerator-runtime": { "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "version": "1.5.4", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "set-function-name": "^2.0.2" }, "engines": { @@ -9685,41 +8732,61 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "node_modules/relateurl": { + "version": "0.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, "node_modules/requestidlecallback": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/requestidlecallback/-/requestidlecallback-0.3.0.tgz", - "integrity": "sha1-b7dOBzP5DfP6pIOPn2oqX5t0KsU=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/reserved-identifiers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.0.0.tgz", - "integrity": "sha512-h0bP2Katmvf3hv4Z3WtDl4+6xt/OglQ2Xa6TnhZ/Rm9/7IH1crXQqMwD4J2ngKBonVv+fB55zfGgNDAmsevLVQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz", + "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -9729,9 +8796,8 @@ }, "node_modules/resolve": { "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -9746,9 +8812,8 @@ }, "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -9756,42 +8821,46 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rimraf": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "version": "6.1.0", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "glob": "^11.0.0", - "package-json-from-dist": "^1.0.0" + "glob": "^11.0.3", + "package-json-from-dist": "^1.0.1" }, "bin": { "rimraf": "dist/esm/bin.mjs" @@ -9803,25 +8872,14 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/rimraf/node_modules/glob": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "version": "11.0.3", "dev": true, + "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -9836,13 +8894,49 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/jackspeak": { + "version": "4.1.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/lru-cache": { + "version": "11.2.2", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/rimraf/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "10.1.1", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/path-scurry": { + "version": "2.0.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { "node": "20 || >=22" @@ -9852,9 +8946,9 @@ } }, "node_modules/rollup": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", - "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", + "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, "license": "MIT", "dependencies": { @@ -9868,43 +8962,40 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.5", - "@rollup/rollup-android-arm64": "4.52.5", - "@rollup/rollup-darwin-arm64": "4.52.5", - "@rollup/rollup-darwin-x64": "4.52.5", - "@rollup/rollup-freebsd-arm64": "4.52.5", - "@rollup/rollup-freebsd-x64": "4.52.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", - "@rollup/rollup-linux-arm-musleabihf": "4.52.5", - "@rollup/rollup-linux-arm64-gnu": "4.52.5", - "@rollup/rollup-linux-arm64-musl": "4.52.5", - "@rollup/rollup-linux-loong64-gnu": "4.52.5", - "@rollup/rollup-linux-ppc64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-musl": "4.52.5", - "@rollup/rollup-linux-s390x-gnu": "4.52.5", - "@rollup/rollup-linux-x64-gnu": "4.52.5", - "@rollup/rollup-linux-x64-musl": "4.52.5", - "@rollup/rollup-openharmony-arm64": "4.52.5", - "@rollup/rollup-win32-arm64-msvc": "4.52.5", - "@rollup/rollup-win32-ia32-msvc": "4.52.5", - "@rollup/rollup-win32-x64-gnu": "4.52.5", - "@rollup/rollup-win32-x64-msvc": "4.52.5", + "@rollup/rollup-android-arm-eabi": "4.53.3", + "@rollup/rollup-android-arm64": "4.53.3", + "@rollup/rollup-darwin-arm64": "4.53.3", + "@rollup/rollup-darwin-x64": "4.53.3", + "@rollup/rollup-freebsd-arm64": "4.53.3", + "@rollup/rollup-freebsd-x64": "4.53.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", + "@rollup/rollup-linux-arm-musleabihf": "4.53.3", + "@rollup/rollup-linux-arm64-gnu": "4.53.3", + "@rollup/rollup-linux-arm64-musl": "4.53.3", + "@rollup/rollup-linux-loong64-gnu": "4.53.3", + "@rollup/rollup-linux-ppc64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-musl": "4.53.3", + "@rollup/rollup-linux-s390x-gnu": "4.53.3", + "@rollup/rollup-linux-x64-gnu": "4.53.3", + "@rollup/rollup-linux-x64-musl": "4.53.3", + "@rollup/rollup-openharmony-arm64": "4.53.3", + "@rollup/rollup-win32-arm64-msvc": "4.53.3", + "@rollup/rollup-win32-ia32-msvc": "4.53.3", + "@rollup/rollup-win32-x64-gnu": "4.53.3", + "@rollup/rollup-win32-x64-msvc": "4.53.3", "fsevents": "~2.3.2" } }, "node_modules/rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "version": "0.8.0", "dev": true, "license": "MIT" }, "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "version": "7.1.0", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -9914,8 +9005,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -9931,30 +9020,30 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/sade": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", - "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", + "version": "1.8.1", + "license": "MIT", "dependencies": { "mri": "^1.1.0" }, "engines": { - "node": ">= 6" + "node": ">=6" } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -9965,20 +9054,47 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -9989,15 +9105,18 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.4.3", + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/saxes": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, + "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, @@ -10006,18 +9125,16 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.3", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -10025,7 +9142,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -10033,15 +9150,14 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -10050,9 +9166,8 @@ }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -10062,21 +9177,18 @@ }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/select-hose": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/selfsigned": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", "node-forge": "^1" @@ -10087,25 +9199,24 @@ }, "node_modules/semiver": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", - "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.7.3", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/send": { "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "license": "MIT", "dependencies": { @@ -10129,8 +9240,6 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { @@ -10139,46 +9248,29 @@ }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, - "node_modules/send/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/serialize-javascript": { + "version": "6.0.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" } }, "node_modules/serve-index": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -10194,18 +9286,24 @@ }, "node_modules/serve-index/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -10218,26 +9316,29 @@ }, "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/serve-static": { "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "license": "MIT", "dependencies": { @@ -10252,16 +9353,13 @@ }, "node_modules/set-cookie-parser": { "version": "2.7.2", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", - "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", "dev": true, "license": "MIT" }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -10276,9 +9374,8 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -10289,18 +9386,28 @@ "node": ">= 0.4" } }, + "node_modules/set-proto": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true, "license": "ISC" }, "node_modules/shallow-clone": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -10310,9 +9417,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -10322,18 +9428,66 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "version": "1.8.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, "engines": { "node": ">= 0.4" }, @@ -10341,16 +9495,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "node_modules/side-channel-weakmap": { + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -10366,24 +9520,32 @@ "dev": true, "license": "ISC" }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "node_modules/signal-exit": { + "version": "4.1.0", "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.2", + "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": ">=18" } }, "node_modules/sirv-cli": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-3.0.0.tgz", - "integrity": "sha512-p88yHl8DmTOUJroRiW2o9ezJc/YRLxphBydX2NGQc3naKBA09B3EM4Q/yaN8FYF0e50fRSZP7dyatr72b1u5Jw==", + "version": "3.0.1", + "license": "MIT", "dependencies": { "console-clear": "^1.1.0", "get-port": "^5.1.1", @@ -10401,80 +9563,49 @@ "node": ">=18" } }, - "node_modules/sirv-cli/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6" - } - }, - "node_modules/sirv-cli/node_modules/sirv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", - "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" + "node": ">=14.16" }, - "engines": { - "node": ">=18" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/sockjs": { "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, + "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/spdy": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -10488,9 +9619,8 @@ }, "node_modules/spdy-transport": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -10500,20 +9630,6 @@ "wbuf": "^1.7.3" } }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -10522,12 +9638,11 @@ "license": "MIT" }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/std-env": { @@ -10537,35 +9652,47 @@ "dev": true, "license": "MIT" }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "5.1.2", "dev": true, + "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10575,24 +9702,40 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "version": "4.0.12", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -10603,24 +9746,25 @@ }, "node_modules/string.prototype.repeat": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10630,24 +9774,26 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10661,23 +9807,24 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "7.1.2", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10685,11 +9832,21 @@ "node": ">=8" } }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -10699,9 +9856,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -10714,6 +9870,7 @@ "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.1.1.tgz", "integrity": "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==", "dev": true, + "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^5.3.1" @@ -10728,9 +9885,8 @@ }, "node_modules/style-loader": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", - "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18.12.0" }, @@ -10743,28 +9899,29 @@ } }, "node_modules/stylehacks": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz", - "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==", + "version": "7.0.7", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "postcss-selector-parser": "^6.1.2" + "browserslist": "^4.27.0", + "postcss-selector-parser": "^7.1.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/super-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.0.0.tgz", - "integrity": "sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.1.0.tgz", + "integrity": "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==", "dev": true, + "license": "MIT", "dependencies": { "function-timeout": "^1.0.1", + "make-asynchronous": "^1.0.1", "time-span": "^5.1.0" }, "engines": { @@ -10774,99 +9931,177 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-url-loader": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "file-loader": "~6.2.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/svgo": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "5.2.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/svg-url-loader": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/svg-url-loader/-/svg-url-loader-8.0.0.tgz", - "integrity": "sha512-5doSXvl18hY1fGsRLdhWAU5jgzgxJ06/gc/26cpuDnN0xOz1HmmfhkpL29SSrdIvhtxQ1UwGzmk7wTT/l48mKw==", + "node_modules/svgo/node_modules/domhandler": { + "version": "5.0.3", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "file-loader": "~6.2.0" + "domelementtype": "^2.3.0" }, "engines": { - "node": ">=14" + "node": ">= 4" }, - "peerDependencies": { - "webpack": "^5.0.0" + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "node_modules/svgo/node_modules/domutils": { + "version": "3.2.2", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/svgo/node_modules/entities": { + "version": "4.5.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">= 10" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/symbol-tree": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "version": "0.11.11", "dev": true, + "license": "MIT", "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" + "@pkgr/core": "^0.2.9" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/synckit" } }, "node_modules/tabbable": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.3.0.tgz", - "integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==", "license": "MIT" }, + "node_modules/tapable": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/terser": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", - "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "version": "5.44.1", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10883,16 +10118,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.14", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -10916,20 +10150,10 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -10939,39 +10163,10 @@ "node": ">= 10.13.0" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10982,48 +10177,46 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/terser/node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, "node_modules/thingies": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", - "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "version": "2.5.0", "dev": true, + "license": "MIT", "engines": { "node": ">=10.18" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, "peerDependencies": { "tslib": "^2" } }, "node_modules/thunky": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/time-span": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", "dev": true, + "license": "MIT", "dependencies": { "convert-hrtime": "^5.0.0" }, @@ -11043,8 +10236,7 @@ }, "node_modules/tinydate": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", - "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==", + "license": "MIT", "engines": { "node": ">=4" } @@ -11058,8 +10250,6 @@ }, "node_modules/tinyglobby": { "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11075,8 +10265,6 @@ }, "node_modules/tinyglobby/node_modules/fdir": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { @@ -11093,8 +10281,6 @@ }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -11116,8 +10302,6 @@ }, "node_modules/tldts": { "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", - "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11129,15 +10313,11 @@ }, "node_modules/tldts-core": { "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", - "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", "dev": true, "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11149,8 +10329,6 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "license": "MIT", "engines": { @@ -11158,11 +10336,13 @@ } }, "node_modules/token-types": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", - "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz", + "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==", "dev": true, + "license": "MIT", "dependencies": { + "@borewit/text-codec": "^0.1.0", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" }, @@ -11176,16 +10356,13 @@ }, "node_modules/totalist": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tough-cookie": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", - "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -11197,8 +10374,6 @@ }, "node_modules/tr46": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", - "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", "dev": true, "license": "MIT", "dependencies": { @@ -11209,10 +10384,9 @@ } }, "node_modules/tree-dump": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", - "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "version": "1.1.0", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.0" }, @@ -11224,259 +10398,87 @@ "tslib": "2" } }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-loader": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-loader/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsconfig-paths-webpack-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.2.0.tgz", - "integrity": "sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.7.0", - "tapable": "^2.2.1", - "tsconfig-paths": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "node_modules/ts-api-utils": { + "version": "2.1.0", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18.12" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "typescript": ">=4.8.4" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/ts-loader": { + "version": "9.5.4", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" }, "engines": { - "node": ">=7.0.0" + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.6", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">= 12" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/tsconfig-paths": { + "version": "4.2.0", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tapable": "^2.2.1", + "tsconfig-paths": "^4.1.2" + }, "engines": { - "node": ">=6" + "node": ">=10.13.0" } }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -11484,22 +10486,8 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "license": "MIT", "dependencies": { @@ -11512,8 +10500,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -11526,16 +10512,15 @@ } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -11545,17 +10530,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -11565,17 +10550,16 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -11585,10 +10569,9 @@ } }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.9.3", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11598,10 +10581,11 @@ } }, "node_modules/uint8array-extras": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", - "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -11610,15 +10594,17 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11626,16 +10612,15 @@ }, "node_modules/undici-types": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -11645,8 +10630,6 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, "license": "MIT", "engines": { @@ -11654,9 +10637,7 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "version": "1.1.4", "dev": true, "funding": [ { @@ -11672,9 +10653,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", - "picocolors": "^1.1.0" + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -11684,19 +10666,17 @@ } }, "node_modules/uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.1", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/url-loader": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "mime-types": "^2.1.27", @@ -11719,27 +10699,12 @@ } } }, - "node_modules/url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.3.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -11753,31 +10718,34 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utila": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -11889,26 +10857,26 @@ } }, "node_modules/vitest": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.5.tgz", - "integrity": "sha512-4H+J28MI5oeYgGg3h5BFSkQ1g/2GKK1IR8oorH3a6EQQbb7CwjbnyBjH4PGxw9/6vpwAPNzaeUMp4Js4WJmdXQ==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.10.tgz", + "integrity": "sha512-2Fqty3MM9CDwOVet/jaQalYlbcjATZwPYGcqpiYQqgQ/dLC7GuHdISKgTYIVF/kaishKxLzleKWWfbSDklyIKg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.5", - "@vitest/mocker": "4.0.5", - "@vitest/pretty-format": "4.0.5", - "@vitest/runner": "4.0.5", - "@vitest/snapshot": "4.0.5", - "@vitest/spy": "4.0.5", - "@vitest/utils": "4.0.5", + "@vitest/expect": "4.0.10", + "@vitest/mocker": "4.0.10", + "@vitest/pretty-format": "4.0.10", + "@vitest/runner": "4.0.10", + "@vitest/snapshot": "4.0.10", + "@vitest/spy": "4.0.10", + "@vitest/utils": "4.0.10", "debug": "^4.4.3", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", - "magic-string": "^0.30.19", + "magic-string": "^0.30.21", "pathe": "^2.0.3", "picomatch": "^4.0.3", - "std-env": "^3.9.0", + "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.15", @@ -11929,10 +10897,10 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.5", - "@vitest/browser-preview": "4.0.5", - "@vitest/browser-webdriverio": "4.0.5", - "@vitest/ui": "4.0.5", + "@vitest/browser-playwright": "4.0.10", + "@vitest/browser-preview": "4.0.10", + "@vitest/browser-webdriverio": "4.0.10", + "@vitest/ui": "4.0.10", "happy-dom": "*", "jsdom": "*" }, @@ -11981,8 +10949,6 @@ }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, "license": "MIT", "dependencies": { @@ -11994,8 +10960,6 @@ }, "node_modules/watchpack": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, "license": "MIT", "dependencies": { @@ -12008,17 +10972,21 @@ }, "node_modules/wbuf": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, + "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/webidl-conversions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -12026,20 +10994,21 @@ } }, "node_modules/webpack": { - "version": "5.97.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.0.tgz", - "integrity": "sha512-CWT8v7ShSfj7tGs4TLRtaOLmOCPWhoKEvp+eA7FVx8Xrjb3XfT0aXdxDItnRZmE8sHcH+a8ayDrJCOjXKxVFfQ==", + "version": "5.102.1", "dev": true, + "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.26.3", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", + "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -12049,11 +11018,11 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -12073,9 +11042,8 @@ }, "node_modules/webpack-bundle-analyzer": { "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, + "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", @@ -12097,52 +11065,45 @@ "node": ">= 10.13.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, - "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/webpack-bundle-analyzer/node_modules/sirv": { + "version": "2.0.4", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 10" } }, - "node_modules/webpack-bundle-analyzer/node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "7.5.10", "dev": true, - "dependencies": { - "duplexer": "^0.1.2" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8.3.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/webpack-cli": { @@ -12150,6 +11111,7 @@ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, + "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", @@ -12195,6 +11157,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -12204,6 +11167,7 @@ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -12214,14 +11178,13 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", - "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "version": "7.4.5", "dev": true, + "license": "MIT", "dependencies": { "colorette": "^2.0.10", - "memfs": "^4.6.0", - "mime-types": "^2.1.31", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" @@ -12242,10 +11205,27 @@ } } }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.54.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/webpack-dev-server": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", - "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "dev": true, "license": "MIT", "dependencies": { @@ -12268,90 +11248,42 @@ "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "schema-utils": "^4.2.0", - "selfsigned": "^2.4.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.4.2", - "ws": "^8.18.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 18.12.0" }, "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { - "bufferutil": { + "webpack": { "optional": true }, - "utf-8-validate": { + "webpack-cli": { "optional": true } } }, "node_modules/webpack-merge": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -12361,152 +11293,18 @@ "node": ">=18.0.0" } }, - "node_modules/webpack/node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true - }, - "node_modules/webpack/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true - }, - "node_modules/webpack/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true - }, - "node_modules/webpack/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true - }, - "node_modules/webpack/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "node_modules/webpack-sources": { + "version": "3.3.3", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, + "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=10.13.0" } }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -12515,56 +11313,18 @@ "node": ">=8.0.0" } }, - "node_modules/webpack/node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=10.13.0" + "node": ">=4.0" } }, "node_modules/websocket-driver": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -12576,17 +11336,14 @@ }, "node_modules/websocket-extensions": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } }, "node_modules/whatwg-encoding": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12598,8 +11355,6 @@ }, "node_modules/whatwg-encoding/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", "dependencies": { @@ -12611,8 +11366,6 @@ }, "node_modules/whatwg-mimetype": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, "license": "MIT", "engines": { @@ -12621,8 +11374,6 @@ }, "node_modules/whatwg-url": { "version": "14.2.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", - "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", "dev": true, "license": "MIT", "dependencies": { @@ -12635,9 +11386,8 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -12649,40 +11399,41 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", - "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", + "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -12693,9 +11444,8 @@ }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -12711,8 +11461,6 @@ }, "node_modules/which-typed-array": { "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { @@ -12750,16 +11498,38 @@ }, "node_modules/wildcard": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -12772,57 +11542,56 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "version": "8.18.3", "dev": true, "license": "MIT", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -12833,10 +11602,22 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xml-name-validator": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -12845,21 +11626,18 @@ }, "node_modules/xmlchars": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "3.1.1", + "dev": true, + "license": "ISC" }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 8ffb5994..8df9e7c1 100644 --- a/package.json +++ b/package.json @@ -25,26 +25,26 @@ }, "devDependencies": { "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.2.0", + "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@types/react-router-dom": "^5.3.3", - "@typescript-eslint/eslint-plugin": "^8.17.0", - "@typescript-eslint/parser": "^8.17.0", + "@typescript-eslint/eslint-plugin": "^8.34.0", + "@typescript-eslint/parser": "^8.34.0", "@vitejs/plugin-react": "^4.3.3", - "copy-webpack-plugin": "^12.0.2", + "copy-webpack-plugin": "^13.0.0", "css-loader": "^7.1.2", - "css-minimizer-webpack-plugin": "^7.0.0", + "css-minimizer-webpack-plugin": "^7.0.2", "dotenv-webpack": "^8.1.0", - "eslint": "^8.57.1", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-react": "^7.37.2", - "eslint-plugin-react-hooks": "^5.0.0", + "eslint": "^9.28.0", + "eslint-plugin-prettier": "^5.4.1", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^5.2.0", "html-webpack-plugin": "^5.6.3", "imagemin": "^9.0.0", "jsdom": "^25.0.1", "mini-css-extract-plugin": "^2.9.2", - "postcss": "^8.4.49", - "prettier": "^3.4.2", + "postcss": "^8.5.5", + "prettier": "^3.5.3", "prop-types": "^15.8.1", "raw-loader": "^4.0.2", "react-axe": "^3.5.4", @@ -57,7 +57,7 @@ "ts-loader": "^9.5.1", "tsconfig-paths-webpack-plugin": "^4.2.0", "tslib": "^2.8.1", - "typescript": "^5.7.2", + "typescript": "^5.8.3", "url-loader": "^4.1.1", "vite": "^6.4.1", "vitest": "^4.0.5", @@ -73,7 +73,7 @@ "@patternfly/react-styles": "^6.4.0", "react": "^18", "react-dom": "^18", - "sirv-cli": "^3.0.0" + "sirv-cli": "^3.0.1" }, "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/src/app/app.test.tsx b/src/app/app.test.tsx index 2804a998..2617e083 100644 --- a/src/app/app.test.tsx +++ b/src/app/app.test.tsx @@ -33,7 +33,9 @@ describe('App tests', () => { it('should expand the sidebar on larger viewports', () => { render(); - window.dispatchEvent(new Event('resize')); + act(() => { + window.dispatchEvent(new Event('resize')); + }); expect(screen.getByRole('link', { name: 'Dashboard' })).toBeVisible(); }); @@ -43,7 +45,9 @@ describe('App tests', () => { render(); - window.dispatchEvent(new Event('resize')); + act(() => { + window.dispatchEvent(new Event('resize')); + }); const button = screen.getByRole('button', { name: 'Global navigation' }); expect(screen.getByRole('link', { name: 'Dashboard' })).toBeVisible(); From c476881634c35c60b35e080cae05b7b901aac81c Mon Sep 17 00:00:00 2001 From: nicolethoen Date: Fri, 13 Jun 2025 13:51:56 -0400 Subject: [PATCH 02/21] fix: update linting --- eslint.config.js | 34 +++++ package-lock.json | 265 +++++++++++++++++++++++++++++++++++- package.json | 5 +- src/app/Support/Support.tsx | 1 - src/app/routes.tsx | 2 - src/index.tsx | 1 - 6 files changed, 302 insertions(+), 6 deletions(-) create mode 100644 eslint.config.js diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..b17cc57f --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,34 @@ +import tseslint from 'typescript-eslint'; +import reactPlugin from 'eslint-plugin-react'; +import reactHooksPlugin from 'eslint-plugin-react-hooks'; + +export default { + files: ['src/**/*.{js,jsx,ts,tsx}'], + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: '.', + ecmaFeatures: { jsx: true }, + }, + }, + plugins: { + '@typescript-eslint': tseslint.plugin, + 'react': reactPlugin, + 'react-hooks': reactHooksPlugin, + }, + rules: { + '@typescript-eslint/no-unused-vars': 'error', + 'react/prop-types': 'off', + 'sort-imports': ['error', { ignoreDeclarationSort: true }], + '@typescript-eslint/explicit-function-return-type': 'off', + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + '@typescript-eslint/interface-name-prefix': 'off', + }, + settings: { + react: { + version: 'detect', + }, + }, +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 73b1296f..460d4f2b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "sirv-cli": "^3.0.1" }, "devDependencies": { + "@eslint/js": "^9.29.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", @@ -51,6 +52,7 @@ "tsconfig-paths-webpack-plugin": "^4.2.0", "tslib": "^2.8.1", "typescript": "^5.8.3", + "typescript-eslint": "^8.34.0", "url-loader": "^4.1.1", "vite": "^6.4.1", "vitest": "^4.0.5", @@ -1053,6 +1055,8 @@ }, "node_modules/@eslint/js": { "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, "license": "MIT", "engines": { @@ -10569,7 +10573,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -10580,6 +10586,263 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.0.tgz", + "integrity": "sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.34.0", + "@typescript-eslint/parser": "8.34.0", + "@typescript-eslint/utils": "8.34.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.0.tgz", + "integrity": "sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.34.0", + "@typescript-eslint/type-utils": "8.34.0", + "@typescript-eslint/utils": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.34.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.0.tgz", + "integrity": "sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/typescript-estree": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/project-service": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz", + "integrity": "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.34.0", + "@typescript-eslint/types": "^8.34.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.0.tgz", + "integrity": "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.0.tgz", + "integrity": "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.0.tgz", + "integrity": "sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.34.0", + "@typescript-eslint/utils": "8.34.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", + "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.0.tgz", + "integrity": "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.34.0", + "@typescript-eslint/tsconfig-utils": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.0.tgz", + "integrity": "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/typescript-estree": "8.34.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.0.tgz", + "integrity": "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.34.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/uint8array-extras": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", diff --git a/package.json b/package.json index 8df9e7c1..bfc49897 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "clean": "rimraf dist" }, "devDependencies": { + "@eslint/js": "^9.29.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", @@ -58,6 +59,7 @@ "tsconfig-paths-webpack-plugin": "^4.2.0", "tslib": "^2.8.1", "typescript": "^5.8.3", + "typescript-eslint": "^8.34.0", "url-loader": "^4.1.1", "vite": "^6.4.1", "vitest": "^4.0.5", @@ -75,5 +77,6 @@ "react-dom": "^18", "sirv-cli": "^3.0.1" }, - "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e", + "type": "module" } diff --git a/src/app/Support/Support.tsx b/src/app/Support/Support.tsx index d6b1ace9..bdec680c 100644 --- a/src/app/Support/Support.tsx +++ b/src/app/Support/Support.tsx @@ -16,7 +16,6 @@ export interface ISupportProps { sampleProp?: string; } -// eslint-disable-next-line prefer-const let Support: React.FunctionComponent = () => ( diff --git a/src/app/routes.tsx b/src/app/routes.tsx index 09508174..0e39c349 100644 --- a/src/app/routes.tsx +++ b/src/app/routes.tsx @@ -8,9 +8,7 @@ import { NotFound } from '@app/NotFound/NotFound'; export interface IAppRoute { label?: string; // Excluding the label will exclude the route from the nav sidebar in AppLayout - /* eslint-disable @typescript-eslint/no-explicit-any */ element: React.ReactElement; - /* eslint-enable @typescript-eslint/no-explicit-any */ exact?: boolean; path: string; title: string; diff --git a/src/index.tsx b/src/index.tsx index 8b189889..8eea7c4b 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -11,7 +11,6 @@ if (process.env.NODE_ENV !== "production") { } ] }; - // eslint-disable-next-line @typescript-eslint/no-require-imports const axe = require("react-axe"); axe(React, ReactDOM, 1000, config); } From 2f71e60d55e04138baf9c8e8bc56b82b1e61ff46 Mon Sep 17 00:00:00 2001 From: nicolethoen Date: Fri, 13 Jun 2025 13:57:51 -0400 Subject: [PATCH 03/21] fix usage of cjs and es modules --- stylePaths.js | 26 +++++++++++------------ webpack.common.js | 54 ++++++++++++++++++++--------------------------- webpack.dev.js | 12 +++++------ webpack.prod.js | 14 ++++++------ 4 files changed, 48 insertions(+), 58 deletions(-) diff --git a/stylePaths.js b/stylePaths.js index 2ca7405a..e7302b22 100644 --- a/stylePaths.js +++ b/stylePaths.js @@ -1,14 +1,12 @@ -const path = require('path'); -module.exports = { - stylePaths: [ - path.resolve(__dirname, 'src'), - path.resolve(__dirname, 'node_modules/patternfly'), - path.resolve(__dirname, 'node_modules/@patternfly/patternfly'), - path.resolve(__dirname, 'node_modules/@patternfly/react-styles/css'), - path.resolve(__dirname, 'node_modules/@patternfly/react-core/dist/styles/base.css'), - path.resolve(__dirname, 'node_modules/@patternfly/react-core/dist/esm/@patternfly/patternfly'), - path.resolve(__dirname, 'node_modules/@patternfly/react-core/node_modules/@patternfly/react-styles/css'), - path.resolve(__dirname, 'node_modules/@patternfly/react-table/node_modules/@patternfly/react-styles/css'), - path.resolve(__dirname, 'node_modules/@patternfly/react-inline-edit-extension/node_modules/@patternfly/react-styles/css') - ] -} +import path from 'path'; +export const stylePaths = [ + path.resolve('./src'), + path.resolve('./node_modules/patternfly'), + path.resolve('./node_modules/@patternfly/patternfly'), + path.resolve('./node_modules/@patternfly/react-styles/css'), + path.resolve('./node_modules/@patternfly/react-core/dist/styles/base.css'), + path.resolve('./node_modules/@patternfly/react-core/dist/esm/@patternfly/patternfly'), + path.resolve('./node_modules/@patternfly/react-core/node_modules/@patternfly/react-styles/css'), + path.resolve('./node_modules/@patternfly/react-table/node_modules/@patternfly/react-styles/css'), + path.resolve('./node_modules/@patternfly/react-inline-edit-extension/node_modules/@patternfly/react-styles/css') +]; diff --git a/webpack.common.js b/webpack.common.js index 0a5e73f3..a4701c00 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -1,13 +1,14 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -const path = require('path'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const CopyPlugin = require('copy-webpack-plugin'); -const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); -const Dotenv = require('dotenv-webpack'); +import path from 'path'; +import HtmlWebpackPlugin from 'html-webpack-plugin'; +import CopyPlugin from 'copy-webpack-plugin'; +import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin'; +import Dotenv from 'dotenv-webpack'; const BG_IMAGES_DIRNAME = 'bgimages'; const ASSET_PATH = process.env.ASSET_PATH || '/'; -module.exports = (env) => { + +export default (env) => { return { module: { rules: [ @@ -29,11 +30,11 @@ module.exports = (env) => { // only process modules with this loader // if they live under a 'fonts' or 'pficon' directory include: [ - path.resolve(__dirname, 'node_modules/patternfly/dist/fonts'), - path.resolve(__dirname, 'node_modules/@patternfly/react-core/dist/styles/assets/fonts'), - path.resolve(__dirname, 'node_modules/@patternfly/react-core/dist/styles/assets/pficon'), - path.resolve(__dirname, 'node_modules/@patternfly/patternfly/assets/fonts'), - path.resolve(__dirname, 'node_modules/@patternfly/patternfly/assets/pficon'), + path.resolve('./node_modules/patternfly/dist/fonts'), + path.resolve('./node_modules/@patternfly/react-core/dist/styles/assets/fonts'), + path.resolve('./node_modules/@patternfly/react-core/dist/styles/assets/pficon'), + path.resolve('./node_modules/@patternfly/patternfly/assets/fonts'), + path.resolve('./node_modules/@patternfly/patternfly/assets/pficon'), ], }, { @@ -74,23 +75,14 @@ module.exports = (env) => { { test: /\.(jpg|jpeg|png|gif)$/i, include: [ - path.resolve(__dirname, 'src'), - path.resolve(__dirname, 'node_modules/patternfly'), - path.resolve(__dirname, 'node_modules/@patternfly/patternfly/assets/images'), - path.resolve(__dirname, 'node_modules/@patternfly/react-styles/css/assets/images'), - path.resolve(__dirname, 'node_modules/@patternfly/react-core/dist/styles/assets/images'), - path.resolve( - __dirname, - 'node_modules/@patternfly/react-core/node_modules/@patternfly/react-styles/css/assets/images' - ), - path.resolve( - __dirname, - 'node_modules/@patternfly/react-table/node_modules/@patternfly/react-styles/css/assets/images' - ), - path.resolve( - __dirname, - 'node_modules/@patternfly/react-inline-edit-extension/node_modules/@patternfly/react-styles/css/assets/images' - ), + path.resolve('./src'), + path.resolve('./node_modules/patternfly'), + path.resolve('./node_modules/@patternfly/patternfly/assets/images'), + path.resolve('./node_modules/@patternfly/react-styles/css/assets/images'), + path.resolve('./node_modules/@patternfly/react-core/dist/styles/assets/images'), + path.resolve('./node_modules/@patternfly/react-core/node_modules/@patternfly/react-styles/css/assets/images'), + path.resolve('./node_modules/@patternfly/react-table/node_modules/@patternfly/react-styles/css/assets/images'), + path.resolve('./node_modules/@patternfly/react-inline-edit-extension/node_modules/@patternfly/react-styles/css/assets/images') ], type: 'asset/inline', use: [ @@ -107,12 +99,12 @@ module.exports = (env) => { }, output: { filename: '[name].bundle.js', - path: path.resolve(__dirname, 'dist'), + path: path.resolve('./dist'), publicPath: ASSET_PATH, }, plugins: [ new HtmlWebpackPlugin({ - template: path.resolve(__dirname, 'src', 'index.html'), + template: path.resolve('./src', 'index.html'), }), new Dotenv({ systemvars: true, @@ -126,7 +118,7 @@ module.exports = (env) => { extensions: ['.js', '.ts', '.tsx', '.jsx'], plugins: [ new TsconfigPathsPlugin({ - configFile: path.resolve(__dirname, './tsconfig.json'), + configFile: path.resolve('./tsconfig.json'), }), ], symlinks: false, diff --git a/webpack.dev.js b/webpack.dev.js index f959390b..3cf7e4c5 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -1,13 +1,13 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -const path = require('path'); -const { merge } = require('webpack-merge'); -const common = require('./webpack.common.js'); -const { stylePaths } = require('./stylePaths'); +import path from 'path'; +import { merge } from 'webpack-merge'; +import common from './webpack.common.js'; +import { stylePaths } from './stylePaths.js'; const HOST = process.env.HOST || 'localhost'; const PORT = process.env.PORT || '9000'; -module.exports = merge(common('development'), { +export default merge(common('development'), { mode: 'development', devtool: 'eval-source-map', devServer: { @@ -16,7 +16,7 @@ module.exports = merge(common('development'), { historyApiFallback: true, open: true, static: { - directory: path.resolve(__dirname, 'dist'), + directory: path.resolve('./dist'), }, client: { overlay: true, diff --git a/webpack.prod.js b/webpack.prod.js index eb6f453d..9f0a9467 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -1,13 +1,13 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -const { merge } = require('webpack-merge'); -const common = require('./webpack.common.js'); -const { stylePaths } = require('./stylePaths'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); -const TerserJSPlugin = require('terser-webpack-plugin'); +import { merge } from 'webpack-merge'; +import common from './webpack.common.js'; +import { stylePaths } from './stylePaths.js'; +import MiniCssExtractPlugin from 'mini-css-extract-plugin'; +import CssMinimizerPlugin from 'css-minimizer-webpack-plugin'; +import TerserJSPlugin from 'terser-webpack-plugin'; -module.exports = merge(common('production'), { +export default merge(common('production'), { mode: 'production', devtool: 'source-map', optimization: { From 263e638d2baeac13f49ba7824bc65ee35ee0cab7 Mon Sep 17 00:00:00 2001 From: nicolethoen Date: Fri, 13 Jun 2025 14:00:37 -0400 Subject: [PATCH 04/21] update readme --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 53ffb064..8c13f638 100644 --- a/README.md +++ b/README.md @@ -101,8 +101,7 @@ This project includes an [`ai-documentation`](./ai-documentation/README.md) dire - Reference troubleshooting tips and specialized rules (charts, chatbot, etc.) **How to use:** -- If you are using an AI-enabled IDE, the AI agent will automatically leverage the [AI Documentation & Rules](./ai-documentation/README.md) to assist you as you develop. -- Human contributors can also consult these files directly for detailed standards and examples, but the primary audience is AI coding assistants. +If you are using an AI-enabled IDE, the AI agent will automatically leverage the [AI Documentation & Rules](./ai-documentation/README.md) to assist you as you develop. By following these rulesβ€”either directly or via your AI assistantβ€”you'll ensure your app is maintainable, accessible, and consistent with PatternFly best practices. From 54ccfa240a3e96a71789108b383484555d82cf5e Mon Sep 17 00:00:00 2001 From: nicolethoen Date: Mon, 16 Jun 2025 09:10:49 -0400 Subject: [PATCH 05/21] update meta data in cursor rule --- .cursor/rules/patternfly-vibe-coding.mdc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.cursor/rules/patternfly-vibe-coding.mdc b/.cursor/rules/patternfly-vibe-coding.mdc index b9794c69..52e0b078 100644 --- a/.cursor/rules/patternfly-vibe-coding.mdc +++ b/.cursor/rules/patternfly-vibe-coding.mdc @@ -1,7 +1,7 @@ --- -description: -globs: -alwaysApply: false +description: Enforces PatternFly Vibe coding standards and documentation best practices for all PatternFly React code. +globs: "**/*.{js,jsx,ts,tsx,css,scss}" +alwaysApply: true --- # PatternFly Vibe Coding Rule From 9b47a92929fabe8eec817bbe84e224fda7f1fdc2 Mon Sep 17 00:00:00 2001 From: nicolethoen Date: Mon, 23 Jun 2025 08:47:10 -0400 Subject: [PATCH 06/21] update guidance ahead of workshop --- ai-documentation/README.md | 2 +- ai-documentation/chatbot/README.md | 11 +- .../components/data-display/README.md | 158 ++---- .../components/data-display/table.md | 91 +++- ai-documentation/components/layout/README.md | 450 +++--------------- .../guidelines/component-architecture.md | 188 ++------ .../guidelines/deployment-guide.md | 127 +++++ ai-documentation/resources/external-links.md | 4 +- ai-documentation/resources/local-files.md | 217 --------- .../troubleshooting/common-issues.md | 15 +- 10 files changed, 394 insertions(+), 869 deletions(-) create mode 100644 ai-documentation/guidelines/deployment-guide.md delete mode 100644 ai-documentation/resources/local-files.md diff --git a/ai-documentation/README.md b/ai-documentation/README.md index bf319965..d2afb805 100644 --- a/ai-documentation/README.md +++ b/ai-documentation/README.md @@ -16,6 +16,7 @@ Essential rules and guidelines for AI coders working with PatternFly React appli - [**PatternFly Guidelines**](./guidelines/README.md) - Core development principles - [**Component Rules**](./guidelines/component-architecture.md) - Component structure requirements - [**Styling Rules**](./guidelines/styling-standards.md) - CSS and styling requirements +- [**Deployment Guide**](./guidelines/deployment-guide.md) - How to deploy prototypes ### 🧩 Component Rules - [**Layout Rules**](./components/layout/README.md) - Page structure requirements @@ -31,7 +32,6 @@ Essential rules and guidelines for AI coders working with PatternFly React appli ### πŸ“– Resources - [**External Links**](./resources/external-links.md) - Official documentation links -- [**Local Files**](./resources/local-files.md) - Project-specific resources ## Usage Rules for AI Coders diff --git a/ai-documentation/chatbot/README.md b/ai-documentation/chatbot/README.md index 815a0b60..3f2ca7bf 100644 --- a/ai-documentation/chatbot/README.md +++ b/ai-documentation/chatbot/README.md @@ -4,8 +4,8 @@ Essential rules for PatternFly Chatbot implementation and integration patterns. ## Related Files -- [**Local Resources**](../resources/local-files.md) - Reference to patternfly-chatbot.txt -- [**Component Architecture**](../guidelines/component-architecture.md) - Component structure guidelines +- [**Component Architecture**](../guidelines/component-architecture.md) - Chatbot component structure rules +- [**Styling Standards**](../guidelines/styling-standards.md) - CSS and styling best practices ## Installation Rules @@ -188,4 +188,9 @@ const createMessage = (content, role) => ({ - [PatternFly Chatbot on PatternFly.org](https://www.patternfly.org/patternfly-ai/chatbot/overview) - [PatternFly Chatbot GitHub Repository](https://github.com/patternfly/chatbot) -> For the most up-to-date documentation and code examples, consult both PatternFly.org and the official GitHub repository. When using AI tools, leverage context7 to fetch the latest docs from these sources. \ No newline at end of file +> For the most up-to-date documentation and code examples, consult both PatternFly.org and the official GitHub repository. When using AI tools, leverage context7 to fetch the latest docs from these sources. + +### Further Reading +- **[PatternFly Chatbot Docs](https://www.patternfly.org/chatbot/overview/)** +- **[Component API](https://github.com/patternfly/patternfly-react/tree/main/packages/react-core/src/components/ChipGroup)** - ChipGroup component API for tags +- **[Accessibility Guide](https://www.patternfly.org/get-started/accessibility-guide)** \ No newline at end of file diff --git a/ai-documentation/components/data-display/README.md b/ai-documentation/components/data-display/README.md index 419eb9ff..54c71d34 100644 --- a/ai-documentation/components/data-display/README.md +++ b/ai-documentation/components/data-display/README.md @@ -94,21 +94,14 @@ if (!data?.length) return - {Row} - - // For better UX, use pagination ``` @@ -155,127 +148,68 @@ import { Pagination } from '@patternfly/react-core'; - **[Toolbar Component](https://www.patternfly.org/components/toolbar)** - Toolbar with filters - **[Dropdown Component](https://www.patternfly.org/components/menus/dropdown)** - Dropdown positioning -## Data View Component Rules +## Using the Data View Component -PatternFly Data View provides a standardized way to present and interact with tabular or list-based data, following PatternFly design and accessibility guidelines. +The `@patternfly/react-data-view` component is a powerful, opinionated tool for building consistent data-driven tables and lists. It composes standard PatternFly components like `Table`, `Toolbar`, and `Pagination` into a single, streamlined API. -### Installation -```bash -npm install @patternfly/react-data-view -``` +### When to Use Data View +- βœ… **Use for standard list pages**: When you need to display a list of resources with common functionality like filtering, sorting, selection, and actions. +- βœ… **To enforce consistency**: Use it across your application to ensure all data tables look and behave the same. +- ❌ **Not for highly custom layouts**: If your layout deviates significantly from a standard table or list view, composing individual PatternFly components may be a better approach. -### Required CSS Import -```jsx -import '@patternfly/react-data-view/dist/css/main.css'; -``` +## Data view documentation +- **[Data view](https://www.patternfly.org/extensions/data-view/overview)** - Official data view documentation +- **[Table Component](https://www.patternfly.org/extensions/data-view/table)** - Data view's table documentation and examples +- **[Toolbar Component](https://www.patternfly.org/extensions/data-view/toolbar/)** - Data view's toolbar documentation and examples -### Import Pattern -- βœ… **Use dynamic imports** from `/dist/dynamic/` paths -- ❌ **Don't use standard imports** - -```jsx -// βœ… Correct -import DataView from '@patternfly/react-data-view/dist/dynamic/DataView'; -``` +### Required Setup -### Basic Usage Example -```jsx -import DataView from '@patternfly/react-data-view/dist/dynamic/DataView'; +1. **Installation**: + ```bash + npm install @patternfly/react-data-view + ``` - -``` +2. **CSS Import**: + ```jsx + // Import required CSS in your application's entrypoint + import '@patternfly/react-data-view/dist/css/main.css'; + ``` -### Component API -- Use PatternFly naming conventions for props (e.g., `variant`, `onClick`) -- Extend PatternFly types when possible -- Document all props and usage examples -- Avoid unnecessary external dependencies +3. **Component Import**: + ```jsx + // Use dynamic imports for better performance + import DataView from '@patternfly/react-data-view/dist/dynamic/DataView'; + ``` -#### Example API Extension -```ts -// when possible, extend available PatternFly types -export interface DataViewProps extends TableProps { - customLabel?: string; -} +### Best Practices -export const DataView: React.FunctionComponent = ({ customLabel, ...props }) => ( /* ... */ ); -``` +- **Provide stable data and columns**: For performance, memoize the `data` and `columns` props passed to `DataView`, especially if they are derived from other state. + ```jsx + const columns = useMemo(() => [...], []); + const data = useMemo(() => [...], [sourceData]); -### Directory Structure -``` -src -|- DataView - |- index.ts - |- DataView.tsx -``` + + ``` -### OUIA ID Convention -For testing, use the component name as the default OUIA ID, and for subcomponents, use `ComponentName-element-specification`. -```ts -ouiaId="DataView-actions-button" -``` +- **Leverage the built-in toolbar**: `DataView` includes a `Toolbar` with filtering capabilities. Provide filter configurations instead of building your own toolbar from scratch. -### Testing & Linting -- Add unit tests to `DataView.test.tsx` -- Add Cypress component/E2E tests to `cypress/component/DataView.cy.tsx` and `cypress/e2e/DataView.spec.cy.ts` -- Run tests and linting: -```bash -npm run test -npm run lint -``` +- **Use the provided action resolver**: For row actions, use the `onRowAction` prop and provide an action resolver function. This ensures actions are handled consistently. -### Accessibility -- Provide proper ARIA labels and roles -- Ensure keyboard navigation and screen reader support -- Run accessibility tests: -```bash -npm run build:docs -npm run serve:docs -npm run test:a11y -npm run serve:a11y -``` - -### Documentation Example (Markdown) -```md ---- -section: extensions -subsection: Data view -id: DataView -propComponents: ['DataView'] -sourceLink: https://github.com/patternfly/react-data-view/blob/main/packages/module/patternfly-docs/content/extensions/data-view/examples/DataView/DataView.md ---- - -import DataView from "@patternfly/react-data-view/dist/dynamic/DataView"; +### Real-World Example: OpenShift Console -## Component usage +A production example of PatternFly Data View usage can be found in the OpenShift Console codebase. It's an excellent resource for seeing how `DataView` is integrated with live Kubernetes data and Redux for state management. - +- **[DataViewPodList.tsx on GitHub](https://github.com/openshift/console/blob/79d29bca8440a5ad82b5257bb0f37bc24384eb0e/frontend/public/components/data-view-poc/DataViewPodList.tsx)** -### DataView component example label +Key integration patterns from this example include: +- Integrating Data View with live Kubernetes data and application state. +- Passing dynamic data and columns to the component. +- Handling loading, error, and empty states in a production context. +- Using PatternFly composable components for custom row rendering and actions. +- Connecting Data View to Redux or other state management solutions. -```js file="./DataViewExample.tsx"``` -``` +> For advanced usage, review the linked file to see how Data View is composed with other PatternFly and application-specific components. -### References +> **Note:** Always consult the latest PatternFly Data View documentation and demo source code for the most up-to-date usage patterns and best practices. - [PatternFly React Data View GitHub](https://github.com/patternfly/react-data-view) -- [PatternFly Data View NPM](https://www.npmjs.com/package/@patternfly/react-data-view) - -> **Note:** Always consult the latest PatternFly Data View documentation and demo source code for up-to-date usage patterns and best practices. - -### Real-World Example: OpenShift Console - -A production example of PatternFly Data View usage can be found in the OpenShift Console codebase: -- [DataViewPodList.tsx on GitHub](https://github.com/openshift/console/blob/79d29bca8440a5ad82b5257bb0f37bc24384eb0e/frontend/public/components/data-view-poc/DataViewPodList.tsx) - -**Key integration patterns and best practices from this example:** -- Integrates Data View with live Kubernetes data (pods) and application state. -- Demonstrates how to pass dynamic data and columns to the Data View component. -- Shows how to handle loading, error, and empty states in a real product context. -- Illustrates the use of PatternFly composable components for custom row rendering and actions. -- Provides a template for connecting Data View to Redux or other state management solutions. - -> For advanced usage, review the linked file to see how Data View is composed with other PatternFly and application-specific components. +- [PatternFly Data View NPM](https://www.npmjs.com/package/@patternfly/react-data-view) \ No newline at end of file diff --git a/ai-documentation/components/data-display/table.md b/ai-documentation/components/data-display/table.md index 691ec48e..4b04ab5d 100644 --- a/ai-documentation/components/data-display/table.md +++ b/ai-documentation/components/data-display/table.md @@ -62,22 +62,94 @@ const isPartiallySelected = selectedItems.size > 0 && selectedItems.size < data. /> ``` +## Column and Header Management + +PatternFly provides powerful props for controlling column widths and making headers and columns "sticky" for better usability with wide or long tables. + +### Column Width Control +Use the `width` modifier on the `` component to specify column widths as a percentage of the table's total width. + +- βœ… **Use `width(percentage)`**: Best for flexible, responsive layouts. +- ❌ **Avoid fixed pixel widths**: Can break responsiveness. + +```jsx +import { Table, Thead, Tbody, Tr, Th, Td } from '@patternfly/react-table'; +import { width } from '@patternfly/react-table'; + + + + + + + + + + + {/* ... */} + +
User IDNameEmail
+``` + +### Controlling Text and Column Width +In addition to setting explicit widths, you can control how text behaves within cells using the `modifier` prop on `` and `` components. This influences column dimensions and text overflow. + +Key text modifiers include: +- **`truncate`**: Truncates text with an ellipsis. +- **`wrap`**: Forces text to wrap, which is useful for long header text. +- **`nowrap`**: Prevents text from wrapping. +- **`breakWord`**: Forces long, unbreakable strings (like URLs) to break. +- **`fitContent`**: Shrinks the column to fit its content. + +For detailed usage and code examples, see the official PatternFly documentation and the example in the PatternFly React repository. + +- [**Controlling Text in Tables (PatternFly Docs)**](https://www.patternfly.org/components/table/controlling-text) +- [**TableControllingText.tsx Example on GitHub**](https://github.com/patternfly/patternfly-react/blob/main/packages/react-table/src/components/Table/examples/TableControllingText.tsx) + +### Sticky Headers and Columns +For tables that scroll horizontally or vertically, you can make the header, specific columns, or the action column "sticky." + +- **`isStickyHeader`**: Add this prop to the `` component to make the header row stick to the top during vertical scrolling. +- **`isSticky`**: Add this prop to a `
` or `` component to make an entire column sticky during horizontal scrolling. This is commonly used for the first column (e.g., selection checkbox or ID), or last column (e.g. columns containing actions menus). + +```jsx +// βœ… Sticky header, first column, and action column +import { Table, Thead, Tbody, Tr, Th, Td } from '@patternfly/react-table'; + + + + + + + {/* ... more columns */} + + + + + {data.map(item => ( + + + + {/* ... more cells */} + + + ))} + +
IDNameActions
{item.id}{item.name} + +
+``` + ## Performance Rules -- βœ… **Use virtualization for 1000+ rows** - react-window library +- βœ… **Use Skeleton for loading states** - Provide visual feedback +- βœ… **Ensure responsive behavior** - Test on multiple screen sizes - βœ… **Use pagination for large datasets** - Better UX than virtualization - βœ… **Memoize table rows** - React.memo for performance - βœ… **Use useCallback for handlers** - Stable references ```jsx // βœ… Required for large datasets -import { FixedSizeList as List } from 'react-window'; import { Pagination } from '@patternfly/react-core'; -// For 1000+ items, use virtualization - - {Row} - - // For better UX, use pagination ``` @@ -109,11 +181,6 @@ import { Pagination } from '@patternfly/react-core'; document.body }}> ``` -### Performance Issues -- **1000+ rows**: Use virtualization with react-window -- **Large datasets**: Implement pagination -- **Slow rendering**: Memoize components with React.memo - ### Selection Issues - **Use Set not Array**: More efficient for selection state - **Handle indeterminate**: For "select all" checkbox state diff --git a/ai-documentation/components/layout/README.md b/ai-documentation/components/layout/README.md index 9d5f9a0c..6d437530 100644 --- a/ai-documentation/components/layout/README.md +++ b/ai-documentation/components/layout/README.md @@ -2,6 +2,8 @@ This section covers PatternFly layout components and page structure patterns for building consistent application layouts. +> **Note:** For up-to-date code examples, this documentation now links directly to the official PatternFly documentation and the PatternFly React GitHub repository. Inline code has been replaced with links to ensure you always see the latest patterns and best practices. **All layout examples should use PatternFly React layout components (e.g., Grid, GridItem, Flex, FlexItem) instead of divs with utility classes.** + ## Introduction PatternFly layout components provide the foundation for structuring application pages and organizing content. These components ensure consistent spacing, responsive behavior, and proper semantic structure across your application. @@ -24,356 +26,106 @@ PatternFly layout components provide the foundation for structuring application ### PageSection Component -The [`PageSection`](https://www.patternfly.org/components/page/page-section) component is the primary building block for page content structure. - -#### Basic Usage -```jsx -import { PageSection, Content } from '@patternfly/react-core'; - -const BasicPage = () => ( - - {/* Page Title Section */} - - Page Title - - - {/* Main Content Section */} - - Main page content goes here - - -); -``` +The [`PageSection`](https://www.patternfly.org/components/page/page-section) component is the primary building block for page content structure. It is highly versatile and supports multiple variants, padding options, and responsive configurations. -#### PageSection Variants -```jsx -// Light background for headers/titles - - Application Title - - -// Default background for main content - - - - -// Secondary background for supporting content - - - - -// Dark background for special sections - - - -``` +For detailed examples of all its features, refer to the official documentation. -#### Padding Configuration -```jsx -// Standard padding - - Standard padded content - - -// No padding - - Content with no padding - - -// Responsive padding - - Responsive padding content - -``` - -#### Body Wrapper -```jsx -// Adds pf-vX-c-page__main-body wrapper for standard content padding - -
- Content with body wrapper styling -
-
-``` +- [**PageSection Official Docs**](https://www.patternfly.org/components/page/page-section) +- [**PageSection Code Examples on GitHub**](https://github.com/patternfly/patternfly-react/tree/main/packages/react-core/src/components/PageSection/examples) ## Common Layout Patterns +This section describes common page layout patterns and links to their official documentation and examples. + ### Standard Page Layout -```jsx -import { - PageSection, - Content, - Toolbar, - ToolbarContent -} from '@patternfly/react-core'; - -const StandardPageLayout = () => ( - - {/* 1. Page Title Section */} - - User Management - Manage user accounts and permissions - - - {/* 2. Toolbar Section */} - - - - {/* Filters, search, actions */} - - - - - {/* 3. Main Content Section */} - - - - -); -``` +A standard page layout typically consists of a page title, an optional toolbar for actions, and a main content area. + +- [**Page Layout Documentation**](https://www.patternfly.org/layouts/page) +- [**Page Component Examples on GitHub**](https://github.com/patternfly/patternfly-react/tree/main/packages/react-core/src/components/Page/examples) ### Dashboard Layout -```jsx -const DashboardLayout = () => ( - - {/* Dashboard Header */} - - Dashboard - System overview and key metrics - - - {/* Metrics Cards */} - -
-
- -
-
- -
-
- -
-
- -
-
-
- - {/* Charts and Detailed Content */} - -
-
- -
-
- -
-
-
-
-); -``` +A dashboard is used to display a high-level overview of system status and key metrics using a grid of cards and charts. + +- [**Dashboard Layout Documentation**](https://www.patternfly.org/layouts/dashboard) +- [**Grid Layout Examples on GitHub**](https://github.com/patternfly/patternfly-react/tree/main/packages/react-core/src/layouts/Grid/examples) ### Form Layout -```jsx -const FormPageLayout = () => ( - - {/* Form Header */} - - Create User - Add a new user to the system - - - {/* Form Content */} - -
-
- - User Information - - - - -
-
- - Help - - - - -
-
-
-
-); -``` +Forms should be presented clearly within a card or a dedicated page section, often in a two-column layout on larger screens to separate the form from supplementary help text. + +- [**Form Component Documentation**](https://www.patternfly.org/components/form) +- [**Form Code Examples on GitHub**](https://github.com/patternfly/patternfly-react/tree/main/packages/react-core/src/components/Form/examples) ## Grid System Integration -### Basic Grid Layout -```jsx -import { PageSection } from '@patternfly/react-core'; - -const GridLayout = () => ( - -
-
- Left Content -
-
- Right Content -
-
-
-); -``` +The PatternFly `Grid` and `GridItem` components are used to create flexible, responsive layouts. For detailed examples of basic and responsive grid patterns, refer to the official documentation. -### Responsive Grid Patterns -```jsx -// Three-column responsive layout -
-
- Column 1 -
-
- Column 2 -
-
- Column 3 -
-
-``` +- [**Grid Layout Documentation**](https://www.patternfly.org/layouts/grid) +- [**Grid Code Examples on GitHub**](https://github.com/patternfly/patternfly-react/tree/main/packages/react-core/src/layouts/Grid/examples) ## Responsive Design Considerations -### Breakpoint-Aware Layouts -```jsx -const ResponsiveLayout = () => ( - - {/* Mobile: Stack vertically, Desktop: Side by side */} -
-
- -
-
- -
-
-
-); -``` +Use the `Flex` and `FlexItem` components along with breakpoint modifiers to create layouts that adapt to different screen sizes. A mobile-first approach is recommended, where the default layout is for mobile and is enhanced for larger screens. -### Mobile-First Approach -```jsx -// Start with mobile layout, enhance for larger screens - -
-
- -
-
- -
-
-
-``` +- [**Flex Layout Documentation**](https://www.patternfly.org/layouts/flex) +- [**Flex Code Examples on GitHub**](https://github.com/patternfly/patternfly-react/tree/main/packages/react-core/src/layouts/Flex/examples) +- [**Responsive Utilities Documentation**](https://www.patternfly.org/utilities/responsive) ## Accessibility Considerations ### Semantic Structure -```jsx -// Use proper heading hierarchy - - Main Page Title {/* h1 for page title */} - - - - Section Title {/* h2 for major sections */} -
- Subsection {/* h3 for subsections */} -
-
-``` +Always use the correct heading hierarchy (`

`, `

`, `

`, etc.) to structure your page content logically. Use the `component` prop on PatternFly components to render the correct HTML element. + +### Skip to Content and Back to Top +For accessible and user-friendly navigation on long pages, PatternFly provides the `SkipToContent` and `BackToTop` components, which are integrated directly into the `Page` component. + +- **`SkipToContent`**: Allows keyboard users to bypass navigation and jump directly to the main content area. +- **`BackToTop`**: Allows all users to quickly return to the top of the page after scrolling. + +**Best Practices**: +- βœ… Use `SkipToContent` on every page with navigation, linking its `href` to the main content `id`. +- βœ… Use `BackToTop` on any page that requires significant scrolling, linking `scrollableSelector` to the main content `id`. +- βœ… Assign the `mainContainerId` on the `Page` component to ensure both helpers work correctly. -### Skip Links and Navigation ```jsx -// Add skip links for keyboard navigation - - - Skip to main content - - - - - - +// βœ… Correct: Use SkipToContent and BackToTop together +import { Page, PageSection, SkipToContent, BackToTop } from '@patternfly/react-core'; + +const AppLayout = () => { + const mainContentId = "main-content"; + + return ( + Skip to content} + backToTop={} + > + + {/* ... long content that requires scrolling ... */} + + + ); +}; ``` +**Reference Documentation**: +- [SkipToContent Component Docs](https://www.patternfly.org/components/skip-to-content) +- [BackToTop Component Docs](https://www.patternfly.org/components/back-to-top) + ### ARIA Landmarks -```jsx -// Use proper ARIA landmarks - - - - - - - -``` +Use ARIA landmarks to define regions of a page like `main`, `aside`, `nav`, etc. This can be done by passing the `component` prop to `PageSection`. + +- [**ARIA Landmarks in PatternFly**](https://www.patternfly.org/accessibility/aria-landmarks) ## Performance Optimization -### Lazy Loading Sections -```jsx -import { lazy, Suspense } from 'react'; -import { Spinner } from '@patternfly/react-core'; - -const LazySection = lazy(() => import('./HeavySection')); - -const OptimizedLayout = () => ( - - - Page Title - - - - }> - - - - -); -``` +### Lazy Loading and Conditional Rendering +For performance-critical applications, use standard React patterns like lazy loading and conditional rendering to defer loading of non-critical components or sections of the page. -### Conditional Rendering -```jsx -const ConditionalLayout = ({ showSidebar, isLoading }) => ( - -
-
- {isLoading ? : } -
- {showSidebar && ( -
- -
- )} -
-
-); -``` +- [**React Docs: Code-Splitting and Lazy Loading**](https://react.dev/reference/react/lazy) +- [**React Docs: Conditional Rendering**](https://react.dev/learn/conditional-rendering) ## Best Practices -### Layout Do's - βœ… Use PageSection for all major page areas - βœ… Follow consistent page structure patterns - βœ… Implement responsive design from mobile-first @@ -382,7 +134,6 @@ const ConditionalLayout = ({ showSidebar, isLoading }) => ( - βœ… Test layouts across different screen sizes - βœ… Use hasBodyWrapper for standard content padding -### Layout Don'ts - ❌ Skip PageSection for page structure - ❌ Mix layout systems inconsistently - ❌ Ignore responsive design requirements @@ -393,69 +144,16 @@ const ConditionalLayout = ({ showSidebar, isLoading }) => ( ## Common Layout Issues -### Troubleshooting -1. **Spacing Issues**: Use PatternFly spacing utilities instead of custom margins -2. **Responsive Problems**: Test on actual devices, not just browser resize -3. **Overflow Issues**: Check container widths and use proper flex/grid properties -4. **Accessibility Violations**: Validate semantic structure and ARIA labels -5. **Performance Problems**: Implement lazy loading for heavy sections - -For detailed troubleshooting, see [Common Issues](../../troubleshooting/common-issues.md#layout-issues). +For troubleshooting, see [Common Issues](../../troubleshooting/common-issues.md#layout-issues). ## Valid PatternFly Page Layout (v6+) -PatternFly v6+ provides a flexible, composable layout system for full-page apps. Here are the key best practices for structuring your app layout: +A valid PatternFly v6+ application layout is built by composing the `Page`, `Masthead`, `PageSidebar`, and `PageSection` components. The `Page` component acts as the root, and other major elements like the masthead and sidebar are passed in as props. -### Key Lessons -- **Use the `Page` component as the root**. Pass `masthead`, `sidebar`, and `breadcrumb` as props (not children). -- **Masthead**: Use `Masthead`, `MastheadMain`, `MastheadBrand`, `MastheadToggle`, and `MastheadContent` for the top bar. -- **Sidebar navigation**: Use `PageSidebar` and `PageSidebarBody` with `Nav` and `NavList` for navigation. -- **Page sections**: Use `PageSection` for all main content areas. Use `Title` for headings and `Content` for paragraphs. -- **No `PageHeader`**: This is not a valid PatternFly v6+ component. Use `PageSection` + `Title` for page headers. -- **Breadcrumbs**: Pass as the `breadcrumb` prop to `Page`. -- **No inline styles for layout**: Use PatternFly layout and spacing utilities. +For a complete, working example of a full application layout, refer to the official PatternFly documentation. -### Example: Valid Layout -```jsx -import { - Page, Masthead, MastheadMain, MastheadBrand, MastheadToggle, MastheadContent, - PageSidebar, PageSidebarBody, Nav, NavList, NavItem, PageSection, Title, Content -} from '@patternfly/react-core'; - -const masthead = ( - - - {/* ... */} - {/* ... */} - - {/* ... */} - -); - -const sidebar = ( - - - - - -); - -export default function AppLayout() { - return ( - - - Dashboard - This is a PatternFly + Vite + TypeScript + React 19 app. - - - ); -} -``` +- [**Page Component Documentation & Examples**](https://www.patternfly.org/components/page) +- [**Page Component Code Examples on GitHub**](https://github.com/patternfly/patternfly-react/tree/main/packages/react-core/src/components/Page/examples) ### Layout Summary Table @@ -468,4 +166,4 @@ export default function AppLayout() { | Breadcrumbs | `Breadcrumb` | Pass as `breadcrumb` prop to `Page` | | Page Header | *No `PageHeader`* | Use `PageSection` + `Title` instead | -> **Note:** `PageHeader` is not a PatternFly component in v6+. Use `PageSection`, `Title`, and layout components instead. \ No newline at end of file +> **Note:** `PageHeader` is not a PatternFly component in v6+. Use `PageSection`, `Title`, and layout components instead. diff --git a/ai-documentation/guidelines/component-architecture.md b/ai-documentation/guidelines/component-architecture.md index 77ba4a3a..2ffe0579 100644 --- a/ai-documentation/guidelines/component-architecture.md +++ b/ai-documentation/guidelines/component-architecture.md @@ -1,30 +1,25 @@ # Component Architecture -Essential rules for structuring PatternFly components and organizing component hierarchies. +This document outlines the essential rules for structuring PatternFly components, managing state, and ensuring performance. It is a high-level guide that links to more detailed documentation for specific patterns. ## Related Files -- [**PatternFly Guidelines**](./README.md) - Core development principles -- [**Styling Rules**](./styling-standards.md) - CSS and styling approaches -- [**Layout Rules**](../components/layout/README.md) - Page structure patterns -- [**Table Component Rules**](../components/data-display/table.md) - Table usage and best practices -- [**Data View Component Rules**](../components/data-display/README.md) - Data view usage and best practices +- [**Layout Rules**](../components/layout/README.md) - For page structure and layout patterns. +- [**Table Component Rules**](../components/data-display/table.md) - For table usage, selection, and actions. +- [**Data View Component Rules**](../components/data-display/README.md) - For data view usage. +- [**Styling Rules**](./styling-standards.md) - For CSS and styling approaches. -## Component Composition Rules +## 1. Component Composition ### PatternFly-First Approach -- βœ… **Always start with PatternFly components** - Before creating custom solutions -- βœ… **Compose PatternFly components** - Build complex UIs by combining them -- ❌ **Don't create custom components** - When PatternFly components exist +Always start with standard PatternFly components and compose them to build complex UIs. Avoid creating custom components when a PatternFly solution already exists. ```jsx -// βœ… Correct - Compose PatternFly components +// βœ… Correct: Compose existing PatternFly components import { Card, CardTitle, CardBody, Button, Content } from '@patternfly/react-core'; const UserCard = ({ user, onEdit }) => ( - - {user.name} - + {user.name} {user.email} @@ -33,146 +28,65 @@ const UserCard = ({ user, onEdit }) => ( ); ``` -### Page Structure Rules -```jsx -// βœ… Standard page pattern - - - Page Title - - - {/* filters */} - - - -``` - ### Component Hierarchy -1. **Page Components** - Top-level page structure -2. **Section Components** - Major page sections -3. **Feature Components** - Specific functionality -4. **PatternFly Components** - Base components +Structure your application in a clear hierarchy: +1. **Page Components**: Top-level page structure. +2. **Section Components**: Major page sections, often corresponding to a `PageSection`. +3. **Feature Components**: Components that encapsulate a specific piece of functionality. +4. **PatternFly Components**: The base building blocks from `@patternfly/react-core`. -### PatternFly Data Display Best Practices -> For all key-value or labeled data, use PatternFly's DescriptionList components for clarity and accessibility: -- **No `` for labels:** Use PatternFly's `DescriptionList` for key-value pairs, with `DescriptionListTerm` and `DescriptionListDescription`. -- **No direct `` for labeled data:** Use `DescriptionList` for any labeled data instead of lists with bold/strong labels. +### Data Display +For displaying labeled data or key-value pairs, always use PatternFly's `DescriptionList` components for clarity and accessibility. +- **See**: [DescriptionList Documentation](https://www.patternfly.org/components/description-list) -## State Management Rules +## 2. State Management -### Local State -- βœ… **Use useState for component-specific state** - Form inputs, toggles, local UI state -- βœ… **Use useCallback and useMemo** - For performance optimization -- ❌ **Don't lift state unnecessarily** - Keep state as local as possible +### Local vs. Shared State +- **Local State (`useState`)**: Use for component-specific UI state like form inputs or toggles. +- **Shared State (`useContext`)**: Use for state that needs to be accessed by multiple components in a tree. +- **Complex State (`useReducer`)**: Use for state with complex update logic. -### Shared State -- βœ… **Use Context for shared state** - When multiple components need same data -- βœ… **Use useReducer for complex state** - When state logic is complex -- ❌ **Don't use global state for everything** - Only when truly needed +Keep state as local as possible and only lift it when necessary. -## Common Pattern Rules +## 3. Common Patterns -### Table with Selection -```jsx -// βœ… Required pattern for selectable tables -import { Table, Thead, Tbody, Tr, Th, Td, Checkbox } from '@patternfly/react-table'; +For detailed guidance and code examples on common UI patterns, refer to the specific documentation: -// Use Set for selection state management -const [selectedItems, setSelectedItems] = useState(new Set()); +- **Selectable Tables**: See [Table Component Rules](../components/data-display/table.md). +- **Dropdown Actions**: See the [Dropdown Documentation](https://www.patternfly.org/components/menus/dropdown). +- **Toolbar with Filters**: See the [Toolbar Documentation](https://www.patternfly.org/components/toolbar). -// Handle indeterminate state for "select all" -const isAllSelected = selectedItems.size === data.length && data.length > 0; -const isPartiallySelected = selectedItems.size > 0 && selectedItems.size < data.length; +## 4. Error Handling and Data States - -``` +Always account for different data states in your components: +- βœ… **Loading State**: Show a `Spinner` or `Skeleton` while data is fetching. +- βœ… **Error State**: Display a clear error message, often using `EmptyState`. +- βœ… **Empty State**: Provide a message when there is no data to display. -### Dropdown Actions ```jsx -// βœ… Required pattern for action dropdowns -import { Dropdown, DropdownList, DropdownItem, MenuToggle } from '@patternfly/react-core'; -import { EllipsisVIcon } from '@patternfly/react-icons'; - -// Always use popperProps to prevent clipping - document.body }} - toggle={(toggleRef) => ( - - - - )} -> -``` +// βœ… Required: Handle all data states +import { EmptyState, Spinner } from '@patternfly/react-core'; -### Toolbar with Filters -```jsx -// βœ… Required pattern for data filtering -import { Toolbar, ToolbarContent, ToolbarFilter, ToolbarToggleGroup } from '@patternfly/react-core'; - - - - } breakpoint="xl"> - - {/* Filter components */} - - - - -``` +if (isLoading) return ; +if (error) return ; +if (!data?.length) return ; -## Error Handling Rules +return ; +``` -### Required Error States -- βœ… **Always implement error boundaries** - Catch component errors -- βœ… **Handle loading states** - Show spinners or skeletons -- βœ… **Handle empty states** - Show appropriate empty state messages -- βœ… **Handle error states** - Show error messages with retry options +## 5. Performance -```jsx -// βœ… Required error boundary pattern -import { EmptyState, EmptyStateHeader, EmptyStateIcon } from '@patternfly/react-core'; +- **Memoization**: Use `React.memo`, `useCallback`, and `useMemo` to prevent unnecessary re-renders, especially in lists. +- **Virtualization**: For long lists or tables (1000+ rows), use a virtualization library to ensure performance. +- **Lazy Loading**: Use `React.lazy` and `Suspense` to code-split parts of your application and load them on demand. -if (isLoading) return ; -if (error) return ; -if (!data?.length) return ; -``` +## 6. Testing -## Performance Rules - -### Required Optimizations -- βœ… **Use React.memo for list items** - Prevent unnecessary re-renders -- βœ… **Use useCallback for event handlers** - Stable references -- βœ… **Use useMemo for expensive calculations** - Cache computed values -- βœ… **Implement virtualization for large lists** - Use react-window for 1000+ items - -### Testing Rules -- βœ… **Test component interactions** - User events and state changes -- βœ… **Test accessibility** - ARIA labels and keyboard navigation -- βœ… **Test error states** - Loading, error, and empty states -- ❌ **Don't test PatternFly component internals** - Focus on your component logic - -## Essential Do's and Don'ts - -### βœ… Do's -- Compose PatternFly components to build complex UIs -- Use proper component hierarchy and separation of concerns -- Implement error boundaries and loading states -- Use React hooks for state management -- Memoize expensive computations and callbacks -- Write tests for component behavior - -### ❌ Don'ts -- Create custom components when PatternFly components exist -- Mix state management patterns inconsistently -- Ignore error handling and loading states -- Create deeply nested component hierarchies -- Skip performance optimization for large data sets -- Tightly couple components to specific data structures +- **Focus on Behavior**: Test what the user can do (e.g., clicking a button, filling a form), not component implementation details. +- **Accessibility**: Always include tests for ARIA attributes and keyboard navigation. +- **Don't Test PatternFly**: Trust that PatternFly components are already tested. Focus your tests on your application's logic. ## Quick Reference -- **[PatternFly Components](https://www.patternfly.org/components)** - Official component documentation -- **[React Patterns](https://reactpatterns.com/)** - Common React patterns -- **[Testing Library](https://testing-library.com/)** - Component testing best practices \ No newline at end of file +- [**PatternFly Components**](https://www.patternfly.org/components) - Official component documentation +- [**React Patterns**](https://reactpatterns.com/) - Common React patterns and best practices +- [**Testing Library**](https://testing-library.com/) - Component testing best practices diff --git a/ai-documentation/guidelines/deployment-guide.md b/ai-documentation/guidelines/deployment-guide.md new file mode 100644 index 00000000..dc8797c7 --- /dev/null +++ b/ai-documentation/guidelines/deployment-guide.md @@ -0,0 +1,127 @@ +# Quick Deployment Guide for Prototypes + +This guide provides simple, fast methods for building and deploying your React application so you can share a live prototype with others. + +## Introduction + +Once you have a working prototype on your local machine, the next step is to host it on a public URL. The services listed below are excellent for this purpose, offering generous free tiers and simple command-line interfaces (CLIs) that make deployment a breeze. + +## 1. Build Your Application + +Before you can deploy, you need to create a production-ready build of your application. This process compiles your React code into a set of static HTML, CSS, and JavaScript files that can be served by any web server. + +From your project's root directory, run the following command: + +```bash +# Using npm +npm run build + +# Or using yarn +yarn build +``` + +This command will create a new directory named `dist` (or sometimes `build`) in your project. This is the folder you will deploy. + +## 2. Choose a Deployment Service + +Here are four popular options for hosting your static site, ranked from simplest to most involved. For the absolute fastest deployment with no prior setup, Surge is the best choice. + +### Option A: Deploying with Surge + +Surge is famous for its simplicity and speed, making it an excellent choice for instant deployments. You can create an account directly from the command line on your first use. + +1. **Install the Surge CLI**: + ```bash + npm install -g surge + ``` + +2. **Deploy your app**: + From your project's root directory, run the `surge` command and point it to your build folder. + ```bash + surge dist + ``` + The first time you use it, Surge will prompt you to create a free account. It will then ask you to confirm the publish directory and will suggest a random domain name, which you can edit on the fly before deploying. + + Your site will be live moments after you hit Enter. + +### Option B: Deploying with Vercel + +Vercel is a zero-configuration deployment platform that is also incredibly easy to use. + +1. **Install the Vercel CLI**: + ```bash + npm install -g vercel + ``` + +2. **Log in to your Vercel account**: + ```bash + vercel login + ``` + *(This will open a browser window for you to log in or sign up.)* + +3. **Deploy your app**: + From your project's root directory, run the `vercel` command. + ```bash + vercel + ``` + Vercel's CLI will guide you through a few simple questions. In most cases, you can accept the default answers. It will automatically detect that you have a Vite-based React app and deploy the `dist` directory. + + Once finished, it will give you a public URL for your prototype. + +### Option C: Deploying with Netlify + +Netlify is another excellent platform for deploying static sites, with a very similar workflow to Vercel. + +1. **Install the Netlify CLI**: + ```bash + npm install -g netlify-cli + ``` + +2. **Log in to your Netlify account**: + ```bash + netlify login + ``` + +3. **Deploy your app**: + From your project's root directory, run the `netlify deploy` command. + ```bash + netlify deploy --prod + ``` + The CLI will ask you for the "Publish directory". Enter `dist` (or the name of your build output folder). It will then deploy your site and provide you with a live URL. + +### Option D: Deploying with GitHub Pages + +If your project is already a GitHub repository, GitHub Pages is a convenient, free option, though it requires more setup than the other services. + +1. **Install the `gh-pages` package**: + ```bash + npm install --save-dev gh-pages + ``` + +2. **Update your `package.json`**: + Add a `homepage` field and a `deploy` script. The `homepage` URL should follow this format: `https://.github.io/`. + + ```json + { + "name": "my-react-app", + "homepage": "https://my-username.github.io/my-react-app", + "scripts": { + "dev": "vite", + "build": "vite build", + "deploy": "gh-pages -d dist", + "preview": "vite preview" + }, + // ... other package.json contents + } + ``` + +3. **Deploy**: + First, build your application, then run the new `deploy` script. + ```bash + # 1. Build the app + npm run build + + # 2. Deploy to GitHub Pages + npm run deploy + ``` + This will create a new `gh-pages` branch in your repository and publish the contents of your `dist` folder to it. After a minute or two, your prototype will be live at the URL you specified in the `homepage` field. \ No newline at end of file diff --git a/ai-documentation/resources/external-links.md b/ai-documentation/resources/external-links.md index d7dd2870..874262a8 100644 --- a/ai-documentation/resources/external-links.md +++ b/ai-documentation/resources/external-links.md @@ -8,8 +8,8 @@ External resources are essential for staying current with PatternFly updates, fi ## Related Files -- [**Local Resources**](./local-files.md) - Project-specific documentation files -- [**Code Examples**](./code-examples.md) - Reusable code snippets and patterns +- [**Code Examples**](./code-examples.md) - Curated, reusable code snippets. +- [**PatternFly Guidelines**](../guidelines/README.md) - Core development principles. - [**Setup Guide**](../setup/README.md) - Initial project setup resources - [**Troubleshooting**](../troubleshooting/common-issues.md) - Problem-solving resources diff --git a/ai-documentation/resources/local-files.md b/ai-documentation/resources/local-files.md deleted file mode 100644 index a5957904..00000000 --- a/ai-documentation/resources/local-files.md +++ /dev/null @@ -1,217 +0,0 @@ -# Local Resources - -This document describes project-specific documentation files and local resources available for PatternFly React development. - -## Introduction - -Local resources provide project-specific context, component information, and specialized guidance that complements the official PatternFly documentation. These files contain curated information about PatternFly components, chatbot implementation details, and project-specific patterns. - -## Related Files - -- [**External References**](./external-links.md) - Official PatternFly documentation and resources -- [**Code Examples**](./code-examples.md) - Reusable code snippets and patterns -- [**PatternFly Guidelines**](../guidelines/README.md) - Core development principles -- [**Chatbot Integration**](../chatbot/README.md) - Chatbot component documentation - -## Available Local Documentation Files - -### patternfly-chatbot.txt - -**Location**: [`patternfly-chatbot.txt`](../../patternfly-chatbot.txt) - -**Purpose**: Primary context file for PatternFly Chatbot structure and components. - -**Contents**: -- Chatbot component architecture and hierarchy -- Implementation patterns for chat interfaces -- Component-specific usage guidelines -- Integration examples with PatternFly applications -- Best practices for chatbot development - -**Usage Guidelines**: -- **Primary Reference**: Use this as the main source for chatbot implementation guidance -- **Component Structure**: Refer to this file for understanding chatbot component relationships -- **AI Assistant Context**: Provide relevant sections to AI assistants when working on chatbot features -- **Implementation Priority**: This guidance takes precedence over general PatternFly patterns for chatbot development - -**When to Reference**: -- Building new chatbot interfaces -- Integrating chatbot components with existing applications -- Troubleshooting chatbot-specific issues -- Understanding chatbot component APIs and props - -### patternfly-react-component-groups.txt - -**Location**: [`patternfly-react-component-groups.txt`](../../patternfly-react-component-groups.txt) - -**Purpose**: Comprehensive reference for PatternFly React component groups and specialized component libraries. - -**Contents**: -- Component group classifications and categories -- Specialized component libraries and packages -- Component relationships and dependencies -- Advanced component patterns and compositions -- Enterprise-specific component implementations - -**Usage Guidelines**: -- **Component Discovery**: Use to find appropriate components for specific use cases -- **Advanced Patterns**: Reference for complex component compositions -- **Enterprise Features**: Guidance for enterprise-specific component implementations -- **Component Groups**: Understanding how components work together in larger patterns - -**When to Reference**: -- Planning complex UI implementations -- Looking for specialized component libraries -- Understanding component group relationships -- Implementing enterprise-level features - -## Local File Integration Patterns - -### Reading Local Documentation -```javascript -// Example: Referencing local documentation in code comments -/** - * User Management Table Component - * - * Implementation follows patterns from: - * - patternfly-react-component-groups.txt (Table patterns section) - * - Local documentation: /documentation/components/data-display/ - * - * Key features: - * - Bulk selection with component group patterns - * - Advanced filtering using specialized components - * - Enterprise-grade data handling - */ -``` - -### AI Assistant Context Sharing -When working with AI assistants, provide relevant local documentation context: - -```markdown -// Example context sharing -"I'm implementing a chatbot feature. Here's the relevant section from our -local patternfly-chatbot.txt file: [paste relevant section]. Please help me -implement this pattern with proper PatternFly components." -``` - -### Documentation Cross-References -```markdown -// Table and data view documentation are now split: -// - Table rules: /documentation/components/data-display/table.md -// - Data view rules: /documentation/components/data-display/README.md -``` - -## Project-Specific Patterns - -### Component Selection Workflow -1. **Check Local Documentation**: Review relevant sections in local `.txt` files -2. **Consult Documentation Repo**: Use this documentation repository for implementation guidance -3. **Reference Official Docs**: Verify with official PatternFly documentation -4. **Implement with Context**: Apply local patterns and project-specific requirements - -### Local Documentation Maintenance -```markdown -// Example documentation update pattern -/** - * When updating local documentation files: - * 1. Update the source .txt file - * 2. Update related documentation in /documentation/ - * 3. Update cross-references and links - * 4. Test examples and code snippets - * 5. Notify team of changes - */ -``` - -## Integration with Development Workflow - -### IDE Integration -```json -// Example VS Code settings for local documentation -{ - "files.associations": { - "*.txt": "markdown" - }, - "search.include": { - "patternfly-*.txt": true, - "documentation/**/*.md": true - } -} -``` - -### Documentation Search Patterns -```bash -# Example search commands for local documentation -grep -r "chatbot" patternfly-*.txt documentation/ -grep -r "component-groups" patternfly-*.txt documentation/ -grep -r "specific-pattern" documentation/ patternfly-*.txt -``` - -### Build Integration -```javascript -// Example build script integration -const fs = require('fs'); - -// Read local documentation for build-time validation -const chatbotDocs = fs.readFileSync('patternfly-chatbot.txt', 'utf8'); -const componentGroups = fs.readFileSync('patternfly-react-component-groups.txt', 'utf8'); - -// Validate component usage against local documentation -// Generate component usage reports -// Update documentation cross-references -``` - -## Best Practices for Local Resources - -### Documentation Usage -- **Primary Source**: Use local documentation as the primary source for project-specific patterns -- **Context Sharing**: Always provide relevant local documentation context to AI assistants -- **Cross-Reference**: Link local documentation with official PatternFly resources -- **Keep Current**: Regularly update local documentation to match project evolution - -### File Organization -- **Centralized Location**: Keep local documentation files in the project root for easy access -- **Clear Naming**: Use descriptive filenames that indicate content and purpose -- **Version Control**: Track changes to local documentation files in version control -- **Team Access**: Ensure all team members can access and contribute to local documentation - -### Integration Strategies -- **Development Workflow**: Integrate local documentation into daily development practices -- **Code Reviews**: Reference local documentation during code reviews -- **Onboarding**: Use local documentation for team member onboarding -- **Knowledge Sharing**: Share local documentation insights across teams - -## Troubleshooting Local Resources - -### Common Issues -1. **File Not Found**: Verify file paths and locations -2. **Outdated Information**: Check file modification dates and update as needed -3. **Inconsistent Patterns**: Cross-reference with official documentation -4. **Missing Context**: Ensure complete information is available for AI assistants - -### Maintenance Tasks -- **Regular Reviews**: Periodically review and update local documentation -- **Link Validation**: Verify internal and external links are working -- **Content Accuracy**: Ensure information matches current PatternFly versions -- **Team Feedback**: Collect and incorporate team feedback on documentation usefulness - -## Quick Reference - -### Local File Locations -- **Chatbot Documentation**: `patternfly-chatbot.txt` -- **Component Groups**: `patternfly-react-component-groups.txt` -- **Documentation Repository**: `documentation/` directory -- **Setup Instructions**: `README.md` - -### Key Usage Patterns -- **Chatbot Development**: Start with `patternfly-chatbot.txt` -- **Component Selection**: Reference `patternfly-react-component-groups.txt` -- **Implementation Guidance**: Use documentation repository structure -- **AI Assistant Context**: Provide relevant local documentation sections - -### Integration Points -- **Development**: Reference during component implementation -- **Code Review**: Validate against local patterns -- **Documentation**: Cross-reference in documentation files -- **Team Communication**: Share context in discussions and planning - -Remember: Local documentation files provide project-specific context that should be used alongside official PatternFly documentation. Always provide relevant sections to AI assistants when seeking implementation guidance, as this context significantly improves the accuracy and relevance of the assistance provided. \ No newline at end of file diff --git a/ai-documentation/troubleshooting/common-issues.md b/ai-documentation/troubleshooting/common-issues.md index 7074bfc8..8cb770b0 100644 --- a/ai-documentation/troubleshooting/common-issues.md +++ b/ai-documentation/troubleshooting/common-issues.md @@ -415,15 +415,12 @@ Module not found: Can't resolve '@patternfly/chatbot/dist/dynamic/Chatbot' 2. **Use virtualization**: ```jsx - import { FixedSizeList as List } from 'react-window'; - - - {Row} - + import { DndProvider, useDrag, useDrop } from 'react-dnd'; + import { HTML5Backend } from 'react-dnd-html5-backend'; + import { Table, Thead, Tbody, Tr, Th, Td } from '@patternfly/react-table'; + + const DraggableRow = ({ id, text, index, moveRow }) => { + // ... existing code ... ``` 3. **Optimize re-renders**: From 6c4f0f077f6846516deab21483eb742a3a185ca7 Mon Sep 17 00:00:00 2001 From: gitdallas <5322142+gitdallas@users.noreply.github.com> Date: Fri, 7 Nov 2025 08:39:54 -0600 Subject: [PATCH 07/21] compass theme base Signed-off-by: gitdallas <5322142+gitdallas@users.noreply.github.com> --- package-lock.json | 3353 ++++++++++++------ package.json | 7 +- src/app/AppLayout/AppLayout.tsx | 232 +- src/app/Dashboard/Dashboard.tsx | 263 +- src/app/Settings/General/GeneralSettings.tsx | 18 +- src/app/Settings/Profile/ProfileSettings.tsx | 18 +- src/app/Support/Support.tsx | 62 +- src/app/bgimages/pf-background.svg | 22 + 8 files changed, 2821 insertions(+), 1154 deletions(-) create mode 100644 src/app/bgimages/pf-background.svg diff --git a/package-lock.json b/package-lock.json index 460d4f2b..d8663e36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,10 @@ "version": "0.0.2", "license": "MIT", "dependencies": { - "@patternfly/react-core": "^6.4.0", - "@patternfly/react-icons": "^6.4.0", - "@patternfly/react-styles": "^6.4.0", + "@patternfly/chatbot": "^6.4.1", + "@patternfly/react-core": "^6.5.0-prerelease.7", + "@patternfly/react-icons": "^6.5.0-prerelease.1", + "@patternfly/react-styles": "^6.5.0-prerelease.1", "react": "^18", "react-dom": "^18", "sirv-cli": "^3.0.1" @@ -481,885 +482,680 @@ "node": ">=10.0.0" } }, - "node_modules/@esbuild/aix-ppc64": { + "node_modules/@esbuild/darwin-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ - "ppc64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "aix" + "darwin" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=18" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/config-array": { + "version": "0.21.1", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/core": { + "version": "0.17.0", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">= 4" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], + "node_modules/@eslint/js": { + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], + "node_modules/@eslint/object-schema": { + "version": "2.1.7", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], + "node_modules/@humanfs/core": { + "version": "0.19.1", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=18.18.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], + "node_modules/@humanfs/node": { + "version": "0.16.7", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, "engines": { - "node": ">=18" + "node": ">=18.18.0" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], "engines": { - "node": ">=18" + "node": "20 || >=22" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, "engines": { - "node": ">=18" + "node": "20 || >=22" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], + "node_modules/@isaacs/cliui": { + "version": "8.0.2", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=18" + "node": ">=6.0.0" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "github", + "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "tslib": "2" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", + "node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@eslint/config-array": { - "version": "0.21.1", + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", "dev": true, "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^1.1.7" + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" }, "engines": { - "node": "*" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.17.0" + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@eslint/core": { - "version": "0.17.0", + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", "dev": true, "license": "Apache-2.0", "dependencies": { - "@types/json-schema": "^7.0.15" + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "license": "MIT" }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "dev": true, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "node_modules/@lukeed/uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@lukeed/csprng": "^1.1.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", - "dev": true, + "node_modules/@monaco-editor/loader": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.6.1.tgz", + "integrity": "sha512-w3tEnj9HYEC73wtjdpR089AqkUPskFRcdkxsiSFt3SoUc3OHpmu+leP94CXBm4mHfefmhsdfI0ZQu6qJ0wgtPg==", "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" + "dependencies": { + "state-local": "^1.0.6" } }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node_modules/@monaco-editor/react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.7.0.tgz", + "integrity": "sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==", + "license": "MIT", + "dependencies": { + "@monaco-editor/loader": "^1.5.0" + }, + "peerDependencies": { + "monaco-editor": ">= 0.25.0 < 1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 8" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=18.18.0" + "node": ">= 8" } }, - "node_modules/@humanfs/node": { - "version": "0.16.7", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=18.18.0" + "node": ">= 8" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" + "node_modules/@patternfly/chatbot": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@patternfly/chatbot/-/chatbot-6.4.1.tgz", + "integrity": "sha512-59Ct4uzuPjf07FW7cTU6sJP8Qpr9Sg5VM0ITEw3RjONK+b1v0gvo3F/g8ZtetGM4Rvhv1C/6V4aGH8peuQswhQ==", + "license": "MIT", + "dependencies": { + "@patternfly/react-code-editor": "^6.1.0", + "@patternfly/react-core": "^6.1.0", + "@patternfly/react-icons": "^6.1.0", + "@patternfly/react-table": "^6.1.0", + "@segment/analytics-next": "^1.76.0", + "clsx": "^2.1.0", + "path-browserify": "^1.0.1", + "posthog-js": "^1.194.4", + "react-markdown": "^9.0.1", + "rehype-external-links": "^3.0.0", + "rehype-sanitize": "^6.0.0", + "rehype-unwrap-images": "^1.0.0", + "remark-gfm": "^4.0.0", + "unist-util-visit": "^5.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "react": "^18 || ^19", + "react-dom": "^18 || ^19" } }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" + "node_modules/@patternfly/chatbot/node_modules/@patternfly/react-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-6.4.0.tgz", + "integrity": "sha512-zMgJmcFohp2FqgAoZHg7EXZS7gnaFESquk0qIavemYI0FsqspVlzV2/PUru7w+86+jXfqebRhgubPRsv1eJwEg==", + "license": "MIT", + "dependencies": { + "@patternfly/react-icons": "^6.4.0", + "@patternfly/react-styles": "^6.4.0", + "@patternfly/react-tokens": "^6.4.0", + "focus-trap": "7.6.4", + "react-dropzone": "^14.3.5", + "tslib": "^2.8.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "dev": true, + "node_modules/@patternfly/chatbot/node_modules/@patternfly/react-icons": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-6.4.0.tgz", + "integrity": "sha512-SPjzatm73NUYv/BL6A/cjRA5sFQ15NkiyPAcT8gmklI7HY+ptd6/eg49uBDFmxTQcSwbb5ISW/R6wwCQBY2M+Q==", "license": "MIT", - "engines": { - "node": "20 || >=22" + "peerDependencies": { + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" } }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "dev": true, + "node_modules/@patternfly/chatbot/node_modules/@patternfly/react-styles": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-6.4.0.tgz", + "integrity": "sha512-EXmHA67s5sy+Wy/0uxWoUQ52jr9lsH2wV3QcgtvVc5zxpyBX89gShpqv4jfVqaowznHGDoL6fVBBrSe9BYOliQ==", + "license": "MIT" + }, + "node_modules/@patternfly/chatbot/node_modules/@patternfly/react-tokens": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-6.4.0.tgz", + "integrity": "sha512-iZthBoXSGQ/+PfGTdPFJVulaJZI3rwE+7A/whOXPGp3Jyq3k6X52pr1+5nlO6WHasbZ9FyeZGqXf4fazUZNjbw==", + "license": "MIT" + }, + "node_modules/@patternfly/react-code-editor": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-code-editor/-/react-code-editor-6.4.0.tgz", + "integrity": "sha512-jZK4qzytcriZalug3KvwTD+h8lNjUfm79opAsLJwGfuq2DD5pzrDwF4GysZrR4hUMdN0jUJqh5yvAqwZtJI/UA==", "license": "MIT", "dependencies": { - "@isaacs/balanced-match": "^4.0.1" + "@monaco-editor/react": "^4.6.0", + "@patternfly/react-core": "^6.4.0", + "@patternfly/react-icons": "^6.4.0", + "@patternfly/react-styles": "^6.4.0", + "react-dropzone": "14.3.5", + "tslib": "^2.8.1" }, - "engines": { - "node": "20 || >=22" + "peerDependencies": { + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "dev": true, - "license": "ISC", + "node_modules/@patternfly/react-code-editor/node_modules/@patternfly/react-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-6.4.0.tgz", + "integrity": "sha512-zMgJmcFohp2FqgAoZHg7EXZS7gnaFESquk0qIavemYI0FsqspVlzV2/PUru7w+86+jXfqebRhgubPRsv1eJwEg==", + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@patternfly/react-icons": "^6.4.0", + "@patternfly/react-styles": "^6.4.0", + "@patternfly/react-tokens": "^6.4.0", + "focus-trap": "7.6.4", + "react-dropzone": "^14.3.5", + "tslib": "^2.8.1" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "dev": true, + "node_modules/@patternfly/react-code-editor/node_modules/@patternfly/react-icons": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-6.4.0.tgz", + "integrity": "sha512-SPjzatm73NUYv/BL6A/cjRA5sFQ15NkiyPAcT8gmklI7HY+ptd6/eg49uBDFmxTQcSwbb5ISW/R6wwCQBY2M+Q==", "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "peerDependencies": { + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } + "node_modules/@patternfly/react-code-editor/node_modules/@patternfly/react-styles": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-6.4.0.tgz", + "integrity": "sha512-EXmHA67s5sy+Wy/0uxWoUQ52jr9lsH2wV3QcgtvVc5zxpyBX89gShpqv4jfVqaowznHGDoL6fVBBrSe9BYOliQ==", + "license": "MIT" }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "dev": true, + "node_modules/@patternfly/react-code-editor/node_modules/@patternfly/react-tokens": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-6.4.0.tgz", + "integrity": "sha512-iZthBoXSGQ/+PfGTdPFJVulaJZI3rwE+7A/whOXPGp3Jyq3k6X52pr1+5nlO6WHasbZ9FyeZGqXf4fazUZNjbw==", + "license": "MIT" + }, + "node_modules/@patternfly/react-core": { + "version": "6.5.0-prerelease.14", + "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-6.5.0-prerelease.14.tgz", + "integrity": "sha512-RCY6nT2v74+tI8M1/IGFAsapQHNoXdCQDLQRwDRZuv1QHWF/lQAnwdOetmUeGP+9iRbsf5w+kuTVpUXYk0U5bA==", "license": "MIT", - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@patternfly/react-icons": "^6.5.0-prerelease.6", + "@patternfly/react-styles": "^6.5.0-prerelease.6", + "@patternfly/react-tokens": "^6.5.0-prerelease.6", + "focus-trap": "7.6.4", + "react-dropzone": "^14.3.5", + "tslib": "^2.8.1" + }, + "peerDependencies": { + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "dev": true, + "node_modules/@patternfly/react-icons": { + "version": "6.5.0-prerelease.6", + "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-6.5.0-prerelease.6.tgz", + "integrity": "sha512-zQpGTpKuH7ofVF9sXTDErvHwaKLFFdXw41x65VUFM5Y1z2P2xvuJhrOjQ9NeAxgMjw549/bz+s8sJKyDbeqMMQ==", "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "peerDependencies": { + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "dev": true, + "node_modules/@patternfly/react-styles": { + "version": "6.5.0-prerelease.6", + "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-6.5.0-prerelease.6.tgz", + "integrity": "sha512-sd4Cg1t+QKkfCpSt6ofGjb4pq3QdCOyPDqrkC026amnIBX6bpmXPpQj6IHUHtydxtSm8sUjB6wnGzo4JEwTr2w==", "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "dev": true, + "node_modules/@patternfly/react-table": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-table/-/react-table-6.4.0.tgz", + "integrity": "sha512-yv0sFOLGts8a2q9C1xUegjp50ayYyVRe0wKjMf+aMSNIK8sVYu8qu0yfBsCDybsUCldue7+qsYKRLFZosTllWQ==", "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/buffers": { - "version": "1.2.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/codegen": { - "version": "1.0.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.21.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/base64": "^1.1.2", - "@jsonjoy.com/buffers": "^1.2.0", - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/json-pointer": "^1.0.2", - "@jsonjoy.com/util": "^1.9.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pointer": { - "version": "1.0.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/util": "^1.9.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/util": { - "version": "1.9.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "@patternfly/react-core": "^6.4.0", + "@patternfly/react-icons": "^6.4.0", + "@patternfly/react-styles": "^6.4.0", + "@patternfly/react-tokens": "^6.4.0", + "lodash": "^4.17.21", + "tslib": "^2.8.1" }, "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" } }, - "node_modules/@patternfly/react-core": { + "node_modules/@patternfly/react-table/node_modules/@patternfly/react-core": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-6.4.0.tgz", "integrity": "sha512-zMgJmcFohp2FqgAoZHg7EXZS7gnaFESquk0qIavemYI0FsqspVlzV2/PUru7w+86+jXfqebRhgubPRsv1eJwEg==", @@ -1377,13 +1173,7 @@ "react-dom": "^17 || ^18 || ^19" } }, - "node_modules/@patternfly/react-core/node_modules/@patternfly/react-tokens": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-6.4.0.tgz", - "integrity": "sha512-iZthBoXSGQ/+PfGTdPFJVulaJZI3rwE+7A/whOXPGp3Jyq3k6X52pr1+5nlO6WHasbZ9FyeZGqXf4fazUZNjbw==", - "license": "MIT" - }, - "node_modules/@patternfly/react-icons": { + "node_modules/@patternfly/react-table/node_modules/@patternfly/react-icons": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-6.4.0.tgz", "integrity": "sha512-SPjzatm73NUYv/BL6A/cjRA5sFQ15NkiyPAcT8gmklI7HY+ptd6/eg49uBDFmxTQcSwbb5ISW/R6wwCQBY2M+Q==", @@ -1393,12 +1183,24 @@ "react-dom": "^17 || ^18 || ^19" } }, - "node_modules/@patternfly/react-styles": { + "node_modules/@patternfly/react-table/node_modules/@patternfly/react-styles": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-6.4.0.tgz", "integrity": "sha512-EXmHA67s5sy+Wy/0uxWoUQ52jr9lsH2wV3QcgtvVc5zxpyBX89gShpqv4jfVqaowznHGDoL6fVBBrSe9BYOliQ==", "license": "MIT" }, + "node_modules/@patternfly/react-table/node_modules/@patternfly/react-tokens": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-6.4.0.tgz", + "integrity": "sha512-iZthBoXSGQ/+PfGTdPFJVulaJZI3rwE+7A/whOXPGp3Jyq3k6X52pr1+5nlO6WHasbZ9FyeZGqXf4fazUZNjbw==", + "license": "MIT" + }, + "node_modules/@patternfly/react-tokens": { + "version": "6.5.0-prerelease.6", + "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-6.5.0-prerelease.6.tgz", + "integrity": "sha512-q8Eb0VvgfM32CadgUyCJ4OHXF3xpIwzAoPiqKpzLWrg5lNu49CjFFX07HhW86mr8efvGJZacxd6ywlUm832WUQ==", + "license": "MIT" + }, "node_modules/@pkgr/core": { "version": "0.2.9", "dev": true, @@ -1414,6 +1216,15 @@ "version": "1.0.0-next.29", "license": "MIT" }, + "node_modules/@posthog/core": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.5.2.tgz", + "integrity": "sha512-iedUP3EnOPPxTA2VaIrsrd29lSZnUV+ZrMnvY56timRVeZAXoYCkmjfIs3KBAsF8OUT5h1GXLSkoQdrV0r31OQ==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.6" + } + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.27", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", @@ -1421,34 +1232,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", - "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", - "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.53.3", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", @@ -1463,278 +1246,103 @@ "darwin" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", - "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", - "cpu": [ - "x64" - ], + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", - "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@segment/analytics-core": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.8.2.tgz", + "integrity": "sha512-5FDy6l8chpzUfJcNlIcyqYQq4+JTUynlVoCeCUuVz+l+6W0PXg+ljKp34R4yLVCcY5VVZohuW+HH0VLWdwYVAg==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "dependencies": { + "@lukeed/uuid": "^2.0.0", + "@segment/analytics-generic-utils": "1.2.0", + "dset": "^3.1.4", + "tslib": "^2.4.1" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", - "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@segment/analytics-generic-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@segment/analytics-generic-utils/-/analytics-generic-utils-1.2.0.tgz", + "integrity": "sha512-DfnW6mW3YQOLlDQQdR89k4EqfHb0g/3XvBXkovH1FstUN93eL1kfW9CsDcVQyH3bAC5ZsFyjA/o/1Q2j0QeoWw==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "dependencies": { + "tslib": "^2.4.1" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", - "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/@segment/analytics-next": { + "version": "1.81.1", + "resolved": "https://registry.npmjs.org/@segment/analytics-next/-/analytics-next-1.81.1.tgz", + "integrity": "sha512-nVHNhriViptjkp4004qBbvmnW9/3brjhBv2P5Cvcg7iWW41fBzUY8FbLi+8wkmSbycT9fH1pTM3TUxB6+h0Fcg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@lukeed/uuid": "^2.0.0", + "@segment/analytics-core": "1.8.2", + "@segment/analytics-generic-utils": "1.2.0", + "@segment/analytics-page-tools": "1.0.0", + "@segment/analytics.js-video-plugins": "^0.2.1", + "@segment/facade": "^3.4.9", + "dset": "^3.1.4", + "js-cookie": "3.0.1", + "node-fetch": "^2.6.7", + "tslib": "^2.4.1", + "unfetch": "^4.1.0" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", - "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/@segment/analytics-page-tools": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@segment/analytics-page-tools/-/analytics-page-tools-1.0.0.tgz", + "integrity": "sha512-o9OVB91qLB9qb0Bw1HfjmWm5AnrMNULRjx++4lBqLt8InKRX1urrRBparVlpj+yJA0sckN5ZcsfazRLuPgBYDQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "tslib": "^2.4.1" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", - "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "node_modules/@segment/analytics.js-video-plugins": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@segment/analytics.js-video-plugins/-/analytics.js-video-plugins-0.2.1.tgz", + "integrity": "sha512-lZwCyEXT4aaHBLNK433okEKdxGAuyrVmop4BpQqQSJuRz0DglPZgd9B/XjiiWs1UyOankg2aNYMN3VcS8t4eSQ==", + "license": "ISC", + "dependencies": { + "unfetch": "^3.1.1" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", - "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", - "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", - "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", - "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", - "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", - "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", - "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", - "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", - "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", - "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", - "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "node_modules/@segment/analytics.js-video-plugins/node_modules/unfetch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-3.1.2.tgz", + "integrity": "sha512-L0qrK7ZeAudGiKYw6nzFjnJ2D5WHblUBwmHIqtPS6oKUd+Hcpk7/hKsSmcHsTlpd1TbTNsiRBUKRq3bHLNIqIw==", + "license": "MIT" }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", - "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "node_modules/@segment/facade": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@segment/facade/-/facade-3.4.10.tgz", + "integrity": "sha512-xVQBbB/lNvk/u8+ey0kC/+g8pT3l0gCT8O2y9Z+StMMn3KAFAQ9w8xfgef67tJybktOKKU7pQGRPolRM1i1pdA==", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@segment/isodate-traverse": "^1.1.1", + "inherits": "^2.0.4", + "new-date": "^1.0.3", + "obj-case": "0.2.1" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", - "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "node_modules/@segment/isodate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@segment/isodate/-/isodate-1.0.3.tgz", + "integrity": "sha512-BtanDuvJqnACFkeeYje7pWULVv8RgZaqKHWwGFnL/g/TH/CcZjkIVTfGDp/MAxmilYHUkrX70SqwnYSTNEaN7A==", + "license": "SEE LICENSE IN LICENSE" }, - "node_modules/@sec-ant/readable-stream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", - "dev": true, - "license": "MIT" + "node_modules/@segment/isodate-traverse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@segment/isodate-traverse/-/isodate-traverse-1.1.1.tgz", + "integrity": "sha512-+G6e1SgAUkcq0EDMi+SRLfT48TNlLPF3QnSgFGVs0V9F3o3fq/woQ2rHFlW20W0yy5NnCUH0QGU3Am2rZy/E3w==", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@segment/isodate": "^1.0.3" + } }, "node_modules/@sindresorhus/is": { "version": "6.3.1", @@ -1946,10 +1554,7 @@ }, "node_modules/@types/debug": { "version": "4.1.12", - "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { "@types/ms": "*" } @@ -1981,9 +1586,17 @@ }, "node_modules/@types/estree": { "version": "1.0.8", - "dev": true, "license": "MIT" }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/express": { "version": "4.17.25", "dev": true, @@ -2006,6 +1619,15 @@ "@types/send": "*" } }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/history": { "version": "4.7.11", "dev": true, @@ -2055,6 +1677,15 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "dev": true, @@ -2062,10 +1693,7 @@ }, "node_modules/@types/ms": { "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true + "license": "MIT" }, "node_modules/@types/node": { "version": "24.10.0", @@ -2095,7 +1723,6 @@ }, "node_modules/@types/react": { "version": "19.2.2", - "dev": true, "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -2168,6 +1795,12 @@ "@types/node": "*" } }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, "node_modules/@types/ws": { "version": "8.18.1", "dev": true, @@ -2402,6 +2035,12 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, "node_modules/@vitejs/plugin-react": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", @@ -3091,6 +2730,16 @@ "node": ">=4" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "dev": true, @@ -3347,6 +2996,16 @@ ], "license": "CC-BY-4.0" }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chai": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz", @@ -3385,6 +3044,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chokidar": { "version": "3.6.0", "dev": true, @@ -3451,6 +3150,15 @@ "node": ">=6" } }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "dev": true, @@ -3490,6 +3198,16 @@ "node": ">= 0.8" } }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "8.3.0", "dev": true, @@ -3631,6 +3349,17 @@ "webpack": "^5.1.0" } }, + "node_modules/core-js": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", + "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "dev": true, @@ -3638,7 +3367,6 @@ }, "node_modules/cross-spawn": { "version": "7.0.6", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -3908,7 +3636,6 @@ }, "node_modules/csstype": { "version": "3.1.3", - "dev": true, "license": "MIT" }, "node_modules/data-urls": { @@ -3978,7 +3705,6 @@ }, "node_modules/debug": { "version": "4.4.3", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -3997,6 +3723,19 @@ "dev": true, "license": "MIT" }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/deep-is": { "version": "0.1.4", "dev": true, @@ -4091,7 +3830,6 @@ }, "node_modules/dequal": { "version": "2.0.3", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4111,6 +3849,19 @@ "dev": true, "license": "MIT" }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/dns-packet": { "version": "5.6.1", "dev": true, @@ -4193,6 +3944,13 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz", + "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==", + "license": "(MPL-2.0 OR Apache-2.0)", + "peer": true + }, "node_modules/domutils": { "version": "2.8.0", "dev": true, @@ -4274,6 +4032,15 @@ "webpack": "^4 || ^5" } }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "dev": true, @@ -4897,6 +4664,16 @@ "node": ">=4.0" } }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -5012,6 +4789,12 @@ "dev": true, "license": "MIT" }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "dev": true, @@ -5110,6 +4893,12 @@ "node": ">=0.8.0" } }, + "node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==", + "license": "MIT" + }, "node_modules/file-entry-cache": { "version": "8.0.0", "dev": true, @@ -5707,14 +5496,109 @@ "node": ">= 0.4" } }, - "node_modules/he": { - "version": "1.2.0", - "dev": true, + "node_modules/hast-util-has-property": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", "license": "MIT", - "bin": { - "he": "bin/he" - } - }, + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-interactive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-interactive/-/hast-util-interactive-3.0.0.tgz", + "integrity": "sha512-9VFa3kP6AT40BNYcPmn3jpsG+1KPDF0rUFCrFVQDUsuUXZ3YLODm8UGV0tmYzFpcOIQXTAOi2ccS3ywlj2dQTA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-has-property": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-sanitize": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-5.0.2.tgz", + "integrity": "sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "unist-util-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, "node_modules/hpack.js": { "version": "2.1.6", "dev": true, @@ -5794,6 +5678,16 @@ "node": ">=12" } }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/html-webpack-plugin": { "version": "5.6.4", "dev": true, @@ -6114,9 +6008,14 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, "license": "ISC" }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, "node_modules/internal-slot": { "version": "1.1.0", "dev": true, @@ -6146,6 +6045,42 @@ "node": ">= 10" } }, + "node_modules/is-absolute-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", + "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-array-buffer": { "version": "3.0.5", "dev": true, @@ -6276,6 +6211,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-docker": { "version": "3.0.0", "dev": true, @@ -6349,6 +6294,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-identifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-identifier/-/is-identifier-1.0.1.tgz", @@ -6439,6 +6394,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "dev": true, @@ -6616,7 +6583,6 @@ }, "node_modules/isexe": { "version": "2.0.0", - "dev": true, "license": "ISC" }, "node_modules/isobject": { @@ -6733,6 +6699,15 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/js-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", + "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "license": "MIT" @@ -6968,7 +6943,6 @@ }, "node_modules/lodash": { "version": "4.17.21", - "dev": true, "license": "MIT" }, "node_modules/lodash.memoize": { @@ -6986,6 +6960,16 @@ "dev": true, "license": "MIT" }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "license": "MIT", @@ -7062,6 +7046,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/marked": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", + "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", + "license": "MIT", + "peer": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "dev": true, @@ -7070,65 +7077,910 @@ "node": ">= 0.4" } }, - "node_modules/mdn-data": { - "version": "2.12.2", - "dev": true, - "license": "CC0-1.0" + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/media-typer": { - "version": "0.3.0", - "dev": true, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/memfs": { - "version": "4.50.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", "dependencies": { - "@jsonjoy.com/json-pack": "^1.11.0", - "@jsonjoy.com/util": "^1.9.0", - "glob-to-regex.js": "^1.0.1", - "thingies": "^2.5.0", - "tree-dump": "^1.0.3", - "tslib": "^2.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "dev": true, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/merge-stream": { + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/methods": { - "version": "1.1.2", - "dev": true, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.50.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, "node_modules/micromatch": { "version": "4.0.8", "dev": true, @@ -7233,6 +8085,17 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/monaco-editor": { + "version": "0.54.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz", + "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==", + "license": "MIT", + "peer": true, + "dependencies": { + "dompurify": "3.1.7", + "marked": "14.0.0" + } + }, "node_modules/mri": { "version": "1.2.0", "license": "MIT", @@ -7249,7 +8112,6 @@ }, "node_modules/ms": { "version": "2.1.3", - "dev": true, "license": "MIT" }, "node_modules/multicast-dns": { @@ -7299,6 +8161,15 @@ "dev": true, "license": "MIT" }, + "node_modules/new-date": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/new-date/-/new-date-1.0.3.tgz", + "integrity": "sha512-0fsVvQPbo2I18DT2zVHpezmeeNYV2JaJSrseiHLc17GNOxJzUdx5mvSigPu8LtIfZSij5i1wXnXFspEs2CD6hA==", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@segment/isodate": "1.0.3" + } + }, "node_modules/no-case": { "version": "3.0.4", "dev": true, @@ -7308,6 +8179,48 @@ "tslib": "^2.0.3" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-forge": { "version": "1.3.1", "dev": true, @@ -7345,6 +8258,12 @@ "dev": true, "license": "MIT" }, + "node_modules/obj-case": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/obj-case/-/obj-case-0.2.1.tgz", + "integrity": "sha512-PquYBBTy+Y6Ob/O2574XHhDtHJlV1cJHMCgW+rDRc9J5hhmRelJB3k5dTK/3cVmFVtzvAKuENeuLpoyTzMzkOg==", + "license": "MIT" + }, "node_modules/object-assign": { "version": "4.1.1", "license": "MIT", @@ -7672,6 +8591,31 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, "node_modules/parse5": { "version": "7.3.0", "dev": true, @@ -7700,6 +8644,12 @@ "tslib": "^2.0.3" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, "node_modules/path-exists": { "version": "4.0.0", "dev": true, @@ -7710,7 +8660,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8326,6 +9275,29 @@ "dev": true, "license": "MIT" }, + "node_modules/posthog-js": { + "version": "1.296.1", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.296.1.tgz", + "integrity": "sha512-Qc0S5dkQHzYzpUu7sfU2JkDkf7AE4wI8Yffog4hKWL9i8YbutuXLhJ1duZlY1V8HyaVVnn6qx5wd55SNwVcfhQ==", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@posthog/core": "1.5.2", + "core-js": "^3.38.1", + "fflate": "^0.4.8", + "preact": "^10.19.3", + "web-vitals": "^4.2.4" + } + }, + "node_modules/preact": { + "version": "10.27.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz", + "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "dev": true, @@ -8401,6 +9373,16 @@ "version": "16.13.1", "license": "MIT" }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "dev": true, @@ -8579,6 +9561,33 @@ "license": "MIT", "peer": true }, + "node_modules/react-markdown": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.1.0.tgz", + "integrity": "sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, "node_modules/react-refresh": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", @@ -8736,6 +9745,54 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/rehype-external-links": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", + "integrity": "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-is-element": "^3.0.0", + "is-absolute-url": "^4.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-sanitize": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/rehype-sanitize/-/rehype-sanitize-6.0.0.tgz", + "integrity": "sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-sanitize": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-unwrap-images": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-unwrap-images/-/rehype-unwrap-images-1.0.0.tgz", + "integrity": "sha512-wzW5Mk9IlVF2UwXC5NtIZsx1aHYbV8+bLWjJnlZaaamz5QU52RppWtq1uEZJqGo8d9Y4RuDqidB6r9RFpKugIg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-interactive": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/relateurl": { "version": "0.2.7", "dev": true, @@ -8744,6 +9801,72 @@ "node": ">= 0.10" } }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/renderkid": { "version": "3.0.0", "dev": true, @@ -9421,7 +10544,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -9432,7 +10554,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9606,6 +10727,16 @@ "node": ">=0.10.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/spdy": { "version": "4.0.2", "dev": true, @@ -9641,6 +10772,12 @@ "dev": true, "license": "MIT" }, + "node_modules/state-local": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", + "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==", + "license": "MIT" + }, "node_modules/statuses": { "version": "2.0.1", "dev": true, @@ -9810,6 +10947,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "7.1.2", "dev": true, @@ -9902,6 +11053,24 @@ "webpack": "^5.27.0" } }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, "node_modules/stylehacks": { "version": "7.0.7", "dev": true, @@ -10402,6 +11571,26 @@ "tslib": "2" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-api-utils": { "version": "2.1.0", "dev": true, @@ -10878,6 +12067,12 @@ "dev": true, "license": "MIT" }, + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "license": "MIT" + }, "node_modules/unicorn-magic": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", @@ -10891,6 +12086,93 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unpipe": { "version": "1.0.0", "dev": true, @@ -11013,6 +12295,34 @@ "node": ">= 0.8" } }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vite": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", @@ -11241,6 +12551,12 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/web-vitals": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", + "integrity": "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==", + "license": "Apache-2.0" + }, "node_modules/web-worker": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", @@ -11649,7 +12965,6 @@ }, "node_modules/which": { "version": "2.0.2", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -11907,6 +13222,16 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index bfc49897..afcef3a1 100644 --- a/package.json +++ b/package.json @@ -70,9 +70,10 @@ "webpack-merge": "^6.0.1" }, "dependencies": { - "@patternfly/react-core": "^6.4.0", - "@patternfly/react-icons": "^6.4.0", - "@patternfly/react-styles": "^6.4.0", + "@patternfly/chatbot": "^6.4.1", + "@patternfly/react-core": "^6.5.0-prerelease.7", + "@patternfly/react-icons": "^6.5.0-prerelease.1", + "@patternfly/react-styles": "^6.5.0-prerelease.1", "react": "^18", "react-dom": "^18", "sirv-cli": "^3.0.1" diff --git a/src/app/AppLayout/AppLayout.tsx b/src/app/AppLayout/AppLayout.tsx index 2dac6501..43849ba4 100644 --- a/src/app/AppLayout/AppLayout.tsx +++ b/src/app/AppLayout/AppLayout.tsx @@ -1,43 +1,144 @@ import * as React from 'react'; -import { NavLink, useLocation } from 'react-router-dom'; +import { useNavigate, useLocation } from 'react-router-dom'; import { + ActionList, + ActionListGroup, + ActionListItem, Button, - Masthead, + Compass, + CompassHeader, + CompassMessageBar, + CompassPanel, MastheadBrand, MastheadLogo, - MastheadMain, - MastheadToggle, - Nav, - NavExpandable, - NavItem, - NavList, - Page, - PageSidebar, - PageSidebarBody, - SkipToContent, + Tab, + TabContent, + Tabs, + TabsComponent, + TabTitleText, + Tooltip, } from '@patternfly/react-core'; import { IAppRoute, IAppRouteGroup, routes } from '@app/routes'; -import { BarsIcon } from '@patternfly/react-icons'; +import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon'; +import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon'; +import pfBackground from '../bgimages/pf-background.svg'; interface IAppLayout { children: React.ReactNode; } const AppLayout: React.FunctionComponent = ({ children }) => { - const [sidebarOpen, setSidebarOpen] = React.useState(true); - const masthead = ( - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + ); export { Support }; diff --git a/src/app/bgimages/pf-background.svg b/src/app/bgimages/pf-background.svg new file mode 100644 index 00000000..b7fd73f7 --- /dev/null +++ b/src/app/bgimages/pf-background.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + From 81ae050488b4d67701d747bea99fd7c3f8839d44 Mon Sep 17 00:00:00 2001 From: mfrances Date: Fri, 7 Nov 2025 11:05:56 -0500 Subject: [PATCH 08/21] Add light/dark theme toggle to sidebar --- src/app/AppLayout/AppLayout.tsx | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/app/AppLayout/AppLayout.tsx b/src/app/AppLayout/AppLayout.tsx index 43849ba4..a9aac033 100644 --- a/src/app/AppLayout/AppLayout.tsx +++ b/src/app/AppLayout/AppLayout.tsx @@ -11,6 +11,7 @@ import { CompassPanel, MastheadBrand, MastheadLogo, + Switch, Tab, TabContent, Tabs, @@ -21,6 +22,8 @@ import { import { IAppRoute, IAppRouteGroup, routes } from '@app/routes'; import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon'; import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon'; +import MoonIcon from '@patternfly/react-icons/dist/esm/icons/moon-icon'; +import SunIcon from '@patternfly/react-icons/dist/esm/icons/sun-icon'; import pfBackground from '../bgimages/pf-background.svg'; interface IAppLayout { @@ -32,6 +35,22 @@ const AppLayout: React.FunctionComponent = ({ children }) => { const location = useLocation(); const subTabsRef = React.useRef(null); + // Theme state and toggle + const [isDarkTheme, setIsDarkTheme] = React.useState(() => { + const stored = localStorage.getItem('theme'); + return stored === 'dark' || (!stored && window.matchMedia('(prefers-color-scheme: dark)').matches); + }); + + React.useEffect(() => { + const htmlElement = document.documentElement; + if (isDarkTheme) { + htmlElement.classList.add('pf-v6-theme-dark'); + } else { + htmlElement.classList.remove('pf-v6-theme-dark'); + } + localStorage.setItem('theme', isDarkTheme ? 'dark' : 'light'); + }, [isDarkTheme]); + // Determine active tabs based on current route const getActiveTabIndex = () => { const path = location.pathname; @@ -129,6 +148,16 @@ const AppLayout: React.FunctionComponent = ({ children }) => { - - - + + + + ); export { Support }; From d75bc769bea131cc0abdb143b3aa2150c8ce03b8 Mon Sep 17 00:00:00 2001 From: mfrances Date: Fri, 7 Nov 2025 17:25:52 -0500 Subject: [PATCH 13/21] add chatbot messagebar --- package-lock.json | 87 ++++++++++++++++++++++++++++++--- package.json | 2 +- src/app/AppLayout/AppLayout.tsx | 22 +++++++-- src/app/index.tsx | 1 + stylePaths.js | 7 ++- 5 files changed, 106 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index d8663e36..aa166752 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.2", "license": "MIT", "dependencies": { - "@patternfly/chatbot": "^6.4.1", + "@patternfly/chatbot": "^6.5.0-prerelease.10", "@patternfly/react-core": "^6.5.0-prerelease.7", "@patternfly/react-icons": "^6.5.0-prerelease.1", "@patternfly/react-styles": "^6.5.0-prerelease.1", @@ -980,21 +980,24 @@ } }, "node_modules/@patternfly/chatbot": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@patternfly/chatbot/-/chatbot-6.4.1.tgz", - "integrity": "sha512-59Ct4uzuPjf07FW7cTU6sJP8Qpr9Sg5VM0ITEw3RjONK+b1v0gvo3F/g8ZtetGM4Rvhv1C/6V4aGH8peuQswhQ==", + "version": "6.5.0-prerelease.13", + "resolved": "https://registry.npmjs.org/@patternfly/chatbot/-/chatbot-6.5.0-prerelease.13.tgz", + "integrity": "sha512-23KYK2m0CMWjp2EL8ZzfVnW+Iqgs1DiqV/SgSZpdLcZas+zvBSMuvc2+MKo5OPW6MQ03rDp5WQ02hoV9rAJ54Q==", "license": "MIT", "dependencies": { "@patternfly/react-code-editor": "^6.1.0", "@patternfly/react-core": "^6.1.0", "@patternfly/react-icons": "^6.1.0", + "@patternfly/react-styles": "^6.1.0", "@patternfly/react-table": "^6.1.0", "@segment/analytics-next": "^1.76.0", "clsx": "^2.1.0", + "monaco-editor": "^0.54.0", "path-browserify": "^1.0.1", "posthog-js": "^1.194.4", "react-markdown": "^9.0.1", "rehype-external-links": "^3.0.0", + "rehype-highlight": "^7.0.0", "rehype-sanitize": "^6.0.0", "rehype-unwrap-images": "^1.0.0", "remark-gfm": "^4.0.0", @@ -3948,8 +3951,7 @@ "version": "3.1.7", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz", "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==", - "license": "(MPL-2.0 OR Apache-2.0)", - "peer": true + "license": "(MPL-2.0 OR Apache-2.0)" }, "node_modules/domutils": { "version": "2.8.0", @@ -5578,6 +5580,22 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-whitespace": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", @@ -5599,6 +5617,15 @@ "he": "bin/he" } }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/hpack.js": { "version": "2.1.6", "dev": true, @@ -6988,6 +7015,21 @@ "tslib": "^2.0.3" } }, + "node_modules/lowlight": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz", + "integrity": "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.0.0", + "highlight.js": "~11.11.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "dev": true, @@ -7061,7 +7103,6 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", "license": "MIT", - "peer": true, "bin": { "marked": "bin/marked.js" }, @@ -8090,7 +8131,6 @@ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz", "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==", "license": "MIT", - "peer": true, "dependencies": { "dompurify": "3.1.7", "marked": "14.0.0" @@ -9763,6 +9803,23 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-highlight": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rehype-highlight/-/rehype-highlight-7.0.2.tgz", + "integrity": "sha512-k158pK7wdC2qL3M5NcZROZ2tR/l7zOzjxXd5VGdcfIyoijjQqpHd3JKtYSBDpDZ38UI2WJWuFAtkMDxmx5kstA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-text": "^4.0.0", + "lowlight": "^3.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/rehype-sanitize": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/rehype-sanitize/-/rehype-sanitize-6.0.0.tgz", @@ -12105,6 +12162,20 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-is": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", diff --git a/package.json b/package.json index afcef3a1..405a1588 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "webpack-merge": "^6.0.1" }, "dependencies": { - "@patternfly/chatbot": "^6.4.1", + "@patternfly/chatbot": "^6.5.0-prerelease.10", "@patternfly/react-core": "^6.5.0-prerelease.7", "@patternfly/react-icons": "^6.5.0-prerelease.1", "@patternfly/react-styles": "^6.5.0-prerelease.1", diff --git a/src/app/AppLayout/AppLayout.tsx b/src/app/AppLayout/AppLayout.tsx index 73ce3a6b..c94d7136 100644 --- a/src/app/AppLayout/AppLayout.tsx +++ b/src/app/AppLayout/AppLayout.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React, { useState } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { ActionList, @@ -18,6 +18,7 @@ import { TabsComponent, Tooltip, } from '@patternfly/react-core'; +import { MessageBar } from '@patternfly/chatbot'; import { useTheme } from '@app/utils/ThemeContext'; import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon'; import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon'; @@ -34,6 +35,7 @@ const AppLayout: React.FunctionComponent = ({ children }) => { const location = useLocation(); const subTabsRef = React.useRef(null); const { isDarkTheme, toggleTheme } = useTheme(); + const [isThinking, setIsThinking] = useState(false); // Determine active tabs based on current route const getActiveTabIndex = React.useCallback(() => { @@ -201,10 +203,24 @@ const AppLayout: React.FunctionComponent = ({ children }) => { /> ); + const handleSendMessage = () => { + setIsThinking(true); + setTimeout(() => { + setIsThinking(false); + }, 10000); // 10 seconds + }; + const footerContent = ( - - Message bar + + ); diff --git a/src/app/index.tsx b/src/app/index.tsx index 75114c95..d77a6809 100644 --- a/src/app/index.tsx +++ b/src/app/index.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import '@patternfly/react-core/dist/styles/base.css'; +import '@patternfly/chatbot/dist/css/main.css'; import { BrowserRouter as Router } from 'react-router-dom'; import { AppLayout } from '@app/AppLayout/AppLayout'; import { AppRoutes } from '@app/routes'; diff --git a/stylePaths.js b/stylePaths.js index e7302b22..dc6ce98d 100644 --- a/stylePaths.js +++ b/stylePaths.js @@ -8,5 +8,10 @@ export const stylePaths = [ path.resolve('./node_modules/@patternfly/react-core/dist/esm/@patternfly/patternfly'), path.resolve('./node_modules/@patternfly/react-core/node_modules/@patternfly/react-styles/css'), path.resolve('./node_modules/@patternfly/react-table/node_modules/@patternfly/react-styles/css'), - path.resolve('./node_modules/@patternfly/react-inline-edit-extension/node_modules/@patternfly/react-styles/css') + path.resolve('./node_modules/@patternfly/react-inline-edit-extension/node_modules/@patternfly/react-styles/css'), + path.resolve('./node_modules/@patternfly/chatbot/dist/css'), + path.resolve('./node_modules/@patternfly/chatbot/node_modules/@patternfly/react-styles/css'), + path.resolve('./node_modules/@patternfly/react-code-editor/node_modules/@patternfly/react-styles/css'), + path.resolve('./node_modules/highlight.js/styles'), + path.resolve('./node_modules/monaco-editor') ]; From 13a7846bbb689cfb35e3af9155175b86837159f7 Mon Sep 17 00:00:00 2001 From: mfrances Date: Tue, 11 Nov 2025 10:08:37 -0500 Subject: [PATCH 14/21] changes from demo feedback --- package-lock.json | 45 +- package.json | 9 +- src/app/AppLayout/AppLayout.tsx | 52 +- src/app/Dashboard/Dashboard.tsx | 32 +- src/app/Settings/General/GeneralSettings.tsx | 4 +- src/app/Settings/Profile/ProfileSettings.tsx | 4 +- src/app/Support/Support.tsx | 3 +- src/app/bgimages/avatar.svg | 18 + src/app/compass-ui.tsx | 704 +++++++++++++++++++ src/app/index.tsx | 1 + 10 files changed, 827 insertions(+), 45 deletions(-) create mode 100644 src/app/bgimages/avatar.svg create mode 100644 src/app/compass-ui.tsx diff --git a/package-lock.json b/package-lock.json index aa166752..172436f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,11 @@ "version": "0.0.2", "license": "MIT", "dependencies": { - "@patternfly/chatbot": "^6.5.0-prerelease.10", - "@patternfly/react-core": "^6.5.0-prerelease.7", - "@patternfly/react-icons": "^6.5.0-prerelease.1", - "@patternfly/react-styles": "^6.5.0-prerelease.1", + "@patternfly/chatbot": "6.5.0-prerelease.10", + "@patternfly/patternfly": "6.5.0-prerelease.20", + "@patternfly/react-core": "6.5.0-prerelease.9", + "@patternfly/react-icons": "6.5.0-prerelease.4", + "@patternfly/react-styles": "6.5.0-prerelease.4", "react": "^18", "react-dom": "^18", "sirv-cli": "^3.0.1" @@ -980,9 +981,9 @@ } }, "node_modules/@patternfly/chatbot": { - "version": "6.5.0-prerelease.13", - "resolved": "https://registry.npmjs.org/@patternfly/chatbot/-/chatbot-6.5.0-prerelease.13.tgz", - "integrity": "sha512-23KYK2m0CMWjp2EL8ZzfVnW+Iqgs1DiqV/SgSZpdLcZas+zvBSMuvc2+MKo5OPW6MQ03rDp5WQ02hoV9rAJ54Q==", + "version": "6.5.0-prerelease.10", + "resolved": "https://registry.npmjs.org/@patternfly/chatbot/-/chatbot-6.5.0-prerelease.10.tgz", + "integrity": "sha512-k0yqW9kCg+FDDwTu2KA9nczczIuGtkp50ZNXlibM65MkpyPqFdRUj1i8gXMQ/34NL5C1HZNH6AcvG1R1kM3ZLw==", "license": "MIT", "dependencies": { "@patternfly/react-code-editor": "^6.1.0", @@ -1048,6 +1049,12 @@ "integrity": "sha512-iZthBoXSGQ/+PfGTdPFJVulaJZI3rwE+7A/whOXPGp3Jyq3k6X52pr1+5nlO6WHasbZ9FyeZGqXf4fazUZNjbw==", "license": "MIT" }, + "node_modules/@patternfly/patternfly": { + "version": "6.5.0-prerelease.20", + "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-6.5.0-prerelease.20.tgz", + "integrity": "sha512-kUGuv8/fynL2y0OZmsJbRE/auBKpr+6iQhGT1rygCxbfQeVoA5YE+KX1S3NBlCK3lsJXiLTt5OUK/8s1iZG2FA==", + "license": "MIT" + }, "node_modules/@patternfly/react-code-editor": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/@patternfly/react-code-editor/-/react-code-editor-6.4.0.tgz", @@ -1107,14 +1114,14 @@ "license": "MIT" }, "node_modules/@patternfly/react-core": { - "version": "6.5.0-prerelease.14", - "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-6.5.0-prerelease.14.tgz", - "integrity": "sha512-RCY6nT2v74+tI8M1/IGFAsapQHNoXdCQDLQRwDRZuv1QHWF/lQAnwdOetmUeGP+9iRbsf5w+kuTVpUXYk0U5bA==", + "version": "6.5.0-prerelease.9", + "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-6.5.0-prerelease.9.tgz", + "integrity": "sha512-cuDdMklrTxRPjkE2fBrCcTYlQY9CfD+jgS7NHv0oFHyY+2CwbKzVR5lnCbpsIm5sgQAAZ33KccBb1uMN4/Mrrg==", "license": "MIT", "dependencies": { - "@patternfly/react-icons": "^6.5.0-prerelease.6", - "@patternfly/react-styles": "^6.5.0-prerelease.6", - "@patternfly/react-tokens": "^6.5.0-prerelease.6", + "@patternfly/react-icons": "^6.5.0-prerelease.4", + "@patternfly/react-styles": "^6.5.0-prerelease.4", + "@patternfly/react-tokens": "^6.5.0-prerelease.4", "focus-trap": "7.6.4", "react-dropzone": "^14.3.5", "tslib": "^2.8.1" @@ -1125,9 +1132,9 @@ } }, "node_modules/@patternfly/react-icons": { - "version": "6.5.0-prerelease.6", - "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-6.5.0-prerelease.6.tgz", - "integrity": "sha512-zQpGTpKuH7ofVF9sXTDErvHwaKLFFdXw41x65VUFM5Y1z2P2xvuJhrOjQ9NeAxgMjw549/bz+s8sJKyDbeqMMQ==", + "version": "6.5.0-prerelease.4", + "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-6.5.0-prerelease.4.tgz", + "integrity": "sha512-QNDLLPcvXlZ6e1R5nKhKeyOIylWj+dwBiXMNMfpbOE6Q08bMWlRbD09OtmOItJhhKTZQ7K8OyOtcOqsWLRlv9Q==", "license": "MIT", "peerDependencies": { "react": "^17 || ^18 || ^19", @@ -1135,9 +1142,9 @@ } }, "node_modules/@patternfly/react-styles": { - "version": "6.5.0-prerelease.6", - "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-6.5.0-prerelease.6.tgz", - "integrity": "sha512-sd4Cg1t+QKkfCpSt6ofGjb4pq3QdCOyPDqrkC026amnIBX6bpmXPpQj6IHUHtydxtSm8sUjB6wnGzo4JEwTr2w==", + "version": "6.5.0-prerelease.4", + "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-6.5.0-prerelease.4.tgz", + "integrity": "sha512-v+Ncw4P2sEnOq1kK9fpTulwsIIV3PnNKsCNshyX8SUwrOq6N4TsrHYXKc5Mu2mIist56xsUNUDNuAAXo6h1XtA==", "license": "MIT" }, "node_modules/@patternfly/react-table": { diff --git a/package.json b/package.json index 405a1588..7bb1b84d 100644 --- a/package.json +++ b/package.json @@ -70,10 +70,11 @@ "webpack-merge": "^6.0.1" }, "dependencies": { - "@patternfly/chatbot": "^6.5.0-prerelease.10", - "@patternfly/react-core": "^6.5.0-prerelease.7", - "@patternfly/react-icons": "^6.5.0-prerelease.1", - "@patternfly/react-styles": "^6.5.0-prerelease.1", + "@patternfly/patternfly": "6.5.0-prerelease.20", + "@patternfly/chatbot": "6.5.0-prerelease.10", + "@patternfly/react-core": "6.5.0-prerelease.9", + "@patternfly/react-icons": "6.5.0-prerelease.4", + "@patternfly/react-styles": "6.5.0-prerelease.4", "react": "^18", "react-dom": "^18", "sirv-cli": "^3.0.1" diff --git a/src/app/AppLayout/AppLayout.tsx b/src/app/AppLayout/AppLayout.tsx index c94d7136..af9acfee 100644 --- a/src/app/AppLayout/AppLayout.tsx +++ b/src/app/AppLayout/AppLayout.tsx @@ -4,13 +4,20 @@ import { ActionList, ActionListGroup, ActionListItem, + Avatar, Button, Compass, CompassHeader, CompassMessageBar, CompassPanel, + Dropdown, + DropdownItem, + DropdownList, + Flex, MastheadBrand, MastheadLogo, + MenuToggle, + MenuToggleElement, Tab, TabContent, TabTitleText, @@ -25,6 +32,7 @@ import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon'; import MoonIcon from '@patternfly/react-icons/dist/esm/icons/moon-icon'; import SunIcon from '@patternfly/react-icons/dist/esm/icons/sun-icon'; import pfBackground from '../bgimages/pf-background.svg'; +import avatarSvg from '../bgimages/avatar.svg'; interface IAppLayout { children: React.ReactNode; @@ -36,6 +44,7 @@ const AppLayout: React.FunctionComponent = ({ children }) => { const subTabsRef = React.useRef(null); const { isDarkTheme, toggleTheme } = useTheme(); const [isThinking, setIsThinking] = useState(false); + const [isDropdownOpen, setIsDropdownOpen] = useState(false); // Determine active tabs based on current route const getActiveTabIndex = React.useCallback(() => { @@ -118,25 +127,59 @@ const AppLayout: React.FunctionComponent = ({ children }) => { ); + const userDropdownItems = ( + <> + My profile + User management + Logout + + ); + + const userDropdown = ( + setIsDropdownOpen(false)} + onOpenChange={(isOpen: boolean) => setIsDropdownOpen(isOpen)} + popperProps={{ position: 'right' }} + toggle={(toggleRef: React.Ref) => ( + setIsDropdownOpen(!isDropdownOpen)} + isExpanded={isDropdownOpen} + variant="plain" + isCircle + > + + User Name + + + + )} + > + {userDropdownItems} + + ); + const sidebarContent = ( - + + + + + - - - - - + +// Pill-shaped floating drawer + + {/* Drawer content */} + + +// AI thinking indicator + + {/* Shows pulsing animation while AI processes */} + + +// AI-related content with gradient border + + {/* AI-generated or AI-related content */} + +``` + +**Note**: Always refer to [staging.patternfly.org/ai/generative-uis](https://staging.patternfly.org/ai/generative-uis/overview) for the latest props, APIs, and complete working examples. + +### Available Components + +The staging site's "Generative UI" section includes: +- Compass-themed layouts and chrome +- AI-optimized form patterns +- Dynamic data display components +- Responsive templates for AI-generated UIs +- **React Flow integration** - For pipelines and topology layouts + +**Always check [staging.patternfly.org/ai/generative-uis](https://staging.patternfly.org/ai/generative-uis/overview) for the complete, up-to-date list.** + +### React Flow Integration + +For building **pipelines, workflows, and topology visualizations**, use React Flow with PatternFly: + +- **[React Flow with PatternFly Guide](https://staging.patternfly.org/ai/generative-uis/react-flow)** - Official integration guidance +- React Flow is recommended for node-based diagrams, data flows, and process visualizations +- The staging site provides PatternFly-specific styling and component examples +- Use this for any topology-type layouts or pipeline visualizations + +**When to use React Flow:** +- βœ… Pipeline visualizations (CI/CD, data pipelines) +- βœ… Workflow diagrams +- βœ… Network topology views +- βœ… State machine visualizations +- βœ… Any node-and-edge based layouts + +## Development Workflow + +### 1. Component Discovery Process + +When you need to use a component: + +``` +1. Check if it's a standard PatternFly component + β†’ Search patternfly.org first + +2. If not found or marked as "Compass" + β†’ Go to staging.patternfly.org/ai/generative-uis + +3. Look in the "Generative UI" section + β†’ Find component documentation and examples + +4. If still not found + β†’ Search staging site or ask for clarification +``` + +### 2. Implementation Guidelines + +```jsx +// βœ… Correct: Using Compass components from staging docs +// Always check staging.patternfly.org for the latest API + +import { CompassComponent } from '@patternfly/react-core'; + +export const MyGenerativeUI = () => { + return ( + + {/* Content */} + + ); +}; +``` + +### 3. Staying Current + +Since the Compass theme is under active development: + +1. **Check staging site regularly** for updates +2. **Reference the latest examples** from staging.patternfly.org +3. **Follow semantic versioning** for package updates +4. **Monitor the compass_theme branch** for updates + +## AI Agent Instructions + +### For AI Coding Assistants (Cursor, Claude Code, etc.) + +When generating code for this project: + +1. **First**: Check if the component exists on patternfly.org +2. **If not found**: Reference staging.patternfly.org/ai/generative-uis +3. **Always**: Use the "View Code" sections on the staging site +4. **Verify**: Component APIs match the staging documentation +5. **Document**: Note when using staging-only components in code comments + +### Search Strategy for AI Agents + +``` +User requests a component β†’ Is it on patternfly.org? +β”‚ +β”œβ”€ YES β†’ Use patternfly.org documentation +β”‚ +└─ NO β†’ Check staging.patternfly.org/ai/generative-uis + β”‚ + β”œβ”€ Found β†’ Use staging site documentation + β”‚ + └─ Not found β†’ Ask user for clarification or search staging site + +User requests pipeline/topology/workflow visualization? +β”‚ +└─ Use React Flow β†’ staging.patternfly.org/ai/generative-uis/react-flow +``` + +## MCP and Context7 Integration + +### Using MCP for PatternFly Documentation + +The PatternFly MCP (Model Context Protocol) server provides access to official PatternFly documentation. However: + +- ❌ **MCP does NOT include staging site documentation** +- ❌ **MCP does NOT include unpublished Compass components** +- βœ… **MCP DOES include all published PatternFly components** + +### When MCP Returns No Results + +If the PatternFly MCP cannot find a component: + +1. It's likely a Compass/Generative UI component +2. Go to [staging.patternfly.org/ai/generative-uis](https://staging.patternfly.org/ai/generative-uis/overview) +3. Search the "Generative UI" section +4. Use the staging site's "View Code" examples + +### Context7 Strategy + +When using Context7 with AI assistants: + +``` +# Standard components - use MCP +get-library-docs β†’ PatternFly React β†’ Found βœ… + +# Compass components - use web search or staging site +get-library-docs β†’ PatternFly React β†’ Not Found ❌ +β†’ Manual reference to staging.patternfly.org βœ… +``` + +## Quick Reference + +### Essential Links + +| Resource | URL | Use For | +|----------|-----|---------| +| **Staging Site - Generative UI** | [staging.patternfly.org/ai/generative-uis](https://staging.patternfly.org/ai/generative-uis/overview) | Compass components, Generative UI | +| **React Flow Integration** | [staging.patternfly.org/ai/generative-uis/react-flow](https://staging.patternfly.org/ai/generative-uis/react-flow) | Pipelines, topology, workflows | +| **Production Site** | [patternfly.org](https://www.patternfly.org/) | Standard PatternFly components | +| **GitHub Repository** | [github.com/patternfly/patternfly-react](https://github.com/patternfly/patternfly-react) | Source code, issues, PRs | + +### Component Prefixes to Watch For + +- `Compass*` - Likely on staging site only +- `Generative*` - Check staging site first +- Standard PatternFly components - Use patternfly.org + +## Troubleshooting + +### "Component Not Found on patternfly.org" + +**Solution**: Check [staging.patternfly.org/ai/generative-uis](https://staging.patternfly.org/ai/generative-uis/overview) + +### "MCP Cannot Find Component Documentation" + +**Solution**: This is expected for Compass components. Reference the staging site. + +### "Component API Different Than Expected" + +**Solution**: Compass components may have different APIs. Always verify against staging site documentation. + +### "Import Errors with Compass Components" + +**Solution**: +1. Check package.json for correct PatternFly versions +2. Ensure you're on the compass_theme branch +3. Verify imports match staging site examples + +## Best Practices + +### For AI-Generated Code + +1. βœ… **Add comments** noting when using staging-only components +2. βœ… **Link to staging docs** in component docstrings +3. βœ… **Test thoroughly** as these components may have different APIs +4. βœ… **Check staging site** before each coding session for updates + +### For Human Developers + +1. βœ… **Bookmark the staging site** for quick reference +2. βœ… **Communicate with AI agents** when components aren't found +3. βœ… **Review generated code** to ensure staging docs were followed +4. βœ… **Stay updated** on Compass component releases + +## Transition Plan + +### When Compass Components Are Published + +Once Compass components are officially published to patternfly.org: + +1. Documentation will migrate to main site +2. MCP will include Compass component docs +3. This guide will be updated with migration notes +4. Standard PatternFly documentation practices will apply + +### Monitoring for Publication + +Watch for: +- Announcements on [PatternFly GitHub](https://github.com/patternfly/patternfly-react) +- Release notes mentioning "Compass" or "Generative UI" +- Component availability on main patternfly.org site + +## Summary for AI Agents + +**TL;DR**: +- Compass components = staging.patternfly.org/ai/generative-uis +- Standard components = patternfly.org +- MCP won't have Compass docs yet +- Always check staging site first for Compass theme work +- This project is a template for AI-assisted PatternFly development + +--- + +**Last Updated**: November 2025 +**Branch**: compass_theme +**Status**: Compass components in active development on staging site + diff --git a/ai-documentation/resources/external-links.md b/ai-documentation/resources/external-links.md index 874262a8..0cdfe128 100644 --- a/ai-documentation/resources/external-links.md +++ b/ai-documentation/resources/external-links.md @@ -15,7 +15,23 @@ External resources are essential for staying current with PatternFly updates, fi ## Official PatternFly Documentation -### Primary Documentation +### ⚠️ COMPASS THEME: Staging Site Documentation + +**🚨 IMPORTANT for compass_theme branch:** + +This project uses **Compass theme components** that are **not yet published** on the main PatternFly site. For Compass/Generative UI components, always check the staging site first: + +- **[Staging PatternFly - Generative UIs Overview](https://staging.patternfly.org/ai/generative-uis/overview)** - 🎯 PRIMARY source for Compass components +- **[Staging PatternFly - Generative UI Section](https://staging.patternfly.org/ai/generative-uis)** - Browse all Generative UI documentation +- **[React Flow with PatternFly](https://staging.patternfly.org/ai/generative-uis/react-flow)** - Pipelines, topology, and workflow visualizations + +**When to use staging vs production:** +- βœ… **Staging site** β†’ Compass components, Generative UI patterns, React Flow integration, unpublished components +- βœ… **Production site** β†’ Standard PatternFly components, published features + +πŸ“– **See [Compass Theme Guide](../guidelines/compass-theme-guide.md) for complete instructions** + +### Primary Documentation (Production) - **[PatternFly.org](https://www.patternfly.org/)** - Main documentation site with component APIs and examples - **[PatternFly Design Guidelines](https://www.patternfly.org/get-started/design)** - Design principles and patterns - **[PatternFly React Components](https://www.patternfly.org/components)** - Complete component library documentation @@ -32,6 +48,7 @@ External resources are essential for staying current with PatternFly updates, fi ### Specialized Features - **[PatternFly Charts](https://www.patternfly.org/charts/about)** - Data visualization guidelines - **[PatternFly AI - Chatbot](https://www.patternfly.org/patternfly-ai/chatbot/overview)** - AI chatbot components +- **[React Flow with PatternFly](https://staging.patternfly.org/ai/generative-uis/react-flow)** - 🚨 Staging site: Pipelines, topology, and workflow visualizations - **[Accessibility Guidelines](https://www.patternfly.org/accessibility/accessibility-fundamentals)** - WCAG compliance and best practices ## Official Repositories diff --git a/package-lock.json b/package-lock.json index 9c3a9378..b6cae816 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "@typescript-eslint/eslint-plugin": "^8.34.0", "@typescript-eslint/parser": "^8.34.0", "@vitejs/plugin-react": "^4.3.3", + "@vitest/coverage-v8": "^4.0.10", "copy-webpack-plugin": "^13.0.0", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.2", @@ -360,6 +361,16 @@ "node": ">=6.9.0" } }, + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@borewit/text-codec": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", @@ -2354,6 +2365,38 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, + "node_modules/@vitest/coverage-v8": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.10.tgz", + "integrity": "sha512-g+brmtoKa/sAeIohNJnnWhnHtU6GuqqVOSQ4SxDIPcgZWZyhJs5RmF5LpqXs8Kq64lANP+vnbn5JLzhLj/G56g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^1.0.2", + "@vitest/utils": "4.0.10", + "ast-v8-to-istanbul": "^0.3.8", + "debug": "^4.4.3", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.2.0", + "magicast": "^0.5.1", + "std-env": "^3.10.0", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "4.0.10", + "vitest": "4.0.10" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, "node_modules/@vitest/expect": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.10.tgz", @@ -2978,6 +3021,25 @@ "node": ">=12" } }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.8.tgz", + "integrity": "sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^9.0.1" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, "node_modules/async-function": { "version": "1.0.0", "dev": true, @@ -6957,6 +7019,60 @@ "node": ">=0.10.0" } }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/iterator.prototype": { "version": "1.1.5", "dev": true, @@ -7560,6 +7676,18 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/magicast": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz", + "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "source-map-js": "^1.2.1" + } + }, "node_modules/make-asynchronous": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-asynchronous/-/make-asynchronous-1.0.1.tgz", @@ -7591,6 +7719,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/markdown-table": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", diff --git a/package.json b/package.json index 4a9addc7..d11197fd 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@typescript-eslint/eslint-plugin": "^8.34.0", "@typescript-eslint/parser": "^8.34.0", "@vitejs/plugin-react": "^4.3.3", + "@vitest/coverage-v8": "^4.0.10", "copy-webpack-plugin": "^13.0.0", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.2", @@ -70,13 +71,13 @@ "webpack-merge": "^6.0.1" }, "dependencies": { - "@patternfly/patternfly": "6.5.0-prerelease.27", "@patternfly/chatbot": "6.5.0-prerelease.18", + "@patternfly/patternfly": "6.5.0-prerelease.27", "@patternfly/react-core": "6.5.0-prerelease.14", + "@patternfly/react-data-view": "6.4.0", "@patternfly/react-icons": "6.5.0-prerelease.6", "@patternfly/react-styles": "6.5.0-prerelease.6", "@patternfly/react-table": "6.5.0-prerelease.14", - "@patternfly/react-data-view": "6.4.0", "react": "^18", "react-dom": "^18", "sirv-cli": "^3.0.1" diff --git a/src/app/__snapshots__/app.test.tsx.snap b/src/app/__snapshots__/app.test.tsx.snap deleted file mode 100644 index d2132a71..00000000 --- a/src/app/__snapshots__/app.test.tsx.snap +++ /dev/null @@ -1,313 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`App tests > should render default App component 1`] = ` - -
- -
-
- - - -
- -
-
-
-
-
- -
-
-
-
-
-

- Dashboard Page Title! -

-
-
-
-
-
-`; diff --git a/src/app/app.test.tsx b/src/app/app.test.tsx index 2617e083..811a27ed 100644 --- a/src/app/app.test.tsx +++ b/src/app/app.test.tsx @@ -6,54 +6,45 @@ import { describe, expect, it, test } from 'vitest'; describe('App tests', () => { test('should render default App component', () => { - const { asFragment } = render(); - - expect(asFragment()).toMatchSnapshot(); - }); - - it('should render a nav-toggle button', () => { render(); - expect(screen.getByRole('button', { name: 'Global navigation' })).toBeVisible(); + // Test that key components are present + expect(screen.getByRole('navigation', { name: 'Main navigation' })).toBeInTheDocument(); + expect(screen.getByText('PatternFly logo')).toBeInTheDocument(); + expect(screen.getByText('User Name')).toBeInTheDocument(); }); - // I'm fairly sure that this test not going to work properly no matter what we do since JSDOM doesn't actually - // draw anything. We could potentially make something work, likely using a different test environment, but - // using Cypress for this kind of test would be more efficient. - it.skip('should hide the sidebar on smaller viewports', () => { - Object.defineProperty(window, 'innerWidth', { writable: true, configurable: true, value: 600 }); - + it('should render navigation tabs', () => { render(); - window.dispatchEvent(new Event('resize')); - - expect(screen.queryByRole('link', { name: 'Dashboard' })).not.toBeInTheDocument(); + expect(screen.getByRole('tab', { name: 'Dashboard' })).toBeVisible(); + expect(screen.getByRole('tab', { name: 'Support' })).toBeVisible(); + expect(screen.getByRole('tab', { name: 'Settings' })).toBeVisible(); }); - it('should expand the sidebar on larger viewports', () => { + it('should render sidebar buttons', () => { render(); - act(() => { - window.dispatchEvent(new Event('resize')); - }); + // Get all buttons with these names (there are two sidebars with the same buttons) + const componentsButtons = screen.getAllByRole('button', { name: 'Components' }); + const helpButtons = screen.getAllByRole('button', { name: 'Help' }); + const themeButtons = screen.getAllByRole('button', { name: 'Switch to dark theme' }); - expect(screen.getByRole('link', { name: 'Dashboard' })).toBeVisible(); + expect(componentsButtons.length).toBeGreaterThan(0); + expect(helpButtons.length).toBeGreaterThan(0); + expect(themeButtons.length).toBeGreaterThan(0); + expect(componentsButtons[0]).toBeVisible(); }); - it('should hide the sidebar when clicking the nav-toggle button', async () => { + it('should allow tab navigation', async () => { const user = userEvent.setup(); render(); - act(() => { - window.dispatchEvent(new Event('resize')); - }); - const button = screen.getByRole('button', { name: 'Global navigation' }); - - expect(screen.getByRole('link', { name: 'Dashboard' })).toBeVisible(); + const supportTab = screen.getByRole('tab', { name: 'Support' }); - await user.click(button); + await user.click(supportTab); - expect(screen.queryByRole('link', { name: 'Dashboard' })).not.toBeInTheDocument(); + expect(supportTab).toHaveAttribute('aria-selected', 'true'); }); }); diff --git a/src/test/mocks/monaco-editor.ts b/src/test/mocks/monaco-editor.ts new file mode 100644 index 00000000..e8b7fdef --- /dev/null +++ b/src/test/mocks/monaco-editor.ts @@ -0,0 +1,3 @@ +// Mock for monaco-editor - not needed in tests +export default {}; + diff --git a/src/test/setup.ts b/src/test/setup.ts index 6bd7c30c..58d85159 100644 --- a/src/test/setup.ts +++ b/src/test/setup.ts @@ -1,6 +1,11 @@ import '@testing-library/jest-dom'; import { vi } from 'vitest'; +// Mock PatternFly Chatbot MessageBar to avoid monaco-editor dependency +vi.mock('@patternfly/chatbot/dist/dynamic/MessageBar', () => ({ + MessageBar: vi.fn(() => null), +})); + // Mock CSS imports Object.defineProperty(window, 'matchMedia', { writable: true, @@ -21,7 +26,6 @@ global.ResizeObserver = class ResizeObserver { observe = vi.fn(); unobserve = vi.fn(); disconnect = vi.fn(); - constructor(callback: ResizeObserverCallback) {} }; // Mock IntersectionObserver @@ -29,5 +33,4 @@ global.IntersectionObserver = class IntersectionObserver { observe = vi.fn(); unobserve = vi.fn(); disconnect = vi.fn(); - constructor(callback: IntersectionObserverCallback, options?: IntersectionObserverInit) {} } as any; diff --git a/vitest.config.ts b/vitest.config.ts index cce22eab..1aeadad5 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -14,6 +14,11 @@ export default defineConfig({ resolve: { alias: { '@app': path.resolve(__dirname, './src/app'), + // Mock monaco-editor to avoid bundling it in tests + 'monaco-editor': path.resolve(__dirname, './src/test/mocks/monaco-editor.ts'), }, }, + ssr: { + noExternal: [/@patternfly\/.*/], + }, }); From 375b5bc31216386433718cbf1325a4f7c6f61fad Mon Sep 17 00:00:00 2001 From: nicolethoen Date: Wed, 19 Nov 2025 09:45:34 -0500 Subject: [PATCH 18/21] update compass theme branch README --- README.md | 80 ++++++++++++++++++++++++++++++++++++-------- seed_screenshot.png | Bin 0 -> 147772 bytes 2 files changed, 66 insertions(+), 14 deletions(-) create mode 100644 seed_screenshot.png diff --git a/README.md b/README.md index c545394e..abac2e72 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,61 @@ -# Patternfly Seed +# PatternFly React Seed - Compass Theme Branch -Patternfly Seed is an open source build scaffolding utility for web apps. The primary purpose of this project is to give developers a jump start when creating new projects that will use patternfly. A secondary purpose of this project is to serve as a reference for how to configure various aspects of an application that uses patternfly, webpack, react, typescript, etc. +This is the **Compass theme branch** of PatternFly React Seed - a specialized build scaffolding utility designed for creating modern, AI-optimized web applications with PatternFly's new **Compass theme** and **Generative UI** components. -Out of the box you'll get an app layout with chrome (header/sidebar), routing, build pipeline, test suite, and some code quality tools. Basically, all the essentials. +## 🎯 What is This Branch? -Out of box dashboard view of patternfly seed +The `compass_theme` branch is a **seed/template for building Compass-based UIs** that leverage PatternFly's latest generative UI capabilities, including: + +- 🎨 **Glass-morphism effects** and modern visual treatments +- πŸ€– **AI-optimized components** with thinking indicators and AI content highlighting +- πŸ“ **Compass layout components** designed for agentic development +- πŸ”„ **React Flow integration** for pipelines and topology visualizations +- ✨ **New design tokens** for gradients, animations, and background effects + +Out of the box you'll get a Compass-themed app layout with chrome (header/sidebar), routing, build pipeline, test suite, and code quality tools - all optimized for AI-assisted development with tools like Cursor and Claude Code. + +Compass theme dashboard with glass effects and modern dark UI + +> **Note**: This branch uses **unpublished Compass components** from PatternFly's staging site. See the [Compass Theme Guide](./ai-documentation/guidelines/compass-theme-guide.md) for complete documentation. ## Quick-start ```bash +# Clone the repository and checkout the compass_theme branch git clone https://github.com/patternfly/patternfly-react-seed cd patternfly-react-seed +git checkout compass_theme + +# Install dependencies and start the dev server npm install && npm run start:dev ``` + +The app will start on `http://localhost:9000` with the Compass theme and all generative UI features enabled. + +## Compass Theme Features + +This branch includes PatternFly's Compass enablement features: + +### New Component Variants +- **`isPlain`** - Transparent cards, data lists, and tables for glass-morphism effects +- **`isVertical`** - Vertical action lists for sidebars +- **`isNav`** - Optimized tab styling for top navigation +- **`isCircle`** - Circular buttons and menu toggles +- **`isPill`** - Rounded, floating drawer panels +- **`isThinking`** - Pulsing animation for AI processing states +- **`hasAiIndicator`** - Gradient borders for AI-related content + +### Design Tokens +- Glass-like visual effects +- Background and border gradients +- Smooth animations +- Background image support + +### React Flow Integration +Build pipelines, topology views, and workflow diagrams with React Flow + PatternFly. See [staging.patternfly.org/ai/generative-uis/react-flow](https://staging.patternfly.org/ai/generative-uis/react-flow). + +πŸ“– **Full documentation**: [Compass Theme Guide](./ai-documentation/guidelines/compass-theme-guide.md) + ## Development scripts ```sh # Install development/build dependencies @@ -105,19 +148,28 @@ If you are using an AI-enabled IDE, the AI agent will automatically leverage the By following these rulesβ€”either directly or via your AI assistantβ€”you'll ensure your app is maintainable, accessible, and consistent with PatternFly best practices. -### 🚨 Compass Theme Branch +### 🚨 Working with Compass Components + +This `compass_theme` branch uses **unpublished Compass theme components** from PatternFly's **Generative UI** initiative. These cutting-edge components are optimized for AI-assisted development and generative interfaces. + +**πŸ“š Documentation Sources:** -This branch (`compass_theme`) uses **Compass theme components** from PatternFly's **Generative UI** initiative. These components are optimized for AI-assisted development but are **not yet published** on the main PatternFly website. +| Component Type | Documentation Location | +|----------------|------------------------| +| 🎨 **Compass/Generative UI** | [staging.patternfly.org/ai/generative-uis](https://staging.patternfly.org/ai/generative-uis/overview) | +| πŸ”„ **React Flow** | [staging.patternfly.org/ai/generative-uis/react-flow](https://staging.patternfly.org/ai/generative-uis/react-flow) | +| πŸ“˜ **Standard PatternFly** | [patternfly.org](https://www.patternfly.org/) | +| πŸ“– **Complete Guide** | [Compass Theme Guide](./ai-documentation/guidelines/compass-theme-guide.md) | -**Important for AI agents and developers:** -- πŸ“– Compass component docs are on **[staging.patternfly.org/ai/generative-uis](https://staging.patternfly.org/ai/generative-uis/overview)** -- πŸ” Standard PatternFly components remain on **[patternfly.org](https://www.patternfly.org/)** -- πŸ“ See [Compass Theme Guide](./ai-documentation/guidelines/compass-theme-guide.md) for complete instructions +**⚠️ Important Notes:** +- Compass components are **not yet on the main PatternFly site** - use staging site +- PatternFly MCP server won't have Compass component docs yet +- Always check the staging site first for Compass-specific features -**AI agents should:** -1. Check staging.patternfly.org for Compass/Generative UI components first -2. Fall back to patternfly.org for standard components -3. Note that PatternFly MCP won't have Compass docs yet +**πŸ€– For AI Agents:** +- Use [staging.patternfly.org/ai/generative-uis](https://staging.patternfly.org/ai/generative-uis/overview) for Compass components +- Use [patternfly.org](https://www.patternfly.org/) for standard components +- See [Quick Reference](./ai-documentation/COMPASS-QUICK-REF.md) for decision trees ## Multi environment configuration This project uses [dotenv-webpack](https://www.npmjs.com/package/dotenv-webpack) for exposing environment variables to your code. Either export them at the system level like `export MY_ENV_VAR=http://dev.myendpoint.com && npm run start:dev` or simply drop a `.env` file in the root that contains your key-value pairs like below: diff --git a/seed_screenshot.png b/seed_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ded2de6f42b8742899ea8959951957087608ec51 GIT binary patch literal 147772 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 Date: Wed, 19 Nov 2025 11:03:27 -0500 Subject: [PATCH 19/21] bump chatbot version --- package-lock.json | 24 ++++++++++++++++++------ package.json | 2 +- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6cae816..88b6fba4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.2", "license": "MIT", "dependencies": { - "@patternfly/chatbot": "6.5.0-prerelease.18", + "@patternfly/chatbot": "^6.5.0-prerelease.19", "@patternfly/patternfly": "6.5.0-prerelease.27", "@patternfly/react-core": "6.5.0-prerelease.14", "@patternfly/react-data-view": "6.4.0", @@ -1080,9 +1080,9 @@ } }, "node_modules/@patternfly/chatbot": { - "version": "6.5.0-prerelease.18", - "resolved": "https://registry.npmjs.org/@patternfly/chatbot/-/chatbot-6.5.0-prerelease.18.tgz", - "integrity": "sha512-14PQRchcNPXkhxA8oVnE3MzXJmn0DmCreP+YzrZhNkAhT8AFfav1yF68j9+R9OIa8Rje5dyX8MKQc2+huKT/ZA==", + "version": "6.5.0-prerelease.19", + "resolved": "https://registry.npmjs.org/@patternfly/chatbot/-/chatbot-6.5.0-prerelease.19.tgz", + "integrity": "sha512-UKr5k1iBh+Lici6ao2O1RvPMbV1+4UF0508qCN6KZWao7BKjyhBYrkZSFazF1ZLGUeLsQyg8IWXNe0nitKQLkQ==", "license": "MIT", "dependencies": { "@patternfly/react-code-editor": "^6.1.0", @@ -1092,7 +1092,6 @@ "@patternfly/react-table": "^6.1.0", "@segment/analytics-next": "^1.76.0", "clsx": "^2.1.0", - "monaco-editor": "^0.54.0", "path-browserify": "^1.0.1", "posthog-js": "^1.194.4", "react-markdown": "^9.0.1", @@ -1104,8 +1103,18 @@ "unist-util-visit": "^5.0.0" }, "peerDependencies": { + "@monaco-editor/react": "^4.7.0", + "monaco-editor": "^0.54.0", "react": "^18 || ^19", "react-dom": "^18 || ^19" + }, + "peerDependenciesMeta": { + "@monaco-editor/react": { + "optional": false + }, + "monaco-editor": { + "optional": false + } } }, "node_modules/@patternfly/chatbot/node_modules/@patternfly/react-core": { @@ -4323,7 +4332,8 @@ "version": "3.1.7", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz", "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==", - "license": "(MPL-2.0 OR Apache-2.0)" + "license": "(MPL-2.0 OR Apache-2.0)", + "peer": true }, "node_modules/domutils": { "version": "2.8.0", @@ -7750,6 +7760,7 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", "license": "MIT", + "peer": true, "bin": { "marked": "bin/marked.js" }, @@ -8778,6 +8789,7 @@ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz", "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==", "license": "MIT", + "peer": true, "dependencies": { "dompurify": "3.1.7", "marked": "14.0.0" diff --git a/package.json b/package.json index d11197fd..860ff56d 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "webpack-merge": "^6.0.1" }, "dependencies": { - "@patternfly/chatbot": "6.5.0-prerelease.18", + "@patternfly/chatbot": "^6.5.0-prerelease.19", "@patternfly/patternfly": "6.5.0-prerelease.27", "@patternfly/react-core": "6.5.0-prerelease.14", "@patternfly/react-data-view": "6.4.0", From 1964161fd3e461e7d645e580d441101ee91e096e Mon Sep 17 00:00:00 2001 From: Donald Labaj Date: Sun, 1 Feb 2026 09:50:39 -0500 Subject: [PATCH 20/21] fix: Removes vitest since it can not be used with webpack. --- jest.config.cjs | 20 ++++++++++++++++++++ package.json | 17 +++++++++-------- src/app/app.test.tsx | 1 - src/test/mocks/fileMock.cjs | 1 + src/test/mocks/styleMock.cjs | 1 + src/test/setup.ts | 34 +++++++++++++++++++--------------- vitest.config.ts | 24 ------------------------ 7 files changed, 50 insertions(+), 48 deletions(-) create mode 100644 jest.config.cjs create mode 100644 src/test/mocks/fileMock.cjs create mode 100644 src/test/mocks/styleMock.cjs delete mode 100644 vitest.config.ts diff --git a/jest.config.cjs b/jest.config.cjs new file mode 100644 index 00000000..7aba2500 --- /dev/null +++ b/jest.config.cjs @@ -0,0 +1,20 @@ +/** @type {import('jest').Config} */ +module.exports = { + testEnvironment: 'jest-environment-jsdom', + setupFilesAfterEnv: ['/src/test/setup.ts'], + moduleNameMapper: { + '\\.(css|less|scss|sass)$': '/src/test/mocks/styleMock.cjs', + '\\.(svg|png|jpg|jpeg|gif|ico|webp)$': '/src/test/mocks/fileMock.cjs', + '^@app/(.*)$': '/src/app/$1', + 'monaco-editor': '/src/test/mocks/monaco-editor.ts', + }, + transform: { + '^.+\\.(ts|tsx|js|jsx)$': ['ts-jest', { useESM: false }], + }, + transformIgnorePatterns: [ + '/node_modules/(?!(@patternfly|react-router)/)', + ], + testMatch: ['**/__tests__/**/*.(ts|tsx|js)', '**/*.test.(ts|tsx|js)'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], + collectCoverageFrom: ['src/**/*.{ts,tsx}', '!src/**/*.d.ts', '!src/test/**'], +}; diff --git a/package.json b/package.json index 860ff56d..7fbbd92f 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,9 @@ "build": "NODE_OPTIONS='--max-old-space-size=4096' webpack --config webpack.prod.js", "start": "sirv dist --cors --single --host --port 8080", "start:dev": "webpack serve --color --progress --config webpack.dev.js", - "test": "vitest run", - "test:watch": "vitest", - "test:coverage": "vitest run --coverage", + "test": "jest", + "test:watch": "jest --watch", + "test:coverage": "jest --coverage", "eslint": "eslint --ext .tsx,.js ./src/", "lint": "npm run eslint", "format": "prettier --check --write ./src/**/*.{tsx,ts}", @@ -25,14 +25,14 @@ }, "devDependencies": { "@eslint/js": "^9.29.0", + "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@types/react-router-dom": "^5.3.3", "@typescript-eslint/eslint-plugin": "^8.34.0", "@typescript-eslint/parser": "^8.34.0", - "@vitejs/plugin-react": "^4.3.3", - "@vitest/coverage-v8": "^4.0.10", + "@types/jest": "^29.5.14", "copy-webpack-plugin": "^13.0.0", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.2", @@ -43,7 +43,9 @@ "eslint-plugin-react-hooks": "^5.2.0", "html-webpack-plugin": "^5.6.3", "imagemin": "^9.0.0", - "jsdom": "^25.0.1", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-fixed-jsdom": "^0.0.9", "mini-css-extract-plugin": "^2.9.2", "postcss": "^8.4.49", "prettier": "^3.5.3", @@ -56,14 +58,13 @@ "style-loader": "^4.0.0", "svg-url-loader": "^8.0.0", "terser-webpack-plugin": "^5.3.14", + "ts-jest": "^29.2.5", "ts-loader": "^9.5.2", "tsconfig-paths-webpack-plugin": "^4.2.0", "tslib": "^2.8.1", "typescript": "^5.8.3", "typescript-eslint": "^8.34.0", "url-loader": "^4.1.1", - "vite": "^6.4.1", - "vitest": "^4.0.5", "webpack": "^5.97.0", "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^5.1.4", diff --git a/src/app/app.test.tsx b/src/app/app.test.tsx index 811a27ed..ac8e410e 100644 --- a/src/app/app.test.tsx +++ b/src/app/app.test.tsx @@ -2,7 +2,6 @@ import * as React from 'react'; import App from '@app/index'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { describe, expect, it, test } from 'vitest'; describe('App tests', () => { test('should render default App component', () => { diff --git a/src/test/mocks/fileMock.cjs b/src/test/mocks/fileMock.cjs new file mode 100644 index 00000000..86059f36 --- /dev/null +++ b/src/test/mocks/fileMock.cjs @@ -0,0 +1 @@ +module.exports = 'test-file-stub'; diff --git a/src/test/mocks/styleMock.cjs b/src/test/mocks/styleMock.cjs new file mode 100644 index 00000000..f053ebf7 --- /dev/null +++ b/src/test/mocks/styleMock.cjs @@ -0,0 +1 @@ +module.exports = {}; diff --git a/src/test/setup.ts b/src/test/setup.ts index 58d85159..95e73f3e 100644 --- a/src/test/setup.ts +++ b/src/test/setup.ts @@ -1,36 +1,40 @@ +import { TextEncoder, TextDecoder } from 'util'; import '@testing-library/jest-dom'; -import { vi } from 'vitest'; + +// Polyfill for jsdom (react-router etc. may use these) +global.TextEncoder = TextEncoder; +global.TextDecoder = TextDecoder as typeof global.TextDecoder; // Mock PatternFly Chatbot MessageBar to avoid monaco-editor dependency -vi.mock('@patternfly/chatbot/dist/dynamic/MessageBar', () => ({ - MessageBar: vi.fn(() => null), +jest.mock('@patternfly/chatbot/dist/dynamic/MessageBar', () => ({ + MessageBar: jest.fn(() => null), })); // Mock CSS imports Object.defineProperty(window, 'matchMedia', { writable: true, - value: vi.fn().mockImplementation(query => ({ + value: jest.fn().mockImplementation((query: string) => ({ matches: false, media: query, onchange: null, - addListener: vi.fn(), // deprecated - removeListener: vi.fn(), // deprecated - addEventListener: vi.fn(), - removeEventListener: vi.fn(), - dispatchEvent: vi.fn(), + addListener: jest.fn(), + removeListener: jest.fn(), + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + dispatchEvent: jest.fn(), })), }); // Mock ResizeObserver global.ResizeObserver = class ResizeObserver { - observe = vi.fn(); - unobserve = vi.fn(); - disconnect = vi.fn(); + observe = jest.fn(); + unobserve = jest.fn(); + disconnect = jest.fn(); }; // Mock IntersectionObserver global.IntersectionObserver = class IntersectionObserver { - observe = vi.fn(); - unobserve = vi.fn(); - disconnect = vi.fn(); + observe = jest.fn(); + unobserve = jest.fn(); + disconnect = jest.fn(); } as any; diff --git a/vitest.config.ts b/vitest.config.ts deleted file mode 100644 index 1aeadad5..00000000 --- a/vitest.config.ts +++ /dev/null @@ -1,24 +0,0 @@ -/// -import { defineConfig } from 'vitest/config'; -import react from '@vitejs/plugin-react'; -import path from 'path'; - -export default defineConfig({ - plugins: [react()], - test: { - environment: 'jsdom', - setupFiles: ['./src/test/setup.ts'], - globals: true, - css: true, - }, - resolve: { - alias: { - '@app': path.resolve(__dirname, './src/app'), - // Mock monaco-editor to avoid bundling it in tests - 'monaco-editor': path.resolve(__dirname, './src/test/mocks/monaco-editor.ts'), - }, - }, - ssr: { - noExternal: [/@patternfly\/.*/], - }, -}); From bd78c767a095787473795db85252f4ca1aa24e47 Mon Sep 17 00:00:00 2001 From: Donald Labaj Date: Wed, 4 Feb 2026 10:15:42 -0500 Subject: [PATCH 21/21] chore: updated to fix lint issue. --- src/test/setup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/setup.ts b/src/test/setup.ts index 95e73f3e..ae4d42b9 100644 --- a/src/test/setup.ts +++ b/src/test/setup.ts @@ -1,4 +1,4 @@ -import { TextEncoder, TextDecoder } from 'util'; +import { TextDecoder, TextEncoder } from 'util'; import '@testing-library/jest-dom'; // Polyfill for jsdom (react-router etc. may use these)