diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..1ad257e Binary files /dev/null and b/.DS_Store differ diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/.bundle/config @@ -0,0 +1 @@ +--- diff --git a/.cursorrules b/.cursorrules new file mode 100644 index 0000000..b9cb096 --- /dev/null +++ b/.cursorrules @@ -0,0 +1,59 @@ +You are an expert in TypeScript, React Native, Expo, and Mobile App Development. + +Code Style and Structure: + +- Write concise, type-safe TypeScript code. +- Use functional components and hooks over class components. +- Ensure components are modular, reusable, and maintainable. +- Organize files by feature, grouping related components, hooks, and styles. + +Naming Conventions: + +- Use camelCase for variable and function names (e.g., `isFetchingData`, `handleUserInput`). +- Use PascalCase for component names (e.g., `UserProfile`, `ChatScreen`). +- Directory names should be lowercase and hyphenated (e.g., `user-profile`, `chat-screen`). + +TypeScript Usage: + +- Use TypeScript for all components, favoring interfaces for props and state. +- Enable strict typing in `tsconfig.json`. +- Avoid using `any`; strive for precise types. +- Utilize `React.FC` for defining functional components with props. + +Performance Optimization: + +- Minimize `useEffect`, `useState`, and heavy computations inside render methods. +- Use `React.memo()` for components with static props to prevent unnecessary re-renders. +- Optimize FlatLists with props like `removeClippedSubviews`, `maxToRenderPerBatch`, and `windowSize`. +- Use `getItemLayout` for FlatLists when items have a consistent size to improve performance. +- Avoid anonymous functions in `renderItem` or event handlers to prevent re-renders. + +UI and Styling: + +- Use consistent styling, either through `StyleSheet.create()` or Styled Components. +- Ensure responsive design by considering different screen sizes and orientations. +- Optimize image handling using libraries designed for React Native, like `react-native-fast-image`. + +Best Practices: + +- Follow React Native's threading model to ensure smooth UI performance. +- Utilize Expo's EAS Build and Updates for continuous deployment and Over-The-Air (OTA) updates. +- Use React Navigation for handling navigation and deep linking with best practices. +- Create and use Jest to test to validate all generated components +- Write unit tests for all generated logic + +Additional Rules: + +- Use `pnpm` as the package manager. +- Use Expo's secure store for sensitive data +- Implement proper offline support +- Use `zustand` for state management +- Use `react-hook-form` for form handling +- Use `react-query` for data fetching +- Use `react-i18next` for internationalization +- Use `react-native-mmkv` for local storage +- Use `axios` for API requests +- Use `gluestack-ui` for UI +- Use `@rnmapbox/maps` for maps, mapping or vehicle navigation +- Use `lucide-react-native` for icons and use those components directly in the markup and don't use the gluestack-ui icon component +- Use ? : for conditional rendering and not && diff --git a/.easignore b/.easignore new file mode 100644 index 0000000..9133674 --- /dev/null +++ b/.easignore @@ -0,0 +1,29 @@ +node_modules/ +.expo/ +dist/ +npm-debug.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision +*.orig.* +web-build/ +yarn-error.log +/coverage +# macOS +.DS_Store +/android +/ios +/web +/apps + +# @generated expo-cli sync-2b81b286409207a5da26e14c78851eb30d8ccbdb +# The following patterns were generated by expo-cli + +expo-env.d.ts +# @end expo-cli + +# Include a file not in source control +!google-services.json +!credentials.json \ No newline at end of file diff --git a/src/app/app.component.scss b/.env.development similarity index 100% rename from src/app/app.component.scss rename to .env.development diff --git a/src/app/features/calls/pages/close-call/close-call.page.scss b/.env.production similarity index 100% rename from src/app/features/calls/pages/close-call/close-call.page.scss rename to .env.production diff --git a/src/app/features/calls/pages/edit-call/edit-call.page.scss b/.env.staging similarity index 100% rename from src/app/features/calls/pages/edit-call/edit-call.page.scss rename to .env.staging diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..85e70a7 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,10 @@ +.eslintignorenode_modules +__tests__/ +.vscode/ +android/ +coverage/ +ios/ +.expo +.expo-shared +docs/ +cli/ \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..972fe1e --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,97 @@ +const path = require('path'); + +module.exports = { + extends: ['expo', 'plugin:tailwindcss/recommended', 'prettier'], + plugins: [ + 'prettier', + 'unicorn', + '@typescript-eslint', + 'unused-imports', + 'tailwindcss', + 'simple-import-sort', + 'eslint-plugin-react-compiler', + ], + parserOptions: { + project: './tsconfig.json', + }, + rules: { + 'prettier/prettier': 'warn', + 'max-params': ['error', 10], // Limit the number of parameters in a function to use object instead + 'max-lines-per-function': ['error', 1000], + 'react/display-name': 'off', + 'react/no-inline-styles': 'off', + 'react/destructuring-assignment': 'off', // Vscode doesn't support automatically destructuring, it's a pain to add a new variable + 'react/require-default-props': 'off', // Allow non-defined react props as undefined + '@typescript-eslint/comma-dangle': 'off', // Avoid conflict rule between Eslint and Prettier + '@typescript-eslint/consistent-type-imports': [ + 'warn', + { + prefer: 'type-imports', + fixStyle: 'inline-type-imports', + disallowTypeAnnotations: true, + }, + ], // Ensure `import type` is used when it's necessary + 'import/prefer-default-export': 'off', // Named export is easier to refactor automatically + 'import/no-cycle': ['error', { maxDepth: '∞' }], + 'tailwindcss/classnames-order': [ + 'warn', + { + officialSorting: true, + }, + ], // Follow the same ordering as the official plugin `prettier-plugin-tailwindcss` + 'simple-import-sort/imports': 'error', // Import configuration for `eslint-plugin-simple-import-sort` + 'simple-import-sort/exports': 'error', // Export configuration for `eslint-plugin-simple-import-sort` + '@typescript-eslint/no-unused-vars': 'off', + 'tailwindcss/no-custom-classname': 'off', + 'unused-imports/no-unused-imports': 'error', + 'unused-imports/no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + caughtErrorsIgnorePattern: '^_', + }, + ], + }, + overrides: [ + // Configuration for translations files (i18next) + { + files: ['src/translations/*.json'], + extends: ['plugin:i18n-json/recommended'], + rules: { + 'i18n-json/valid-message-syntax': [ + 2, + { + syntax: path.resolve('./scripts/i18next-syntax-validation.js'), + }, + ], + 'i18n-json/valid-json': 2, + 'i18n-json/sorted-keys': [ + 2, + { + order: 'asc', + indentSpaces: 2, + }, + ], + 'i18n-json/identical-keys': [ + 2, + { + filePath: path.resolve('./src/translations/en.json'), + }, + ], + 'prettier/prettier': [ + 0, + { + singleQuote: true, + endOfLine: 'auto', + }, + ], + }, + }, + { + // Configuration for testing files + files: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'], + extends: ['plugin:testing-library/react'], + }, + ], +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index d0e61ac..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "root": true, - "ignorePatterns": ["projects/**/*"], - "overrides": [ - { - "files": ["*.ts"], - "parserOptions": { - "project": ["tsconfig.json", "e2e/tsconfig.json"], - "createDefaultProgram": true - }, - "extends": [ - "plugin:@angular-eslint/ng-cli-compat", - "plugin:@angular-eslint/ng-cli-compat--formatting-add-on", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": { - "@angular-eslint/component-class-suffix": [ - "error", - { - "suffixes": ["Page", "Component"] - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ], - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": "variable", - "format": ["camelCase", "PascalCase"] - }, - { - "selector": "property", - "format": ["camelCase", "PascalCase"] - } - ], - "eol-last": [ - "error", "never" - ], - "@typescript-eslint/no-inferrable-types": [ - { - "ignoreParameters": true, - "ignoreProperties": true - } - ] - } - }, - { - "files": ["*.html"], - "extends": ["plugin:@angular-eslint/template/recommended"], - "rules": {} - } - ] -} diff --git a/.expo/README.md b/.expo/README.md new file mode 100644 index 0000000..f7eb5fe --- /dev/null +++ b/.expo/README.md @@ -0,0 +1,8 @@ +> Why do I have a folder named ".expo" in my project? +The ".expo" folder is created when an Expo project is started using "expo start" command. +> What do the files contain? +- "devices.json": contains information about devices that have recently opened this project. This is used to populate the "Development sessions" list in your development builds. +- "settings.json": contains the server configuration that is used to serve the application manifest. +> Should I commit the ".expo" folder? +No, you should not share the ".expo" folder. It does not contain any information that is relevant for other developers working on the project, it is specific to your machine. +Upon project creation, the ".expo" folder is already added to your ".gitignore" file. diff --git a/.expo/app-icon-badge/foregroundImage.png b/.expo/app-icon-badge/foregroundImage.png new file mode 100644 index 0000000..808818f Binary files /dev/null and b/.expo/app-icon-badge/foregroundImage.png differ diff --git a/.expo/app-icon-badge/icon.png b/.expo/app-icon-badge/icon.png new file mode 100644 index 0000000..728f5d3 Binary files /dev/null and b/.expo/app-icon-badge/icon.png differ diff --git a/.expo/devices.json b/.expo/devices.json new file mode 100644 index 0000000..013cb45 --- /dev/null +++ b/.expo/devices.json @@ -0,0 +1,44 @@ +{ + "devices": [ + { + "installationId": "4af035d0-07a6-423e-b6bc-17e75e219cfe", + "lastUsed": 1749391119998 + }, + { + "installationId": "aa1e01fe-0cc5-418d-93e4-df49f96c1e43", + "lastUsed": 1749388195311 + }, + { + "installationId": "2964cc85-ebf5-4eb5-8de9-b46a30fa64bc", + "lastUsed": 1749385761171 + }, + { + "installationId": "6142ad22-0704-42f4-9826-1999a4b19d0a", + "lastUsed": 1749385369955 + }, + { + "installationId": "ccb3c274-d545-46a7-8b80-3d3d181c8464", + "lastUsed": 1749302782562 + }, + { + "installationId": "b63e4dc1-263c-47f2-afe6-99e9c06d5b90", + "lastUsed": 1749265905063 + }, + { + "installationId": "ef2f0ec1-1637-48ae-a465-b6044dbaf625", + "lastUsed": 1749262351089 + }, + { + "installationId": "121adcd6-201e-4de8-adbe-deceab35ee92", + "lastUsed": 1749252228522 + }, + { + "installationId": "76ef4b68-8251-4057-b4b5-e6af6a5a7bec", + "lastUsed": 1749252043224 + }, + { + "installationId": "a66b5af2-bed7-4b5d-aff0-94e99e751b90", + "lastUsed": 1749220817812 + } + ] +} diff --git a/.expo/prebuild/cached-packages.json b/.expo/prebuild/cached-packages.json new file mode 100644 index 0000000..3408922 --- /dev/null +++ b/.expo/prebuild/cached-packages.json @@ -0,0 +1,4 @@ +{ + "dependencies": "d95d2be82e7d04cbc28f2ebeb88eefdb0f26b224", + "devDependencies": "d317c6777efc0d756da584b230069efaf556633b" +} diff --git a/.expo/types/router.d.ts b/.expo/types/router.d.ts new file mode 100644 index 0000000..f59352d --- /dev/null +++ b/.expo/types/router.d.ts @@ -0,0 +1,14 @@ +/* eslint-disable */ +import * as Router from 'expo-router'; + +export * from 'expo-router'; + +declare module 'expo-router' { + export namespace ExpoRouter { + export interface __routes { + hrefInputParams: { pathname: Router.RelativePathString, params?: Router.UnknownInputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownInputParams } | { pathname: `/onboarding`; params?: Router.UnknownInputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}/calls` | `/calls`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}/contacts` | `/contacts`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}` | `/`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}/notes` | `/notes`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}/protocols` | `/protocols`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}/settings` | `/settings`; params?: Router.UnknownInputParams; } | { pathname: `/call/new`; params?: Router.UnknownInputParams; } | { pathname: `/login`; params?: Router.UnknownInputParams; } | { pathname: `/login/login-form`; params?: Router.UnknownInputParams; } | { pathname: `/[...messing]`, params: Router.UnknownInputParams & { messing: (string | number)[]; } } | { pathname: `/call/[id]`, params: Router.UnknownInputParams & { id: string | number; } }; + hrefOutputParams: { pathname: Router.RelativePathString, params?: Router.UnknownOutputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownOutputParams } | { pathname: `/onboarding`; params?: Router.UnknownOutputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(app)'}/calls` | `/calls`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(app)'}/contacts` | `/contacts`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(app)'}` | `/`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(app)'}/notes` | `/notes`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(app)'}/protocols` | `/protocols`; params?: Router.UnknownOutputParams; } | { pathname: `${'/(app)'}/settings` | `/settings`; params?: Router.UnknownOutputParams; } | { pathname: `/call/new`; params?: Router.UnknownOutputParams; } | { pathname: `/login`; params?: Router.UnknownOutputParams; } | { pathname: `/login/login-form`; params?: Router.UnknownOutputParams; } | { pathname: `/[...messing]`, params: Router.UnknownOutputParams & { messing: string[]; } } | { pathname: `/call/[id]`, params: Router.UnknownOutputParams & { id: string; } }; + href: Router.RelativePathString | Router.ExternalPathString | `/onboarding${`?${string}` | `#${string}` | ''}` | `/_sitemap${`?${string}` | `#${string}` | ''}` | `${'/(app)'}/calls${`?${string}` | `#${string}` | ''}` | `/calls${`?${string}` | `#${string}` | ''}` | `${'/(app)'}/contacts${`?${string}` | `#${string}` | ''}` | `/contacts${`?${string}` | `#${string}` | ''}` | `${'/(app)'}${`?${string}` | `#${string}` | ''}` | `/${`?${string}` | `#${string}` | ''}` | `${'/(app)'}/notes${`?${string}` | `#${string}` | ''}` | `/notes${`?${string}` | `#${string}` | ''}` | `${'/(app)'}/protocols${`?${string}` | `#${string}` | ''}` | `/protocols${`?${string}` | `#${string}` | ''}` | `${'/(app)'}/settings${`?${string}` | `#${string}` | ''}` | `/settings${`?${string}` | `#${string}` | ''}` | `/call/new${`?${string}` | `#${string}` | ''}` | `/login${`?${string}` | `#${string}` | ''}` | `/login/login-form${`?${string}` | `#${string}` | ''}` | { pathname: Router.RelativePathString, params?: Router.UnknownInputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownInputParams } | { pathname: `/onboarding`; params?: Router.UnknownInputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}/calls` | `/calls`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}/contacts` | `/contacts`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}` | `/`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}/notes` | `/notes`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}/protocols` | `/protocols`; params?: Router.UnknownInputParams; } | { pathname: `${'/(app)'}/settings` | `/settings`; params?: Router.UnknownInputParams; } | { pathname: `/call/new`; params?: Router.UnknownInputParams; } | { pathname: `/login`; params?: Router.UnknownInputParams; } | { pathname: `/login/login-form`; params?: Router.UnknownInputParams; } | `/${string}` | `/call/${Router.SingleRoutePart}` | { pathname: `/[...messing]`, params: Router.UnknownInputParams & { messing: (string | number)[]; } } | { pathname: `/call/[id]`, params: Router.UnknownInputParams & { id: string | number; } }; + } + } +} diff --git a/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_108.png b/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_108.png new file mode 100644 index 0000000..285bf02 Binary files /dev/null and b/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_108.png differ diff --git a/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_162.png b/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_162.png new file mode 100644 index 0000000..5bc2ef8 Binary files /dev/null and b/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_162.png differ diff --git a/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_216.png b/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_216.png new file mode 100644 index 0000000..1f4e8af Binary files /dev/null and b/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_216.png differ diff --git a/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_324.png b/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_324.png new file mode 100644 index 0000000..8bffee6 Binary files /dev/null and b/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_324.png differ diff --git a/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_432.png b/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_432.png new file mode 100644 index 0000000..75d66db Binary files /dev/null and b/.expo/web/cache/production/images/android-adaptive-foreground/android-adaptive-foreground-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-transparent/icon_432.png differ diff --git a/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_144.png b/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_144.png new file mode 100644 index 0000000..9400945 Binary files /dev/null and b/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_144.png differ diff --git a/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_192.png b/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_192.png new file mode 100644 index 0000000..eaf5b51 Binary files /dev/null and b/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_192.png differ diff --git a/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_48.png b/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_48.png new file mode 100644 index 0000000..d33cfba Binary files /dev/null and b/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_48.png differ diff --git a/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_72.png b/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_72.png new file mode 100644 index 0000000..e81caeb Binary files /dev/null and b/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_72.png differ diff --git a/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_96.png b/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_96.png new file mode 100644 index 0000000..39eda0e Binary files /dev/null and b/.expo/web/cache/production/images/android-standard-circle/android-standard-circle-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_96.png differ diff --git a/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_144.png b/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_144.png new file mode 100644 index 0000000..5f29400 Binary files /dev/null and b/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_144.png differ diff --git a/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_192.png b/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_192.png new file mode 100644 index 0000000..1b8bcff Binary files /dev/null and b/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_192.png differ diff --git a/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_48.png b/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_48.png new file mode 100644 index 0000000..b42d9a0 Binary files /dev/null and b/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_48.png differ diff --git a/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_72.png b/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_72.png new file mode 100644 index 0000000..7e191cd Binary files /dev/null and b/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_72.png differ diff --git a/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_96.png b/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_96.png new file mode 100644 index 0000000..244051c Binary files /dev/null and b/.expo/web/cache/production/images/android-standard-square/android-standard-square-33a4febbfb6afd0e5627d7206503071107394b425450f0d655f4dce63b7f1bd3-cover-#2E3C4B/icon_96.png differ diff --git a/.github/workflows/react-native-cicd.yml b/.github/workflows/react-native-cicd.yml new file mode 100644 index 0000000..7299e64 --- /dev/null +++ b/.github/workflows/react-native-cicd.yml @@ -0,0 +1,245 @@ +name: React Native CI/CD + +on: + push: + branches: [main, master] + paths-ignore: + - "**.md" + - "LICENSE" + - "docs/**" + pull_request: + branches: [main, master] + workflow_dispatch: + inputs: + buildType: + type: choice + description: "Build type to run" + options: + - dev + - prod-apk + - prod-aab + - ios-dev + - ios-prod + - all + platform: + type: choice + description: "Platform to build" + default: "all" + options: + - android + - ios + - all + +env: + EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + EXPO_APPLE_ID: ${{ secrets.EXPO_APPLE_ID }} + EXPO_APPLE_PASSWORD: ${{ secrets.EXPO_APPLE_PASSWORD }} + EXPO_TEAM_ID: ${{ secrets.EXPO_TEAM_ID }} + NODE_OPTIONS: --openssl-legacy-provider + +jobs: + check-skip: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, '[skip ci]')" + steps: + - name: Skip CI check + run: echo "Proceeding with workflow" + + test: + needs: check-skip + runs-on: ubuntu-latest + steps: + - name: 🏗 Checkout repository + uses: actions/checkout@v4 + + - name: 🏗 Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "yarn" + + - name: 📦 Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + + - name: 📦 Setup yarn cache + uses: actions/cache@v3 + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: 📦 Install dependencies + run: yarn install + + - name: 🧪 Run TypeScript check + run: yarn tsc + + - name: 🧹 Run ESLint + run: yarn lint + + - name: 🎨 Run Prettier check + run: yarn format:check + + - name: 🧪 Run Jest Tests + run: yarn test + + - name: 🧪 Run React Native Testing Library Tests + run: yarn test:rntl + + build-and-deploy: + needs: test + if: (github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')) || github.event_name == 'workflow_dispatch' + strategy: + matrix: + platform: [android] + include: + - platform: ios + runs-on: macos-latest + runs-on: ${{ matrix.platform == 'ios' && 'macos-latest' || 'ubuntu-latest' }} + steps: + - name: 🏗 Checkout repository + uses: actions/checkout@v4 + + - name: 🏗 Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "yarn" + + - name: 📦 Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + + - name: 📦 Setup yarn cache + uses: actions/cache@v3 + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: 📦 Install dependencies + run: | + yarn install + yarn global add eas-cli@latest + + - name: 📱 Setup EAS build cache + uses: actions/cache@v3 + with: + path: ~/.eas-build-local + key: ${{ runner.os }}-eas-build-local-${{ hashFiles('**/package.json') }} + restore-keys: | + ${{ runner.os }}-eas-build-local- + + - name: 🔄 Verify EAS CLI installation + run: | + echo "EAS CLI version:" + eas --version + + - name: 📋 Fix package.json main entry + run: | + # Check if jq is installed, if not install it + if ! command -v jq &> /dev/null; then + echo "Installing jq..." + sudo apt-get update && sudo apt-get install -y jq + fi + + # Fix the main entry in package.json + if [ -f ./package.json ]; then + # Create a backup + cp package.json package.json.bak + # Update the package.json + jq '.main = "node_modules/expo/AppEntry.js"' package.json > package.json.tmp && mv package.json.tmp package.json + echo "Updated package.json main entry" + cat package.json | grep "main" + else + echo "package.json not found" + exit 1 + fi + + - name: 📋 Update metro.config.js for SVG support + run: | + if [ -f ./metro.config.js ]; then + echo "Creating backup of metro.config.js" + cp ./metro.config.js ./metro.config.js.backup + echo "Updating metro.config.js to CommonJS format" + cat > ./metro.config.js << 'EOFMARKER' + /* eslint-disable @typescript-eslint/no-var-requires */ + const { getDefaultConfig } = require('expo/metro-config'); + + const config = getDefaultConfig(__dirname); + + const { transformer, resolver } = config; + + config.transformer = { + ...transformer, + babelTransformerPath: require.resolve('react-native-svg-transformer/expo'), + }; + + config.resolver = { + ...resolver, + assetExts: resolver.assetExts.filter(ext => ext !== 'svg'), + sourceExts: [...resolver.sourceExts, 'svg'], + }; + + module.exports = config; + EOFMARKER + echo "metro.config.js updated to CommonJS format" + else + echo "metro.config.js not found" + fi + + - name: 📱 Build Development APK + if: github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'dev' || github.event_name == 'push' && (matrix.platform == 'android' || github.event.inputs.platform == 'all' || github.event.inputs.platform == 'android') + run: | + # Build with increased memory limit + export NODE_OPTIONS="--openssl-legacy-provider --max_old_space_size=4096" + eas build --platform android --profile development --local --non-interactive --output=./app-dev.apk + env: + NODE_ENV: development + + - name: 📱 Build Production APK + if: github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'prod-apk' || github.event_name == 'push' && (matrix.platform == 'android' || github.event.inputs.platform == 'all' || github.event.inputs.platform == 'android') + run: | + export NODE_OPTIONS="--openssl-legacy-provider --max_old_space_size=4096" + eas build --platform android --profile production-apk --local --non-interactive --output=./app-prod.apk + env: + NODE_ENV: production + + - name: 📱 Build Production AAB + if: github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'prod-aab' || github.event_name == 'push' && (matrix.platform == 'android' || github.event.inputs.platform == 'all' || github.event.inputs.platform == 'android') + run: | + export NODE_OPTIONS="--openssl-legacy-provider --max_old_space_size=4096" + eas build --platform android --profile production --local --non-interactive --output=./app-prod.aab + env: + NODE_ENV: production + + - name: 📱 Build iOS Development + if: (github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'ios-dev') && (matrix.platform == 'ios' || github.event.inputs.platform == 'all' || github.event.inputs.platform == 'ios') + run: | + export NODE_OPTIONS="--openssl-legacy-provider --max_old_space_size=4096" + eas build --platform ios --profile development --local --non-interactive --output=./app-ios-dev.app + env: + NODE_ENV: development + + - name: 📱 Build iOS Production + if: (github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'ios-prod') && (matrix.platform == 'ios' || github.event.inputs.platform == 'all' || github.event.inputs.platform == 'ios') + run: | + export NODE_OPTIONS="--openssl-legacy-provider --max_old_space_size=4096" + eas build --platform ios --profile production --local --non-interactive --output=./app-ios-prod.ipa + env: + NODE_ENV: production + + - name: 📦 Upload build artifacts to GitHub + uses: actions/upload-artifact@v4 + with: + name: app-builds + path: | + ./app-dev.apk + ./app-prod.apk + ./app-prod.aab + ./app-ios-dev.app + ./app-ios-prod.ipa + retention-days: 7 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 6777308..99b357f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,34 +1,33 @@ -/.angular/cache -# Specifies intentionally untracked files to ignore when using Git -# http://git-scm.com/docs/gitignore - -*~ -*.sw[mnpcod] -.tmp -*.tmp -*.tmp.* -*.sublime-project -*.sublime-workspace +node_modules/ +.expo/ +dist/ +npm-debug.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision +*.orig.* +web-build/ +yarn-error.log +/coverage +# macOS .DS_Store -Thumbs.db -UserInterfaceState.xcuserstate -$RECYCLE.BIN/ +/android +/ios +/web +/apps +/fastlane +/apps +/build +/automatic-build +google-services.json +credentials.json +Gemfile.lock +Gemfile -*.log -log.txt -npm-debug.log* +# @generated expo-cli sync-2b81b286409207a5da26e14c78851eb30d8ccbdb +# The following patterns were generated by expo-cli -/.idea -/.ionic -/.sass-cache -/.sourcemaps -/.versions -/.vscode -/coverage -/dist -/node_modules -/platforms -/plugins -/www -android/google-services.json -android/app/google-services.json +expo-env.d.ts +# @end expo-cli \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..d081044 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +node-linker=hoisted +auto-install-peers=true \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..06828fc --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,9 @@ +/** @type {import('prettier').Config} */ +const config = { + singleQuote: true, + endOfLine: 'auto', + trailingComma: 'es5', + printWidth: 220, + }; + + module.exports = config; \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..15d676f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,45 @@ +{ + "editor.tabSize": 2, + "editor.detectIndentation": false, + "search.exclude": { + "yarn.lock": true + }, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "typescript.tsdk": "node_modules/typescript/lib", + "eslint.format.enable": true, + "[javascript][typescript][typescriptreact]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "dbaeumer.vscode-eslint", + "editor.codeActionsOnSave": [ + "source.addMissingImports", + "source.fixAll.eslint" + ] + }, + "[json][jsonc]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[astro]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "astro-build.astro-vscode" + }, + "cSpell.words": [ + "Flashlist", + "Gluestack", + "Lato", + "Resgrid" + ], + "i18n-ally.localesPaths": ["src/translations/"], + "i18n-ally.keystyle": "nested", + "i18n-ally.disabled": false, // make sure to disable i18n-ally in your global setting and only enable it for such projects + "tailwindCSS.experimental.classRegex": [ + ["tv\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"] + ], + "[typescriptreact]": { + "editor.defaultFormatter": "vscode.typescript-language-features" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + } +} diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..9b9464e --- /dev/null +++ b/Gemfile @@ -0,0 +1,9 @@ +source "https://rubygems.org" + +gem "cocoapods" +gem "fastlane" + +plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') +eval_gemfile(plugins_path) if File.exist?(plugins_path) + +gem "abbrev", "~> 0.1.2" \ No newline at end of file diff --git a/__mocks__/@gorhom/bottom-sheet.ts b/__mocks__/@gorhom/bottom-sheet.ts new file mode 100644 index 0000000..34f938a --- /dev/null +++ b/__mocks__/@gorhom/bottom-sheet.ts @@ -0,0 +1 @@ +module.exports = require('@gorhom/bottom-sheet/mock'); diff --git a/__mocks__/moti.ts b/__mocks__/moti.ts new file mode 100644 index 0000000..903dcba --- /dev/null +++ b/__mocks__/moti.ts @@ -0,0 +1,10 @@ +import { View } from 'react-native'; + +const AnimatePresence = View; +const MotiView = View; + +module.exports = { + AnimatePresence, + View, + MotiView, +}; diff --git a/__mocks__/react-native-gesture-handler.ts b/__mocks__/react-native-gesture-handler.ts new file mode 100644 index 0000000..1152f1d --- /dev/null +++ b/__mocks__/react-native-gesture-handler.ts @@ -0,0 +1 @@ +module.exports = require('react-native-gesture-handler/src/mocks.ts'); diff --git a/__mocks__/react-native-keyboard-controller.ts b/__mocks__/react-native-keyboard-controller.ts new file mode 100644 index 0000000..d8e8c7a --- /dev/null +++ b/__mocks__/react-native-keyboard-controller.ts @@ -0,0 +1 @@ +module.exports = require('react-native-keyboard-controller/jest'); diff --git a/android/.gitignore b/android/.gitignore deleted file mode 100644 index 63c86fe..0000000 --- a/android/.gitignore +++ /dev/null @@ -1,96 +0,0 @@ -# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore - -# Built application files -*.apk -*.aar -*.ap_ -*.aab - -# Files for the ART/Dalvik VM -*.dex - -# Java class files -*.class - -# Generated files -bin/ -gen/ -out/ -# Uncomment the following line in case you need and you don't have the release build type files in your app -# release/ - -# Gradle files -.gradle/ -build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Proguard folder generated by Eclipse -proguard/ - -# Log Files -*.log - -# Android Studio Navigation editor temp files -.navigation/ - -# Android Studio captures folder -captures/ - -# IntelliJ -*.iml -.idea/workspace.xml -.idea/tasks.xml -.idea/gradle.xml -.idea/assetWizardSettings.xml -.idea/dictionaries -.idea/libraries -# Android Studio 3 in .gitignore file. -.idea/caches -.idea/modules.xml -# Comment next line if keeping position of elements in Navigation Editor is relevant for you -.idea/navEditor.xml - -# Keystore files -# Uncomment the following lines if you do not want to check your keystore files in. -#*.jks -#*.keystore - -# External native build folder generated in Android Studio 2.2 and later -.externalNativeBuild -.cxx/ - -# Google Services (e.g. APIs or Firebase) -# google-services.json - -# Freeline -freeline.py -freeline/ -freeline_project_description.json - -# fastlane -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots -fastlane/test_output -fastlane/readme.md - -# Version control -vcs.xml - -# lint -lint/intermediates/ -lint/generated/ -lint/outputs/ -lint/tmp/ -# lint/reports/ - -# Android Profiling -*.hprof - -# Cordova plugins for Capacitor -capacitor-cordova-android-plugins - -# Copied web assets -app/src/main/assets/public diff --git a/android/.idea/.gitignore b/android/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/android/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/android/.idea/compiler.xml b/android/.idea/compiler.xml deleted file mode 100644 index b589d56..0000000 --- a/android/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/.idea/deploymentTargetSelector.xml b/android/.idea/deploymentTargetSelector.xml deleted file mode 100644 index b268ef3..0000000 --- a/android/.idea/deploymentTargetSelector.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/jarRepositories.xml b/android/.idea/jarRepositories.xml deleted file mode 100644 index 4dcbce1..0000000 --- a/android/.idea/jarRepositories.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/kotlinc.xml b/android/.idea/kotlinc.xml deleted file mode 100644 index 69e8615..0000000 --- a/android/.idea/kotlinc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/.idea/migrations.xml b/android/.idea/migrations.xml deleted file mode 100644 index f8051a6..0000000 --- a/android/.idea/migrations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/.idea/misc.xml b/android/.idea/misc.xml deleted file mode 100644 index f086118..0000000 --- a/android/.idea/misc.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/other.xml b/android/.idea/other.xml deleted file mode 100644 index a76f118..0000000 --- a/android/.idea/other.xml +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/app/.gitignore b/android/app/.gitignore deleted file mode 100644 index 043df80..0000000 --- a/android/app/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build/* -!/build/.npmkeep diff --git a/android/app/build.gradle b/android/app/build.gradle deleted file mode 100644 index ff66d41..0000000 --- a/android/app/build.gradle +++ /dev/null @@ -1,56 +0,0 @@ -apply plugin: 'com.android.application' - -android { - namespace "com.resgrid.unit" - compileSdkVersion rootProject.ext.compileSdkVersion - defaultConfig { - applicationId "com.resgrid.unit" - versionCode 99 - versionName "1.99" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - aaptOptions { - // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. - // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61 - ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~' - } - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } -} - -repositories { - flatDir{ - dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs' - } -} - -dependencies { - implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" - implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion" - implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" - implementation project(':capacitor-android') - testImplementation "junit:junit:$junitVersion" - androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" - androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" - implementation project(':capacitor-cordova-android-plugins') - implementation "androidx.media:media:1.4.2" - implementation "androidx.annotation:annotation:1.2.0" -} - -apply from: 'capacitor.build.gradle' - -try { - def servicesJSON = file('google-services.json') - if (servicesJSON.text) { - apply plugin: 'com.google.gms.google-services' - } -} catch(Exception e) { - logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work") -} \ No newline at end of file diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle deleted file mode 100644 index c0b4f90..0000000 --- a/android/app/capacitor.build.gradle +++ /dev/null @@ -1,38 +0,0 @@ -// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN - -android { - compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - } -} - -apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" -dependencies { - implementation project(':capacitor-community-background-geolocation') - implementation project(':capacitor-community-bluetooth-le') - implementation project(':capacitor-community-file-opener') - implementation project(':capacitor-community-keep-awake') - implementation project(':capacitor-community-sqlite') - implementation project(':capacitor-app') - implementation project(':capacitor-camera') - implementation project(':capacitor-device') - implementation project(':capacitor-filesystem') - implementation project(':capacitor-geolocation') - implementation project(':capacitor-haptics') - implementation project(':capacitor-keyboard') - implementation project(':capacitor-network') - implementation project(':capacitor-preferences') - implementation project(':capacitor-splash-screen') - implementation project(':capacitor-status-bar') - implementation project(':capawesome-capacitor-badge') - implementation project(':resgrid-local-notifications') - implementation project(':resgrid-push-notifications') - implementation project(':capacitor-plugin-resgrid') - -} - - -if (hasProperty('postBuildExtras')) { - postBuildExtras() -} diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro deleted file mode 100644 index f1b4245..0000000 --- a/android/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java deleted file mode 100644 index f2c2217..0000000 --- a/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.getcapacitor.myapp; - -import static org.junit.Assert.*; - -import android.content.Context; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.platform.app.InstrumentationRegistry; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - - @Test - public void useAppContext() throws Exception { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.getcapacitor.app", appContext.getPackageName()); - } -} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 99e9c0b..0000000 --- a/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/assets/capacitor.config.json b/android/app/src/main/assets/capacitor.config.json deleted file mode 100644 index 583b41d..0000000 --- a/android/app/src/main/assets/capacitor.config.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "appId": "com.resgrid.unit", - "appName": "Resgrid Unit", - "webDir": "www", - "bundledWebRuntime": false, - "android": { - "allowMixedContent": true, - "useLegacyBridge": true - }, - "server": { - "allowNavigation": [] - }, - "plugins": { - "PushNotifications": { - "presentationOptions": [ - "badge", - "sound", - "alert" - ] - }, - "SplashScreen": { - "launchAutoHide": false - }, - "Badge": { - "persist": false, - "autoClear": true - }, - "CapacitorHttp": { - "enabled": true - } - } -} diff --git a/android/app/src/main/assets/capacitor.plugins.json b/android/app/src/main/assets/capacitor.plugins.json deleted file mode 100644 index b0534ac..0000000 --- a/android/app/src/main/assets/capacitor.plugins.json +++ /dev/null @@ -1,82 +0,0 @@ -[ - { - "pkg": "@capacitor-community/background-geolocation", - "classpath": "com.equimaps.capacitor_background_geolocation.BackgroundGeolocation" - }, - { - "pkg": "@capacitor-community/bluetooth-le", - "classpath": "com.capacitorjs.community.plugins.bluetoothle.BluetoothLe" - }, - { - "pkg": "@capacitor-community/file-opener", - "classpath": "com.ryltsov.alex.plugins.file.opener.FileOpenerPlugin" - }, - { - "pkg": "@capacitor-community/keep-awake", - "classpath": "com.getcapacitor.community.keepawake.KeepAwakePlugin" - }, - { - "pkg": "@capacitor-community/sqlite", - "classpath": "com.getcapacitor.community.database.sqlite.CapacitorSQLitePlugin" - }, - { - "pkg": "@capacitor/app", - "classpath": "com.capacitorjs.plugins.app.AppPlugin" - }, - { - "pkg": "@capacitor/camera", - "classpath": "com.capacitorjs.plugins.camera.CameraPlugin" - }, - { - "pkg": "@capacitor/device", - "classpath": "com.capacitorjs.plugins.device.DevicePlugin" - }, - { - "pkg": "@capacitor/filesystem", - "classpath": "com.capacitorjs.plugins.filesystem.FilesystemPlugin" - }, - { - "pkg": "@capacitor/geolocation", - "classpath": "com.capacitorjs.plugins.geolocation.GeolocationPlugin" - }, - { - "pkg": "@capacitor/haptics", - "classpath": "com.capacitorjs.plugins.haptics.HapticsPlugin" - }, - { - "pkg": "@capacitor/keyboard", - "classpath": "com.capacitorjs.plugins.keyboard.KeyboardPlugin" - }, - { - "pkg": "@capacitor/network", - "classpath": "com.capacitorjs.plugins.network.NetworkPlugin" - }, - { - "pkg": "@capacitor/preferences", - "classpath": "com.capacitorjs.plugins.preferences.PreferencesPlugin" - }, - { - "pkg": "@capacitor/splash-screen", - "classpath": "com.capacitorjs.plugins.splashscreen.SplashScreenPlugin" - }, - { - "pkg": "@capacitor/status-bar", - "classpath": "com.capacitorjs.plugins.statusbar.StatusBarPlugin" - }, - { - "pkg": "@capawesome/capacitor-badge", - "classpath": "io.capawesome.capacitorjs.plugins.badge.BadgePlugin" - }, - { - "pkg": "@resgrid/local-notifications", - "classpath": "com.capacitorjs.plugins.localnotifications.LocalNotificationsPlugin" - }, - { - "pkg": "@resgrid/push-notifications", - "classpath": "com.capacitorjs.plugins.pushnotifications.PushNotificationsPlugin" - }, - { - "pkg": "capacitor-plugin-resgrid", - "classpath": "com.resgrid.plugins.resgrid.ResgridPlugin" - } -] diff --git a/android/app/src/main/ic_launcher-playstore.png b/android/app/src/main/ic_launcher-playstore.png deleted file mode 100644 index 3de7de8..0000000 Binary files a/android/app/src/main/ic_launcher-playstore.png and /dev/null differ diff --git a/android/app/src/main/java/com/resgrid/unit/MainActivity.java b/android/app/src/main/java/com/resgrid/unit/MainActivity.java deleted file mode 100644 index 63197fa..0000000 --- a/android/app/src/main/java/com/resgrid/unit/MainActivity.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.resgrid.unit; - -import android.os.Bundle; - -import com.getcapacitor.BridgeActivity; -import com.getcapacitor.Plugin; - -public class MainActivity extends BridgeActivity { - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - } diff --git a/android/app/src/main/res/drawable-land-hdpi/splash.png b/android/app/src/main/res/drawable-land-hdpi/splash.png deleted file mode 100644 index fa3eda6..0000000 Binary files a/android/app/src/main/res/drawable-land-hdpi/splash.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-land-mdpi/splash.png b/android/app/src/main/res/drawable-land-mdpi/splash.png deleted file mode 100644 index f248341..0000000 Binary files a/android/app/src/main/res/drawable-land-mdpi/splash.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-land-xhdpi/splash.png b/android/app/src/main/res/drawable-land-xhdpi/splash.png deleted file mode 100644 index 1ea7804..0000000 Binary files a/android/app/src/main/res/drawable-land-xhdpi/splash.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/android/app/src/main/res/drawable-land-xxhdpi/splash.png deleted file mode 100644 index eaeaad7..0000000 Binary files a/android/app/src/main/res/drawable-land-xxhdpi/splash.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/android/app/src/main/res/drawable-land-xxxhdpi/splash.png deleted file mode 100644 index 563d945..0000000 Binary files a/android/app/src/main/res/drawable-land-xxxhdpi/splash.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-port-hdpi/splash.png b/android/app/src/main/res/drawable-port-hdpi/splash.png deleted file mode 100644 index ca246cf..0000000 Binary files a/android/app/src/main/res/drawable-port-hdpi/splash.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-port-mdpi/splash.png b/android/app/src/main/res/drawable-port-mdpi/splash.png deleted file mode 100644 index 8624746..0000000 Binary files a/android/app/src/main/res/drawable-port-mdpi/splash.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-port-xhdpi/splash.png b/android/app/src/main/res/drawable-port-xhdpi/splash.png deleted file mode 100644 index 95892a2..0000000 Binary files a/android/app/src/main/res/drawable-port-xhdpi/splash.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/android/app/src/main/res/drawable-port-xxhdpi/splash.png deleted file mode 100644 index 801cc81..0000000 Binary files a/android/app/src/main/res/drawable-port-xxhdpi/splash.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/android/app/src/main/res/drawable-port-xxxhdpi/splash.png deleted file mode 100644 index 5171aa2..0000000 Binary files a/android/app/src/main/res/drawable-port-xxxhdpi/splash.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 7a68568..0000000 --- a/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/drawable/ic_launcher_background.xml b/android/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index ca3826a..0000000 --- a/android/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/drawable/splash.png b/android/app/src/main/res/drawable/splash.png deleted file mode 100644 index f248341..0000000 Binary files a/android/app/src/main/res/drawable/splash.png and /dev/null differ diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index b5ad138..0000000 --- a/android/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index bbd3e02..0000000 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index bbd3e02..0000000 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index 5a32e65..0000000 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png deleted file mode 100644 index 980dedc..0000000 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 8b219b5..0000000 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 1577170..0000000 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/android/app/src/main/res/raw/c16.mp3 b/android/app/src/main/res/raw/c16.mp3 deleted file mode 100644 index 0fdfb23..0000000 Binary files a/android/app/src/main/res/raw/c16.mp3 and /dev/null differ diff --git a/android/app/src/main/res/raw/c17.mp3 b/android/app/src/main/res/raw/c17.mp3 deleted file mode 100644 index bad5f0f..0000000 Binary files a/android/app/src/main/res/raw/c17.mp3 and /dev/null differ diff --git a/android/app/src/main/res/raw/c19.mp3 b/android/app/src/main/res/raw/c19.mp3 deleted file mode 100644 index 5422069..0000000 Binary files a/android/app/src/main/res/raw/c19.mp3 and /dev/null differ diff --git a/android/app/src/main/res/raw/c24.mp3 b/android/app/src/main/res/raw/c24.mp3 deleted file mode 100644 index 99da371..0000000 Binary files a/android/app/src/main/res/raw/c24.mp3 and /dev/null differ diff --git a/android/app/src/main/res/raw/c6.mp3 b/android/app/src/main/res/raw/c6.mp3 deleted file mode 100644 index 40e4010..0000000 Binary files a/android/app/src/main/res/raw/c6.mp3 and /dev/null differ diff --git a/android/app/src/main/res/raw/c7.mp3 b/android/app/src/main/res/raw/c7.mp3 deleted file mode 100644 index ad49dc4..0000000 Binary files a/android/app/src/main/res/raw/c7.mp3 and /dev/null differ diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml deleted file mode 100644 index ba5c97b..0000000 --- a/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - Resgrid Unit - Resgrid Unit - com.resgrid.unit - com.resgrid.unit - - Resgrid Unit - - - mipmap/ic_launcher - - diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml deleted file mode 100644 index be874e54..0000000 --- a/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/xml/config.xml b/android/app/src/main/res/xml/config.xml deleted file mode 100644 index 1b1b0e0..0000000 --- a/android/app/src/main/res/xml/config.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/xml/file_paths.xml b/android/app/src/main/res/xml/file_paths.xml deleted file mode 100644 index bd0c4d8..0000000 --- a/android/app/src/main/res/xml/file_paths.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java deleted file mode 100644 index 0297327..0000000 --- a/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.getcapacitor.myapp; - -import static org.junit.Assert.*; - -import org.junit.Test; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - - @Test - public void addition_isCorrect() throws Exception { - assertEquals(4, 2 + 2); - } -} diff --git a/android/build.gradle b/android/build.gradle deleted file mode 100644 index 3b3d769..0000000 --- a/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - - repositories { - google() - mavenCentral() - maven { url "https://jitpack.io" } - } - dependencies { - classpath 'com.android.tools.build:gradle:8.2.1' - classpath 'com.google.gms:google-services:4.4.0' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -apply from: "variables.gradle" - -allprojects { - repositories { - google() - mavenCentral() - maven { url "https://jitpack.io" } - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle deleted file mode 100644 index 4d2376b..0000000 --- a/android/capacitor.settings.gradle +++ /dev/null @@ -1,63 +0,0 @@ -// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN -include ':capacitor-android' -project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') - -include ':capacitor-community-background-geolocation' -project(':capacitor-community-background-geolocation').projectDir = new File('../node_modules/@capacitor-community/background-geolocation/android') - -include ':capacitor-community-bluetooth-le' -project(':capacitor-community-bluetooth-le').projectDir = new File('../node_modules/@capacitor-community/bluetooth-le/android') - -include ':capacitor-community-file-opener' -project(':capacitor-community-file-opener').projectDir = new File('../node_modules/@capacitor-community/file-opener/android') - -include ':capacitor-community-keep-awake' -project(':capacitor-community-keep-awake').projectDir = new File('../node_modules/@capacitor-community/keep-awake/android') - -include ':capacitor-community-sqlite' -project(':capacitor-community-sqlite').projectDir = new File('../node_modules/@capacitor-community/sqlite/android') - -include ':capacitor-app' -project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/android') - -include ':capacitor-camera' -project(':capacitor-camera').projectDir = new File('../node_modules/@capacitor/camera/android') - -include ':capacitor-device' -project(':capacitor-device').projectDir = new File('../node_modules/@capacitor/device/android') - -include ':capacitor-filesystem' -project(':capacitor-filesystem').projectDir = new File('../node_modules/@capacitor/filesystem/android') - -include ':capacitor-geolocation' -project(':capacitor-geolocation').projectDir = new File('../node_modules/@capacitor/geolocation/android') - -include ':capacitor-haptics' -project(':capacitor-haptics').projectDir = new File('../node_modules/@capacitor/haptics/android') - -include ':capacitor-keyboard' -project(':capacitor-keyboard').projectDir = new File('../node_modules/@capacitor/keyboard/android') - -include ':capacitor-network' -project(':capacitor-network').projectDir = new File('../node_modules/@capacitor/network/android') - -include ':capacitor-preferences' -project(':capacitor-preferences').projectDir = new File('../node_modules/@capacitor/preferences/android') - -include ':capacitor-splash-screen' -project(':capacitor-splash-screen').projectDir = new File('../node_modules/@capacitor/splash-screen/android') - -include ':capacitor-status-bar' -project(':capacitor-status-bar').projectDir = new File('../node_modules/@capacitor/status-bar/android') - -include ':capawesome-capacitor-badge' -project(':capawesome-capacitor-badge').projectDir = new File('../node_modules/@capawesome/capacitor-badge/android') - -include ':resgrid-local-notifications' -project(':resgrid-local-notifications').projectDir = new File('../node_modules/@resgrid/local-notifications/android') - -include ':resgrid-push-notifications' -project(':resgrid-push-notifications').projectDir = new File('../node_modules/@resgrid/push-notifications/android') - -include ':capacitor-plugin-resgrid' -project(':capacitor-plugin-resgrid').projectDir = new File('../node_modules/capacitor-plugin-resgrid/android') diff --git a/android/gradle.properties b/android/gradle.properties deleted file mode 100644 index 92710f3..0000000 --- a/android/gradle.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true - -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true - diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 41d9927..0000000 Binary files a/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 1e95a8e..0000000 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Sun Oct 06 20:32:38 PDT 2024 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-all.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew deleted file mode 100644 index 1b6c787..0000000 --- a/android/gradlew +++ /dev/null @@ -1,234 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat deleted file mode 100644 index 107acd3..0000000 --- a/android/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/android/settings.gradle b/android/settings.gradle deleted file mode 100644 index 3b4431d..0000000 --- a/android/settings.gradle +++ /dev/null @@ -1,5 +0,0 @@ -include ':app' -include ':capacitor-cordova-android-plugins' -project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') - -apply from: 'capacitor.settings.gradle' \ No newline at end of file diff --git a/android/variables.gradle b/android/variables.gradle deleted file mode 100644 index 8ef305d..0000000 --- a/android/variables.gradle +++ /dev/null @@ -1,16 +0,0 @@ -ext { - minSdkVersion = 22 - compileSdkVersion = 34 - targetSdkVersion = 34 - androidxActivityVersion = '1.8.0' - androidxAppCompatVersion = '1.6.1' - androidxCoordinatorLayoutVersion = '1.2.0' - androidxCoreVersion = '1.12.0' - androidxFragmentVersion = '1.6.2' - coreSplashScreenVersion = '1.0.1' - androidxWebkitVersion = '1.9.0' - junitVersion = '4.13.2' - androidxJunitVersion = '1.1.5' - androidxEspressoCoreVersion = '3.5.1' - cordovaAndroidVersion = '10.1.1' -} \ No newline at end of file diff --git a/angular.json b/angular.json deleted file mode 100644 index 3d4eb64..0000000 --- a/angular.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "app": { - "root": "", - "sourceRoot": "src", - "projectType": "application", - "prefix": "app", - "schematics": {}, - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "www", - "index": "src/index.html", - "main": "src/main.ts", - "tsConfig": "tsconfig.app.json", - "assets": [ - { - "glob": "**/*", - "input": "src/assets", - "output": "assets" - }, - { - "glob": "**/*.svg", - "input": "node_modules/ionicons/dist/ionicons/svg", - "output": "./svg" - } - ], - "styles": [ - "src/theme/variables.scss", - "src/global.scss", - "./node_modules/leaflet/dist/leaflet.css" - ], - "scripts": [], - "aot": false, - "vendorChunk": true, - "extractLicenses": false, - "buildOptimizer": false, - "sourceMap": true, - "optimization": false, - "namedChunks": true - }, - "configurations": { - "production": { - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "optimization": true, - "outputHashing": "all", - "sourceMap": false, - "namedChunks": false, - "aot": true, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": true, - "budgets": [ - { - "type": "initial", - "maximumWarning": "2mb", - "maximumError": "5mb" - } - ] - }, - "ci": { - "progress": false - } - } - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "buildTarget": "app:build" - }, - "configurations": { - "production": { - "buildTarget": "app:build:production" - }, - "ci": { - } - } - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "app:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", - "styles": [], - "scripts": [], - "assets": [ - { - "glob": "favicon.ico", - "input": "src/", - "output": "/" - }, - { - "glob": "**/*", - "input": "src/assets", - "output": "/assets" - } - ] - }, - "configurations": { - "ci": { - "progress": false, - "watch": false - } - } - }, - "lint": { - "builder": "@angular-eslint/builder:lint", - "options": { - "lintFilePatterns": [ - "src/**/*.ts", - "src/**/*.html" - ] - } - }, - "e2e": { - "builder": "@angular-devkit/build-angular:protractor", - "options": { - "protractorConfig": "e2e/protractor.conf.js", - "devServerTarget": "app:serve" - }, - "configurations": { - "production": { - "devServerTarget": "app:serve:production" - }, - "ci": { - "devServerTarget": "app:serve:ci" - } - } - }, - "ionic-cordova-build": { - "builder": "@ionic/angular-toolkit:cordova-build", - "options": { - "browserTarget": "app:build" - }, - "configurations": { - "production": { - "browserTarget": "app:build:production" - } - } - }, - "ionic-cordova-serve": { - "builder": "@ionic/angular-toolkit:cordova-serve", - "options": { - "cordovaBuildTarget": "app:ionic-cordova-build", - "devServerTarget": "app:serve" - }, - "configurations": { - "production": { - "cordovaBuildTarget": "app:ionic-cordova-build:production", - "devServerTarget": "app:serve:production" - } - } - } - } - } - }, - "cli": { - "schematicCollections": [ - "@ionic/angular-toolkit" - ], - "analytics": false - }, - "schematics": { - "@ionic/angular-toolkit:component": { - "styleext": "scss" - }, - "@ionic/angular-toolkit:page": { - "styleext": "scss" - } - } -} diff --git a/app.config.ts b/app.config.ts new file mode 100644 index 0000000..bb55987 --- /dev/null +++ b/app.config.ts @@ -0,0 +1,383 @@ +/* eslint-disable max-lines-per-function */ +import type { ConfigContext, ExpoConfig } from '@expo/config'; +import type { AppIconBadgeConfig } from 'app-icon-badge/types'; + +import { ClientEnv, Env } from './env'; + +const appIconBadgeConfig: AppIconBadgeConfig = { + enabled: Env.APP_ENV !== 'production', + badges: [ + { + text: Env.APP_ENV, + type: 'banner', + color: 'white', + }, + { + text: Env.VERSION.toString(), + type: 'ribbon', + color: 'white', + }, + ], +}; + +export default ({ config }: ConfigContext): ExpoConfig => ({ + ...config, + name: Env.NAME, + description: `${Env.NAME} Resgrid Unit`, + owner: Env.EXPO_ACCOUNT_OWNER, + scheme: Env.SCHEME, + slug: 'resgrid-unit', + version: Env.VERSION.toString(), + orientation: 'default', + icon: './assets/icon.png', + userInterfaceStyle: 'automatic', + newArchEnabled: true, + updates: { + fallbackToCacheTimeout: 0, + }, + assetBundlePatterns: ['**/*'], + ios: { + supportsTablet: true, + bundleIdentifier: Env.BUNDLE_ID, + requireFullScreen: true, + infoPlist: { + UIBackgroundModes: ['remote-notification'], + ITSAppUsesNonExemptEncryption: false, + }, + }, + experiments: { + typedRoutes: true, + }, + android: { + versionCode: Env.ANDROID_VERSION_CODE, + adaptiveIcon: { + foregroundImage: './assets/adaptive-icon.png', + backgroundColor: '#2E3C4B', + }, + softwareKeyboardLayoutMode: 'pan', + package: Env.PACKAGE, + googleServicesFile: 'google-services.json', + }, + web: { + favicon: './assets/favicon.png', + bundler: 'metro', + }, + plugins: [ + [ + 'expo-splash-screen', + { + backgroundColor: '#2E3C4B', + image: './assets/adaptive-icon.png', + imageWidth: 250, + }, + ], + [ + 'expo-font', + { + fonts: ['./assets/fonts/Inter.ttf'], + }, + ], + 'expo-localization', + 'expo-router', + ['app-icon-badge', appIconBadgeConfig], + ['react-native-edge-to-edge'], + [ + 'expo-notifications', + { + icon: './assets/adaptive-icon.png', + color: '#2E3C4B', + permissions: { + ios: { + allowAlert: true, + allowBadge: true, + allowSound: true, + }, + }, + ios: { + sounds: [ + { + name: 'callmedium', + type: 'caf', + target: './assets/audio/caf/callmedium.caf', + }, + { + name: 'calllow', + type: 'caf', + target: './assets/audio/caf/calllow.caf', + }, + { + name: 'callhigh', + type: 'caf', + target: './assets/audio/caf/callhigh.caf', + }, + { + name: 'callemergency', + type: 'caf', + target: './assets/audio/caf/callemergency.caf', + }, + { + name: 'c9', + type: 'caf', + target: './assets/audio/caf/c9.caf', + }, + { + name: 'c8', + type: 'caf', + target: './assets/audio/caf/c8.caf', + }, + { + name: 'c7', + type: 'caf', + target: './assets/audio/caf/c7.caf', + }, + { + name: 'c6', + type: 'caf', + target: './assets/audio/caf/c6.caf', + }, + { + name: 'c5', + type: 'caf', + target: './assets/audio/caf/c5.caf', + }, + { + name: 'c4', + type: 'caf', + target: './assets/audio/caf/c4.caf', + }, + { + name: 'c3', + type: 'caf', + target: './assets/audio/caf/c3.caf', + }, + { + name: 'c25', + type: 'caf', + target: './assets/audio/caf/c25.caf', + }, + { + name: 'c24', + type: 'caf', + target: './assets/audio/caf/c24.caf', + }, + { + name: 'c23', + type: 'caf', + target: './assets/audio/caf/c23.caf', + }, + { + name: 'c22', + type: 'caf', + target: './assets/audio/caf/c22.caf', + }, + { + name: 'c21', + type: 'caf', + target: './assets/audio/caf/c21.caf', + }, + { + name: 'c20', + type: 'caf', + target: './assets/audio/caf/c20.caf', + }, + { + name: 'c2', + type: 'caf', + target: './assets/audio/caf/c2.caf', + }, + { + name: 'c19', + type: 'caf', + target: './assets/audio/caf/c19.caf', + }, + { + name: 'c18', + type: 'caf', + target: './assets/audio/caf/c18.caf', + }, + { + name: 'c17', + type: 'caf', + target: './assets/audio/caf/c17.caf', + }, + { + name: 'c16', + type: 'caf', + target: './assets/audio/caf/c16.caf', + }, + { + name: 'c15', + type: 'caf', + target: './assets/audio/caf/c15.caf', + }, + { + name: 'c14', + type: 'caf', + target: './assets/audio/caf/c14.caf', + }, + { + name: 'c13', + type: 'caf', + target: './assets/audio/caf/c13.caf', + }, + { + name: 'c12', + type: 'caf', + target: './assets/audio/caf/c12.caf', + }, + { + name: 'c11', + type: 'caf', + target: './assets/audio/caf/c11.caf', + }, + { + name: 'c10', + type: 'caf', + target: './assets/audio/caf/c10.caf', + }, + { + name: 'c1', + type: 'caf', + target: './assets/audio/caf/c1.caf', + }, + { + name: 'beep', + type: 'caf', + target: './assets/audio/caf/beep.caf', + }, + ], + }, + android: { + icon: './assets/adaptive-icon.png', + color: '#2E3C4B', + sounds: [ + './assets/audio/notification.mp3', + './assets/audio/callclosed.mp3', + './assets/audio/callupdated.mp3', + './assets/audio/emergencycall.mp3', + './assets/audio/highcall.mp3', + './assets/audio/lowcall.mp3', + './assets/audio/mediumcall.mp3', + './assets/audio/newcall.mp3', + './assets/audio/newchat.mp3', + './assets/audio/newmessage.mp3', + './assets/audio/newshift.mp3', + './assets/audio/newtraining.mp3', + './assets/audio/personnelstaffingupdated.mp3', + './assets/audio/personnelstatusupdated.mp3', + './assets/audio/troublealert.mp3', + './assets/audio/unitnotice.mp3', + './assets/audio/unitstatusupdated.mp3', + './assets/audio/upcomingshift.mp3', + './assets/audio/upcomingtraining.mp3', + './assets/audio/ui/space_notification1.mp3', + './assets/audio/ui/space_notification2.mp3', + './assets/audio/ui/space_notification1.ogg', + './assets/audio/ui/space_notification2.ogg', + './assets/audio/custom/c1.mp3', + './assets/audio/custom/c2.mp3', + './assets/audio/custom/c3.mp3', + './assets/audio/custom/c4.mp3', + './assets/audio/custom/c5.mp3', + './assets/audio/custom/c6.mp3', + './assets/audio/custom/c7.mp3', + './assets/audio/custom/c8.mp3', + './assets/audio/custom/c9.mp3', + './assets/audio/custom/c10.mp3', + './assets/audio/custom/c11.mp3', + './assets/audio/custom/c12.mp3', + './assets/audio/custom/c13.mp3', + './assets/audio/custom/c14.mp3', + './assets/audio/custom/c15.mp3', + './assets/audio/custom/c16.mp3', + './assets/audio/custom/c17.mp3', + './assets/audio/custom/c18.mp3', + './assets/audio/custom/c19.mp3', + './assets/audio/custom/c20.mp3', + './assets/audio/custom/c21.mp3', + './assets/audio/custom/c22.mp3', + './assets/audio/custom/c23.mp3', + './assets/audio/custom/c24.mp3', + './assets/audio/custom/c25.mp3', + ], + }, + requestPermissions: true, + }, + ], + [ + '@rnmapbox/maps', + { + RNMapboxMapsVersion: '11.8.0', + }, + ], + [ + 'expo-location', + { + locationWhenInUsePermission: 'Allow Resgird Unit to show current location on map.', + locationAlwaysAndWhenInUsePermission: 'Allow Resgrid Unit to use your location.', + locationAlwaysPermission: 'Resgrid Unit needs to track your location', + isIosBackgroundLocationEnabled: true, + isAndroidBackgroundLocationEnabled: true, + isAndroidForegroundServiceEnabled: true, + taskManager: { + locationTaskName: 'location-updates', + locationTaskOptions: { + accuracy: 'balanced', + distanceInterval: 10, + timeInterval: 5000, + }, + }, + }, + ], + [ + 'expo-task-manager', + { + taskManager: { + taskName: 'location-updates', + }, + }, + ], + [ + 'expo-screen-orientation', + { + initialOrientation: 'DEFAULT', + }, + ], + [ + 'expo-build-properties', + { + android: { + extraProguardRules: '-keep class expo.modules.location.** { *; }', + }, + }, + ], + [ + 'expo-asset', + { + assets: ['assets/mapping'], + }, + ], + [ + 'expo-document-picker', + { + iCloudContainerEnvironment: 'Production', + }, + ], + [ + '@sentry/react-native/expo', + { + organization: 'sentry', + project: 'unit', + url: 'https://sentry.resgrid.net/', + }, + ], + '@livekit/react-native-expo-plugin', + '@config-plugins/react-native-webrtc', + ], + extra: { + ...ClientEnv, + eas: { + projectId: Env.EAS_PROJECT_ID, + }, + }, +}); diff --git a/assets/adaptive-icon.png b/assets/adaptive-icon.png new file mode 100755 index 0000000..610086b Binary files /dev/null and b/assets/adaptive-icon.png differ diff --git a/src/assets/audio/CallClosed.mp3 b/assets/audio/CallClosed.mp3 similarity index 100% rename from src/assets/audio/CallClosed.mp3 rename to assets/audio/CallClosed.mp3 diff --git a/src/assets/audio/CallUpdated.mp3 b/assets/audio/CallUpdated.mp3 similarity index 100% rename from src/assets/audio/CallUpdated.mp3 rename to assets/audio/CallUpdated.mp3 diff --git a/src/assets/audio/NewCall.mp3 b/assets/audio/NewCall.mp3 similarity index 100% rename from src/assets/audio/NewCall.mp3 rename to assets/audio/NewCall.mp3 diff --git a/src/assets/audio/NewChat.mp3 b/assets/audio/NewChat.mp3 similarity index 100% rename from src/assets/audio/NewChat.mp3 rename to assets/audio/NewChat.mp3 diff --git a/src/assets/audio/NewMessage.mp3 b/assets/audio/NewMessage.mp3 similarity index 100% rename from src/assets/audio/NewMessage.mp3 rename to assets/audio/NewMessage.mp3 diff --git a/src/assets/audio/NewShift.mp3 b/assets/audio/NewShift.mp3 similarity index 100% rename from src/assets/audio/NewShift.mp3 rename to assets/audio/NewShift.mp3 diff --git a/src/assets/audio/NewTraining.mp3 b/assets/audio/NewTraining.mp3 similarity index 100% rename from src/assets/audio/NewTraining.mp3 rename to assets/audio/NewTraining.mp3 diff --git a/src/assets/audio/Notification.mp3 b/assets/audio/Notification.mp3 similarity index 100% rename from src/assets/audio/Notification.mp3 rename to assets/audio/Notification.mp3 diff --git a/src/assets/audio/PersonnelStaffingUpdated.mp3 b/assets/audio/PersonnelStaffingUpdated.mp3 similarity index 100% rename from src/assets/audio/PersonnelStaffingUpdated.mp3 rename to assets/audio/PersonnelStaffingUpdated.mp3 diff --git a/src/assets/audio/PersonnelStatusUpdated.mp3 b/assets/audio/PersonnelStatusUpdated.mp3 similarity index 100% rename from src/assets/audio/PersonnelStatusUpdated.mp3 rename to assets/audio/PersonnelStatusUpdated.mp3 diff --git a/src/assets/audio/TroubleAlert.mp3 b/assets/audio/TroubleAlert.mp3 similarity index 100% rename from src/assets/audio/TroubleAlert.mp3 rename to assets/audio/TroubleAlert.mp3 diff --git a/src/assets/audio/UnitNotice.mp3 b/assets/audio/UnitNotice.mp3 similarity index 100% rename from src/assets/audio/UnitNotice.mp3 rename to assets/audio/UnitNotice.mp3 diff --git a/src/assets/audio/UnitStatusUpdated.mp3 b/assets/audio/UnitStatusUpdated.mp3 similarity index 100% rename from src/assets/audio/UnitStatusUpdated.mp3 rename to assets/audio/UnitStatusUpdated.mp3 diff --git a/src/assets/audio/UpcomingShift.mp3 b/assets/audio/UpcomingShift.mp3 similarity index 100% rename from src/assets/audio/UpcomingShift.mp3 rename to assets/audio/UpcomingShift.mp3 diff --git a/src/assets/audio/UpcomingTraining.mp3 b/assets/audio/UpcomingTraining.mp3 similarity index 100% rename from src/assets/audio/UpcomingTraining.mp3 rename to assets/audio/UpcomingTraining.mp3 diff --git a/src/assets/audio/caf/beep.caf b/assets/audio/caf/beep.caf similarity index 100% rename from src/assets/audio/caf/beep.caf rename to assets/audio/caf/beep.caf diff --git a/src/assets/audio/caf/c1.caf b/assets/audio/caf/c1.caf similarity index 100% rename from src/assets/audio/caf/c1.caf rename to assets/audio/caf/c1.caf diff --git a/src/assets/audio/caf/c10.caf b/assets/audio/caf/c10.caf similarity index 100% rename from src/assets/audio/caf/c10.caf rename to assets/audio/caf/c10.caf diff --git a/src/assets/audio/caf/c11.caf b/assets/audio/caf/c11.caf similarity index 100% rename from src/assets/audio/caf/c11.caf rename to assets/audio/caf/c11.caf diff --git a/src/assets/audio/caf/c12.caf b/assets/audio/caf/c12.caf similarity index 100% rename from src/assets/audio/caf/c12.caf rename to assets/audio/caf/c12.caf diff --git a/src/assets/audio/caf/c13.caf b/assets/audio/caf/c13.caf similarity index 100% rename from src/assets/audio/caf/c13.caf rename to assets/audio/caf/c13.caf diff --git a/src/assets/audio/caf/c14.caf b/assets/audio/caf/c14.caf similarity index 100% rename from src/assets/audio/caf/c14.caf rename to assets/audio/caf/c14.caf diff --git a/src/assets/audio/caf/c15.caf b/assets/audio/caf/c15.caf similarity index 100% rename from src/assets/audio/caf/c15.caf rename to assets/audio/caf/c15.caf diff --git a/src/assets/audio/caf/c16.caf b/assets/audio/caf/c16.caf similarity index 100% rename from src/assets/audio/caf/c16.caf rename to assets/audio/caf/c16.caf diff --git a/src/assets/audio/caf/c17.caf b/assets/audio/caf/c17.caf similarity index 100% rename from src/assets/audio/caf/c17.caf rename to assets/audio/caf/c17.caf diff --git a/src/assets/audio/caf/c18.caf b/assets/audio/caf/c18.caf similarity index 100% rename from src/assets/audio/caf/c18.caf rename to assets/audio/caf/c18.caf diff --git a/src/assets/audio/caf/c19.caf b/assets/audio/caf/c19.caf similarity index 100% rename from src/assets/audio/caf/c19.caf rename to assets/audio/caf/c19.caf diff --git a/src/assets/audio/caf/c2.caf b/assets/audio/caf/c2.caf similarity index 100% rename from src/assets/audio/caf/c2.caf rename to assets/audio/caf/c2.caf diff --git a/src/assets/audio/caf/c20.caf b/assets/audio/caf/c20.caf similarity index 100% rename from src/assets/audio/caf/c20.caf rename to assets/audio/caf/c20.caf diff --git a/src/assets/audio/caf/c21.caf b/assets/audio/caf/c21.caf similarity index 100% rename from src/assets/audio/caf/c21.caf rename to assets/audio/caf/c21.caf diff --git a/src/assets/audio/caf/c22.caf b/assets/audio/caf/c22.caf similarity index 100% rename from src/assets/audio/caf/c22.caf rename to assets/audio/caf/c22.caf diff --git a/src/assets/audio/caf/c23.caf b/assets/audio/caf/c23.caf similarity index 100% rename from src/assets/audio/caf/c23.caf rename to assets/audio/caf/c23.caf diff --git a/src/assets/audio/caf/c24.caf b/assets/audio/caf/c24.caf similarity index 100% rename from src/assets/audio/caf/c24.caf rename to assets/audio/caf/c24.caf diff --git a/src/assets/audio/caf/c25.caf b/assets/audio/caf/c25.caf similarity index 100% rename from src/assets/audio/caf/c25.caf rename to assets/audio/caf/c25.caf diff --git a/src/assets/audio/caf/c3.caf b/assets/audio/caf/c3.caf similarity index 100% rename from src/assets/audio/caf/c3.caf rename to assets/audio/caf/c3.caf diff --git a/src/assets/audio/caf/c4.caf b/assets/audio/caf/c4.caf similarity index 100% rename from src/assets/audio/caf/c4.caf rename to assets/audio/caf/c4.caf diff --git a/src/assets/audio/caf/c5.caf b/assets/audio/caf/c5.caf similarity index 100% rename from src/assets/audio/caf/c5.caf rename to assets/audio/caf/c5.caf diff --git a/src/assets/audio/caf/c6.caf b/assets/audio/caf/c6.caf similarity index 100% rename from src/assets/audio/caf/c6.caf rename to assets/audio/caf/c6.caf diff --git a/src/assets/audio/caf/c7.caf b/assets/audio/caf/c7.caf similarity index 100% rename from src/assets/audio/caf/c7.caf rename to assets/audio/caf/c7.caf diff --git a/src/assets/audio/caf/c8.caf b/assets/audio/caf/c8.caf similarity index 100% rename from src/assets/audio/caf/c8.caf rename to assets/audio/caf/c8.caf diff --git a/src/assets/audio/caf/c9.caf b/assets/audio/caf/c9.caf similarity index 100% rename from src/assets/audio/caf/c9.caf rename to assets/audio/caf/c9.caf diff --git a/src/assets/audio/caf/callemergency.caf b/assets/audio/caf/callemergency.caf similarity index 100% rename from src/assets/audio/caf/callemergency.caf rename to assets/audio/caf/callemergency.caf diff --git a/src/assets/audio/caf/callhigh.caf b/assets/audio/caf/callhigh.caf similarity index 100% rename from src/assets/audio/caf/callhigh.caf rename to assets/audio/caf/callhigh.caf diff --git a/src/assets/audio/caf/calllow.caf b/assets/audio/caf/calllow.caf similarity index 100% rename from src/assets/audio/caf/calllow.caf rename to assets/audio/caf/calllow.caf diff --git a/src/assets/audio/caf/callmedium.caf b/assets/audio/caf/callmedium.caf similarity index 100% rename from src/assets/audio/caf/callmedium.caf rename to assets/audio/caf/callmedium.caf diff --git a/assets/audio/callclosed.mp3 b/assets/audio/callclosed.mp3 new file mode 100644 index 0000000..268f641 Binary files /dev/null and b/assets/audio/callclosed.mp3 differ diff --git a/android/app/src/main/res/raw/callemergency.mp3 b/assets/audio/callemergency.mp3 similarity index 100% rename from android/app/src/main/res/raw/callemergency.mp3 rename to assets/audio/callemergency.mp3 diff --git a/android/app/src/main/res/raw/callhigh.mp3 b/assets/audio/callhigh.mp3 similarity index 100% rename from android/app/src/main/res/raw/callhigh.mp3 rename to assets/audio/callhigh.mp3 diff --git a/android/app/src/main/res/raw/calllow.mp3 b/assets/audio/calllow.mp3 similarity index 100% rename from android/app/src/main/res/raw/calllow.mp3 rename to assets/audio/calllow.mp3 diff --git a/android/app/src/main/res/raw/callmedium.mp3 b/assets/audio/callmedium.mp3 similarity index 100% rename from android/app/src/main/res/raw/callmedium.mp3 rename to assets/audio/callmedium.mp3 diff --git a/assets/audio/callupdated.mp3 b/assets/audio/callupdated.mp3 new file mode 100644 index 0000000..d20ba7e Binary files /dev/null and b/assets/audio/callupdated.mp3 differ diff --git a/android/app/src/main/res/raw/c1.mp3 b/assets/audio/custom/c1.mp3 similarity index 100% rename from android/app/src/main/res/raw/c1.mp3 rename to assets/audio/custom/c1.mp3 diff --git a/android/app/src/main/res/raw/c10.mp3 b/assets/audio/custom/c10.mp3 similarity index 100% rename from android/app/src/main/res/raw/c10.mp3 rename to assets/audio/custom/c10.mp3 diff --git a/android/app/src/main/res/raw/c11.mp3 b/assets/audio/custom/c11.mp3 similarity index 100% rename from android/app/src/main/res/raw/c11.mp3 rename to assets/audio/custom/c11.mp3 diff --git a/android/app/src/main/res/raw/c12.mp3 b/assets/audio/custom/c12.mp3 similarity index 100% rename from android/app/src/main/res/raw/c12.mp3 rename to assets/audio/custom/c12.mp3 diff --git a/android/app/src/main/res/raw/c13.mp3 b/assets/audio/custom/c13.mp3 similarity index 100% rename from android/app/src/main/res/raw/c13.mp3 rename to assets/audio/custom/c13.mp3 diff --git a/android/app/src/main/res/raw/c14.mp3 b/assets/audio/custom/c14.mp3 similarity index 100% rename from android/app/src/main/res/raw/c14.mp3 rename to assets/audio/custom/c14.mp3 diff --git a/android/app/src/main/res/raw/c15.mp3 b/assets/audio/custom/c15.mp3 similarity index 100% rename from android/app/src/main/res/raw/c15.mp3 rename to assets/audio/custom/c15.mp3 diff --git a/src/assets/audio/custom/c16.mp3 b/assets/audio/custom/c16.mp3 similarity index 100% rename from src/assets/audio/custom/c16.mp3 rename to assets/audio/custom/c16.mp3 diff --git a/src/assets/audio/custom/c17.mp3 b/assets/audio/custom/c17.mp3 similarity index 100% rename from src/assets/audio/custom/c17.mp3 rename to assets/audio/custom/c17.mp3 diff --git a/android/app/src/main/res/raw/c18.mp3 b/assets/audio/custom/c18.mp3 similarity index 100% rename from android/app/src/main/res/raw/c18.mp3 rename to assets/audio/custom/c18.mp3 diff --git a/src/assets/audio/custom/c19.mp3 b/assets/audio/custom/c19.mp3 similarity index 100% rename from src/assets/audio/custom/c19.mp3 rename to assets/audio/custom/c19.mp3 diff --git a/android/app/src/main/res/raw/c2.mp3 b/assets/audio/custom/c2.mp3 similarity index 100% rename from android/app/src/main/res/raw/c2.mp3 rename to assets/audio/custom/c2.mp3 diff --git a/android/app/src/main/res/raw/c20.mp3 b/assets/audio/custom/c20.mp3 similarity index 100% rename from android/app/src/main/res/raw/c20.mp3 rename to assets/audio/custom/c20.mp3 diff --git a/android/app/src/main/res/raw/c21.mp3 b/assets/audio/custom/c21.mp3 similarity index 100% rename from android/app/src/main/res/raw/c21.mp3 rename to assets/audio/custom/c21.mp3 diff --git a/android/app/src/main/res/raw/c22.mp3 b/assets/audio/custom/c22.mp3 similarity index 100% rename from android/app/src/main/res/raw/c22.mp3 rename to assets/audio/custom/c22.mp3 diff --git a/android/app/src/main/res/raw/c23.mp3 b/assets/audio/custom/c23.mp3 similarity index 100% rename from android/app/src/main/res/raw/c23.mp3 rename to assets/audio/custom/c23.mp3 diff --git a/src/assets/audio/custom/c24.mp3 b/assets/audio/custom/c24.mp3 similarity index 100% rename from src/assets/audio/custom/c24.mp3 rename to assets/audio/custom/c24.mp3 diff --git a/android/app/src/main/res/raw/c25.mp3 b/assets/audio/custom/c25.mp3 similarity index 100% rename from android/app/src/main/res/raw/c25.mp3 rename to assets/audio/custom/c25.mp3 diff --git a/android/app/src/main/res/raw/c3.mp3 b/assets/audio/custom/c3.mp3 similarity index 100% rename from android/app/src/main/res/raw/c3.mp3 rename to assets/audio/custom/c3.mp3 diff --git a/android/app/src/main/res/raw/c4.mp3 b/assets/audio/custom/c4.mp3 similarity index 100% rename from android/app/src/main/res/raw/c4.mp3 rename to assets/audio/custom/c4.mp3 diff --git a/android/app/src/main/res/raw/c5.mp3 b/assets/audio/custom/c5.mp3 similarity index 100% rename from android/app/src/main/res/raw/c5.mp3 rename to assets/audio/custom/c5.mp3 diff --git a/src/assets/audio/custom/c6.mp3 b/assets/audio/custom/c6.mp3 similarity index 100% rename from src/assets/audio/custom/c6.mp3 rename to assets/audio/custom/c6.mp3 diff --git a/src/assets/audio/custom/c7.mp3 b/assets/audio/custom/c7.mp3 similarity index 100% rename from src/assets/audio/custom/c7.mp3 rename to assets/audio/custom/c7.mp3 diff --git a/android/app/src/main/res/raw/c8.mp3 b/assets/audio/custom/c8.mp3 similarity index 100% rename from android/app/src/main/res/raw/c8.mp3 rename to assets/audio/custom/c8.mp3 diff --git a/android/app/src/main/res/raw/c9.mp3 b/assets/audio/custom/c9.mp3 similarity index 100% rename from android/app/src/main/res/raw/c9.mp3 rename to assets/audio/custom/c9.mp3 diff --git a/assets/audio/newcall.mp3 b/assets/audio/newcall.mp3 new file mode 100644 index 0000000..70c2922 Binary files /dev/null and b/assets/audio/newcall.mp3 differ diff --git a/assets/audio/newchat.mp3 b/assets/audio/newchat.mp3 new file mode 100644 index 0000000..107cf6d Binary files /dev/null and b/assets/audio/newchat.mp3 differ diff --git a/assets/audio/newmessage.mp3 b/assets/audio/newmessage.mp3 new file mode 100644 index 0000000..3d02708 Binary files /dev/null and b/assets/audio/newmessage.mp3 differ diff --git a/assets/audio/newshift.mp3 b/assets/audio/newshift.mp3 new file mode 100644 index 0000000..3deb684 Binary files /dev/null and b/assets/audio/newshift.mp3 differ diff --git a/assets/audio/newtraining.mp3 b/assets/audio/newtraining.mp3 new file mode 100644 index 0000000..6c64c77 Binary files /dev/null and b/assets/audio/newtraining.mp3 differ diff --git a/assets/audio/notification.mp3 b/assets/audio/notification.mp3 new file mode 100644 index 0000000..ef7e518 Binary files /dev/null and b/assets/audio/notification.mp3 differ diff --git a/assets/audio/personnelstaffingupdated.mp3 b/assets/audio/personnelstaffingupdated.mp3 new file mode 100644 index 0000000..66d94cd Binary files /dev/null and b/assets/audio/personnelstaffingupdated.mp3 differ diff --git a/assets/audio/personnelstatusupdated.mp3 b/assets/audio/personnelstatusupdated.mp3 new file mode 100644 index 0000000..b410c67 Binary files /dev/null and b/assets/audio/personnelstatusupdated.mp3 differ diff --git a/assets/audio/troublealert.mp3 b/assets/audio/troublealert.mp3 new file mode 100644 index 0000000..47fe955 Binary files /dev/null and b/assets/audio/troublealert.mp3 differ diff --git a/src/assets/audio/ui/Space_Notification1.mp3 b/assets/audio/ui/Space_Notification1.mp3 similarity index 100% rename from src/assets/audio/ui/Space_Notification1.mp3 rename to assets/audio/ui/Space_Notification1.mp3 diff --git a/src/assets/audio/ui/Space_Notification1.ogg b/assets/audio/ui/Space_Notification1.ogg similarity index 100% rename from src/assets/audio/ui/Space_Notification1.ogg rename to assets/audio/ui/Space_Notification1.ogg diff --git a/src/assets/audio/ui/Space_Notification2.mp3 b/assets/audio/ui/Space_Notification2.mp3 similarity index 100% rename from src/assets/audio/ui/Space_Notification2.mp3 rename to assets/audio/ui/Space_Notification2.mp3 diff --git a/src/assets/audio/ui/Space_Notification2.ogg b/assets/audio/ui/Space_Notification2.ogg similarity index 100% rename from src/assets/audio/ui/Space_Notification2.ogg rename to assets/audio/ui/Space_Notification2.ogg diff --git a/assets/audio/ui/space_notification1.mp3 b/assets/audio/ui/space_notification1.mp3 new file mode 100644 index 0000000..16f3432 Binary files /dev/null and b/assets/audio/ui/space_notification1.mp3 differ diff --git a/assets/audio/ui/space_notification1.ogg b/assets/audio/ui/space_notification1.ogg new file mode 100644 index 0000000..37bbc42 Binary files /dev/null and b/assets/audio/ui/space_notification1.ogg differ diff --git a/assets/audio/ui/space_notification2.mp3 b/assets/audio/ui/space_notification2.mp3 new file mode 100644 index 0000000..273ba51 Binary files /dev/null and b/assets/audio/ui/space_notification2.mp3 differ diff --git a/assets/audio/ui/space_notification2.ogg b/assets/audio/ui/space_notification2.ogg new file mode 100644 index 0000000..b2afb79 Binary files /dev/null and b/assets/audio/ui/space_notification2.ogg differ diff --git a/assets/audio/unitnotice.mp3 b/assets/audio/unitnotice.mp3 new file mode 100644 index 0000000..0bc99ab Binary files /dev/null and b/assets/audio/unitnotice.mp3 differ diff --git a/assets/audio/unitstatusupdated.mp3 b/assets/audio/unitstatusupdated.mp3 new file mode 100644 index 0000000..d6e9fea Binary files /dev/null and b/assets/audio/unitstatusupdated.mp3 differ diff --git a/assets/audio/upcomingshift.mp3 b/assets/audio/upcomingshift.mp3 new file mode 100644 index 0000000..3b8dee3 Binary files /dev/null and b/assets/audio/upcomingshift.mp3 differ diff --git a/assets/audio/upcomingtraining.mp3 b/assets/audio/upcomingtraining.mp3 new file mode 100644 index 0000000..afeacd5 Binary files /dev/null and b/assets/audio/upcomingtraining.mp3 differ diff --git a/src/assets/icon/favicon.png b/assets/favicon.png similarity index 100% rename from src/assets/icon/favicon.png rename to assets/favicon.png diff --git a/assets/fonts/Inter.ttf b/assets/fonts/Inter.ttf new file mode 100644 index 0000000..32a7999 Binary files /dev/null and b/assets/fonts/Inter.ttf differ diff --git a/assets/fonts/SpaceMono-Regular.ttf b/assets/fonts/SpaceMono-Regular.ttf new file mode 100755 index 0000000..28d7ff7 Binary files /dev/null and b/assets/fonts/SpaceMono-Regular.ttf differ diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000..bae9425 Binary files /dev/null and b/assets/icon.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/assets/icon/favicon.png similarity index 100% rename from android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png rename to assets/icon/favicon.png diff --git a/src/assets/images/Resgrid_JustText-300width.png b/assets/images/Resgrid_JustText-300width.png similarity index 100% rename from src/assets/images/Resgrid_JustText-300width.png rename to assets/images/Resgrid_JustText-300width.png diff --git a/src/assets/images/Resgrid_JustText.png b/assets/images/Resgrid_JustText.png similarity index 100% rename from src/assets/images/Resgrid_JustText.png rename to assets/images/Resgrid_JustText.png diff --git a/src/assets/images/Resgrid_JustText_White.png b/assets/images/Resgrid_JustText_White.png similarity index 100% rename from src/assets/images/Resgrid_JustText_White.png rename to assets/images/Resgrid_JustText_White.png diff --git a/src/assets/images/Resgrid_JustText_White_Small.png b/assets/images/Resgrid_JustText_White_Small.png similarity index 100% rename from src/assets/images/Resgrid_JustText_White_Small.png rename to assets/images/Resgrid_JustText_White_Small.png diff --git a/src/assets/images/Resgrid_JustText_small.png b/assets/images/Resgrid_JustText_small.png similarity index 100% rename from src/assets/images/Resgrid_JustText_small.png rename to assets/images/Resgrid_JustText_small.png diff --git a/src/assets/images/splash-screen-01-01.png b/assets/images/splash-screen-01-01.png similarity index 100% rename from src/assets/images/splash-screen-01-01.png rename to assets/images/splash-screen-01-01.png diff --git a/src/assets/images/splash-screen.png b/assets/images/splash-screen.png similarity index 100% rename from src/assets/images/splash-screen.png rename to assets/images/splash-screen.png diff --git a/assets/images/user-marker.png b/assets/images/user-marker.png new file mode 100644 index 0000000..748c157 Binary files /dev/null and b/assets/images/user-marker.png differ diff --git a/assets/images/user-marker.svg b/assets/images/user-marker.svg new file mode 100644 index 0000000..6951c77 --- /dev/null +++ b/assets/images/user-marker.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/mapping/Aircraft.png b/assets/mapping/aircraft.png similarity index 100% rename from src/assets/mapping/Aircraft.png rename to assets/mapping/aircraft.png diff --git a/src/assets/mapping/Ambulance.png b/assets/mapping/ambulance.png similarity index 100% rename from src/assets/mapping/Ambulance.png rename to assets/mapping/ambulance.png diff --git a/src/assets/mapping/Blast.png b/assets/mapping/blast.png similarity index 100% rename from src/assets/mapping/Blast.png rename to assets/mapping/blast.png diff --git a/src/assets/mapping/Bulldozer.png b/assets/mapping/bulldozer.png similarity index 100% rename from src/assets/mapping/Bulldozer.png rename to assets/mapping/bulldozer.png diff --git a/src/assets/mapping/Bus.png b/assets/mapping/bus.png similarity index 100% rename from src/assets/mapping/Bus.png rename to assets/mapping/bus.png diff --git a/src/assets/mapping/Call.png b/assets/mapping/call.png similarity index 100% rename from src/assets/mapping/Call.png rename to assets/mapping/call.png diff --git a/src/assets/mapping/Camper.png b/assets/mapping/camper.png similarity index 100% rename from src/assets/mapping/Camper.png rename to assets/mapping/camper.png diff --git a/src/assets/mapping/Car.png b/assets/mapping/car.png similarity index 100% rename from src/assets/mapping/Car.png rename to assets/mapping/car.png diff --git a/src/assets/mapping/CarAccident.png b/assets/mapping/caraccident.png similarity index 100% rename from src/assets/mapping/CarAccident.png rename to assets/mapping/caraccident.png diff --git a/src/assets/mapping/CarTwo.png b/assets/mapping/cartwo.png similarity index 100% rename from src/assets/mapping/CarTwo.png rename to assets/mapping/cartwo.png diff --git a/src/assets/mapping/Check.png b/assets/mapping/check.png similarity index 100% rename from src/assets/mapping/Check.png rename to assets/mapping/check.png diff --git a/src/assets/mapping/CrimeScene.png b/assets/mapping/crimescene.png similarity index 100% rename from src/assets/mapping/CrimeScene.png rename to assets/mapping/crimescene.png diff --git a/src/assets/mapping/Earthquake.png b/assets/mapping/earthquake.png similarity index 100% rename from src/assets/mapping/Earthquake.png rename to assets/mapping/earthquake.png diff --git a/src/assets/mapping/EmergencyPhone.png b/assets/mapping/emergencyphone.png similarity index 100% rename from src/assets/mapping/EmergencyPhone.png rename to assets/mapping/emergencyphone.png diff --git a/src/assets/mapping/Engine_Available.png b/assets/mapping/engine_available.png similarity index 100% rename from src/assets/mapping/Engine_Available.png rename to assets/mapping/engine_available.png diff --git a/src/assets/mapping/Engine_Responding.png b/assets/mapping/engine_responding.png similarity index 100% rename from src/assets/mapping/Engine_Responding.png rename to assets/mapping/engine_responding.png diff --git a/src/assets/mapping/Event.png b/assets/mapping/event.png similarity index 100% rename from src/assets/mapping/Event.png rename to assets/mapping/event.png diff --git a/src/assets/mapping/Fire.png b/assets/mapping/fire.png similarity index 100% rename from src/assets/mapping/Fire.png rename to assets/mapping/fire.png diff --git a/src/assets/mapping/FirstAid.png b/assets/mapping/firstaid.png similarity index 100% rename from src/assets/mapping/FirstAid.png rename to assets/mapping/firstaid.png diff --git a/src/assets/mapping/Flag.png b/assets/mapping/flag.png similarity index 100% rename from src/assets/mapping/Flag.png rename to assets/mapping/flag.png diff --git a/src/assets/mapping/Flood.png b/assets/mapping/flood.png similarity index 100% rename from src/assets/mapping/Flood.png rename to assets/mapping/flood.png diff --git a/src/assets/mapping/FourByFour.png b/assets/mapping/fourbyfour.png similarity index 100% rename from src/assets/mapping/FourByFour.png rename to assets/mapping/fourbyfour.png diff --git a/src/assets/mapping/Gathering.png b/assets/mapping/gathering.png similarity index 100% rename from src/assets/mapping/Gathering.png rename to assets/mapping/gathering.png diff --git a/src/assets/mapping/Group.png b/assets/mapping/group.png similarity index 100% rename from src/assets/mapping/Group.png rename to assets/mapping/group.png diff --git a/src/assets/mapping/Helicopter.png b/assets/mapping/helicopter.png similarity index 100% rename from src/assets/mapping/Helicopter.png rename to assets/mapping/helicopter.png diff --git a/src/assets/mapping/Helipad.png b/assets/mapping/helipad.png similarity index 100% rename from src/assets/mapping/Helipad.png rename to assets/mapping/helipad.png diff --git a/src/assets/mapping/Hospital.png b/assets/mapping/hospital.png similarity index 100% rename from src/assets/mapping/Hospital.png rename to assets/mapping/hospital.png diff --git a/src/assets/mapping/Industry.png b/assets/mapping/industry.png similarity index 100% rename from src/assets/mapping/Industry.png rename to assets/mapping/industry.png diff --git a/src/assets/mapping/LineDown.png b/assets/mapping/linedown.png similarity index 100% rename from src/assets/mapping/LineDown.png rename to assets/mapping/linedown.png diff --git a/src/assets/mapping/Motorcycle.png b/assets/mapping/motorcycle.png similarity index 100% rename from src/assets/mapping/Motorcycle.png rename to assets/mapping/motorcycle.png diff --git a/src/assets/mapping/Person.png b/assets/mapping/person.png similarity index 100% rename from src/assets/mapping/Person.png rename to assets/mapping/person.png diff --git a/src/assets/mapping/Person_Available.png b/assets/mapping/person_available.png similarity index 100% rename from src/assets/mapping/Person_Available.png rename to assets/mapping/person_available.png diff --git a/src/assets/mapping/Person_OnScene.png b/assets/mapping/person_onscene.png similarity index 100% rename from src/assets/mapping/Person_OnScene.png rename to assets/mapping/person_onscene.png diff --git a/src/assets/mapping/Person_RespondingCall.png b/assets/mapping/person_respondingcall.png similarity index 100% rename from src/assets/mapping/Person_RespondingCall.png rename to assets/mapping/person_respondingcall.png diff --git a/src/assets/mapping/Person_RespondingStation.png b/assets/mapping/person_respondingstation.png similarity index 100% rename from src/assets/mapping/Person_RespondingStation.png rename to assets/mapping/person_respondingstation.png diff --git a/src/assets/mapping/Pickup.png b/assets/mapping/pickup.png similarity index 100% rename from src/assets/mapping/Pickup.png rename to assets/mapping/pickup.png diff --git a/src/assets/mapping/Plowtruck.png b/assets/mapping/plowtruck.png similarity index 100% rename from src/assets/mapping/Plowtruck.png rename to assets/mapping/plowtruck.png diff --git a/src/assets/mapping/Poison.png b/assets/mapping/poison.png similarity index 100% rename from src/assets/mapping/Poison.png rename to assets/mapping/poison.png diff --git a/src/assets/mapping/PowerOutage.png b/assets/mapping/poweroutage.png similarity index 100% rename from src/assets/mapping/PowerOutage.png rename to assets/mapping/poweroutage.png diff --git a/src/assets/mapping/Radiation.png b/assets/mapping/radiation.png similarity index 100% rename from src/assets/mapping/Radiation.png rename to assets/mapping/radiation.png diff --git a/src/assets/mapping/Rescue_Available.png b/assets/mapping/rescue_available.png similarity index 100% rename from src/assets/mapping/Rescue_Available.png rename to assets/mapping/rescue_available.png diff --git a/src/assets/mapping/Rescue_Responding.png b/assets/mapping/rescue_responding.png similarity index 100% rename from src/assets/mapping/Rescue_Responding.png rename to assets/mapping/rescue_responding.png diff --git a/src/assets/mapping/Search.png b/assets/mapping/search.png similarity index 100% rename from src/assets/mapping/Search.png rename to assets/mapping/search.png diff --git a/src/assets/mapping/Shooting.png b/assets/mapping/shooting.png similarity index 100% rename from src/assets/mapping/Shooting.png rename to assets/mapping/shooting.png diff --git a/src/assets/mapping/Station.png b/assets/mapping/station.png similarity index 100% rename from src/assets/mapping/Station.png rename to assets/mapping/station.png diff --git a/src/assets/mapping/Tires.png b/assets/mapping/tires.png similarity index 100% rename from src/assets/mapping/Tires.png rename to assets/mapping/tires.png diff --git a/src/assets/mapping/Tools.png b/assets/mapping/tools.png similarity index 100% rename from src/assets/mapping/Tools.png rename to assets/mapping/tools.png diff --git a/src/assets/mapping/TreeDown.png b/assets/mapping/treedown.png similarity index 100% rename from src/assets/mapping/TreeDown.png rename to assets/mapping/treedown.png diff --git a/src/assets/mapping/Truck.png b/assets/mapping/truck.png similarity index 100% rename from src/assets/mapping/Truck.png rename to assets/mapping/truck.png diff --git a/src/assets/mapping/Van.png b/assets/mapping/van.png similarity index 100% rename from src/assets/mapping/Van.png rename to assets/mapping/van.png diff --git a/src/assets/mapping/Velocimeter.png b/assets/mapping/velocimeter.png similarity index 100% rename from src/assets/mapping/Velocimeter.png rename to assets/mapping/velocimeter.png diff --git a/src/assets/mapping/Watercraft.png b/assets/mapping/watercraft.png similarity index 100% rename from src/assets/mapping/Watercraft.png rename to assets/mapping/watercraft.png diff --git a/src/assets/mapping/WaterSupply.png b/assets/mapping/watersupply.png similarity index 100% rename from src/assets/mapping/WaterSupply.png rename to assets/mapping/watersupply.png diff --git a/src/assets/mapping/Workshop.png b/assets/mapping/workshop.png similarity index 100% rename from src/assets/mapping/Workshop.png rename to assets/mapping/workshop.png diff --git a/src/assets/mapping/Worksite.png b/assets/mapping/worksite.png similarity index 100% rename from src/assets/mapping/Worksite.png rename to assets/mapping/worksite.png diff --git a/assets/splash-icon.png b/assets/splash-icon.png new file mode 100644 index 0000000..bae9425 Binary files /dev/null and b/assets/splash-icon.png differ diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..3d4b8e3 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,38 @@ +module.exports = function (api) { + api.cache(true); + return { + presets: [ + ['babel-preset-expo', { jsxImportSource: 'nativewind' }], + 'nativewind/babel', + ], + plugins: [ + [ + 'module-resolver', + { + root: ['./'], + alias: { + '@': './src', + '@env': './src/lib/env.js', + '@unitools/image': '@unitools/image-expo', + '@unitools/router': '@unitools/router-expo', + '@unitools/link': '@unitools/link-expo', + 'tailwind.config': './tailwind.config.js', + '@assets': './assets', + }, + extensions: [ + '.ios.ts', + '.android.ts', + '.ts', + '.ios.tsx', + '.android.tsx', + '.tsx', + '.jsx', + '.js', + '.json', + ], + }, + ], + 'react-native-reanimated/plugin', + ], + }; +}; diff --git a/capacitor.config.json b/capacitor.config.json deleted file mode 100644 index 0967ef4..0000000 --- a/capacitor.config.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/capacitor.config.ts b/capacitor.config.ts deleted file mode 100644 index 839c129..0000000 --- a/capacitor.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CapacitorConfig } from '@capacitor/cli'; - -const config: CapacitorConfig = { - appId: 'com.resgrid.unit', - appName: 'Resgrid Unit', - webDir: 'www', - bundledWebRuntime: false, - android: { - allowMixedContent: true, - useLegacyBridge: true - }, - server: { - allowNavigation: [], - }, - plugins: { - PushNotifications: { - presentationOptions: ['badge', 'sound', 'alert'], - }, - SplashScreen: { - launchAutoHide: false - }, - Badge: { - persist: false, - autoClear: true, - }, - CapacitorHttp: { - enabled: true, - }, - }, -}; - -export default config; diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..422b194 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1 @@ +module.exports = { extends: ['@commitlint/config-conventional'] }; diff --git a/e2e/protractor.conf.js b/e2e/protractor.conf.js deleted file mode 100644 index 22bd9d9..0000000 --- a/e2e/protractor.conf.js +++ /dev/null @@ -1,37 +0,0 @@ -// @ts-check -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter'); - -/** - * @type { import("protractor").Config } - */ -exports.config = { - allScriptsTimeout: 11000, - specs: [ - './src/**/*.e2e-spec.ts' - ], - capabilities: { - browserName: 'chrome' - }, - directConnect: true, - SELENIUM_PROMISE_MANAGER: false, - baseUrl: 'http://localhost:4200/', - framework: 'jasmine', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 30000, - print: function() {} - }, - onPrepare() { - require('ts-node').register({ - project: require('path').join(__dirname, './tsconfig.json') - }); - jasmine.getEnv().addReporter(new SpecReporter({ - spec: { - displayStacktrace: StacktraceOption.PRETTY - } - })); - } -}; diff --git a/e2e/src/app.e2e-spec.ts b/e2e/src/app.e2e-spec.ts deleted file mode 100644 index e4156e0..0000000 --- a/e2e/src/app.e2e-spec.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { AppPage } from './app.po'; - -describe('new App', () => { - let page: AppPage; - - beforeEach(() => { - page = new AppPage(); - }); - - it('should display welcome message', () => { - page.navigateTo(); - expect(page.getPageTitle()).toContain('Tab 1'); - }); -}); diff --git a/e2e/src/app.po.ts b/e2e/src/app.po.ts deleted file mode 100644 index 048e734..0000000 --- a/e2e/src/app.po.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { browser, by, element } from 'protractor'; - -export class AppPage { - navigateTo() { - return browser.get('/'); - } - - getPageTitle() { - return element(by.css('ion-title')).getText(); - } -} diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json deleted file mode 100644 index a82df00..0000000 --- a/e2e/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/e2e", - "module": "commonjs", - "target": "es2018", - "types": [ - "jasmine", - "node" - ] - } -} diff --git a/eas.json b/eas.json new file mode 100644 index 0000000..3989583 --- /dev/null +++ b/eas.json @@ -0,0 +1,90 @@ +{ + "cli": { + "version": ">= 3.8.1" + }, + "build": { + "production": { + "distribution": "store", + "pnpm": "9.12.3", + "ios": { + "image": "latest" + }, + "android": { + "buildType": "apk", + "image": "latest" + }, + "env": { + "EXPO_NO_DOTENV": "1", + "APP_ENV": "production", + "FLIPPER_DISABLE": "1" + } + }, + "staging": { + "distribution": "internal", + "pnpm": "9.12.3", + "ios": { + "image": "latest" + }, + "android": { + "buildType": "apk", + "image": "latest" + }, + "env": { + "APP_ENV": "staging", + "EXPO_NO_DOTENV": "1", + "FLIPPER_DISABLE": "1" + } + }, + "internal": { + "distribution": "internal", + "credentialsSource": "local", + "pnpm": "9.12.3", + "ios": { + "image": "latest" + }, + "android": { + "buildType": "apk", + "image": "latest" + }, + "env": { + "APP_ENV": "development", + "EXPO_NO_DOTENV": "1", + "FLIPPER_DISABLE": "1" + } + }, + "development": { + "developmentClient": true, + "distribution": "internal", + "credentialsSource": "local", + "pnpm": "9.12.3", + "ios": { + "image": "latest" + }, + "android": { + "image": "latest", + "buildType": "apk" + }, + "env": { + "APP_ENV": "development", + "EXPO_NO_DOTENV": "1" + } + }, + "simulator": { + "pnpm": "9.12.3", + "ios": { + "simulator": true, + "image": "latest" + }, + "android": { + "image": "latest" + }, + "env": { + "APP_ENV": "development", + "EXPO_NO_DOTENV": "1" + } + } + }, + "submit": { + "production": {} + } +} diff --git a/env.js b/env.js new file mode 100644 index 0000000..084b21e --- /dev/null +++ b/env.js @@ -0,0 +1,175 @@ +/* eslint-env node */ +/* + * Env file to load and validate env variables + * Be cautious; this file should not be imported into your source folder. + * We split the env variables into two parts: + * 1. Client variables: These variables are used in the client-side code (src folder). + * 2. Build-time variables: These variables are used in the build process (app.config.ts file). + * Import this file into the `app.config.ts` file to use environment variables during the build process. The client variables can then be passed to the client-side using the extra field in the `app.config.ts` file. + * To access the client environment variables in your `src` folder, you can import them from `@env`. For example: `import Env from '@env'`. + */ +/** + * 1st part: Import packages and Load your env variables + * we use dotenv to load the correct variables from the .env file based on the APP_ENV variable (default is development) + * APP_ENV is passed as an inline variable while executing the command, for example: APP_ENV=staging pnpm build:android + */ +const z = require('zod'); + +const packageJSON = require('./package.json'); +const path = require('path'); +const APP_ENV = process.env.APP_ENV ?? 'development'; +const envPath = path.resolve(__dirname, `.env.${APP_ENV}`); + +require('dotenv').config({ + path: envPath, +}); + +/** + * 2nd part: Define some static variables for the app + * Such as: bundle id, package name, app name. + * + * You can add them to the .env file but we think it's better to keep them here as as we use prefix to generate this values based on the APP_ENV + * for example: if the APP_ENV is staging, the bundle id will be com.unit.staging + */ + +// TODO: Replace these values with your own + +const BUNDLE_ID = 'com.resgrid.unit'; // ios bundle id +const PACKAGE = 'com.resgrid.unit'; // android package name +const NAME = 'Resgrid Unit'; // app name +const EXPO_ACCOUNT_OWNER = 'resgrid'; // expo account owner +const EAS_PROJECT_ID = '6beb03e6-f639-4f35-bef7-5cfb5f173218'; // eas project id +const SCHEME = 'ResgridUnit'; // app scheme + +/** + * We declare a function withEnvSuffix that will add a suffix to the variable name based on the APP_ENV + * Add a suffix to variable env based on APP_ENV + * @param {string} name + * @returns {string} + */ + +const withEnvSuffix = (name) => { + return APP_ENV === 'production' ? name : `${name}.${APP_ENV}`; +}; + +/** + * 2nd part: Define your env variables schema + * we use zod to define our env variables schema + * + * we split the env variables into two parts: + * 1. client: These variables are used in the client-side code (`src` folder). + * 2. buildTime: These variables are used in the build process (app.config.ts file). You can think of them as server-side variables. + * + * Main rules: + * 1. If you need your variable on the client-side, you should add it to the client schema; otherwise, you should add it to the buildTime schema. + * 2. Whenever you want to add a new variable, you should add it to the correct schema based on the previous rule, then you should add it to the corresponding object (_clientEnv or _buildTimeEnv). + * + * Note: `z.string()` means that the variable exists and can be an empty string, but not `undefined`. + * If you want to make the variable required, you should use `z.string().min(1)` instead. + * Read more about zod here: https://zod.dev/?id=strings + * + */ + +const client = z.object({ + APP_ENV: z.enum(['development', 'staging', 'internal', 'production']), + NAME: z.string(), + SCHEME: z.string(), + BUNDLE_ID: z.string(), + PACKAGE: z.string(), + VERSION: z.string(), + ANDROID_VERSION_CODE: z.number(), + + // ADD YOUR CLIENT ENV VARS HERE + BASE_API_URL: z.string(), + API_VERSION: z.string(), + RESGRID_API_URL: z.string(), + CHANNEL_API_URL: z.string(), + CHANNEL_HUB_NAME: z.string(), + REALTIME_GEO_HUB_NAME: z.string(), + LOGGING_KEY: z.string(), + APP_KEY: z.string(), + UNIT_MAPBOX_PUBKEY: z.string(), + UNIT_MAPBOX_DLKEY: z.string(), + IS_MOBILE_APP: z.boolean(), + SENTRY_DSN: z.string(), + POSTHOG_API_KEY: z.string(), + POSTHOG_HOST: z.string(), +}); + +const buildTime = z.object({ + EXPO_ACCOUNT_OWNER: z.string(), + EAS_PROJECT_ID: z.string(), + // ADD YOUR BUILD TIME ENV VARS HERE +}); + +/** + * @type {Record , unknown>} + */ +const _clientEnv = { + APP_ENV, + NAME: NAME, + SCHEME: SCHEME, + BUNDLE_ID: withEnvSuffix(BUNDLE_ID), + PACKAGE: withEnvSuffix(PACKAGE), + VERSION: packageJSON.version, + ANDROID_VERSION_CODE: parseInt(packageJSON.versionCode), + + // ADD YOUR ENV VARS HERE TOO + BASE_API_URL: process.env.UNIT_BASE_API_URL || 'https://qaapi.resgrid.dev', + API_VERSION: process.env.UNIT_API_VERSION || 'v4', + RESGRID_API_URL: process.env.UNIT_RESGRID_API_URL || '/api/v4', + CHANNEL_API_URL: process.env.UNIT_CHANNEL_API_URL || 'https://qaevents.resgrid.dev/', + CHANNEL_HUB_NAME: process.env.UNIT_CHANNEL_HUB_NAME || 'eventingHub', + REALTIME_GEO_HUB_NAME: process.env.UNIT_REALTIME_GEO_HUB_NAME || 'geolocationHub', + LOGGING_KEY: process.env.UNIT_LOGGING_KEY || '', + APP_KEY: process.env.UNIT_APP_KEY || '', + IS_MOBILE_APP: true, // or whatever default you want + UNIT_MAPBOX_PUBKEY: process.env.UNIT_MAPBOX_PUBKEY || '', + UNIT_MAPBOX_DLKEY: process.env.UNIT_MAPBOX_DLKEY || '', + SENTRY_DSN: process.env.UNIT_SENTRY_DSN || '', + POSTHOG_API_KEY: process.env.POSTHOG_API_KEY || '', + POSTHOG_HOST: process.env.POSTHOG_HOST || 'https://us.i.posthog.com', +}; + +/** + * @type {Record , unknown>} + */ +const _buildTimeEnv = { + EXPO_ACCOUNT_OWNER, + EAS_PROJECT_ID, + // ADD YOUR ENV VARS HERE TOO +}; + +/** + * 3rd part: Merge and Validate your env variables + * We use zod to validate our env variables based on the schema we defined above + * If the validation fails we throw an error and log the error to the console with a detailed message about missed variables + * If the validation passes we export the merged and parsed env variables to be used in the app.config.ts file as well as a ClientEnv object to be used in the client-side code + **/ +const _env = { + ..._clientEnv, + ..._buildTimeEnv, +}; + +const merged = buildTime.merge(client); +const parsed = merged.safeParse(_env); + +if (parsed.success === false) { + console.error( + '❌ Invalid environment variables:', + parsed.error.flatten().fieldErrors, + + `\n❌ Missing variables in .env.${APP_ENV} file, Make sure all required variables are defined in the .env.${APP_ENV} file.`, + `\n💡 Tip: If you recently updated the .env.${APP_ENV} file and the error still persists, try restarting the server with the -c flag to clear the cache.` + ); + throw new Error('Invalid environment variables, Check terminal for more details '); +} + +const Env = parsed.data; +const ClientEnv = client.parse(_clientEnv); + +module.exports = { + Env, + ClientEnv, + withEnvSuffix, +}; diff --git a/expo-env.d.ts b/expo-env.d.ts new file mode 100644 index 0000000..5411fdd --- /dev/null +++ b/expo-env.d.ts @@ -0,0 +1,3 @@ +/// + +// NOTE: This file should not be edited and should be in your git ignore \ No newline at end of file diff --git a/global.css b/global.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/global.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/gluestack-ui.config.json b/gluestack-ui.config.json new file mode 100644 index 0000000..ca842a1 --- /dev/null +++ b/gluestack-ui.config.json @@ -0,0 +1,231 @@ +{ + "tailwind": { + "config": "tailwind.config.js", + "css": "global.css" + }, + "app": { + "entry": "app/_layout.tsx", + "components": "components/ui" + }, + "tokens": { + "colors": { + "primary50": "$primary.50", + "primary100": "$primary.100", + "primary200": "$primary.200", + "primary300": "$primary.300", + "primary400": "$primary.400", + "primary500": "$primary.500", + "primary600": "$primary.600", + "primary700": "$primary.700", + "primary800": "$primary.800", + "primary900": "$primary.900", + "primary950": "$primary.950", + + "secondary50": "$secondary.50", + "secondary100": "$secondary.100", + "secondary200": "$secondary.200", + "secondary300": "$secondary.300", + "secondary400": "$secondary.400", + "secondary500": "$secondary.500", + "secondary600": "$secondary.600", + "secondary700": "$secondary.700", + "secondary800": "$secondary.800", + "secondary900": "$secondary.900", + "secondary950": "$secondary.950", + + "success50": "$success.50", + "success100": "$success.100", + "success200": "$success.200", + "success300": "$success.300", + "success400": "$success.400", + "success500": "$success.500", + "success600": "$success.600", + "success700": "$success.700", + "success800": "$success.800", + "success900": "$success.900", + "success950": "$success.950", + + "warning50": "$warning.50", + "warning100": "$warning.100", + "warning200": "$warning.200", + "warning300": "$warning.300", + "warning400": "$warning.400", + "warning500": "$warning.500", + "warning600": "$warning.600", + "warning700": "$warning.700", + "warning800": "$warning.800", + "warning900": "$warning.900", + "warning950": "$warning.950", + + "danger50": "$danger.50", + "danger100": "$danger.100", + "danger200": "$danger.200", + "danger300": "$danger.300", + "danger400": "$danger.400", + "danger500": "$danger.500", + "danger600": "$danger.600", + "danger700": "$danger.700", + "danger800": "$danger.800", + "danger900": "$danger.900", + "danger950": "$danger.950", + + "light": { + "background": "$light.background", + "surface": "$light.surface", + "text": "$light.text", + "textSecondary": "$light.textSecondary", + "border": "$light.border" + }, + + "dark": { + "background": "$dark.background", + "surface": "$dark.surface", + "text": "$dark.text", + "textSecondary": "$dark.textSecondary", + "border": "$dark.border" + } + }, + "space": { + "0.5": "$0.5", + "1": "$1", + "1.5": "$1.5", + "2": "$2", + "2.5": "$2.5", + "3": "$3", + "3.5": "$3.5", + "4": "$4", + "5": "$5", + "6": "$6", + "7": "$7", + "8": "$8", + "9": "$9", + "10": "$10", + "12": "$12", + "16": "$16", + "20": "$20", + "24": "$24" + }, + "radii": { + "xs": "$xs", + "sm": "$sm", + "md": "$md", + "lg": "$lg", + "xl": "$xl", + "2xl": "$2xl", + "3xl": "$3xl", + "full": "$full" + }, + "fontSizes": { + "xs": 12, + "sm": 14, + "md": 16, + "lg": 18, + "xl": 20, + "2xl": 24, + "3xl": 30, + "4xl": 36, + "5xl": 48, + "6xl": 60 + }, + "fontWeights": { + "hairline": 100, + "thin": 200, + "light": 300, + "normal": 400, + "medium": 500, + "semibold": 600, + "bold": 700, + "extrabold": 800, + "black": 900 + }, + "lineHeights": { + "xs": 1.25, + "sm": 1.375, + "md": 1.5, + "lg": 1.625, + "xl": 1.75, + "2xl": 2, + "3xl": 2.5, + "4xl": 3, + "5xl": 4 + } + }, + "components": { + "Button": { + "theme": { + "variants": { + "solid": { + "bg": "$primary500", + "color": "white", + "_hover": { + "bg": "$primary600" + }, + "_pressed": { + "bg": "$primary700" + }, + "_disabled": { + "bg": "$primary200", + "opacity": 0.6 + } + }, + "outline": { + "borderWidth": 1, + "borderColor": "$primary500", + "color": "$primary500", + "_hover": { + "bg": "$primary50" + }, + "_pressed": { + "bg": "$primary100" + }, + "_disabled": { + "borderColor": "$primary200", + "color": "$primary200", + "opacity": 0.6 + } + }, + "ghost": { + "color": "$primary500", + "_hover": { + "bg": "$primary50" + }, + "_pressed": { + "bg": "$primary100" + }, + "_disabled": { + "color": "$primary200", + "opacity": 0.6 + } + } + }, + "sizes": { + "xs": { + "px": "$2", + "py": "$1", + "fontSize": "$xs" + }, + "sm": { + "px": "$3", + "py": "$1.5", + "fontSize": "$sm" + }, + "md": { + "px": "$4", + "py": "$2", + "fontSize": "$md" + }, + "lg": { + "px": "$5", + "py": "$2.5", + "fontSize": "$lg" + }, + "xl": { + "px": "$6", + "py": "$3", + "fontSize": "$xl" + } + } + } + } + } +} diff --git a/imgs/UnitCallsList.png b/imgs/UnitCallsList.png deleted file mode 100644 index 1cd9c93..0000000 Binary files a/imgs/UnitCallsList.png and /dev/null differ diff --git a/imgs/UnitMainScreen.png b/imgs/UnitMainScreen.png deleted file mode 100644 index 074538d..0000000 Binary files a/imgs/UnitMainScreen.png and /dev/null differ diff --git a/imgs/UnitPTT.png b/imgs/UnitPTT.png deleted file mode 100644 index 29081df..0000000 Binary files a/imgs/UnitPTT.png and /dev/null differ diff --git a/imgs/UnitViewCall.png b/imgs/UnitViewCall.png deleted file mode 100644 index f28fad0..0000000 Binary files a/imgs/UnitViewCall.png and /dev/null differ diff --git a/ionic.config.json b/ionic.config.json deleted file mode 100644 index 0d55851..0000000 --- a/ionic.config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "Resgrid Unit", - "integrations": { - "capacitor": {} - }, - "type": "angular" -} diff --git a/ios/.gitignore b/ios/.gitignore deleted file mode 100644 index 01ad520..0000000 --- a/ios/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -App/build -App/Pods -App/App/public -DerivedData -xcuserdata - -# Cordova plugins for Capacitor -capacitor-cordova-ios-plugins - diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj deleted file mode 100644 index 1c55afa..0000000 --- a/ios/App/App.xcodeproj/project.pbxproj +++ /dev/null @@ -1,575 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 48; - objects = { - -/* Begin PBXBuildFile section */ - 293394D1281B7A870040DA95 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 293394D0281B7A870040DA95 /* AudioToolbox.framework */; }; - 294330DC27F826400066B888 /* c18.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330BE27F8263E0066B888 /* c18.caf */; }; - 294330DD27F826400066B888 /* c22.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330BF27F8263E0066B888 /* c22.caf */; }; - 294330DE27F826400066B888 /* callemergency.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330C027F8263E0066B888 /* callemergency.caf */; }; - 294330DF27F826400066B888 /* c15.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330C127F8263E0066B888 /* c15.caf */; }; - 294330E027F826400066B888 /* c11.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330C227F8263E0066B888 /* c11.caf */; }; - 294330E127F826400066B888 /* c6.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330C327F8263E0066B888 /* c6.caf */; }; - 294330E227F826400066B888 /* c9.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330C427F8263F0066B888 /* c9.caf */; }; - 294330E327F826400066B888 /* c20.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330C527F8263F0066B888 /* c20.caf */; }; - 294330E427F826400066B888 /* callhigh.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330C627F8263F0066B888 /* callhigh.caf */; }; - 294330E527F826400066B888 /* c12.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330C727F8263F0066B888 /* c12.caf */; }; - 294330E627F826400066B888 /* c10.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330C827F8263F0066B888 /* c10.caf */; }; - 294330E727F826400066B888 /* c19.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330C927F8263F0066B888 /* c19.caf */; }; - 294330E827F826400066B888 /* c16.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330CA27F8263F0066B888 /* c16.caf */; }; - 294330E927F826400066B888 /* c23.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330CB27F8263F0066B888 /* c23.caf */; }; - 294330EA27F826400066B888 /* c21.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330CC27F8263F0066B888 /* c21.caf */; }; - 294330EB27F826400066B888 /* calllow.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330CD27F8263F0066B888 /* calllow.caf */; }; - 294330EC27F826400066B888 /* c13.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330CE27F8263F0066B888 /* c13.caf */; }; - 294330ED27F826400066B888 /* c24.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330CF27F8263F0066B888 /* c24.caf */; }; - 294330EE27F826400066B888 /* c2.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330D027F8263F0066B888 /* c2.caf */; }; - 294330EF27F826400066B888 /* c4.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330D127F8263F0066B888 /* c4.caf */; }; - 294330F027F826400066B888 /* c17.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330D227F8263F0066B888 /* c17.caf */; }; - 294330F127F826400066B888 /* c8.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330D327F8263F0066B888 /* c8.caf */; }; - 294330F227F826400066B888 /* c1.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330D427F8263F0066B888 /* c1.caf */; }; - 294330F327F826400066B888 /* c3.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330D527F8263F0066B888 /* c3.caf */; }; - 294330F427F826400066B888 /* c25.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330D627F8263F0066B888 /* c25.caf */; }; - 294330F527F826400066B888 /* callmedium.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330D727F8263F0066B888 /* callmedium.caf */; }; - 294330F627F826400066B888 /* c14.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330D827F8263F0066B888 /* c14.caf */; }; - 294330F727F826400066B888 /* beep.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330D927F8263F0066B888 /* beep.caf */; }; - 294330F827F826400066B888 /* c5.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330DA27F826400066B888 /* c5.caf */; }; - 294330F927F826400066B888 /* c7.caf in Resources */ = {isa = PBXBuildFile; fileRef = 294330DB27F826400066B888 /* c7.caf */; }; - 2FAD9763203C412B000D30F8 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2FAD9762203C412B000D30F8 /* config.xml */; }; - 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; }; - 504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; }; - 504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; }; - 504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; }; - 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; }; - 50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; }; - A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 293394CF281998000040DA95 /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = ""; }; - 293394D0281B7A870040DA95 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - 294330BE27F8263E0066B888 /* c18.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c18.caf; path = ../../../src/assets/audio/caf/c18.caf; sourceTree = ""; }; - 294330BF27F8263E0066B888 /* c22.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c22.caf; path = ../../../src/assets/audio/caf/c22.caf; sourceTree = ""; }; - 294330C027F8263E0066B888 /* callemergency.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = callemergency.caf; path = ../../../src/assets/audio/caf/callemergency.caf; sourceTree = ""; }; - 294330C127F8263E0066B888 /* c15.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c15.caf; path = ../../../src/assets/audio/caf/c15.caf; sourceTree = ""; }; - 294330C227F8263E0066B888 /* c11.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c11.caf; path = ../../../src/assets/audio/caf/c11.caf; sourceTree = ""; }; - 294330C327F8263E0066B888 /* c6.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c6.caf; path = ../../../src/assets/audio/caf/c6.caf; sourceTree = ""; }; - 294330C427F8263F0066B888 /* c9.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c9.caf; path = ../../../src/assets/audio/caf/c9.caf; sourceTree = ""; }; - 294330C527F8263F0066B888 /* c20.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c20.caf; path = ../../../src/assets/audio/caf/c20.caf; sourceTree = ""; }; - 294330C627F8263F0066B888 /* callhigh.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = callhigh.caf; path = ../../../src/assets/audio/caf/callhigh.caf; sourceTree = ""; }; - 294330C727F8263F0066B888 /* c12.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c12.caf; path = ../../../src/assets/audio/caf/c12.caf; sourceTree = ""; }; - 294330C827F8263F0066B888 /* c10.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c10.caf; path = ../../../src/assets/audio/caf/c10.caf; sourceTree = ""; }; - 294330C927F8263F0066B888 /* c19.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c19.caf; path = ../../../src/assets/audio/caf/c19.caf; sourceTree = ""; }; - 294330CA27F8263F0066B888 /* c16.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c16.caf; path = ../../../src/assets/audio/caf/c16.caf; sourceTree = ""; }; - 294330CB27F8263F0066B888 /* c23.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c23.caf; path = ../../../src/assets/audio/caf/c23.caf; sourceTree = ""; }; - 294330CC27F8263F0066B888 /* c21.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c21.caf; path = ../../../src/assets/audio/caf/c21.caf; sourceTree = ""; }; - 294330CD27F8263F0066B888 /* calllow.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = calllow.caf; path = ../../../src/assets/audio/caf/calllow.caf; sourceTree = ""; }; - 294330CE27F8263F0066B888 /* c13.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c13.caf; path = ../../../src/assets/audio/caf/c13.caf; sourceTree = ""; }; - 294330CF27F8263F0066B888 /* c24.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c24.caf; path = ../../../src/assets/audio/caf/c24.caf; sourceTree = ""; }; - 294330D027F8263F0066B888 /* c2.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c2.caf; path = ../../../src/assets/audio/caf/c2.caf; sourceTree = ""; }; - 294330D127F8263F0066B888 /* c4.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c4.caf; path = ../../../src/assets/audio/caf/c4.caf; sourceTree = ""; }; - 294330D227F8263F0066B888 /* c17.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c17.caf; path = ../../../src/assets/audio/caf/c17.caf; sourceTree = ""; }; - 294330D327F8263F0066B888 /* c8.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c8.caf; path = ../../../src/assets/audio/caf/c8.caf; sourceTree = ""; }; - 294330D427F8263F0066B888 /* c1.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c1.caf; path = ../../../src/assets/audio/caf/c1.caf; sourceTree = ""; }; - 294330D527F8263F0066B888 /* c3.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c3.caf; path = ../../../src/assets/audio/caf/c3.caf; sourceTree = ""; }; - 294330D627F8263F0066B888 /* c25.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c25.caf; path = ../../../src/assets/audio/caf/c25.caf; sourceTree = ""; }; - 294330D727F8263F0066B888 /* callmedium.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = callmedium.caf; path = ../../../src/assets/audio/caf/callmedium.caf; sourceTree = ""; }; - 294330D827F8263F0066B888 /* c14.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c14.caf; path = ../../../src/assets/audio/caf/c14.caf; sourceTree = ""; }; - 294330D927F8263F0066B888 /* beep.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = beep.caf; path = ../../../src/assets/audio/caf/beep.caf; sourceTree = ""; }; - 294330DA27F826400066B888 /* c5.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c5.caf; path = ../../../src/assets/audio/caf/c5.caf; sourceTree = ""; }; - 294330DB27F826400066B888 /* c7.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = c7.caf; path = ../../../src/assets/audio/caf/c7.caf; sourceTree = ""; }; - 299EDF0427FAB814007AA2C7 /* AppRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AppRelease.entitlements; sourceTree = ""; }; - 2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = ""; }; - 50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = ""; }; - 504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 504EC30C1FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 504EC30E1FED79650016851F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = ""; }; - AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; }; - FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 504EC3011FED79650016851F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */, - 293394D1281B7A870040DA95 /* AudioToolbox.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = { - isa = PBXGroup; - children = ( - 293394D0281B7A870040DA95 /* AudioToolbox.framework */, - AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 504EC2FB1FED79650016851F = { - isa = PBXGroup; - children = ( - 504EC3061FED79650016851F /* App */, - 504EC3051FED79650016851F /* Products */, - 7F8756D8B27F46E3366F6CEA /* Pods */, - 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */, - ); - sourceTree = ""; - }; - 504EC3051FED79650016851F /* Products */ = { - isa = PBXGroup; - children = ( - 504EC3041FED79650016851F /* App.app */, - ); - name = Products; - sourceTree = ""; - }; - 504EC3061FED79650016851F /* App */ = { - isa = PBXGroup; - children = ( - 293394CF281998000040DA95 /* App.entitlements */, - 299EDF0427FAB814007AA2C7 /* AppRelease.entitlements */, - 294330D927F8263F0066B888 /* beep.caf */, - 294330D427F8263F0066B888 /* c1.caf */, - 294330D027F8263F0066B888 /* c2.caf */, - 294330D527F8263F0066B888 /* c3.caf */, - 294330D127F8263F0066B888 /* c4.caf */, - 294330DA27F826400066B888 /* c5.caf */, - 294330C327F8263E0066B888 /* c6.caf */, - 294330DB27F826400066B888 /* c7.caf */, - 294330D327F8263F0066B888 /* c8.caf */, - 294330C427F8263F0066B888 /* c9.caf */, - 294330C827F8263F0066B888 /* c10.caf */, - 294330C227F8263E0066B888 /* c11.caf */, - 294330C727F8263F0066B888 /* c12.caf */, - 294330CE27F8263F0066B888 /* c13.caf */, - 294330D827F8263F0066B888 /* c14.caf */, - 294330C127F8263E0066B888 /* c15.caf */, - 294330CA27F8263F0066B888 /* c16.caf */, - 294330D227F8263F0066B888 /* c17.caf */, - 294330BE27F8263E0066B888 /* c18.caf */, - 294330C927F8263F0066B888 /* c19.caf */, - 294330C527F8263F0066B888 /* c20.caf */, - 294330CC27F8263F0066B888 /* c21.caf */, - 294330BF27F8263E0066B888 /* c22.caf */, - 294330CB27F8263F0066B888 /* c23.caf */, - 294330CF27F8263F0066B888 /* c24.caf */, - 294330D627F8263F0066B888 /* c25.caf */, - 294330C027F8263E0066B888 /* callemergency.caf */, - 294330C627F8263F0066B888 /* callhigh.caf */, - 294330CD27F8263F0066B888 /* calllow.caf */, - 294330D727F8263F0066B888 /* callmedium.caf */, - 50379B222058CBB4000EE86E /* capacitor.config.json */, - 504EC3071FED79650016851F /* AppDelegate.swift */, - 504EC30B1FED79650016851F /* Main.storyboard */, - 504EC30E1FED79650016851F /* Assets.xcassets */, - 504EC3101FED79650016851F /* LaunchScreen.storyboard */, - 504EC3131FED79650016851F /* Info.plist */, - 2FAD9762203C412B000D30F8 /* config.xml */, - 50B271D01FEDC1A000F3C39B /* public */, - ); - path = App; - sourceTree = ""; - }; - 7F8756D8B27F46E3366F6CEA /* Pods */ = { - isa = PBXGroup; - children = ( - FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */, - AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 504EC3031FED79650016851F /* App */ = { - isa = PBXNativeTarget; - buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */; - buildPhases = ( - 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */, - 2F33D98EDE024F71F833A227 /* [CP] Prepare Artifacts */, - 504EC3001FED79650016851F /* Sources */, - 504EC3011FED79650016851F /* Frameworks */, - 504EC3021FED79650016851F /* Resources */, - 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */, - F8A6274B25BA5E440A2A1E75 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = App; - productName = App; - productReference = 504EC3041FED79650016851F /* App.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 504EC2FC1FED79650016851F /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 0920; - TargetAttributes = { - 504EC3031FED79650016851F = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1100; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */; - compatibilityVersion = "Xcode 8.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 504EC2FB1FED79650016851F; - productRefGroup = 504EC3051FED79650016851F /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 504EC3031FED79650016851F /* App */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 504EC3021FED79650016851F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 294330ED27F826400066B888 /* c24.caf in Resources */, - 294330E727F826400066B888 /* c19.caf in Resources */, - 294330EB27F826400066B888 /* calllow.caf in Resources */, - 294330F527F826400066B888 /* callmedium.caf in Resources */, - 294330F027F826400066B888 /* c17.caf in Resources */, - 294330E227F826400066B888 /* c9.caf in Resources */, - 294330DC27F826400066B888 /* c18.caf in Resources */, - 294330E927F826400066B888 /* c23.caf in Resources */, - 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */, - 294330E027F826400066B888 /* c11.caf in Resources */, - 50B271D11FEDC1A000F3C39B /* public in Resources */, - 294330E527F826400066B888 /* c12.caf in Resources */, - 504EC30F1FED79650016851F /* Assets.xcassets in Resources */, - 294330EA27F826400066B888 /* c21.caf in Resources */, - 294330F127F826400066B888 /* c8.caf in Resources */, - 294330F827F826400066B888 /* c5.caf in Resources */, - 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */, - 294330F727F826400066B888 /* beep.caf in Resources */, - 294330EF27F826400066B888 /* c4.caf in Resources */, - 294330E827F826400066B888 /* c16.caf in Resources */, - 504EC30D1FED79650016851F /* Main.storyboard in Resources */, - 294330DD27F826400066B888 /* c22.caf in Resources */, - 294330E427F826400066B888 /* callhigh.caf in Resources */, - 294330F327F826400066B888 /* c3.caf in Resources */, - 2FAD9763203C412B000D30F8 /* config.xml in Resources */, - 294330F427F826400066B888 /* c25.caf in Resources */, - 294330EC27F826400066B888 /* c13.caf in Resources */, - 294330E327F826400066B888 /* c20.caf in Resources */, - 294330F927F826400066B888 /* c7.caf in Resources */, - 294330EE27F826400066B888 /* c2.caf in Resources */, - 294330DF27F826400066B888 /* c15.caf in Resources */, - 294330F227F826400066B888 /* c1.caf in Resources */, - 294330E627F826400066B888 /* c10.caf in Resources */, - 294330F627F826400066B888 /* c14.caf in Resources */, - 294330DE27F826400066B888 /* callemergency.caf in Resources */, - 294330E127F826400066B888 /* c6.caf in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 2F33D98EDE024F71F833A227 /* [CP] Prepare Artifacts */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Prepare Artifacts"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-artifacts.sh\"\n"; - showEnvVarsInLog = 0; - }; - 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - F8A6274B25BA5E440A2A1E75 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 504EC3001FED79650016851F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 504EC3081FED79650016851F /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 504EC30B1FED79650016851F /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 504EC30C1FED79650016851F /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 504EC3101FED79650016851F /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 504EC3111FED79650016851F /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 504EC3141FED79650016851F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 504EC3151FED79650016851F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 504EC3171FED79650016851F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = App/App.entitlements; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = S6M2JNAN23; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = QKQVAJMTCN; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = App/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\""; - PRODUCT_BUNDLE_IDENTIFIER = com.resgrid.unit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "match Development com.resgrid.unit"; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development com.resgrid.unit"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 504EC3181FED79650016851F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = App/AppRelease.entitlements; - CODE_SIGN_IDENTITY = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = S6M2JNAN23; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = QKQVAJMTCN; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = App/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.resgrid.unit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "match AdHoc com.resgrid.unit"; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AdHoc com.resgrid.unit"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 504EC3141FED79650016851F /* Debug */, - 504EC3151FED79650016851F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 504EC3171FED79650016851F /* Debug */, - 504EC3181FED79650016851F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 504EC2FC1FED79650016851F /* Project object */; -} diff --git a/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 42daef8..0000000 --- a/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/ios/App/App.xcworkspace/contents.xcworkspacedata b/ios/App/App.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index b301e82..0000000 --- a/ios/App/App.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/ios/App/App/App.entitlements b/ios/App/App/App.entitlements deleted file mode 100644 index 1ca50cc..0000000 --- a/ios/App/App/App.entitlements +++ /dev/null @@ -1,8 +0,0 @@ - - - - - com.apple.developer.usernotifications.time-sensitive - - - diff --git a/ios/App/App/AppDelegate.swift b/ios/App/App/AppDelegate.swift deleted file mode 100644 index ef2206e..0000000 --- a/ios/App/App/AppDelegate.swift +++ /dev/null @@ -1,59 +0,0 @@ -import UIKit -import Capacitor - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - return true - } - - func applicationWillResignActive(_ application: UIApplication) { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. - } - - func applicationDidEnterBackground(_ application: UIApplication) { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - } - - func applicationWillEnterForeground(_ application: UIApplication) { - // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. - } - - func applicationDidBecomeActive(_ application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - } - - func applicationWillTerminate(_ application: UIApplication) { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - } - - func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { - // Called when the app was launched with a url. Feel free to add additional processing here, - // but if you want the App API to support tracking app url opens, make sure to keep this call - return ApplicationDelegateProxy.shared.application(app, open: url, options: options) - } - - func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { - // Called when the app was launched with an activity, including Universal Links. - // Feel free to add additional processing here, but if you want the App API to support - // tracking app url opens, make sure to keep this call - return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler) - } - - func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { - NotificationCenter.default.post(name: .capacitorDidRegisterForRemoteNotifications, object: deviceToken) - } - - func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { - NotificationCenter.default.post(name: .capacitorDidFailToRegisterForRemoteNotifications, object: error) - } - - -} - diff --git a/ios/App/App/AppRelease.entitlements b/ios/App/App/AppRelease.entitlements deleted file mode 100644 index 38c24b0..0000000 --- a/ios/App/App/AppRelease.entitlements +++ /dev/null @@ -1,10 +0,0 @@ - - - - - aps-environment - production - com.apple.developer.usernotifications.time-sensitive - - - diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 1e2d708..0000000 --- a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images" : [ - { - "filename" : "Icon-App-20x20@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "Icon-App-20x20@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "filename" : "Icon-App-29x29@1x.png", - "idiom" : "iphone", - "scale" : "1x", - "size" : "29x29" - }, - { - "filename" : "Icon-App-29x29@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "Icon-App-29x29@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "filename" : "Icon-App-40x40@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "Icon-App-40x40@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "filename" : "Icon-App-60x60@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "filename" : "Icon-App-60x60@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "filename" : "Icon-App-20x20@1x.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "filename" : "Icon-App-20x20@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "Icon-App-29x29@1x.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "filename" : "Icon-App-29x29@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "Icon-App-40x40@1x.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "filename" : "Icon-App-40x40@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "Icon-App-76x76@1x.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "filename" : "Icon-App-76x76@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "filename" : "Icon-App-83.5x83.5@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, - { - "filename" : "ItunesArtwork@2x.png", - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 9ab117f..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 3ec0ca6..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 4b277ec..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index bd6786b..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index 44c33ef..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index efe9f86..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 3ec0ca6..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 0678b6d..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index 0708f4e..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 0708f4e..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index e31a30d..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c6a0b6e..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index e884917..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 9d242c6..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png b/ios/App/App/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png deleted file mode 100644 index cbacc3a..0000000 Binary files a/ios/App/App/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/Contents.json b/ios/App/App/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/ios/App/App/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json b/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json deleted file mode 100644 index d7d96a6..0000000 --- a/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "splash-2732x2732-2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "splash-2732x2732-1.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "splash-2732x2732.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png deleted file mode 100644 index 33ea6c9..0000000 Binary files a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png deleted file mode 100644 index 33ea6c9..0000000 Binary files a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png b/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png deleted file mode 100644 index 33ea6c9..0000000 Binary files a/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/splash-screen-01-1.imageset/Contents.json b/ios/App/App/Assets.xcassets/splash-screen-01-1.imageset/Contents.json deleted file mode 100644 index d75f182..0000000 --- a/ios/App/App/Assets.xcassets/splash-screen-01-1.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "splash-screen-01-1.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/App/App/Assets.xcassets/splash-screen-01-1.imageset/splash-screen-01-1.png b/ios/App/App/Assets.xcassets/splash-screen-01-1.imageset/splash-screen-01-1.png deleted file mode 100644 index 8e5b465..0000000 Binary files a/ios/App/App/Assets.xcassets/splash-screen-01-1.imageset/splash-screen-01-1.png and /dev/null differ diff --git a/ios/App/App/Assets.xcassets/splash-screen-02-1.imageset/Contents.json b/ios/App/App/Assets.xcassets/splash-screen-02-1.imageset/Contents.json deleted file mode 100644 index 166af5a..0000000 --- a/ios/App/App/Assets.xcassets/splash-screen-02-1.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "splash-screen-02-1.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/App/App/Assets.xcassets/splash-screen-02-1.imageset/splash-screen-02-1.png b/ios/App/App/Assets.xcassets/splash-screen-02-1.imageset/splash-screen-02-1.png deleted file mode 100644 index 2f84960..0000000 Binary files a/ios/App/App/Assets.xcassets/splash-screen-02-1.imageset/splash-screen-02-1.png and /dev/null differ diff --git a/ios/App/App/Base.lproj/LaunchScreen.storyboard b/ios/App/App/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 66288ee..0000000 --- a/ios/App/App/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ios/App/App/Base.lproj/Main.storyboard b/ios/App/App/Base.lproj/Main.storyboard deleted file mode 100644 index b44df7b..0000000 --- a/ios/App/App/Base.lproj/Main.storyboard +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/ios/App/App/Info.plist b/ios/App/App/Info.plist deleted file mode 100644 index b1b6f05..0000000 --- a/ios/App/App/Info.plist +++ /dev/null @@ -1,90 +0,0 @@ - - - - - BGTaskSchedulerPermittedIdentifiers - - $(PRODUCT_BUNDLE_IDENTIFIER) - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - Resgrid Unit - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - ManualInitAudioDevice - FALSE - NSAppleMusicUsageDescription - Media library is used for Call image attachments - NSBluetoothAlwaysUsageDescription - Bluetooth used for headset and Push-To-Talk - NSBluetoothPeripheralUsageDescription - Bluetooth used for headset and Push-To-Talk - NSCameraUsageDescription - Camera is used for call files and video calls - NSContactsUsageDescription - Contacts used for push to talk and calling - NSLocationAlwaysAndWhenInUseUsageDescription - Location is used for unit tracking - NSLocationAlwaysUsageDescription - Location is used for unit tracking - NSLocationUsageDescription - Location is used for unit tracking - NSLocationWhenInUseUsageDescription - Location is used for unit tracking - NSMicrophoneUsageDescription - Microphone is used for Push-To-Talk feature - NSPhotoLibraryAddUsageDescription - Photo library used to attaching photos to calls - NSPhotoLibraryUsageDescription - Photo library used to attaching photos to calls - UIBackgroundModes - - audio - bluetooth-central - fetch - location - processing - remote-notification - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - UseManualLayoutRenderer - - - diff --git a/ios/App/App/capacitor.config.json b/ios/App/App/capacitor.config.json deleted file mode 100644 index a802917..0000000 --- a/ios/App/App/capacitor.config.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "appId": "com.resgrid.unit", - "appName": "Resgrid Unit", - "webDir": "www", - "bundledWebRuntime": false, - "android": { - "allowMixedContent": true, - "useLegacyBridge": true - }, - "server": { - "allowNavigation": [] - }, - "plugins": { - "PushNotifications": { - "presentationOptions": [ - "badge", - "sound", - "alert" - ] - }, - "SplashScreen": { - "launchAutoHide": false - }, - "Badge": { - "persist": false, - "autoClear": true - }, - "CapacitorHttp": { - "enabled": true - } - }, - "packageClassList": [ - "BackgroundGeolocation", - "BluetoothLe", - "FileOpenerPlugin", - "KeepAwakePlugin", - "CapacitorSQLitePlugin", - "AppPlugin", - "CAPCameraPlugin", - "DevicePlugin", - "FilesystemPlugin", - "GeolocationPlugin", - "HapticsPlugin", - "KeyboardPlugin", - "CAPNetworkPlugin", - "PreferencesPlugin", - "SplashScreenPlugin", - "StatusBarPlugin", - "BadgePlugin", - "LocalNotificationsPlugin", - "PushNotificationsPlugin", - "ResgridPlugin" - ] -} diff --git a/ios/App/App/config.xml b/ios/App/App/config.xml deleted file mode 100644 index 1b1b0e0..0000000 --- a/ios/App/App/config.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ios/App/Podfile b/ios/App/Podfile deleted file mode 100644 index ff48a2c..0000000 --- a/ios/App/Podfile +++ /dev/null @@ -1,49 +0,0 @@ -require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers' - -platform :ios, '15.0' -use_frameworks! - -# workaround to avoid Xcode caching of Pods that requires -# Product -> Clean Build Folder after new Cordova plugins installed -# Requires CocoaPods 1.6 or newer -install! 'cocoapods', :disable_input_output_paths => true - -def capacitor_pods - pod 'Capacitor', :path => '../../node_modules/@capacitor/ios' - pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' - pod 'CapacitorCommunityBackgroundGeolocation', :path => '../../node_modules/@capacitor-community/background-geolocation' - pod 'CapacitorCommunityBluetoothLe', :path => '../../node_modules/@capacitor-community/bluetooth-le' - pod 'CapacitorCommunityFileOpener', :path => '../../node_modules/@capacitor-community/file-opener' - pod 'CapacitorCommunityKeepAwake', :path => '../../node_modules/@capacitor-community/keep-awake' - pod 'CapacitorCommunitySqlite', :path => '../../node_modules/@capacitor-community/sqlite' - pod 'CapacitorApp', :path => '../../node_modules/@capacitor/app' - pod 'CapacitorCamera', :path => '../../node_modules/@capacitor/camera' - pod 'CapacitorDevice', :path => '../../node_modules/@capacitor/device' - pod 'CapacitorFilesystem', :path => '../../node_modules/@capacitor/filesystem' - pod 'CapacitorGeolocation', :path => '../../node_modules/@capacitor/geolocation' - pod 'CapacitorHaptics', :path => '../../node_modules/@capacitor/haptics' - pod 'CapacitorKeyboard', :path => '../../node_modules/@capacitor/keyboard' - pod 'CapacitorNetwork', :path => '../../node_modules/@capacitor/network' - pod 'CapacitorPreferences', :path => '../../node_modules/@capacitor/preferences' - pod 'CapacitorSplashScreen', :path => '../../node_modules/@capacitor/splash-screen' - pod 'CapacitorStatusBar', :path => '../../node_modules/@capacitor/status-bar' - pod 'CapawesomeCapacitorBadge', :path => '../../node_modules/@capawesome/capacitor-badge' - pod 'ResgridLocalNotifications', :path => '../../node_modules/@resgrid/local-notifications' - pod 'ResgridPushNotifications', :path => '../../node_modules/@resgrid/push-notifications' - pod 'CapacitorPluginResgrid', :path => '../../node_modules/capacitor-plugin-resgrid' -end - -target 'App' do - capacitor_pods - # Add your Pods here -end - -post_install do |installer| - assertDeploymentTarget(installer) - - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end - end - end \ No newline at end of file diff --git a/jest-setup.ts b/jest-setup.ts new file mode 100644 index 0000000..41b3871 --- /dev/null +++ b/jest-setup.ts @@ -0,0 +1,7 @@ +import '@testing-library/react-native/extend-expect'; + +// react-hook form setup for testing +// @ts-ignore +global.window = {}; +// @ts-ignore +global.window = global; diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..2b0241b --- /dev/null +++ b/jest.config.js @@ -0,0 +1,40 @@ +module.exports = { + preset: 'jest-expo', + setupFilesAfterEnv: ['/jest-setup.ts'], + testMatch: ['**/?(*.)+(spec|test).ts?(x)'], + collectCoverageFrom: [ + 'src/**/*.{ts,tsx}', + '!**/coverage/**', + '!**/node_modules/**', + '!**/babel.config.js', + '!**/jest.setup.js', + '!**/docs/**', + '!**/cli/**', + ], + moduleFileExtensions: ['js', 'ts', 'tsx'], + transformIgnorePatterns: [ + `node_modules/(?!(?:.pnpm/)?((jest-)?react-native|@react-native(-community)?|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|@sentry/.*|native-base|react-native-svg))`, + ], + coverageReporters: ['json-summary', ['text', { file: 'coverage.txt' }]], + reporters: [ + 'default', + ['github-actions', { silent: false }], + 'summary', + [ + 'jest-junit', + { + outputDirectory: 'coverage', + outputName: 'jest-junit.xml', + ancestorSeparator: ' › ', + uniqueOutputName: 'false', + suiteNameTemplate: '{filepath}', + classNameTemplate: '{classname}', + titleTemplate: '{title}', + }, + ], + ], + coverageDirectory: '/coverage/', + moduleNameMapper: { + '^@/(.*)$': '/src/$1', + }, +}; diff --git a/karma.conf.js b/karma.conf.js deleted file mode 100644 index 49eb12f..0000000 --- a/karma.conf.js +++ /dev/null @@ -1,44 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - jasmine: { - // you can add configuration options for Jasmine here - // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html - // for example, you can disable the random execution with `random: false` - // or set a specific seed with `seed: 4321` - }, - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - jasmineHtmlReporter: { - suppressAll: true // removes the duplicated traces - }, - coverageReporter: { - dir: require('path').join(__dirname, './coverage/ngv'), - subdir: '.', - reporters: [ - { type: 'html' }, - { type: 'text-summary' } - ] - }, - reporters: ['progress', 'kjhtml'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false, - restartOnFileChange: true - }); -}; diff --git a/lint-staged.config.js b/lint-staged.config.js new file mode 100644 index 0000000..196ef19 --- /dev/null +++ b/lint-staged.config.js @@ -0,0 +1,16 @@ +module.exports = { + '**/*.{js,jsx,ts,tsx}': (filenames) => [ + `npx eslint --fix ${filenames + .map((filename) => `"${filename}"`) + .join(' ')}`, + ], + '**/*.(md|json)': (filenames) => + `npx prettier --write ${filenames + .map((filename) => `"${filename}"`) + .join(' ')}`, + 'src/translations/*.(json)': (filenames) => [ + `npx eslint --fix ${filenames + .map((filename) => `"${filename}"`) + .join(' ')}`, + ], +}; diff --git a/metro.config.js b/metro.config.js new file mode 100644 index 0000000..641614d --- /dev/null +++ b/metro.config.js @@ -0,0 +1,28 @@ +/* eslint-env node */ + +const { getSentryExpoConfig } = require('@sentry/react-native/metro'); +const { getDefaultConfig } = require('expo/metro-config'); +const path = require('path'); +const { withNativeWind } = require('nativewind/metro'); + +const projectRoot = __dirname; +//const config = getDefaultConfig(projectRoot, { +// isCSSEnabled: true, +//}); + +const config = getSentryExpoConfig(__dirname, { + isCSSEnabled: true, +}); + +// 1. Watch all files within the monorepo +// 2. Let Metro know where to resolve packages and in what order +config.resolver.nodeModulesPaths = [path.resolve(projectRoot, 'node_modules')]; + +// Configure path aliases +config.resolver.extraNodeModules = { + '@': path.resolve(__dirname, 'src'), + '@env': path.resolve(__dirname, 'src/lib/env.js'), + '@assets': path.resolve(__dirname, 'assets'), +}; + +module.exports = withNativeWind(config, { input: './global.css' }); diff --git a/nativewind-env.d.ts b/nativewind-env.d.ts new file mode 100644 index 0000000..a13e313 --- /dev/null +++ b/nativewind-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/nginx.conf b/nginx.conf deleted file mode 100644 index 83277f3..0000000 --- a/nginx.conf +++ /dev/null @@ -1,18 +0,0 @@ -events{} - -http { - - include /etc/nginx/mime.types; - - server { - - listen 80; - server_name localhost; - root /usr/share/nginx/html; - index index.html; - - location / { - try_files $uri $uri/ /index.html; - } - } -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index b182184..0000000 --- a/package-lock.json +++ /dev/null @@ -1,22540 +0,0 @@ -{ - "name": "resgrid-unit", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "resgrid-unit", - "version": "1.0.0", - "dependencies": { - "@angular/animations": "^17.3.12", - "@angular/cdk": "^17.0.0", - "@angular/common": "^17.3.12", - "@angular/compiler": "^17.3.12", - "@angular/core": "^17.3.12", - "@angular/forms": "^17.3.12", - "@angular/platform-browser": "^17.3.12", - "@angular/platform-browser-dynamic": "^17.3.12", - "@angular/router": "^17.3.12", - "@capacitor-community/background-geolocation": "^1.2.17", - "@capacitor-community/bluetooth-le": "^6.0.0", - "@capacitor-community/file-opener": "^6.0.0", - "@capacitor-community/keep-awake": "^5.0.0", - "@capacitor-community/sqlite": "^6.0.0", - "@capacitor/android": "^6.1.2", - "@capacitor/app": "^6.0.0", - "@capacitor/camera": "^6.0.0", - "@capacitor/core": "^6.1.0", - "@capacitor/device": "^6.0.0", - "@capacitor/filesystem": "^6.0.0", - "@capacitor/geolocation": "^6.0.0", - "@capacitor/haptics": "^6.0.0", - "@capacitor/ios": "^6.1.2", - "@capacitor/keyboard": "^6.0.0", - "@capacitor/network": "^6.0.0", - "@capacitor/preferences": "^6.0.0", - "@capacitor/splash-screen": "^6.0.0", - "@capacitor/status-bar": "^6.0.0", - "@capawesome/capacitor-badge": "^6.0.0", - "@ionic/angular": "^8.2.2", - "@ionic/pwa-elements": "3.3.0", - "@ionic/storage-angular": "4.0.0", - "@mapbox/maki": "7.1.0", - "@microsoft/signalr": "5.0.10", - "@ngrx/effects": "^17.2.0", - "@ngrx/router-store": "^17.2.0", - "@ngrx/store": "^17.2.0", - "@ngrx/store-devtools": "^17.2.0", - "@ngx-translate/core": "14.0.0", - "@ngx-translate/http-loader": "6.0.0", - "@resgrid/local-notifications": "^1.0.4", - "@resgrid/ngx-resgridlib": "^1.3.35", - "@resgrid/push-notifications": "^1.0.5", - "@sentry/angular": "=8.7.0", - "@sentry/tracing": "=7.114.0", - "@turf/turf": "6.5.0", - "@videogular/ngx-videogular": "^6.0.0", - "angular-calendar": "^0.29.0", - "angular-svg-icon": "15.0.0", - "base64-arraybuffer": "1.0.1", - "capacitor-plugin-resgrid": "^1.0.14", - "cupertino-pane": "1.2.81", - "date-fns": "^2.30.0", - "hammerjs": "2.0.8", - "hls.js": "^1.4.9", - "howler": "2.2.3", - "jwt-decode": "3.1.2", - "leaflet": "1.7.1", - "mapbox-gl": "2.5.0", - "ng-gallery": "^7.1.2", - "ngrx-store-freeze": "^0.2.4", - "ngrx-store-localstorage": "^17.0.0", - "rxjs": "^7.5.0", - "subsink": "1.0.2", - "tsgeo": "1.2.2", - "tslib": "2.2.0", - "zone.js": "0.14.7" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^17.3.10", - "@angular-eslint/builder": "13.1.0", - "@angular-eslint/eslint-plugin": "13.1.0", - "@angular-eslint/eslint-plugin-template": "13.1.0", - "@angular-eslint/template-parser": "13.1.0", - "@angular/cli": "17.3.10", - "@angular/compiler-cli": "17.3.12", - "@angular/language-service": "17.3.12", - "@capacitor/cli": "^6.1.2", - "@ionic/angular-toolkit": "^4.0.0", - "@types/googlemaps": "^3.43.3", - "@types/jasmine": "=3.6.0", - "@types/jasminewd2": "=2.0.3", - "@types/node": "^12.11.1", - "@typescript-eslint/eslint-plugin": "4.16.1", - "@typescript-eslint/parser": "4.16.1", - "eslint": "^7.6.0", - "eslint-plugin-import": "2.22.1", - "eslint-plugin-jsdoc": "30.7.6", - "eslint-plugin-prefer-arrow": "1.2.2", - "jasmine-core": "~3.8.0", - "jasmine-spec-reporter": "~5.0.0", - "karma": "~6.3.2", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.0.3", - "karma-coverage-istanbul-reporter": "~3.0.2", - "karma-jasmine": "~4.0.0", - "karma-jasmine-html-reporter": "^1.5.0", - "protractor": "~7.0.0", - "ts-node": "~8.3.0", - "typescript": "~5.4.5" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1200.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1200.5.tgz", - "integrity": "sha512-222VZ4OeaDK3vON8V5m+w15SRWfUs5uOb4H9ij/H9/6tyHD83uWfCDoOGg+ax4wJVdWEFJIS+Vn4ijGcZCq9WQ==", - "dev": true, - "peer": true, - "dependencies": { - "@angular-devkit/core": "12.0.5", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "peer": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/architect/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, - "peer": true - }, - "node_modules/@angular-devkit/build-angular": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.10.tgz", - "integrity": "sha512-syz7xgzmp8/0tPJWwQIKZt7KNJfp9U7hkqNacXz4XTYz6YM0oyBXlqk2claSxywWBEkc0eJVSMD9e2ArusZBuA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1703.10", - "@angular-devkit/build-webpack": "0.1703.10", - "@angular-devkit/core": "17.3.10", - "@babel/core": "7.24.0", - "@babel/generator": "7.23.6", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.6", - "@babel/plugin-transform-async-generator-functions": "7.23.9", - "@babel/plugin-transform-async-to-generator": "7.23.3", - "@babel/plugin-transform-runtime": "7.24.0", - "@babel/preset-env": "7.24.0", - "@babel/runtime": "7.24.0", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "17.3.10", - "@vitejs/plugin-basic-ssl": "1.1.0", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.18", - "babel-loader": "9.1.3", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "^4.21.5", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.22", - "css-loader": "6.10.0", - "esbuild-wasm": "0.20.1", - "fast-glob": "3.3.2", - "http-proxy-middleware": "2.0.6", - "https-proxy-agent": "7.0.4", - "inquirer": "9.2.15", - "jsonc-parser": "3.2.1", - "karma-source-map-support": "1.4.0", - "less": "4.2.0", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.8", - "mini-css-extract-plugin": "2.8.1", - "mrmime": "2.0.0", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.1", - "piscina": "4.4.0", - "postcss": "8.4.35", - "postcss-loader": "8.1.1", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.71.1", - "sass-loader": "14.1.1", - "semver": "7.6.0", - "source-map-loader": "5.0.0", - "source-map-support": "0.5.21", - "terser": "5.29.1", - "tree-kill": "1.2.2", - "tslib": "2.6.2", - "undici": "6.11.1", - "vite": "5.1.8", - "watchpack": "2.4.0", - "webpack": "5.94.0", - "webpack-dev-middleware": "6.1.2", - "webpack-dev-server": "4.15.1", - "webpack-merge": "5.10.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.20.1" - }, - "peerDependencies": { - "@angular/compiler-cli": "^17.0.0", - "@angular/localize": "^17.0.0", - "@angular/platform-server": "^17.0.0", - "@angular/service-worker": "^17.0.0", - "@web/test-runner": "^0.18.0", - "browser-sync": "^3.0.2", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^17.0.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.2 <5.5" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "@web/test-runner": { - "optional": true - }, - "browser-sync": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { - "version": "0.1703.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.10.tgz", - "integrity": "sha512-wmjx5GspSPprdUGryK5+9vNawbEO7p8h9dxgX3uoeFwPAECcHC+/KK3qPhX2NiGcM6MDsyt25SrbSktJp6PRsA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.10", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.10.tgz", - "integrity": "sha512-czdl54yxU5DOAGy/uUPNjJruoBDTgwi/V+eOgLNybYhgrc+TsY0f7uJ11yEk/pz5sCov7xIiS7RdRv96waS7vg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", - "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", - "dev": true, - "engines": { - "node": ">=14.6.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/build-angular/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, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/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/@angular-devkit/build-angular/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/vite": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.8.tgz", - "integrity": "sha512-mB8ToUuSmzODSpENgvpFk2fTiU/YQ1tmcVJJ4WZbq4fPdGJkFNVcmVL5k7iDug6xzWjjuGDKAuSievIsD6H7Xw==", - "dev": true, - "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.35", - "rollup": "^4.2.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/vite/node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" - } - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1703.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.10.tgz", - "integrity": "sha512-m6dDgzKLW+c3z9/TUxYmbJEtEhrdYNQ4ogdtAgEYA/FRrKueDU0WztLNr+dVbvwNP99Skovtr8sAQfN6twproQ==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1703.10", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { - "version": "0.1703.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.10.tgz", - "integrity": "sha512-wmjx5GspSPprdUGryK5+9vNawbEO7p8h9dxgX3uoeFwPAECcHC+/KK3qPhX2NiGcM6MDsyt25SrbSktJp6PRsA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.10", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.10.tgz", - "integrity": "sha512-czdl54yxU5DOAGy/uUPNjJruoBDTgwi/V+eOgLNybYhgrc+TsY0f7uJ11yEk/pz5sCov7xIiS7RdRv96waS7vg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/build-webpack/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, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-webpack/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/@angular-devkit/core": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.0.5.tgz", - "integrity": "sha512-zVSQV+8/vjUjsUKGlj8Kf5LioA6AXJTGI0yhHW9q1dFX4dPpbW63k0R1UoIB2wJ0F/AbYVgpnPGPe9BBm2fvZA==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "8.2.0", - "ajv-formats": "2.0.2", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/core/node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "peer": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "peer": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/core/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, - "peer": true - }, - "node_modules/@angular-devkit/schematics": { - "version": "12.2.18", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.18.tgz", - "integrity": "sha512-bZ9NS5PgoVfetRC6WeQBHCY5FqPZ9y2TKHUo12sOB2YSL3tgWgh1oXyP8PtX34gasqsLjNULxEQsAQYEsiX/qQ==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "12.2.18", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "12.2.18", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.18.tgz", - "integrity": "sha512-GDLHGe9HEY5SRS+NrKr14C8aHsRCiBFkBFSSbeohgLgcgSXzZHFoU84nDWrl3KZNP8oqcUSv5lHu6dLcf2fnww==", - "dev": true, - "dependencies": { - "ajv": "8.6.2", - "ajv-formats": "2.1.0", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/ajv-formats": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", - "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics/node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/schematics/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/@angular-eslint/builder": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-13.1.0.tgz", - "integrity": "sha512-RdyeetctnipVdCBrU/mipJ2XKiLC1yGmK1Sfbbgwu0s49CAdOArY/b+b8OU3yyy4EO1EGKQMlzs6F3wTYgiZCA==", - "dev": true, - "dependencies": { - "@nrwl/devkit": "13.1.3" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-13.1.0.tgz", - "integrity": "sha512-0VSAZ3zrHkKdbvogQ4GLSf+lKojtPL3LXLlvXU9xNgNsqw68+gSNwaWd595tXoQCmpwWpTerKUbyIsGnPA7EYA==", - "dev": true - }, - "node_modules/@angular-eslint/eslint-plugin": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-13.1.0.tgz", - "integrity": "sha512-WiggBWPhhpSjcYVHJiawCduCsydM/RPudUE8zxv0Nmj/APuzNgvUr6E//uYTrhNv9EIJoZutRovw7R4Y/yXj4Q==", - "dev": true, - "dependencies": { - "@angular-eslint/utils": "13.1.0", - "@typescript-eslint/experimental-utils": "5.11.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-13.1.0.tgz", - "integrity": "sha512-ceZAMjufE58aduOW/UwjrbCRWocYC0zOEJ2jUkPt6jlL8yzc+SC6UitO0VmMgUsCizHueav5/3gKy05xqwk/CA==", - "dev": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "13.1.0", - "@typescript-eslint/experimental-utils": "5.11.0", - "aria-query": "^4.2.2", - "axobject-query": "^2.2.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/template-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-13.1.0.tgz", - "integrity": "sha512-gKV+kms+kYm1HdToH3j4HL1RrjvMHscVkhwjoV1WbJColnfDivVAZ6/5/J92/A/8r7vJptQkftsbiaGKDyg47w==", - "dev": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "13.1.0", - "eslint-scope": "^5.1.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/utils": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-13.1.0.tgz", - "integrity": "sha512-iLmYMXNk+1sFMIlYXN8/Z5UcNAOno38v10lzo4bMjCpzXKkMa0O2b+4qi+469iUJAU6RAZ5weUL+S2Wtlr0ooA==", - "dev": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "13.1.0", - "@typescript-eslint/experimental-utils": "5.11.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "typescript": "*" - } - }, - "node_modules/@angular/animations": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.12.tgz", - "integrity": "sha512-9hsdWF4gRRcVJtPcCcYLaX1CIyM9wUu6r+xRl6zU5hq8qhl35hig6ounz7CXFAzLf0WDBdM16bPHouVGaG76lg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0" - }, - "peerDependencies": { - "@angular/core": "17.3.12" - } - }, - "node_modules/@angular/animations/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@angular/cdk": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.3.10.tgz", - "integrity": "sha512-b1qktT2c1TTTe5nTji/kFAVW92fULK0YhYAvJ+BjZTPKu2FniZNe8o4qqQ0pUuvtMu+ZQxp/QqFYoidIVCjScg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "optionalDependencies": { - "parse5": "^7.1.2" - }, - "peerDependencies": { - "@angular/common": "^17.0.0 || ^18.0.0", - "@angular/core": "^17.0.0 || ^18.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/cdk/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@angular/cli": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.10.tgz", - "integrity": "sha512-lA0kf4Cpo8Jcuennq6wGyBTP/UG1oX4xsM9uLRZ2vkPoisjHCk46rWaVP7vfAqdUH39vbATFXftpy1SiEmAI4w==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1703.10", - "@angular-devkit/core": "17.3.10", - "@angular-devkit/schematics": "17.3.10", - "@schematics/angular": "17.3.10", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.2", - "inquirer": "9.2.15", - "jsonc-parser": "3.2.1", - "npm-package-arg": "11.0.1", - "npm-pick-manifest": "9.0.0", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "17.0.6", - "resolve": "1.22.8", - "semver": "7.6.0", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1703.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.10.tgz", - "integrity": "sha512-wmjx5GspSPprdUGryK5+9vNawbEO7p8h9dxgX3uoeFwPAECcHC+/KK3qPhX2NiGcM6MDsyt25SrbSktJp6PRsA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.10", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.10.tgz", - "integrity": "sha512-czdl54yxU5DOAGy/uUPNjJruoBDTgwi/V+eOgLNybYhgrc+TsY0f7uJ11yEk/pz5sCov7xIiS7RdRv96waS7vg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/schematics": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.10.tgz", - "integrity": "sha512-FHcNa1ktYRd0SKExCsNJpR75RffsyuPIV8kvBXzXnLHmXMqvl25G2te3yYJ9yYqy9OLy/58HZznZTxWRyUdHOg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.10", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.8", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular/cli/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, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/@angular/cli/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/@angular/common": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.12.tgz", - "integrity": "sha512-vabJzvrx76XXFrm1RJZ6o/CyG32piTB/1sfFfKHdlH1QrmArb8It4gyk9oEjZ1IkAD0HvBWlfWmn+T6Vx3pdUw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0" - }, - "peerDependencies": { - "@angular/core": "17.3.12", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/common/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@angular/compiler": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.12.tgz", - "integrity": "sha512-vwI8oOL/gM+wPnptOVeBbMfZYwzRxQsovojZf+Zol9szl0k3SZ3FycWlxxXZGFu3VIEfrP6pXplTmyODS/Lt1w==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0" - }, - "peerDependencies": { - "@angular/core": "17.3.12" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.12.tgz", - "integrity": "sha512-1F8M7nWfChzurb7obbvuE7mJXlHtY1UG58pcwcomVtpPb+kPavgAO8OEvJHYBMV+bzSxkXt5UIwL9lt9jHUxZA==", - "dev": true, - "dependencies": { - "@babel/core": "7.23.9", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.2.0", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0" - }, - "peerDependencies": { - "@angular/compiler": "17.3.12", - "typescript": ">=5.2 <5.5" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular/compiler-cli/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/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@angular/compiler-cli/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true - }, - "node_modules/@angular/compiler/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@angular/core": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.12.tgz", - "integrity": "sha512-MuFt5yKi161JmauUta4Dh0m8ofwoq6Ino+KoOtkYMBGsSx+A7dSm+DUxxNwdj7+DNyg3LjVGCFgBFnq4g8z06A==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.14.0" - } - }, - "node_modules/@angular/core/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@angular/forms": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.12.tgz", - "integrity": "sha512-tV6r12Q3yEUlXwpVko4E+XscunTIpPkLbaiDn/MTL3Vxi2LZnsLgHyd/i38HaHN+e/H3B0a1ToSOhV5wf3ay4Q==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0" - }, - "peerDependencies": { - "@angular/common": "17.3.12", - "@angular/core": "17.3.12", - "@angular/platform-browser": "17.3.12", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/forms/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@angular/language-service": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-17.3.12.tgz", - "integrity": "sha512-MVmEXonXwdhFtIpU4q8qbXHsrAsdTjZcPPuWCU0zXVQ+VaB/y6oF7BVpmBtfyBcBCums1guEncPP+AZVvulXmQ==", - "dev": true, - "engines": { - "node": "^18.13.0 || >=20.9.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.12.tgz", - "integrity": "sha512-DYY04ptWh/ulMHzd+y52WCE8QnEYGeIiW3hEIFjCN8z0kbIdFdUtEB0IK5vjNL3ejyhUmphcpeT5PYf3YXtqWQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0" - }, - "peerDependencies": { - "@angular/animations": "17.3.12", - "@angular/common": "17.3.12", - "@angular/core": "17.3.12" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.12.tgz", - "integrity": "sha512-DQwV7B2x/DRLRDSisngZRdLqHdYbbrqZv2Hmu4ZbnNYaWPC8qvzgE/0CvY+UkDat3nCcsfwsMnlDeB6TL7/IaA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0" - }, - "peerDependencies": { - "@angular/common": "17.3.12", - "@angular/compiler": "17.3.12", - "@angular/core": "17.3.12", - "@angular/platform-browser": "17.3.12" - } - }, - "node_modules/@angular/platform-browser-dynamic/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@angular/platform-browser/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@angular/router": { - "version": "17.3.12", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.3.12.tgz", - "integrity": "sha512-dg7PHBSW9fmPKTVzwvHEeHZPZdpnUqW/U7kj8D29HTP9ur8zZnx9QcnbplwPeYb8yYa62JMnZSEel2X4PxdYBg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0" - }, - "peerDependencies": { - "@angular/common": "17.3.12", - "@angular/core": "17.3.12", - "@angular/platform-browser": "17.3.12", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/router/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@babel/code-frame": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", - "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.25.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz", - "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", - "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", - "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", - "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-member-expression-to-functions": "^7.25.7", - "@babel/helper-optimise-call-expression": "^7.25.7", - "@babel/helper-replace-supers": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", - "@babel/traverse": "^7.25.7", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", - "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz", - "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "regexpu-core": "^6.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", - "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", - "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", - "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", - "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.25.7", - "@babel/helper-simple-access": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", - "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", - "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz", - "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-wrap-function": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", - "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", - "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.7", - "@babel/helper-optimise-call-expression": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", - "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", - "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", - "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", - "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", - "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", - "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", - "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", - "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.8" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", - "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", - "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", - "@babel/plugin-transform-optional-chaining": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", - "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", - "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz", - "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", - "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", - "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", - "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", - "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz", - "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", - "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-replace-supers": "^7.25.7", - "@babel/traverse": "^7.25.7", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", - "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", - "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/template": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz", - "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", - "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", - "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz", - "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", - "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz", - "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", - "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", - "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz", - "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", - "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz", - "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", - "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", - "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", - "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-simple-access": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", - "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", - "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", - "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", - "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz", - "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz", - "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz", - "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/plugin-transform-parameters": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", - "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-replace-supers": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz", - "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz", - "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", - "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", - "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz", - "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", - "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", - "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", - "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", - "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", - "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", - "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", - "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", - "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", - "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", - "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", - "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", - "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", - "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", - "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", - "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.24.0", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", - "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.7.tgz", - "integrity": "sha512-gMmIEhg35sXk9Te5qbGp3W9YKrvLt3HV658/d3odWrHSqT0JeG5OzsJWFHRLiOohRyjRsJc/x03DhJm3i8VJxg==", - "dev": true, - "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", - "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", - "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", - "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.25.7", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/types": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", - "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bufbuild/protobuf": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", - "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==" - }, - "node_modules/@capacitor-community/background-geolocation": { - "version": "1.2.19", - "resolved": "https://registry.npmjs.org/@capacitor-community/background-geolocation/-/background-geolocation-1.2.19.tgz", - "integrity": "sha512-MsVHcSc0iRXopqdQKw9Bw30XslBYt2MTkOjSRmYP4w6h2D+Tt01X5w+bRHHmnBpvIxYMAEMiElPc5PjKDRylmQ==", - "peerDependencies": { - "@capacitor/core": ">=3.0.0" - } - }, - "node_modules/@capacitor-community/bluetooth-le": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@capacitor-community/bluetooth-le/-/bluetooth-le-6.0.1.tgz", - "integrity": "sha512-ouMSW6ymhB4KAhl2uAcxWNGhMj5onqopQdixGyW8PWOc+KxpCnqkQNZ6MzRuGZUJUfdiJ28p6p64FAoTH2cy+Q==", - "dependencies": { - "@types/web-bluetooth": "^0.0.20" - }, - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor-community/file-opener": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@capacitor-community/file-opener/-/file-opener-6.0.1.tgz", - "integrity": "sha512-6DMcCVZPWnx1ewlCcciDGQ9n+hZt7ixLuSMv5U2epyZJ44vdLXEKjZvwU+Wpdpmsq5p0pT9jExDODFdc+DNCsw==", - "engines": { - "node": ">=16.0.0", - "npm": ">=8.0.0" - }, - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor-community/keep-awake": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@capacitor-community/keep-awake/-/keep-awake-5.0.1.tgz", - "integrity": "sha512-5ZeJ5DQE5Aa1NwzD1kKv8IkHoLwKhkGYlURWHh4/SDrug0KBaGocKuk1q1TAk1nsCs6ndbSsEvUt2LZDoPo9SQ==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor-community/sqlite": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor-community/sqlite/-/sqlite-6.0.2.tgz", - "integrity": "sha512-sj+2SPLu7E/3dM3xxcWwfNomG+aQHuN96/EFGrOtp4Dv30/2y5oIPyi6hZGjQGjPc5GDNoTQwW7vxWNzybjuMg==", - "dependencies": { - "jeep-sqlite": "^2.7.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor/android": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-6.1.2.tgz", - "integrity": "sha512-Yh0gQDY1bgRrL25J6ecIlvvs2kF8iNSwIPXjyw6Yz9mnwYxBazF5KZbjpKtGPnJgicJhFkYGsqOkEtxrve0EoQ==", - "peerDependencies": { - "@capacitor/core": "^6.1.0" - } - }, - "node_modules/@capacitor/app": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-6.0.1.tgz", - "integrity": "sha512-0kXbOl7LPPMFVcAii3u/7Ps0DvXlr7dtHT97r9J1faDlgdQLQUvtGp48tjvFm48gqHI0aOPRJnTBr5JXW4ETYg==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor/camera": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/camera/-/camera-6.0.2.tgz", - "integrity": "sha512-bC2xxCcNTyfKYuLNLbGIyLlK9fok2MDhF4v8s01jusYAxoBI7LaKWQMQoGBA1MY/Ec6x/2pjIr+7k89Kmdr74g==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor/cli": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-6.1.2.tgz", - "integrity": "sha512-HKCNGE0RP8U7aiEF2vg5wTivJROS8BVfu8a3yYJb1mRQvzv+czpmtHNsTWS/WukvwoxUjyjRmsNQSAACHfMTmQ==", - "dev": true, - "dependencies": { - "@ionic/cli-framework-output": "^2.2.5", - "@ionic/utils-fs": "^3.1.6", - "@ionic/utils-process": "^2.1.11", - "@ionic/utils-subprocess": "2.1.11", - "@ionic/utils-terminal": "^2.3.3", - "commander": "^9.3.0", - "debug": "^4.3.4", - "env-paths": "^2.2.0", - "kleur": "^4.1.4", - "native-run": "^2.0.0", - "open": "^8.4.0", - "plist": "^3.0.5", - "prompts": "^2.4.2", - "rimraf": "^4.4.1", - "semver": "^7.3.7", - "tar": "^6.1.11", - "tslib": "^2.4.0", - "xml2js": "^0.5.0" - }, - "bin": { - "cap": "bin/capacitor", - "capacitor": "bin/capacitor" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@capacitor/cli/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true - }, - "node_modules/@capacitor/core": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.1.2.tgz", - "integrity": "sha512-xFy1/4qLFLp5WCIzIhtwUuVNNoz36+V7/BzHmLqgVJcvotc4MMjswW/TshnPQaLLujEOaLkA4h8ZJ0uoK3ImGg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@capacitor/device": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/device/-/device-6.0.1.tgz", - "integrity": "sha512-Tlz67DAO5GKb5YAfupXiENZxDww6mHnG9iKI+8D5SVF82VLpEv5r9qwKtiounuQB2y2HWiHV8tlOk7DqnLVUqQ==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor/filesystem": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/filesystem/-/filesystem-6.0.1.tgz", - "integrity": "sha512-eHhXm6tzBIQhErzFnfOE6eA1U+15DHc2212/COfzzGGRk/dyGympoVV3ct2YPVzvpTSxMEW3xFocORv/xD9gFg==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor/geolocation": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/geolocation/-/geolocation-6.0.1.tgz", - "integrity": "sha512-QOkIrSzG6E0vD2MF3gZmtuILQiuVro4LGPjqrUjCzhX10zl/4lx6bq4T+hj2YLUmMUnCiV1hWTOJHcpdVRMz7w==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor/haptics": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-6.0.1.tgz", - "integrity": "sha512-Q8hedLwfwTSWEYc3eoATzkdKHBaIceYe5bd7FjxQCENNH0is5Ft0EjSRPz/xpTn39ebK0ooZBDBCwsyl6tjiTA==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor/ios": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-6.1.2.tgz", - "integrity": "sha512-HaeW68KisBd/7TmavzPDlL2bpoDK5AjR2ZYrqU4TlGwM88GtQfvduBCAlSCj20X0w/4+rWMkseD9dAAkacjiyQ==", - "peerDependencies": { - "@capacitor/core": "^6.1.0" - } - }, - "node_modules/@capacitor/keyboard": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-6.0.2.tgz", - "integrity": "sha512-fOfO3rQ0ZXuTHpK03INVTwmBnpqMiH8EHPpNaHjwjKwdrVRWBvtgIFhuyHNXh53rdcXw+uHB+1RIiNabnCrITw==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor/network": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/network/-/network-6.0.2.tgz", - "integrity": "sha512-c0aZb0vRodvUO7ugZdQfMXr7LHUgZSKaJcOfu53gwuxGuvrIUvqPvaog+GlNLp7SB4Iw74Js7cemnIqsR5yxzw==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor/preferences": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/preferences/-/preferences-6.0.2.tgz", - "integrity": "sha512-ccD4/9ybnipJncLeCWlRPNQS2jv3nn8ivVLKzdVIWkiUHLo/hvuSSP7awVzvBwDNtAhNxIipjjWH6TyzZgLCcg==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor/splash-screen": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@capacitor/splash-screen/-/splash-screen-6.0.2.tgz", - "integrity": "sha512-WC0KYZ+ev15up03xs4fTnoTKwBVUSxXsKKQr/8XAncvi/nAG8qrpanW8OlavSC5zF5e1IZZDLsI2GSv0SkZ7VQ==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capacitor/status-bar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-6.0.1.tgz", - "integrity": "sha512-Usd9hZZQVAqy+jJfL7jRcYI7dcsxN09Na1yttwdl+F1bk3Ztoukk7CGPDm5VgKUSs53ihQBOy1+sczCACxhNiw==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@capawesome/capacitor-badge": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@capawesome/capacitor-badge/-/capacitor-badge-6.0.0.tgz", - "integrity": "sha512-HaRmS1apdlP51SKXKWr0bwhCJy9gSfP+e8UZuhrIxv6EtRujxkYPTTqDv883uwl4gidzedeUHI7YrGNJkKbdbw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/capawesome-team/" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/capawesome" - } - ], - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "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, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", - "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", - "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", - "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", - "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", - "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", - "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", - "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", - "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", - "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", - "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", - "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", - "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", - "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", - "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", - "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", - "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", - "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", - "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", - "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", - "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", - "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", - "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", - "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/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, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@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==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/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 - }, - "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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@ionic/angular": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-8.3.2.tgz", - "integrity": "sha512-mbQgWWOzOHdzYEuixJNl2HJ+QUPAakvaG2D/oh7E+gvmA732ppnpHWF8XR35bpIfQJeBby6/mNZN0Bp9RWAkWw==", - "dependencies": { - "@ionic/core": "8.3.2", - "ionicons": "^7.0.0", - "jsonc-parser": "^3.0.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/core": ">=16.0.0", - "@angular/forms": ">=16.0.0", - "@angular/router": ">=16.0.0", - "rxjs": ">=7.5.0", - "zone.js": ">=0.13.0" - } - }, - "node_modules/@ionic/angular-toolkit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@ionic/angular-toolkit/-/angular-toolkit-4.0.0.tgz", - "integrity": "sha512-HGRAGUtc1YSwNZ/Q7X7c2QRyYM2AfsSm++OasPrMo3LnPRVr8OIsUih2ithEU7f3CXrViUR7j/Anu90zGsRgzg==", - "dev": true, - "dependencies": { - "@schematics/angular": "^12.0.0", - "cheerio": "1.0.0-rc.3", - "colorette": "1.1.0", - "copy-webpack-plugin": "^6.2.1", - "tapable": "^2.1.1", - "tslib": "^2.0.3", - "ws": "^7.0.1" - }, - "peerDependencies": { - "@angular-devkit/architect": "^0.1200.0", - "@angular-devkit/schematics": "^12.0.0" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/@angular-devkit/core": { - "version": "12.2.18", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.18.tgz", - "integrity": "sha512-GDLHGe9HEY5SRS+NrKr14C8aHsRCiBFkBFSSbeohgLgcgSXzZHFoU84nDWrl3KZNP8oqcUSv5lHu6dLcf2fnww==", - "dev": true, - "dependencies": { - "ajv": "8.6.2", - "ajv-formats": "2.1.0", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/@schematics/angular": { - "version": "12.2.18", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.18.tgz", - "integrity": "sha512-niRS9Ly9y8uI0YmTSbo8KpdqCCiZ/ATMZWeS2id5M8JZvfXbngwiqJvojdSol0SWU+n1W4iA+lJBdt4gSKlD5w==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "12.2.18", - "@angular-devkit/schematics": "12.2.18", - "jsonc-parser": "3.0.0" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/ajv-formats": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", - "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/copy-webpack-plugin": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz", - "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==", - "dev": true, - "dependencies": { - "cacache": "^15.0.5", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "node_modules/@ionic/angular-toolkit/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/@ionic/angular-toolkit/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ionic/angular-toolkit/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, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ionic/angular-toolkit/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_modules/@ionic/angular-toolkit/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/rxjs/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/@ionic/angular-toolkit/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/@ionic/angular-toolkit/node_modules/schema-utils/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, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/schema-utils/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, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/schema-utils/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 - }, - "node_modules/@ionic/angular-toolkit/node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/webpack-sources/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ionic/angular-toolkit/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 - }, - "node_modules/@ionic/angular/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@ionic/cli-framework-output": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.8.tgz", - "integrity": "sha512-TshtaFQsovB4NWRBydbNFawql6yul7d5bMiW1WYYf17hd99V6xdDdk3vtF51bw6sLkxON3bDQpWsnUc9/hVo3g==", - "dev": true, - "dependencies": { - "@ionic/utils-terminal": "2.3.5", - "debug": "^4.0.0", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@ionic/core": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.3.2.tgz", - "integrity": "sha512-ptiDXnn4131eKpY862lv7c9xxjly7vi4O+WWCES78E+hXHvTEAundcA5F8eQyb0MFIFvCnOxreTZjRJJnHqPYw==", - "dependencies": { - "@stencil/core": "4.20.0", - "ionicons": "^7.2.2", - "tslib": "^2.1.0" - } - }, - "node_modules/@ionic/pwa-elements": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@ionic/pwa-elements/-/pwa-elements-3.3.0.tgz", - "integrity": "sha512-vbykpxd2nGRlA67AnqDwsiVf8PUmInLyi6lQdnPDjeiML1WZa0CPe6r632nGDV9PTi+sWNde9Xexg9SD6Pwyqw==", - "engines": { - "node": ">=16.0.0", - "npm": ">=8.0.0" - } - }, - "node_modules/@ionic/storage": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@ionic/storage/-/storage-4.0.0.tgz", - "integrity": "sha512-3N21P19Xk6cICLnSXZ3ilRqbSXAGSFeIF3HNqz+1kARcm0UFT/vwmZreaXtFyq437vvEWOfJ2enlj3JHLKS0FA==", - "dependencies": { - "localforage": "^1.9.0" - } - }, - "node_modules/@ionic/storage-angular": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@ionic/storage-angular/-/storage-angular-4.0.0.tgz", - "integrity": "sha512-FeSmCMCm1bMRfu5TFSqLtjdfEo/dLLUhLIrPmbhSYomVZdV/dNn4mBZv9SabyxSqn4bF31hw40y+4buhG+durQ==", - "dependencies": { - "@ionic/storage": "^4.0.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/core": "*", - "rxjs": "*" - } - }, - "node_modules/@ionic/storage-angular/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@ionic/utils-array": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.5.tgz", - "integrity": "sha512-HD72a71IQVBmQckDwmA8RxNVMTbxnaLbgFOl+dO5tbvW9CkkSFCv41h6fUuNsSEVgngfkn0i98HDuZC8mk+lTA==", - "dev": true, - "dependencies": { - "debug": "^4.0.0", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=10.3.0" - } - }, - "node_modules/@ionic/utils-fs": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.7.tgz", - "integrity": "sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==", - "dev": true, - "dependencies": { - "@types/fs-extra": "^8.0.0", - "debug": "^4.0.0", - "fs-extra": "^9.0.0", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@ionic/utils-object": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz", - "integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==", - "dev": true, - "dependencies": { - "debug": "^4.0.0", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@ionic/utils-process": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.12.tgz", - "integrity": "sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==", - "dev": true, - "dependencies": { - "@ionic/utils-object": "2.1.6", - "@ionic/utils-terminal": "2.3.5", - "debug": "^4.0.0", - "signal-exit": "^3.0.3", - "tree-kill": "^1.2.2", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@ionic/utils-stream": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.5.tgz", - "integrity": "sha512-hkm46uHvEC05X/8PHgdJi4l4zv9VQDELZTM+Kz69odtO9zZYfnt8DkfXHJqJ+PxmtiE5mk/ehJWLnn/XAczTUw==", - "dev": true, - "dependencies": { - "debug": "^4.0.0", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=10.3.0" - } - }, - "node_modules/@ionic/utils-subprocess": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.11.tgz", - "integrity": "sha512-6zCDixNmZCbMCy5np8klSxOZF85kuDyzZSTTQKQP90ZtYNCcPYmuFSzaqDwApJT4r5L3MY3JrqK1gLkc6xiUPw==", - "dev": true, - "dependencies": { - "@ionic/utils-array": "2.1.5", - "@ionic/utils-fs": "3.1.6", - "@ionic/utils-process": "2.1.10", - "@ionic/utils-stream": "3.1.5", - "@ionic/utils-terminal": "2.3.3", - "cross-spawn": "^7.0.3", - "debug": "^4.0.0", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=10.3.0" - } - }, - "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-fs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.6.tgz", - "integrity": "sha512-eikrNkK89CfGPmexjTfSWl4EYqsPSBh0Ka7by4F0PLc1hJZYtJxUZV3X4r5ecA8ikjicUmcbU7zJmAjmqutG/w==", - "dev": true, - "dependencies": { - "@types/fs-extra": "^8.0.0", - "debug": "^4.0.0", - "fs-extra": "^9.0.0", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=10.3.0" - } - }, - "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-object": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz", - "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==", - "dev": true, - "dependencies": { - "debug": "^4.0.0", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=10.3.0" - } - }, - "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-process": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.10.tgz", - "integrity": "sha512-mZ7JEowcuGQK+SKsJXi0liYTcXd2bNMR3nE0CyTROpMECUpJeAvvaBaPGZf5ERQUPeWBVuwqAqjUmIdxhz5bxw==", - "dev": true, - "dependencies": { - "@ionic/utils-object": "2.1.5", - "@ionic/utils-terminal": "2.3.3", - "debug": "^4.0.0", - "signal-exit": "^3.0.3", - "tree-kill": "^1.2.2", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=10.3.0" - } - }, - "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-terminal": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz", - "integrity": "sha512-RnuSfNZ5fLEyX3R5mtcMY97cGD1A0NVBbarsSQ6yMMfRJ5YHU7hHVyUfvZeClbqkBC/pAqI/rYJuXKCT9YeMCQ==", - "dev": true, - "dependencies": { - "@types/slice-ansi": "^4.0.0", - "debug": "^4.0.0", - "signal-exit": "^3.0.3", - "slice-ansi": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "tslib": "^2.0.1", - "untildify": "^4.0.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.3.0" - } - }, - "node_modules/@ionic/utils-terminal": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.5.tgz", - "integrity": "sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==", - "dev": true, - "dependencies": { - "@types/slice-ansi": "^4.0.0", - "debug": "^4.0.0", - "signal-exit": "^3.0.3", - "slice-ansi": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "tslib": "^2.0.1", - "untildify": "^4.0.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "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==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "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==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "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==", - "dev": true, - "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/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "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 - }, - "node_modules/@livekit/protocol": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/@livekit/protocol/-/protocol-1.24.0.tgz", - "integrity": "sha512-9dCsqnkMn7lvbI4NGh18zhLDsrXyUcpS++TEFgEk5Xv1WM3R2kT3EzqgL1P/mr3jaabM6rJ8wZA/KJLuQNpF5w==", - "dependencies": { - "@bufbuild/protobuf": "^1.10.0" - } - }, - "node_modules/@ljharb/through": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/@mapbox/geojson-rewind": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", - "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", - "dependencies": { - "get-stream": "^6.0.1", - "minimist": "^1.2.6" - }, - "bin": { - "geojson-rewind": "geojson-rewind" - } - }, - "node_modules/@mapbox/geojson-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", - "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==" - }, - "node_modules/@mapbox/jsonlint-lines-primitives": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", - "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@mapbox/maki": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/maki/-/maki-7.1.0.tgz", - "integrity": "sha512-/jaBOsbafUDOiP9re7Wlbaftk6eNoUPk3zc5HCLnyn3SfU7XfhBBsRsEjmSowAAIu7SlcQCNyN6UDvkyTCD2uA==" - }, - "node_modules/@mapbox/mapbox-gl-supported": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz", - "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==" - }, - "node_modules/@mapbox/point-geometry": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", - "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" - }, - "node_modules/@mapbox/tiny-sdf": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", - "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" - }, - "node_modules/@mapbox/unitbezier": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", - "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==" - }, - "node_modules/@mapbox/vector-tile": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", - "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", - "dependencies": { - "@mapbox/point-geometry": "~0.1.0" - } - }, - "node_modules/@mapbox/whoots-js": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", - "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@mattlewis92/dom-autoscroller": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@mattlewis92/dom-autoscroller/-/dom-autoscroller-2.4.2.tgz", - "integrity": "sha512-YbrUWREPGEjE/FU6foXcAT1YbVwqD/jkYnY1dFb0o4AxtP3s4xKBthlELjndZih8uwsDWgQZx1eNskRNe2BgZQ==" - }, - "node_modules/@microsoft/signalr": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-5.0.10.tgz", - "integrity": "sha512-7jg6s/cmULyeVvt5/bTB4N9T30HvAF1S06hL+nPcQMODXcclRo34Zcli/dfTLR8lCX31/cVEOmVgxXBOVRQ+Dw==", - "dependencies": { - "abort-controller": "^3.0.0", - "eventsource": "^1.0.7", - "fetch-cookie": "^0.7.3", - "node-fetch": "^2.6.0", - "ws": "^6.0.0" - } - }, - "node_modules/@microsoft/signalr/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/@ngrx/effects": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-17.2.0.tgz", - "integrity": "sha512-tXDJNsuBtbvI/7+vYnkDKKpUvLbopw1U5G6LoPnKNrbTPsPcUGmCqF5Su/ZoRN3BhXjt2j+eoeVdpBkxdxMRgg==", - "dependencies": { - "@ngrx/operators": "17.0.0-beta.0", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/core": "^17.0.0", - "@ngrx/store": "17.2.0", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/operators": { - "version": "17.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@ngrx/operators/-/operators-17.0.0-beta.0.tgz", - "integrity": "sha512-EbO8AONuQ6zo2v/mPyBOi4y0CTAp1x4Z+bx7ZF+Pd8BL5ma53BTCL1TmzaeK5zPUe0yApudLk9/ZbHXPnVox5A==", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@ngrx/operators/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@ngrx/router-store": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/@ngrx/router-store/-/router-store-17.2.0.tgz", - "integrity": "sha512-Vynfg2xsB57Oedf0Bb6mjC4MIeaF2OtAewsSnppGIM2b8pwL5W89r2+q2SGc2D6Mp3/pZF3HRI6NxhnHWJdYmg==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/common": "^17.0.0", - "@angular/core": "^17.0.0", - "@angular/router": "^17.0.0", - "@ngrx/store": "17.2.0", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/store": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-17.2.0.tgz", - "integrity": "sha512-7wKgZ59B/6yQSvvsU0DQXipDqpkAXv7LwcXLD5Ww7nvqN0fQoRPThMh4+Wv55DCJhE0bQc1NEMciLA47uRt7Wg==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/core": "^17.0.0", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/store-devtools": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-17.2.0.tgz", - "integrity": "sha512-ig0qr6hMexZGnrlxfHvZmu5CanRjH7hhx60XUbB5BdBvWJIIRaWKPLcsniiDUhljAD87gvzrrilbCTiML38+CA==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@ngrx/store": "17.2.0", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngtools/webpack": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.10.tgz", - "integrity": "sha512-yPKmdbTJzxROAl2NS8P8eHB2mU0BqV2I0ZiKmX6oTetY2Ea4i2WzlTK39pPpG7atmdF2NPWYLXdJWAup+JxSyw==", - "dev": true, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^17.0.0", - "typescript": ">=5.2 <5.5", - "webpack": "^5.54.0" - } - }, - "node_modules/@ngx-translate/core": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-14.0.0.tgz", - "integrity": "sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w==", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/core": ">=13.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@ngx-translate/core/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@ngx-translate/http-loader": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-6.0.0.tgz", - "integrity": "sha512-LCekn6qCbeXWlhESCxU1rAbZz33WzDG0lI7Ig0pYC1o5YxJWrkU9y3Y4tNi+jakQ7R6YhTR2D3ox6APxDtA0wA==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/common": ">=10.0.0", - "@ngx-translate/core": ">=13.0.0", - "rxjs": ">=6.5.3" - } - }, - "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, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "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, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/agent/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 - }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", - "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "ini": "^4.1.3", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/git/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 - }, - "node_modules/@npmcli/git/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", - "dev": true, - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/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_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz", - "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==", - "dev": true, - "dependencies": { - "@npmcli/git": "^5.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", - "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", - "dev": true, - "dependencies": { - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", - "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", - "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/cli": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.9.3.tgz", - "integrity": "sha512-qiAKHkov3iBx6hroPTitUrkRSUZFQqVgNJiF9gXRFC6pNJe9RS4rlmcIaoUFOboi9CnH5jwblNJVcz8YSVYOvA==", - "dev": true, - "dependencies": { - "nx": "15.9.3" - } - }, - "node_modules/@nrwl/cli/node_modules/@nrwl/tao": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.9.3.tgz", - "integrity": "sha512-NcjFCbuMa53C3fBrK7qLUImUBySyr9EVwmiZuAv9sZZtm4eILK8w3qihjrB4FFUuLjPU/SViriYXi+hF2tbP4w==", - "dev": true, - "dependencies": { - "nx": "15.9.3" - }, - "bin": { - "tao": "index.js" - } - }, - "node_modules/@nrwl/cli/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/@nrwl/cli/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 - }, - "node_modules/@nrwl/cli/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, - "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/@nrwl/cli/node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/cli/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/@nrwl/cli/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/@nrwl/cli/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/@nrwl/cli/node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/cli/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@nrwl/cli/node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "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" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@nrwl/cli/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/@nrwl/cli/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, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@nrwl/cli/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/@nrwl/cli/node_modules/lines-and-columns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@nrwl/cli/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nrwl/cli/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@nrwl/cli/node_modules/nx": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/nx/-/nx-15.9.3.tgz", - "integrity": "sha512-GLwbykfTABc7/UZjQEEnV1bQbTVC53W+Zj4xWY640/45I4iZf/TUqKMBCgtLZ9v89gEsKOM4zsx55CqHT3bekA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@nrwl/cli": "15.9.3", - "@nrwl/tao": "15.9.3", - "@parcel/watcher": "2.0.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "^3.0.0-rc.18", - "@zkochan/js-yaml": "0.0.6", - "axios": "^1.0.0", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^11.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js" - }, - "optionalDependencies": { - "@nrwl/nx-darwin-arm64": "15.9.3", - "@nrwl/nx-darwin-x64": "15.9.3", - "@nrwl/nx-linux-arm-gnueabihf": "15.9.3", - "@nrwl/nx-linux-arm64-gnu": "15.9.3", - "@nrwl/nx-linux-arm64-musl": "15.9.3", - "@nrwl/nx-linux-x64-gnu": "15.9.3", - "@nrwl/nx-linux-x64-musl": "15.9.3", - "@nrwl/nx-win32-arm64-msvc": "15.9.3", - "@nrwl/nx-win32-x64-msvc": "15.9.3" - }, - "peerDependencies": { - "@swc-node/register": "^1.4.2", - "@swc/core": "^1.2.173" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/@nrwl/cli/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nrwl/cli/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/@nrwl/cli/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/@nrwl/cli/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true - }, - "node_modules/@nrwl/cli/node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/@nrwl/cli/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 - }, - "node_modules/@nrwl/cli/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@nrwl/devkit": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-13.1.3.tgz", - "integrity": "sha512-TAAsZJvVc/obeH0rZKY6miVhyM2GHGb8qIWp9MAIdLlXf4VDcNC7rxwb5OrGVSwuTTjqGYBGPUx0yEogOOJthA==", - "dev": true, - "dependencies": { - "@nrwl/tao": "13.1.3", - "ejs": "^3.1.5", - "ignore": "^5.0.4", - "rxjs": "^6.5.4", - "semver": "7.3.4", - "tslib": "^2.0.0" - } - }, - "node_modules/@nrwl/devkit/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nrwl/devkit/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@nrwl/devkit/node_modules/rxjs/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/@nrwl/devkit/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nrwl/devkit/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 - }, - "node_modules/@nrwl/nx-darwin-arm64": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.3.tgz", - "integrity": "sha512-2htJzVa+S/uLg5tj4nbO/tRz2SRMQIpT6EeWMgDGuEKQdpuRLVj2ez9hMpkRn9tl1tBUwR05hbV28DnOLRESVA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/nx-darwin-x64": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.3.tgz", - "integrity": "sha512-p+8UkfC6KTLOX4XRt7NSP8DoTzEgs73+SN0csoXT9VsNO35+F0Z5zMZxpEc7RVo5Wen/4PGh2OWA+8gtgntsJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/nx-linux-arm-gnueabihf": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.3.tgz", - "integrity": "sha512-xwW7bZtggrxhFbYvvWWArtcSWwoxWzi/4wNgP3wPbcZFNZiraahVQSpIyJXrS9aajGbdvuDBM8cbDsMj9v7mwg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/nx-linux-arm64-gnu": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.3.tgz", - "integrity": "sha512-KNxDL2OAHxhFqztEjv2mNwXD6xrzoUury7NsYZYqlxJUNc3YYBfRSLEatnw491crvMBndbxfGVTWEO9S4YmRuw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/nx-linux-arm64-musl": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.3.tgz", - "integrity": "sha512-AxoZzfsXH7ZqDE+WrQtRumufIcSIBw4U/LikiDLaWWoGtNpAfKLkD/PHirZiNxHIeGy1Toi4ccMUolXbafLVFw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/nx-linux-x64-gnu": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.3.tgz", - "integrity": "sha512-P8AOPRufvV4a5cSczNsw84zFAI7NgAiEBTybYcyymdNJmo0iArJXEmvj/G4mB20O8VCsCkwqMYAu6nQEnES1Kw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/nx-linux-x64-musl": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.3.tgz", - "integrity": "sha512-4ZYDp7T319+xbw7Z7KVtRefzaXJipZfgrM49r+Y1FAfYDc8y18zvKz3slK26wfWz+EUZwKsa/DfA2KmyRG3DvQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/nx-win32-arm64-msvc": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.3.tgz", - "integrity": "sha512-UhgxIPgTZBKN1oxlLPSklkSzVL3hA4lAiVc9A0Utumpbp0ob/Xx+2vHzg3cnmNH3jWkZ+9OsC2dKyeMB6gAbSw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/nx-win32-x64-msvc": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.3.tgz", - "integrity": "sha512-gdnvqURKnu0EQGOFJ6NUKq6wSB+viNb7Z8qtKhzSmFwVjT8akOnLWn7ZhL9v28TAjLM7/s1Mwvmz/IMj1PGlcQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/tao": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-13.1.3.tgz", - "integrity": "sha512-/IwJgSgCBD1SaF+n8RuXX2OxDAh8ut/+P8pMswjm8063ac30UlAHjQ4XTYyskLH8uoUmNi2hNaGgHUrkwt7tQA==", - "dev": true, - "dependencies": { - "chalk": "4.1.0", - "enquirer": "~2.3.6", - "fs-extra": "^9.1.0", - "jsonc-parser": "3.0.0", - "nx": "13.1.3", - "rxjs": "^6.5.4", - "rxjs-for-await": "0.0.2", - "semver": "7.3.4", - "tmp": "~0.2.1", - "tslib": "^2.0.0", - "yargs-parser": "20.0.0" - }, - "bin": { - "tao": "index.js" - } - }, - "node_modules/@nrwl/tao/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/@nrwl/tao/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "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/@nrwl/tao/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/@nrwl/tao/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/@nrwl/tao/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/@nrwl/tao/node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "node_modules/@nrwl/tao/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nrwl/tao/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@nrwl/tao/node_modules/rxjs-for-await": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/rxjs-for-await/-/rxjs-for-await-0.0.2.tgz", - "integrity": "sha512-IJ8R/ZCFMHOcDIqoABs82jal00VrZx8Xkgfe7TOKoaRPAW5nH/VFlG23bXpeGdrmtqI9UobFPgUKgCuFc7Lncw==", - "dev": true, - "peerDependencies": { - "rxjs": "^6.0.0" - } - }, - "node_modules/@nrwl/tao/node_modules/rxjs/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/@nrwl/tao/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nrwl/tao/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/@nrwl/tao/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 - }, - "node_modules/@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@resgrid/local-notifications": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@resgrid/local-notifications/-/local-notifications-1.0.4.tgz", - "integrity": "sha512-nNmdNSQThMOVFSuKkZ0uLAOidLcGUsxAH5q/6ToP0sUjDzt8ZworUwBWhXZvINir2sPlHLikziFESMiV+OVY/w==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@resgrid/ngx-resgridlib": { - "version": "1.3.35", - "resolved": "https://registry.npmjs.org/@resgrid/ngx-resgridlib/-/ngx-resgridlib-1.3.35.tgz", - "integrity": "sha512-UrzYXlauSfI1vNua9hIsuV4n2EVMfX1NaZFUu/jWYoJ2/mZqeb62VGrzxss7YmgWIRKmj4U32RgngAU1dLHiQQ==", - "dependencies": { - "@microsoft/signalr": "^5.0.0 || ^6.0.0 || ^7.0.0", - "angular-svg-icon": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", - "jwt-decode": "^3.1.2", - "leaflet": "^1.7.1", - "livekit-client": "^2.0.2", - "lodash": "^4.17.21", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/common": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", - "@angular/core": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", - "@angular/platform-browser": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", - "@angular/platform-browser-dynamic": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", - "@microsoft/signalr": "^5.0.0 || ^6.0.0 || ^7.0.0", - "angular-svg-icon": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0", - "jwt-decode": "^3.1.2", - "livekit-client": "^2.0.2", - "lodash": "^4.17.21", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@resgrid/push-notifications": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@resgrid/push-notifications/-/push-notifications-1.0.5.tgz", - "integrity": "sha512-PWkcS39LHGKJVrSW3sjL8Af3Cz2e+00g+ah4jM7fTtYKcSkYKII0RfaG1L1WfBWwlNrOdPEeiiZ9kKLBBI/fbw==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", - "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", - "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", - "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", - "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", - "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", - "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", - "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", - "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", - "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", - "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", - "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", - "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", - "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", - "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", - "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", - "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@scarf/scarf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.3.0.tgz", - "integrity": "sha512-lHKK8M5CTcpFj2hZDB3wIjb0KAbEOgDmiJGDv1WBRfQgRm/a8/XMEkG/N1iM01xgbUDsPQwi42D+dFo1XPAKew==", - "hasInstallScript": true - }, - "node_modules/@schematics/angular": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.10.tgz", - "integrity": "sha512-cI+VB/WXlOeAMamni932lE/AZgui8o81dMyEXNXqCuYagNAMuKXliW79Mi5BwYQEABv/BUb4hB4zYtbQqHyACA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.10", - "@angular-devkit/schematics": "17.3.10", - "jsonc-parser": "3.2.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.10.tgz", - "integrity": "sha512-czdl54yxU5DOAGy/uUPNjJruoBDTgwi/V+eOgLNybYhgrc+TsY0f7uJ11yEk/pz5sCov7xIiS7RdRv96waS7vg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/schematics": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.10.tgz", - "integrity": "sha512-FHcNa1ktYRd0SKExCsNJpR75RffsyuPIV8kvBXzXnLHmXMqvl25G2te3yYJ9yYqy9OLy/58HZznZTxWRyUdHOg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "17.3.10", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.8", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@schematics/angular/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@schematics/angular/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, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/@schematics/angular/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/@sentry-internal/browser-utils": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.7.0.tgz", - "integrity": "sha512-RFBK1sYBwV5qGMEwWF0rjOTqQpp4/SvE+qHkOJNRUTVYmfjM+Y9lcxwn4B6lu3aboxePpBw/i1PlP6XwX4UnGA==", - "dependencies": { - "@sentry/core": "8.7.0", - "@sentry/types": "8.7.0", - "@sentry/utils": "8.7.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry-internal/feedback": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.7.0.tgz", - "integrity": "sha512-qcGtWCtRB4eP7NVQoxW936oPkU4qu9otMLYELPGmOJPnuAG0lujlJXW7BucaM7ADyJgJTE75hG849bHecfnbmQ==", - "dependencies": { - "@sentry/core": "8.7.0", - "@sentry/types": "8.7.0", - "@sentry/utils": "8.7.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry-internal/replay": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.7.0.tgz", - "integrity": "sha512-bQzOkWplaWTe3u+aDBhxWY3Qy0aT7ss2A3VR8iC6N8ZIEP9PxqyJwTNoouhinfgmlnCguI7RDOO4f3r3e2M80Q==", - "dependencies": { - "@sentry-internal/browser-utils": "8.7.0", - "@sentry/core": "8.7.0", - "@sentry/types": "8.7.0", - "@sentry/utils": "8.7.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry-internal/replay-canvas": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.7.0.tgz", - "integrity": "sha512-FOnvBPbq6MJVHPduc0hcsdE3PeeovQ2z5WJnZDGhvp/Obehxqe+XgX7K/595vRIknv4EokRn/3Kw0mFwG8E+ZQ==", - "dependencies": { - "@sentry-internal/replay": "8.7.0", - "@sentry/core": "8.7.0", - "@sentry/types": "8.7.0", - "@sentry/utils": "8.7.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry-internal/tracing": { - "version": "7.114.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.114.0.tgz", - "integrity": "sha512-dOuvfJN7G+3YqLlUY4HIjyWHaRP8vbOgF+OsE5w2l7ZEn1rMAaUbPntAR8AF9GBA6j2zWNoSo8e7GjbJxVofSg==", - "dependencies": { - "@sentry/core": "7.114.0", - "@sentry/types": "7.114.0", - "@sentry/utils": "7.114.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry-internal/tracing/node_modules/@sentry/core": { - "version": "7.114.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.114.0.tgz", - "integrity": "sha512-YnanVlmulkjgZiVZ9BfY9k6I082n+C+LbZo52MTvx3FY6RE5iyiPMpaOh67oXEZRWcYQEGm+bKruRxLVP6RlbA==", - "dependencies": { - "@sentry/types": "7.114.0", - "@sentry/utils": "7.114.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry-internal/tracing/node_modules/@sentry/types": { - "version": "7.114.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.114.0.tgz", - "integrity": "sha512-tsqkkyL3eJtptmPtT0m9W/bPLkU7ILY7nvwpi1hahA5jrM7ppoU0IMaQWAgTD+U3rzFH40IdXNBFb8Gnqcva4w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry-internal/tracing/node_modules/@sentry/utils": { - "version": "7.114.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.114.0.tgz", - "integrity": "sha512-319N90McVpupQ6vws4+tfCy/03AdtsU0MurIE4+W5cubHME08HtiEWlfacvAxX+yuKFhvdsO4K4BB/dj54ideg==", - "dependencies": { - "@sentry/types": "7.114.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/angular": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@sentry/angular/-/angular-8.7.0.tgz", - "integrity": "sha512-bza4zZocqQ5xKRnxZtrbgKKn4JE/7lrH37ghR2Q4A2c2kCYZrU9T5+1mKbo6TlTbvHYZPrmwU/HCoQL7667AeQ==", - "dependencies": { - "@sentry/browser": "8.7.0", - "@sentry/core": "8.7.0", - "@sentry/types": "8.7.0", - "@sentry/utils": "8.7.0", - "tslib": "^2.4.1" - }, - "engines": { - "node": ">=14.18" - }, - "peerDependencies": { - "@angular/common": ">= 14.x <= 18.x", - "@angular/core": ">= 14.x <= 18.x", - "@angular/router": ">= 14.x <= 18.x", - "rxjs": "^6.5.5 || ^7.x" - } - }, - "node_modules/@sentry/angular/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/@sentry/browser": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.7.0.tgz", - "integrity": "sha512-4EEp+PlcktsMN0p+MdCPl/lghTkq7eOtZjQG9NGhWzfyWrJ3tuL1nsDr2SSivJ1V277F01KtKYo6BFwP2NtBZA==", - "dependencies": { - "@sentry-internal/browser-utils": "8.7.0", - "@sentry-internal/feedback": "8.7.0", - "@sentry-internal/replay": "8.7.0", - "@sentry-internal/replay-canvas": "8.7.0", - "@sentry/core": "8.7.0", - "@sentry/types": "8.7.0", - "@sentry/utils": "8.7.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry/core": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.7.0.tgz", - "integrity": "sha512-Sq/46B+5nWmgnCD6dEMZ6HTkKbV/KAdgaSvT8oXDb9OWoPy1jJ/gbLrhLs62KbjuDQk4/vWnOgHiKQbcslSzMw==", - "dependencies": { - "@sentry/types": "8.7.0", - "@sentry/utils": "8.7.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry/tracing": { - "version": "7.114.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.114.0.tgz", - "integrity": "sha512-eldEYGADReZ4jWdN5u35yxLUSTOvjsiZAYd4KBEpf+Ii65n7g/kYOKAjNl7tHbrEG1EsMW4nDPWStUMk1w+tfg==", - "dependencies": { - "@sentry-internal/tracing": "7.114.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/types": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.7.0.tgz", - "integrity": "sha512-11KLOKumP6akugVGLvSoEig+JlP0ZEzW3nN9P+ppgdIx9HAxMIh6UvumbieG4/DWjAh2kh6NPNfUw3gk2Gfq1A==", - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry/utils": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.7.0.tgz", - "integrity": "sha512-aWmcbSoOmrbzll/FkNQFJcCtLAuJLvTYbRKiCSkV3FScA7UaA742HkTZAPFiioALFIESWk/fcGZqtN0s4I281Q==", - "dependencies": { - "@sentry/types": "8.7.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", - "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", - "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", - "dev": true, - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", - "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", - "dev": true, - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", - "dev": true - }, - "node_modules/@stencil/core": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.20.0.tgz", - "integrity": "sha512-WPrTHFngvN081RY+dJPneKQLwnOFD60OMCOQGmmSHfCW0f4ujPMzzhwWU1gcSwXPWXz5O+8cBiiCaxAbJU7kAg==", - "bin": { - "stencil": "bin/stencil" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.10.0" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", - "dev": true, - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@turf/along": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/along/-/along-6.5.0.tgz", - "integrity": "sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw==", - "dependencies": { - "@turf/bearing": "^6.5.0", - "@turf/destination": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/angle": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/angle/-/angle-6.5.0.tgz", - "integrity": "sha512-4pXMbWhFofJJAOvTMCns6N4C8CMd5Ih4O2jSAG9b3dDHakj3O4yN1+Zbm+NUei+eVEZ9gFeVp9svE3aMDenIkw==", - "dependencies": { - "@turf/bearing": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/rhumb-bearing": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/area": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.5.0.tgz", - "integrity": "sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bbox": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.5.0.tgz", - "integrity": "sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bbox-clip": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/bbox-clip/-/bbox-clip-6.5.0.tgz", - "integrity": "sha512-F6PaIRF8WMp8EmgU/Ke5B1Y6/pia14UAYB5TiBC668w5rVVjy5L8rTm/m2lEkkDMHlzoP9vNY4pxpNthE7rLcQ==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bbox-polygon": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/bbox-polygon/-/bbox-polygon-6.5.0.tgz", - "integrity": "sha512-+/r0NyL1lOG3zKZmmf6L8ommU07HliP4dgYToMoTxqzsWzyLjaj/OzgQ8rBmv703WJX+aS6yCmLuIhYqyufyuw==", - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bearing": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.5.0.tgz", - "integrity": "sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bezier-spline": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/bezier-spline/-/bezier-spline-6.5.0.tgz", - "integrity": "sha512-vokPaurTd4PF96rRgGVm6zYYC5r1u98ZsG+wZEv9y3kJTuJRX/O3xIY2QnTGTdbVmAJN1ouOsD0RoZYaVoXORQ==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-clockwise": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz", - "integrity": "sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-contains": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.5.0.tgz", - "integrity": "sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/boolean-point-on-line": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-crosses": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-crosses/-/boolean-crosses-6.5.0.tgz", - "integrity": "sha512-gvshbTPhAHporTlQwBJqyfW+2yV8q/mOTxG6PzRVl6ARsqNoqYQWkd4MLug7OmAqVyBzLK3201uAeBjxbGw0Ng==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-intersect": "^6.5.0", - "@turf/polygon-to-line": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-disjoint": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-disjoint/-/boolean-disjoint-6.5.0.tgz", - "integrity": "sha512-rZ2ozlrRLIAGo2bjQ/ZUu4oZ/+ZjGvLkN5CKXSKBcu6xFO6k2bgqeM8a1836tAW+Pqp/ZFsTA5fZHsJZvP2D5g==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/line-intersect": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/polygon-to-line": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-equal": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-equal/-/boolean-equal-6.5.0.tgz", - "integrity": "sha512-cY0M3yoLC26mhAnjv1gyYNQjn7wxIXmL2hBmI/qs8g5uKuC2hRWi13ydufE3k4x0aNRjFGlg41fjoYLwaVF+9Q==", - "dependencies": { - "@turf/clean-coords": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "geojson-equality": "0.1.6" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-intersects": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-intersects/-/boolean-intersects-6.5.0.tgz", - "integrity": "sha512-nIxkizjRdjKCYFQMnml6cjPsDOBCThrt+nkqtSEcxkKMhAQj5OO7o2CecioNTaX8EayqwMGVKcsz27oP4mKPTw==", - "dependencies": { - "@turf/boolean-disjoint": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-overlap": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.5.0.tgz", - "integrity": "sha512-8btMIdnbXVWUa1M7D4shyaSGxLRw6NjMcqKBcsTXcZdnaixl22k7ar7BvIzkaRYN3SFECk9VGXfLncNS3ckQUw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-intersect": "^6.5.0", - "@turf/line-overlap": "^6.5.0", - "@turf/meta": "^6.5.0", - "geojson-equality": "0.1.6" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-parallel": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-parallel/-/boolean-parallel-6.5.0.tgz", - "integrity": "sha512-aSHJsr1nq9e5TthZGZ9CZYeXklJyRgR5kCLm5X4urz7+MotMOp/LsGOsvKvK9NeUl9+8OUmfMn8EFTT8LkcvIQ==", - "dependencies": { - "@turf/clean-coords": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/line-segment": "^6.5.0", - "@turf/rhumb-bearing": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-point-in-polygon": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz", - "integrity": "sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-point-on-line": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.5.0.tgz", - "integrity": "sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-within": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-within/-/boolean-within-6.5.0.tgz", - "integrity": "sha512-YQB3oU18Inx35C/LU930D36RAVe7LDXk1kWsQ8mLmuqYn9YdPsDQTMTkLJMhoQ8EbN7QTdy333xRQ4MYgToteQ==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/boolean-point-on-line": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/buffer": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/buffer/-/buffer-6.5.0.tgz", - "integrity": "sha512-qeX4N6+PPWbKqp1AVkBVWFerGjMYMUyencwfnkCesoznU6qvfugFHNAngNqIBVnJjZ5n8IFyOf+akcxnrt9sNg==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/center": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/projection": "^6.5.0", - "d3-geo": "1.7.1", - "turf-jsts": "*" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/center/-/center-6.5.0.tgz", - "integrity": "sha512-T8KtMTfSATWcAX088rEDKjyvQCBkUsLnK/Txb6/8WUXIeOZyHu42G7MkdkHRoHtwieLdduDdmPLFyTdG5/e7ZQ==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center-mean": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/center-mean/-/center-mean-6.5.0.tgz", - "integrity": "sha512-AAX6f4bVn12pTVrMUiB9KrnV94BgeBKpyg3YpfnEbBpkN/znfVhL8dG8IxMAxAoSZ61Zt9WLY34HfENveuOZ7Q==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center-median": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/center-median/-/center-median-6.5.0.tgz", - "integrity": "sha512-dT8Ndu5CiZkPrj15PBvslpuf01ky41DEYEPxS01LOxp5HOUHXp1oJxsPxvc+i/wK4BwccPNzU1vzJ0S4emd1KQ==", - "dependencies": { - "@turf/center-mean": "^6.5.0", - "@turf/centroid": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/center-of-mass": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/center-of-mass/-/center-of-mass-6.5.0.tgz", - "integrity": "sha512-EWrriU6LraOfPN7m1jZi+1NLTKNkuIsGLZc2+Y8zbGruvUW+QV7K0nhf7iZWutlxHXTBqEXHbKue/o79IumAsQ==", - "dependencies": { - "@turf/centroid": "^6.5.0", - "@turf/convex": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/centroid": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-6.5.0.tgz", - "integrity": "sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/circle": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/circle/-/circle-6.5.0.tgz", - "integrity": "sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A==", - "dependencies": { - "@turf/destination": "^6.5.0", - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clean-coords": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/clean-coords/-/clean-coords-6.5.0.tgz", - "integrity": "sha512-EMX7gyZz0WTH/ET7xV8MyrExywfm9qUi0/MY89yNffzGIEHuFfqwhcCqZ8O00rZIPZHUTxpmsxQSTfzJJA1CPw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clone": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-6.5.0.tgz", - "integrity": "sha512-mzVtTFj/QycXOn6ig+annKrM6ZlimreKYz6f/GSERytOpgzodbQyOgkfwru100O1KQhhjSudKK4DsQ0oyi9cTw==", - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clusters": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/clusters/-/clusters-6.5.0.tgz", - "integrity": "sha512-Y6gfnTJzQ1hdLfCsyd5zApNbfLIxYEpmDibHUqR5z03Lpe02pa78JtgrgUNt1seeO/aJ4TG1NLN8V5gOrHk04g==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clusters-dbscan": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/clusters-dbscan/-/clusters-dbscan-6.5.0.tgz", - "integrity": "sha512-SxZEE4kADU9DqLRiT53QZBBhu8EP9skviSyl+FGj08Y01xfICM/RR9ACUdM0aEQimhpu+ZpRVcUK+2jtiCGrYQ==", - "dependencies": { - "@turf/clone": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0", - "density-clustering": "1.3.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/clusters-kmeans": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/clusters-kmeans/-/clusters-kmeans-6.5.0.tgz", - "integrity": "sha512-DwacD5+YO8kwDPKaXwT9DV46tMBVNsbi1IzdajZu1JDSWoN7yc7N9Qt88oi+p30583O0UPVkAK+A10WAQv4mUw==", - "dependencies": { - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "skmeans": "0.9.7" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/collect": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/collect/-/collect-6.5.0.tgz", - "integrity": "sha512-4dN/T6LNnRg099m97BJeOcTA5fSI8cu87Ydgfibewd2KQwBexO69AnjEFqfPX3Wj+Zvisj1uAVIZbPmSSrZkjg==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/helpers": "^6.5.0", - "rbush": "2.x" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/combine": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/combine/-/combine-6.5.0.tgz", - "integrity": "sha512-Q8EIC4OtAcHiJB3C4R+FpB4LANiT90t17uOd851qkM2/o6m39bfN5Mv0PWqMZIHWrrosZqRqoY9dJnzz/rJxYQ==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/concave": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/concave/-/concave-6.5.0.tgz", - "integrity": "sha512-I/sUmUC8TC5h/E2vPwxVht+nRt+TnXIPRoztDFvS8/Y0+cBDple9inLSo9nnPXMXidrBlGXZ9vQx/BjZUJgsRQ==", - "dependencies": { - "@turf/clone": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/tin": "^6.5.0", - "topojson-client": "3.x", - "topojson-server": "3.x" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/convex": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/convex/-/convex-6.5.0.tgz", - "integrity": "sha512-x7ZwC5z7PJB0SBwNh7JCeCNx7Iu+QSrH7fYgK0RhhNop13TqUlvHMirMLRgf2db1DqUetrAO2qHJeIuasquUWg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0", - "concaveman": "*" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/destination": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.5.0.tgz", - "integrity": "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/difference": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.5.0.tgz", - "integrity": "sha512-l8iR5uJqvI+5Fs6leNbhPY5t/a3vipUF/3AeVLpwPQcgmedNXyheYuy07PcMGH5Jdpi5gItOiTqwiU/bUH4b3A==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/dissolve": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/dissolve/-/dissolve-6.5.0.tgz", - "integrity": "sha512-WBVbpm9zLTp0Bl9CE35NomTaOL1c4TQCtEoO43YaAhNEWJOOIhZMFJyr8mbvYruKl817KinT3x7aYjjCMjTAsQ==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/distance": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.5.0.tgz", - "integrity": "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/distance-weight": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/distance-weight/-/distance-weight-6.5.0.tgz", - "integrity": "sha512-a8qBKkgVNvPKBfZfEJZnC3DV7dfIsC3UIdpRci/iap/wZLH41EmS90nM+BokAJflUHYy8PqE44wySGWHN1FXrQ==", - "dependencies": { - "@turf/centroid": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/ellipse": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/ellipse/-/ellipse-6.5.0.tgz", - "integrity": "sha512-kuXtwFviw/JqnyJXF1mrR/cb496zDTSbGKtSiolWMNImYzGGkbsAsFTjwJYgD7+4FixHjp0uQPzo70KDf3AIBw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/rhumb-destination": "^6.5.0", - "@turf/transform-rotate": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/envelope": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/envelope/-/envelope-6.5.0.tgz", - "integrity": "sha512-9Z+FnBWvOGOU4X+fMZxYFs1HjFlkKqsddLuMknRaqcJd6t+NIv5DWvPtDL8ATD2GEExYDiFLwMdckfr1yqJgHA==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/bbox-polygon": "^6.5.0", - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/explode": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/explode/-/explode-6.5.0.tgz", - "integrity": "sha512-6cSvMrnHm2qAsace6pw9cDmK2buAlw8+tjeJVXMfMyY+w7ZUi1rprWMsY92J7s2Dar63Bv09n56/1V7+tcj52Q==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/flatten": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/flatten/-/flatten-6.5.0.tgz", - "integrity": "sha512-IBZVwoNLVNT6U/bcUUllubgElzpMsNoCw8tLqBw6dfYg9ObGmpEjf9BIYLr7a2Yn5ZR4l7YIj2T7kD5uJjZADQ==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/flip": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/flip/-/flip-6.5.0.tgz", - "integrity": "sha512-oyikJFNjt2LmIXQqgOGLvt70RgE2lyzPMloYWM7OR5oIFGRiBvqVD2hA6MNw6JewIm30fWZ8DQJw1NHXJTJPbg==", - "dependencies": { - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/great-circle": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/great-circle/-/great-circle-6.5.0.tgz", - "integrity": "sha512-7ovyi3HaKOXdFyN7yy1yOMa8IyOvV46RC1QOQTT+RYUN8ke10eyqExwBpL9RFUPvlpoTzoYbM/+lWPogQlFncg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/helpers": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", - "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==", - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/hex-grid": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/hex-grid/-/hex-grid-6.5.0.tgz", - "integrity": "sha512-Ln3tc2tgZT8etDOldgc6e741Smg1CsMKAz1/Mlel+MEL5Ynv2mhx3m0q4J9IB1F3a4MNjDeVvm8drAaf9SF33g==", - "dependencies": { - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/intersect": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/interpolate": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/interpolate/-/interpolate-6.5.0.tgz", - "integrity": "sha512-LSH5fMeiGyuDZ4WrDJNgh81d2DnNDUVJtuFryJFup8PV8jbs46lQGfI3r1DJ2p1IlEJIz3pmAZYeTfMMoeeohw==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/centroid": "^6.5.0", - "@turf/clone": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/hex-grid": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/point-grid": "^6.5.0", - "@turf/square-grid": "^6.5.0", - "@turf/triangle-grid": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/intersect": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-6.5.0.tgz", - "integrity": "sha512-2legGJeKrfFkzntcd4GouPugoqPUjexPZnOvfez+3SfIMrHvulw8qV8u7pfVyn2Yqs53yoVCEjS5sEpvQ5YRQg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/invariant": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz", - "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==", - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/isobands": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/isobands/-/isobands-6.5.0.tgz", - "integrity": "sha512-4h6sjBPhRwMVuFaVBv70YB7eGz+iw0bhPRnp+8JBdX1UPJSXhoi/ZF2rACemRUr0HkdVB/a1r9gC32vn5IAEkw==", - "dependencies": { - "@turf/area": "^6.5.0", - "@turf/bbox": "^6.5.0", - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/explode": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "object-assign": "*" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/isolines": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/isolines/-/isolines-6.5.0.tgz", - "integrity": "sha512-6ElhiLCopxWlv4tPoxiCzASWt/jMRvmp6mRYrpzOm3EUl75OhHKa/Pu6Y9nWtCMmVC/RcWtiiweUocbPLZLm0A==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "object-assign": "*" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/kinks": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/kinks/-/kinks-6.5.0.tgz", - "integrity": "sha512-ViCngdPt1eEL7hYUHR2eHR662GvCgTc35ZJFaNR6kRtr6D8plLaDju0FILeFFWSc+o8e3fwxZEJKmFj9IzPiIQ==", - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/length": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/length/-/length-6.5.0.tgz", - "integrity": "sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig==", - "dependencies": { - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-arc": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-arc/-/line-arc-6.5.0.tgz", - "integrity": "sha512-I6c+V6mIyEwbtg9P9zSFF89T7QPe1DPTG3MJJ6Cm1MrAY0MdejwQKOpsvNl8LDU2ekHOlz2kHpPVR7VJsoMllA==", - "dependencies": { - "@turf/circle": "^6.5.0", - "@turf/destination": "^6.5.0", - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-chunk": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-chunk/-/line-chunk-6.5.0.tgz", - "integrity": "sha512-i1FGE6YJaaYa+IJesTfyRRQZP31QouS+wh/pa6O3CC0q4T7LtHigyBSYjrbjSLfn2EVPYGlPCMFEqNWCOkC6zg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/length": "^6.5.0", - "@turf/line-slice-along": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-intersect": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.5.0.tgz", - "integrity": "sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-segment": "^6.5.0", - "@turf/meta": "^6.5.0", - "geojson-rbush": "3.x" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-offset": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-offset/-/line-offset-6.5.0.tgz", - "integrity": "sha512-CEXZbKgyz8r72qRvPchK0dxqsq8IQBdH275FE6o4MrBkzMcoZsfSjghtXzKaz9vvro+HfIXal0sTk2mqV1lQTw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-overlap": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.5.0.tgz", - "integrity": "sha512-xHOaWLd0hkaC/1OLcStCpfq55lPHpPNadZySDXYiYjEz5HXr1oKmtMYpn0wGizsLwrOixRdEp+j7bL8dPt4ojQ==", - "dependencies": { - "@turf/boolean-point-on-line": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-segment": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/nearest-point-on-line": "^6.5.0", - "deep-equal": "1.x", - "geojson-rbush": "3.x" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-segment": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.5.0.tgz", - "integrity": "sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-slice": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-slice/-/line-slice-6.5.0.tgz", - "integrity": "sha512-vDqJxve9tBHhOaVVFXqVjF5qDzGtKWviyjbyi2QnSnxyFAmLlLnBfMX8TLQCAf2GxHibB95RO5FBE6I2KVPRuw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/nearest-point-on-line": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-slice-along": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-slice-along/-/line-slice-along-6.5.0.tgz", - "integrity": "sha512-KHJRU6KpHrAj+BTgTNqby6VCTnDzG6a1sJx/I3hNvqMBLvWVA2IrkR9L9DtsQsVY63IBwVdQDqiwCuZLDQh4Ng==", - "dependencies": { - "@turf/bearing": "^6.5.0", - "@turf/destination": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-split": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-split/-/line-split-6.5.0.tgz", - "integrity": "sha512-/rwUMVr9OI2ccJjw7/6eTN53URtGThNSD5I0GgxyFXMtxWiloRJ9MTff8jBbtPWrRka/Sh2GkwucVRAEakx9Sw==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-intersect": "^6.5.0", - "@turf/line-segment": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/nearest-point-on-line": "^6.5.0", - "@turf/square": "^6.5.0", - "@turf/truncate": "^6.5.0", - "geojson-rbush": "3.x" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-to-polygon": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-to-polygon/-/line-to-polygon-6.5.0.tgz", - "integrity": "sha512-qYBuRCJJL8Gx27OwCD1TMijM/9XjRgXH/m/TyuND4OXedBpIWlK5VbTIO2gJ8OCfznBBddpjiObLBrkuxTpN4Q==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/mask": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/mask/-/mask-6.5.0.tgz", - "integrity": "sha512-RQha4aU8LpBrmrkH8CPaaoAfk0Egj5OuXtv6HuCQnHeGNOQt3TQVibTA3Sh4iduq4EPxnZfDjgsOeKtrCA19lg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/meta": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.5.0.tgz", - "integrity": "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==", - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/midpoint": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/midpoint/-/midpoint-6.5.0.tgz", - "integrity": "sha512-MyTzV44IwmVI6ec9fB2OgZ53JGNlgOpaYl9ArKoF49rXpL84F9rNATndbe0+MQIhdkw8IlzA6xVP4lZzfMNVCw==", - "dependencies": { - "@turf/bearing": "^6.5.0", - "@turf/destination": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/moran-index": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/moran-index/-/moran-index-6.5.0.tgz", - "integrity": "sha512-ItsnhrU2XYtTtTudrM8so4afBCYWNaB0Mfy28NZwLjB5jWuAsvyV+YW+J88+neK/ougKMTawkmjQqodNJaBeLQ==", - "dependencies": { - "@turf/distance-weight": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-point": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-point/-/nearest-point-6.5.0.tgz", - "integrity": "sha512-fguV09QxilZv/p94s8SMsXILIAMiaXI5PATq9d7YWijLxWUj6Q/r43kxyoi78Zmwwh1Zfqz9w+bCYUAxZ5+euA==", - "dependencies": { - "@turf/clone": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-point-on-line": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz", - "integrity": "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==", - "dependencies": { - "@turf/bearing": "^6.5.0", - "@turf/destination": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-intersect": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-point-to-line": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-to-line/-/nearest-point-to-line-6.5.0.tgz", - "integrity": "sha512-PXV7cN0BVzUZdjj6oeb/ESnzXSfWmEMrsfZSDRgqyZ9ytdiIj/eRsnOXLR13LkTdXVOJYDBuf7xt1mLhM4p6+Q==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/point-to-line-distance": "^6.5.0", - "object-assign": "*" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/planepoint": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/planepoint/-/planepoint-6.5.0.tgz", - "integrity": "sha512-R3AahA6DUvtFbka1kcJHqZ7DMHmPXDEQpbU5WaglNn7NaCQg9HB0XM0ZfqWcd5u92YXV+Gg8QhC8x5XojfcM4Q==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/point-grid": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/point-grid/-/point-grid-6.5.0.tgz", - "integrity": "sha512-Iq38lFokNNtQJnOj/RBKmyt6dlof0yhaHEDELaWHuECm1lIZLY3ZbVMwbs+nXkwTAHjKfS/OtMheUBkw+ee49w==", - "dependencies": { - "@turf/boolean-within": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/point-on-feature": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/point-on-feature/-/point-on-feature-6.5.0.tgz", - "integrity": "sha512-bDpuIlvugJhfcF/0awAQ+QI6Om1Y1FFYE8Y/YdxGRongivix850dTeXCo0mDylFdWFPGDo7Mmh9Vo4VxNwW/TA==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/center": "^6.5.0", - "@turf/explode": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/nearest-point": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/point-to-line-distance": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/point-to-line-distance/-/point-to-line-distance-6.5.0.tgz", - "integrity": "sha512-opHVQ4vjUhNBly1bob6RWy+F+hsZDH9SA0UW36pIRzfpu27qipU18xup0XXEePfY6+wvhF6yL/WgCO2IbrLqEA==", - "dependencies": { - "@turf/bearing": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/projection": "^6.5.0", - "@turf/rhumb-bearing": "^6.5.0", - "@turf/rhumb-distance": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/points-within-polygon": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/points-within-polygon/-/points-within-polygon-6.5.0.tgz", - "integrity": "sha512-YyuheKqjliDsBDt3Ho73QVZk1VXX1+zIA2gwWvuz8bR1HXOkcuwk/1J76HuFMOQI3WK78wyAi+xbkx268PkQzQ==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygon-smooth": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/polygon-smooth/-/polygon-smooth-6.5.0.tgz", - "integrity": "sha512-LO/X/5hfh/Rk4EfkDBpLlVwt3i6IXdtQccDT9rMjXEP32tRgy0VMFmdkNaXoGlSSKf/1mGqLl4y4wHd86DqKbg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygon-tangents": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/polygon-tangents/-/polygon-tangents-6.5.0.tgz", - "integrity": "sha512-sB4/IUqJMYRQH9jVBwqS/XDitkEfbyqRy+EH/cMRJURTg78eHunvJ708x5r6umXsbiUyQU4eqgPzEylWEQiunw==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/boolean-within": "^6.5.0", - "@turf/explode": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/nearest-point": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygon-to-line": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/polygon-to-line/-/polygon-to-line-6.5.0.tgz", - "integrity": "sha512-5p4n/ij97EIttAq+ewSnKt0ruvuM+LIDzuczSzuHTpq4oS7Oq8yqg5TQ4nzMVuK41r/tALCk7nAoBuw3Su4Gcw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/polygonize": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/polygonize/-/polygonize-6.5.0.tgz", - "integrity": "sha512-a/3GzHRaCyzg7tVYHo43QUChCspa99oK4yPqooVIwTC61npFzdrmnywMv0S+WZjHZwK37BrFJGFrZGf6ocmY5w==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/envelope": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/projection": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/projection/-/projection-6.5.0.tgz", - "integrity": "sha512-/Pgh9mDvQWWu8HRxqpM+tKz8OzgauV+DiOcr3FCjD6ubDnrrmMJlsf6fFJmggw93mtVPrZRL6yyi9aYCQBOIvg==", - "dependencies": { - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/random": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/random/-/random-6.5.0.tgz", - "integrity": "sha512-8Q25gQ/XbA7HJAe+eXp4UhcXM9aOOJFaxZ02+XSNwMvY8gtWSCBLVqRcW4OhqilgZ8PeuQDWgBxeo+BIqqFWFQ==", - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rectangle-grid": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/rectangle-grid/-/rectangle-grid-6.5.0.tgz", - "integrity": "sha512-yQZ/1vbW68O2KsSB3OZYK+72aWz/Adnf7m2CMKcC+aq6TwjxZjAvlbCOsNUnMAuldRUVN1ph6RXMG4e9KEvKvg==", - "dependencies": { - "@turf/boolean-intersects": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rewind": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/rewind/-/rewind-6.5.0.tgz", - "integrity": "sha512-IoUAMcHWotBWYwSYuYypw/LlqZmO+wcBpn8ysrBNbazkFNkLf3btSDZMkKJO/bvOzl55imr/Xj4fi3DdsLsbzQ==", - "dependencies": { - "@turf/boolean-clockwise": "^6.5.0", - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rhumb-bearing": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/rhumb-bearing/-/rhumb-bearing-6.5.0.tgz", - "integrity": "sha512-jMyqiMRK4hzREjQmnLXmkJ+VTNTx1ii8vuqRwJPcTlKbNWfjDz/5JqJlb5NaFDcdMpftWovkW5GevfnuzHnOYA==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rhumb-destination": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/rhumb-destination/-/rhumb-destination-6.5.0.tgz", - "integrity": "sha512-RHNP1Oy+7xTTdRrTt375jOZeHceFbjwohPHlr9Hf68VdHHPMAWgAKqiX2YgSWDcvECVmiGaBKWus1Df+N7eE4Q==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/rhumb-distance": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/rhumb-distance/-/rhumb-distance-6.5.0.tgz", - "integrity": "sha512-oKp8KFE8E4huC2Z1a1KNcFwjVOqa99isxNOwfo4g3SUABQ6NezjKDDrnvC4yI5YZ3/huDjULLBvhed45xdCrzg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/sample": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/sample/-/sample-6.5.0.tgz", - "integrity": "sha512-kSdCwY7el15xQjnXYW520heKUrHwRvnzx8ka4eYxX9NFeOxaFITLW2G7UtXb6LJK8mmPXI8Aexv23F2ERqzGFg==", - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/sector": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/sector/-/sector-6.5.0.tgz", - "integrity": "sha512-cYUOkgCTWqa23SOJBqxoFAc/yGCUsPRdn/ovbRTn1zNTm/Spmk6hVB84LCKOgHqvSF25i0d2kWqpZDzLDdAPbw==", - "dependencies": { - "@turf/circle": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-arc": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/shortest-path": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/shortest-path/-/shortest-path-6.5.0.tgz", - "integrity": "sha512-4de5+G7+P4hgSoPwn+SO9QSi9HY5NEV/xRJ+cmoFVRwv2CDsuOPDheHKeuIAhKyeKDvPvPt04XYWbac4insJMg==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/bbox-polygon": "^6.5.0", - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/clean-coords": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/transform-scale": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/simplify": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/simplify/-/simplify-6.5.0.tgz", - "integrity": "sha512-USas3QqffPHUY184dwQdP8qsvcVH/PWBYdXY5am7YTBACaQOMAlf6AKJs9FT8jiO6fQpxfgxuEtwmox+pBtlOg==", - "dependencies": { - "@turf/clean-coords": "^6.5.0", - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/square": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/square/-/square-6.5.0.tgz", - "integrity": "sha512-BM2UyWDmiuHCadVhHXKIx5CQQbNCpOxB6S/aCNOCLbhCeypKX5Q0Aosc5YcmCJgkwO5BERCC6Ee7NMbNB2vHmQ==", - "dependencies": { - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/square-grid": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/square-grid/-/square-grid-6.5.0.tgz", - "integrity": "sha512-mlR0ayUdA+L4c9h7p4k3pX6gPWHNGuZkt2c5II1TJRmhLkW2557d6b/Vjfd1z9OVaajb1HinIs1FMSAPXuuUrA==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/rectangle-grid": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/standard-deviational-ellipse": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/standard-deviational-ellipse/-/standard-deviational-ellipse-6.5.0.tgz", - "integrity": "sha512-02CAlz8POvGPFK2BKK8uHGUk/LXb0MK459JVjKxLC2yJYieOBTqEbjP0qaWhiBhGzIxSMaqe8WxZ0KvqdnstHA==", - "dependencies": { - "@turf/center-mean": "^6.5.0", - "@turf/ellipse": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/points-within-polygon": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/tag": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/tag/-/tag-6.5.0.tgz", - "integrity": "sha512-XwlBvrOV38CQsrNfrxvBaAPBQgXMljeU0DV8ExOyGM7/hvuGHJw3y8kKnQ4lmEQcmcrycjDQhP7JqoRv8vFssg==", - "dependencies": { - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/tesselate": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/tesselate/-/tesselate-6.5.0.tgz", - "integrity": "sha512-M1HXuyZFCfEIIKkglh/r5L9H3c5QTEsnMBoZOFQiRnGPGmJWcaBissGb7mTFX2+DKE7FNWXh4TDnZlaLABB0dQ==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "earcut": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/tin": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/tin/-/tin-6.5.0.tgz", - "integrity": "sha512-YLYikRzKisfwj7+F+Tmyy/LE3d2H7D4kajajIfc9mlik2+esG7IolsX/+oUz1biguDYsG0DUA8kVYXDkobukfg==", - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/transform-rotate": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/transform-rotate/-/transform-rotate-6.5.0.tgz", - "integrity": "sha512-A2Ip1v4246ZmpssxpcL0hhiVBEf4L8lGnSPWTgSv5bWBEoya2fa/0SnFX9xJgP40rMP+ZzRaCN37vLHbv1Guag==", - "dependencies": { - "@turf/centroid": "^6.5.0", - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/rhumb-bearing": "^6.5.0", - "@turf/rhumb-destination": "^6.5.0", - "@turf/rhumb-distance": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/transform-scale": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/transform-scale/-/transform-scale-6.5.0.tgz", - "integrity": "sha512-VsATGXC9rYM8qTjbQJ/P7BswKWXHdnSJ35JlV4OsZyHBMxJQHftvmZJsFbOqVtQnIQIzf2OAly6rfzVV9QLr7g==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/center": "^6.5.0", - "@turf/centroid": "^6.5.0", - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/rhumb-bearing": "^6.5.0", - "@turf/rhumb-destination": "^6.5.0", - "@turf/rhumb-distance": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/transform-translate": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/transform-translate/-/transform-translate-6.5.0.tgz", - "integrity": "sha512-NABLw5VdtJt/9vSstChp93pc6oel4qXEos56RBMsPlYB8hzNTEKYtC146XJvyF4twJeeYS8RVe1u7KhoFwEM5w==", - "dependencies": { - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/rhumb-destination": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/triangle-grid": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/triangle-grid/-/triangle-grid-6.5.0.tgz", - "integrity": "sha512-2jToUSAS1R1htq4TyLQYPTIsoy6wg3e3BQXjm2rANzw4wPQCXGOxrur1Fy9RtzwqwljlC7DF4tg0OnWr8RjmfA==", - "dependencies": { - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/intersect": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/truncate": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/truncate/-/truncate-6.5.0.tgz", - "integrity": "sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/turf": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/turf/-/turf-6.5.0.tgz", - "integrity": "sha512-ipMCPnhu59bh92MNt8+pr1VZQhHVuTMHklciQURo54heoxRzt1neNYZOBR6jdL+hNsbDGAECMuIpAutX+a3Y+w==", - "dependencies": { - "@turf/along": "^6.5.0", - "@turf/angle": "^6.5.0", - "@turf/area": "^6.5.0", - "@turf/bbox": "^6.5.0", - "@turf/bbox-clip": "^6.5.0", - "@turf/bbox-polygon": "^6.5.0", - "@turf/bearing": "^6.5.0", - "@turf/bezier-spline": "^6.5.0", - "@turf/boolean-clockwise": "^6.5.0", - "@turf/boolean-contains": "^6.5.0", - "@turf/boolean-crosses": "^6.5.0", - "@turf/boolean-disjoint": "^6.5.0", - "@turf/boolean-equal": "^6.5.0", - "@turf/boolean-intersects": "^6.5.0", - "@turf/boolean-overlap": "^6.5.0", - "@turf/boolean-parallel": "^6.5.0", - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/boolean-point-on-line": "^6.5.0", - "@turf/boolean-within": "^6.5.0", - "@turf/buffer": "^6.5.0", - "@turf/center": "^6.5.0", - "@turf/center-mean": "^6.5.0", - "@turf/center-median": "^6.5.0", - "@turf/center-of-mass": "^6.5.0", - "@turf/centroid": "^6.5.0", - "@turf/circle": "^6.5.0", - "@turf/clean-coords": "^6.5.0", - "@turf/clone": "^6.5.0", - "@turf/clusters": "^6.5.0", - "@turf/clusters-dbscan": "^6.5.0", - "@turf/clusters-kmeans": "^6.5.0", - "@turf/collect": "^6.5.0", - "@turf/combine": "^6.5.0", - "@turf/concave": "^6.5.0", - "@turf/convex": "^6.5.0", - "@turf/destination": "^6.5.0", - "@turf/difference": "^6.5.0", - "@turf/dissolve": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/distance-weight": "^6.5.0", - "@turf/ellipse": "^6.5.0", - "@turf/envelope": "^6.5.0", - "@turf/explode": "^6.5.0", - "@turf/flatten": "^6.5.0", - "@turf/flip": "^6.5.0", - "@turf/great-circle": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/hex-grid": "^6.5.0", - "@turf/interpolate": "^6.5.0", - "@turf/intersect": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/isobands": "^6.5.0", - "@turf/isolines": "^6.5.0", - "@turf/kinks": "^6.5.0", - "@turf/length": "^6.5.0", - "@turf/line-arc": "^6.5.0", - "@turf/line-chunk": "^6.5.0", - "@turf/line-intersect": "^6.5.0", - "@turf/line-offset": "^6.5.0", - "@turf/line-overlap": "^6.5.0", - "@turf/line-segment": "^6.5.0", - "@turf/line-slice": "^6.5.0", - "@turf/line-slice-along": "^6.5.0", - "@turf/line-split": "^6.5.0", - "@turf/line-to-polygon": "^6.5.0", - "@turf/mask": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/midpoint": "^6.5.0", - "@turf/moran-index": "^6.5.0", - "@turf/nearest-point": "^6.5.0", - "@turf/nearest-point-on-line": "^6.5.0", - "@turf/nearest-point-to-line": "^6.5.0", - "@turf/planepoint": "^6.5.0", - "@turf/point-grid": "^6.5.0", - "@turf/point-on-feature": "^6.5.0", - "@turf/point-to-line-distance": "^6.5.0", - "@turf/points-within-polygon": "^6.5.0", - "@turf/polygon-smooth": "^6.5.0", - "@turf/polygon-tangents": "^6.5.0", - "@turf/polygon-to-line": "^6.5.0", - "@turf/polygonize": "^6.5.0", - "@turf/projection": "^6.5.0", - "@turf/random": "^6.5.0", - "@turf/rewind": "^6.5.0", - "@turf/rhumb-bearing": "^6.5.0", - "@turf/rhumb-destination": "^6.5.0", - "@turf/rhumb-distance": "^6.5.0", - "@turf/sample": "^6.5.0", - "@turf/sector": "^6.5.0", - "@turf/shortest-path": "^6.5.0", - "@turf/simplify": "^6.5.0", - "@turf/square": "^6.5.0", - "@turf/square-grid": "^6.5.0", - "@turf/standard-deviational-ellipse": "^6.5.0", - "@turf/tag": "^6.5.0", - "@turf/tesselate": "^6.5.0", - "@turf/tin": "^6.5.0", - "@turf/transform-rotate": "^6.5.0", - "@turf/transform-scale": "^6.5.0", - "@turf/transform-translate": "^6.5.0", - "@turf/triangle-grid": "^6.5.0", - "@turf/truncate": "^6.5.0", - "@turf/union": "^6.5.0", - "@turf/unkink-polygon": "^6.5.0", - "@turf/voronoi": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/union": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.5.0.tgz", - "integrity": "sha512-igYWCwP/f0RFHIlC2c0SKDuM/ObBaqSljI3IdV/x71805QbIvY/BYGcJdyNcgEA6cylIGl/0VSlIbpJHZ9ldhw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/unkink-polygon": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/unkink-polygon/-/unkink-polygon-6.5.0.tgz", - "integrity": "sha512-8QswkzC0UqKmN1DT6HpA9upfa1HdAA5n6bbuzHy8NJOX8oVizVAqfEPY0wqqTgboDjmBR4yyImsdPGUl3gZ8JQ==", - "dependencies": { - "@turf/area": "^6.5.0", - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0", - "rbush": "^2.0.1" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/voronoi": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/voronoi/-/voronoi-6.5.0.tgz", - "integrity": "sha512-C/xUsywYX+7h1UyNqnydHXiun4UPjK88VDghtoRypR9cLlb7qozkiLRphQxxsCM0KxyxpVPHBVQXdAL3+Yurow==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "d3-voronoi": "1.1.2" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "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, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "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, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz", - "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/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==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/fs-extra": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz", - "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/geojson": { - "version": "7946.0.8", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", - "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" - }, - "node_modules/@types/googlemaps": { - "version": "3.43.3", - "resolved": "https://registry.npmjs.org/@types/googlemaps/-/googlemaps-3.43.3.tgz", - "integrity": "sha512-ZWNoz/O8MPEpiajvj7QiqCY8tTLFNqNZ/a+s+zTV58wFVNAvvqV4bdGfnsjTb5Cs4V6wEsLrX8XRhmnyYJ2Tdg==", - "deprecated": "Types for the Google Maps browser API have moved to @types/google.maps. Note: these types are not for the googlemaps npm package, which is a Node API.", - "dev": true - }, - "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 - }, - "node_modules/@types/http-proxy": { - "version": "1.17.15", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", - "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.0.tgz", - "integrity": "sha512-CPT4r0a63e5wpNj5ejMnconM7a+0Hdx6/APsyw8AQOHk0/Mxp3xYrym1ZabWJiYuQkgKB3MonYoN04mxtvAvRA==", - "dev": true - }, - "node_modules/@types/jasminewd2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.3.tgz", - "integrity": "sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg==", - "dev": true, - "dependencies": { - "@types/jasmine": "*" - } - }, - "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 - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "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 - }, - "node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/q": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", - "integrity": "sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.16", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", - "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/selenium-webdriver": { - "version": "3.0.26", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.26.tgz", - "integrity": "sha512-dyIGFKXfUFiwkMfNGn1+F6b80ZjR3uSYv1j6xVJSDlft5waZ2cwkHW4e7zNzvq7hiEackcgvBpmnXZrI1GltPg==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "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, - "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==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==", - "dev": true - }, - "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, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" - }, - "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.16.1.tgz", - "integrity": "sha512-SK777klBdlkUZpZLC1mPvyOWk9yAFCWmug13eAjVQ4/Q1LATE/NbcQL1xDHkptQkZOLnPmLUA1Y54m8dqYwnoQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "4.16.1", - "@typescript-eslint/scope-manager": "4.16.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/experimental-utils": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.16.1.tgz", - "integrity": "sha512-0Hm3LSlMYFK17jO4iY3un1Ve9x1zLNn4EM50Lia+0EV99NdbK+cn0er7HC7IvBA23mBg3P+8dUkMXy4leL33UQ==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.16.1", - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/typescript-estree": "4.16.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.11.0.tgz", - "integrity": "sha512-EPvC/bU2n1LKtzKWP1AjGWkp7r8tJ8giVlZHIODo6q7SAd6J+/9vjtEKHK2G/Qp+D2IGPsQge+oadDR3CZcFtQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.11.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.16.1.tgz", - "integrity": "sha512-/c0LEZcDL5y8RyI1zLcmZMvJrsR6SM1uetskFkoh3dvqDKVXPsXI+wFB/CbVw7WkEyyTKobC1mUNp/5y6gRvXg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.16.1", - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/typescript-estree": "4.16.1", - "debug": "^4.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.16.1.tgz", - "integrity": "sha512-6IlZv9JaurqV0jkEg923cV49aAn8V6+1H1DRfhRcvZUrptQ+UtSKHb5kwTayzOYTJJ/RsYZdcvhOEKiBLyc0Cw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/visitor-keys": "4.16.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.16.1.tgz", - "integrity": "sha512-nnKqBwMgRlhzmJQF8tnFDZWfunXmJyuXj55xc8Kbfup4PbkzdoDXZvzN8//EiKR27J6vUSU8j4t37yUuYPiLqA==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.16.1.tgz", - "integrity": "sha512-m8I/DKHa8YbeHt31T+UGd/l8Kwr0XCTCZL3H4HMvvLCT7HU9V7yYdinTOv1gf/zfqNeDcCgaFH2BMsS8x6NvJg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.16.1", - "@typescript-eslint/visitor-keys": "4.16.1", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.11.0.tgz", - "integrity": "sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.11.0", - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/typescript-estree": "5.11.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz", - "integrity": "sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/visitor-keys": "5.11.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz", - "integrity": "sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz", - "integrity": "sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/visitor-keys": "5.11.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz", - "integrity": "sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.11.0", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.16.1.tgz", - "integrity": "sha512-s/aIP1XcMkEqCNcPQtl60ogUYjSM8FU2mq1O7y5cFf3Xcob1z1iXWNB6cC43Op+NGRTFgGolri6s8z/efA9i1w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.16.1", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@videogular/ngx-videogular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@videogular/ngx-videogular/-/ngx-videogular-6.0.0.tgz", - "integrity": "sha512-gMEBeRm0pNaxu6nzlgEwksYquKUaQDVz7Lq5emPCViGs1o/aiS5GP58XoTBYD/Y4vjxX0t8pfqBZsBRoTfeyiw==", - "dependencies": { - "tslib": "^1.11.1 || ^2.0.0" - }, - "peerDependencies": { - "@angular/common": ">=8.0.0", - "@angular/core": ">=8.0.0", - "@angular/platform-browser-dynamic": ">=8.0.0", - "core-js": ">=2.5.4", - "rxjs": ">=6.5.4", - "zone.js": ">=0.10.2" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "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/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/@yarnpkg/parsers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", - "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", - "dev": true, - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/@yarnpkg/parsers/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true - }, - "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@zkochan/js-yaml/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 - }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "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==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-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/adm-zip": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", - "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", - "dev": true, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.2.0.tgz", - "integrity": "sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.0.2.tgz", - "integrity": "sha512-Brah4Uo5/U8v76c6euTwtjVFFaVishwnJrQBYpev1JRh4vjA1F4HY3UzQez41YUCszUCXKagG8v6eVRBHV1gkw==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/angular-calendar": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/angular-calendar/-/angular-calendar-0.29.0.tgz", - "integrity": "sha512-TK4yUNsOhCUVrBRTJhGvVgGkQHgR0DTDFnPUTv0YSeDAuq5+irWjH23UrHmrhBCwFPelGLrTHjxsbMwjuzrJjw==", - "dependencies": { - "@scarf/scarf": "^1.1.1", - "angular-draggable-droppable": "^6.0.0", - "angular-resizable-element": "^5.0.0", - "calendar-utils": "^0.9.0", - "positioning": "^2.0.1", - "tslib": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mattlewis92" - }, - "peerDependencies": { - "@angular/core": ">=10.0.0" - } - }, - "node_modules/angular-draggable-droppable": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/angular-draggable-droppable/-/angular-draggable-droppable-6.1.0.tgz", - "integrity": "sha512-axf3YMZ1ovhVZXnydP5iatNT5V05uK1wrUIhlJy4XGFVzIfTOGPn6d0E4r43lyDPj1r6daz3ODm8UNXzjWgcCg==", - "dependencies": { - "@mattlewis92/dom-autoscroller": "^2.4.2", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/core": ">=12.0.0" - } - }, - "node_modules/angular-draggable-droppable/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/angular-resizable-element": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/angular-resizable-element/-/angular-resizable-element-5.0.0.tgz", - "integrity": "sha512-GbV8myA2x8aUU8CK7siTi1QMjtilzQzIgClqUVpE/YM1WAp0/OnioBV12oLcOT24eEwP3zDqPTHL+D1Kv2rNAw==", - "dependencies": { - "tslib": "^2.2.0" - }, - "peerDependencies": { - "@angular/core": ">=10.0.0" - } - }, - "node_modules/angular-svg-icon": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/angular-svg-icon/-/angular-svg-icon-15.0.0.tgz", - "integrity": "sha512-qurcOPbGri1ZveGd3Iol7CRSpveaxu21V1VCPwMSUfXlwwUT1hL4Aq3VE/RkJw5zZmFuR8akgaKeHLD+CFjjEQ==", - "dependencies": { - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/common": ">=15.0.0", - "@angular/core": ">=15.0.0", - "rxjs": ">=6.6.3" - } - }, - "node_modules/angular-svg-icon/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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" - ], - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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 - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "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 - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.18", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", - "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001591", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "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, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", - "dev": true - }, - "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", - "dev": true, - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "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" - } - ] - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "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, - "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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/blocking-proxy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", - "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "blocking-proxy": "built/lib/bin.js" - }, - "engines": { - "node": ">=6.9.x" - } - }, - "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, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "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 - }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/bplist-parser": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", - "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", - "dev": true, - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-fs-access": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/browser-fs-access/-/browser-fs-access-0.35.0.tgz", - "integrity": "sha512-sLoadumpRfsjprP8XzVjpQc0jK8yqHBx0PtUTGYj2fftT+P/t+uyDAQdMgGAPKD011in/O+YYGh7fIs0oG/viw==" - }, - "node_modules/browserslist": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", - "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001663", - "electron-to-chromium": "^1.5.28", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/browserstack": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", - "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", - "dev": true, - "dependencies": { - "https-proxy-agent": "^2.2.1" - } - }, - "node_modules/browserstack/node_modules/agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "dependencies": { - "es6-promisify": "^5.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/browserstack/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/browserstack/node_modules/https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dev": true, - "dependencies": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/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 - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/calendar-utils": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/calendar-utils/-/calendar-utils-0.9.0.tgz", - "integrity": "sha512-QxMf/I+y/it02EoFvla7Fq9n4SIOK9T97wT4W0VfvbFTbhf92AYHm9IBXGWDJiARNM2pvrGCFtI8AFB0D4OuWw==" - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001668", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz", - "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/capacitor-plugin-resgrid": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/capacitor-plugin-resgrid/-/capacitor-plugin-resgrid-1.0.14.tgz", - "integrity": "sha512-HHuvx0QXlTujTLVu4rhQQfqqDmHiKNhzrHLsH1t7EDL523buDWSM/Vwa6B9GtY8AOnfYbB3cmR/9v7wO12hGGw==", - "peerDependencies": { - "@capacitor/core": "^6.0.0" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", - "dev": true, - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cheerio/node_modules/parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "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, - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "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, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colorette": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz", - "integrity": "sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "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, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/comment-parser": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.7.6.tgz", - "integrity": "sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg==", - "dev": true, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/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 - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concaveman": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/concaveman/-/concaveman-1.2.1.tgz", - "integrity": "sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==", - "dependencies": { - "point-in-polygon": "^1.1.0", - "rbush": "^3.0.1", - "robust-predicates": "^2.0.4", - "tinyqueue": "^2.0.3" - } - }, - "node_modules/concaveman/node_modules/rbush": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", - "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", - "dependencies": { - "quickselect": "^2.0.0" - } - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "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, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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 - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "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/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", - "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", - "hasInstallScript": true, - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", - "dev": true, - "dependencies": { - "browserslist": "^4.23.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", - "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cosmiconfig/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 - }, - "node_modules/cosmiconfig/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, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/critters": { - "version": "0.0.22", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.22.tgz", - "integrity": "sha512-NU7DEcQZM2Dy8XTKFHxtdnIM/drE312j2T4PCVaSUcS0oBeyT/NImpRw/Ap0zOr/1SE7SgPK9tGPg1WK/sVakw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "postcss-media-query-parser": "^0.2.3" - } - }, - "node_modules/critters/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/critters/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, - "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/critters/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/critters/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/critters/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==", - "dev": true, - "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/critters/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/critters/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==", - "dev": true, - "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/critters/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" - } - ] - }, - "node_modules/critters/node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "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/critters/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/critters/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/critters/node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/critters/node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/critters/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/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-loader": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", - "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/csscolorparser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", - "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" - }, - "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, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cupertino-pane": { - "version": "1.2.81", - "resolved": "https://registry.npmjs.org/cupertino-pane/-/cupertino-pane-1.2.81.tgz", - "integrity": "sha512-x6cROg6hxlpkrgt3LtHQ9dfGQ8UzzKeFrYCSBcGir3HVg4HUImuXmlOzZ2DWvbkHzFAJtHfeia4gVT3VQpbFvA==" - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true - }, - "node_modules/d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" - }, - "node_modules/d3-geo": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.7.1.tgz", - "integrity": "sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==", - "dependencies": { - "d3-array": "1" - } - }, - "node_modules/d3-voronoi": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", - "integrity": "sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw==" - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-equal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", - "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", - "dependencies": { - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.5.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-freeze-strict": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-freeze-strict/-/deep-freeze-strict-1.1.1.tgz", - "integrity": "sha512-QemROZMM2IvhAcCFvahdX2Vbm4S/txeq5rFYU9fh4mQP79WTMW5c/HkQ2ICl1zuzcDZdPZ6zarDxQeQMsVYoNA==" - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=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==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", - "dev": true, - "dependencies": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", - "dev": true, - "dependencies": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/density-clustering": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/density-clustering/-/density-clustering-1.3.0.tgz", - "integrity": "sha512-icpmBubVTwLnsaor9qH/4tG5+7+f61VcqMN3V3pm9sxxSCt2Jcs0zWOgwZW9ARJYaKD3FumIgHiMOcIMRRAzFQ==" - }, - "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, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domhandler/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" - } - ] - }, - "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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 - }, - "node_modules/earcut": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" - }, - "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 - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecc-jsbn/node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "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 - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.37", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.37.tgz", - "integrity": "sha512-u7000ZB/X0K78TaQqXZ5ktoR7J79B9US7IkE4zyvcILYwOGY2Tx9GRPYstn7HmuPcMxZ+BDGqIsyLpZQi9ufPw==", - "dev": true - }, - "node_modules/elementtree": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", - "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", - "dev": true, - "dependencies": { - "sax": "1.1.4" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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 - }, - "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, - "engines": { - "node": ">= 4" - } - }, - "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, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/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==", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", - "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", - "dev": true, - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.7.2", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "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 - } - } - }, - "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==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/ent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", - "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", - "dev": true, - "dependencies": { - "punycode": "^1.4.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "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", - "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", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "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.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-denodeify": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-denodeify/-/es6-denodeify-0.1.5.tgz", - "integrity": "sha512-731Rf4NqlPvhkT1pIF7r8vZxESJlWocNpXLuyPlVnfEGXlwuJaMvU5WpyyDjpudDC2cgXVX849xljzvQqBg1QQ==" - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "node_modules/es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "dev": true, - "dependencies": { - "es6-promise": "^4.0.3" - } - }, - "node_modules/esbuild": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", - "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.1", - "@esbuild/android-arm": "0.20.1", - "@esbuild/android-arm64": "0.20.1", - "@esbuild/android-x64": "0.20.1", - "@esbuild/darwin-arm64": "0.20.1", - "@esbuild/darwin-x64": "0.20.1", - "@esbuild/freebsd-arm64": "0.20.1", - "@esbuild/freebsd-x64": "0.20.1", - "@esbuild/linux-arm": "0.20.1", - "@esbuild/linux-arm64": "0.20.1", - "@esbuild/linux-ia32": "0.20.1", - "@esbuild/linux-loong64": "0.20.1", - "@esbuild/linux-mips64el": "0.20.1", - "@esbuild/linux-ppc64": "0.20.1", - "@esbuild/linux-riscv64": "0.20.1", - "@esbuild/linux-s390x": "0.20.1", - "@esbuild/linux-x64": "0.20.1", - "@esbuild/netbsd-x64": "0.20.1", - "@esbuild/openbsd-x64": "0.20.1", - "@esbuild/sunos-x64": "0.20.1", - "@esbuild/win32-arm64": "0.20.1", - "@esbuild/win32-ia32": "0.20.1", - "@esbuild/win32-x64": "0.20.1" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.20.1.tgz", - "integrity": "sha512-6v/WJubRsjxBbQdz6izgvx7LsVFvVaGmSdwrFHmEzoVgfXL89hkKPoQHsnVI2ngOkcBUQT9kmAM1hVL1k/Av4A==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=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, - "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", - "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" - } - }, - "node_modules/eslint-plugin-import/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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "30.7.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.7.6.tgz", - "integrity": "sha512-w18IOiS/9ahKgRfQOuHbce+EQYx3fwIkZhUZDEK+augNlhJkzgTSZkrBkzaflSbFNZ9/Tk4xzUABEaTbsBSzew==", - "dev": true, - "dependencies": { - "comment-parser": "^0.7.6", - "debug": "^4.2.0", - "jsdoctypeparser": "^9.0.0", - "lodash": "^4.17.20", - "regextras": "^0.7.1", - "semver": "^7.3.2", - "spdx-expression-parse": "^3.0.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0" - } - }, - "node_modules/eslint-plugin-prefer-arrow": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.2.tgz", - "integrity": "sha512-C8YMhL+r8RMeMdYAw/rQtE6xNdMulj+zGWud/qIGnlmomiPRaLDGLMeskZ3alN6uMBojmooRimtdrXebLN4svQ==", - "dev": true, - "peerDependencies": { - "eslint": ">=2.0.0" - } - }, - "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, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/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, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/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.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/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 - }, - "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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "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_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "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, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/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/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "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, - "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, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/eventsource": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.2.tgz", - "integrity": "sha512-xAH3zWhgO2/3KIniEKYPr8plNSzlGINOUqYj0m0u7AB81iRw8b/3E73W6AuU+6klLbaSFmZnaETQ2lXPfAydrA==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "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, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/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, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "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 - }, - "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, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "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 - }, - "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==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-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 - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz", - "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "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, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fetch-cookie": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.7.3.tgz", - "integrity": "sha512-rZPkLnI8x5V+zYAiz8QonAHsTb4BY+iFowFBI1RFn0zrO343AVp9X7/yUj/9wL6Ef/8fLls8b/vGtzUvmyAUGA==", - "dependencies": { - "es6-denodeify": "^0.1.1", - "tough-cookie": "^2.3.3" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "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, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "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 - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "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==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "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_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "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==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "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/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "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, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "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==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/geojson-equality": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", - "integrity": "sha512-TqG8YbqizP3EfwP5Uw4aLu6pKkg6JQK9uq/XZ1lXQntvTHD1BBKJWhNpJ2M0ax6TuWMP3oyx6Oq7FCIfznrgpQ==", - "dependencies": { - "deep-equal": "^1.0.0" - } - }, - "node_modules/geojson-rbush": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.2.0.tgz", - "integrity": "sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==", - "dependencies": { - "@turf/bbox": "*", - "@turf/helpers": "6.x", - "@turf/meta": "6.x", - "@types/geojson": "7946.0.8", - "rbush": "^3.0.1" - } - }, - "node_modules/geojson-rbush/node_modules/rbush": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", - "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", - "dependencies": { - "quickselect": "^2.0.0" - } - }, - "node_modules/geojson-vt": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", - "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/gl-matrix": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "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 - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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 - }, - "node_modules/grid-index": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", - "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" - }, - "node_modules/hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", - "engines": { - "node": ">=0.8.0" - } - }, - "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 - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/har-validator/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, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/har-validator/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 - }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hls.js": { - "version": "1.5.16", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.16.tgz", - "integrity": "sha512-+wAWr4aeRq9ODN8/Vgz0Cee1Cw6Ysr7vyEkZJCwOJYNwlld7CNmhKE+dLwfpUO2UuotYLGF0of6UFiN6zA7mig==" - }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/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 - }, - "node_modules/howler": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/howler/-/howler-2.2.3.tgz", - "integrity": "sha512-QM0FFkw0LRX1PR8pNzJVAY25JhIWvbKMBFM4gqk+QdV+kPXOhleWGCB6AiAF/goGjIHK2e/nIElplvjQwhr0jg==" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/hpack.js/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==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/hpack.js/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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "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 - }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/htmlparser2/node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "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, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "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, - "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 - }, - "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, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "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, - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", - "dev": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "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, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", - "dev": true, - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "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==" - }, - "node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/inquirer": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", - "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", - "dev": true, - "dependencies": { - "@ljharb/through": "^2.3.12", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "figures": "^3.2.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/inquirer/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/inquirer/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/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/inquirer/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/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ionicons": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", - "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", - "dependencies": { - "@stencil/core": "^4.0.3" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ip-address/node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true - }, - "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, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dev": true, - "dependencies": { - "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==", - "dev": true, - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=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, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "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, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "dependencies": { - "is-path-inside": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "dev": true, - "dependencies": { - "path-is-inside": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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 - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "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, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/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/istanbul-lib-report/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/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/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/jake/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, - "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/jake/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/jake/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/jake/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/jake/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/jasmine": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", - "integrity": "sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==", - "dev": true, - "dependencies": { - "exit": "^0.1.2", - "glob": "^7.0.6", - "jasmine-core": "~2.8.0" - }, - "bin": { - "jasmine": "bin/jasmine.js" - } - }, - "node_modules/jasmine-core": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.8.0.tgz", - "integrity": "sha512-zl0nZWDrmbCiKns0NcjkFGYkVTGCPUgoHypTaj+G2AzaWus7QGoXARSlYsSle2VRpSdfJmM+hzmFKzQNhF2kHg==", - "dev": true - }, - "node_modules/jasmine-spec-reporter": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-5.0.2.tgz", - "integrity": "sha512-6gP1LbVgJ+d7PKksQBc2H0oDGNRQI3gKUsWlswKaQ2fif9X5gzhQcgM5+kiJGCQVurOG09jqNhk7payggyp5+g==", - "dev": true, - "dependencies": { - "colors": "1.4.0" - } - }, - "node_modules/jasmine/node_modules/jasmine-core": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", - "integrity": "sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==", - "dev": true - }, - "node_modules/jasminewd2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", - "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==", - "dev": true, - "engines": { - "node": ">= 6.9.x" - } - }, - "node_modules/jeep-sqlite": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jeep-sqlite/-/jeep-sqlite-2.8.0.tgz", - "integrity": "sha512-FWNUP6OAmrUHwiW7H1xH5YUQ8tN2O4l4psT1sLd7DQtHd5PfrA1nvNdeKPNj+wQBtu7elJa8WoUibTytNTaaCg==", - "dependencies": { - "@stencil/core": "^4.20.0", - "browser-fs-access": "^0.35.0", - "jszip": "^3.10.1", - "localforage": "^1.10.0", - "sql.js": "^1.11.0" - } - }, - "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, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "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==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true - }, - "node_modules/jsdoctypeparser": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", - "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", - "dev": true, - "bin": { - "jsdoctypeparser": "bin/jsdoctypeparser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "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 - }, - "node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "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 - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "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, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/jszip/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/jszip/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==", - "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/jszip/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==" - }, - "node_modules/jszip/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/jwt-decode": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", - "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" - }, - "node_modules/karma": { - "version": "6.3.20", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.20.tgz", - "integrity": "sha512-HRNQhMuKOwKpjYlWiJP0DUrJOh+QjaI/DTaD8b9rEm4Il3tJ8MijutVZH4ts10LuUFst/CedwTS6vieCN8yTSw==", - "dev": true, - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", - "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", - "dev": true, - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-chrome-launcher/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/karma-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", - "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.1", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-coverage-istanbul-reporter": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", - "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^3.0.2", - "minimatch": "^3.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/mattlewis92" - } - }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/karma-coverage-istanbul-reporter/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma-coverage/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/karma-jasmine": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.2.tgz", - "integrity": "sha512-ggi84RMNQffSDmWSyyt4zxzh2CQGwsxvYYsprgyR1j8ikzIduEdOlcLvXjZGwXG/0j41KUXOWsUCBfbEHPWP9g==", - "dev": true, - "dependencies": { - "jasmine-core": "^3.6.0" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "karma": "*" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", - "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", - "dev": true, - "peerDependencies": { - "jasmine-core": ">=3.8", - "karma": ">=0.9", - "karma-jasmine": ">=1.1" - } - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/karma/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_modules/karma/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/kdbush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", - "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" - }, - "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, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "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==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/leaflet": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.7.1.tgz", - "integrity": "sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw==" - }, - "node_modules/less": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", - "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", - "dev": true, - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", - "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", - "dev": true, - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/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, - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/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, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/less/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true - }, - "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, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", - "dev": true, - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/livekit-client": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/livekit-client/-/livekit-client-2.5.9.tgz", - "integrity": "sha512-oDpK6SKYB1F+mNO+25DA0bF0cD2XoOJeD8ji4YQpzDBQv2IxeyKrQhoqXAqrYgIKuiMNkImSf+yg2v7EHSl4Og==", - "dependencies": { - "@livekit/protocol": "1.24.0", - "events": "^3.3.0", - "loglevel": "^1.8.0", - "sdp-transform": "^2.14.1", - "ts-debounce": "^4.0.0", - "tslib": "2.7.0", - "typed-emitter": "^2.1.0", - "webrtc-adapter": "^9.0.0" - } - }, - "node_modules/livekit-client/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "dependencies": { - "lie": "3.1.1" - } - }, - "node_modules/localforage/node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "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==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "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 - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/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/log-symbols/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, - "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/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/loglevel": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", - "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "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, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", - "dev": true, - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/mapbox-gl": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-2.5.0.tgz", - "integrity": "sha512-yIC3TCaY+CfTj1gU4z3DrB1hMck8ijAAPlWBsLMu+5BcTCk6F9mgi595Zv1DKDacFjyphHoWS29AMRJHjYnKzg==", - "dependencies": { - "@mapbox/geojson-rewind": "^0.5.0", - "@mapbox/geojson-types": "^1.0.2", - "@mapbox/jsonlint-lines-primitives": "^2.0.2", - "@mapbox/mapbox-gl-supported": "^2.0.0", - "@mapbox/point-geometry": "^0.1.0", - "@mapbox/tiny-sdf": "^2.0.2", - "@mapbox/unitbezier": "^0.0.0", - "@mapbox/vector-tile": "^1.3.1", - "@mapbox/whoots-js": "^3.1.0", - "csscolorparser": "~1.0.3", - "earcut": "^2.2.2", - "geojson-vt": "^3.2.1", - "gl-matrix": "^3.3.0", - "grid-index": "^1.1.0", - "minimist": "^1.2.5", - "murmurhash-js": "^1.0.0", - "pbf": "^3.2.1", - "potpack": "^1.0.1", - "quickselect": "^2.0.0", - "rw": "^1.3.3", - "supercluster": "^7.1.3", - "tinyqueue": "^2.0.3", - "vt-pbf": "^3.1.1" - } - }, - "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, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "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, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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 - }, - "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, - "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, - "engines": { - "node": ">= 0.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, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "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, - "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, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", - "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "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 - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "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, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/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 - }, - "node_modules/minipass-json-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", - "integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==", - "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream/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 - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/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 - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/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 - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/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 - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "dev": true, - "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 - }, - "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, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/murmurhash-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", - "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" - }, - "node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/native-run": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.1.tgz", - "integrity": "sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==", - "dev": true, - "dependencies": { - "@ionic/utils-fs": "^3.1.7", - "@ionic/utils-terminal": "^2.3.4", - "bplist-parser": "^0.3.2", - "debug": "^4.3.4", - "elementtree": "^0.1.7", - "ini": "^4.1.1", - "plist": "^3.1.0", - "split2": "^4.2.0", - "through2": "^4.0.2", - "tslib": "^2.6.2", - "yauzl": "^2.10.0" - }, - "bin": { - "native-run": "bin/native-run" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/native-run/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/needle": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", - "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", - "dev": true, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/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, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/needle/node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true, - "optional": true - }, - "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==", - "dev": true, - "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 - }, - "node_modules/ng-gallery": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/ng-gallery/-/ng-gallery-7.1.2.tgz", - "integrity": "sha512-RrGW8RQ6wDjk4VHWM9IBAkuf6I1xEbbM1yUUfVAbh5aboIzxGsGQo42F96OZ1oxftD1OgL7yEU3MpyJ8p+sRAg==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/cdk": ">=14.0.0", - "@angular/common": ">=14.0.0", - "@angular/core": ">=14.0.0", - "rxjs": ">=6.0.0" - } - }, - "node_modules/ngrx-store-freeze": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/ngrx-store-freeze/-/ngrx-store-freeze-0.2.4.tgz", - "integrity": "sha512-90awpbbMa/x2H81eWWYniyli3LJ1PZU/FaztL10d9Rp/4kw2+97pqyLjdxSPxcOv9St//m9kfuWZ7gyoVDjgcg==", - "dependencies": { - "deep-freeze-strict": "^1.1.1" - }, - "peerDependencies": { - "@ngrx/store": ">=4.0.0" - } - }, - "node_modules/ngrx-store-localstorage": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/ngrx-store-localstorage/-/ngrx-store-localstorage-17.0.0.tgz", - "integrity": "sha512-tub6zwYsU+5aG8y2pV30C9Gz7ff2nlmUDOB4O9JVxU6ZrgogDzDR/+FpY5BgPv/1KNYD0aNXCfv0iCuxDVMBEQ==", - "dependencies": { - "deepmerge": "^4.2.2", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^17.0.4", - "@angular/core": "^17.0.4", - "@ngrx/store": "^17.0.0" - } - }, - "node_modules/ngrx-store-localstorage/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "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-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, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", - "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", - "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.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 - }, - "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", - "dev": true, - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dev": true, - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", - "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", - "dev": true, - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", - "dev": true, - "dependencies": { - "ignore-walk": "^6.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", - "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", - "dev": true, - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", - "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", - "dev": true, - "dependencies": { - "@npmcli/redact": "^1.1.0", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/nx": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/nx/-/nx-13.1.3.tgz", - "integrity": "sha512-clM0NQhQKYkqcNz2E3uYRMLwhp2L/9dBhJhQi9XBX4IAyA2gWAomhRIlLm5Xxg3g4h1xwSpP3eJ5t89VikY8Pw==", - "dev": true, - "dependencies": { - "@nrwl/cli": "*" - }, - "bin": { - "nx": "bin/nx.js" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "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, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/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/ora/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, - "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/ora/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/ora/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/ora/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/ora/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/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "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==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "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, - "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 - }, - "node_modules/pacote": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", - "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", - "dev": true, - "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^7.0.0", - "cacache": "^18.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^7.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "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, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/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 - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.0.tgz", - "integrity": "sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==", - "devOptional": true, - "dependencies": { - "entities": "^4.5.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", - "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", - "dev": true, - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream/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/parse5-sax-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", - "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", - "dev": true, - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "devOptional": true, - "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, - "engines": { - "node": ">= 0.8" - } - }, - "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, - "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true - }, - "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, - "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": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/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 - }, - "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pbf": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", - "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", - "dependencies": { - "ieee754": "^1.1.12", - "resolve-protobuf-schema": "^2.1.0" - }, - "bin": { - "pbf": "bin/pbf" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true - }, - "node_modules/picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/piscina": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.4.0.tgz", - "integrity": "sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==", - "dev": true, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dev": true, - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/pkg-dir/node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/plist": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", - "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", - "dev": true, - "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/point-in-polygon": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", - "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==" - }, - "node_modules/polygon-clipping": { - "version": "0.15.7", - "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.7.tgz", - "integrity": "sha512-nhfdr83ECBg6xtqOAJab1tbksbBAOMUltN60bU+llHVOL0e5Onm1WpAXXWXVB39L8AJFssoIhEVuy/S90MmotA==", - "dependencies": { - "robust-predicates": "^3.0.2", - "splaytree": "^3.1.0" - } - }, - "node_modules/polygon-clipping/node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, - "node_modules/positioning": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/positioning/-/positioning-2.0.1.tgz", - "integrity": "sha512-DsAgM42kV/ObuwlRpAzDTjH9E8fGKkMDJHWFX+kfNXSxh7UCCQxEmdjv/Ws5Ft1XDnt3JT8fIDYeKNSE2TbttA==" - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", - "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", - "dev": true, - "dependencies": { - "cosmiconfig": "^9.0.0", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, - "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, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "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, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "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 - }, - "node_modules/potpack": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", - "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" - }, - "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, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/protocol-buffers-schema": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" - }, - "node_modules/protractor": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", - "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", - "deprecated": "We have news to share - Protractor is deprecated and will reach end-of-life by Summer 2023. To learn more and find out about other options please refer to this post on the Angular blog. Thank you for using and contributing to Protractor. https://goo.gle/state-of-e2e-in-angular", - "dev": true, - "dependencies": { - "@types/q": "^0.0.32", - "@types/selenium-webdriver": "^3.0.0", - "blocking-proxy": "^1.0.0", - "browserstack": "^1.5.1", - "chalk": "^1.1.3", - "glob": "^7.0.3", - "jasmine": "2.8.0", - "jasminewd2": "^2.1.0", - "q": "1.4.1", - "saucelabs": "^1.5.0", - "selenium-webdriver": "3.6.0", - "source-map-support": "~0.4.0", - "webdriver-js-extender": "2.1.0", - "webdriver-manager": "^12.1.7", - "yargs": "^15.3.1" - }, - "bin": { - "protractor": "bin/protractor", - "webdriver-manager": "bin/webdriver-manager" - }, - "engines": { - "node": ">=10.13.x" - } - }, - "node_modules/protractor/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/protractor/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/protractor/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/protractor/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/protractor/node_modules/cliui/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/protractor/node_modules/cliui/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==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/protractor/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/protractor/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/protractor/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/protractor/node_modules/source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/protractor/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/protractor/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/protractor/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/protractor/node_modules/wrap-ansi/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/protractor/node_modules/wrap-ansi/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/protractor/node_modules/wrap-ansi/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==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/protractor/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/protractor/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/protractor/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "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, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "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, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "optional": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==", - "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "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, - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "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, - "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, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rbush": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", - "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", - "dependencies": { - "quickselect": "^1.0.1" - } - }, - "node_modules/rbush/node_modules/quickselect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", - "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" - }, - "node_modules/read-package-json": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.1.tgz", - "integrity": "sha512-8PcDiZ8DXUjLf687Ol4BR8Bpm2umR7vhoZOzNRt+uxD9GpBh/K+CAAALVIiYFknmvlmyg7hM7BSNUXPaCCqd0Q==", - "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", - "dev": true, - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==", - "dev": true, - "dependencies": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==", - "dev": true, - "dependencies": { - "pify": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "dev": true - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "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==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", - "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", - "dev": true - }, - "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==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regextras": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.7.1.tgz", - "integrity": "sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==", - "dev": true, - "engines": { - "node": ">=0.1.14" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz", - "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==", - "dev": true, - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-protobuf-schema": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", - "dependencies": { - "protocol-buffers-schema": "^3.3.1" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-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/resolve-url-loader/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "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==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "dev": true, - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/robust-predicates": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", - "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" - }, - "node_modules/rollup": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", - "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", - "dev": true, - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.0", - "@rollup/rollup-android-arm64": "4.24.0", - "@rollup/rollup-darwin-arm64": "4.24.0", - "@rollup/rollup-darwin-x64": "4.24.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", - "@rollup/rollup-linux-arm-musleabihf": "4.24.0", - "@rollup/rollup-linux-arm64-gnu": "4.24.0", - "@rollup/rollup-linux-arm64-musl": "4.24.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", - "@rollup/rollup-linux-riscv64-gnu": "4.24.0", - "@rollup/rollup-linux-s390x-gnu": "4.24.0", - "@rollup/rollup-linux-x64-gnu": "4.24.0", - "@rollup/rollup-linux-x64-musl": "4.24.0", - "@rollup/rollup-win32-arm64-msvc": "4.24.0", - "@rollup/rollup-win32-ia32-msvc": "4.24.0", - "@rollup/rollup-win32-x64-msvc": "4.24.0", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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" - } - ] - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true - }, - "node_modules/sass": { - "version": "1.71.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", - "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.1.1.tgz", - "integrity": "sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==", - "dev": true, - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/saucelabs": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", - "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", - "dev": true, - "dependencies": { - "https-proxy-agent": "^2.2.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/saucelabs/node_modules/agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "dependencies": { - "es6-promisify": "^5.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/saucelabs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/saucelabs/node_modules/https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dev": true, - "dependencies": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/sax": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", - "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/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, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "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, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/sdp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz", - "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==" - }, - "node_modules/sdp-transform": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.2.tgz", - "integrity": "sha512-icY6jVao7MfKCieyo1AyxFYm1baiM+fA00qW/KrNNVlkxHAd34riEKuEkUe4bBb3gJwLJZM+xT60Yj1QL8rHiA==", - "bin": { - "sdp-verify": "checker.js" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selenium-webdriver": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", - "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", - "dev": true, - "dependencies": { - "jszip": "^3.1.3", - "rimraf": "^2.5.4", - "tmp": "0.0.30", - "xml2js": "^0.4.17" - }, - "engines": { - "node": ">= 6.9.0" - } - }, - "node_modules/selenium-webdriver/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/selenium-webdriver/node_modules/tmp": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", - "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/selenium-webdriver/node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/selenium-webdriver/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dev": true, - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/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 - }, - "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, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "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 - }, - "node_modules/send/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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "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/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "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 - }, - "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, - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "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==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "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, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=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, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sigstore": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", - "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", - "dev": true, - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/skmeans": { - "version": "0.9.7", - "resolved": "https://registry.npmjs.org/skmeans/-/skmeans-0.9.7.tgz", - "integrity": "sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/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/slice-ansi/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/slice-ansi/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/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", - "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.6.0", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", - "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", - "dev": true, - "dependencies": { - "debug": "~4.3.4", - "ws": "~8.17.1" - } - }, - "node_modules/socket.io-adapter/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "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 - } - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", - "dev": true, - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "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, - "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/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "dev": true, - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", - "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", - "dev": true, - "dependencies": { - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/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, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "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/source-map-support/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.20", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", - "dev": true - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/splaytree": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.2.tgz", - "integrity": "sha512-4OM2BJgC5UzrhVnnJA4BkHKGtjXNzzUfpQjCO8I05xYPsfS/VuQDwjCGGMi8rYQilHEV4j8NBqTFbls/PZEE7A==" - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true, - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/sql.js": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.11.0.tgz", - "integrity": "sha512-GsLUDU3vhOo14Pd5ME0y2te49JQyby6HuoCuadevEV+CGgTUjmYRrm7B7lhRyzOgrmcWmspUfyjNb6sOAEqdsA==" - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/streamroller/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/streamroller/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/streamroller/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "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==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "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, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/subsink": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/subsink/-/subsink-1.0.2.tgz", - "integrity": "sha512-QFL2oKaA6jVai82dcF0/SIKHNrKJO/wAiHBw9CG576+eBzeg+lZmpG63Tvajx3yg05Hf9ZIZ+zroJutj3hvLNQ==" - }, - "node_modules/supercluster": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", - "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", - "dependencies": { - "kdbush": "^3.0.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "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/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/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 - }, - "node_modules/terser": { - "version": "5.29.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", - "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/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, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/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, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/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 - }, - "node_modules/terser-webpack-plugin/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/terser/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser/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 - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "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 - }, - "node_modules/tinyqueue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", - "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" - }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "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, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/topojson-client": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", - "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", - "dependencies": { - "commander": "2" - }, - "bin": { - "topo2geo": "bin/topo2geo", - "topomerge": "bin/topomerge", - "topoquantize": "bin/topoquantize" - } - }, - "node_modules/topojson-client/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==" - }, - "node_modules/topojson-server": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/topojson-server/-/topojson-server-3.0.1.tgz", - "integrity": "sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==", - "dependencies": { - "commander": "2" - }, - "bin": { - "geo2topo": "bin/geo2topo" - } - }, - "node_modules/topojson-server/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==" - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-debounce": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz", - "integrity": "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==" - }, - "node_modules/ts-node": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", - "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", - "dev": true, - "dependencies": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "^3.0.0" - }, - "bin": { - "ts-node": "dist/bin.js" - }, - "engines": { - "node": ">=4.2.0" - }, - "peerDependencies": { - "typescript": ">=2.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsgeo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tsgeo/-/tsgeo-1.2.2.tgz", - "integrity": "sha512-7xtyCMmE9miNQ+gQ158gycQMhM6nfBXTsO8ongZUFTAfA4BVZAwijfK2ed/g5d0thH+clMsrSpwRbo+FlvpkNg==" - }, - "node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/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/tuf-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", - "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", - "dev": true, - "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/turf-jsts": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/turf-jsts/-/turf-jsts-1.2.3.tgz", - "integrity": "sha512-Ja03QIJlPuHt4IQ2FfGex4F4JAr8m3jpaHbFbQrgwr7s7L6U8ocrHiF3J1+wf9jzhGKxvDeaCAnGDot8OjGFyA==" - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "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, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "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, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", - "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true - }, - "node_modules/typed-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz", - "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==", - "optionalDependencies": { - "rxjs": "*" - } - }, - "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.39", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.39.tgz", - "integrity": "sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "bin": { - "ua-parser-js": "script/cli.js" - }, - "engines": { - "node": "*" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.11.1.tgz", - "integrity": "sha512-KyhzaLJnV1qa3BSHdj4AZ2ndqI0QWPxYzaIOio0WzcEJB9gvuysprJSLtpvc2D9mhR9jPDUk7xlJlZbH2KR5iw==", - "dev": true, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "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, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/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, - "engines": { - "node": ">=6" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "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, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vt-pbf": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", - "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", - "dependencies": { - "@mapbox/point-geometry": "0.1.0", - "@mapbox/vector-tile": "^1.3.1", - "pbf": "^3.2.1" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "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, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webdriver-js-extender": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", - "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", - "dev": true, - "dependencies": { - "@types/selenium-webdriver": "^3.0.0", - "selenium-webdriver": "^3.0.1" - }, - "engines": { - "node": ">=6.9.x" - } - }, - "node_modules/webdriver-manager": { - "version": "12.1.9", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.9.tgz", - "integrity": "sha512-Yl113uKm8z4m/KMUVWHq1Sjtla2uxEBtx2Ue3AmIlnlPAKloDn/Lvmy6pqWCUersVISpdMeVpAaGbNnvMuT2LQ==", - "dev": true, - "dependencies": { - "adm-zip": "^0.5.2", - "chalk": "^1.1.1", - "del": "^2.2.0", - "glob": "^7.0.3", - "ini": "^1.3.4", - "minimist": "^1.2.0", - "q": "^1.4.1", - "request": "^2.87.0", - "rimraf": "^2.5.2", - "semver": "^5.3.0", - "xml2js": "^0.4.17" - }, - "bin": { - "webdriver-manager": "bin/webdriver-manager" - }, - "engines": { - "node": ">=6.9.x" - } - }, - "node_modules/webdriver-manager/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webdriver-manager/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webdriver-manager/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webdriver-manager/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/webdriver-manager/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/webdriver-manager/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/webdriver-manager/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webdriver-manager/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/webdriver-manager/node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webdriver-manager/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "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==" - }, - "node_modules/webpack": { - "version": "5.94.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", - "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "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" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.2.tgz", - "integrity": "sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware/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 - }, - "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/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 - }, - "node_modules/webpack-dev-server/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_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "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, - "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 - } - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", - "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", - "dev": true, - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/webpack/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, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/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, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/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 - }, - "node_modules/webpack/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 - }, - "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/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webrtc-adapter": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-9.0.1.tgz", - "integrity": "sha512-1AQO+d4ElfVSXyzNVTOewgGT/tAomwwztX/6e3totvyyzXPvXIIuUUjAmyZGbKBKbZOXauuJooZm3g6IuFuiNQ==", - "dependencies": { - "sdp": "^3.2.0" - }, - "engines": { - "node": ">=6.0.0", - "npm": ">=3.10.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, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "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, - "engines": { - "node": ">=0.8.0" - } - }, - "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==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "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==", - "dev": true, - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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 - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "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, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "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==", - "dev": true, - "dependencies": { - "color-convert": "^2.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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xml2js/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.0.0.tgz", - "integrity": "sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zone.js": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.7.tgz", - "integrity": "sha512-0w6DGkX2BPuiK/NLf+4A8FLE43QwBfuqz2dVgi/40Rj1WmqUskCqj329O/pwrqFJLG5X8wkeG2RhIAro441xtg==" - } - } -} diff --git a/package.json b/package.json index 7f529f8..5e3dab4 100644 --- a/package.json +++ b/package.json @@ -1,120 +1,214 @@ { - "name": "resgrid-unit", - "version": "1.0.0", - "author": "Resgrid Team ", - "homepage": "https://resgrid.com", + "name": "unit", + "version": "0.0.1", + "versionCode": "1", + "private": true, + "main": "expo-router/entry", "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "test": "ng test", - "lint": "ng lint", - "e2e": "ng e2e", - "androidlr": "ionic capacitor run android --livereload --external", - "android": "ionic capacitor run android --external" + "start": "cross-env EXPO_NO_DOTENV=1 expo start", + "prebuild": "cross-env EXPO_NO_DOTENV=1 pnpm expo prebuild", + "android": "cross-env EXPO_NO_DOTENV=1 expo run:android", + "ios": "cross-env EXPO_NO_DOTENV=1 expo run:ios", + "web": "cross-env EXPO_NO_DOTENV=1 expo start --web", + "xcode": "xed -b ios", + "doctor": "npx expo-doctor@latest", + "preinstall": "npx only-allow pnpm", + "start:staging": "cross-env APP_ENV=staging pnpm run start", + "prebuild:staging": "cross-env APP_ENV=staging pnpm run prebuild", + "prebuild:development": "cross-env APP_ENV=development pnpm run prebuild", + "android:staging": "cross-env APP_ENV=staging pnpm run android", + "ios:staging": "cross-env APP_ENV=staging pnpm run ios", + "start:production": "cross-env APP_ENV=production pnpm run start", + "prebuild:production": "cross-env APP_ENV=production pnpm run prebuild", + "android:production": "cross-env APP_ENV=production pnpm run android", + "ios:production": "cross-env APP_ENV=production pnpm run ios", + "build:development:ios": "cross-env APP_ENV=development EXPO_NO_DOTENV=1 eas build --profile development --platform ios", + "build:development:android": "cross-env APP_ENV=development EXPO_NO_DOTENV=1 eas build --profile development --platform android ", + "build:staging:ios": "cross-env APP_ENV=staging EXPO_NO_DOTENV=1 eas build --profile staging --platform ios", + "build:staging:android": "cross-env APP_ENV=staging EXPO_NO_DOTENV=1 eas build --profile staging --platform android ", + "build:production:ios": "cross-env APP_ENV=production EXPO_NO_DOTENV=1 eas build --profile production --platform ios", + "build:production:android": "cross-env APP_ENV=production EXPO_NO_DOTENV=1 eas build --profile production --platform android ", + "app-release": "cross-env SKIP_BRANCH_PROTECTION=true np --no-publish --no-cleanup --no-release-draft", + "version": "pnpm run prebuild && git add .", + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", + "type-check": "tsc --noemit", + "lint:translations": "eslint ./src/translations/ --fix --ext .json ", + "test": "jest", + "check-all": "pnpm run lint && pnpm run type-check && pnpm run lint:translations && pnpm run test", + "test:ci": "pnpm run test --coverage", + "test:watch": "pnpm run test --watch", + "install-maestro": "curl -Ls 'https://get.maestro.mobile.dev' | bash", + "e2e-test": "maestro test .maestro/ -e APP_ID=com.obytes.development" }, - "private": false, "dependencies": { - "@angular/animations": "^17.3.12", - "@angular/cdk": "^17.0.0", - "@angular/common": "^17.3.12", - "@angular/compiler": "^17.3.12", - "@angular/core": "^17.3.12", - "@angular/forms": "^17.3.12", - "@angular/platform-browser": "^17.3.12", - "@angular/platform-browser-dynamic": "^17.3.12", - "@angular/router": "^17.3.12", - "@capacitor-community/background-geolocation": "^1.2.17", - "@capacitor-community/bluetooth-le": "^6.0.0", - "@capacitor-community/file-opener": "^6.0.0", - "@capacitor-community/keep-awake": "^5.0.0", - "@capacitor-community/sqlite": "^6.0.0", - "@capacitor/android": "^6.1.2", - "@capacitor/app": "^6.0.0", - "@capacitor/camera": "^6.0.0", - "@capacitor/core": "^6.1.0", - "@capacitor/device": "^6.0.0", - "@capacitor/filesystem": "^6.0.0", - "@capacitor/geolocation": "^6.0.0", - "@capacitor/haptics": "^6.0.0", - "@capacitor/ios": "^6.1.2", - "@capacitor/keyboard": "^6.0.0", - "@capacitor/network": "^6.0.0", - "@capacitor/preferences": "^6.0.0", - "@capacitor/splash-screen": "^6.0.0", - "@capacitor/status-bar": "^6.0.0", - "@capawesome/capacitor-badge": "^6.0.0", - "@ionic/angular": "^8.2.2", - "@ionic/pwa-elements": "3.3.0", - "@ionic/storage-angular": "4.0.0", - "@mapbox/maki": "7.1.0", - "@microsoft/signalr": "5.0.10", - "@ngrx/effects": "^17.2.0", - "@ngrx/router-store": "^17.2.0", - "@ngrx/store": "^17.2.0", - "@ngrx/store-devtools": "^17.2.0", - "@ngx-translate/core": "14.0.0", - "@ngx-translate/http-loader": "6.0.0", - "@resgrid/local-notifications": "^1.0.4", - "@resgrid/ngx-resgridlib": "^1.3.35", - "@resgrid/push-notifications": "^1.0.5", - "@sentry/angular": "=8.7.0", - "@sentry/tracing": "=7.114.0", - "@turf/turf": "6.5.0", - "@videogular/ngx-videogular": "^6.0.0", - "angular-calendar": "^0.29.0", - "angular-svg-icon": "15.0.0", - "base64-arraybuffer": "1.0.1", - "capacitor-plugin-resgrid": "^1.0.14", - "cupertino-pane": "1.2.81", - "date-fns": "^2.30.0", - "hammerjs": "2.0.8", - "hls.js": "^1.4.9", - "howler": "2.2.3", - "jwt-decode": "3.1.2", - "leaflet": "1.7.1", - "mapbox-gl": "2.5.0", - "ng-gallery": "^7.1.2", - "ngrx-store-freeze": "^0.2.4", - "ngrx-store-localstorage": "^17.0.0", - "rxjs": "^7.5.0", - "subsink": "1.0.2", - "tsgeo": "1.2.2", - "tslib": "2.2.0", - "zone.js": "0.14.7" + "@config-plugins/react-native-webrtc": "^10.0.0", + "@expo/html-elements": "^0.10.1", + "@expo/metro-runtime": "^4.0.0", + "@gluestack-ui/accordion": "^1.0.6", + "@gluestack-ui/actionsheet": "^0.2.44", + "@gluestack-ui/alert": "^0.1.15", + "@gluestack-ui/alert-dialog": "^0.1.30", + "@gluestack-ui/avatar": "^0.1.17", + "@gluestack-ui/button": "^1.0.7", + "@gluestack-ui/checkbox": "^0.1.31", + "@gluestack-ui/divider": "^0.1.9", + "@gluestack-ui/fab": "^0.1.21", + "@gluestack-ui/form-control": "^0.1.18", + "@gluestack-ui/icon": "^0.1.25", + "@gluestack-ui/image": "^0.1.10", + "@gluestack-ui/input": "^0.1.31", + "@gluestack-ui/link": "^0.1.22", + "@gluestack-ui/menu": "^0.2.36", + "@gluestack-ui/modal": "^0.1.35", + "@gluestack-ui/nativewind-utils": "^1.0.26", + "@gluestack-ui/overlay": "^0.1.16", + "@gluestack-ui/popover": "^0.1.37", + "@gluestack-ui/pressable": "^0.1.16", + "@gluestack-ui/progress": "^0.1.16", + "@gluestack-ui/radio": "^0.1.32", + "@gluestack-ui/select": "^0.1.29", + "@gluestack-ui/slider": "^0.1.25", + "@gluestack-ui/spinner": "^0.1.14", + "@gluestack-ui/switch": "^0.1.22", + "@gluestack-ui/textarea": "^0.1.23", + "@gluestack-ui/toast": "^1.0.8", + "@gluestack-ui/tooltip": "^0.1.32", + "@gorhom/bottom-sheet": "^5.0.5", + "@hookform/resolvers": "^3.9.0", + "@legendapp/motion": "^2.4.0", + "@livekit/react-native": "^2.7.4", + "@livekit/react-native-expo-plugin": "^1.0.1", + "@livekit/react-native-webrtc": "^125.0.9", + "@microsoft/signalr": "^8.0.7", + "@novu/react-native": "^2.6.6", + "@rnmapbox/maps": "^10.1.33", + "@sentry/react-native": "~6.10.0", + "@shopify/flash-list": "1.7.3", + "@tanstack/react-query": "^5.52.1", + "app-icon-badge": "^0.1.2", + "axios": "^1.7.5", + "buffer": "^6.0.3", + "expo": "~52.0.46", + "expo-asset": "~11.0.5", + "expo-build-properties": "~0.13.3", + "expo-constants": "~17.0.8", + "expo-dev-client": "~5.0.20", + "expo-device": "~7.0.3", + "expo-document-picker": "~13.0.3", + "expo-file-system": "^18.0.12", + "expo-font": "~13.0.2", + "expo-image": "~2.0.7", + "expo-image-picker": "~16.0.6", + "expo-linking": "~7.0.3", + "expo-localization": "~16.0.0", + "expo-location": "~18.0.10", + "expo-notifications": "~0.29.14", + "expo-router": "~4.0.21", + "expo-screen-orientation": "~8.0.4", + "expo-sharing": "~13.0.1", + "expo-splash-screen": "~0.29.24", + "expo-status-bar": "~2.0.0", + "expo-system-ui": "~4.0.9", + "expo-task-manager": "^12.0.6", + "i18next": "^23.14.0", + "lodash.memoize": "^4.1.2", + "lucide-react-native": "^0.475.0", + "mapbox-gl": "^3.10.0", + "moti": "^0.29.0", + "nativewind": "^4.1.21", + "posthog-react-native": "^3.13.0", + "react": "18.3.1", + "react-dom": "18.3.1", + "react-error-boundary": "^4.0.13", + "react-hook-form": "^7.53.0", + "react-i18next": "^15.0.1", + "react-native": "0.76.9", + "react-native-base64": "^0.2.1", + "react-native-edge-to-edge": "^1.1.2", + "react-native-flash-message": "^0.4.2", + "react-native-gesture-handler": "~2.20.2", + "react-native-keyboard-controller": "^1.13.2", + "react-native-logs": "^5.3.0", + "react-native-mmkv": "~3.1.0", + "react-native-reanimated": "~3.16.1", + "react-native-restart": "0.0.27", + "react-native-safe-area-context": "4.12.0", + "react-native-screens": "^4.4.0", + "react-native-svg": "~15.8.0", + "react-native-system-setting": "^1.7.6", + "react-native-web": "~0.19.13", + "react-native-webview": "13.12.5", + "react-query-kit": "^3.3.0", + "tailwind-variants": "^0.2.1", + "zod": "^3.23.8", + "zustand": "^4.5.5" }, "devDependencies": { - "@angular-devkit/build-angular": "^17.3.10", - "@angular-eslint/builder": "13.1.0", - "@angular-eslint/eslint-plugin": "13.1.0", - "@angular-eslint/eslint-plugin-template": "13.1.0", - "@angular-eslint/template-parser": "13.1.0", - "@angular/cli": "17.3.10", - "@angular/compiler-cli": "17.3.12", - "@angular/language-service": "17.3.12", - "@capacitor/cli": "^6.1.2", - "@ionic/angular-toolkit": "^4.0.0", - "@types/googlemaps": "^3.43.3", - "@types/jasmine": "=3.6.0", - "@types/jasminewd2": "=2.0.3", - "@types/node": "^12.11.1", - "@typescript-eslint/eslint-plugin": "4.16.1", - "@typescript-eslint/parser": "4.16.1", - "eslint": "^7.6.0", - "eslint-plugin-import": "2.22.1", - "eslint-plugin-jsdoc": "30.7.6", - "eslint-plugin-prefer-arrow": "1.2.2", - "jasmine-core": "~3.8.0", - "jasmine-spec-reporter": "~5.0.0", - "karma": "~6.3.2", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.0.3", - "karma-coverage-istanbul-reporter": "~3.0.2", - "karma-jasmine": "~4.0.0", - "karma-jasmine-html-reporter": "^1.5.0", - "protractor": "~7.0.0", - "ts-node": "~8.3.0", - "typescript": "~5.4.5" + "@babel/core": "^7.26.0", + "@commitlint/cli": "^19.2.2", + "@commitlint/config-conventional": "^19.2.2", + "@dev-plugins/react-query": "^0.2.0", + "@expo/config": "~10.0.3", + "@testing-library/jest-dom": "^6.5.0", + "@testing-library/react-native": "^12.7.2", + "@types/i18n-js": "^3.8.9", + "@types/jest": "^29.5.12", + "@types/lodash.memoize": "^4.1.9", + "@types/react": "~18.3.12", + "@types/react-native": "^0.73.0", + "@types/react-native-base64": "^0.2.2", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "babel-plugin-module-resolver": "^5.0.2", + "cross-env": "^7.0.3", + "dotenv": "^16.4.5", + "eslint": "^8.57.0", + "eslint-config-expo": "^7.1.2", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.3", + "eslint-plugin-i18n-json": "^4.0.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react-compiler": "19.0.0-beta-a7bf2bd-20241110", + "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-tailwindcss": "^3.15.2", + "eslint-plugin-testing-library": "^6.2.2", + "eslint-plugin-unicorn": "^46.0.1", + "eslint-plugin-unused-imports": "^2.0.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-expo": "~52.0.6", + "jest-junit": "^16.0.0", + "lint-staged": "^15.2.9", + "np": "^10.0.7", + "prettier": "^3.3.3", + "tailwindcss": "3.4.4", + "ts-jest": "^29.1.2", + "ts-node": "^10.9.2", + "typescript": "^5.3.3" }, - "description": "Application to be used in apparatuses and by teams for Resgrid" + "repository": { + "type": "git", + "url": "git+https://github.com/user/repo-name.git" + }, + "packageManager": "pnpm@9.12.3", + "expo": { + "doctor": { + "reactNativeDirectoryCheck": { + "listUnknownPackages": false, + "exclude": [ + "react-native-restart", + "lucide-react-native" + ] + } + }, + "install": { + "exclude": [ + "eslint-config-expo" + ] + } + }, + "osMetadata": { + "initVersion": "7.0.4" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..d653e18 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,20414 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@config-plugins/react-native-webrtc': + specifier: ^10.0.0 + version: 10.0.0(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + '@expo/html-elements': + specifier: ^0.10.1 + version: 0.10.1 + '@expo/metro-runtime': + specifier: ^4.0.0 + version: 4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + '@gluestack-ui/accordion': + specifier: ^1.0.6 + version: 1.0.12(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/actionsheet': + specifier: ^0.2.44 + version: 0.2.50(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/alert': + specifier: ^0.1.15 + version: 0.1.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/alert-dialog': + specifier: ^0.1.30 + version: 0.1.36(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/avatar': + specifier: ^0.1.17 + version: 0.1.18(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/button': + specifier: ^1.0.7 + version: 1.0.12(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/checkbox': + specifier: ^0.1.31 + version: 0.1.37(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/divider': + specifier: ^0.1.9 + version: 0.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/fab': + specifier: ^0.1.21 + version: 0.1.26(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/form-control': + specifier: ^0.1.18 + version: 0.1.19(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/icon': + specifier: ^0.1.25 + version: 0.1.25(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/image': + specifier: ^0.1.10 + version: 0.1.15(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/input': + specifier: ^0.1.31 + version: 0.1.36(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/link': + specifier: ^0.1.22 + version: 0.1.27(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/menu': + specifier: ^0.2.36 + version: 0.2.41(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/modal': + specifier: ^0.1.35 + version: 0.1.39(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/nativewind-utils': + specifier: ^1.0.26 + version: 1.0.26(nativewind@4.1.23(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))) + '@gluestack-ui/overlay': + specifier: ^0.1.16 + version: 0.1.20(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/popover': + specifier: ^0.1.37 + version: 0.1.47(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/pressable': + specifier: ^0.1.16 + version: 0.1.21(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/progress': + specifier: ^0.1.16 + version: 0.1.18(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/radio': + specifier: ^0.1.32 + version: 0.1.38(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/select': + specifier: ^0.1.29 + version: 0.1.31(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/slider': + specifier: ^0.1.25 + version: 0.1.30(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/spinner': + specifier: ^0.1.14 + version: 0.1.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/switch': + specifier: ^0.1.22 + version: 0.1.27(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/textarea': + specifier: ^0.1.23 + version: 0.1.24(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/toast': + specifier: ^1.0.8 + version: 1.0.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/tooltip': + specifier: ^0.1.32 + version: 0.1.42(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gorhom/bottom-sheet': + specifier: ^5.0.5 + version: 5.1.1(@types/react-native@0.73.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-native-gesture-handler@2.20.2(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@hookform/resolvers': + specifier: ^3.9.0 + version: 3.10.0(react-hook-form@7.54.2(react@18.3.1)) + '@legendapp/motion': + specifier: ^2.4.0 + version: 2.4.0(nativewind@4.1.23(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@livekit/react-native': + specifier: ^2.7.4 + version: 2.7.4(@livekit/react-native-webrtc@125.0.9(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(livekit-client@2.11.4)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tslib@2.8.1) + '@livekit/react-native-expo-plugin': + specifier: ^1.0.1 + version: 1.0.1(nefjks2cqtm452sgs7bkl5qhtm) + '@livekit/react-native-webrtc': + specifier: ^125.0.9 + version: 125.0.9(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + '@microsoft/signalr': + specifier: ^8.0.7 + version: 8.0.7 + '@novu/react-native': + specifier: ^2.6.6 + version: 2.6.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rnmapbox/maps': + specifier: ^10.1.33 + version: 10.1.37(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(mapbox-gl@3.10.0)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@sentry/react-native': + specifier: ~6.10.0 + version: 6.10.0(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@shopify/flash-list': + specifier: 1.7.3 + version: 1.7.3(@babel/runtime@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@tanstack/react-query': + specifier: ^5.52.1 + version: 5.66.11(react@18.3.1) + app-icon-badge: + specifier: ^0.1.2 + version: 0.1.2 + axios: + specifier: ^1.7.5 + version: 1.8.1 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + expo: + specifier: ~52.0.46 + version: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-asset: + specifier: ~11.0.5 + version: 11.0.5(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-build-properties: + specifier: ~0.13.3 + version: 0.13.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-constants: + specifier: ~17.0.8 + version: 17.0.8(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + expo-dev-client: + specifier: ~5.0.20 + version: 5.0.20(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-device: + specifier: ~7.0.3 + version: 7.0.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-document-picker: + specifier: ~13.0.3 + version: 13.0.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-file-system: + specifier: ^18.0.12 + version: 18.0.12(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + expo-font: + specifier: ~13.0.2 + version: 13.0.4(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) + expo-image: + specifier: ~2.0.7 + version: 2.0.7(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-image-picker: + specifier: ~16.0.6 + version: 16.0.6(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-linking: + specifier: ~7.0.3 + version: 7.0.5(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-localization: + specifier: ~16.0.0 + version: 16.0.1(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) + expo-location: + specifier: ~18.0.10 + version: 18.0.10(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-notifications: + specifier: ~0.29.14 + version: 0.29.14(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-router: + specifier: ~4.0.21 + version: 4.0.21(jhxu6vzpdvlfrcgtrfkrbypob4) + expo-screen-orientation: + specifier: ~8.0.4 + version: 8.0.4(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + expo-sharing: + specifier: ~13.0.1 + version: 13.0.1(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-splash-screen: + specifier: ~0.29.24 + version: 0.29.24(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-status-bar: + specifier: ~2.0.0 + version: 2.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-system-ui: + specifier: ~4.0.9 + version: 4.0.9(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + expo-task-manager: + specifier: ^12.0.6 + version: 12.0.6(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + i18next: + specifier: ^23.14.0 + version: 23.16.8 + lodash.memoize: + specifier: ^4.1.2 + version: 4.1.2 + lucide-react-native: + specifier: ^0.475.0 + version: 0.475.0(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + mapbox-gl: + specifier: ^3.10.0 + version: 3.10.0 + moti: + specifier: ^0.29.0 + version: 0.29.0(react-dom@18.3.1(react@18.3.1))(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) + nativewind: + specifier: ^4.1.21 + version: 4.1.23(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))) + posthog-react-native: + specifier: ^3.13.0 + version: 3.13.0(s7mah6r4g2mgg4lzr4uvj3cowa) + react: + specifier: 18.3.1 + version: 18.3.1 + react-dom: + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) + react-error-boundary: + specifier: ^4.0.13 + version: 4.1.2(react@18.3.1) + react-hook-form: + specifier: ^7.53.0 + version: 7.54.2(react@18.3.1) + react-i18next: + specifier: ^15.0.1 + version: 15.4.1(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: + specifier: 0.76.9 + version: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-native-base64: + specifier: ^0.2.1 + version: 0.2.1 + react-native-edge-to-edge: + specifier: ^1.1.2 + version: 1.4.3(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-flash-message: + specifier: ^0.4.2 + version: 0.4.2(prop-types@15.8.1)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-gesture-handler: + specifier: ~2.20.2 + version: 2.20.2(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-keyboard-controller: + specifier: ^1.13.2 + version: 1.16.6(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-logs: + specifier: ^5.3.0 + version: 5.3.0 + react-native-mmkv: + specifier: ~3.1.0 + version: 3.1.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-reanimated: + specifier: ~3.16.1 + version: 3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-restart: + specifier: 0.0.27 + version: 0.0.27(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-safe-area-context: + specifier: 4.12.0 + version: 4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-screens: + specifier: ^4.4.0 + version: 4.4.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-svg: + specifier: ~15.8.0 + version: 15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-system-setting: + specifier: ^1.7.6 + version: 1.7.6 + react-native-web: + specifier: ~0.19.13 + version: 0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-native-webview: + specifier: 13.12.5 + version: 13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-query-kit: + specifier: ^3.3.0 + version: 3.3.1(@tanstack/react-query@5.66.11(react@18.3.1)) + tailwind-variants: + specifier: ^0.2.1 + version: 0.2.1(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))) + zod: + specifier: ^3.23.8 + version: 3.24.2 + zustand: + specifier: ^4.5.5 + version: 4.5.6(@types/react@18.3.18)(react@18.3.1) + devDependencies: + '@babel/core': + specifier: ^7.26.0 + version: 7.26.9 + '@commitlint/cli': + specifier: ^19.2.2 + version: 19.7.1(@types/node@22.13.5)(typescript@5.8.2) + '@commitlint/config-conventional': + specifier: ^19.2.2 + version: 19.7.1 + '@dev-plugins/react-query': + specifier: ^0.2.0 + version: 0.2.0(@tanstack/react-query@5.66.11(react@18.3.1))(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + '@expo/config': + specifier: ~10.0.3 + version: 10.0.10 + '@testing-library/jest-dom': + specifier: ^6.5.0 + version: 6.6.3 + '@testing-library/react-native': + specifier: ^12.7.2 + version: 12.9.0(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1) + '@types/i18n-js': + specifier: ^3.8.9 + version: 3.8.9 + '@types/jest': + specifier: ^29.5.12 + version: 29.5.14 + '@types/lodash.memoize': + specifier: ^4.1.9 + version: 4.1.9 + '@types/react': + specifier: ~18.3.12 + version: 18.3.18 + '@types/react-native': + specifier: ^0.73.0 + version: 0.73.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + '@types/react-native-base64': + specifier: ^0.2.2 + version: 0.2.2 + '@typescript-eslint/eslint-plugin': + specifier: ^5.62.0 + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/parser': + specifier: ^5.62.0 + version: 5.62.0(eslint@8.57.1)(typescript@5.8.2) + babel-plugin-module-resolver: + specifier: ^5.0.2 + version: 5.0.2 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + dotenv: + specifier: ^16.4.5 + version: 16.4.7 + eslint: + specifier: ^8.57.0 + version: 8.57.1 + eslint-config-expo: + specifier: ^7.1.2 + version: 7.1.2(eslint@8.57.1)(typescript@5.8.2) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.1) + eslint-import-resolver-typescript: + specifier: ^3.6.3 + version: 3.8.3(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-plugin-i18n-json: + specifier: ^4.0.0 + version: 4.0.1(eslint@8.57.1) + eslint-plugin-import: + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3)(eslint@8.57.1) + eslint-plugin-prettier: + specifier: ^5.2.1 + version: 5.2.3(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.5.2) + eslint-plugin-react-compiler: + specifier: 19.0.0-beta-a7bf2bd-20241110 + version: 19.0.0-beta-a7bf2bd-20241110(eslint@8.57.1) + eslint-plugin-simple-import-sort: + specifier: ^10.0.0 + version: 10.0.0(eslint@8.57.1) + eslint-plugin-tailwindcss: + specifier: ^3.15.2 + version: 3.18.0(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))) + eslint-plugin-testing-library: + specifier: ^6.2.2 + version: 6.5.0(eslint@8.57.1)(typescript@5.8.2) + eslint-plugin-unicorn: + specifier: ^46.0.1 + version: 46.0.1(eslint@8.57.1) + eslint-plugin-unused-imports: + specifier: ^2.0.0 + version: 2.0.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1) + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + jest-environment-jsdom: + specifier: ^29.7.0 + version: 29.7.0 + jest-expo: + specifier: ~52.0.6 + version: 52.0.6(@babel/core@7.26.9)(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)))(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(webpack@5.98.0) + jest-junit: + specifier: ^16.0.0 + version: 16.0.0 + lint-staged: + specifier: ^15.2.9 + version: 15.4.3 + np: + specifier: ^10.0.7 + version: 10.2.0(@types/node@22.13.5)(typescript@5.8.2) + prettier: + specifier: ^3.3.3 + version: 3.5.2 + tailwindcss: + specifier: 3.4.4 + version: 3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + ts-jest: + specifier: ^29.1.2 + version: 29.2.6(@babel/core@7.26.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.9))(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)))(typescript@5.8.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.13.5)(typescript@5.8.2) + typescript: + specifier: ^5.3.3 + version: 5.8.2 + +packages: + + '@0no-co/graphql.web@1.1.1': + resolution: {integrity: sha512-F2i3xdycesw78QCOBHmpTn7eaD2iNXGwB2gkfwxcOfBbeauYpr8RBSyJOkDrFtKtVRMclg8Sg3n1ip0ACyUuag==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + + '@adobe/css-tools@4.4.2': + resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==} + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.10.4': + resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.27.5': + resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.9': + resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.9': + resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.27.5': + resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.26.9': + resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-class-features-plugin@7.27.1': + resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.26.3': + resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.27.1': + resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.4': + resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-module-transforms@7.27.3': + resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.27.1': + resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.9': + resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.25.9': + resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.27.5': + resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': + resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1': + resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-class-properties@7.18.6': + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-decorators@7.25.9': + resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-export-default-from@7.25.9': + resolution: {integrity: sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6': + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-optional-chaining@7.21.0': + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-private-methods@7.18.6': + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-decorators@7.25.9': + resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-dynamic-import@7.8.3': + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-export-default-from@7.25.9': + resolution: {integrity: sha512-9MhJ/SMTsVqsd69GyQg89lYR4o9T+oDGv5F6IsigxxqFVOyR/IflDLYP8WDI1l8fkhNGGktqkvL5qwNCtGEpgQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-flow@7.26.0': + resolution: {integrity: sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.27.1': + resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.27.1': + resolution: {integrity: sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.27.1': + resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.27.5': + resolution: {integrity: sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.27.1': + resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.27.1': + resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-classes@7.27.1': + resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.27.1': + resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.27.3': + resolution: {integrity: sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.27.1': + resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.27.1': + resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-flow-strip-types@7.26.5': + resolution: {integrity: sha512-eGK26RsbIkYUns3Y8qKl362juDDYK+wEdPGHGrhzUl6CewZFo55VZ7hg+CyMFU4dd5QQakBN86nBMpRsFpRvbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.27.1': + resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.27.1': + resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.26.3': + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.27.1': + resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': + resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': + resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.27.1': + resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.27.3': + resolution: {integrity: sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.27.1': + resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.27.1': + resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.27.1': + resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.27.1': + resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.27.1': + resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-display-name@7.25.9': + resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-development@7.25.9': + resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx@7.25.9': + resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-pure-annotations@7.25.9': + resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.27.5': + resolution: {integrity: sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.27.1': + resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-runtime@7.26.9': + resolution: {integrity: sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.27.1': + resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.26.8': + resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.26.8': + resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.27.1': + resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1': + resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.26.9': + resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-flow@7.25.9': + resolution: {integrity: sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/preset-react@7.26.3': + resolution: {integrity: sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.26.0': + resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/register@7.25.9': + resolution: {integrity: sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.26.9': + resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.9': + resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.27.4': + resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.27.3': + resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@bufbuild/protobuf@1.10.1': + resolution: {integrity: sha512-wJ8ReQbHxsAfXhrf9ixl0aYbZorRuOWpBNzm8pL8ftmSxQx/wnJD5Eg861NwJU/czy2VXFIebCeZnZrI9rktIQ==} + + '@commitlint/cli@19.7.1': + resolution: {integrity: sha512-iObGjR1tE/PfDtDTEfd+tnRkB3/HJzpQqRTyofS2MPPkDn1mp3DBC8SoPDayokfAy+xKhF8+bwRCJO25Nea0YQ==} + engines: {node: '>=v18'} + hasBin: true + + '@commitlint/config-conventional@19.7.1': + resolution: {integrity: sha512-fsEIF8zgiI/FIWSnykdQNj/0JE4av08MudLTyYHm4FlLWemKoQvPNUYU2M/3tktWcCEyq7aOkDDgtjrmgWFbvg==} + engines: {node: '>=v18'} + + '@commitlint/config-validator@19.5.0': + resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==} + engines: {node: '>=v18'} + + '@commitlint/ensure@19.5.0': + resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==} + engines: {node: '>=v18'} + + '@commitlint/execute-rule@19.5.0': + resolution: {integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==} + engines: {node: '>=v18'} + + '@commitlint/format@19.5.0': + resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==} + engines: {node: '>=v18'} + + '@commitlint/is-ignored@19.7.1': + resolution: {integrity: sha512-3IaOc6HVg2hAoGleRK3r9vL9zZ3XY0rf1RsUf6jdQLuaD46ZHnXBiOPTyQ004C4IvYjSWqJwlh0/u2P73aIE3g==} + engines: {node: '>=v18'} + + '@commitlint/lint@19.7.1': + resolution: {integrity: sha512-LhcPfVjcOcOZA7LEuBBeO00o3MeZa+tWrX9Xyl1r9PMd5FWsEoZI9IgnGqTKZ0lZt5pO3ZlstgnRyY1CJJc9Xg==} + engines: {node: '>=v18'} + + '@commitlint/load@19.6.1': + resolution: {integrity: sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==} + engines: {node: '>=v18'} + + '@commitlint/message@19.5.0': + resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==} + engines: {node: '>=v18'} + + '@commitlint/parse@19.5.0': + resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==} + engines: {node: '>=v18'} + + '@commitlint/read@19.5.0': + resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==} + engines: {node: '>=v18'} + + '@commitlint/resolve-extends@19.5.0': + resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==} + engines: {node: '>=v18'} + + '@commitlint/rules@19.6.0': + resolution: {integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==} + engines: {node: '>=v18'} + + '@commitlint/to-lines@19.5.0': + resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==} + engines: {node: '>=v18'} + + '@commitlint/top-level@19.5.0': + resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==} + engines: {node: '>=v18'} + + '@commitlint/types@19.5.0': + resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} + engines: {node: '>=v18'} + + '@config-plugins/react-native-webrtc@10.0.0': + resolution: {integrity: sha512-q6owBOwQo3HRx4/b0FteE06Ymlcx7pK5bw+Stg77wgTWyxWAJ90yfVvvdMckzxuxMwDd78o9yCLKIONTulHD4A==} + peerDependencies: + expo: ^52 + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@dev-plugins/react-query@0.2.0': + resolution: {integrity: sha512-tbGfXiR4/Pd9V6oJGDqx/YFtNpHJ0jrfLhDnY6k9yZu2e5niuIStDVKDimZ3m+HYXQDw62Ydk5NFa6fcRq4soA==} + peerDependencies: + '@tanstack/react-query': '*' + expo: ^52.0.41 + + '@egjs/hammerjs@2.0.17': + resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==} + engines: {node: '>=0.8.0'} + + '@emotion/is-prop-valid@0.8.8': + resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} + + '@emotion/memoize@0.7.4': + resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@expo/bunyan@4.0.1': + resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} + engines: {node: '>=0.10.0'} + + '@expo/cli@0.22.26': + resolution: {integrity: sha512-I689wc8Fn/AX7aUGiwrh3HnssiORMJtR2fpksX+JIe8Cj/EDleblYMSwRPd0025wrwOV9UN1KM/RuEt/QjCS3Q==} + hasBin: true + + '@expo/code-signing-certificates@0.0.5': + resolution: {integrity: sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==} + + '@expo/config-plugins@9.0.16': + resolution: {integrity: sha512-AnJzmFB7ztM0JZBn+Ut6BQYC2WeGDzfIhBZVOIPMQbdBqvwJ7TmFEsGTGSxdwU/VqJaJK2sWxyt1zbWkpIYCEA==} + + '@expo/config-plugins@9.0.17': + resolution: {integrity: sha512-m24F1COquwOm7PBl5wRbkT9P9DviCXe0D7S7nQsolfbhdCWuvMkfXeoWmgjtdhy7sDlOyIgBrAdnB6MfsWKqIg==} + + '@expo/config-types@52.0.5': + resolution: {integrity: sha512-AMDeuDLHXXqd8W+0zSjIt7f37vUd/BP8p43k68NHpyAvQO+z8mbQZm3cNQVAMySeayK2XoPigAFB1JF2NFajaA==} + + '@expo/config@10.0.10': + resolution: {integrity: sha512-wI9/iam3Irk99ADGM/FyD7YrrEibIZXR4huSZiU5zt9o3dASOKhqepiNJex4YPiktLfKhYrpSEJtwno1g0SrgA==} + + '@expo/config@10.0.11': + resolution: {integrity: sha512-nociJ4zr/NmbVfMNe9j/+zRlt7wz/siISu7PjdWE4WE+elEGxWWxsGzltdJG0llzrM+khx8qUiFK5aiVcdMBww==} + + '@expo/devcert@1.1.4': + resolution: {integrity: sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==} + + '@expo/env@0.4.2': + resolution: {integrity: sha512-TgbCgvSk0Kq0e2fLoqHwEBL4M0ztFjnBEz0YCDm5boc1nvkV1VMuIMteVdeBwnTh8Z0oPJTwHCD49vhMEt1I6A==} + + '@expo/fingerprint@0.11.11': + resolution: {integrity: sha512-gNyn1KnAOpEa8gSNsYqXMTcq0fSwqU/vit6fP5863vLSKxHm/dNt/gm/uZJxrRZxKq71KUJWF6I7d3z8qIfq5g==} + hasBin: true + + '@expo/html-elements@0.10.1': + resolution: {integrity: sha512-3PTmtkV15D7+lykXVtvkH1jQ5Y6JE+e3zCaoMMux7z2cSLGQUNwDEUwG37gew3OEB1/E4/SEWgjvg8m7E6/e2Q==} + + '@expo/image-utils@0.6.5': + resolution: {integrity: sha512-RsS/1CwJYzccvlprYktD42KjyfWZECH6PPIEowvoSmXfGLfdViwcUEI4RvBfKX5Jli6P67H+6YmHvPTbGOboew==} + + '@expo/json-file@9.0.2': + resolution: {integrity: sha512-yAznIUrybOIWp3Uax7yRflB0xsEpvIwIEqIjao9SGi2Gaa+N0OamWfe0fnXBSWF+2zzF4VvqwT4W5zwelchfgw==} + + '@expo/metro-config@0.19.12': + resolution: {integrity: sha512-fhT3x1ikQWHpZgw7VrEghBdscFPz1laRYa8WcVRB18nTTqorF6S8qPYslkJu1faEziHZS7c2uyDzTYnrg/CKbg==} + + '@expo/metro-runtime@4.0.1': + resolution: {integrity: sha512-CRpbLvdJ1T42S+lrYa1iZp1KfDeBp4oeZOK3hdpiS5n0vR0nhD6sC1gGF0sTboCTp64tLteikz5Y3j53dvgOIw==} + peerDependencies: + react-native: '*' + + '@expo/osascript@2.1.6': + resolution: {integrity: sha512-SbMp4BUwDAKiFF4zZEJf32rRYMeNnLK9u4FaPo0lQRer60F+SKd20NTSys0wgssiVeQyQz2OhGLRx3cxYowAGw==} + engines: {node: '>=12'} + + '@expo/package-manager@1.7.2': + resolution: {integrity: sha512-wT/qh9ebNjl6xr00bYkSh93b6E/78J3JPlT6WzGbxbsnv5FIZKB/nr522oWqVe1E+ML7BpXs8WugErWDN9kOFg==} + + '@expo/plist@0.2.2': + resolution: {integrity: sha512-ZZGvTO6vEWq02UAPs3LIdja+HRO18+LRI5QuDl6Hs3Ps7KX7xU6Y6kjahWKY37Rx2YjNpX07dGpBFzzC+vKa2g==} + + '@expo/prebuild-config@8.2.0': + resolution: {integrity: sha512-CxiPpd980s0jyxi7eyN3i/7YKu3XL+8qPjBZUCYtc0+axpGweqIkq2CslyLSKHyqVyH/zlPkbVgWdyiYavFS5Q==} + + '@expo/rudder-sdk-node@1.1.1': + resolution: {integrity: sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==} + engines: {node: '>=12'} + + '@expo/sdk-runtime-versions@1.0.0': + resolution: {integrity: sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==} + + '@expo/server@0.5.3': + resolution: {integrity: sha512-WXsWzeBs5v/h0PUfHyNLLz07rwwO5myQ1A5DGYewyyGLmsyl61yVCe8AgAlp1wkiMsqhj2hZqI2u3K10QnCMrQ==} + + '@expo/spawn-async@1.7.2': + resolution: {integrity: sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==} + engines: {node: '>=12'} + + '@expo/vector-icons@14.0.4': + resolution: {integrity: sha512-+yKshcbpDfbV4zoXOgHxCwh7lkE9VVTT5T03OUlBsqfze1PLy6Hi4jp1vSb1GVbY6eskvMIivGVc9SKzIv0oEQ==} + + '@expo/ws-tunnel@1.0.5': + resolution: {integrity: sha512-Ta9KzslHAIbw2ZoyZ7Ud7/QImucy+K4YvOqo9AhGfUfH76hQzaffQreOySzYusDfW8Y+EXh0ZNWE68dfCumFFw==} + + '@expo/xcpretty@4.3.2': + resolution: {integrity: sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==} + hasBin: true + + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@formatjs/ecma402-abstract@2.3.3': + resolution: {integrity: sha512-pJT1OkhplSmvvr6i3CWTPvC/FGC06MbN5TNBfRO6Ox62AEz90eMq+dVvtX9Bl3jxCEkS0tATzDarRZuOLw7oFg==} + + '@formatjs/fast-memoize@2.2.6': + resolution: {integrity: sha512-luIXeE2LJbQnnzotY1f2U2m7xuQNj2DA8Vq4ce1BY9ebRZaoPB1+8eZ6nXpLzsxuW5spQxr7LdCg+CApZwkqkw==} + + '@formatjs/icu-messageformat-parser@2.11.1': + resolution: {integrity: sha512-o0AhSNaOfKoic0Sn1GkFCK4MxdRsw7mPJ5/rBpIqdvcC7MIuyUSW8WChUEvrK78HhNpYOgqCQbINxCTumJLzZA==} + + '@formatjs/icu-skeleton-parser@1.8.13': + resolution: {integrity: sha512-N/LIdTvVc1TpJmMt2jVg0Fr1F7Q1qJPdZSCs19unMskCmVQ/sa0H9L8PWt13vq+gLdLg1+pPsvBLydL1Apahjg==} + + '@formatjs/intl-localematcher@0.6.0': + resolution: {integrity: sha512-4rB4g+3hESy1bHSBG3tDFaMY2CH67iT7yne1e+0CLTsGLDcmoEWWpJjjpWVaYgYfYuohIRuo0E+N536gd2ZHZA==} + + '@gluestack-ui/accordion@1.0.12': + resolution: {integrity: sha512-oCOjT6X2eC0CCDKchXzTUhLiEOIcA11/+NmtHTpb3nmeL75K9btLaAjY4aJ+8bHU9aFHFrAJiTlvW18XfzpUJQ==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/actionsheet@0.2.50': + resolution: {integrity: sha512-DO1AnBm4mnuTh0HkLir/2pTmBWspIpKSMpxQZb36akgwjW1N+ohMl0XtSMSr9NfZgNOT5JxvAzrA7XwbR9f3Lg==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/alert-dialog@0.1.36': + resolution: {integrity: sha512-j0JBUxsaaGfoWT4v08B3xTiUNolYCsaHjHLvtniV3H3FdZH30qQyzTgAcnPA1N5DnnYwY4BdD49znAKL2IqDEg==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/alert@0.1.16': + resolution: {integrity: sha512-vE0litmicuKFJFp9TY3mRuZmyH/E24IdHlC0f3FZjfa+AzeOS+bZdKMRix2EYkvBGrA6uNffWUuHeXWQGMRVJQ==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/avatar@0.1.18': + resolution: {integrity: sha512-VA9XwtavYLYCWrjxHc2u9gRpV97cPRcr/6KJ4tLiMiQbiRL1b4zckiL+/F39fB6xjUOUQHl3Fjo/Yd8swa0MBg==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/button@1.0.12': + resolution: {integrity: sha512-7uiAbkKk5AT7D4YU+HlCQUJVucL2qtQnLW/g+/Atc2h1XS8pWcUkB9CY30x9mHY9wWac1Q0s/BQr1iGFNSDjnw==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/checkbox@0.1.37': + resolution: {integrity: sha512-PG/6Oct7UDyD20QzUlO10smzwqNwcmn0ynWuyEALU7xYgWFVgLw7n2ZCJk9/+rGhrUmEHvmZ8GCWElIwPvMAeQ==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/divider@0.1.10': + resolution: {integrity: sha512-/hZx1Rmy4Pgln9AwAprAEQcxYPEHjHSNF4xCUWlK/q0peyiMT5Nagt54VnxykVn5A0b2zg5QKP0pOqOF9xeE6w==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/fab@0.1.26': + resolution: {integrity: sha512-AlSKqBiNsAbOzOqM2HypTM0c3SFP68t3PaD0xrGg9K8mbdvkOakWfUJ1DK5AGI/GBm766UO+K0on/GO5gbyD5g==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/form-control@0.1.19': + resolution: {integrity: sha512-6YbPbi/RZrXc5DyVPbxPV17FYaBoEl1yAdSwut8iE6n+yQekjluINrh2q5ZPWF2SGmyo7VSNcL85yeU5I97xHg==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/hooks@0.1.13': + resolution: {integrity: sha512-2x5EGcAuvdWFoOaqBRJsilR9Nx07tDvuAr3MI5SOmDdn7Bjzi+3CVAZwwDE2nGwAL3ldJvbAlzVkiNCw4TsSeA==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/icon@0.1.25': + resolution: {integrity: sha512-HCyiHHHZzHpP5MIy5F2hP8iBc+0yt2NNM+jhbPYeoRG4WY7wc1whaUs9EIQvj880cq/zxOQP0Bz4mnyhuKsEKQ==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/image@0.1.15': + resolution: {integrity: sha512-YxAQ5ICZBGWo3mp5lb4m0vJJUA53B+Up0GJpl+tJu+qQXcVJRdgao8h4pSPdpv1gXI1nAx6btjU5AbGtOie3KQ==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/input@0.1.36': + resolution: {integrity: sha512-5BgJvziFKtRc7iLpBAiUkm4g0zVAPio5ptL+2+o/01JWBhKULn5y0OPZUAvSm5Ydg4ZL9uOSHAbUl2j8nA/+cQ==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/link@0.1.27': + resolution: {integrity: sha512-TOFtok6YwKT54aEUxDjJOIJedgmaRCBdic/KROYY52paDRvYfiSO1r6u/qIW7AQAh59SDFnd1KXEs4raw9L+Mg==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/menu@0.2.41': + resolution: {integrity: sha512-+7/v/CDhwUg72F7EOHgQfw+1e/7qtnewPTN4oORcaBpIYoScCLnhRn+7lS7js7v2c3dwV371wtWc38MA+D3vaw==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/modal@0.1.39': + resolution: {integrity: sha512-k3Bk1IYGJ3XLBBvdfpihol1hfs7tvPkBlDaGN2e9P4R2JBHtCRbSOlE5rB6DE8KiXHvNB/DQCtjePLulqTRhjw==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/nativewind-utils@1.0.26': + resolution: {integrity: sha512-Ul/nHkYOKMH5CTmDUndM826GKYqWI6jFaz7/v7AgOo9dFuokOYm6Sd3pcJHqzPghwODRXV9L4nQgxa7dJX96pg==} + peerDependencies: + nativewind: '>=4.0' + react: '>=16' + + '@gluestack-ui/overlay@0.1.20': + resolution: {integrity: sha512-9j7GKHhZ+tjPWf4ysmRjN92BSbnokRfbrjLjkgHk476PBJNg/qTdTGwdZZd1+jHNLBMjKFFBxtYsCm7gZZylmQ==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/popover@0.1.47': + resolution: {integrity: sha512-jU6Sg1DA0THWmjA7RySNnwiH3PQ2RnUBggN8AUuvWtuBA1KBqkR/O4NknMltMGilim5FNX4IEeg8rHzdTv6KUg==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/pressable@0.1.21': + resolution: {integrity: sha512-4gi4JzcOxyeCdIBUpzgZW7Zgtp0Oy6l4P86PJGGPEcqGtZlikzLGPN6abOZ4HrW7ibmqcBC2tblSvNLqrr5Mdg==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/progress@0.1.18': + resolution: {integrity: sha512-WQCLdvqoiIIQnLBXG7+HDTREMbUfEy9rV7FuBMcBBqEFILuVT1W4hyuXLz/CPrUoCWZJ8OUKvLZvaWWzW8pA9Q==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/provider@0.1.17': + resolution: {integrity: sha512-6SEzaH53pcYkYQjZmC46z0lx08GuJXiYlSPEzvkR+u7jhnDCulZAAEpYCv/bWvnSNGcffm68ip+3WWZej7CGUw==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/radio@0.1.38': + resolution: {integrity: sha512-g8ujswUctEkxXJ0r6xIOW4PQ7KnTo4PdBjNT693iVu0xifFoRpzSMwyIBymPpw/9BekekEGY6rGlHlsAw1d3aw==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/react-native-aria@0.1.7': + resolution: {integrity: sha512-mdK/M6RQafAYiHyJnDNjaE9+ttr9eg48f2InmO3rvcrjsdaLcu/vwHlwrO9N3xYcb3wb9z2+YZ4OIgtymFNTOw==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/select@0.1.31': + resolution: {integrity: sha512-d8vfdCK4VFBYEDYMCTRYcZCWvYaf7UWMJGg2uMnutHA8Y4sDXjKR5P821xKdh75QVkmZRZm1MdzSWFvXUzAlgg==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/slider@0.1.30': + resolution: {integrity: sha512-2sffbk3FRh+FF7croGey96Ta/aZhv9K2U+p+z1OYDlfY2/IvS/VklYJXwyYzOxz/HfDJAgNNFs+9B2nASlsCGA==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/spinner@0.1.15': + resolution: {integrity: sha512-jkXOGhna05HM2tcPKbA+t+vqcVRgRowwC6ES0A9kY5fcuURH1V41UFx/YWyHdSsHwmWlIoCCdWycF78UbNVdPg==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/switch@0.1.27': + resolution: {integrity: sha512-W59kpB0MrzNzAr7GO/APpi8gaP90/T3AlgjMJRWPf9/WVP6/YltJ3BRK/Wb8E9/1D9owTWPDPP/EbqwBJzardQ==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/textarea@0.1.24': + resolution: {integrity: sha512-maABWaI+Vif9S5twBVzcF1pqv43NMigYuKNM7aNZA5+Mzi3/cf3esPpYjB2VFg3r3VKLZq9JbVFkgLq9MauFxw==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/toast@1.0.9': + resolution: {integrity: sha512-aMlPczeoH/PZTMnhV29fqqW1Xc/9QmYEsR0bU9BfLyAGM9UMjW3vGe4yZSgxX7xjQ9C7+KO5WnTH0FmPoAbVtg==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/tooltip@0.1.42': + resolution: {integrity: sha512-BFFQ2wPe7S7ZTODNB8fuIMnyVe381Cj7PS9JGOzqwZCjgN7HyO0T9K3dqWGcAkw3QDEXB7zCwr3abpw40XBVsQ==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/transitions@0.1.11': + resolution: {integrity: sha512-GuCprzasuU8GKXm1GUmaVJ1Njiq72pQ4Ni0g+rg6kRQ7hyR0K4d0wdHRyFldHKmfLcQkM3i70rvYq/468hLKLw==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gluestack-ui/utils@0.1.14': + resolution: {integrity: sha512-dGe2LWJi8KcNmfM/Nt/WAT0I5s2F/Lud7nR/gTyksdLs9AZ8YoRkKt0s4q0ofz6ku1yEHDLa/YOuk2+APd8qNQ==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@gorhom/bottom-sheet@5.1.1': + resolution: {integrity: sha512-Y8FiuRmeZYaP+ZGQ0axDwWrrKqVp4ByYRs1D2fTJTxHMt081MHHRQsqmZ3SK7AFp3cSID+vTqnD8w/KAASpy+w==} + peerDependencies: + '@types/react': '*' + '@types/react-native': '*' + react: '*' + react-native: '*' + react-native-gesture-handler: '>=2.16.1' + react-native-reanimated: '>=3.16.0' + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-native': + optional: true + + '@gorhom/portal@1.0.14': + resolution: {integrity: sha512-MXyL4xvCjmgaORr/rtryDNFy3kU4qUbKlwtQqqsygd0xX3mhKjOLn6mQK8wfu0RkoE0pBE0nAasRoHua+/QZ7A==} + peerDependencies: + react: '*' + react-native: '*' + + '@hookform/resolvers@3.10.0': + resolution: {integrity: sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==} + peerDependencies: + react-hook-form: ^7.0.0 + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@ide/backoff@1.0.0': + resolution: {integrity: sha512-F0YfUDjvT+Mtt/R4xdl2X0EYCHMMiJqNLdxHD++jDT5ydEFIyqbCHh51Qx2E211dgZprPKhV7sHmnXKpLuvc5g==} + + '@inquirer/checkbox@4.1.2': + resolution: {integrity: sha512-PL9ixC5YsPXzXhAZFUPmkXGxfgjkdfZdPEPPmt4kFwQ4LBMDG9n/nHXYRGGZSKZJs+d1sGKWgS2GiPzVRKUdtQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.6': + resolution: {integrity: sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.1.7': + resolution: {integrity: sha512-AA9CQhlrt6ZgiSy6qoAigiA1izOa751ugX6ioSjqgJ+/Gd+tEN/TORk5sUYNjXuHWfW0r1n/a6ak4u/NqHHrtA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.7': + resolution: {integrity: sha512-gktCSQtnSZHaBytkJKMKEuswSk2cDBuXX5rxGFv306mwHfBPjg5UAldw9zWGoEyvA9KpRDkeM4jfrx0rXn0GyA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.9': + resolution: {integrity: sha512-Xxt6nhomWTAmuSX61kVgglLjMEFGa+7+F6UUtdEUeg7fg4r9vaFttUUKrtkViYYrQBA5Ia1tkOJj2koP9BuLig==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.10': + resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} + engines: {node: '>=18'} + + '@inquirer/input@4.1.6': + resolution: {integrity: sha512-1f5AIsZuVjPT4ecA8AwaxDFNHny/tSershP/cTvTDxLdiIGTeILNcKozB0LaYt6mojJLUbOYhpIxicaYf7UKIQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.9': + resolution: {integrity: sha512-iN2xZvH3tyIYXLXBvlVh0npk1q/aVuKXZo5hj+K3W3D4ngAEq/DkLpofRzx6oebTUhBvOgryZ+rMV0yImKnG3w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.9': + resolution: {integrity: sha512-xBEoOw1XKb0rIN208YU7wM7oJEHhIYkfG7LpTJAEW913GZeaoQerzf5U/LSHI45EVvjAdgNXmXgH51cUXKZcJQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.3.2': + resolution: {integrity: sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.0.9': + resolution: {integrity: sha512-+5t6ebehKqgoxV8fXwE49HkSF2Rc9ijNiVGEQZwvbMI61/Q5RcD+jWD6Gs1tKdz5lkI8GRBL31iO0HjGK1bv+A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.0.9': + resolution: {integrity: sha512-DWmKztkYo9CvldGBaRMr0ETUHgR86zE6sPDVOHsqz4ISe9o1LuiWfgJk+2r75acFclA93J/lqzhT0dTjCzHuoA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.0.9': + resolution: {integrity: sha512-BpJyJe7Dkhv2kz7yG7bPSbJLQuu/rqyNlF1CfiiFeFwouegfH+zh13KDyt6+d9DwucKo7hqM3wKLLyJxZMO+Xg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@3.0.4': + resolution: {integrity: sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@internationalized/date@3.7.0': + resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==} + + '@internationalized/message@3.1.6': + resolution: {integrity: sha512-JxbK3iAcTIeNr1p0WIFg/wQJjIzJt9l/2KNY/48vXV7GRGZSv3zMxJsce008fZclk2cDC8y0Ig3odceHO7EfNQ==} + + '@internationalized/number@3.6.0': + resolution: {integrity: sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==} + + '@internationalized/string@3.2.5': + resolution: {integrity: sha512-rKs71Zvl2OKOHM+mzAFMIyqR5hI1d1O6BBkMK2/lkfg3fkmVh9Eeg0awcA8W2WqYqDOv6a86DIOlFpggwLtbuw==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@isaacs/ttlcache@1.4.1': + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/create-cache-key-function@29.7.0': + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jimp/bmp@0.22.12': + resolution: {integrity: sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/core@0.22.12': + resolution: {integrity: sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA==} + + '@jimp/custom@0.22.12': + resolution: {integrity: sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q==} + + '@jimp/gif@0.22.12': + resolution: {integrity: sha512-y6BFTJgch9mbor2H234VSjd9iwAhaNf/t3US5qpYIs0TSbAvM02Fbc28IaDETj9+4YB4676sz4RcN/zwhfu1pg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/jpeg@0.22.12': + resolution: {integrity: sha512-Rq26XC/uQWaQKyb/5lksCTCxXhtY01NJeBN+dQv5yNYedN0i7iYu+fXEoRsfaJ8xZzjoANH8sns7rVP4GE7d/Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-blit@0.22.12': + resolution: {integrity: sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-blur@0.22.12': + resolution: {integrity: sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-circle@0.22.12': + resolution: {integrity: sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-color@0.22.12': + resolution: {integrity: sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-contain@0.22.12': + resolution: {integrity: sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale': '>=0.3.5' + + '@jimp/plugin-cover@0.22.12': + resolution: {integrity: sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-crop': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale': '>=0.3.5' + + '@jimp/plugin-crop@0.22.12': + resolution: {integrity: sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-displace@0.22.12': + resolution: {integrity: sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-dither@0.22.12': + resolution: {integrity: sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-fisheye@0.22.12': + resolution: {integrity: sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-flip@0.22.12': + resolution: {integrity: sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-rotate': '>=0.3.5' + + '@jimp/plugin-gaussian@0.22.12': + resolution: {integrity: sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-invert@0.22.12': + resolution: {integrity: sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-mask@0.22.12': + resolution: {integrity: sha512-4AWZg+DomtpUA099jRV8IEZUfn1wLv6+nem4NRJC7L/82vxzLCgXKTxvNvBcNmJjT9yS1LAAmiJGdWKXG63/NA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-normalize@0.22.12': + resolution: {integrity: sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-print@0.22.12': + resolution: {integrity: sha512-c7TnhHlxm87DJeSnwr/XOLjJU/whoiKYY7r21SbuJ5nuH+7a78EW1teOaj5gEr2wYEd7QtkFqGlmyGXY/YclyQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + + '@jimp/plugin-resize@0.22.12': + resolution: {integrity: sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/plugin-rotate@0.22.12': + resolution: {integrity: sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-crop': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-scale@0.22.12': + resolution: {integrity: sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-shadow@0.22.12': + resolution: {integrity: sha512-FX8mTJuCt7/3zXVoeD/qHlm4YH2bVqBuWQHXSuBK054e7wFRnRnbSLPUqAwSeYP3lWqpuQzJtgiiBxV3+WWwTg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blur': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + + '@jimp/plugin-threshold@0.22.12': + resolution: {integrity: sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-color': '>=0.8.0' + '@jimp/plugin-resize': '>=0.8.0' + + '@jimp/plugins@0.22.12': + resolution: {integrity: sha512-yBJ8vQrDkBbTgQZLty9k4+KtUQdRjsIDJSPjuI21YdVeqZxYywifHl4/XWILoTZsjTUASQcGoH0TuC0N7xm3ww==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/png@0.22.12': + resolution: {integrity: sha512-Mrp6dr3UTn+aLK8ty/dSKELz+Otdz1v4aAXzV5q53UDD2rbB5joKVJ/ChY310B+eRzNxIovbUF1KVrUsYdE8Hg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/tiff@0.22.12': + resolution: {integrity: sha512-E1LtMh4RyJsoCAfAkBRVSYyZDTtLq9p9LUiiYP0vPtXyxX4BiYBUYihTLSBlCQg5nF2e4OpQg7SPrLdJ66u7jg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/types@0.22.12': + resolution: {integrity: sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + + '@jimp/utils@0.22.12': + resolution: {integrity: sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@legendapp/motion@2.4.0': + resolution: {integrity: sha512-AAYpRLGvxGD5hIGl9sVHyoUufr66zoH82PuxYcKiPSMdCBI3jwZFWh6CuHjV1leRKVIRk2py1rSvIVabG8eqcw==} + peerDependencies: + nativewind: '*' + react: '>=16' + react-native: '*' + + '@legendapp/tools@2.0.1': + resolution: {integrity: sha512-Kxt0HWvWElRK6oybHRzcYxdgaKGwuaiRNreS7usW7QuHXRIHaH4yMcW2YNRG4DHE5fpefv+Bno/BohQcCE4FaA==} + peerDependencies: + react: '>=16' + peerDependenciesMeta: + react: + optional: true + + '@livekit/components-core@0.12.4': + resolution: {integrity: sha512-a/GkK8XFULPhXoSKxuXEU62gwTAYJ83DP5/vlRzwESEY+rsoiw2NvvPZtDCU17yyd/5QBIF9VdDjB9ZZF0dOfQ==} + engines: {node: '>=18'} + peerDependencies: + livekit-client: ^2.11.1 + tslib: ^2.6.2 + + '@livekit/components-react@2.9.3': + resolution: {integrity: sha512-gE1sEE57BkBz3+TQHrOXVDVwVMwV5wtIYokdrfd7vshh22/PtWWj3vON9wzYLFRKx98L6QyAzyh7W9EWu3Lj9Q==} + engines: {node: '>=18'} + peerDependencies: + '@livekit/krisp-noise-filter': ^0.2.12 + livekit-client: ^2.11.1 + react: '>=18' + react-dom: '>=18' + tslib: ^2.6.2 + peerDependenciesMeta: + '@livekit/krisp-noise-filter': + optional: true + + '@livekit/mutex@1.1.1': + resolution: {integrity: sha512-EsshAucklmpuUAfkABPxJNhzj9v2sG7JuzFDL4ML1oJQSV14sqrpTYnsaOudMAw9yOaW53NU3QQTlUQoRs4czw==} + + '@livekit/protocol@1.36.1': + resolution: {integrity: sha512-nN3QnITAQ5yXk7UKfotH7CRWIlEozNWeKVyFJ0/+dtSzvWP/ib+10l1DDnRYi3A1yICJOGAKFgJ5d6kmi1HCUA==} + + '@livekit/react-native-expo-plugin@1.0.1': + resolution: {integrity: sha512-CSPjjzgDDlBH1ZyFyaw7/FW2Ql1S51eUkIxv/vjGwVshn+lUD6eQ9VgfUh7ha84itvjXi9X87FvP0XWKn9CiFQ==} + peerDependencies: + '@livekit/react-native': ^2.1.0 + expo: '*' + react: '*' + react-native: '*' + + '@livekit/react-native-webrtc@125.0.9': + resolution: {integrity: sha512-nYTdeR33M1UpaVVWIkhWUXw9UntPrrZFYWP8ZhYELpwZ9v17o5q6g9yL0jQccYbPKzYrn2vRM1KgfUgQ3VqG/w==} + peerDependencies: + react-native: '>=0.60.0' + + '@livekit/react-native@2.7.4': + resolution: {integrity: sha512-m8QikrNQ+DOecdhLdP0qLE9cAmxNOG1tmbO9+3lg3HaEplHNCfpZ6M+KIZNpqLg74oP9IBwrd87xYme73T4xDw==} + engines: {node: '>=18'} + peerDependencies: + '@livekit/react-native-webrtc': ^125.0.9 + livekit-client: ^2.9.0 + react: '*' + react-native: '*' + + '@mapbox/jsonlint-lines-primitives@2.0.2': + resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} + engines: {node: '>= 0.6'} + + '@mapbox/mapbox-gl-supported@3.0.0': + resolution: {integrity: sha512-2XghOwu16ZwPJLOFVuIOaLbN0iKMn867evzXFyf0P22dqugezfJwLmdanAgU25ITvz1TvOfVP4jsDImlDJzcWg==} + + '@mapbox/point-geometry@0.1.0': + resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} + + '@mapbox/tiny-sdf@2.0.6': + resolution: {integrity: sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==} + + '@mapbox/unitbezier@0.0.1': + resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==} + + '@mapbox/vector-tile@1.3.1': + resolution: {integrity: sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==} + + '@mapbox/whoots-js@3.1.0': + resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} + engines: {node: '>=6.0.0'} + + '@microsoft/signalr@8.0.7': + resolution: {integrity: sha512-PHcdMv8v5hJlBkRHAuKG5trGViQEkPYee36LnJQx4xHOQ5LL4X0nEWIxOp5cCtZ7tu+30quz5V3k0b1YNuc6lw==} + + '@motionone/animation@10.18.0': + resolution: {integrity: sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==} + + '@motionone/dom@10.12.0': + resolution: {integrity: sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw==} + + '@motionone/dom@10.18.0': + resolution: {integrity: sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==} + + '@motionone/easing@10.18.0': + resolution: {integrity: sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==} + + '@motionone/generators@10.18.0': + resolution: {integrity: sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==} + + '@motionone/types@10.17.1': + resolution: {integrity: sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==} + + '@motionone/utils@10.18.0': + resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@novu/js@2.6.6': + resolution: {integrity: sha512-kX6vSQvrQ1A6gHU5QvgrBMg/xnoCp3y61BjGO73f7hOWl3WD8kC0AkQ91kAA8L6BdpwJff6hTt1yS5sLBYE/mg==} + + '@novu/react-native@2.6.6': + resolution: {integrity: sha512-tE2SOxPLTab3sFMtNmQPi6/ETeUpkV+xpoKWjDhcPjj2/frk5swxPnOhf1TWSvelkZYvk2Db7Nv8cjiKdFb5Dg==} + peerDependencies: + react: '>=17' + + '@novu/react@2.6.6': + resolution: {integrity: sha512-CCLEPpE7AITflEx0sIH5dC6UuBaqYZHsnhumQNv+gPVYcsk+BVxz9N0/tq81KjOuTBA/bnQLxu+llbTObQ1QnQ==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + peerDependenciesMeta: + react-dom: + optional: true + + '@npmcli/fs@3.1.1': + resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} + + '@radix-ui/react-compose-refs@1.0.0': + resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@radix-ui/react-slot@1.0.1': + resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + + '@react-aria/checkbox@3.2.1': + resolution: {integrity: sha512-XnypnlVIfhB3CD7eSjSds8hNkzHgnhu0t48I1D0jYdL1O6tQC4UytPdIqlemRYBVHDloZkWerbjenpHnxhv8iA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 + + '@react-aria/dialog@3.5.21': + resolution: {integrity: sha512-tBsn9swBhcptJ9QIm0+ur0PVR799N6qmGguva3rUdd+gfitknFScyT08d7AoMr9AbXYdJ+2R9XNSZ3H3uIWQMw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/focus@3.19.1': + resolution: {integrity: sha512-bix9Bu1Ue7RPcYmjwcjhB14BMu2qzfJ3tMQLqDc9pweJA66nOw8DThy3IfVr8Z7j2PHktOLf9kcbiZpydKHqzg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/form@3.0.12': + resolution: {integrity: sha512-8uvPYEd3GDyGt5NRJIzdWW1Ry5HLZq37vzRZKUW8alZ2upFMH3KJJG55L9GP59KiF6zBrYBebvI/YK1Ye1PE1g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/i18n@3.12.5': + resolution: {integrity: sha512-ooeop2pTG94PuaHoN2OTk2hpkqVuoqgEYxRvnc1t7DVAtsskfhS/gVOTqyWGsxvwAvRi7m/CnDu6FYdeQ/bK5w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/interactions@3.23.0': + resolution: {integrity: sha512-0qR1atBIWrb7FzQ+Tmr3s8uH5mQdyRH78n0krYaG8tng9+u1JlSi8DGRSaC9ezKyNB84m7vHT207xnHXGeJ3Fg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/label@3.7.14': + resolution: {integrity: sha512-EN1Md2YvcC4sMqBoggsGYUEGlTNqUfJZWzduSt29fbQp1rKU2KlybTe+TWxKq/r2fFd+4JsRXxMeJiwB3w2AQA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/menu@3.17.0': + resolution: {integrity: sha512-aiFvSv3G1YvPC0klJQ/9quB05xIDZzJ5Lt6/CykP0UwGK5i8GCqm6/cyFLwEXsS5ooUPxS3bqmdOsgdADSSgqg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/overlays@3.25.0': + resolution: {integrity: sha512-UEqJJ4duowrD1JvwXpPZreBuK79pbyNjNxFUVpFSskpGEJe3oCWwsSDKz7P1O7xbx5OYp+rDiY8fk/sE5rkaKw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/radio@3.10.11': + resolution: {integrity: sha512-R150HsBFPr1jLMShI4aBM8heCa1k6h0KEvnFRfTAOBu+B9hMSZOPB+d6GQOwGPysNlbset90Kej8G15FGHjqiA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/selection@3.22.0': + resolution: {integrity: sha512-XFOrK525HX2eeWeLZcZscUAs5qsuC1ZxsInDXMjvLeAaUPtQNEhUKHj3psDAl6XDU4VV1IJo0qCmFTVqTTMZSg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/slider@3.7.15': + resolution: {integrity: sha512-v9tujsuvJYRX0vE/vMYBzTT9FXbzrLsjkOrouNq+UdBIr7wRjIWTHHM0j+khb2swyCWNTbdv6Ce316Zqx2qWFg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/ssr@3.9.7': + resolution: {integrity: sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/toggle@3.10.11': + resolution: {integrity: sha512-J3jO3KJiUbaYVDEpeXSBwqcyKxpi9OreiHRGiaxb6VwB+FWCj7Gb2WKajByXNyfs8jc6kX9VUFaXa7jze60oEQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/utils@3.27.0': + resolution: {integrity: sha512-p681OtApnKOdbeN8ITfnnYqfdHS0z7GE+4l8EXlfLnr70Rp/9xicBO6d2rU+V/B3JujDw2gPWxYKEnEeh0CGCw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/visually-hidden@3.8.19': + resolution: {integrity: sha512-MZgCCyQ3sdG94J5iJz7I7Ai3IxoN0U5d/+EaUnA1mfK7jf2fSYQBqi6Eyp8sWUYzBTLw4giXB5h0RGAnWzk9hA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-native-aria/accordion@0.0.2': + resolution: {integrity: sha512-2Wa/YDBc2aCunTLpqwxTfCwn1t63KSAIoXd0hqrUGJJF+N2bEs2Hqs9ZgyKJ/hzFxCknVPMqo0fEVE1H23Z5+g==} + peerDependencies: + react: '*' + react-native: '*' + + '@react-native-aria/checkbox@0.2.9': + resolution: {integrity: sha512-REycBw1DKbw2r9LbynrB+egWOnJXo1YPoMkAQOv6wiKgIzRZ69l4GpmAwkwqUmKit+DJM9Van6/cGl9kOKTAeA==} + peerDependencies: + react: '*' + react-native: '*' + + '@react-native-aria/dialog@0.0.4': + resolution: {integrity: sha512-l974yT9Z8KTSfY0rjaDNx5PsuGw50jRsdrkez+eP0P8ENx2uKHDzPPZDLo5XS5aiChFWbLaZFXp8rU0TRVOMmg==} + peerDependencies: + react: '*' + react-native: '*' + + '@react-native-aria/focus@0.2.9': + resolution: {integrity: sha512-zVgOIzKwnsyyurUxlZnzUKB2ekK/cmK64sQJIKKUlkJKVxd2EAFf7Sjz/NVEoMhTODN3qGRASTv9bMk/pBzzVA==} + peerDependencies: + react: '*' + react-native: '*' + + '@react-native-aria/interactions@0.2.14': + resolution: {integrity: sha512-7NNVUqKBCFROJn8IE3H6G6l+RInZZyP/6mqI+7z1XgyaewUT3J6a6igEZB7msKt2XB6NiziKImvKJ8KERdWS9Q==} + peerDependencies: + react: '*' + react-native: '*' + + '@react-native-aria/menu@0.2.13': + resolution: {integrity: sha512-W7PgA1W7a+yW84PtkejXSEQsWFqGdtkpNCPesOxSMTzAn6GPsrB/tDlALIR/vUbFOPoblkeDWqnGCLxhOKZbxg==} + peerDependencies: + react: '*' + react-native: '*' + + '@react-native-aria/overlays@0.3.14': + resolution: {integrity: sha512-a8MIB2aBw5yitNB0szNqKQlm4ngOozHGVmXTbslejGIX2+3YQUg8e7J4ouT7ZgK2iIr2gIB3YrstHDM6mvKVmw==} + peerDependencies: + react: '*' + react-dom: '*' + react-native: '*' + + '@react-native-aria/radio@0.2.11': + resolution: {integrity: sha512-xO6ATAVqX0iXxVSo2oar5BJsvO363MTYIX5Y50ew5BUEpP0j0raZ3NlbaBDQ1wYiBb1PLNQp83jSZ59g7qFwqg==} + peerDependencies: + react: '*' + react-native: '*' + + '@react-native-aria/slider@0.2.11': + resolution: {integrity: sha512-GVT0VOEosf7jk5B6nU0stxitnHbAWLjmarOgkun0/Nnkc0/RwRaf+hfdPGA8rZqNS01CIgooJSrxfIfyNgybpg==} + peerDependencies: + react: '*' + react-native: '*' + + '@react-native-aria/toggle@0.2.9': + resolution: {integrity: sha512-7yX8bZjW5tTQLOZ2NIZM9WbkBR5nok/kh5sb35zeIkLr/I5E4YIyriaa9426eVhW39lE2hbSaIoPxwAb6Qsfqw==} + peerDependencies: + react: '*' + react-native: '*' + + '@react-native-aria/utils@0.2.11': + resolution: {integrity: sha512-8MzE25pYDo1ZQtu7N9grx2Q+2uK58Tvvg4iJ7Nvx3PXTEz2XKU8G//yX9un97f7zCM6ptL8viRdKbSYDBmQvsA==} + peerDependencies: + react: '*' + react-native: '*' + + '@react-native/assets-registry@0.76.9': + resolution: {integrity: sha512-pN0Ws5xsjWOZ8P37efh0jqHHQmq+oNGKT4AyAoKRpxBDDDmlAmpaYjer9Qz7PpDKF+IUyRjF/+rBsM50a8JcUg==} + engines: {node: '>=18'} + + '@react-native/babel-plugin-codegen@0.76.9': + resolution: {integrity: sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==} + engines: {node: '>=18'} + + '@react-native/babel-preset@0.76.9': + resolution: {integrity: sha512-TbSeCplCM6WhL3hR2MjC/E1a9cRnMLz7i767T7mP90oWkklEjyPxWl+0GGoVGnJ8FC/jLUupg/HvREKjjif6lw==} + engines: {node: '>=18'} + peerDependencies: + '@babel/core': '*' + + '@react-native/codegen@0.76.9': + resolution: {integrity: sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==} + engines: {node: '>=18'} + peerDependencies: + '@babel/preset-env': ^7.1.6 + + '@react-native/community-cli-plugin@0.76.9': + resolution: {integrity: sha512-08jx8ixCjjd4jNQwNpP8yqrjrDctN2qvPPlf6ebz1OJQk8e1sbUl3wVn1zhhMvWrYcaraDnatPb5uCPq+dn3NQ==} + engines: {node: '>=18'} + peerDependencies: + '@react-native-community/cli': '*' + peerDependenciesMeta: + '@react-native-community/cli': + optional: true + + '@react-native/debugger-frontend@0.76.9': + resolution: {integrity: sha512-0Ru72Bm066xmxFuOXhhvrryxvb57uI79yDSFf+hxRpktkC98NMuRenlJhslMrbJ6WjCu1vOe/9UjWNYyxXTRTA==} + engines: {node: '>=18'} + + '@react-native/dev-middleware@0.76.9': + resolution: {integrity: sha512-xkd3C3dRcmZLjFTEAOvC14q3apMLouIvJViCZY/p1EfCMrNND31dgE1dYrLTiI045WAWMt5bD15i6f7dE2/QWA==} + engines: {node: '>=18'} + + '@react-native/gradle-plugin@0.76.9': + resolution: {integrity: sha512-uGzp3dL4GfNDz+jOb8Nik1Vrfq1LHm0zESizrGhHACFiFlUSflVAnWuUAjlZlz5XfLhzGVvunG4Vdrpw8CD2ng==} + engines: {node: '>=18'} + + '@react-native/js-polyfills@0.76.9': + resolution: {integrity: sha512-s6z6m8cK4SMjIX1hm8LT187aQ6//ujLrjzDBogqDCYXRbfjbAYovw5as/v2a2rhUIyJbS3UjokZm3W0H+Oh/RQ==} + engines: {node: '>=18'} + + '@react-native/metro-babel-transformer@0.76.9': + resolution: {integrity: sha512-HGq11347UHNiO/NvVbAO35hQCmH8YZRs7in7nVq7SL99pnpZK4WXwLdAXmSuwz5uYqOuwnKYDlpadz8fkE94Mg==} + engines: {node: '>=18'} + peerDependencies: + '@babel/core': '*' + + '@react-native/normalize-colors@0.74.89': + resolution: {integrity: sha512-qoMMXddVKVhZ8PA1AbUCk83trpd6N+1nF2A6k1i6LsQObyS92fELuk8kU/lQs6M7BsMHwqyLCpQJ1uFgNvIQXg==} + + '@react-native/normalize-colors@0.76.8': + resolution: {integrity: sha512-FRjRvs7RgsXjkbGSOjYSxhX5V70c0IzA/jy3HXeYpATMwD9fOR1DbveLW497QGsVdCa0vThbJUtR8rIzAfpHQA==} + + '@react-native/normalize-colors@0.76.9': + resolution: {integrity: sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw==} + + '@react-native/virtualized-lists@0.76.9': + resolution: {integrity: sha512-2neUfZKuqMK2LzfS8NyOWOyWUJOWgDym5fUph6fN9qF+LNPjAvnc4Zr9+o+59qjNu/yXwQgVMWNU4+8WJuPVWw==} + engines: {node: '>=18'} + peerDependencies: + '@types/react': ^18.2.6 + react: '*' + react-native: '*' + peerDependenciesMeta: + '@types/react': + optional: true + + '@react-navigation/bottom-tabs@7.2.0': + resolution: {integrity: sha512-1LxjgnbPyFINyf9Qr5d1YE0pYhuJayg5TCIIFQmbcX4PRhX7FKUXV7cX8OzrKXEdZi/UE/VNXugtozPAR9zgvA==} + peerDependencies: + '@react-navigation/native': ^7.0.14 + react: '>= 18.2.0' + react-native: '*' + react-native-safe-area-context: '>= 4.0.0' + react-native-screens: '>= 4.0.0' + + '@react-navigation/core@7.3.1': + resolution: {integrity: sha512-S3KCGvNsoqVk8ErAtQI2EAhg9185lahF5OY01ofrrD4Ij/uk3QEHHjoGQhR5l5DXSCSKr1JbMQA7MEKMsBiWZA==} + peerDependencies: + react: '>= 18.2.0' + + '@react-navigation/elements@2.2.5': + resolution: {integrity: sha512-sDhE+W14P7MNWLMxXg1MEVXwkLUpMZJGflE6nQNzLmolJQIHgcia0Mrm8uRa3bQovhxYu1UzEojLZ+caoZt7Fg==} + peerDependencies: + '@react-native-masked-view/masked-view': '>= 0.2.0' + '@react-navigation/native': ^7.0.14 + react: '>= 18.2.0' + react-native: '*' + react-native-safe-area-context: '>= 4.0.0' + peerDependenciesMeta: + '@react-native-masked-view/masked-view': + optional: true + + '@react-navigation/native-stack@7.2.0': + resolution: {integrity: sha512-mw7Nq9qQrGsmJmCTwIIWB7yY/3tWYXvQswx+HJScGAadIjemvytJXm1fcl3+YZ9T9Ym0aERcVe5kDs+ny3X4vA==} + peerDependencies: + '@react-navigation/native': ^7.0.14 + react: '>= 18.2.0' + react-native: '*' + react-native-safe-area-context: '>= 4.0.0' + react-native-screens: '>= 4.0.0' + + '@react-navigation/native@7.0.14': + resolution: {integrity: sha512-Gi6lLw4VOGSWAhmUdJOMauOKGK51/YA1CprjXm91sNfgERWvznqEMw8QmUQx9SEqYfi0LfZhbzpMst09SJ00lw==} + peerDependencies: + react: '>= 18.2.0' + react-native: '*' + + '@react-navigation/routers@7.1.2': + resolution: {integrity: sha512-emdEjpVDK8zbiu2GChC8oYIAub9i/OpNuQJekVsbyFCBz4/TzaBzms38Q53YaNhdIFNmiYLfHv/Y1Ub7KYfm3w==} + + '@react-stately/calendar@3.7.0': + resolution: {integrity: sha512-N15zKubP2S7eWfPSJjKVlmJA7YpWzrIGx52BFhwLSQAZcV+OPcMgvOs71WtB7PLwl6DUYQGsgc0B3tcHzzvdvQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/checkbox@3.6.11': + resolution: {integrity: sha512-jApdBis+Q1sXLivg+f7krcVaP/AMMMiQcVqcz5gwxlweQN+dRZ/NpL0BYaDOuGc26Mp0lcuVaET3jIZeHwtyxA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/collections@3.12.1': + resolution: {integrity: sha512-8QmFBL7f+P64dEP4o35pYH61/lP0T/ziSdZAvNMrCqaM+fXcMfUp2yu1E63kADVX7WRDsFJWE3CVMeqirPH6Xg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/color@3.8.2': + resolution: {integrity: sha512-GXwLmv1Eos2OwOiRsGFrXBKx8+uZh2q0qzLZEVYrWsedNhIdTm7nnpwO68nCYZPHkqhv6rhhVSlOOFmDLY++ow==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/combobox@3.10.2': + resolution: {integrity: sha512-uT642Dool4tQBh+8UQjlJnTisrJVtg3LqmiP/HqLQ4O3pW0O+ImbG+2r6c9dUzlAnH4kEfmEwCp9dxkBkmFWsg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/data@3.12.1': + resolution: {integrity: sha512-/Nc8X1FmrJ53QU4rN/1i1JtNir4iqo+39Xn5ZOJ74Nng7T+xVVuEuWSo+OEGaycCJf2eZRsomauPxUnnZgCM1A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/datepicker@3.12.0': + resolution: {integrity: sha512-AfJEP36d+QgQ30GfacXtYdGsJvqY2yuCJ+JrjHct+m1nYuTkMvMMnhwNBFasgDJPLCDyHzyANlWkl2kQGfsBFw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/disclosure@3.0.1': + resolution: {integrity: sha512-afpNy5b0UcqRGjU/W5OD0xkx4PbymvhMrgQZ4o4OdtDVMMvr9T5UqMF8/j3J591DxgQfXM872tJu0kotqT0L6Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/dnd@3.5.1': + resolution: {integrity: sha512-N18wt6fka9ngJJqxfAzmdtyrk9whAnqWUxZn22CatjNQsqukI4a6KRYwZTXM9x/wm7KamhVOp+GBl85zM8GLdA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/flags@3.0.5': + resolution: {integrity: sha512-6wks4csxUwPCp23LgJSnkBRhrWpd9jGd64DjcCTNB2AHIFu7Ab1W59pJpUL6TW7uAxVxdNKjgn6D1hlBy8qWsA==} + + '@react-stately/form@3.1.1': + resolution: {integrity: sha512-qavrz5X5Mdf/Q1v/QJRxc0F8UTNEyRCNSM1we/nnF7GV64+aYSDLOtaRGmzq+09RSwo1c8ZYnIkK5CnwsPhTsQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/grid@3.10.1': + resolution: {integrity: sha512-MOIy//AdxZxIXIzvWSKpvMvaPEMZGQNj+/cOsElHepv/Veh0psNURZMh2TP6Mr0+MnDTZbX+5XIeinGkWYO3JQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/list@3.11.2': + resolution: {integrity: sha512-eU2tY3aWj0SEeC7lH9AQoeAB4LL9mwS54FvTgHHoOgc1ZIwRJUaZoiuETyWQe98AL8KMgR1nrnDJ1I+CcT1Y7g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/menu@3.9.1': + resolution: {integrity: sha512-WRjGGImhQlQaer/hhahGytwd1BDq3fjpTkY/04wv3cQJPJR6lkVI5nSvGFMHfCaErsA1bNyB8/T9Y5F5u4u9ng==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/numberfield@3.9.9': + resolution: {integrity: sha512-hZsLiGGHTHmffjFymbH1qVmA633rU2GNjMFQTuSsN4lqqaP8fgxngd5pPCoTCUFEkUgWjdHenw+ZFByw8lIE+g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/overlays@3.6.13': + resolution: {integrity: sha512-WsU85Gf/b+HbWsnnYw7P/Ila3wD+C37Uk/WbU4/fHgJ26IEOWsPE6wlul8j54NZ1PnLNhV9Fn+Kffi+PaJMQXQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/radio@3.10.10': + resolution: {integrity: sha512-9x3bpq87uV8iYA4NaioTTWjriQSlSdp+Huqlxll0T3W3okpyraTTejE91PbIoRTUmL5qByIh2WzxYmr4QdBgAA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/searchfield@3.5.9': + resolution: {integrity: sha512-7/aO/oLJ4czKEji0taI/lbHKqPJRag9p3YmRaZ4yqjIMpKxzmJCWQcov5lzWeFhG/1hINKndYlxFnVIKV/urpg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/select@3.6.10': + resolution: {integrity: sha512-V7V0FCL9T+GzLjyfnJB6PUaKldFyT/8Rj6M+R9ura1A0O+s/FEOesy0pdMXFoL1l5zeUpGlCnhJrsI5HFWHfDw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/selection@3.19.0': + resolution: {integrity: sha512-AvbUqnWjqVQC48RD39S9BpMKMLl55Zo5l/yx5JQFPl55cFwe9Tpku1KY0wzt3fXXiXWaqjDn/7Gkg1VJYy8esQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/slider@3.6.1': + resolution: {integrity: sha512-8kij5O82Xe233vZZ6qNGqPXidnlNQiSnyF1q613c7ktFmzAyGjkIWVUapHi23T1fqm7H2Rs3RWlmwE9bo2KecA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/table@3.13.1': + resolution: {integrity: sha512-Im8W+F8o9EhglY5kqRa3xcMGXl8zBi6W5phGpAjXb+UGDL1tBIlAcYj733bw8g/ITCnaSz9ubsmON0HekPd6Jg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/tabs@3.7.1': + resolution: {integrity: sha512-gr9ACyuWrYuc727h7WaHdmNw8yxVlUyQlguziR94MdeRtFGQnf3V6fNQG3kxyB77Ljko69tgDF7Nf6kfPUPAQQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/toggle@3.8.1': + resolution: {integrity: sha512-MVpe79ghVQiwLmVzIPhF/O/UJAUc9B+ZSylVTyJiEPi0cwhbkKGQv9thOF0ebkkRkace5lojASqUAYtSTZHQJA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/tooltip@3.5.1': + resolution: {integrity: sha512-0aI3U5kB7Cop9OCW9/Bag04zkivFSdUcQgy/TWL4JtpXidVWmOha8txI1WySawFSjZhH83KIyPc+wKm1msfLMQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/tree@3.8.7': + resolution: {integrity: sha512-hpc3pyuXWeQV5ufQ02AeNQg/MYhnzZ4NOznlY5OOUoPzpLYiI3ZJubiY3Dot4jw5N/LR7CqvDLHmrHaJPmZlHg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/utils@3.10.5': + resolution: {integrity: sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/button@3.10.2': + resolution: {integrity: sha512-h8SB/BLoCgoBulCpyzaoZ+miKXrolK9XC48+n1dKJXT8g4gImrficurDW6+PRTQWaRai0Q0A6bu8UibZOU4syg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/calendar@3.6.0': + resolution: {integrity: sha512-BtFh4BFwvsYlsaSqUOVxlqXZSlJ6u4aozgO3PwHykhpemwidlzNwm9qDZhcMWPioNF/w2cU/6EqhvEKUHDnFZg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/checkbox@3.9.1': + resolution: {integrity: sha512-0x/KQcipfNM9Nvy6UMwYG25roRLvsiqf0J3woTYylNNWzF+72XT0iI5FdJkE3w2wfa0obmSoeq4WcbFREQrH/A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/color@3.0.2': + resolution: {integrity: sha512-4k9c0l5SACwTtkHV0dQ0GrF0Kktk/NChkxtyu58BamyUQOsCe8sqny+uul2nPrqQvuVof/dkRjKhv/DVyyx2mw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/combobox@3.13.2': + resolution: {integrity: sha512-yl2yMcM5/v3lJiNZWjpAhQ9vRW6dD55CD4rYmO2K7XvzYJaFVT4WYI/AymPYD8RqomMp7coBmBHfHW0oupk8gg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/datepicker@3.10.0': + resolution: {integrity: sha512-Att7y4NedNH1CogMDIX9URXgMLxGbZgnFCZ8oxgFAVndWzbh3TBcc4s7uoJDPvgRMAalq+z+SrlFFeoBeJmvvg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/dialog@3.5.15': + resolution: {integrity: sha512-BX1+mV35Oa0aIlhu98OzJaSB7uiCWDPQbr0AkpFBajSSlESUoAjntN+4N+QJmj24z2v6UE9zxGQ85/U/0Le+bw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/grid@3.2.11': + resolution: {integrity: sha512-Mww9nrasppvPbsBi+uUqFnf7ya8fXN0cTVzDNG+SveD8mhW+sbtuy+gPtEpnFD2Oyi8qLuObefzt4gdekJX2Yw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/menu@3.9.14': + resolution: {integrity: sha512-RJW/S8IPwbRuohJ/A9HJ7W8QaAY816tm7Nv6+H/TLXG76zu2AS5vEgq+0TcCAWvJJwUdLDpJWJMlo0iIoIBtcg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/numberfield@3.8.8': + resolution: {integrity: sha512-825JPppxDaWh0Zxb0Q+wSslgRQYOtQPCAuhszPuWEy6d2F/M+hLR+qQqvQm9+LfMbdwiTg6QK5wxdWFCp2t7jw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/overlays@3.8.12': + resolution: {integrity: sha512-ZvR1t0YV7/6j+6OD8VozKYjvsXT92+C/2LOIKozy7YUNS5KI4MkXbRZzJvkuRECVZOmx8JXKTUzhghWJM/3QuQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/radio@3.8.6': + resolution: {integrity: sha512-woTQYdRFjPzuml4qcIf+2zmycRuM5w3fDS5vk6CQmComVUjOFPtD28zX3Z9kc9lSNzaBQz9ONZfFqkZ1gqfICA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/searchfield@3.5.11': + resolution: {integrity: sha512-MX8d9pgvxZxmgDwI0tiDaf6ijOY8XcRj0HM8Ocfttlk7PEFJK44p51WsUC+fPX1GmZni2JpFkx/haPOSLUECdw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/select@3.9.9': + resolution: {integrity: sha512-/hCd0o+ztn29FKCmVec+v7t4JpOzz56o+KrG7NDq2pcRWqUR9kNwCjrPhSbJIIEDm4ubtrfPu41ysIuDvRd2Bg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/shared@3.27.0': + resolution: {integrity: sha512-gvznmLhi6JPEf0bsq7SwRYTHAKKq/wcmKqFez9sRdbED+SPMUmK5omfZ6w3EwUFQHbYUa4zPBYedQ7Knv70RMw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/slider@3.7.8': + resolution: {integrity: sha512-utW1o9KT70hqFwu1zqMtyEWmP0kSATk4yx+Fm/peSR4iZa+BasRqH83yzir5GKc8OfqfE1kmEsSlO98/k986+w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/table@3.10.4': + resolution: {integrity: sha512-d0tLz/whxVteqr1rophtuuxqyknHHfTKeXrCgDjt8pAyd9U8GPDbfcFSfYPUhWdELRt7aLVyQw6VblZHioVEgQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/tabs@3.3.12': + resolution: {integrity: sha512-E9O9G+wf9kaQ8UbDEDliW/oxYlJnh7oDCW1zaMOySwnG4yeCh7Wu02EOCvlQW4xvgn/i+lbEWgirf7L+yj5nRg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/textfield@3.11.0': + resolution: {integrity: sha512-YORBgr6wlu2xfvr4MqjKFHGpj+z8LBzk14FbWDbYnnhGnv0I10pj+m2KeOHgDNFHrfkDdDOQmMIKn1UCqeUuEg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/tooltip@3.4.14': + resolution: {integrity: sha512-J7CeYL2yPeKIasx1rPaEefyCHGEx2DOCx+7bM3XcKGmCxvNdVQLjimNJOt8IHlUA0nFJQOjmSW/mz9P0f2/kUw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@rnmapbox/maps@10.1.37': + resolution: {integrity: sha512-9TJ79pjj7v2vQOPJZXO5lJmlYi0xlesRnAPTAwfOjXlHdGPtiucXoxL8+e1xL0PJBVMqVJGOjPLeb1+05kGx2g==} + peerDependencies: + expo: '>=47.0.0' + mapbox-gl: ^2.9.0 + react: '>=16.6.1' + react-dom: '>= 17.0.0' + react-native: '>=0.59.9' + peerDependenciesMeta: + expo: + optional: true + mapbox-gl: + optional: true + react-dom: + optional: true + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@samverschueren/stream-to-observable@0.3.1': + resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zen-observable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zen-observable: + optional: true + + '@segment/loosely-validate-event@2.0.0': + resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==} + + '@sentry-internal/browser-utils@8.54.0': + resolution: {integrity: sha512-DKWCqb4YQosKn6aD45fhKyzhkdG7N6goGFDeyTaJFREJDFVDXiNDsYZu30nJ6BxMM7uQIaARhPAC5BXfoED3pQ==} + engines: {node: '>=14.18'} + + '@sentry-internal/feedback@8.54.0': + resolution: {integrity: sha512-nQqRacOXoElpE0L0ADxUUII0I3A94niqG9Z4Fmsw6057QvyrV/LvTiMQBop6r5qLjwMqK+T33iR4/NQI5RhsXQ==} + engines: {node: '>=14.18'} + + '@sentry-internal/replay-canvas@8.54.0': + resolution: {integrity: sha512-K/On3OAUBeq/TV2n+1EvObKC+WMV9npVXpVyJqCCyn8HYMm8FUGzuxeajzm0mlW4wDTPCQor6mK9/IgOquUzCw==} + engines: {node: '>=14.18'} + + '@sentry-internal/replay@8.54.0': + resolution: {integrity: sha512-8xuBe06IaYIGJec53wUC12tY2q4z2Z0RPS2s1sLtbA00EvK1YDGuXp96IDD+HB9mnDMrQ/jW5f97g9TvPsPQUg==} + engines: {node: '>=14.18'} + + '@sentry/babel-plugin-component-annotate@3.2.2': + resolution: {integrity: sha512-D+SKQ266ra/wo87s9+UI/rKQi3qhGPCR8eSCDe0VJudhjHsqyNU+JJ5lnIGCgmZaWFTXgdBP/gdr1Iz1zqGs4Q==} + engines: {node: '>= 14'} + + '@sentry/browser@8.54.0': + resolution: {integrity: sha512-BgUtvxFHin0fS0CmJVKTLXXZcke0Av729IVfi+2fJ4COX8HO7/HAP02RKaSQGmL2HmvWYTfNZ7529AnUtrM4Rg==} + engines: {node: '>=14.18'} + + '@sentry/cli-darwin@2.42.4': + resolution: {integrity: sha512-PZV4Y97VDWBR4rIt0HkJfXaBXlebIN2s/FDzC3iHINZE5OG62CDFsnC4/lbGlf2/UZLDaGGIK7mYwSHhTvN+HQ==} + engines: {node: '>=10'} + os: [darwin] + + '@sentry/cli-linux-arm64@2.42.4': + resolution: {integrity: sha512-Ex8vRnryyzC/9e43daEmEqPS+9uirY/l6Hw2lAvhBblFaL7PTWNx52H+8GnYGd9Zy2H3rWNyBDYfHwnErg38zA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux, freebsd] + + '@sentry/cli-linux-arm@2.42.4': + resolution: {integrity: sha512-lBn0oeeg62h68/4Eo6zbPq99Idz5t0VRV48rEU/WKeM4MtQCvG/iGGQ3lBFW2yNiUBzXZIK9poXLEcgbwmcRVw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux, freebsd] + + '@sentry/cli-linux-i686@2.42.4': + resolution: {integrity: sha512-IBJg0aHjsLCL4LvcFa3cXIjA+4t5kPqBT9y+PoDu4goIFxYD8zl7mbUdGJutvJafTk8Akf4ss4JJXQBjg019zA==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [linux, freebsd] + + '@sentry/cli-linux-x64@2.42.4': + resolution: {integrity: sha512-gXI5OEiOSNiAEz7VCE6AZcAgHJ47mlgal3+NmbE8XcHmFOnyDws9FNie6PJAy8KZjXi3nqoBP9JVAbnmOix3uA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux, freebsd] + + '@sentry/cli-win32-i686@2.42.4': + resolution: {integrity: sha512-vZuR3UPHKqOMniyrijrrsNwn9usaRysXq78F6WV0cL0ZyPLAmY+KBnTDSFk1Oig2pURnzaTm+RtcZu2fc8mlzg==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [win32] + + '@sentry/cli-win32-x64@2.42.4': + resolution: {integrity: sha512-OIBj3uaQ6nAERSm5Dcf8UIhyElEEwMNsZEEppQpN4IKl0mrwb/57AznM23Dvpu6GR8WGbVQUSolt879YZR5E9g==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@sentry/cli@2.42.4': + resolution: {integrity: sha512-BoSZDAWJiz/40tu6LuMDkSgwk4xTsq6zwqYoUqLU3vKBR/VsaaQGvu6EWxZXORthfZU2/5Agz0+t220cge6VQw==} + engines: {node: '>= 10'} + hasBin: true + + '@sentry/core@8.54.0': + resolution: {integrity: sha512-03bWf+D1j28unOocY/5FDB6bUHtYlm6m6ollVejhg45ZmK9iPjdtxNWbrLsjT1WRym0Tjzowu+A3p+eebYEv0Q==} + engines: {node: '>=14.18'} + + '@sentry/react-native@6.10.0': + resolution: {integrity: sha512-B56vc+pnFHMiu3cabFb454v4qD0zObW6JVzJ5Gb6fIMdt93AFIJg10ZErzC+ump7xM4BOEROFFRuLiyvadvlPA==} + hasBin: true + peerDependencies: + expo: '>=49.0.0' + react: '>=17.0.0' + react-native: '>=0.65.0' + peerDependenciesMeta: + expo: + optional: true + + '@sentry/react@8.54.0': + resolution: {integrity: sha512-42T/fp8snYN19Fy/2P0Mwotu4gcdy+1Lx+uYCNcYP1o7wNGigJ7qb27sW7W34GyCCHjoCCfQgeOqDQsyY8LC9w==} + engines: {node: '>=14.18'} + peerDependencies: + react: ^16.14.0 || 17.x || 18.x || 19.x + + '@sentry/types@8.54.0': + resolution: {integrity: sha512-wztdtr7dOXQKi0iRvKc8XJhJ7HaAfOv8lGu0yqFOFwBZucO/SHnu87GOPi8mvrTiy1bentQO5l+zXWAaMvG4uw==} + engines: {node: '>=14.18'} + + '@sentry/utils@8.54.0': + resolution: {integrity: sha512-JL8UDjrsKxKclTdLXfuHfE7B3KbrAPEYP7tMyN/xiO2vsF6D84fjwYyalO0ZMtuFZE6vpSze8ZOLEh6hLnPYsw==} + engines: {node: '>=14.18'} + + '@shopify/flash-list@1.7.3': + resolution: {integrity: sha512-RLhNptm02aqpqZvjj9pJPcU+EVYxOAJhPRCmDOaUbUP86+636w+plsbjpBPSYGvPZhPj56RtZ9FBlvolPeEmYA==} + peerDependencies: + '@babel/runtime': '*' + react: '*' + react-native: '*' + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + + '@solid-primitives/props@3.2.0': + resolution: {integrity: sha512-vEg5yERdXftJz2+A6B0IMYTrPL9SE2DPmpURV/nZyqQ+PXziF02V4b4SDr6JX3jNJxBlY6c17LqwYEw+bIfGRg==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/refs@1.1.0': + resolution: {integrity: sha512-QJ3bTSQOlPdHBP2m6llrT13FvVzAwZfx41lTN8lQrRwwcZoWb7kfCAjhaohPnwkAsQ6nJpLjtGfT5GOyuCA4tA==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/transition-group@1.1.0': + resolution: {integrity: sha512-pL1sEPCHuC4V+Yh+SQsKSPuGDYrZbLJYSkk3AB4TZrWhptEJUS0IHoi7BAynYcMiULbvMMVKFbeFHqINZq0+ig==} + peerDependencies: + solid-js: ^1.6.12 + + '@solid-primitives/utils@6.3.0': + resolution: {integrity: sha512-e7hTlJ1Ywh2+g/Qug+n4L1mpfxsikoIS4/sHE2EK9WatQt8UJqop/vE6bsLnXlU1xuhb/jo94Ah5Y27rd4wP7A==} + peerDependencies: + solid-js: ^1.6.12 + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@tanstack/query-core@5.66.11': + resolution: {integrity: sha512-ZEYxgHUcohj3sHkbRaw0gYwFxjY5O6M3IXOYXEun7E1rqNhsP8fOtqjJTKPZpVHcdIdrmX4lzZctT4+pts0OgA==} + + '@tanstack/react-query@5.66.11': + resolution: {integrity: sha512-uPDiQbZScWkAeihmZ9gAm3wOBA1TmLB1KCB1fJ1hIiEKq3dTT+ja/aYM7wGUD+XiEsY4sDSE7p8VIz/21L2Dow==} + peerDependencies: + react: ^18 || ^19 + + '@testing-library/jest-dom@6.6.3': + resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/react-native@12.9.0': + resolution: {integrity: sha512-wIn/lB1FjV2N4Q7i9PWVRck3Ehwq5pkhAef5X5/bmQ78J/NoOsGbVY2/DG5Y9Lxw+RfE+GvSEh/fe5Tz6sKSvw==} + peerDependencies: + jest: '>=28.0.0' + react: '>=16.8.0' + react-native: '>=0.59' + react-test-renderer: '>=16.8.0' + peerDependenciesMeta: + jest: + optional: true + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@turf/along@6.5.0': + resolution: {integrity: sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw==} + + '@turf/bbox@7.2.0': + resolution: {integrity: sha512-wzHEjCXlYZiDludDbXkpBSmv8Zu6tPGLmJ1sXQ6qDwpLE1Ew3mcWqt8AaxfTP5QwDNQa3sf2vvgTEzNbPQkCiA==} + + '@turf/bearing@6.5.0': + resolution: {integrity: sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==} + + '@turf/destination@6.5.0': + resolution: {integrity: sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==} + + '@turf/distance@6.5.0': + resolution: {integrity: sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==} + + '@turf/helpers@6.5.0': + resolution: {integrity: sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==} + + '@turf/helpers@7.2.0': + resolution: {integrity: sha512-cXo7bKNZoa7aC7ydLmUR02oB3IgDe7MxiPuRz3cCtYQHn+BJ6h1tihmamYDWWUlPHgSNF0i3ATc4WmDECZafKw==} + + '@turf/invariant@6.5.0': + resolution: {integrity: sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==} + + '@turf/length@6.5.0': + resolution: {integrity: sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig==} + + '@turf/line-intersect@6.5.0': + resolution: {integrity: sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==} + + '@turf/line-segment@6.5.0': + resolution: {integrity: sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==} + + '@turf/meta@6.5.0': + resolution: {integrity: sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==} + + '@turf/meta@7.2.0': + resolution: {integrity: sha512-igzTdHsQc8TV1RhPuOLVo74Px/hyPrVgVOTgjWQZzt3J9BVseCdpfY/0cJBdlSRI4S/yTmmHl7gAqjhpYH5Yaw==} + + '@turf/nearest-point-on-line@6.5.0': + resolution: {integrity: sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/conventional-commits-parser@5.0.1': + resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + + '@types/geojson-vt@3.2.5': + resolution: {integrity: sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==} + + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + + '@types/geojson@7946.0.8': + resolution: {integrity: sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/hammerjs@2.0.46': + resolution: {integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==} + + '@types/i18n-js@3.8.9': + resolution: {integrity: sha512-bSxgya4x5O+x+QhfCGckiDDE+17XGPp1TNBgBA/vfF5EwdiZC70F4cKG5QK2v44+v62oY7/t/InreRhxskulcA==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + + '@types/jsdom@20.0.1': + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/lodash.memoize@4.1.9': + resolution: {integrity: sha512-glY1nQuoqX4Ft8Uk+KfJudOD7DQbbEDF6k9XpGncaohW3RW4eSWBlx6AA0fZCrh40tZcQNH4jS/Oc59J6Eq+aw==} + + '@types/lodash@4.17.15': + resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} + + '@types/mapbox__point-geometry@0.1.4': + resolution: {integrity: sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==} + + '@types/mapbox__vector-tile@1.3.4': + resolution: {integrity: sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==} + + '@types/node-forge@1.3.11': + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + + '@types/node@16.9.1': + resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} + + '@types/node@22.13.5': + resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/pbf@3.0.5': + resolution: {integrity: sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==} + + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + + '@types/react-native-base64@0.2.2': + resolution: {integrity: sha512-obr+/L9Jaxdr+xCVS/IQcYgreg5xtnui4Wqw/G1acBUtW2CnqVJj6lK6F/5F3+5d2oZEo5xDDLqy8GVn2HbEmw==} + + '@types/react-native@0.73.0': + resolution: {integrity: sha512-6ZRPQrYM72qYKGWidEttRe6M5DZBEV5F+MHMHqd4TTYx0tfkcdrUFGdef6CCxY0jXU7wldvd/zA/b0A/kTeJmA==} + deprecated: This is a stub types definition. react-native provides its own type definitions, so you do not need this installed. + + '@types/react@18.3.18': + resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/strip-bom@3.0.0': + resolution: {integrity: sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==} + + '@types/strip-json-comments@0.0.30': + resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==} + + '@types/supercluster@7.1.3': + resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@typescript-eslint/eslint-plugin@5.62.0': + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@5.62.0': + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/type-utils@5.62.0': + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@urql/core@5.1.0': + resolution: {integrity: sha512-yC3sw8yqjbX45GbXxfiBY8GLYCiyW/hLBbQF9l3TJrv4ro00Y0ChkKaD9I2KntRxAVm9IYBqh0awX8fwWAe/Yw==} + + '@urql/exchange-retry@1.3.0': + resolution: {integrity: sha512-FLt+d81gP4oiHah4hWFDApimc+/xABWMU1AMYsZ1PVB0L0YPtrMCjbOp9WMM7hBzy4gbTDrG24sio0dCfSh/HQ==} + peerDependencies: + '@urql/core': ^5.0.0 + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xmldom/xmldom@0.7.13': + resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} + engines: {node: '>=10.0.0'} + deprecated: this version is no longer supported, please update to at least 0.8.* + + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + '@yarnpkg/lockfile@1.1.0': + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-globals@7.0.1: + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-loose@8.4.0: + resolution: {integrity: sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==} + engines: {node: '>=0.4.0'} + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.11.0: + resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + anser@1.4.10: + resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-escapes@3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + + ansi-escapes@6.2.1: + resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} + engines: {node: '>=14.16'} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + + ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-base@1.1.0: + resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} + + any-observable@0.3.0: + resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zenObservable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zenObservable: + optional: true + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + app-icon-badge@0.1.2: + resolution: {integrity: sha512-k9IEyaRFWEBjuazjgJIf6DnypoXppdxn0olkCQvts83VBehg1vm3IIp6HJpGpfDsUgymNJkYd7r8Q4pDfO6cpw==} + hasBin: true + + application-config-path@0.1.1: + resolution: {integrity: sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.at@1.1.3: + resolution: {integrity: sha512-TX4J1Uig4skvpOakrvP8q/uyhUj+ZDNmQoZpHf3MsKTrXcMHDPrgJlpv2nRJMfANrsmhg1JoOGrg3yOp209SWg==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.map@1.0.8: + resolution: {integrity: sha512-YocPM7bYYu2hXGxWpb5vwZ8cMeudNHYtYBcUDY4Z1GWa53qcnQMWSl25jeBHNzitjl9HW2AWW4ro/S/nftUaOQ==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + ast-types@0.15.2: + resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} + engines: {node: '>=4'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.8.1: + resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} + + babel-core@7.0.0-bridge.0: + resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-plugin-module-resolver@5.0.2: + resolution: {integrity: sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==} + + babel-plugin-polyfill-corejs2@0.4.13: + resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.11.1: + resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.4: + resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-react-native-web@0.19.13: + resolution: {integrity: sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==} + + babel-plugin-syntax-hermes-parser@0.23.1: + resolution: {integrity: sha512-uNLD0tk2tLUjGFdmCk+u/3FEw2o+BAwW4g+z2QVlxJrzZYOOPADroEcNtTPt5lNiScctaUmnsTkVEnOwZUOLhA==} + + babel-plugin-syntax-hermes-parser@0.25.1: + resolution: {integrity: sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==} + + babel-plugin-transform-flow-enums@0.0.2: + resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-expo@12.0.11: + resolution: {integrity: sha512-4m6D92nKEieg+7DXa8uSvpr0GjfuRfM/G0t0I/Q5hF8HleEv5ms3z4dJ+p52qXSJsm760tMqLdO93Ywuoi7cCQ==} + peerDependencies: + babel-plugin-react-compiler: ^19.0.0-beta-9ee70a1-20241017 + react-compiler-runtime: ^19.0.0-beta-8a03594-20241020 + peerDependenciesMeta: + babel-plugin-react-compiler: + optional: true + react-compiler-runtime: + optional: true + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + badgin@1.2.3: + resolution: {integrity: sha512-NQGA7LcfCpSzIbGRbkgjgdWkjy7HI+Th5VLxTJfW5EeaAf3fnS+xWQaQOCYiny+q6QSvxqoSO04vCx+4u++EJw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + better-opn@3.0.2: + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} + + big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bmp-js@0.1.0: + resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + + bplist-creator@0.0.7: + resolution: {integrity: sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA==} + + bplist-creator@0.1.0: + resolution: {integrity: sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==} + + bplist-parser@0.3.1: + resolution: {integrity: sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==} + engines: {node: '>= 5.10.0'} + + bplist-parser@0.3.2: + resolution: {integrity: sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==} + engines: {node: '>= 5.10.0'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + + buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + + buffer-equal@0.0.1: + resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} + engines: {node: '>=0.4.0'} + + buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cacache@18.0.4: + resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + + caller-callsite@2.0.0: + resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} + engines: {node: '>=4'} + + caller-path@2.0.0: + resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==} + engines: {node: '>=4'} + + callsites@2.0.0: + resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} + engines: {node: '>=4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + caniuse-lite@1.0.30001701: + resolution: {integrity: sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==} + + centra@2.7.0: + resolution: {integrity: sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==} + + chalk-template@1.1.0: + resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==} + engines: {node: '>=14.16'} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + char-regex@2.0.2: + resolution: {integrity: sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==} + engines: {node: '>=12.20'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + + cheap-ruler@4.0.0: + resolution: {integrity: sha512-0BJa8f4t141BYKQyn9NSQt1PguFQXMXwZiA5shfoaBYHAb2fFk2RAX+tiWMoQU+Agtzt3mdt0JtuyshAXqZ+Vw==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chrome-launcher@0.15.2: + resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} + engines: {node: '>=12.13.0'} + hasBin: true + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + chromium-edge-launcher@0.2.0: + resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==} + + ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@2.1.0: + resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} + engines: {node: '>=4'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@0.2.1: + resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==} + engines: {node: '>=0.10.0'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cli-width@2.2.1: + resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + code-point-at@1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + comment-json@4.2.5: + resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + engines: {node: '>= 6'} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + component-type@1.2.2: + resolution: {integrity: sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.0: + resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + configstore@7.0.0: + resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} + engines: {node: '>=18'} + + connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + core-js-compat@3.42.0: + resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig-typescript-loader@6.1.0: + resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + + cosmiconfig@5.2.1: + resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} + engines: {node: '>=4'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + + css-in-js-utils@3.1.0: + resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + csscolorparser@1.0.3: + resolution: {integrity: sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + + cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} + + data-urls@3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + date-fns@1.30.1: + resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.5.0: + resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + default-gateway@4.2.0: + resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==} + engines: {node: '>=6'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + del@6.1.1: + resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} + engines: {node: '>=10'} + + del@8.0.0: + resolution: {integrity: sha512-R6ep6JJ+eOBZsBr9esiNN1gxFbZE4Q2cULkUSFumGYecAiS6qodDvcPx/sFuWHMNul7DWmrtoEOpYSm7o6tbSA==} + engines: {node: '>=18'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delta-e@0.0.8: + resolution: {integrity: sha512-xIggbz7AoZLjwyV+BatfsKhWB1ejeh6vabM4KTJ2e7/d+TS0f7s87aUfkJ7B+MfniM6DD5VOWWlqcKXksp5mIg==} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domexception@4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} + + dotenv-expand@11.0.7: + resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} + engines: {node: '>=12'} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + earcut@3.0.1: + resolution: {integrity: sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.109: + resolution: {integrity: sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ==} + + elegant-spinner@1.0.1: + resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} + engines: {node: '>=0.10.0'} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + engine.io-client@6.5.4: + resolution: {integrity: sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==} + + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-editor@0.4.2: + resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==} + engines: {node: '>=8'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + eol@0.9.1: + resolution: {integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + + es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-expo@7.1.2: + resolution: {integrity: sha512-WxrDVNklN43Op0v3fglQfzL2bC7vqacUq9oVwJcGCUEDzdM7kGOR6pfEJiz3i3dQv3cFjHtct0CFEExep5c/dA==} + peerDependencies: + eslint: '>=8.10' + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.8.3: + resolution: {integrity: sha512-A0bu4Ks2QqDWNpeEgTQMPTngaMhuDu4yv6xpftBMAf+1ziXnpx+eSR1WRfoPTe2BAiAjHFZ7kSNx1fvr5g5pmQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-expo@0.0.1: + resolution: {integrity: sha512-dNri81vunJ3T+N1YWWxjLU6ux6KiukwZ4ECXCOPp8hG7M4kuvPAb9YQSIM63AT0pbtfYH/a6htikhaQcRPjhRA==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: '>=8' + + eslint-plugin-i18n-json@4.0.1: + resolution: {integrity: sha512-LNQS2XeEy1fdCOn/n3Aeh7RWPVbwKL0tH4Q1c2Y/M1TN6Jo3uN6C3cTvtjzJEms7ul0rmCAPoGqM4IsVCOIxnw==} + engines: {node: '>=6.0.0'} + peerDependencies: + eslint: '>=4.0.0' + + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-prettier@5.2.3: + resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-react-compiler@19.0.0-beta-a7bf2bd-20241110: + resolution: {integrity: sha512-b5/hRnOQlnH9CEnJQ6UrPoIAG4y/wIGv+OVEHTeAkbq+1uojfcuQyLToYvK1T9a6vz5WQHeMjQqFOZk3mtWorg==} + engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: '>=7' + + eslint-plugin-react-hooks@4.6.2: + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react@7.37.4: + resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-plugin-simple-import-sort@10.0.0: + resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + peerDependencies: + eslint: '>=5.0.0' + + eslint-plugin-tailwindcss@3.18.0: + resolution: {integrity: sha512-PQDU4ZMzFH0eb2DrfHPpbgo87Zgg2EXSMOj1NSfzdZm+aJzpuwGerfowMIaVehSREEa0idbf/eoNYAOHSJoDAQ==} + engines: {node: '>=18.12.0'} + peerDependencies: + tailwindcss: ^3.4.0 + + eslint-plugin-testing-library@6.5.0: + resolution: {integrity: sha512-Ls5TUfLm5/snocMAOlofSOJxNN0aKqwTlco7CrNtMjkTdQlkpSMaeTCDHCuXfzrI97xcx2rSCNeKeJjtpkNC1w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-unicorn@46.0.1: + resolution: {integrity: sha512-setGhMTiLAddg1asdwjZ3hekIN5zLznNa5zll7pBPwFOka6greCKDQydfqy4fqyUhndi74wpDzClSQMEcmOaew==} + engines: {node: '>=14.18'} + peerDependencies: + eslint: '>=8.28.0' + + eslint-plugin-unused-imports@2.0.0: + resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 + eslint: ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + + eslint-rule-composer@0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + event-target-shim@6.0.2: + resolution: {integrity: sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==} + engines: {node: '>=10.13.0'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + eventsource@2.0.2: + resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} + engines: {node: '>=12.0.0'} + + exec-async@2.2.0: + resolution: {integrity: sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==} + + execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + exif-parser@0.1.12: + resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} + + exit-hook@4.0.0: + resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==} + engines: {node: '>=18'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + expo-application@6.0.2: + resolution: {integrity: sha512-qcj6kGq3mc7x5yIb5KxESurFTJCoEKwNEL34RdPEvTB/xhl7SeVZlu05sZBqxB1V4Ryzq/LsCb7NHNfBbb3L7A==} + peerDependencies: + expo: '*' + + expo-asset@11.0.5: + resolution: {integrity: sha512-TL60LmMBGVzs3NQcO8ylWqBumMh4sx0lmeJsn7+9C88fylGDhyyVnKZ1PyTXo9CVDBkndutZx2JUEQWM9BaiXw==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' + + expo-build-properties@0.13.3: + resolution: {integrity: sha512-gw7AYP+YF50Gr912BedelRDTfR4GnUEn9p5s25g4nv0hTJGWpBZdCYR5/Oi2rmCHJXxBqhPjxzV7JRh72fntLg==} + peerDependencies: + expo: '*' + + expo-constants@17.0.8: + resolution: {integrity: sha512-XfWRyQAf1yUNgWZ1TnE8pFBMqGmFP5Gb+SFSgszxDdOoheB/NI5D4p7q86kI2fvGyfTrxAe+D+74nZkfsGvUlg==} + peerDependencies: + expo: '*' + react-native: '*' + + expo-dev-client@5.0.20: + resolution: {integrity: sha512-bLNkHdU7V3I4UefgJbJnIDUBUL0LxIal/xYEx9BbgDd3B7wgQKY//+BpPIxBOKCQ22lkyiHY8y9tLhO903sAgg==} + peerDependencies: + expo: '*' + + expo-dev-launcher@5.0.35: + resolution: {integrity: sha512-hEQr0ZREnUMxZ6wtQgfK1lzYnbb0zar3HqYZhmANzXmE6UEPbQ4GByLzhpfz/d+xxdBVQZsrHdtiV28KPG2sog==} + peerDependencies: + expo: '*' + + expo-dev-menu-interface@1.9.3: + resolution: {integrity: sha512-KY/dWTBE1l47i9V366JN5rC6YIdOc9hz8yAmZzkl5DrPia5l3M2WIjtnpHC9zUkNjiSiG2urYoOAq4H/uLdmyg==} + peerDependencies: + expo: '*' + + expo-dev-menu@6.0.25: + resolution: {integrity: sha512-K2m4z/I+CPWbMtHlDzU68lHaQs52De0v5gbsjAmA5ig8FrYh4MKZvPxSVANaiKENzgmtglu8qaFh7ua9Gt2TfA==} + peerDependencies: + expo: '*' + + expo-device@7.0.3: + resolution: {integrity: sha512-uNGhDYmpDj/3GySWZmRiYSt52Phdim11p0pXfgpCq/nMks0+UPZwl3D0vin5N8/gpVe5yzb13GYuFxiVoDyniw==} + peerDependencies: + expo: '*' + + expo-document-picker@13.0.3: + resolution: {integrity: sha512-348xcsiA/YhgWm1SuJNNdb5cUDpRJYCyIk8MhOU2MEDxbVRR+Q1TiUBTCIMVqaWHcxsFQzP56Wwv9n24qjeILg==} + peerDependencies: + expo: '*' + + expo-file-system@18.0.12: + resolution: {integrity: sha512-HAkrd/mb8r+G3lJ9MzmGeuW2B+BxQR1joKfeCyY4deLl1zoZ48FrAWjgZjHK9aHUVhJ0ehzInu/NQtikKytaeg==} + peerDependencies: + expo: '*' + react-native: '*' + + expo-font@13.0.4: + resolution: {integrity: sha512-eAP5hyBgC8gafFtprsz0HMaB795qZfgJWqTmU0NfbSin1wUuVySFMEPMOrTkTgmazU73v4Cb4x7p86jY1XXYUw==} + peerDependencies: + expo: '*' + react: '*' + + expo-image-loader@5.0.0: + resolution: {integrity: sha512-Eg+5FHtyzv3Jjw9dHwu2pWy4xjf8fu3V0Asyy42kO+t/FbvW/vjUixpTjPtgKQLQh+2/9Nk4JjFDV6FwCnF2ZA==} + peerDependencies: + expo: '*' + + expo-image-picker@16.0.6: + resolution: {integrity: sha512-HN4xZirFjsFDIsWFb12AZh19fRzuvZjj2ll17cGr19VNRP06S/VPQU3Tdccn5vwUzQhOBlLu704CnNm278boiQ==} + peerDependencies: + expo: '*' + + expo-image@2.0.7: + resolution: {integrity: sha512-kv40OIJOkItwznhdqFmKxTMC5O8GkpyTf8ng7Py4Hy6IBiH59dkeP6vUZQhzPhJOm5v1kZK4XldbskBosqzOug==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' + react-native-web: '*' + peerDependenciesMeta: + react-native-web: + optional: true + + expo-json-utils@0.14.0: + resolution: {integrity: sha512-xjGfK9dL0B1wLnOqNkX0jM9p48Y0I5xEPzHude28LY67UmamUyAACkqhZGaPClyPNfdzczk7Ej6WaRMT3HfXvw==} + + expo-keep-awake@14.0.3: + resolution: {integrity: sha512-6Jh94G6NvTZfuLnm2vwIpKe3GdOiVBuISl7FI8GqN0/9UOg9E0WXXp5cDcfAG8bn80RfgLJS8P7EPUGTZyOvhg==} + peerDependencies: + expo: '*' + react: '*' + + expo-linking@7.0.5: + resolution: {integrity: sha512-3KptlJtcYDPWohk0MfJU75MJFh2ybavbtcSd84zEPfw9s1q3hjimw3sXnH03ZxP54kiEWldvKmmnGcVffBDB1g==} + peerDependencies: + react: '*' + react-native: '*' + + expo-localization@16.0.1: + resolution: {integrity: sha512-kUrXiV/Pq9r7cG+TMt+Qa49IUQ9Y/czVwen4hmiboTclTopcWdIeCzYZv6JGtufoPpjEO9vVx1QJrXYl9V2u0Q==} + peerDependencies: + expo: '*' + react: '*' + + expo-location@18.0.10: + resolution: {integrity: sha512-R0Iioz0UZ9Ts8TACPngh8uDFbajJhVa5/igLqWB8Pq/gp8UHuwj7PC8XbZV7avsFoShYjaxrOhf4U7IONeKLgg==} + peerDependencies: + expo: '*' + + expo-manifests@0.15.8: + resolution: {integrity: sha512-VuIyaMfRfLZeETNsRohqhy1l7iZ7I+HKMPfZXVL2Yn17TT0WkOhZoq1DzYwPbOHPgp1Uk6phNa86EyaHrD2DLw==} + peerDependencies: + expo: '*' + + expo-modules-autolinking@2.0.8: + resolution: {integrity: sha512-DezgnEYFQYic8hKGhkbztBA3QUmSftjaNDIKNAtS2iGJmzCcNIkatjN2slFDSWjSTNo8gOvPQyMKfyHWFvLpOQ==} + hasBin: true + + expo-modules-core@2.2.3: + resolution: {integrity: sha512-01QqZzpP/wWlxnNly4G06MsOBUTbMDj02DQigZoXfDh80vd/rk3/uVXqnZgOdLSggTs6DnvOgAUy0H2q30XdUg==} + + expo-notifications@0.29.14: + resolution: {integrity: sha512-AVduNx9mKOgcAqBfrXS1OHC9VAQZrDQLbVbcorMjPDGXW7m0Q5Q+BG6FYM/saVviF2eO8fhQRsTT40yYv5/bhQ==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' + + expo-router@4.0.21: + resolution: {integrity: sha512-z1U9cGZbgL+ZSHp533VMobOqdkUpFBlDXBpd9/JH+Q0wW49is0G2PrJVUYMzdwr30HSUltdO/19W8rRwjfOnFw==} + peerDependencies: + '@react-navigation/drawer': ^7.1.1 + '@testing-library/jest-native': '*' + expo: '*' + expo-constants: ~17.0.8 + expo-linking: ~7.0.5 + react-native-reanimated: '*' + react-native-safe-area-context: '*' + react-native-screens: '*' + peerDependenciesMeta: + '@react-navigation/drawer': + optional: true + '@testing-library/jest-native': + optional: true + react-native-reanimated: + optional: true + + expo-screen-orientation@8.0.4: + resolution: {integrity: sha512-kJrIZ/44+Gs5D5nyP6SXqTUbJEOsRgzk+nUcKeVZ0Vmx0szGrvSvhzdus7853xT/sqyAARsqBMlx626jAMu/Jg==} + peerDependencies: + expo: '*' + react-native: '*' + + expo-sharing@13.0.1: + resolution: {integrity: sha512-qych3Nw65wlFcnzE/gRrsdtvmdV0uF4U4qVMZBJYPG90vYyWh2QM9rp1gVu0KWOBc7N8CC2dSVYn4/BXqJy6Xw==} + peerDependencies: + expo: '*' + + expo-splash-screen@0.29.24: + resolution: {integrity: sha512-k2rdjbb3Qeg4g104Sdz6+qXXYba8QgiuZRSxHX8IpsSYiiTU48BmCCGy12sN+O1B+sD1/+WPL4duCa1Fy6+Y4g==} + peerDependencies: + expo: '*' + + expo-status-bar@2.0.1: + resolution: {integrity: sha512-AkIPX7jWHRPp83UBZ1iXtVvyr0g+DgBVvIXTtlmPtmUsm8Vq9Bb5IGj86PW8osuFlgoTVAg7HI/+Ok7yEYwiRg==} + peerDependencies: + react: '*' + react-native: '*' + + expo-system-ui@4.0.9: + resolution: {integrity: sha512-hqBc0EWeK/BTB8i4H84vqNjje8GgxhapYrcWdg5qriaRA/u+bNNxhmpZXdAjFuhonOP4SmAbF+gjoJJWsTrhUg==} + peerDependencies: + expo: '*' + react-native: '*' + react-native-web: '*' + peerDependenciesMeta: + react-native-web: + optional: true + + expo-task-manager@12.0.6: + resolution: {integrity: sha512-yGbS64OL95z7tAQAvryy0sGHuQgrcpvnJsdyuGL8MA9bcPtr+kytLZ4dOCDac7foQS7+FLDGgtiAR6v/64B5Pg==} + peerDependencies: + expo: '*' + react-native: '*' + + expo-updates-interface@1.0.0: + resolution: {integrity: sha512-93oWtvULJOj+Pp+N/lpTcFfuREX1wNeHtp7Lwn8EbzYYmdn37MvZU3TPW2tYYCZuhzmKEXnUblYcruYoDu7IrQ==} + peerDependencies: + expo: '*' + + expo@52.0.46: + resolution: {integrity: sha512-JG89IVZLp7DWzgeiQb+0N43kWOF1DUm3esBvAS9cPFWZsM9x8nDXgbvtREcycDPA6E+yJsSC+086CigeUY6sVA==} + hasBin: true + peerDependencies: + '@expo/dom-webview': '*' + '@expo/metro-runtime': '*' + react: '*' + react-native: '*' + react-native-webview: '*' + peerDependenciesMeta: + '@expo/dom-webview': + optional: true + '@expo/metro-runtime': + optional: true + react-native-webview: + optional: true + + exponential-backoff@3.1.2: + resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-loops@1.1.4: + resolution: {integrity: sha512-8dbd3XWoKCTms18ize6JmQF1SFnnfj5s0B7rRry22EofgMu7B6LKHVh+XfFqFGsqnbH54xgeO83PzpKI+ODhlg==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fbemitter@3.0.0: + resolution: {integrity: sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==} + + fbjs-css-vars@1.0.2: + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + + fbjs@3.0.5: + resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fetch-cookie@2.2.0: + resolution: {integrity: sha512-h9AgfjURuCgA2+2ISl8GbavpUdR+WGAM2McW/ovn4tVccegp8ZqCKWSBR8uRdM8dDNlx5WdKRWxBYUwteLDCNQ==} + + fetch-retry@4.1.1: + resolution: {integrity: sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==} + + figures@1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-type@16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + filter-obj@1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + + finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + + find-babel-config@2.1.2: + resolution: {integrity: sha512-ZfZp1rQyp4gyuxqt1ZqjFGVeVBvmpURMqdIWXbPRfB97Bf6BzdK/xSIbylEINzQ0kB5tlDQfn9HkNXXWsqTqLg==} + + find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + + find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + + find-yarn-workspace-root@2.0.0: + resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + flow-enums-runtime@0.0.6: + resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} + + flow-parser@0.262.0: + resolution: {integrity: sha512-K3asSw4s2/sRoUC4xD2OfGi04gdYCCFRgkcwEXi5JyfFhS0HrFWLcDPp55ttv95OY5970WKl4T+7hWrnuOAUMQ==} + engines: {node: '>=0.4.0'} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + fontfaceobserver@2.3.0: + resolution: {integrity: sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data@3.0.3: + resolution: {integrity: sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==} + engines: {node: '>= 6'} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + framer-motion@6.5.1: + resolution: {integrity: sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==} + peerDependencies: + react: '>=16.8 || ^17.0.0 || ^18.0.0' + react-dom: '>=16.8 || ^17.0.0 || ^18.0.0' + + framesync@6.0.1: + resolution: {integrity: sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==} + + freeport-async@2.0.0: + resolution: {integrity: sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==} + engines: {node: '>=8'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.0.0: + resolution: {integrity: sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==} + engines: {node: '>=10'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs-minipass@3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + geojson-rbush@3.2.0: + resolution: {integrity: sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==} + + geojson-vt@4.0.2: + resolution: {integrity: sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-port@3.2.0: + resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} + engines: {node: '>=4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + + getenv@1.0.0: + resolution: {integrity: sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==} + engines: {node: '>=6'} + + gifwrap@0.10.1: + resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} + + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true + + github-url-from-git@1.5.0: + resolution: {integrity: sha512-WWOec4aRI7YAykQ9+BHmzjyNlkfJFG8QLXnDTsLz/kZefq7qkzdfo4p6fkYYMIq1aj+gZcQs/1HQhQh3DPPxlQ==} + + gl-matrix@3.4.3: + resolution: {integrity: sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + grid-index@1.1.0: + resolution: {integrity: sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==} + + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hermes-estree@0.20.1: + resolution: {integrity: sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==} + + hermes-estree@0.23.1: + resolution: {integrity: sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==} + + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.20.1: + resolution: {integrity: sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==} + + hermes-parser@0.23.1: + resolution: {integrity: sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + + hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + hosted-git-info@8.0.2: + resolution: {integrity: sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==} + engines: {node: ^18.17.0 || >=20.5.0} + + html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-parse-stringify@3.0.1: + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + hyphenate-style-name@1.1.0: + resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} + + i18next@23.16.8: + resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-walk@7.0.0: + resolution: {integrity: sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.3: + resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} + engines: {node: '>= 4'} + + image-q@4.0.0: + resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} + + image-size@1.2.0: + resolution: {integrity: sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==} + engines: {node: '>=16.x'} + hasBin: true + + import-fresh@2.0.0: + resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} + engines: {node: '>=4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@3.2.0: + resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==} + engines: {node: '>=4'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + index-to-position@0.1.2: + resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} + engines: {node: '>=18'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + inline-style-prefixer@6.0.4: + resolution: {integrity: sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==} + + inquirer-autosubmit-prompt@0.2.0: + resolution: {integrity: sha512-mzNrusCk5L6kSzlN0Ioddn8yzrhYNLli+Sn2ZxMuLechMYAzakiFCIULxsxlQb5YKzthLGfrFACcWoAvM7p04Q==} + + inquirer@12.4.2: + resolution: {integrity: sha512-reyjHcwyK2LObXgTJH4T1Dpfhwu88LNPTZmg/KenmTsy3T8lN/kZT8Oo7UwwkB9q8+ss2qjjN7GV8oFAfyz9Xg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + inquirer@6.5.2: + resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} + engines: {node: '>=6.0.0'} + + inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + + internal-ip@4.3.0: + resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} + engines: {node: '>=6'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + intl-messageformat@10.7.15: + resolution: {integrity: sha512-LRyExsEsefQSBjU2p47oAheoKz+EOJxSLDdjOaEjdriajfHsMXOmV/EhMvYSg9bAgCUHasuAC+mcUBe/95PfIg==} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + ip-regex@2.1.0: + resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} + engines: {node: '>=4'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + irregular-plurals@1.4.0: + resolution: {integrity: sha512-kniTIJmaZYiwa17eTtWIfm0K342seyugl6vuC8DiiyiRAJWAVlLkqGCI0Im0neo0TkXw+pRcKaBPRdcKHnQJ6Q==} + engines: {node: '>=0.10.0'} + + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-bun-module@1.3.0: + resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-directory@0.3.1: + resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==} + engines: {node: '>=0.10.0'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-in-ci@1.0.0: + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} + engines: {node: '>=18'} + hasBin: true + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-installed-globally@1.0.0: + resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} + engines: {node: '>=18'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-npm@6.0.0: + resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-observable@1.1.0: + resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==} + engines: {node: '>=4'} + + is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + + is-path-cwd@3.0.0: + resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-scoped@3.0.0: + resolution: {integrity: sha512-ezxLUq30kiTvP0w/5n9tj4qTOKlrA07Oty1hwTQ+lcqw11x6uc8sp7VRb2OVGRzKfCHZ2A22T5Zsau/Q2Akb0g==} + engines: {node: '>=12'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-url-superb@6.1.0: + resolution: {integrity: sha512-LXdhGlYqUPdvEyIhWPEEwYYK3yrUiPcBjmFGlZNv1u5GtIL5qQRf7ddDyPNAvsMFqdzS923FROpTQU97tLe3JQ==} + engines: {node: '>=12'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + isomorphic-fetch@3.0.0: + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + + issue-regex@4.3.0: + resolution: {integrity: sha512-7731a/t2llyrk8Hdwl1x3LkhIFGzxHQGpJA7Ur9cIRViakQF2y25Lwhx8Ziy1B068+kBYUmYPBzw5uo3DdWrdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + iterate-iterator@1.0.2: + resolution: {integrity: sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==} + + iterate-value@1.0.2: + resolution: {integrity: sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@22.4.3: + resolution: {integrity: sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==} + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-jsdom@29.7.0: + resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-expo@52.0.6: + resolution: {integrity: sha512-Ql60mCy4cfwyNvCW2wpEXbw/3i5H+SmB1XP1z0SJUpafGBipq6xMjPcgQpe/7PzAHTc/ikD+dFA0sPnljDJmZQ==} + hasBin: true + peerDependencies: + expo: '*' + react-native: '*' + + jest-get-type@22.4.3: + resolution: {integrity: sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-junit@16.0.0: + resolution: {integrity: sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==} + engines: {node: '>=10.12.0'} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watch-select-projects@2.0.0: + resolution: {integrity: sha512-j00nW4dXc2NiCW6znXgFLF9g8PJ0zP25cpQ1xRro/HU2GBfZQFZD0SoXnAlaoKkIY4MlfTMkKGbNXFpvCdjl1w==} + + jest-watch-typeahead@2.2.1: + resolution: {integrity: sha512-jYpYmUnTzysmVnwq49TAxlmtOAwp8QIqvZyoofQFn8fiWhEDZj33ZXzg3JA4nGnzWFm1hbWf3ADpteUokvXgFA==} + engines: {node: ^14.17.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + jest: ^27.0.0 || ^28.0.0 || ^29.0.0 + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jimp-compact@0.16.1: + resolution: {integrity: sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==} + + jimp@0.22.12: + resolution: {integrity: sha512-R5jZaYDnfkxKJy1dwLpj/7cvyjxiclxU3F4TrI/J4j2rS0niq6YDUMoPn5hs8GDpO+OZGo7Ky057CRtWesyhfg==} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + join-component@1.1.0: + resolution: {integrity: sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==} + + jpeg-js@0.4.4: + resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsc-android@250231.0.0: + resolution: {integrity: sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==} + + jsc-safe-url@0.2.4: + resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} + + jscodeshift@0.14.0: + resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} + hasBin: true + peerDependencies: + '@babel/preset-env': ^7.1.6 + + jsdom@20.0.3: + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stable-stringify@1.2.1: + resolution: {integrity: sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA==} + engines: {node: '>= 0.4'} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + kdbush@4.0.2: + resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + klaw-sync@6.0.0: + resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + ky@1.7.5: + resolution: {integrity: sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA==} + engines: {node: '>=18'} + + latest-version@9.0.0: + resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} + engines: {node: '>=18'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lighthouse-logger@1.4.2: + resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + + lightningcss-darwin-arm64@1.27.0: + resolution: {integrity: sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-arm64@1.29.1: + resolution: {integrity: sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.27.0: + resolution: {integrity: sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-darwin-x64@1.29.1: + resolution: {integrity: sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.27.0: + resolution: {integrity: sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-freebsd-x64@1.29.1: + resolution: {integrity: sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.27.0: + resolution: {integrity: sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm-gnueabihf@1.29.1: + resolution: {integrity: sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.27.0: + resolution: {integrity: sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-gnu@1.29.1: + resolution: {integrity: sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.27.0: + resolution: {integrity: sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.29.1: + resolution: {integrity: sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.27.0: + resolution: {integrity: sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-gnu@1.29.1: + resolution: {integrity: sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.27.0: + resolution: {integrity: sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.29.1: + resolution: {integrity: sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.27.0: + resolution: {integrity: sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-arm64-msvc@1.29.1: + resolution: {integrity: sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.27.0: + resolution: {integrity: sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss-win32-x64-msvc@1.29.1: + resolution: {integrity: sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.27.0: + resolution: {integrity: sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==} + engines: {node: '>= 12.0.0'} + + lightningcss@1.29.1: + resolution: {integrity: sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==} + engines: {node: '>= 12.0.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lint-staged@15.4.3: + resolution: {integrity: sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==} + engines: {node: '>=18.12.0'} + hasBin: true + + listr-input@0.2.1: + resolution: {integrity: sha512-oa8iVG870qJq+OuuMK3DjGqFcwsK1SDu+kULp9kEq09TY231aideIZenr3lFOQdASpAr6asuyJBbX62/a3IIhg==} + engines: {node: '>=6'} + + listr-silent-renderer@1.1.1: + resolution: {integrity: sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==} + engines: {node: '>=4'} + + listr-update-renderer@0.5.0: + resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==} + engines: {node: '>=6'} + peerDependencies: + listr: ^0.14.2 + + listr-verbose-renderer@0.5.0: + resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==} + engines: {node: '>=4'} + + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + engines: {node: '>=18.0.0'} + + listr@0.14.3: + resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==} + engines: {node: '>=6'} + + livekit-client@2.11.4: + resolution: {integrity: sha512-V82NdyhHo3iBxxQmPTk95Fe2+VZMABWZL56t9oZmMgycoF8li8gs/KG7yyDsKki50EeKLgwOmlwqx/Xf0pc0+Q==} + + load-bmfont@1.4.2: + resolution: {integrity: sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + lodash.zip@4.2.0: + resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@1.0.2: + resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==} + engines: {node: '>=0.10.0'} + + log-symbols@2.2.0: + resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} + engines: {node: '>=4'} + + log-symbols@7.0.0: + resolution: {integrity: sha512-zrc91EDk2M+2AXo/9BTvK91pqb7qrPg2nX/Hy+u8a5qQlbaOflCKO+6SqgZ+M+xUFxGdKTgwnGiL96b1W3ikRA==} + engines: {node: '>=18'} + + log-update@2.3.0: + resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==} + engines: {node: '>=4'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + loglevel@1.9.1: + resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==} + engines: {node: '>= 0.6.0'} + + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lucide-react-native@0.475.0: + resolution: {integrity: sha512-V5tho5qQ89GD4qdzL07ZyXdrnpXZFLirGfaG6BB2vKhO6X1iA7UYYqntgBQ//ZuTUEdevskl+dVT5O4A9oOJUg==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + react-native: '*' + react-native-svg: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + mapbox-gl@3.10.0: + resolution: {integrity: sha512-YnQxjlthuv/tidcxGYU2C8nRDVXMlAHa3qFhuOJeX4AfRP72OMRBf9ApL+M+k5VWcAXi2fcNOUVgphknjLumjA==} + + marky@1.2.5: + resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + md5-file@3.2.3: + resolution: {integrity: sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==} + engines: {node: '>=0.10'} + hasBin: true + + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + metro-babel-transformer@0.81.2: + resolution: {integrity: sha512-Xn9JgF+CghIcDI6VTtGZFIxl7fPifePIX7mAkJ4/h8wtD9VAJsja6ymXgQ4Mftei2JOMEfCog0MYs4Us43/v8Q==} + engines: {node: '>=18.18'} + + metro-cache-key@0.81.2: + resolution: {integrity: sha512-+D5ySTFvvtWp1Med1ZWnEFqi8/nl8piFkTk6NFZbtCLGmNJIQhUtIW+i5foQ4YN9Mz1XARFn89652+jkRkXKhA==} + engines: {node: '>=18.18'} + + metro-cache@0.81.2: + resolution: {integrity: sha512-z07UNa4UjJ35LnQhDGrGk/qryRY3ERkYwvzkzYUpwpKZUGqWI5HnOurYzSuQSSxADV+s/NSLSFAB1yzdK8tluQ==} + engines: {node: '>=18.18'} + + metro-config@0.81.2: + resolution: {integrity: sha512-CzRiGh0XNANORfGB9REZ0PcpLxehWLmDgSE7XN59uAxhY0qOXccGG81J1WfkeT2zO1B/UoDWHDT5cPP1w7E3cQ==} + engines: {node: '>=18.18'} + + metro-core@0.81.2: + resolution: {integrity: sha512-OHWL/NiILmsuAkj90GNIJBMbcRCIcJ7piyT17B2EFWR2F/L1Jny7Dq7NCgWeqqRueLH7ystXUdrfcM8bKeMp8Q==} + engines: {node: '>=18.18'} + + metro-file-map@0.81.2: + resolution: {integrity: sha512-k8binQShV1vzMB2rIPMlnf267ZSq78+L42vH9Y3YzmhIfumAz8Noy3ndG7zKdvOLcMjlOxzBChu1Laz3s5cgIw==} + engines: {node: '>=18.18'} + + metro-minify-terser@0.81.2: + resolution: {integrity: sha512-GWjm6ZcNMnOFyh7hjzNfAEnOqZiHYTVIKGmB/zDNMf/Eq89w6rxHXZRM41iu1YyP2IhdqrqnhwHA+Ze8v6CMtg==} + engines: {node: '>=18.18'} + + metro-resolver@0.81.2: + resolution: {integrity: sha512-bu4Esd90SWkOhDADQsQTxIOG85sZnvAXtk51hT0aovN66M4x3rQmGPBRokfJpgAd3/XOZCu0KPbjoB5etyqT0Q==} + engines: {node: '>=18.18'} + + metro-runtime@0.81.2: + resolution: {integrity: sha512-xk3rU6yKaa2b8B/Hk/ZhPtNzW4H07h/yq9iKBCof0F68CaN+qncdVOOIz2NGqEH7V3wAqDv4xoOfbgtbFO5rxA==} + engines: {node: '>=18.18'} + + metro-source-map@0.81.2: + resolution: {integrity: sha512-/mJYbZIGswFbfxt0ouaBYw22YvqQiaCB+ql8reeA37bNjd4lHvozND7/w8NO2x7FjTfsmPBh50Iqi/mTuZFiZA==} + engines: {node: '>=18.18'} + + metro-symbolicate@0.81.2: + resolution: {integrity: sha512-jEZoh3XldJazigetID+4Sy41OszGdixEOvB8zI0v2k7sXgHh+Rw8J/R7UuYCxQp+f89MqCjeGLLN7qNHuvRSCQ==} + engines: {node: '>=18.18'} + hasBin: true + + metro-transform-plugins@0.81.2: + resolution: {integrity: sha512-St1zsbZ4SWA48yJBIqUuMFR4GROyu7A8auhJl/5km/Pj09vGXEri2CgOD0ReuXa/P1X9/jrOU5cIafi5csjwvw==} + engines: {node: '>=18.18'} + + metro-transform-worker@0.81.2: + resolution: {integrity: sha512-U1kmzJEExrB6SZN9TLxuFCZPdCq5+ofkWBiVn6U/9YxTft6HzXGNN0ebdL2Yut5ry3oaYmOtR26faKAOGiiG0Q==} + engines: {node: '>=18.18'} + + metro@0.81.2: + resolution: {integrity: sha512-3jvcYBmSEFWtXJC3BX9/pKyme0gEyrZfHuDvuZiS46+3u8rcNlk0bjnGS/qxIW/h8icyVuQRaoH/Q1VdQJHvuQ==} + engines: {node: '>=18.18'} + hasBin: true + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@1.2.0: + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} + engines: {node: '>=4'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass-collect@2.0.1: + resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + moti@0.29.0: + resolution: {integrity: sha512-o/blVE3lm0i/6E5X0RLK59SVWEGxo7pQh8dTm+JykVCYY9bcz0lWyZFCO1s+MMNq+nMsSZBX8lkp4im/AZmhyw==} + peerDependencies: + react-native-reanimated: '*' + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + murmurhash-js@1.0.0: + resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} + + mute-stream@0.0.7: + resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nativewind@4.1.23: + resolution: {integrity: sha512-oLX3suGI6ojQqWxdQezOSM5GmJ4KvMnMtmaSMN9Ggb5j7ysFt4nHxb1xs8RDjZR7BWc+bsetNJU8IQdQMHqRpg==} + engines: {node: '>=16'} + peerDependencies: + tailwindcss: '>3.3.0' + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + nested-error-stacks@2.0.1: + resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==} + + new-github-release-url@2.0.0: + resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + node-dir@0.1.17: + resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} + engines: {node: '>= 0.10.5'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + np@10.2.0: + resolution: {integrity: sha512-7Pwk8qcsks2c9ETS35aeJSON6uJAbOsx7TwTFzZNUGgH4djT+Yt/p9S7PZuqH5pkcpNUhasne3cDRBzaUtvetg==} + engines: {bun: '>=1', git: '>=2.11.0', node: '>=18', npm: '>=9', pnpm: '>=8', yarn: '>=1.7.0'} + hasBin: true + + npm-name@8.0.0: + resolution: {integrity: sha512-DIuCGcKYYhASAZW6Xh/tiaGMko8IHOHe0n3zOA7SzTi0Yvy00x8L7sa5yNiZ75Ny58O/KeRtNouy8Ut6gPbKiw==} + engines: {node: '>=18'} + + npm-package-arg@11.0.3: + resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} + engines: {node: ^16.14.0 || >=18.0.0} + + npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + + number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + + nwsapi@2.2.16: + resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} + + ob1@0.81.2: + resolution: {integrity: sha512-K0hJXOlU4j7c4chNLaDDzVyg5yjYjbmDSQbVMXdAcTtqZndwYHfmBIO06riFMgpg2KOevxeB1pIwzqJuES2SuA==} + engines: {node: '>=18.18'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + omggif@1.0.10: + resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} + + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@2.0.1: + resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} + engines: {node: '>=4'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@3.4.0: + resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==} + engines: {node: '>=6'} + + org-regex@1.0.0: + resolution: {integrity: sha512-7bqkxkEJwzJQUAlyYniqEZ3Ilzjh0yoa62c7gL6Ijxj5bEpPL+8IE1Z0PFj0ywjjXQcdrwR51g9MIcLezR0hKQ==} + engines: {node: '>=8'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + + p-memoize@7.1.1: + resolution: {integrity: sha512-DZ/bONJILHkQ721hSr/E9wMz5Am/OTJ9P6LhLFo2Tu+jL8044tgc9LwHO8g4PiaYePnlVVRAJcKmgy8J9MVFrA==} + engines: {node: '>=14.16'} + + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-json@10.0.1: + resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} + engines: {node: '>=18'} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-bmfont-ascii@1.0.6: + resolution: {integrity: sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==} + + parse-bmfont-binary@1.0.6: + resolution: {integrity: sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==} + + parse-bmfont-xml@1.1.6: + resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} + + parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-json@8.1.0: + resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} + engines: {node: '>=18'} + + parse-png@2.1.0: + resolution: {integrity: sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==} + engines: {node: '>=10'} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + password-prompt@1.1.3: + resolution: {integrity: sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==} + + patch-package@8.0.0: + resolution: {integrity: sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==} + engines: {node: '>=14', npm: '>5'} + hasBin: true + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + + pbf@3.3.0: + resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} + hasBin: true + + peek-readable@4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + + phin@3.7.1: + resolution: {integrity: sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==} + engines: {node: '>= 8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@3.0.1: + resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} + engines: {node: '>=10'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pixelmatch@4.0.2: + resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} + hasBin: true + + pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-dir@8.0.0: + resolution: {integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==} + engines: {node: '>=18'} + + pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + + plist@3.1.0: + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} + + plur@2.1.2: + resolution: {integrity: sha512-WhcHk576xg9y/iv6RWOuroZgsqvCbJN+XGvAypCJwLAYs2iWDp5LUmvaCdV6JR2O0SMBf8l6p7A94AyLCFVMlQ==} + engines: {node: '>=0.10.0'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + pngjs@3.4.0: + resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} + engines: {node: '>=4.0.0'} + + pngjs@6.0.0: + resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} + engines: {node: '>=12.13.0'} + + popmotion@11.0.3: + resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + posthog-react-native@3.13.0: + resolution: {integrity: sha512-gAFw3JPPJlGm+JxecEGVtquiDqHcBI1sqSepEoa0ZPKs/KhjnluaNLCQFXOQ49vGbY8rtkLZI3WeQRcySvnNLw==} + peerDependencies: + '@react-native-async-storage/async-storage': '>=1.0.0' + '@react-navigation/native': '>= 5.0.0' + expo-application: '>= 4.0.0' + expo-device: '>= 4.0.0' + expo-file-system: '>= 13.0.0' + expo-localization: '>= 11.0.0' + posthog-react-native-session-replay: '>= 1.0.0' + react-native-device-info: '>= 10.0.0' + react-native-localize: '>= 3.0.0' + react-native-navigation: '>= 6.0.0' + react-native-safe-area-context: '>= 4.0.0' + react-native-svg: '>= 15.0.0' + peerDependenciesMeta: + '@react-native-async-storage/async-storage': + optional: true + '@react-navigation/native': + optional: true + expo-application: + optional: true + expo-device: + optional: true + expo-file-system: + optional: true + expo-localization: + optional: true + posthog-react-native-session-replay: + optional: true + react-native-device-info: + optional: true + react-native-localize: + optional: true + react-native-navigation: + optional: true + react-native-safe-area-context: + optional: true + + potpack@2.0.0: + resolution: {integrity: sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.5.2: + resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==} + engines: {node: '>=14'} + hasBin: true + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-format@22.4.3: + resolution: {integrity: sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + promise.allsettled@1.0.7: + resolution: {integrity: sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA==} + engines: {node: '>= 0.4'} + + promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + + promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + protocol-buffers-schema@3.6.0: + resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pupa@3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + qrcode-terminal@0.11.0: + resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==} + hasBin: true + + query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + queue@6.0.2: + resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + + quickselect@2.0.0: + resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} + + quickselect@3.0.0: + resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + rbush@3.0.1: + resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-devtools-core@5.3.2: + resolution: {integrity: sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-error-boundary@4.1.2: + resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==} + peerDependencies: + react: '>=16.13.1' + + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-freeze@1.0.4: + resolution: {integrity: sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==} + engines: {node: '>=10'} + peerDependencies: + react: '>=17.0.0' + + react-helmet-async@1.3.0: + resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 + + react-hook-form@7.54.2: + resolution: {integrity: sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + + react-i18next@15.4.1: + resolution: {integrity: sha512-ahGab+IaSgZmNPYXdV1n+OYky95TGpFwnKRflX/16dY04DsYYKHtVLjeny7sBSCREEcoMbAgSkFiGLF5g5Oofw==} + peerDependencies: + i18next: '>= 23.2.3' + react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-native-base64@0.2.1: + resolution: {integrity: sha512-eHgt/MA8y5ZF0aHfZ1aTPcIkDWxza9AaEk4GcpIX+ZYfZ04RcaNahO+527KR7J44/mD3efYfM23O2C1N44ByWA==} + + react-native-css-interop@0.1.22: + resolution: {integrity: sha512-Mu01e+H9G+fxSWvwtgWlF5MJBJC4VszTCBXopIpeR171lbeBInHb8aHqoqRPxmJpi3xIHryzqKFOJYAdk7PBxg==} + engines: {node: '>=18'} + peerDependencies: + react: '>=18' + react-native: '*' + react-native-reanimated: '>=3.6.2' + react-native-safe-area-context: '*' + react-native-svg: '*' + tailwindcss: ~3 + peerDependenciesMeta: + react-native-safe-area-context: + optional: true + react-native-svg: + optional: true + + react-native-edge-to-edge@1.4.3: + resolution: {integrity: sha512-fYchwiQ2D/8NzcvJK1sD9Cm25GFQfsLgYmGpohoSpRxwBwR5UCL0wUf4scoQgYncRh9Hmc2t8ml/sikTwMM3ng==} + peerDependencies: + react: '>=18.2.0' + react-native: '>=0.74.0' + + react-native-flash-message@0.4.2: + resolution: {integrity: sha512-YvdXRW9AGMTI99S3DJZhLO0mbk/ehKv/UQf4/Df+3dtGi8DlkidRbyqCQZk1WMtZ7rN85PMTGr/xEI9CF9z0YA==} + peerDependencies: + prop-types: ^15.0 || ^16.0 + react: '*' + react-native: '*' + + react-native-gesture-handler@2.20.2: + resolution: {integrity: sha512-HqzFpFczV4qCnwKlvSAvpzEXisL+Z9fsR08YV5LfJDkzuArMhBu2sOoSPUF/K62PCoAb+ObGlTC83TKHfUd0vg==} + peerDependencies: + react: '*' + react-native: '*' + + react-native-helmet-async@2.0.4: + resolution: {integrity: sha512-m3CkXWss6B1dd6mCMleLpzDCJJGGaHOLQsUzZv8kAASJmMfmVT4d2fx375iXKTRWT25ThBfae3dECuX5cq/8hg==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 || ^18.0.0 + + react-native-iphone-screen-helper@2.1.2: + resolution: {integrity: sha512-xczoNSb582bPW9na9f5ASlJ19vn/JBJ/jPzZ8f+u06F3tCa23dOIml7d4tHmbHdmVaWqf6tgRc95+tyavWg4Fw==} + peerDependencies: + react-native: '>=0.42.0' + + react-native-is-edge-to-edge@1.1.6: + resolution: {integrity: sha512-1pHnFTlBahins6UAajXUqeCOHew9l9C2C8tErnpGC3IyLJzvxD+TpYAixnCbrVS52f7+NvMttbiSI290XfwN0w==} + peerDependencies: + react: '>=18.2.0' + react-native: '>=0.73.0' + + react-native-keyboard-controller@1.16.6: + resolution: {integrity: sha512-3MeJKtF2eBv3+HXM1rbZqWaOGpJEYxVY8ThOpCPCa6R703Dmb069LsZ08M3ATaHZH2yqNvp/bQCo7P7I4Qqomg==} + peerDependencies: + react: '*' + react-native: '*' + react-native-reanimated: '>=3.0.0' + + react-native-logs@5.3.0: + resolution: {integrity: sha512-tq4S0JFy06ggu1D/udYeV80qPy5koURNNcKrVJmv0Hf3x44akysctaE4ARybD5Pv7MnFD8fP1VFhycSLjqXHQw==} + + react-native-mmkv@3.1.0: + resolution: {integrity: sha512-HDh89nYVSufHMweZ3TVNUHQp2lsEh1ApaoV08bUOU1nrlmGgC3I7tGUn1Uy40Hs7yRMPKx5NWKE5Dh86jTVrwg==} + peerDependencies: + react: '*' + react-native: '*' + + react-native-reanimated@3.16.7: + resolution: {integrity: sha512-qoUUQOwE1pHlmQ9cXTJ2MX9FQ9eHllopCLiWOkDkp6CER95ZWeXhJCP4cSm6AD4jigL5jHcZf/SkWrg8ttZUsw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + react: '*' + react-native: '*' + + react-native-restart@0.0.27: + resolution: {integrity: sha512-8KScVICrXwcTSJ1rjWkqVTHyEKQIttm5AIMGSK1QG1+RS5owYlE4z/1DykOTdWfVl9l16FIk0w9Xzk9ZO6jxlA==} + peerDependencies: + react: '*' + react-native: '*' + + react-native-safe-area-context@4.12.0: + resolution: {integrity: sha512-ukk5PxcF4p3yu6qMZcmeiZgowhb5AsKRnil54YFUUAXVIS7PJcMHGGC+q44fCiBg44/1AJk5njGMez1m9H0BVQ==} + peerDependencies: + react: '*' + react-native: '*' + + react-native-screens@4.4.0: + resolution: {integrity: sha512-c7zc7Zwjty6/pGyuuvh9gK3YBYqHPOxrhXfG1lF4gHlojQSmIx2piNbNaV+Uykj+RDTmFXK0e/hA+fucw/Qozg==} + peerDependencies: + react: '*' + react-native: '*' + + react-native-svg@15.8.0: + resolution: {integrity: sha512-KHJzKpgOjwj1qeZzsBjxNdoIgv2zNCO9fVcoq2TEhTRsVV5DGTZ9JzUZwybd7q4giT/H3RdtqC3u44dWdO0Ffw==} + peerDependencies: + react: '*' + react-native: '*' + + react-native-system-setting@1.7.6: + resolution: {integrity: sha512-nBnIK5Xnyu8XRRA3BMzRI54oYlSBKc0oOTQdZOCEeOvn4ltS1nk2shj/vtMQe6khXvuhai3vIc+g7DcsOcr5+w==} + + react-native-url-polyfill@1.3.0: + resolution: {integrity: sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ==} + peerDependencies: + react-native: '*' + + react-native-web@0.19.13: + resolution: {integrity: sha512-etv3bN8rJglrRCp/uL4p7l8QvUNUC++QwDbdZ8CB7BvZiMvsxfFIRM1j04vxNldG3uo2puRd6OSWR3ibtmc29A==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + + react-native-webview@13.12.5: + resolution: {integrity: sha512-INOKPom4dFyzkbxbkuQNfeRG9/iYnyRDzrDkJeyvSWgJAW2IDdJkWFJBS2v0RxIL4gqLgHkiIZDOfiLaNnw83Q==} + peerDependencies: + react: '*' + react-native: '*' + + react-native@0.76.9: + resolution: {integrity: sha512-+LRwecWmTDco7OweGsrECIqJu0iyrREd6CTCgC/uLLYipiHvk+MH9nd6drFtCw/6Blz6eoKTcH9YTTJusNtrWg==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@types/react': ^18.2.6 + react: ^18.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-query-kit@3.3.1: + resolution: {integrity: sha512-7eMfpqm+vHiHSTKMye08I7xuNwCnJfeehtMLJvrL/caS/41qSOG25jD3UP255eg8De1eU/KDeAq3jDnAMIBE8Q==} + peerDependencies: + '@tanstack/react-query': '*' + peerDependenciesMeta: + '@tanstack/react-query': + optional: true + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-server-dom-webpack@19.0.0-rc-6230622a1a-20240610: + resolution: {integrity: sha512-nr+IsOVD07QdeCr4BLvR5TALfLaZLi9AIaoa6vXymBc051iDPWedJujYYrjRJy5+9jp9oCx3G8Tt/Bs//TckJw==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: 19.0.0-rc-6230622a1a-20240610 + react-dom: 19.0.0-rc-6230622a1a-20240610 + webpack: ^5.59.0 + + react-shallow-renderer@16.15.0: + resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + + react-stately@3.35.0: + resolution: {integrity: sha512-1BH21J/TOHpyZe7c+f1BU2bnRWaBDTjLH0WdBuzNfPOXu7RBG3ebPIRvqd7UkPaVfIcol2QJnxe8S0a314JWKA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + react-test-renderer@18.3.1: + resolution: {integrity: sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==} + peerDependencies: + react: ^18.3.1 + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} + engines: {node: '>=18'} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readable-web-to-node-stream@3.0.4: + resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} + engines: {node: '>=8'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readline@1.3.0: + resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} + + recast@0.21.5: + resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} + engines: {node: '>= 4'} + + recyclerlistview@4.2.1: + resolution: {integrity: sha512-NtVYjofwgUCt1rEsTp6jHQg/47TWjnO92TU2kTVgJ9wsc/ely4HnizHHa+f/dI7qaw4+zcSogElrLjhMltN2/g==} + peerDependencies: + react: '>= 15.2.1' + react-native: '>= 0.30.0' + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + + registry-auth-token@5.1.0: + resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + + regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + + remove-trailing-slash@0.1.1: + resolution: {integrity: sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requireg@0.2.2: + resolution: {integrity: sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==} + engines: {node: '>= 4.0.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + reselect@4.1.8: + resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve-protobuf-schema@2.1.0: + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} + + resolve-workspace-root@2.0.0: + resolution: {integrity: sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw==} + + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@1.7.1: + resolution: {integrity: sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==} + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + restore-cursor@2.0.0: + resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} + engines: {node: '>=4'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rtl-detect@1.1.2: + resolution: {integrity: sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==} + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-regex@2.1.1: + resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + scheduler@0.24.0-canary-efb381bbf-20230505: + resolution: {integrity: sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==} + + schema-utils@4.3.2: + resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} + engines: {node: '>= 10.13.0'} + + scoped-regex@3.0.0: + resolution: {integrity: sha512-yEsN6TuxZhZ1Tl9iB81frTNS292m0I/IG7+w8lTvfcJQP2x3vnpOoevjBoE3Np5A6KnZM2+RtVenihj9t6NiYg==} + engines: {node: '>=12'} + + sdp-transform@2.15.0: + resolution: {integrity: sha512-KrOH82c/W+GYQ0LHqtr3caRpM3ITglq3ljGUIb8LTki7ByacJZ9z+piSGiwZDsRyhQbYBOBJgr2k6X4BZXi3Kw==} + hasBin: true + + sdp@3.2.0: + resolution: {integrity: sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==} + + selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + send@0.19.1: + resolution: {integrity: sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==} + engines: {node: '>= 0.8.0'} + + serialize-error@2.1.0: + resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==} + engines: {node: '>=0.10.0'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serialize-to-js@3.1.2: + resolution: {integrity: sha512-owllqNuDDEimQat7EPG0tH7JjO090xKNzUtYz6X+Sk2BXDnOCilDdNLwjWeFywG9xkJul1ULvtUQa9O4pUaY0w==} + engines: {node: '>=4.0.0'} + + seroval-plugins@1.2.1: + resolution: {integrity: sha512-H5vs53+39+x4Udwp4J5rNZfgFuA+Lt+uU+09w1gYBVWomtAl98B+E9w7yC05Xc81/HgLvJdlyqJbU0fJCKCmdw==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + + seroval@1.2.1: + resolution: {integrity: sha512-yBxFFs3zmkvKNmR0pFSU//rIsYjuX418TnlDmc2weaq5XFDqDIV/NOMPBoLrbxjLH42p4UzRuXHryXh9dYcKcw==} + engines: {node: '>=10'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + server-only@0.0.1: + resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-plist@1.3.1: + resolution: {integrity: sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@0.0.4: + resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==} + engines: {node: '>=0.10.0'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + slugify@1.6.6: + resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} + engines: {node: '>=8.0.0'} + + socket.io-client@4.7.2: + resolution: {integrity: sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==} + engines: {node: '>=10.0.0'} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + solid-floating-ui@0.3.1: + resolution: {integrity: sha512-o/QmGsWPS2Z3KidAxP0nDvN7alI7Kqy0kU+wd85Fz+au5SYcnYm7I6Fk3M60Za35azsPX0U+5fEtqfOuk6Ao0Q==} + engines: {node: '>=10'} + peerDependencies: + '@floating-ui/dom': ^1.5 + solid-js: ^1.8 + + solid-js@1.9.5: + resolution: {integrity: sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw==} + + solid-motionone@1.0.3: + resolution: {integrity: sha512-C1XGpbKz7klrYwYPI75X0TJdIIJWMslLPUIgnu9a0jXqN6TWA65+EByBkhVarZeBfNjVg3+uOrIRFewqZkjuFA==} + engines: {node: '>=20', pnpm: '>=9.0.0'} + peerDependencies: + solid-js: ^1.8.0 + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.5.6: + resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} + engines: {node: '>=0.10.0'} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + + split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + split@1.0.1: + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + ssri@10.0.6: + resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + + stack-generator@2.0.10: + resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + + stacktrace-gps@3.1.2: + resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} + + stacktrace-js@2.0.2: + resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} + + stacktrace-parser@0.1.11: + resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==} + engines: {node: '>=6'} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + stream-buffers@2.2.0: + resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} + engines: {node: '>= 0.10.0'} + + strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-length@5.0.1: + resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} + engines: {node: '>=12.20'} + + string-width@1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + + string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + + strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strtok3@6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + + structured-headers@0.4.1: + resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==} + + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + + style-value-types@5.0.0: + resolution: {integrity: sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==} + + styleq@0.1.3: + resolution: {integrity: sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + sudo-prompt@8.2.5: + resolution: {integrity: sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + sudo-prompt@9.1.1: + resolution: {integrity: sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + supercluster@8.0.1: + resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} + + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + symbol-observable@1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} + + symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + + tailwind-merge@1.14.0: + resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} + + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + + tailwind-variants@0.1.20: + resolution: {integrity: sha512-AMh7x313t/V+eTySKB0Dal08RHY7ggYK0MSn/ad8wKWOrDUIzyiWNayRUm2PIJ4VRkvRnfNuyRuKbLV3EN+ewQ==} + engines: {node: '>=16.x', pnpm: '>=7.x'} + peerDependencies: + tailwindcss: '*' + + tailwind-variants@0.2.1: + resolution: {integrity: sha512-2xmhAf4UIc3PijOUcJPA1LP4AbxhpcHuHM2C26xM0k81r0maAO6uoUSHl3APmvHZcY5cZCY/bYuJdfFa4eGoaw==} + engines: {node: '>=16.x', pnpm: '>=7.x'} + peerDependencies: + tailwindcss: '*' + + tailwindcss@3.4.4: + resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tapable@2.2.2: + resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} + engines: {node: '>=6'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + temp@0.8.4: + resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} + engines: {node: '>=6.0.0'} + + tempy@0.7.1: + resolution: {integrity: sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==} + engines: {node: '>=10'} + + terminal-link@2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + + terminal-link@3.0.0: + resolution: {integrity: sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==} + engines: {node: '>=12'} + + terser-webpack-plugin@5.3.14: + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.40.0: + resolution: {integrity: sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + throat@5.0.0: + resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + timm@1.7.1: + resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + + tinyqueue@3.0.0: + resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + token-types@4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-debounce@4.0.0: + resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-jest@29.2.6: + resolution: {integrity: sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + ts-object-utils@0.0.5: + resolution: {integrity: sha512-iV0GvHqOmilbIKJsfyfJY9/dNHCs969z3so90dQWsO1eMMozvTpnB1MEaUbb3FYtZTGjv5sIy/xmslEz0Rg2TA==} + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tsconfig@7.0.0: + resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + + type-fest@4.35.0: + resolution: {integrity: sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==} + engines: {node: '>=16'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typed-emitter@2.1.0: + resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} + + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + + ua-parser-js@0.7.40: + resolution: {integrity: sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==} + hasBin: true + + ua-parser-js@1.0.40: + resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + undici@6.21.1: + resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} + engines: {node: '>=18.17'} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unimodules-app-loader@5.0.1: + resolution: {integrity: sha512-JI4dUMOovvLrZ1U/mrQrR73cxGH26H7NpfBxwE0hk59CBOyHO4YYpliI3hPSGgZzt+YEy2VZR6nrspSUXY8jyw==} + + unique-filename@3.0.0: + resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + unique-slug@4.0.0: + resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@1.0.0: + resolution: {integrity: sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==} + engines: {node: '>= 10.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-notifier@7.3.1: + resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} + engines: {node: '>=18'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + use-latest-callback@0.2.3: + resolution: {integrity: sha512-7vI3fBuyRcP91pazVboc4qu+6ZqM8izPWX9k7cRnT8hbD5svslcknsh3S9BUhaK11OmgTV4oWZZVSeQAiV53SQ==} + peerDependencies: + react: '>=16.8' + + use-sync-external-store@1.4.0: + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + usehooks-ts@3.1.1: + resolution: {integrity: sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==} + engines: {node: '>=16.15.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc + + utif2@4.1.0: + resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@7.0.3: + resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} + hasBin: true + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vlq@1.0.1: + resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} + + void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + + vt-pbf@3.1.3: + resolution: {integrity: sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==} + + w3c-xmlserializer@4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + warn-once@0.1.1: + resolution: {integrity: sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==} + + watchpack@2.4.4: + resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webpack-sources@3.3.2: + resolution: {integrity: sha512-ykKKus8lqlgXX/1WjudpIEjqsafjOTcOJqxnAbMLAu/KCsDCJ6GBtvscewvTkrn24HsnvFwrSCbenFrhtcCsAA==} + engines: {node: '>=10.13.0'} + + webpack@5.98.0: + resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + webrtc-adapter@9.0.3: + resolution: {integrity: sha512-5fALBcroIl31OeXAdd1YUntxiZl1eHlZZWzNg3U4Fn+J9/cGL3eT80YlrsWGvj2ojuz1rZr2OXkgCzIxAZ7vRQ==} + engines: {node: '>=6.0.0', npm: '>=3.10.0'} + + well-known-symbols@4.1.0: + resolution: {integrity: sha512-lKhCpGfPkaJnPKyep1Uj44pNmyrdupYHtxci2ThUCC/Y0px44d9BWt2dbewDif4PwOqSI6KkCdwuL22CDUj4rw==} + engines: {node: '>= 0.4'} + + whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + whatwg-url-without-unicode@8.0.0-3: + resolution: {integrity: sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==} + engines: {node: '>=10'} + + whatwg-url@11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + when-exit@2.1.4: + resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + wonka@6.3.4: + resolution: {integrity: sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg==} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@3.0.1: + resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==} + engines: {node: '>=4'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@2.4.3: + resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@6.2.3: + resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + 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 + + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + 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 + + xcode@3.0.1: + resolution: {integrity: sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==} + engines: {node: '>=10.0.0'} + + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + + xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + xml-parse-from-string@1.0.1: + resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} + + xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + + xml2js@0.6.0: + resolution: {integrity: sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==} + engines: {node: '>=4.0.0'} + + xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + xmlbuilder@14.0.0: + resolution: {integrity: sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==} + engines: {node: '>=8.0'} + + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xmlhttprequest-ssl@2.0.0: + resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + engines: {node: '>=0.4.0'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + + zod-validation-error@3.4.0: + resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.18.0 + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + + zustand@4.5.6: + resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + +snapshots: + + '@0no-co/graphql.web@1.1.1': {} + + '@adobe/css-tools@4.4.2': {} + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.10.4': + dependencies: + '@babel/highlight': 7.25.9 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/compat-data@7.27.5': {} + + '@babel/core@7.26.9': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helpers': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.9': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/generator@7.27.5': + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.3 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.27.3 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.27.3 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.27.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.9 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.27.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.1 + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.27.1': + dependencies: + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.27.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.27.3 + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.27.3 + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helper-wrap-function@7.27.1': + dependencies: + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.3 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.26.9': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/highlight@7.25.9': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/parser@7.26.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/parser@7.27.5': + dependencies: + '@babel/types': 7.27.3 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-export-default-from@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.9) + + '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-export-default-from@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.9) + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-block-scoping@7.27.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9) + '@babel/traverse': 7.26.9 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.9) + '@babel/traverse': 7.27.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 + + '@babel/plugin-transform-destructuring@7.27.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-flow-strip-types@7.26.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.9) + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-object-rest-spread@7.27.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.26.9) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.26.9) + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) + '@babel/types': 7.27.3 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regenerator@7.27.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-runtime@7.26.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.9) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.9) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.9) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/preset-env@7.26.9(@babel/core@7.26.9)': + dependencies: + '@babel/compat-data': 7.27.5 + '@babel/core': 7.26.9 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.9) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.9) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-block-scoping': 7.27.5(@babel/core@7.26.9) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.26.9) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-object-rest-spread': 7.27.3(@babel/core@7.26.9) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-regenerator': 7.27.5(@babel/core@7.26.9) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.26.9) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.9) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.9) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.9) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.9) + core-js-compat: 3.42.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-flow@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.9) + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.27.3 + esutils: 2.0.3 + + '@babel/preset-react@7.26.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.9) + '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + '@babel/register@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.6 + source-map-support: 0.5.21 + + '@babel/runtime@7.26.9': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.3 + + '@babel/traverse@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.1 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.27.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.5 + '@babel/template': 7.27.2 + '@babel/types': 7.27.3 + debug: 4.4.1 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.9': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@babel/types@7.27.3': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@bcoe/v8-coverage@0.2.3': {} + + '@bufbuild/protobuf@1.10.1': {} + + '@commitlint/cli@19.7.1(@types/node@22.13.5)(typescript@5.8.2)': + dependencies: + '@commitlint/format': 19.5.0 + '@commitlint/lint': 19.7.1 + '@commitlint/load': 19.6.1(@types/node@22.13.5)(typescript@5.8.2) + '@commitlint/read': 19.5.0 + '@commitlint/types': 19.5.0 + tinyexec: 0.3.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@19.7.1': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + ajv: 8.17.1 + + '@commitlint/ensure@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@19.5.0': {} + + '@commitlint/format@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + + '@commitlint/is-ignored@19.7.1': + dependencies: + '@commitlint/types': 19.5.0 + semver: 7.7.1 + + '@commitlint/lint@19.7.1': + dependencies: + '@commitlint/is-ignored': 19.7.1 + '@commitlint/parse': 19.5.0 + '@commitlint/rules': 19.6.0 + '@commitlint/types': 19.5.0 + + '@commitlint/load@19.6.1(@types/node@22.13.5)(typescript@5.8.2)': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/execute-rule': 19.5.0 + '@commitlint/resolve-extends': 19.5.0 + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.8.2) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.13.5)(cosmiconfig@9.0.0(typescript@5.8.2))(typescript@5.8.2) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@19.5.0': {} + + '@commitlint/parse@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@19.5.0': + dependencies: + '@commitlint/top-level': 19.5.0 + '@commitlint/types': 19.5.0 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 0.3.2 + + '@commitlint/resolve-extends@19.5.0': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/types': 19.5.0 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@19.6.0': + dependencies: + '@commitlint/ensure': 19.5.0 + '@commitlint/message': 19.5.0 + '@commitlint/to-lines': 19.5.0 + '@commitlint/types': 19.5.0 + + '@commitlint/to-lines@19.5.0': {} + + '@commitlint/top-level@19.5.0': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.5.0': + dependencies: + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.4.1 + + '@config-plugins/react-native-webrtc@10.0.0(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))': + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@dev-plugins/react-query@0.2.0(@tanstack/react-query@5.66.11(react@18.3.1))(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))': + dependencies: + '@tanstack/react-query': 5.66.11(react@18.3.1) + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + flatted: 3.3.3 + + '@egjs/hammerjs@2.0.17': + dependencies: + '@types/hammerjs': 2.0.46 + + '@emotion/is-prop-valid@0.8.8': + dependencies: + '@emotion/memoize': 0.7.4 + optional: true + + '@emotion/memoize@0.7.4': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.4.1 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@expo/bunyan@4.0.1': + dependencies: + uuid: 8.3.2 + + '@expo/cli@0.22.26': + dependencies: + '@0no-co/graphql.web': 1.1.1 + '@babel/runtime': 7.26.9 + '@expo/code-signing-certificates': 0.0.5 + '@expo/config': 10.0.11 + '@expo/config-plugins': 9.0.17 + '@expo/devcert': 1.1.4 + '@expo/env': 0.4.2 + '@expo/image-utils': 0.6.5 + '@expo/json-file': 9.0.2 + '@expo/metro-config': 0.19.12 + '@expo/osascript': 2.1.6 + '@expo/package-manager': 1.7.2 + '@expo/plist': 0.2.2 + '@expo/prebuild-config': 8.2.0 + '@expo/rudder-sdk-node': 1.1.1 + '@expo/spawn-async': 1.7.2 + '@expo/ws-tunnel': 1.0.5 + '@expo/xcpretty': 4.3.2 + '@react-native/dev-middleware': 0.76.9 + '@urql/core': 5.1.0 + '@urql/exchange-retry': 1.3.0(@urql/core@5.1.0) + accepts: 1.3.8 + arg: 5.0.2 + better-opn: 3.0.2 + bplist-creator: 0.0.7 + bplist-parser: 0.3.2 + cacache: 18.0.4 + chalk: 4.1.2 + ci-info: 3.9.0 + compression: 1.8.0 + connect: 3.7.0 + debug: 4.4.1 + env-editor: 0.4.2 + fast-glob: 3.3.3 + form-data: 3.0.3 + freeport-async: 2.0.0 + fs-extra: 8.1.0 + getenv: 1.0.0 + glob: 10.4.5 + internal-ip: 4.3.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + lodash.debounce: 4.0.8 + minimatch: 3.1.2 + node-forge: 1.3.1 + npm-package-arg: 11.0.3 + ora: 3.4.0 + picomatch: 3.0.1 + pretty-bytes: 5.6.0 + pretty-format: 29.7.0 + progress: 2.0.3 + prompts: 2.4.2 + qrcode-terminal: 0.11.0 + require-from-string: 2.0.2 + requireg: 0.2.2 + resolve: 1.22.10 + resolve-from: 5.0.0 + resolve.exports: 2.0.3 + semver: 7.7.1 + send: 0.19.1 + slugify: 1.6.6 + source-map-support: 0.5.21 + stacktrace-parser: 0.1.11 + structured-headers: 0.4.1 + tar: 6.2.1 + temp-dir: 2.0.0 + tempy: 0.7.1 + terminal-link: 2.1.1 + undici: 6.21.1 + unique-string: 2.0.0 + wrap-ansi: 7.0.0 + ws: 8.18.1 + transitivePeerDependencies: + - bufferutil + - encoding + - graphql + - supports-color + - utf-8-validate + + '@expo/code-signing-certificates@0.0.5': + dependencies: + node-forge: 1.3.1 + nullthrows: 1.1.1 + + '@expo/config-plugins@9.0.16': + dependencies: + '@expo/config-types': 52.0.5 + '@expo/json-file': 9.0.2 + '@expo/plist': 0.2.2 + '@expo/sdk-runtime-versions': 1.0.0 + chalk: 4.1.2 + debug: 4.4.1 + getenv: 1.0.0 + glob: 10.4.5 + resolve-from: 5.0.0 + semver: 7.7.1 + slash: 3.0.0 + slugify: 1.6.6 + xcode: 3.0.1 + xml2js: 0.6.0 + transitivePeerDependencies: + - supports-color + + '@expo/config-plugins@9.0.17': + dependencies: + '@expo/config-types': 52.0.5 + '@expo/json-file': 9.0.2 + '@expo/plist': 0.2.2 + '@expo/sdk-runtime-versions': 1.0.0 + chalk: 4.1.2 + debug: 4.4.1 + getenv: 1.0.0 + glob: 10.4.5 + resolve-from: 5.0.0 + semver: 7.7.1 + slash: 3.0.0 + slugify: 1.6.6 + xcode: 3.0.1 + xml2js: 0.6.0 + transitivePeerDependencies: + - supports-color + + '@expo/config-types@52.0.5': {} + + '@expo/config@10.0.10': + dependencies: + '@babel/code-frame': 7.10.4 + '@expo/config-plugins': 9.0.16 + '@expo/config-types': 52.0.5 + '@expo/json-file': 9.0.2 + deepmerge: 4.3.1 + getenv: 1.0.0 + glob: 10.4.5 + require-from-string: 2.0.2 + resolve-from: 5.0.0 + resolve-workspace-root: 2.0.0 + semver: 7.7.1 + slugify: 1.6.6 + sucrase: 3.35.0 + transitivePeerDependencies: + - supports-color + + '@expo/config@10.0.11': + dependencies: + '@babel/code-frame': 7.10.4 + '@expo/config-plugins': 9.0.17 + '@expo/config-types': 52.0.5 + '@expo/json-file': 9.0.2 + deepmerge: 4.3.1 + getenv: 1.0.0 + glob: 10.4.5 + require-from-string: 2.0.2 + resolve-from: 5.0.0 + resolve-workspace-root: 2.0.0 + semver: 7.7.1 + slugify: 1.6.6 + sucrase: 3.35.0 + transitivePeerDependencies: + - supports-color + + '@expo/devcert@1.1.4': + dependencies: + application-config-path: 0.1.1 + command-exists: 1.2.9 + debug: 3.2.7 + eol: 0.9.1 + get-port: 3.2.0 + glob: 10.4.5 + lodash: 4.17.21 + mkdirp: 0.5.6 + password-prompt: 1.1.3 + sudo-prompt: 8.2.5 + tmp: 0.0.33 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@expo/env@0.4.2': + dependencies: + chalk: 4.1.2 + debug: 4.4.1 + dotenv: 16.4.7 + dotenv-expand: 11.0.7 + getenv: 1.0.0 + transitivePeerDependencies: + - supports-color + + '@expo/fingerprint@0.11.11': + dependencies: + '@expo/spawn-async': 1.7.2 + arg: 5.0.2 + chalk: 4.1.2 + debug: 4.4.1 + find-up: 5.0.0 + getenv: 1.0.0 + minimatch: 3.1.2 + p-limit: 3.1.0 + resolve-from: 5.0.0 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + '@expo/html-elements@0.10.1': {} + + '@expo/image-utils@0.6.5': + dependencies: + '@expo/spawn-async': 1.7.2 + chalk: 4.1.2 + fs-extra: 9.0.0 + getenv: 1.0.0 + jimp-compact: 0.16.1 + parse-png: 2.1.0 + resolve-from: 5.0.0 + semver: 7.7.1 + temp-dir: 2.0.0 + unique-string: 2.0.0 + + '@expo/json-file@9.0.2': + dependencies: + '@babel/code-frame': 7.10.4 + json5: 2.2.3 + write-file-atomic: 2.4.3 + + '@expo/metro-config@0.19.12': + dependencies: + '@babel/core': 7.26.9 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.3 + '@expo/config': 10.0.11 + '@expo/env': 0.4.2 + '@expo/json-file': 9.0.2 + '@expo/spawn-async': 1.7.2 + chalk: 4.1.2 + debug: 4.4.1 + fs-extra: 9.1.0 + getenv: 1.0.0 + glob: 10.4.5 + jsc-safe-url: 0.2.4 + lightningcss: 1.27.0 + minimatch: 3.1.2 + postcss: 8.4.49 + resolve-from: 5.0.0 + transitivePeerDependencies: + - supports-color + + '@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))': + dependencies: + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + '@expo/osascript@2.1.6': + dependencies: + '@expo/spawn-async': 1.7.2 + exec-async: 2.2.0 + + '@expo/package-manager@1.7.2': + dependencies: + '@expo/json-file': 9.0.2 + '@expo/spawn-async': 1.7.2 + ansi-regex: 5.0.1 + chalk: 4.1.2 + find-up: 5.0.0 + js-yaml: 3.14.1 + micromatch: 4.0.8 + npm-package-arg: 11.0.3 + ora: 3.4.0 + resolve-workspace-root: 2.0.0 + split: 1.0.1 + sudo-prompt: 9.1.1 + + '@expo/plist@0.2.2': + dependencies: + '@xmldom/xmldom': 0.7.13 + base64-js: 1.5.1 + xmlbuilder: 14.0.0 + + '@expo/prebuild-config@8.2.0': + dependencies: + '@expo/config': 10.0.11 + '@expo/config-plugins': 9.0.17 + '@expo/config-types': 52.0.5 + '@expo/image-utils': 0.6.5 + '@expo/json-file': 9.0.2 + '@react-native/normalize-colors': 0.76.9 + debug: 4.4.1 + fs-extra: 9.1.0 + resolve-from: 5.0.0 + semver: 7.7.1 + xml2js: 0.6.0 + transitivePeerDependencies: + - supports-color + + '@expo/rudder-sdk-node@1.1.1': + dependencies: + '@expo/bunyan': 4.0.1 + '@segment/loosely-validate-event': 2.0.0 + fetch-retry: 4.1.1 + md5: 2.3.0 + node-fetch: 2.7.0 + remove-trailing-slash: 0.1.1 + uuid: 8.3.2 + transitivePeerDependencies: + - encoding + + '@expo/sdk-runtime-versions@1.0.0': {} + + '@expo/server@0.5.3': + dependencies: + abort-controller: 3.0.0 + debug: 4.4.1 + source-map-support: 0.5.21 + undici: 6.21.1 + transitivePeerDependencies: + - supports-color + + '@expo/spawn-async@1.7.2': + dependencies: + cross-spawn: 7.0.6 + + '@expo/vector-icons@14.0.4': + dependencies: + prop-types: 15.8.1 + + '@expo/ws-tunnel@1.0.5': {} + + '@expo/xcpretty@4.3.2': + dependencies: + '@babel/code-frame': 7.10.4 + chalk: 4.1.2 + find-up: 5.0.0 + js-yaml: 4.1.0 + + '@floating-ui/core@1.6.9': + dependencies: + '@floating-ui/utils': 0.2.9 + + '@floating-ui/dom@1.6.13': + dependencies: + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 + + '@floating-ui/utils@0.2.9': {} + + '@formatjs/ecma402-abstract@2.3.3': + dependencies: + '@formatjs/fast-memoize': 2.2.6 + '@formatjs/intl-localematcher': 0.6.0 + decimal.js: 10.5.0 + tslib: 2.8.1 + + '@formatjs/fast-memoize@2.2.6': + dependencies: + tslib: 2.8.1 + + '@formatjs/icu-messageformat-parser@2.11.1': + dependencies: + '@formatjs/ecma402-abstract': 2.3.3 + '@formatjs/icu-skeleton-parser': 1.8.13 + tslib: 2.8.1 + + '@formatjs/icu-skeleton-parser@1.8.13': + dependencies: + '@formatjs/ecma402-abstract': 2.3.3 + tslib: 2.8.1 + + '@formatjs/intl-localematcher@0.6.0': + dependencies: + tslib: 2.8.1 + + '@gluestack-ui/accordion@1.0.12(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/accordion': 0.0.2(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/actionsheet@0.2.50(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/hooks': 0.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/overlay': 0.1.20(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/transitions': 0.1.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/dialog': 0.0.4(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/alert-dialog@0.1.36(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/hooks': 0.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/overlay': 0.1.20(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/dialog': 0.0.4(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/alert@0.1.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@gluestack-ui/avatar@0.1.18(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/button@1.0.12(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/checkbox@0.1.37(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/form-control': 0.1.19(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/checkbox': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/utils': 0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-stately/checkbox': 3.6.11(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/divider@0.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@gluestack-ui/fab@0.1.26(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/form-control@0.1.19(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/hooks@0.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@gluestack-ui/icon@0.1.25(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/provider': 0.1.17(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/image@0.1.15(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/input@0.1.36(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/form-control': 0.1.19(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/link@0.1.27(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/menu@0.2.41(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/hooks': 0.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/overlay': 0.1.20(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-aria/menu': 3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/menu': 0.2.13(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/overlays': 0.3.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-stately: 3.35.0(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/modal@0.1.39(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/hooks': 0.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/overlay': 0.1.20(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/dialog': 0.0.4(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/overlays': 0.3.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/nativewind-utils@1.0.26(nativewind@4.1.23(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)))': + dependencies: + find-yarn-workspace-root: 2.0.0 + nativewind: 4.1.23(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))) + patch-package: 8.0.0 + react: 18.3.1 + tailwind-variants: 0.1.20(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))) + transitivePeerDependencies: + - tailwindcss + + '@gluestack-ui/overlay@0.1.20(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/overlays': 0.3.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/popover@0.1.47(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/hooks': 0.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/overlay': 0.1.20(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/dialog': 0.0.4(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/overlays': 0.3.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/pressable@0.1.21(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/progress@0.1.18(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/provider@0.1.17(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tsconfig: 7.0.0 + typescript: 5.8.2 + transitivePeerDependencies: + - react-native + + '@gluestack-ui/radio@0.1.38(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/form-control': 0.1.19(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/radio': 0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-stately/radio': 3.10.10(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/react-native-aria@0.1.7(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/select@0.1.31(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/form-control': 0.1.19(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/hooks': 0.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/slider@0.1.30(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/form-control': 0.1.19(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/hooks': 0.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/slider': 0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-stately/slider': 3.6.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/spinner@0.1.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@gluestack-ui/switch@0.1.27(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/form-control': 0.1.19(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-stately/toggle': 3.8.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/textarea@0.1.24(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/form-control': 0.1.19(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/toast@1.0.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/hooks': 0.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/overlay': 0.1.20(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/transitions': 0.1.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/tooltip@0.1.42(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/hooks': 0.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@gluestack-ui/overlay': 0.1.20(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/overlays': 0.3.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/transitions@0.1.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gluestack-ui/overlay': 0.1.20(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/react-native-aria': 0.1.7(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@gluestack-ui/utils': 0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gluestack-ui/utils@0.1.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-native-aria/focus': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - react-native + + '@gorhom/bottom-sheet@5.1.1(@types/react-native@0.73.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-native-gesture-handler@2.20.2(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@gorhom/portal': 1.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + invariant: 2.2.4 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-native-gesture-handler: 2.20.2(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-reanimated: 3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-native': 0.73.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + '@gorhom/portal@1.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + nanoid: 3.3.8 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + '@hookform/resolvers@3.10.0(react-hook-form@7.54.2(react@18.3.1))': + dependencies: + react-hook-form: 7.54.2(react@18.3.1) + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.1 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@ide/backoff@1.0.0': {} + + '@inquirer/checkbox@4.1.2(@types/node@22.13.5)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.5) + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@22.13.5) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/confirm@5.1.6(@types/node@22.13.5)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.5) + '@inquirer/type': 3.0.4(@types/node@22.13.5) + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/core@10.1.7(@types/node@22.13.5)': + dependencies: + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@22.13.5) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/editor@4.2.7(@types/node@22.13.5)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.5) + '@inquirer/type': 3.0.4(@types/node@22.13.5) + external-editor: 3.1.0 + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/expand@4.0.9(@types/node@22.13.5)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.5) + '@inquirer/type': 3.0.4(@types/node@22.13.5) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/figures@1.0.10': {} + + '@inquirer/input@4.1.6(@types/node@22.13.5)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.5) + '@inquirer/type': 3.0.4(@types/node@22.13.5) + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/number@3.0.9(@types/node@22.13.5)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.5) + '@inquirer/type': 3.0.4(@types/node@22.13.5) + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/password@4.0.9(@types/node@22.13.5)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.5) + '@inquirer/type': 3.0.4(@types/node@22.13.5) + ansi-escapes: 4.3.2 + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/prompts@7.3.2(@types/node@22.13.5)': + dependencies: + '@inquirer/checkbox': 4.1.2(@types/node@22.13.5) + '@inquirer/confirm': 5.1.6(@types/node@22.13.5) + '@inquirer/editor': 4.2.7(@types/node@22.13.5) + '@inquirer/expand': 4.0.9(@types/node@22.13.5) + '@inquirer/input': 4.1.6(@types/node@22.13.5) + '@inquirer/number': 3.0.9(@types/node@22.13.5) + '@inquirer/password': 4.0.9(@types/node@22.13.5) + '@inquirer/rawlist': 4.0.9(@types/node@22.13.5) + '@inquirer/search': 3.0.9(@types/node@22.13.5) + '@inquirer/select': 4.0.9(@types/node@22.13.5) + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/rawlist@4.0.9(@types/node@22.13.5)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.5) + '@inquirer/type': 3.0.4(@types/node@22.13.5) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/search@3.0.9(@types/node@22.13.5)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.5) + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@22.13.5) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/select@4.0.9(@types/node@22.13.5)': + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.5) + '@inquirer/figures': 1.0.10 + '@inquirer/type': 3.0.4(@types/node@22.13.5) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.5 + + '@inquirer/type@3.0.4(@types/node@22.13.5)': + optionalDependencies: + '@types/node': 22.13.5 + + '@internationalized/date@3.7.0': + dependencies: + '@swc/helpers': 0.5.15 + + '@internationalized/message@3.1.6': + dependencies: + '@swc/helpers': 0.5.15 + intl-messageformat: 10.7.15 + + '@internationalized/number@3.6.0': + dependencies: + '@swc/helpers': 0.5.15 + + '@internationalized/string@3.2.5': + dependencies: + '@swc/helpers': 0.5.15 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@isaacs/ttlcache@1.4.1': {} + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.5 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/create-cache-key-function@29.7.0': + dependencies: + '@jest/types': 29.6.3 + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.5 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.13.5 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.13.5 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.26.9 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.13.5 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jimp/bmp@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + bmp-js: 0.1.0 + + '@jimp/core@0.22.12': + dependencies: + '@jimp/utils': 0.22.12 + any-base: 1.1.0 + buffer: 5.7.1 + exif-parser: 0.1.12 + file-type: 16.5.4 + isomorphic-fetch: 3.0.0 + pixelmatch: 4.0.2 + tinycolor2: 1.6.0 + transitivePeerDependencies: + - encoding + + '@jimp/custom@0.22.12': + dependencies: + '@jimp/core': 0.22.12 + transitivePeerDependencies: + - encoding + + '@jimp/gif@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + gifwrap: 0.10.1 + omggif: 1.0.10 + + '@jimp/jpeg@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + jpeg-js: 0.4.4 + + '@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-circle@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + tinycolor2: 1.6.0 + + '@jimp/plugin-contain@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)))': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/utils': 0.22.12 + + '@jimp/plugin-cover@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)))': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/utils': 0.22.12 + + '@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-displace@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-dither@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-fisheye@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-flip@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)))': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/utils': 0.22.12 + + '@jimp/plugin-gaussian@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-invert@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-mask@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-normalize@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-print@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) + '@jimp/utils': 0.22.12 + load-bmfont: 1.4.2 + transitivePeerDependencies: + - debug + + '@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + + '@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/utils': 0.22.12 + + '@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/utils': 0.22.12 + + '@jimp/plugin-shadow@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/utils': 0.22.12 + + '@jimp/plugin-threshold@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/utils': 0.22.12 + + '@jimp/plugins@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugin-blit': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-blur': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-circle': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-color': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-contain': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))) + '@jimp/plugin-cover': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-scale@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))) + '@jimp/plugin-crop': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-displace': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-dither': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-fisheye': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-flip': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-rotate@0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12))) + '@jimp/plugin-gaussian': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-invert': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-mask': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-normalize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-print': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12)) + '@jimp/plugin-resize': 0.22.12(@jimp/custom@0.22.12) + '@jimp/plugin-rotate': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blit@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-crop@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/plugin-scale': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/plugin-shadow': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-blur@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + '@jimp/plugin-threshold': 0.22.12(@jimp/custom@0.22.12)(@jimp/plugin-color@0.22.12(@jimp/custom@0.22.12))(@jimp/plugin-resize@0.22.12(@jimp/custom@0.22.12)) + timm: 1.7.1 + transitivePeerDependencies: + - debug + + '@jimp/png@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/utils': 0.22.12 + pngjs: 6.0.0 + + '@jimp/tiff@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/custom': 0.22.12 + utif2: 4.1.0 + + '@jimp/types@0.22.12(@jimp/custom@0.22.12)': + dependencies: + '@jimp/bmp': 0.22.12(@jimp/custom@0.22.12) + '@jimp/custom': 0.22.12 + '@jimp/gif': 0.22.12(@jimp/custom@0.22.12) + '@jimp/jpeg': 0.22.12(@jimp/custom@0.22.12) + '@jimp/png': 0.22.12(@jimp/custom@0.22.12) + '@jimp/tiff': 0.22.12(@jimp/custom@0.22.12) + timm: 1.7.1 + + '@jimp/utils@0.22.12': + dependencies: + regenerator-runtime: 0.13.11 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@legendapp/motion@2.4.0(nativewind@4.1.23(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@legendapp/tools': 2.0.1(react@18.3.1) + nativewind: 4.1.23(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + '@legendapp/tools@2.0.1(react@18.3.1)': + optionalDependencies: + react: 18.3.1 + + '@livekit/components-core@0.12.4(livekit-client@2.11.4)(tslib@2.8.1)': + dependencies: + '@floating-ui/dom': 1.6.13 + livekit-client: 2.11.4 + loglevel: 1.9.1 + rxjs: 7.8.2 + tslib: 2.8.1 + + '@livekit/components-react@2.9.3(livekit-client@2.11.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)': + dependencies: + '@livekit/components-core': 0.12.4(livekit-client@2.11.4)(tslib@2.8.1) + clsx: 2.1.1 + livekit-client: 2.11.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 + usehooks-ts: 3.1.1(react@18.3.1) + + '@livekit/mutex@1.1.1': {} + + '@livekit/protocol@1.36.1': + dependencies: + '@bufbuild/protobuf': 1.10.1 + + '@livekit/react-native-expo-plugin@1.0.1(nefjks2cqtm452sgs7bkl5qhtm)': + dependencies: + '@livekit/react-native': 2.7.4(@livekit/react-native-webrtc@125.0.9(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(livekit-client@2.11.4)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tslib@2.8.1) + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + '@livekit/react-native-webrtc@125.0.9(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))': + dependencies: + base64-js: 1.5.1 + debug: 4.3.4 + event-target-shim: 6.0.2 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - supports-color + + '@livekit/react-native@2.7.4(@livekit/react-native-webrtc@125.0.9(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(livekit-client@2.11.4)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tslib@2.8.1)': + dependencies: + '@livekit/components-react': 2.9.3(livekit-client@2.11.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1) + '@livekit/react-native-webrtc': 125.0.9(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + array.prototype.at: 1.1.3 + events: 3.3.0 + livekit-client: 2.11.4 + loglevel: 1.9.2 + promise.allsettled: 1.0.7 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-native-url-polyfill: 1.3.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + typed-emitter: 2.1.0 + well-known-symbols: 4.1.0 + transitivePeerDependencies: + - '@livekit/krisp-noise-filter' + - react-dom + - tslib + + '@mapbox/jsonlint-lines-primitives@2.0.2': {} + + '@mapbox/mapbox-gl-supported@3.0.0': {} + + '@mapbox/point-geometry@0.1.0': {} + + '@mapbox/tiny-sdf@2.0.6': {} + + '@mapbox/unitbezier@0.0.1': {} + + '@mapbox/vector-tile@1.3.1': + dependencies: + '@mapbox/point-geometry': 0.1.0 + + '@mapbox/whoots-js@3.1.0': {} + + '@microsoft/signalr@8.0.7': + dependencies: + abort-controller: 3.0.0 + eventsource: 2.0.2 + fetch-cookie: 2.2.0 + node-fetch: 2.7.0 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@motionone/animation@10.18.0': + dependencies: + '@motionone/easing': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + tslib: 2.8.1 + + '@motionone/dom@10.12.0': + dependencies: + '@motionone/animation': 10.18.0 + '@motionone/generators': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + hey-listen: 1.0.8 + tslib: 2.8.1 + + '@motionone/dom@10.18.0': + dependencies: + '@motionone/animation': 10.18.0 + '@motionone/generators': 10.18.0 + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + hey-listen: 1.0.8 + tslib: 2.8.1 + + '@motionone/easing@10.18.0': + dependencies: + '@motionone/utils': 10.18.0 + tslib: 2.8.1 + + '@motionone/generators@10.18.0': + dependencies: + '@motionone/types': 10.17.1 + '@motionone/utils': 10.18.0 + tslib: 2.8.1 + + '@motionone/types@10.17.1': {} + + '@motionone/utils@10.18.0': + dependencies: + '@motionone/types': 10.17.1 + hey-listen: 1.0.8 + tslib: 2.8.1 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@novu/js@2.6.6': + dependencies: + '@floating-ui/dom': 1.6.13 + class-variance-authority: 0.7.1 + clsx: 2.1.1 + mitt: 3.0.1 + socket.io-client: 4.7.2 + solid-floating-ui: 0.3.1(@floating-ui/dom@1.6.13)(solid-js@1.9.5) + solid-js: 1.9.5 + solid-motionone: 1.0.3(solid-js@1.9.5) + tailwind-merge: 2.6.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@novu/react-native@2.6.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@novu/react': 2.6.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - bufferutil + - react-dom + - supports-color + - utf-8-validate + + '@novu/react@2.6.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@novu/js': 2.6.6 + react: 18.3.1 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@npmcli/fs@3.1.1': + dependencies: + semver: 7.7.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@2.3.1': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@radix-ui/react-compose-refs@1.0.0(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.9 + react: 18.3.1 + + '@radix-ui/react-slot@1.0.1(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.9 + '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1) + react: 18.3.1 + + '@react-aria/checkbox@3.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.9 + '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/toggle': 3.10.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/checkbox': 3.6.11(react@18.3.1) + '@react-stately/toggle': 3.8.1(react@18.3.1) + '@react-types/checkbox': 3.9.1(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - react-dom + + '@react-aria/dialog@3.5.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/dialog': 3.5.15(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/focus@3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + clsx: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/form@3.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/form': 3.1.1(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/i18n@3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@internationalized/message': 3.1.6 + '@internationalized/number': 3.6.0 + '@internationalized/string': 3.2.5 + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/interactions@3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/label@3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/menu@3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/collections': 3.12.1(react@18.3.1) + '@react-stately/menu': 3.9.1(react@18.3.1) + '@react-stately/selection': 3.19.0(react@18.3.1) + '@react-stately/tree': 3.8.7(react@18.3.1) + '@react-types/button': 3.10.2(react@18.3.1) + '@react-types/menu': 3.9.14(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/overlays@3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/overlays': 3.6.13(react@18.3.1) + '@react-types/button': 3.10.2(react@18.3.1) + '@react-types/overlays': 3.8.12(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/radio@3.10.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/form': 3.0.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/radio': 3.10.10(react@18.3.1) + '@react-types/radio': 3.8.6(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/selection@3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/selection': 3.19.0(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/slider@3.7.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/slider': 3.6.1(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@react-types/slider': 3.7.8(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/ssr@3.9.7(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-aria/toggle@3.10.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/toggle': 3.8.1(react@18.3.1) + '@react-types/checkbox': 3.9.1(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/utils@3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + clsx: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/visually-hidden@3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-native-aria/accordion@0.0.2(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + '@react-native-aria/checkbox@0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/checkbox': 3.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/toggle': 0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/utils': 0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-stately/toggle': 3.8.1(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - react-dom + + '@react-native-aria/dialog@0.0.4(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/dialog': 3.5.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/utils': 0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-types/dialog': 3.5.15(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - react-dom + + '@react-native-aria/focus@0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - react-dom + + '@react-native-aria/interactions@0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/utils': 0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - react-dom + + '@react-native-aria/menu@0.2.13(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/menu': 3.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/selection': 3.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/overlays': 0.3.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/utils': 0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-stately/collections': 3.12.1(react@18.3.1) + '@react-stately/menu': 3.9.1(react@18.3.1) + '@react-stately/tree': 3.8.7(react@18.3.1) + '@react-types/menu': 3.9.14(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - react-dom + + '@react-native-aria/overlays@0.3.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/utils': 0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-stately/overlays': 3.6.13(react@18.3.1) + '@react-types/overlays': 3.8.12(react@18.3.1) + dom-helpers: 5.2.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + '@react-native-aria/radio@0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/radio': 3.10.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/utils': 0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-stately/radio': 3.10.10(react@18.3.1) + '@react-types/radio': 3.8.6(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - react-dom + + '@react-native-aria/slider@0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/label': 3.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/slider': 3.7.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/utils': 0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-stately/slider': 3.6.1(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - react-dom + + '@react-native-aria/toggle@0.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-native-aria/interactions': 0.2.14(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-native-aria/utils': 0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-stately/toggle': 3.8.1(react@18.3.1) + '@react-types/checkbox': 3.9.1(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - react-dom + + '@react-native-aria/utils@0.2.11(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - react-dom + + '@react-native/assets-registry@0.76.9': {} + + '@react-native/babel-plugin-codegen@0.76.9(@babel/preset-env@7.26.9(@babel/core@7.26.9))': + dependencies: + '@react-native/codegen': 0.76.9(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + + '@react-native/babel-preset@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))': + dependencies: + '@babel/core': 7.26.9 + '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-export-default-from': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-block-scoping': 7.27.5(@babel/core@7.26.9) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.26.9) + '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.9) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-object-rest-spread': 7.27.3(@babel/core@7.26.9) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-regenerator': 7.27.5(@babel/core@7.26.9) + '@babel/plugin-transform-runtime': 7.26.9(@babel/core@7.26.9) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.26.9) + '@babel/template': 7.27.2 + '@react-native/babel-plugin-codegen': 0.76.9(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + babel-plugin-syntax-hermes-parser: 0.25.1 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.26.9) + react-refresh: 0.14.2 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + + '@react-native/codegen@0.76.9(@babel/preset-env@7.26.9(@babel/core@7.26.9))': + dependencies: + '@babel/parser': 7.27.5 + '@babel/preset-env': 7.26.9(@babel/core@7.26.9) + glob: 7.2.3 + hermes-parser: 0.23.1 + invariant: 2.2.4 + jscodeshift: 0.14.0(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + mkdirp: 0.5.6 + nullthrows: 1.1.1 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + '@react-native/community-cli-plugin@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))': + dependencies: + '@react-native/dev-middleware': 0.76.9 + '@react-native/metro-babel-transformer': 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + chalk: 4.1.2 + execa: 5.1.1 + invariant: 2.2.4 + metro: 0.81.2 + metro-config: 0.81.2 + metro-core: 0.81.2 + node-fetch: 2.7.0 + readline: 1.3.0 + semver: 7.7.1 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@react-native/debugger-frontend@0.76.9': {} + + '@react-native/dev-middleware@0.76.9': + dependencies: + '@isaacs/ttlcache': 1.4.1 + '@react-native/debugger-frontend': 0.76.9 + chrome-launcher: 0.15.2 + chromium-edge-launcher: 0.2.0 + connect: 3.7.0 + debug: 2.6.9 + invariant: 2.2.4 + nullthrows: 1.1.1 + open: 7.4.2 + selfsigned: 2.4.1 + serve-static: 1.16.2 + ws: 6.2.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@react-native/gradle-plugin@0.76.9': {} + + '@react-native/js-polyfills@0.76.9': {} + + '@react-native/metro-babel-transformer@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))': + dependencies: + '@babel/core': 7.26.9 + '@react-native/babel-preset': 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + hermes-parser: 0.23.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + + '@react-native/normalize-colors@0.74.89': {} + + '@react-native/normalize-colors@0.76.8': {} + + '@react-native/normalize-colors@0.76.9': {} + + '@react-native/virtualized-lists@0.76.9(@types/react@18.3.18)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + invariant: 2.2.4 + nullthrows: 1.1.1 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + + '@react-navigation/bottom-tabs@7.2.0(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-navigation/elements': 2.2.5(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/native': 7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + color: 4.2.3 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-native-safe-area-context: 4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-screens: 4.4.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - '@react-native-masked-view/masked-view' + + '@react-navigation/core@7.3.1(react@18.3.1)': + dependencies: + '@react-navigation/routers': 7.1.2 + escape-string-regexp: 4.0.0 + nanoid: 3.3.8 + query-string: 7.1.3 + react: 18.3.1 + react-is: 18.3.1 + use-latest-callback: 0.2.3(react@18.3.1) + use-sync-external-store: 1.4.0(react@18.3.1) + + '@react-navigation/elements@2.2.5(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-navigation/native': 7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + color: 4.2.3 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-native-safe-area-context: 4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + '@react-navigation/native-stack@7.2.0(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-navigation/elements': 2.2.5(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/native': 7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-native-safe-area-context: 4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-screens: 4.4.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + warn-once: 0.1.1 + transitivePeerDependencies: + - '@react-native-masked-view/masked-view' + + '@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-navigation/core': 7.3.1(react@18.3.1) + escape-string-regexp: 4.0.0 + fast-deep-equal: 3.1.3 + nanoid: 3.3.8 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + use-latest-callback: 0.2.3(react@18.3.1) + + '@react-navigation/routers@7.1.2': + dependencies: + nanoid: 3.3.8 + + '@react-stately/calendar@3.7.0(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/calendar': 3.6.0(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/checkbox@3.6.11(react@18.3.1)': + dependencies: + '@react-stately/form': 3.1.1(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/checkbox': 3.9.1(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/collections@3.12.1(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/color@3.8.2(react@18.3.1)': + dependencies: + '@internationalized/number': 3.6.0 + '@internationalized/string': 3.2.5 + '@react-stately/form': 3.1.1(react@18.3.1) + '@react-stately/numberfield': 3.9.9(react@18.3.1) + '@react-stately/slider': 3.6.1(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/color': 3.0.2(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/combobox@3.10.2(react@18.3.1)': + dependencies: + '@react-stately/collections': 3.12.1(react@18.3.1) + '@react-stately/form': 3.1.1(react@18.3.1) + '@react-stately/list': 3.11.2(react@18.3.1) + '@react-stately/overlays': 3.6.13(react@18.3.1) + '@react-stately/select': 3.6.10(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/combobox': 3.13.2(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/data@3.12.1(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/datepicker@3.12.0(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@internationalized/string': 3.2.5 + '@react-stately/form': 3.1.1(react@18.3.1) + '@react-stately/overlays': 3.6.13(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/datepicker': 3.10.0(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/disclosure@3.0.1(react@18.3.1)': + dependencies: + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/dnd@3.5.1(react@18.3.1)': + dependencies: + '@react-stately/selection': 3.19.0(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/flags@3.0.5': + dependencies: + '@swc/helpers': 0.5.15 + + '@react-stately/form@3.1.1(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/grid@3.10.1(react@18.3.1)': + dependencies: + '@react-stately/collections': 3.12.1(react@18.3.1) + '@react-stately/selection': 3.19.0(react@18.3.1) + '@react-types/grid': 3.2.11(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/list@3.11.2(react@18.3.1)': + dependencies: + '@react-stately/collections': 3.12.1(react@18.3.1) + '@react-stately/selection': 3.19.0(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/menu@3.9.1(react@18.3.1)': + dependencies: + '@react-stately/overlays': 3.6.13(react@18.3.1) + '@react-types/menu': 3.9.14(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/numberfield@3.9.9(react@18.3.1)': + dependencies: + '@internationalized/number': 3.6.0 + '@react-stately/form': 3.1.1(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/numberfield': 3.8.8(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/overlays@3.6.13(react@18.3.1)': + dependencies: + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/overlays': 3.8.12(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/radio@3.10.10(react@18.3.1)': + dependencies: + '@react-stately/form': 3.1.1(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/radio': 3.8.6(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/searchfield@3.5.9(react@18.3.1)': + dependencies: + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/searchfield': 3.5.11(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/select@3.6.10(react@18.3.1)': + dependencies: + '@react-stately/form': 3.1.1(react@18.3.1) + '@react-stately/list': 3.11.2(react@18.3.1) + '@react-stately/overlays': 3.6.13(react@18.3.1) + '@react-types/select': 3.9.9(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/selection@3.19.0(react@18.3.1)': + dependencies: + '@react-stately/collections': 3.12.1(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/slider@3.6.1(react@18.3.1)': + dependencies: + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@react-types/slider': 3.7.8(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/table@3.13.1(react@18.3.1)': + dependencies: + '@react-stately/collections': 3.12.1(react@18.3.1) + '@react-stately/flags': 3.0.5 + '@react-stately/grid': 3.10.1(react@18.3.1) + '@react-stately/selection': 3.19.0(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/grid': 3.2.11(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@react-types/table': 3.10.4(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/tabs@3.7.1(react@18.3.1)': + dependencies: + '@react-stately/list': 3.11.2(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@react-types/tabs': 3.3.12(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/toggle@3.8.1(react@18.3.1)': + dependencies: + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/checkbox': 3.9.1(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/tooltip@3.5.1(react@18.3.1)': + dependencies: + '@react-stately/overlays': 3.6.13(react@18.3.1) + '@react-types/tooltip': 3.4.14(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/tree@3.8.7(react@18.3.1)': + dependencies: + '@react-stately/collections': 3.12.1(react@18.3.1) + '@react-stately/selection': 3.19.0(react@18.3.1) + '@react-stately/utils': 3.10.5(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-stately/utils@3.10.5(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.15 + react: 18.3.1 + + '@react-types/button@3.10.2(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/calendar@3.6.0(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/checkbox@3.9.1(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/color@3.0.2(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + '@react-types/slider': 3.7.8(react@18.3.1) + react: 18.3.1 + + '@react-types/combobox@3.13.2(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/datepicker@3.10.0(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@react-types/calendar': 3.6.0(react@18.3.1) + '@react-types/overlays': 3.8.12(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/dialog@3.5.15(react@18.3.1)': + dependencies: + '@react-types/overlays': 3.8.12(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/grid@3.2.11(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/menu@3.9.14(react@18.3.1)': + dependencies: + '@react-types/overlays': 3.8.12(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/numberfield@3.8.8(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/overlays@3.8.12(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/radio@3.8.6(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/searchfield@3.5.11(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + '@react-types/textfield': 3.11.0(react@18.3.1) + react: 18.3.1 + + '@react-types/select@3.9.9(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/shared@3.27.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@react-types/slider@3.7.8(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/table@3.10.4(react@18.3.1)': + dependencies: + '@react-types/grid': 3.2.11(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/tabs@3.3.12(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/textfield@3.11.0(react@18.3.1)': + dependencies: + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@react-types/tooltip@3.4.14(react@18.3.1)': + dependencies: + '@react-types/overlays': 3.8.12(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + '@rnmapbox/maps@10.1.37(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(mapbox-gl@3.10.0)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@turf/along': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/length': 6.5.0 + '@turf/nearest-point-on-line': 6.5.0 + '@types/geojson': 7946.0.16 + debounce: 1.2.1 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + mapbox-gl: 3.10.0 + react-dom: 18.3.1(react@18.3.1) + + '@rtsao/scc@1.1.0': {} + + '@samverschueren/stream-to-observable@0.3.1(rxjs@6.6.7)': + dependencies: + any-observable: 0.3.0(rxjs@6.6.7) + optionalDependencies: + rxjs: 6.6.7 + transitivePeerDependencies: + - zenObservable + + '@segment/loosely-validate-event@2.0.0': + dependencies: + component-type: 1.2.2 + join-component: 1.1.0 + + '@sentry-internal/browser-utils@8.54.0': + dependencies: + '@sentry/core': 8.54.0 + + '@sentry-internal/feedback@8.54.0': + dependencies: + '@sentry/core': 8.54.0 + + '@sentry-internal/replay-canvas@8.54.0': + dependencies: + '@sentry-internal/replay': 8.54.0 + '@sentry/core': 8.54.0 + + '@sentry-internal/replay@8.54.0': + dependencies: + '@sentry-internal/browser-utils': 8.54.0 + '@sentry/core': 8.54.0 + + '@sentry/babel-plugin-component-annotate@3.2.2': {} + + '@sentry/browser@8.54.0': + dependencies: + '@sentry-internal/browser-utils': 8.54.0 + '@sentry-internal/feedback': 8.54.0 + '@sentry-internal/replay': 8.54.0 + '@sentry-internal/replay-canvas': 8.54.0 + '@sentry/core': 8.54.0 + + '@sentry/cli-darwin@2.42.4': + optional: true + + '@sentry/cli-linux-arm64@2.42.4': + optional: true + + '@sentry/cli-linux-arm@2.42.4': + optional: true + + '@sentry/cli-linux-i686@2.42.4': + optional: true + + '@sentry/cli-linux-x64@2.42.4': + optional: true + + '@sentry/cli-win32-i686@2.42.4': + optional: true + + '@sentry/cli-win32-x64@2.42.4': + optional: true + + '@sentry/cli@2.42.4': + dependencies: + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + optionalDependencies: + '@sentry/cli-darwin': 2.42.4 + '@sentry/cli-linux-arm': 2.42.4 + '@sentry/cli-linux-arm64': 2.42.4 + '@sentry/cli-linux-i686': 2.42.4 + '@sentry/cli-linux-x64': 2.42.4 + '@sentry/cli-win32-i686': 2.42.4 + '@sentry/cli-win32-x64': 2.42.4 + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/core@8.54.0': {} + + '@sentry/react-native@6.10.0(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@sentry/babel-plugin-component-annotate': 3.2.2 + '@sentry/browser': 8.54.0 + '@sentry/cli': 2.42.4 + '@sentry/core': 8.54.0 + '@sentry/react': 8.54.0(react@18.3.1) + '@sentry/types': 8.54.0 + '@sentry/utils': 8.54.0 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/react@8.54.0(react@18.3.1)': + dependencies: + '@sentry/browser': 8.54.0 + '@sentry/core': 8.54.0 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + + '@sentry/types@8.54.0': + dependencies: + '@sentry/core': 8.54.0 + + '@sentry/utils@8.54.0': + dependencies: + '@sentry/core': 8.54.0 + + '@shopify/flash-list@1.7.3(@babel/runtime@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.9 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + recyclerlistview: 4.2.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + tslib: 2.8.1 + + '@sinclair/typebox@0.27.8': {} + + '@sindresorhus/merge-streams@2.3.0': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@socket.io/component-emitter@3.1.2': {} + + '@solid-primitives/props@3.2.0(solid-js@1.9.5)': + dependencies: + '@solid-primitives/utils': 6.3.0(solid-js@1.9.5) + solid-js: 1.9.5 + + '@solid-primitives/refs@1.1.0(solid-js@1.9.5)': + dependencies: + '@solid-primitives/utils': 6.3.0(solid-js@1.9.5) + solid-js: 1.9.5 + + '@solid-primitives/transition-group@1.1.0(solid-js@1.9.5)': + dependencies: + solid-js: 1.9.5 + + '@solid-primitives/utils@6.3.0(solid-js@1.9.5)': + dependencies: + solid-js: 1.9.5 + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@tanstack/query-core@5.66.11': {} + + '@tanstack/react-query@5.66.11(react@18.3.1)': + dependencies: + '@tanstack/query-core': 5.66.11 + react: 18.3.1 + + '@testing-library/jest-dom@6.6.3': + dependencies: + '@adobe/css-tools': 4.4.2 + aria-query: 5.3.2 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + + '@testing-library/react-native@12.9.0(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + jest-matcher-utils: 29.7.0 + pretty-format: 29.7.0 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-test-renderer: 18.3.1(react@18.3.1) + redent: 3.0.0 + optionalDependencies: + jest: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + + '@tokenizer/token@0.3.0': {} + + '@tootallnate/once@2.0.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@turf/along@6.5.0': + dependencies: + '@turf/bearing': 6.5.0 + '@turf/destination': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + + '@turf/bbox@7.2.0': + dependencies: + '@turf/helpers': 7.2.0 + '@turf/meta': 7.2.0 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/bearing@6.5.0': + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + + '@turf/destination@6.5.0': + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + + '@turf/distance@6.5.0': + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + + '@turf/helpers@6.5.0': {} + + '@turf/helpers@7.2.0': + dependencies: + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/invariant@6.5.0': + dependencies: + '@turf/helpers': 6.5.0 + + '@turf/length@6.5.0': + dependencies: + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + + '@turf/line-intersect@6.5.0': + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/line-segment': 6.5.0 + '@turf/meta': 6.5.0 + geojson-rbush: 3.2.0 + + '@turf/line-segment@6.5.0': + dependencies: + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/meta': 6.5.0 + + '@turf/meta@6.5.0': + dependencies: + '@turf/helpers': 6.5.0 + + '@turf/meta@7.2.0': + dependencies: + '@turf/helpers': 7.2.0 + '@types/geojson': 7946.0.16 + + '@turf/nearest-point-on-line@6.5.0': + dependencies: + '@turf/bearing': 6.5.0 + '@turf/destination': 6.5.0 + '@turf/distance': 6.5.0 + '@turf/helpers': 6.5.0 + '@turf/invariant': 6.5.0 + '@turf/line-intersect': 6.5.0 + '@turf/meta': 6.5.0 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.3 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.27.3 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.3 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.27.3 + + '@types/conventional-commits-parser@5.0.1': + dependencies: + '@types/node': 22.13.5 + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.7 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.7 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.7': {} + + '@types/geojson-vt@3.2.5': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/geojson@7946.0.16': {} + + '@types/geojson@7946.0.8': {} + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 22.13.5 + + '@types/hammerjs@2.0.46': {} + + '@types/i18n-js@3.8.9': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/jsdom@20.0.1': + dependencies: + '@types/node': 22.13.5 + '@types/tough-cookie': 4.0.5 + parse5: 7.2.1 + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/lodash.memoize@4.1.9': + dependencies: + '@types/lodash': 4.17.15 + + '@types/lodash@4.17.15': {} + + '@types/mapbox__point-geometry@0.1.4': {} + + '@types/mapbox__vector-tile@1.3.4': + dependencies: + '@types/geojson': 7946.0.16 + '@types/mapbox__point-geometry': 0.1.4 + '@types/pbf': 3.0.5 + + '@types/node-forge@1.3.11': + dependencies: + '@types/node': 22.13.5 + + '@types/node@16.9.1': {} + + '@types/node@22.13.5': + dependencies: + undici-types: 6.20.0 + + '@types/normalize-package-data@2.4.4': {} + + '@types/pbf@3.0.5': {} + + '@types/prop-types@15.7.14': {} + + '@types/react-native-base64@0.2.2': {} + + '@types/react-native@0.73.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)': + dependencies: + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - '@react-native-community/cli' + - '@types/react' + - bufferutil + - encoding + - react + - supports-color + - utf-8-validate + + '@types/react@18.3.18': + dependencies: + '@types/prop-types': 15.7.14 + csstype: 3.1.3 + + '@types/semver@7.5.8': {} + + '@types/stack-utils@2.0.3': {} + + '@types/strip-bom@3.0.0': {} + + '@types/strip-json-comments@0.0.30': {} + + '@types/supercluster@7.1.3': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/tough-cookie@4.0.5': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.2) + debug: 4.4.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare-lite: 1.4.0 + semver: 7.7.1 + tsutils: 3.21.0(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.4.3(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.2)': + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.2) + debug: 4.4.0 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2)': + dependencies: + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.4.1 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + + '@typescript-eslint/scope-manager@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.8.2)': + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.2) + debug: 4.4.1 + eslint: 8.57.1 + tsutils: 3.21.0(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.8.2)': + dependencies: + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.2) + debug: 4.4.1 + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@5.62.0': {} + + '@typescript-eslint/types@7.18.0': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.2)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.4.1 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.7.1 + tsutils: 3.21.0(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.8.2)': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.4.1 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 1.4.3(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.8.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.2) + eslint: 8.57.1 + eslint-scope: 5.1.1 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.8.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.2) + eslint: 8.57.1 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.3.0': {} + + '@urql/core@5.1.0': + dependencies: + '@0no-co/graphql.web': 1.1.1 + wonka: 6.3.4 + transitivePeerDependencies: + - graphql + + '@urql/exchange-retry@1.3.0(@urql/core@5.1.0)': + dependencies: + '@urql/core': 5.1.0 + wonka: 6.3.4 + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + 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 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + 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 + + '@webassemblyjs/wasm-gen@1.14.1': + 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 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + 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 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xmldom/xmldom@0.7.13': {} + + '@xmldom/xmldom@0.8.10': {} + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + '@yarnpkg/lockfile@1.1.0': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + abab@2.0.6: {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-globals@7.0.1: + dependencies: + acorn: 8.14.0 + acorn-walk: 8.3.4 + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn-loose@8.4.0: + dependencies: + acorn: 8.14.1 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + acorn@8.14.1: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.11.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + anser@1.4.10: {} + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-escapes@3.2.0: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@5.0.0: + dependencies: + type-fest: 1.4.0 + + ansi-escapes@6.2.1: {} + + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + + ansi-regex@2.1.1: {} + + ansi-regex@3.0.1: {} + + ansi-regex@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@2.2.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + any-base@1.1.0: {} + + any-observable@0.3.0(rxjs@6.6.7): + optionalDependencies: + rxjs: 6.6.7 + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + app-icon-badge@0.1.2: + dependencies: + color-convert: 2.0.1 + commander: 11.1.0 + delta-e: 0.0.8 + jimp: 0.22.12 + transitivePeerDependencies: + - debug + - encoding + + application-config-path@0.1.1: {} + + arg@4.1.3: {} + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.3 + is-array-buffer: 3.0.5 + + array-ify@1.0.0: {} + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + + array-timsort@1.0.3: {} + + array-union@2.1.0: {} + + array.prototype.at@1.1.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.findlastindex@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.1.0 + + array.prototype.map@1.0.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-array-method-boxes-properly: 1.0.0 + es-object-atoms: 1.1.1 + is-string: 1.1.1 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + asap@2.0.6: {} + + assert@2.1.0: + dependencies: + call-bind: 1.0.8 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.7 + util: 0.12.5 + + ast-types@0.15.2: + dependencies: + tslib: 2.8.1 + + async-function@1.0.0: {} + + async-limiter@1.0.1: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + atomically@2.0.3: + dependencies: + stubborn-fs: 1.2.5 + when-exit: 2.1.4 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axios@1.8.1: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + babel-core@7.0.0-bridge.0(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + + babel-jest@29.7.0(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.9) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.27.1 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.27.3 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-plugin-module-resolver@5.0.2: + dependencies: + find-babel-config: 2.1.2 + glob: 9.3.5 + pkg-up: 3.1.0 + reselect: 4.1.8 + resolve: 1.22.10 + + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.9): + dependencies: + '@babel/compat-data': 7.27.5 + '@babel/core': 7.26.9 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.9) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.9) + core-js-compat: 3.42.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.9) + core-js-compat: 3.42.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.9) + transitivePeerDependencies: + - supports-color + + babel-plugin-react-native-web@0.19.13: {} + + babel-plugin-syntax-hermes-parser@0.23.1: + dependencies: + hermes-parser: 0.23.1 + + babel-plugin-syntax-hermes-parser@0.25.1: + dependencies: + hermes-parser: 0.25.1 + + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.26.9): + dependencies: + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.9) + transitivePeerDependencies: + - '@babel/core' + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.9) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.9) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.9) + + babel-preset-expo@12.0.11(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)): + dependencies: + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-object-rest-spread': 7.27.3(@babel/core@7.26.9) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.26.9) + '@babel/preset-react': 7.26.3(@babel/core@7.26.9) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9) + '@react-native/babel-preset': 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + babel-plugin-react-native-web: 0.19.13 + react-refresh: 0.14.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - supports-color + + babel-preset-jest@29.6.3(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) + + badgin@1.2.3: {} + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + better-opn@3.0.2: + dependencies: + open: 8.4.2 + + big-integer@1.6.52: {} + + binary-extensions@2.3.0: {} + + bmp-js@0.1.0: {} + + boolbase@1.0.0: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.4.1 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.35.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.0 + + bplist-creator@0.0.7: + dependencies: + stream-buffers: 2.2.0 + + bplist-creator@0.1.0: + dependencies: + stream-buffers: 2.2.0 + + bplist-parser@0.3.1: + dependencies: + big-integer: 1.6.52 + + bplist-parser@0.3.2: + dependencies: + big-integer: 1.6.52 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001701 + electron-to-chromium: 1.5.109 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-alloc-unsafe@1.1.0: {} + + buffer-alloc@1.2.0: + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + + buffer-equal@0.0.1: {} + + buffer-fill@1.0.0: {} + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + builtin-modules@3.3.0: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + bytes@3.1.2: {} + + cacache@18.0.4: + dependencies: + '@npmcli/fs': 3.1.1 + fs-minipass: 3.0.3 + glob: 10.4.5 + lru-cache: 10.4.3 + minipass: 7.1.2 + minipass-collect: 2.0.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 4.0.0 + ssri: 10.0.6 + tar: 6.2.1 + unique-filename: 3.0.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + caller-callsite@2.0.0: + dependencies: + callsites: 2.0.0 + + caller-path@2.0.0: + dependencies: + caller-callsite: 2.0.0 + + callsites@2.0.0: {} + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + camelcase@8.0.0: {} + + caniuse-lite@1.0.30001701: {} + + centra@2.7.0: + dependencies: + follow-redirects: 1.15.9 + transitivePeerDependencies: + - debug + + chalk-template@1.1.0: + dependencies: + chalk: 5.4.1 + + chalk@1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.4.1: {} + + char-regex@1.0.2: {} + + char-regex@2.0.2: {} + + chardet@0.7.0: {} + + charenc@0.0.2: {} + + cheap-ruler@4.0.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@2.0.0: {} + + chrome-launcher@0.15.2: + dependencies: + '@types/node': 22.13.5 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + transitivePeerDependencies: + - supports-color + + chrome-trace-event@1.0.4: {} + + chromium-edge-launcher@0.2.0: + dependencies: + '@types/node': 22.13.5 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + mkdirp: 1.0.4 + rimraf: 3.0.2 + transitivePeerDependencies: + - supports-color + + ci-info@2.0.0: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.3: {} + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + clean-regexp@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + clean-stack@2.2.0: {} + + cli-boxes@3.0.0: {} + + cli-cursor@2.1.0: + dependencies: + restore-cursor: 2.0.0 + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-truncate@0.2.1: + dependencies: + slice-ansi: 0.0.4 + string-width: 1.0.2 + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cli-width@2.2.1: {} + + cli-width@3.0.0: {} + + cli-width@4.1.0: {} + + client-only@0.0.1: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + + clone@1.0.4: {} + + clsx@2.1.1: {} + + co@4.6.0: {} + + code-point-at@1.1.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + command-exists@1.2.9: {} + + commander@11.1.0: {} + + commander@12.1.0: {} + + commander@13.1.0: {} + + commander@2.20.3: {} + + commander@4.1.1: {} + + commander@7.2.0: {} + + comment-json@4.2.5: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + + commondir@1.0.1: {} + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + + component-type@1.2.2: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.53.0 + + compression@1.8.0: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.0.2 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + concat-map@0.0.1: {} + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + configstore@7.0.0: + dependencies: + atomically: 2.0.3 + dot-prop: 9.0.0 + graceful-fs: 4.2.11 + xdg-basedir: 5.1.0 + + connect@3.7.0: + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-conventionalcommits@7.0.2: + dependencies: + compare-func: 2.0.0 + + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + + convert-source-map@2.0.0: {} + + core-js-compat@3.42.0: + dependencies: + browserslist: 4.24.4 + + core-util-is@1.0.3: {} + + cosmiconfig-typescript-loader@6.1.0(@types/node@22.13.5)(cosmiconfig@9.0.0(typescript@5.8.2))(typescript@5.8.2): + dependencies: + '@types/node': 22.13.5 + cosmiconfig: 9.0.0(typescript@5.8.2) + jiti: 2.4.2 + typescript: 5.8.2 + + cosmiconfig@5.2.1: + dependencies: + import-fresh: 2.0.0 + is-directory: 0.3.1 + js-yaml: 3.14.1 + parse-json: 4.0.0 + + cosmiconfig@8.3.6(typescript@5.8.2): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.8.2 + + cosmiconfig@9.0.0(typescript@5.8.2): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.8.2 + + create-jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.6 + + cross-fetch@3.2.0: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypt@0.0.2: {} + + crypto-random-string@2.0.0: {} + + css-in-js-utils@3.1.0: + dependencies: + hyphenate-style-name: 1.1.0 + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-what@6.1.0: {} + + css.escape@1.5.1: {} + + csscolorparser@1.0.3: {} + + cssesc@3.0.0: {} + + cssom@0.3.8: {} + + cssom@0.5.0: {} + + cssstyle@2.3.0: + dependencies: + cssom: 0.3.8 + + csstype@3.1.3: {} + + dargs@8.1.0: {} + + data-urls@3.0.2: + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + date-fns@1.30.1: {} + + debounce@1.2.1: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + debug@4.4.1: + dependencies: + ms: 2.1.3 + + decimal.js@10.5.0: {} + + decode-uri-component@0.2.2: {} + + dedent@1.5.3: {} + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + default-gateway@4.2.0: + dependencies: + execa: 1.0.0 + ip-regex: 2.1.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@2.0.0: {} + + define-lazy-prop@3.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + del@6.1.1: + dependencies: + globby: 11.1.0 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 4.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + + del@8.0.0: + dependencies: + globby: 14.1.0 + is-glob: 4.0.3 + is-path-cwd: 3.0.0 + is-path-inside: 4.0.0 + p-map: 7.0.3 + slash: 5.1.0 + + delayed-stream@1.0.0: {} + + delta-e@0.0.8: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-libc@1.0.3: {} + + detect-newline@3.1.0: {} + + didyoumean@1.2.2: {} + + diff-sequences@29.6.3: {} + + diff@3.5.0: {} + + diff@4.0.2: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dlv@1.1.3: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-accessibility-api@0.6.3: {} + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.26.9 + csstype: 3.1.3 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + dom-walk@0.1.2: {} + + domelementtype@2.3.0: {} + + domexception@4.0.0: + dependencies: + webidl-conversions: 7.0.0 + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dot-prop@9.0.0: + dependencies: + type-fest: 4.35.0 + + dotenv-expand@11.0.7: + dependencies: + dotenv: 16.4.7 + + dotenv@16.4.7: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + earcut@3.0.1: {} + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.109: {} + + elegant-spinner@1.0.1: {} + + emittery@0.13.1: {} + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + engine.io-client@6.5.4: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-parser: 5.2.3 + ws: 8.17.1 + xmlhttprequest-ssl: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + engine.io-parser@5.2.3: {} + + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + entities@4.5.0: {} + + env-editor@0.4.2: {} + + env-paths@2.2.1: {} + + environment@1.1.0: {} + + eol@0.9.1: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + error-stack-parser@2.1.4: + dependencies: + stackframe: 1.3.4 + + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 + + es-array-method-boxes-properly@1.0.0: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-get-iterator@1.1.3: + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + is-arguments: 1.2.0 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.1.1 + isarray: 2.0.5 + stop-iteration-iterator: 1.1.0 + + es-iterator-helpers@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 + + es-module-lexer@1.7.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + escalade@3.2.0: {} + + escape-goat@4.0.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-config-expo@7.1.2(eslint@8.57.1)(typescript@5.8.2): + dependencies: + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.8.2) + eslint: 8.57.1 + eslint-import-resolver-typescript: 3.8.3(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-plugin-expo: 0.0.1(eslint@8.57.1)(typescript@5.8.2) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3)(eslint@8.57.1) + eslint-plugin-react: 7.37.4(eslint@8.57.1) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + - typescript + + eslint-config-prettier@9.1.0(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0)(eslint@8.57.1): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.0 + enhanced-resolve: 5.18.1 + eslint: 8.57.1 + get-tsconfig: 4.10.0 + is-bun-module: 1.3.0 + stable-hash: 0.0.4 + tinyglobby: 0.2.12 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3)(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.3)(eslint@8.57.1): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.8.2) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.8.3(eslint-plugin-import@2.31.0)(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.3)(eslint@8.57.1): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.8.2) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.8.3(eslint-plugin-import@2.31.0)(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-plugin-expo@0.0.1(eslint@8.57.1)(typescript@5.8.2): + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.2) + eslint: 8.57.1 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-i18n-json@4.0.1(eslint@8.57.1): + dependencies: + '@formatjs/icu-messageformat-parser': 2.11.1 + chalk: 2.4.2 + eslint: 8.57.1 + indent-string: 3.2.0 + jest-diff: 22.4.3 + lodash: 4.17.21 + log-symbols: 2.2.0 + parse-json: 5.2.0 + plur: 2.1.2 + pretty-format: 22.4.3 + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3)(eslint@8.57.1): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.3)(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.8.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.8.3)(eslint@8.57.1): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.3)(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.8.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-prettier@5.2.3(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.5.2): + dependencies: + eslint: 8.57.1 + prettier: 3.5.2 + prettier-linter-helpers: 1.0.0 + synckit: 0.9.2 + optionalDependencies: + '@types/eslint': 9.6.1 + eslint-config-prettier: 9.1.0(eslint@8.57.1) + + eslint-plugin-react-compiler@19.0.0-beta-a7bf2bd-20241110(eslint@8.57.1): + dependencies: + '@babel/core': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.26.9) + eslint: 8.57.1 + hermes-parser: 0.20.1 + zod: 3.24.2 + zod-validation-error: 3.4.0(zod@3.24.2) + transitivePeerDependencies: + - supports-color + + eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-react@7.37.4(eslint@8.57.1): + 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 + eslint: 8.57.1 + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-plugin-simple-import-sort@10.0.0(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-tailwindcss@3.18.0(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))): + dependencies: + fast-glob: 3.3.3 + postcss: 8.5.3 + tailwindcss: 3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + + eslint-plugin-testing-library@6.5.0(eslint@8.57.1)(typescript@5.8.2): + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.2) + eslint: 8.57.1 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-unicorn@46.0.1(eslint@8.57.1): + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.57.1 + esquery: 1.6.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.1.0 + lodash: 4.17.21 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.9.1 + safe-regex: 2.1.1 + semver: 7.7.1 + strip-indent: 3.0.0 + + eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + eslint-rule-composer: 0.3.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2) + + eslint-rule-composer@0.3.0: {} + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + 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.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + 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.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 3.4.3 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + + event-target-shim@6.0.2: {} + + eventemitter3@5.0.1: {} + + events@3.3.0: {} + + eventsource@2.0.2: {} + + exec-async@2.2.0: {} + + execa@1.0.0: + dependencies: + cross-spawn: 6.0.6 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + exif-parser@0.1.12: {} + + exit-hook@4.0.0: {} + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + expo-application@6.0.2(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + expo-asset@11.0.5(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + '@expo/image-utils': 0.6.5 + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-constants: 17.0.8(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + invariant: 2.2.4 + md5-file: 3.2.3 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - supports-color + + expo-build-properties@0.13.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + ajv: 8.17.1 + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + semver: 7.7.1 + + expo-constants@17.0.8(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)): + dependencies: + '@expo/config': 10.0.11 + '@expo/env': 0.4.2 + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - supports-color + + expo-dev-client@5.0.20(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-dev-launcher: 5.0.35(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-dev-menu: 6.0.25(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-dev-menu-interface: 1.9.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-manifests: 0.15.8(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-updates-interface: 1.0.0(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + transitivePeerDependencies: + - supports-color + + expo-dev-launcher@5.0.35(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + ajv: 8.11.0 + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-dev-menu: 6.0.25(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-manifests: 0.15.8(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + resolve-from: 5.0.0 + transitivePeerDependencies: + - supports-color + + expo-dev-menu-interface@1.9.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + expo-dev-menu@6.0.25(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-dev-menu-interface: 1.9.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + + expo-device@7.0.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + ua-parser-js: 0.7.40 + + expo-document-picker@13.0.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + expo-file-system@18.0.12(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + web-streams-polyfill: 3.3.3 + + expo-font@13.0.4(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + fontfaceobserver: 2.3.0 + react: 18.3.1 + + expo-image-loader@5.0.0(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + expo-image-picker@16.0.6(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-image-loader: 5.0.0(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + + expo-image@2.0.7(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + react-native-web: 0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + + expo-json-utils@0.14.0: {} + + expo-keep-awake@14.0.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + expo-linking@7.0.5(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + expo-constants: 17.0.8(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + invariant: 2.2.4 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - expo + - supports-color + + expo-localization@16.0.1(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + rtl-detect: 1.1.2 + + expo-location@18.0.10(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + expo-manifests@0.15.8(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + '@expo/config': 10.0.11 + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-json-utils: 0.14.0 + transitivePeerDependencies: + - supports-color + + expo-modules-autolinking@2.0.8: + dependencies: + '@expo/spawn-async': 1.7.2 + chalk: 4.1.2 + commander: 7.2.0 + fast-glob: 3.3.3 + find-up: 5.0.0 + fs-extra: 9.1.0 + require-from-string: 2.0.2 + resolve-from: 5.0.0 + + expo-modules-core@2.2.3: + dependencies: + invariant: 2.2.4 + + expo-notifications@0.29.14(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + '@expo/image-utils': 0.6.5 + '@ide/backoff': 1.0.0 + abort-controller: 3.0.0 + assert: 2.1.0 + badgin: 1.2.3 + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-application: 6.0.2(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-constants: 17.0.8(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - supports-color + + expo-router@4.0.21(jhxu6vzpdvlfrcgtrfkrbypob4): + dependencies: + '@expo/metro-runtime': 4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + '@expo/server': 0.5.3 + '@radix-ui/react-slot': 1.0.1(react@18.3.1) + '@react-navigation/bottom-tabs': 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/native': 7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + '@react-navigation/native-stack': 7.2.0(@react-navigation/native@7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-screens@4.4.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + client-only: 0.0.1 + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-constants: 17.0.8(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + expo-linking: 7.0.5(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-native-helmet-async: 2.0.4(react@18.3.1) + react-native-is-edge-to-edge: 1.1.6(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-safe-area-context: 4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-screens: 4.4.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + schema-utils: 4.3.2 + semver: 7.6.3 + server-only: 0.0.1 + optionalDependencies: + react-native-reanimated: 3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - '@react-native-masked-view/masked-view' + - react + - react-dom + - react-native + - supports-color + + expo-screen-orientation@8.0.4(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + expo-sharing@13.0.1(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + expo-splash-screen@0.29.24(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + '@expo/prebuild-config': 8.2.0 + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - supports-color + + expo-status-bar@2.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + expo-system-ui@4.0.9(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)): + dependencies: + '@react-native/normalize-colors': 0.76.8 + debug: 4.4.1 + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + optionalDependencies: + react-native-web: 0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - supports-color + + expo-task-manager@12.0.6(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + unimodules-app-loader: 5.0.1 + + expo-updates-interface@1.0.0(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)): + dependencies: + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.9 + '@expo/cli': 0.22.26 + '@expo/config': 10.0.11 + '@expo/config-plugins': 9.0.17 + '@expo/fingerprint': 0.11.11 + '@expo/metro-config': 0.19.12 + '@expo/vector-icons': 14.0.4 + babel-preset-expo: 12.0.11(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + expo-asset: 11.0.5(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-constants: 17.0.8(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + expo-file-system: 18.0.12(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + expo-font: 13.0.4(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) + expo-keep-awake: 14.0.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) + expo-modules-autolinking: 2.0.8 + expo-modules-core: 2.2.3 + fbemitter: 3.0.0 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + web-streams-polyfill: 3.3.3 + whatwg-url-without-unicode: 8.0.0-3 + optionalDependencies: + '@expo/metro-runtime': 4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + react-native-webview: 13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - babel-plugin-react-compiler + - bufferutil + - encoding + - graphql + - react-compiler-runtime + - supports-color + - utf-8-validate + + exponential-backoff@3.1.2: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-loops@1.1.4: {} + + fast-uri@3.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + fbemitter@3.0.0: + dependencies: + fbjs: 3.0.5 + transitivePeerDependencies: + - encoding + + fbjs-css-vars@1.0.2: {} + + fbjs@3.0.5: + dependencies: + cross-fetch: 3.2.0 + fbjs-css-vars: 1.0.2 + loose-envify: 1.4.0 + object-assign: 4.1.1 + promise: 7.3.1 + setimmediate: 1.0.5 + ua-parser-js: 1.0.40 + transitivePeerDependencies: + - encoding + + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fetch-cookie@2.2.0: + dependencies: + set-cookie-parser: 2.7.1 + tough-cookie: 4.1.4 + + fetch-retry@4.1.1: {} + + figures@1.7.0: + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + + figures@2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + file-type@16.5.4: + dependencies: + readable-web-to-node-stream: 3.0.4 + strtok3: 6.3.0 + token-types: 4.2.1 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + filter-obj@1.1.0: {} + + finalhandler@1.1.2: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-babel-config@2.1.2: + dependencies: + json5: 2.2.3 + + find-cache-dir@2.1.0: + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + + find-up-simple@1.0.0: {} + + find-up@3.0.0: + dependencies: + locate-path: 3.0.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + + find-yarn-workspace-root@2.0.0: + dependencies: + micromatch: 4.0.8 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.3: {} + + flow-enums-runtime@0.0.6: {} + + flow-parser@0.262.0: {} + + follow-redirects@1.15.9: {} + + fontfaceobserver@2.3.0: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@3.0.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + framer-motion@6.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@motionone/dom': 10.12.0 + framesync: 6.0.1 + hey-listen: 1.0.8 + popmotion: 11.0.3 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + style-value-types: 5.0.0 + tslib: 2.8.1 + optionalDependencies: + '@emotion/is-prop-valid': 0.8.8 + + framesync@6.0.1: + dependencies: + tslib: 2.8.1 + + freeport-async@2.0.0: {} + + fresh@0.5.2: {} + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.0.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 1.0.0 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs-minipass@3.0.3: + dependencies: + minipass: 7.1.2 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + geojson-rbush@3.2.0: + dependencies: + '@turf/bbox': 7.2.0 + '@turf/helpers': 6.5.0 + '@turf/meta': 6.5.0 + '@types/geojson': 7946.0.8 + rbush: 3.0.1 + + geojson-vt@4.0.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-package-type@0.1.0: {} + + get-port@3.2.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@4.1.0: + dependencies: + pump: 3.0.2 + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + getenv@1.0.0: {} + + gifwrap@0.10.1: + dependencies: + image-q: 4.0.0 + omggif: 1.0.10 + + git-raw-commits@4.0.0: + dependencies: + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 + + github-url-from-git@1.5.0: {} + + gl-matrix@3.4.3: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@9.3.5: + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.11.1 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + global@4.4.0: + dependencies: + min-document: 2.19.0 + process: 0.11.10 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.3 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.10: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + grid-index@1.1.0: {} + + has-ansi@2.0.0: + dependencies: + ansi-regex: 2.1.1 + + has-bigints@1.1.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-own-prop@2.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hermes-estree@0.20.1: {} + + hermes-estree@0.23.1: {} + + hermes-estree@0.25.1: {} + + hermes-parser@0.20.1: + dependencies: + hermes-estree: 0.20.1 + + hermes-parser@0.23.1: + dependencies: + hermes-estree: 0.23.1 + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + + hey-listen@1.0.8: {} + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + hosted-git-info@2.8.9: {} + + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + + hosted-git-info@8.0.2: + dependencies: + lru-cache: 10.4.3 + + html-encoding-sniffer@3.0.0: + dependencies: + whatwg-encoding: 2.0.0 + + html-escaper@2.0.2: {} + + html-parse-stringify@3.0.1: + dependencies: + void-elements: 3.1.0 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + human-signals@5.0.0: {} + + hyphenate-style-name@1.1.0: {} + + i18next@23.16.8: + dependencies: + '@babel/runtime': 7.26.9 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore-walk@7.0.0: + dependencies: + minimatch: 9.0.5 + + ignore@5.3.2: {} + + ignore@7.0.3: {} + + image-q@4.0.0: + dependencies: + '@types/node': 16.9.1 + + image-size@1.2.0: + dependencies: + queue: 6.0.2 + + import-fresh@2.0.0: + dependencies: + caller-path: 2.0.0 + resolve-from: 3.0.0 + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + import-meta-resolve@4.1.0: {} + + imurmurhash@0.1.4: {} + + indent-string@3.2.0: {} + + indent-string@4.0.0: {} + + index-to-position@0.1.2: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@4.1.1: {} + + inline-style-prefixer@6.0.4: + dependencies: + css-in-js-utils: 3.1.0 + fast-loops: 1.1.4 + + inquirer-autosubmit-prompt@0.2.0: + dependencies: + chalk: 2.4.2 + inquirer: 6.5.2 + rxjs: 6.6.7 + + inquirer@12.4.2(@types/node@22.13.5): + dependencies: + '@inquirer/core': 10.1.7(@types/node@22.13.5) + '@inquirer/prompts': 7.3.2(@types/node@22.13.5) + '@inquirer/type': 3.0.4(@types/node@22.13.5) + ansi-escapes: 4.3.2 + mute-stream: 2.0.0 + run-async: 3.0.0 + rxjs: 7.8.2 + optionalDependencies: + '@types/node': 22.13.5 + + inquirer@6.5.2: + dependencies: + ansi-escapes: 3.2.0 + chalk: 2.4.2 + cli-cursor: 2.1.0 + cli-width: 2.2.1 + external-editor: 3.1.0 + figures: 2.0.0 + lodash: 4.17.21 + mute-stream: 0.0.7 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 2.1.1 + strip-ansi: 5.2.0 + through: 2.3.8 + + inquirer@7.3.3: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + + internal-ip@4.3.0: + dependencies: + default-gateway: 4.2.0 + ipaddr.js: 1.9.1 + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + intl-messageformat@10.7.15: + dependencies: + '@formatjs/ecma402-abstract': 2.3.3 + '@formatjs/fast-memoize': 2.2.6 + '@formatjs/icu-messageformat-parser': 2.11.1 + tslib: 2.8.1 + + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + + ip-regex@2.1.0: {} + + ipaddr.js@1.9.1: {} + + irregular-plurals@1.4.0: {} + + is-arguments@1.2.0: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-buffer@1.1.6: {} + + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + + is-bun-module@1.3.0: + dependencies: + semver: 7.7.1 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.3 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-directory@0.3.1: {} + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.3 + + is-fullwidth-code-point@1.0.0: + dependencies: + number-is-nan: 1.0.1 + + is-fullwidth-code-point@2.0.0: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + + is-function@1.0.2: {} + + is-generator-fn@2.1.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-in-ci@1.0.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-installed-globally@1.0.0: + dependencies: + global-directory: 4.0.1 + is-path-inside: 4.0.0 + + is-interactive@2.0.0: {} + + is-map@2.0.3: {} + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + + is-npm@6.0.0: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-observable@1.1.0: + dependencies: + symbol-observable: 1.2.0 + + is-path-cwd@2.2.0: {} + + is-path-cwd@3.0.0: {} + + is-path-inside@3.0.3: {} + + is-path-inside@4.0.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-potential-custom-element-name@1.0.1: {} + + is-promise@2.2.2: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-scoped@3.0.0: + dependencies: + scoped-regex: 3.0.0 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.3 + + is-stream@1.1.0: {} + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-string@1.1.1: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.3 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-text-path@2.0.0: + dependencies: + text-extensions: 2.4.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.18 + + is-unicode-supported@2.1.0: {} + + is-url-superb@6.1.0: {} + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.3 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.3 + get-intrinsic: 1.3.0 + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isobject@3.0.1: {} + + isomorphic-fetch@3.0.0: + dependencies: + node-fetch: 2.7.0 + whatwg-fetch: 3.6.20 + transitivePeerDependencies: + - encoding + + issue-regex@4.3.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.26.9 + '@babel/parser': 7.27.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.26.9 + '@babel/parser': 7.27.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.1 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + iterate-iterator@1.0.2: {} + + iterate-value@1.0.2: + dependencies: + es-get-iterator: 1.1.3 + iterate-iterator: 1.0.2 + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.5 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)): + dependencies: + '@babel/core': 7.26.9 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.9) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.13.5 + ts-node: 10.9.2(@types/node@22.13.5)(typescript@5.8.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@22.4.3: + dependencies: + chalk: 2.4.2 + diff: 3.5.0 + jest-get-type: 22.4.3 + pretty-format: 22.4.3 + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-jsdom@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/jsdom': 20.0.1 + '@types/node': 22.13.5 + jest-mock: 29.7.0 + jest-util: 29.7.0 + jsdom: 20.0.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.5 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-expo@52.0.6(@babel/core@7.26.9)(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)))(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(webpack@5.98.0): + dependencies: + '@expo/config': 10.0.11 + '@expo/json-file': 9.0.2 + '@jest/create-cache-key-function': 29.7.0 + '@jest/globals': 29.7.0 + babel-jest: 29.7.0(@babel/core@7.26.9) + expo: 52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + fbemitter: 3.0.0 + find-up: 5.0.0 + jest-environment-jsdom: 29.7.0 + jest-snapshot: 29.7.0 + jest-watch-select-projects: 2.0.0 + jest-watch-typeahead: 2.2.1(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))) + json5: 2.2.3 + lodash: 4.17.21 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-server-dom-webpack: 19.0.0-rc-6230622a1a-20240610(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.98.0) + react-test-renderer: 18.3.1(react@18.3.1) + server-only: 0.0.1 + stacktrace-js: 2.0.2 + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - canvas + - encoding + - jest + - react + - react-dom + - supports-color + - utf-8-validate + - webpack + + jest-get-type@22.4.3: {} + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.13.5 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-junit@16.0.0: + dependencies: + mkdirp: 1.0.4 + strip-ansi: 6.0.1 + uuid: 8.3.2 + xml: 1.0.1 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.5 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.5 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.5 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.26.9 + '@babel/generator': 7.27.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) + '@babel/types': 7.27.3 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.5 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watch-select-projects@2.0.0: + dependencies: + ansi-escapes: 4.3.2 + chalk: 3.0.0 + prompts: 2.4.2 + + jest-watch-typeahead@2.2.1(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))): + dependencies: + ansi-escapes: 6.2.1 + chalk: 4.1.2 + jest: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + jest-regex-util: 29.6.3 + jest-watcher: 29.7.0 + slash: 5.1.0 + string-length: 5.0.1 + strip-ansi: 7.1.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 22.13.5 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest-worker@29.7.0: + dependencies: + '@types/node': 22.13.5 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jimp-compact@0.16.1: {} + + jimp@0.22.12: + dependencies: + '@jimp/custom': 0.22.12 + '@jimp/plugins': 0.22.12(@jimp/custom@0.22.12) + '@jimp/types': 0.22.12(@jimp/custom@0.22.12) + regenerator-runtime: 0.13.11 + transitivePeerDependencies: + - debug + - encoding + + jiti@1.21.7: {} + + jiti@2.4.2: {} + + join-component@1.1.0: {} + + jpeg-js@0.4.4: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsc-android@250231.0.0: {} + + jsc-safe-url@0.2.4: {} + + jscodeshift@0.14.0(@babel/preset-env@7.26.9(@babel/core@7.26.9)): + dependencies: + '@babel/core': 7.26.9 + '@babel/parser': 7.27.5 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.9) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.26.9) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.26.9) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.26.9) + '@babel/preset-env': 7.26.9(@babel/core@7.26.9) + '@babel/preset-flow': 7.25.9(@babel/core@7.26.9) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9) + '@babel/register': 7.25.9(@babel/core@7.26.9) + babel-core: 7.0.0-bridge.0(@babel/core@7.26.9) + chalk: 4.1.2 + flow-parser: 0.262.0 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + neo-async: 2.6.2 + node-dir: 0.1.17 + recast: 0.21.5 + temp: 0.8.4 + write-file-atomic: 2.4.3 + transitivePeerDependencies: + - supports-color + + jsdom@20.0.3: + dependencies: + abab: 2.0.6 + acorn: 8.14.0 + acorn-globals: 7.0.1 + cssom: 0.5.0 + cssstyle: 2.3.0 + data-urls: 3.0.2 + decimal.js: 10.5.0 + domexception: 4.0.0 + escodegen: 2.1.0 + form-data: 4.0.2 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.16 + parse5: 7.2.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 4.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + ws: 8.18.1 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsesc@0.5.0: {} + + jsesc@3.0.2: {} + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-better-errors@1.0.2: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json-stable-stringify@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + isarray: 2.0.5 + jsonify: 0.0.1 + object-keys: 1.1.1 + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonify@0.0.1: {} + + jsonparse@1.3.1: {} + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + kdbush@4.0.2: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@6.0.3: {} + + klaw-sync@6.0.0: + dependencies: + graceful-fs: 4.2.11 + + kleur@3.0.3: {} + + ky@1.7.5: {} + + latest-version@9.0.0: + dependencies: + package-json: 10.0.1 + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lighthouse-logger@1.4.2: + dependencies: + debug: 2.6.9 + marky: 1.2.5 + transitivePeerDependencies: + - supports-color + + lightningcss-darwin-arm64@1.27.0: + optional: true + + lightningcss-darwin-arm64@1.29.1: + optional: true + + lightningcss-darwin-x64@1.27.0: + optional: true + + lightningcss-darwin-x64@1.29.1: + optional: true + + lightningcss-freebsd-x64@1.27.0: + optional: true + + lightningcss-freebsd-x64@1.29.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.27.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.29.1: + optional: true + + lightningcss-linux-arm64-gnu@1.27.0: + optional: true + + lightningcss-linux-arm64-gnu@1.29.1: + optional: true + + lightningcss-linux-arm64-musl@1.27.0: + optional: true + + lightningcss-linux-arm64-musl@1.29.1: + optional: true + + lightningcss-linux-x64-gnu@1.27.0: + optional: true + + lightningcss-linux-x64-gnu@1.29.1: + optional: true + + lightningcss-linux-x64-musl@1.27.0: + optional: true + + lightningcss-linux-x64-musl@1.29.1: + optional: true + + lightningcss-win32-arm64-msvc@1.27.0: + optional: true + + lightningcss-win32-arm64-msvc@1.29.1: + optional: true + + lightningcss-win32-x64-msvc@1.27.0: + optional: true + + lightningcss-win32-x64-msvc@1.29.1: + optional: true + + lightningcss@1.27.0: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.27.0 + lightningcss-darwin-x64: 1.27.0 + lightningcss-freebsd-x64: 1.27.0 + lightningcss-linux-arm-gnueabihf: 1.27.0 + lightningcss-linux-arm64-gnu: 1.27.0 + lightningcss-linux-arm64-musl: 1.27.0 + lightningcss-linux-x64-gnu: 1.27.0 + lightningcss-linux-x64-musl: 1.27.0 + lightningcss-win32-arm64-msvc: 1.27.0 + lightningcss-win32-x64-msvc: 1.27.0 + + lightningcss@1.29.1: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.29.1 + lightningcss-darwin-x64: 1.29.1 + lightningcss-freebsd-x64: 1.29.1 + lightningcss-linux-arm-gnueabihf: 1.29.1 + lightningcss-linux-arm64-gnu: 1.29.1 + lightningcss-linux-arm64-musl: 1.29.1 + lightningcss-linux-x64-gnu: 1.29.1 + lightningcss-linux-x64-musl: 1.29.1 + lightningcss-win32-arm64-msvc: 1.29.1 + lightningcss-win32-x64-msvc: 1.29.1 + + lilconfig@2.1.0: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lint-staged@15.4.3: + dependencies: + chalk: 5.4.1 + commander: 13.1.0 + debug: 4.4.0 + execa: 8.0.1 + lilconfig: 3.1.3 + listr2: 8.2.5 + micromatch: 4.0.8 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.7.0 + transitivePeerDependencies: + - supports-color + + listr-input@0.2.1: + dependencies: + inquirer: 7.3.3 + inquirer-autosubmit-prompt: 0.2.0 + rxjs: 6.6.7 + through: 2.3.8 + + listr-silent-renderer@1.1.1: {} + + listr-update-renderer@0.5.0(listr@0.14.3): + dependencies: + chalk: 1.1.3 + cli-truncate: 0.2.1 + elegant-spinner: 1.0.1 + figures: 1.7.0 + indent-string: 3.2.0 + listr: 0.14.3 + log-symbols: 1.0.2 + log-update: 2.3.0 + strip-ansi: 3.0.1 + + listr-verbose-renderer@0.5.0: + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + date-fns: 1.30.1 + figures: 2.0.0 + + listr2@8.2.5: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + + listr@0.14.3: + dependencies: + '@samverschueren/stream-to-observable': 0.3.1(rxjs@6.6.7) + is-observable: 1.1.0 + is-promise: 2.2.2 + is-stream: 1.1.0 + listr-silent-renderer: 1.1.1 + listr-update-renderer: 0.5.0(listr@0.14.3) + listr-verbose-renderer: 0.5.0 + p-map: 2.1.0 + rxjs: 6.6.7 + transitivePeerDependencies: + - zen-observable + - zenObservable + + livekit-client@2.11.4: + dependencies: + '@livekit/mutex': 1.1.1 + '@livekit/protocol': 1.36.1 + events: 3.3.0 + loglevel: 1.9.2 + sdp-transform: 2.15.0 + ts-debounce: 4.0.0 + tslib: 2.8.1 + typed-emitter: 2.1.0 + webrtc-adapter: 9.0.3 + + load-bmfont@1.4.2: + dependencies: + buffer-equal: 0.0.1 + mime: 1.6.0 + parse-bmfont-ascii: 1.0.6 + parse-bmfont-binary: 1.0.6 + parse-bmfont-xml: 1.1.6 + phin: 3.7.1 + xhr: 2.6.0 + xtend: 4.0.2 + transitivePeerDependencies: + - debug + + loader-runner@4.3.0: {} + + locate-path@3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.debounce@4.0.8: {} + + lodash.isplainobject@4.0.6: {} + + lodash.kebabcase@4.1.1: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + + lodash.startcase@4.4.0: {} + + lodash.throttle@4.1.1: {} + + lodash.uniq@4.5.0: {} + + lodash.upperfirst@4.3.1: {} + + lodash.zip@4.2.0: {} + + lodash@4.17.21: {} + + log-symbols@1.0.2: + dependencies: + chalk: 1.1.3 + + log-symbols@2.2.0: + dependencies: + chalk: 2.4.2 + + log-symbols@7.0.0: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.1 + + log-update@2.3.0: + dependencies: + ansi-escapes: 3.2.0 + cli-cursor: 2.1.0 + wrap-ansi: 3.0.1 + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + loglevel@1.9.1: {} + + loglevel@1.9.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lucide-react-native@0.475.0(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-native-svg: 15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + + make-dir@4.0.0: + dependencies: + semver: 7.7.1 + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + mapbox-gl@3.10.0: + dependencies: + '@mapbox/jsonlint-lines-primitives': 2.0.2 + '@mapbox/mapbox-gl-supported': 3.0.0 + '@mapbox/point-geometry': 0.1.0 + '@mapbox/tiny-sdf': 2.0.6 + '@mapbox/unitbezier': 0.0.1 + '@mapbox/vector-tile': 1.3.1 + '@mapbox/whoots-js': 3.1.0 + '@types/geojson': 7946.0.16 + '@types/geojson-vt': 3.2.5 + '@types/mapbox__point-geometry': 0.1.4 + '@types/mapbox__vector-tile': 1.3.4 + '@types/pbf': 3.0.5 + '@types/supercluster': 7.1.3 + cheap-ruler: 4.0.0 + csscolorparser: 1.0.3 + earcut: 3.0.1 + geojson-vt: 4.0.2 + gl-matrix: 3.4.3 + grid-index: 1.1.0 + kdbush: 4.0.2 + murmurhash-js: 1.0.0 + pbf: 3.3.0 + potpack: 2.0.0 + quickselect: 3.0.0 + serialize-to-js: 3.1.2 + supercluster: 8.0.1 + tinyqueue: 3.0.0 + vt-pbf: 3.1.3 + + marky@1.2.5: {} + + math-intrinsics@1.1.0: {} + + md5-file@3.2.3: + dependencies: + buffer-alloc: 1.2.0 + + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + + mdn-data@2.0.14: {} + + memoize-one@5.2.1: {} + + memoize-one@6.0.0: {} + + meow@12.1.1: {} + + meow@13.2.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + metro-babel-transformer@0.81.2: + dependencies: + '@babel/core': 7.26.9 + flow-enums-runtime: 0.0.6 + hermes-parser: 0.25.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + metro-cache-key@0.81.2: + dependencies: + flow-enums-runtime: 0.0.6 + + metro-cache@0.81.2: + dependencies: + exponential-backoff: 3.1.2 + flow-enums-runtime: 0.0.6 + metro-core: 0.81.2 + + metro-config@0.81.2: + dependencies: + connect: 3.7.0 + cosmiconfig: 5.2.1 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.81.2 + metro-cache: 0.81.2 + metro-core: 0.81.2 + metro-runtime: 0.81.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + metro-core@0.81.2: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.81.2 + + metro-file-map@0.81.2: + dependencies: + debug: 2.6.9 + fb-watchman: 2.0.2 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.8 + nullthrows: 1.1.1 + walker: 1.0.8 + transitivePeerDependencies: + - supports-color + + metro-minify-terser@0.81.2: + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.40.0 + + metro-resolver@0.81.2: + dependencies: + flow-enums-runtime: 0.0.6 + + metro-runtime@0.81.2: + dependencies: + '@babel/runtime': 7.26.9 + flow-enums-runtime: 0.0.6 + + metro-source-map@0.81.2: + dependencies: + '@babel/traverse': 7.27.4 + '@babel/traverse--for-generate-function-map': '@babel/traverse@7.27.4' + '@babel/types': 7.27.3 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.81.2 + nullthrows: 1.1.1 + ob1: 0.81.2 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + + metro-symbolicate@0.81.2: + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.81.2 + nullthrows: 1.1.1 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + + metro-transform-plugins@0.81.2: + dependencies: + '@babel/core': 7.26.9 + '@babel/generator': 7.27.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.4 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + metro-transform-worker@0.81.2: + dependencies: + '@babel/core': 7.26.9 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.3 + flow-enums-runtime: 0.0.6 + metro: 0.81.2 + metro-babel-transformer: 0.81.2 + metro-cache: 0.81.2 + metro-cache-key: 0.81.2 + metro-minify-terser: 0.81.2 + metro-source-map: 0.81.2 + metro-transform-plugins: 0.81.2 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + metro@0.81.2: + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/core': 7.26.9 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.3 + accepts: 1.3.8 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 2.6.9 + error-stack-parser: 2.1.4 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + hermes-parser: 0.25.1 + image-size: 1.2.0 + invariant: 2.2.4 + jest-worker: 29.7.0 + jsc-safe-url: 0.2.4 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.81.2 + metro-cache: 0.81.2 + metro-cache-key: 0.81.2 + metro-config: 0.81.2 + metro-core: 0.81.2 + metro-file-map: 0.81.2 + metro-resolver: 0.81.2 + metro-runtime: 0.81.2 + metro-source-map: 0.81.2 + metro-symbolicate: 0.81.2 + metro-transform-plugins: 0.81.2 + metro-transform-worker: 0.81.2 + mime-types: 2.1.35 + nullthrows: 1.1.1 + serialize-error: 2.1.0 + source-map: 0.5.7 + throat: 5.0.0 + ws: 7.5.10 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-db@1.53.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mimic-fn@1.2.0: {} + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + min-document@2.19.0: + dependencies: + dom-walk: 0.1.2 + + min-indent@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@8.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass-collect@2.0.1: + dependencies: + minipass: 7.1.2 + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@4.2.8: {} + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mitt@3.0.1: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@1.0.4: {} + + moti@0.29.0(react-dom@18.3.1(react@18.3.1))(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1): + dependencies: + framer-motion: 6.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-native-reanimated: 3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - react + - react-dom + + ms@2.0.0: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + murmurhash-js@1.0.0: {} + + mute-stream@0.0.7: {} + + mute-stream@0.0.8: {} + + mute-stream@2.0.0: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.8: {} + + nativewind@4.1.23(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))): + dependencies: + comment-json: 4.2.5 + debug: 4.4.0 + react-native-css-interop: 0.1.22(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))) + tailwindcss: 3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + transitivePeerDependencies: + - react + - react-native + - react-native-reanimated + - react-native-safe-area-context + - react-native-svg + - supports-color + + natural-compare-lite@1.4.0: {} + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + negotiator@0.6.4: {} + + neo-async@2.6.2: {} + + nested-error-stacks@2.0.1: {} + + new-github-release-url@2.0.0: + dependencies: + type-fest: 2.19.0 + + nice-try@1.0.5: {} + + node-dir@0.1.17: + dependencies: + minimatch: 3.1.2 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-forge@1.3.1: {} + + node-int64@0.4.0: {} + + node-releases@2.0.19: {} + + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.10 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.1 + validate-npm-package-license: 3.0.4 + + normalize-path@3.0.0: {} + + np@10.2.0(@types/node@22.13.5)(typescript@5.8.2): + dependencies: + chalk: 5.4.1 + chalk-template: 1.1.0 + cosmiconfig: 8.3.6(typescript@5.8.2) + del: 8.0.0 + escape-goat: 4.0.0 + escape-string-regexp: 5.0.0 + execa: 8.0.1 + exit-hook: 4.0.0 + github-url-from-git: 1.5.0 + hosted-git-info: 8.0.2 + ignore-walk: 7.0.0 + import-local: 3.2.0 + inquirer: 12.4.2(@types/node@22.13.5) + is-installed-globally: 1.0.0 + is-interactive: 2.0.0 + is-scoped: 3.0.0 + issue-regex: 4.3.0 + listr: 0.14.3 + listr-input: 0.2.1 + log-symbols: 7.0.0 + meow: 13.2.0 + new-github-release-url: 2.0.0 + npm-name: 8.0.0 + onetime: 7.0.0 + open: 10.1.0 + p-memoize: 7.1.1 + p-timeout: 6.1.4 + path-exists: 5.0.0 + pkg-dir: 8.0.0 + read-package-up: 11.0.0 + read-pkg: 9.0.1 + rxjs: 7.8.2 + semver: 7.7.1 + symbol-observable: 4.0.0 + terminal-link: 3.0.0 + update-notifier: 7.3.1 + transitivePeerDependencies: + - '@types/node' + - typescript + - zen-observable + - zenObservable + + npm-name@8.0.0: + dependencies: + is-scoped: 3.0.0 + is-url-superb: 6.1.0 + ky: 1.7.5 + lodash.zip: 4.2.0 + org-regex: 1.0.0 + p-map: 7.0.3 + registry-auth-token: 5.1.0 + registry-url: 6.0.1 + validate-npm-package-name: 5.0.1 + + npm-package-arg@11.0.3: + dependencies: + hosted-git-info: 7.0.2 + proc-log: 4.2.0 + semver: 7.7.1 + validate-npm-package-name: 5.0.1 + + npm-run-path@2.0.2: + dependencies: + path-key: 2.0.1 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nullthrows@1.1.1: {} + + number-is-nan@1.0.1: {} + + nwsapi@2.2.16: {} + + ob1@0.81.2: + dependencies: + flow-enums-runtime: 0.0.6 + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.4: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + omggif@1.0.10: {} + + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + on-headers@1.0.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@2.0.1: + dependencies: + mimic-fn: 1.2.0 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + + open@7.4.2: + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@3.4.0: + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + cli-spinners: 2.9.2 + log-symbols: 2.2.0 + strip-ansi: 5.2.0 + wcwidth: 1.0.1 + + org-regex@1.0.0: {} + + os-tmpdir@1.0.2: {} + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-finally@1.0.0: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.1.1 + + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + p-map@2.1.0: {} + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-map@7.0.3: {} + + p-memoize@7.1.1: + dependencies: + mimic-fn: 4.0.0 + type-fest: 3.13.1 + + p-timeout@6.1.4: {} + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + package-json@10.0.1: + dependencies: + ky: 1.7.5 + registry-auth-token: 5.1.0 + registry-url: 6.0.1 + semver: 7.7.1 + + pako@1.0.11: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-bmfont-ascii@1.0.6: {} + + parse-bmfont-binary@1.0.6: {} + + parse-bmfont-xml@1.1.6: + dependencies: + xml-parse-from-string: 1.0.1 + xml2js: 0.5.0 + + parse-headers@2.0.5: {} + + parse-json@4.0.0: + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-json@8.1.0: + dependencies: + '@babel/code-frame': 7.26.2 + index-to-position: 0.1.2 + type-fest: 4.35.0 + + parse-png@2.1.0: + dependencies: + pngjs: 3.4.0 + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + parseurl@1.3.3: {} + + password-prompt@1.1.3: + dependencies: + ansi-escapes: 4.3.2 + cross-spawn: 7.0.6 + + patch-package@8.0.0: + dependencies: + '@yarnpkg/lockfile': 1.1.0 + chalk: 4.1.2 + ci-info: 3.9.0 + cross-spawn: 7.0.6 + find-yarn-workspace-root: 2.0.0 + fs-extra: 9.1.0 + json-stable-stringify: 1.2.1 + klaw-sync: 6.0.0 + minimist: 1.2.8 + open: 7.4.2 + rimraf: 2.7.1 + semver: 7.7.1 + slash: 2.0.0 + tmp: 0.0.33 + yaml: 2.7.0 + + path-exists@3.0.0: {} + + path-exists@4.0.0: {} + + path-exists@5.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@2.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-type@4.0.0: {} + + path-type@6.0.0: {} + + pbf@3.3.0: + dependencies: + ieee754: 1.2.1 + resolve-protobuf-schema: 2.1.0 + + peek-readable@4.1.0: {} + + phin@3.7.1: + dependencies: + centra: 2.7.0 + transitivePeerDependencies: + - debug + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@3.0.1: {} + + picomatch@4.0.2: {} + + pidtree@0.6.0: {} + + pify@2.3.0: {} + + pify@4.0.1: {} + + pirates@4.0.6: {} + + pixelmatch@4.0.2: + dependencies: + pngjs: 3.4.0 + + pkg-dir@3.0.0: + dependencies: + find-up: 3.0.0 + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pkg-dir@8.0.0: + dependencies: + find-up-simple: 1.0.0 + + pkg-up@3.1.0: + dependencies: + find-up: 3.0.0 + + plist@3.1.0: + dependencies: + '@xmldom/xmldom': 0.8.10 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 + + plur@2.1.2: + dependencies: + irregular-plurals: 1.4.0 + + pluralize@8.0.0: {} + + pngjs@3.4.0: {} + + pngjs@6.0.0: {} + + popmotion@11.0.3: + dependencies: + framesync: 6.0.1 + hey-listen: 1.0.8 + style-value-types: 5.0.0 + tslib: 2.8.1 + + possible-typed-array-names@1.1.0: {} + + postcss-import@15.1.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.5.3): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.3 + + postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.0 + optionalDependencies: + postcss: 8.5.3 + ts-node: 10.9.2(@types/node@22.13.5)(typescript@5.8.2) + + postcss-nested@6.2.0(postcss@8.5.3): + dependencies: + postcss: 8.5.3 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.49: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.3: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + posthog-react-native@3.13.0(s7mah6r4g2mgg4lzr4uvj3cowa): + dependencies: + react-native-svg: 15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + optionalDependencies: + '@react-navigation/native': 7.0.14(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + expo-application: 6.0.2(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-device: 7.0.3(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)) + expo-file-system: 18.0.12(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + expo-localization: 16.0.1(expo@52.0.46(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@expo/metro-runtime@4.0.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)))(react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react@18.3.1) + react-native-safe-area-context: 4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + potpack@2.0.0: {} + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.5.2: {} + + pretty-bytes@5.6.0: {} + + pretty-format@22.4.3: + dependencies: + ansi-regex: 3.0.1 + ansi-styles: 3.2.1 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + proc-log@4.2.0: {} + + process@0.11.10: {} + + progress@2.0.3: {} + + promise.allsettled@1.0.7: + dependencies: + array.prototype.map: 1.0.8 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + get-intrinsic: 1.3.0 + iterate-value: 1.0.2 + + promise@7.3.1: + dependencies: + asap: 2.0.6 + + promise@8.3.0: + dependencies: + asap: 2.0.6 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + proto-list@1.2.4: {} + + protocol-buffers-schema@3.6.0: {} + + proxy-from-env@1.1.0: {} + + psl@1.15.0: + dependencies: + punycode: 2.3.1 + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + pupa@3.1.0: + dependencies: + escape-goat: 4.0.0 + + pure-rand@6.1.0: {} + + qrcode-terminal@0.11.0: {} + + query-string@7.1.3: + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + + querystringify@2.2.0: {} + + queue-microtask@1.2.3: {} + + queue@6.0.2: + dependencies: + inherits: 2.0.4 + + quickselect@2.0.0: {} + + quickselect@3.0.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + range-parser@1.2.1: {} + + rbush@3.0.1: + dependencies: + quickselect: 2.0.0 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-devtools-core@5.3.2: + dependencies: + shell-quote: 1.8.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-error-boundary@4.1.2(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.9 + react: 18.3.1 + + react-fast-compare@3.2.2: {} + + react-freeze@1.0.4(react@18.3.1): + dependencies: + react: 18.3.1 + + react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.9 + invariant: 2.2.4 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-fast-compare: 3.2.2 + shallowequal: 1.1.0 + + react-hook-form@7.54.2(react@18.3.1): + dependencies: + react: 18.3.1 + + react-i18next@15.4.1(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.9 + html-parse-stringify: 3.0.1 + i18next: 23.16.8 + react: 18.3.1 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + react-is@16.13.1: {} + + react-is@18.3.1: {} + + react-native-base64@0.2.1: {} + + react-native-css-interop@0.1.22(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))): + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.1 + lightningcss: 1.29.1 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-native-reanimated: 3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + semver: 7.7.1 + tailwindcss: 3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + optionalDependencies: + react-native-safe-area-context: 4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-svg: 15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - supports-color + + react-native-edge-to-edge@1.4.3(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + react-native-flash-message@0.4.2(prop-types@15.8.1)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + prop-types: 15.8.1 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-native-iphone-screen-helper: 2.1.2(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)) + + react-native-gesture-handler@2.20.2(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + '@egjs/hammerjs': 2.0.17 + hoist-non-react-statics: 3.3.2 + invariant: 2.2.4 + prop-types: 15.8.1 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + react-native-helmet-async@2.0.4(react@18.3.1): + dependencies: + invariant: 2.2.4 + react: 18.3.1 + react-fast-compare: 3.2.2 + shallowequal: 1.1.0 + + react-native-iphone-screen-helper@2.1.2(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)): + dependencies: + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + react-native-is-edge-to-edge@1.1.6(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + react-native-keyboard-controller@1.16.6(react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1))(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + react-native-is-edge-to-edge: 1.1.6(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + react-native-reanimated: 3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + + react-native-logs@5.3.0: {} + + react-native-mmkv@3.1.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + react-native-reanimated@3.16.7(@babel/core@7.26.9)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/core': 7.26.9 + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.9) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.9) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.9) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9) + convert-source-map: 2.0.0 + invariant: 2.2.4 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + transitivePeerDependencies: + - supports-color + + react-native-restart@0.0.27(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + react-native-safe-area-context@4.12.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + react-native-screens@4.4.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-freeze: 1.0.4(react@18.3.1) + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + warn-once: 0.1.1 + + react-native-svg@15.8.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + css-select: 5.1.0 + css-tree: 1.1.3 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + warn-once: 0.1.1 + + react-native-system-setting@1.7.6: {} + + react-native-url-polyfill@1.3.0(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1)): + dependencies: + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + whatwg-url-without-unicode: 8.0.0-3 + + react-native-web@0.19.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.9 + '@react-native/normalize-colors': 0.74.89 + fbjs: 3.0.5 + inline-style-prefixer: 6.0.4 + memoize-one: 6.0.0 + nullthrows: 1.1.1 + postcss-value-parser: 4.2.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styleq: 0.1.3 + transitivePeerDependencies: + - encoding + + react-native-webview@13.12.5(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + escape-string-regexp: 4.0.0 + invariant: 2.2.4 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + + react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1): + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native/assets-registry': 0.76.9 + '@react-native/codegen': 0.76.9(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + '@react-native/community-cli-plugin': 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9)) + '@react-native/gradle-plugin': 0.76.9 + '@react-native/js-polyfills': 0.76.9 + '@react-native/normalize-colors': 0.76.9 + '@react-native/virtualized-lists': 0.76.9(@types/react@18.3.18)(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + babel-jest: 29.7.0(@babel/core@7.26.9) + babel-plugin-syntax-hermes-parser: 0.23.1 + base64-js: 1.5.1 + chalk: 4.1.2 + commander: 12.1.0 + event-target-shim: 5.0.1 + flow-enums-runtime: 0.0.6 + glob: 7.2.3 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + jsc-android: 250231.0.0 + memoize-one: 5.2.1 + metro-runtime: 0.81.2 + metro-source-map: 0.81.2 + mkdirp: 0.5.6 + nullthrows: 1.1.1 + pretty-format: 29.7.0 + promise: 8.3.0 + react: 18.3.1 + react-devtools-core: 5.3.2 + react-refresh: 0.14.2 + regenerator-runtime: 0.13.11 + scheduler: 0.24.0-canary-efb381bbf-20230505 + semver: 7.7.1 + stacktrace-parser: 0.1.11 + whatwg-fetch: 3.6.20 + ws: 6.2.3 + yargs: 17.7.2 + optionalDependencies: + '@types/react': 18.3.18 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - '@react-native-community/cli' + - bufferutil + - encoding + - supports-color + - utf-8-validate + + react-query-kit@3.3.1(@tanstack/react-query@5.66.11(react@18.3.1)): + optionalDependencies: + '@tanstack/react-query': 5.66.11(react@18.3.1) + + react-refresh@0.14.2: {} + + react-server-dom-webpack@19.0.0-rc-6230622a1a-20240610(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.98.0): + dependencies: + acorn-loose: 8.4.0 + neo-async: 2.6.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + webpack: 5.98.0 + + react-shallow-renderer@16.15.0(react@18.3.1): + dependencies: + object-assign: 4.1.1 + react: 18.3.1 + react-is: 18.3.1 + + react-stately@3.35.0(react@18.3.1): + dependencies: + '@react-stately/calendar': 3.7.0(react@18.3.1) + '@react-stately/checkbox': 3.6.11(react@18.3.1) + '@react-stately/collections': 3.12.1(react@18.3.1) + '@react-stately/color': 3.8.2(react@18.3.1) + '@react-stately/combobox': 3.10.2(react@18.3.1) + '@react-stately/data': 3.12.1(react@18.3.1) + '@react-stately/datepicker': 3.12.0(react@18.3.1) + '@react-stately/disclosure': 3.0.1(react@18.3.1) + '@react-stately/dnd': 3.5.1(react@18.3.1) + '@react-stately/form': 3.1.1(react@18.3.1) + '@react-stately/list': 3.11.2(react@18.3.1) + '@react-stately/menu': 3.9.1(react@18.3.1) + '@react-stately/numberfield': 3.9.9(react@18.3.1) + '@react-stately/overlays': 3.6.13(react@18.3.1) + '@react-stately/radio': 3.10.10(react@18.3.1) + '@react-stately/searchfield': 3.5.9(react@18.3.1) + '@react-stately/select': 3.6.10(react@18.3.1) + '@react-stately/selection': 3.19.0(react@18.3.1) + '@react-stately/slider': 3.6.1(react@18.3.1) + '@react-stately/table': 3.13.1(react@18.3.1) + '@react-stately/tabs': 3.7.1(react@18.3.1) + '@react-stately/toggle': 3.8.1(react@18.3.1) + '@react-stately/tooltip': 3.5.1(react@18.3.1) + '@react-stately/tree': 3.8.7(react@18.3.1) + '@react-types/shared': 3.27.0(react@18.3.1) + react: 18.3.1 + + react-test-renderer@18.3.1(react@18.3.1): + dependencies: + react: 18.3.1 + react-is: 18.3.1 + react-shallow-renderer: 16.15.0(react@18.3.1) + scheduler: 0.23.2 + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + read-package-up@11.0.0: + dependencies: + find-up-simple: 1.0.0 + read-pkg: 9.0.1 + type-fest: 4.35.0 + + read-pkg-up@7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + + read-pkg@5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.1.0 + type-fest: 4.35.0 + unicorn-magic: 0.1.0 + + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readable-web-to-node-stream@3.0.4: + dependencies: + readable-stream: 4.7.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readline@1.3.0: {} + + recast@0.21.5: + dependencies: + ast-types: 0.15.2 + esprima: 4.0.1 + source-map: 0.6.1 + tslib: 2.8.1 + + recyclerlistview@4.2.1(react-native@0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1): + dependencies: + lodash.debounce: 4.0.8 + prop-types: 15.8.1 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(@types/react@18.3.18)(react@18.3.1) + ts-object-utils: 0.0.5 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.13.11: {} + + regenerator-runtime@0.14.1: {} + + regexp-tree@0.1.27: {} + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexpu-core@6.2.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + registry-auth-token@5.1.0: + dependencies: + '@pnpm/npm-conf': 2.3.1 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + + regjsgen@0.8.0: {} + + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 + + regjsparser@0.9.1: + dependencies: + jsesc: 0.5.0 + + remove-trailing-slash@0.1.1: {} + + repeat-string@1.6.1: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + requireg@0.2.2: + dependencies: + nested-error-stacks: 2.0.1 + rc: 1.2.8 + resolve: 1.7.1 + + requires-port@1.0.0: {} + + reselect@4.1.8: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@3.0.0: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve-protobuf-schema@2.1.0: + dependencies: + protocol-buffers-schema: 3.6.0 + + resolve-workspace-root@2.0.0: {} + + resolve.exports@2.0.3: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@1.7.1: + dependencies: + path-parse: 1.0.7 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@2.0.0: + dependencies: + onetime: 2.0.1 + signal-exit: 3.0.7 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rimraf@2.6.3: + dependencies: + glob: 7.2.3 + + rimraf@2.7.1: + dependencies: + glob: 7.2.3 + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rtl-detect@1.1.2: {} + + run-applescript@7.0.0: {} + + run-async@2.4.1: {} + + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@6.6.7: + dependencies: + tslib: 1.14.1 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-regex@2.1.1: + dependencies: + regexp-tree: 0.1.27 + + safer-buffer@2.1.2: {} + + sax@1.4.1: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + scheduler@0.24.0-canary-efb381bbf-20230505: + dependencies: + loose-envify: 1.4.0 + + schema-utils@4.3.2: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + + scoped-regex@3.0.0: {} + + sdp-transform@2.15.0: {} + + sdp@3.2.0: {} + + selfsigned@2.4.1: + dependencies: + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.6.3: {} + + semver@7.7.1: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + send@0.19.1: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serialize-error@2.1.0: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serialize-to-js@3.1.2: {} + + seroval-plugins@1.2.1(seroval@1.2.1): + dependencies: + seroval: 1.2.1 + + seroval@1.2.1: {} + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + server-only@0.0.1: {} + + set-cookie-parser@2.7.1: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + setimmediate@1.0.5: {} + + setprototypeof@1.2.0: {} + + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + + shallowequal@1.1.0: {} + + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@1.0.0: {} + + shebang-regex@3.0.0: {} + + shell-quote@1.8.2: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-plist@1.3.1: + dependencies: + bplist-creator: 0.1.0 + bplist-parser: 0.3.1 + plist: 3.1.0 + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + sisteransi@1.0.5: {} + + slash@2.0.0: {} + + slash@3.0.0: {} + + slash@5.1.0: {} + + slice-ansi@0.0.4: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + + slugify@1.6.6: {} + + socket.io-client@4.7.2: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + engine.io-client: 6.5.4 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@4.2.4: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + solid-floating-ui@0.3.1(@floating-ui/dom@1.6.13)(solid-js@1.9.5): + dependencies: + '@floating-ui/dom': 1.6.13 + solid-js: 1.9.5 + + solid-js@1.9.5: + dependencies: + csstype: 3.1.3 + seroval: 1.2.1 + seroval-plugins: 1.2.1(seroval@1.2.1) + + solid-motionone@1.0.3(solid-js@1.9.5): + dependencies: + '@motionone/dom': 10.18.0 + '@motionone/utils': 10.18.0 + '@solid-primitives/props': 3.2.0(solid-js@1.9.5) + '@solid-primitives/refs': 1.1.0(solid-js@1.9.5) + '@solid-primitives/transition-group': 1.1.0(solid-js@1.9.5) + csstype: 3.1.3 + solid-js: 1.9.5 + + source-map-js@1.2.1: {} + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.5.6: {} + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + + split-on-first@1.1.0: {} + + split2@4.2.0: {} + + split@1.0.1: + dependencies: + through: 2.3.8 + + sprintf-js@1.0.3: {} + + ssri@10.0.6: + dependencies: + minipass: 7.1.2 + + stable-hash@0.0.4: {} + + stack-generator@2.0.10: + dependencies: + stackframe: 1.3.4 + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + stackframe@1.3.4: {} + + stacktrace-gps@3.1.2: + dependencies: + source-map: 0.5.6 + stackframe: 1.3.4 + + stacktrace-js@2.0.2: + dependencies: + error-stack-parser: 2.1.4 + stack-generator: 2.0.10 + stacktrace-gps: 3.1.2 + + stacktrace-parser@0.1.11: + dependencies: + type-fest: 0.7.1 + + statuses@1.5.0: {} + + statuses@2.0.1: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + stream-buffers@2.2.0: {} + + strict-uri-encode@2.0.0: {} + + string-argv@0.3.2: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-length@5.0.1: + dependencies: + char-regex: 2.0.2 + strip-ansi: 7.1.0 + + string-width@1.0.2: + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + + string-width@2.1.1: + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.9 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + + strip-ansi@4.0.0: + dependencies: + ansi-regex: 3.0.1 + + strip-ansi@5.2.0: + dependencies: + ansi-regex: 4.1.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-eof@1.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + strtok3@6.3.0: + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 4.1.0 + + structured-headers@0.4.1: {} + + stubborn-fs@1.2.5: {} + + style-value-types@5.0.0: + dependencies: + hey-listen: 1.0.8 + tslib: 2.8.1 + + styleq@0.1.3: {} + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + sudo-prompt@8.2.5: {} + + sudo-prompt@9.1.1: {} + + supercluster@8.0.1: + dependencies: + kdbush: 4.0.2 + + supports-color@2.0.0: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@2.3.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + symbol-observable@1.2.0: {} + + symbol-observable@4.0.0: {} + + symbol-tree@3.2.4: {} + + synckit@0.9.2: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.8.1 + + tailwind-merge@1.14.0: {} + + tailwind-merge@2.6.0: {} + + tailwind-variants@0.1.20(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))): + dependencies: + tailwind-merge: 1.14.0 + tailwindcss: 3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + + tailwind-variants@0.2.1(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2))): + dependencies: + tailwind-merge: 2.6.0 + tailwindcss: 3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + + tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 2.1.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-import: 15.1.0(postcss@8.5.3) + postcss-js: 4.0.1(postcss@8.5.3) + postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + postcss-nested: 6.2.0(postcss@8.5.3) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tapable@2.2.1: {} + + tapable@2.2.2: {} + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + temp-dir@2.0.0: {} + + temp@0.8.4: + dependencies: + rimraf: 2.6.3 + + tempy@0.7.1: + dependencies: + del: 6.1.1 + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + + terminal-link@2.1.1: + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + + terminal-link@3.0.0: + dependencies: + ansi-escapes: 5.0.0 + supports-hyperlinks: 2.3.0 + + terser-webpack-plugin@5.3.14(webpack@5.98.0): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 4.3.2 + serialize-javascript: 6.0.2 + terser: 5.40.0 + webpack: 5.98.0 + + terser@5.40.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.1 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-extensions@2.4.0: {} + + text-table@0.2.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + throat@5.0.0: {} + + through@2.3.8: {} + + timm@1.7.1: {} + + tinycolor2@1.6.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + + tinyqueue@3.0.0: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmpl@1.0.5: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + token-types@4.2.1: + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tr46@0.0.3: {} + + tr46@3.0.0: + dependencies: + punycode: 2.3.1 + + ts-api-utils@1.4.3(typescript@5.8.2): + dependencies: + typescript: 5.8.2 + + ts-debounce@4.0.0: {} + + ts-interface-checker@0.1.13: {} + + ts-jest@29.2.6(@babel/core@7.26.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.9))(jest@29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)))(typescript@5.8.2): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@22.13.5)(ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.1 + typescript: 5.8.2 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.9 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.9) + + ts-node@10.9.2(@types/node@22.13.5)(typescript@5.8.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.13.5 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.8.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + ts-object-utils@0.0.5: {} + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tsconfig@7.0.0: + dependencies: + '@types/strip-bom': 3.0.0 + '@types/strip-json-comments': 0.0.30 + strip-bom: 3.0.0 + strip-json-comments: 2.0.1 + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + tsutils@3.21.0(typescript@5.8.2): + dependencies: + tslib: 1.14.1 + typescript: 5.8.2 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.16.0: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@0.6.0: {} + + type-fest@0.7.1: {} + + type-fest@0.8.1: {} + + type-fest@1.4.0: {} + + type-fest@2.19.0: {} + + type-fest@3.13.1: {} + + type-fest@4.35.0: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typed-emitter@2.1.0: + optionalDependencies: + rxjs: 7.8.2 + + typescript@5.8.2: {} + + ua-parser-js@0.7.40: {} + + ua-parser-js@1.0.40: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.3 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@6.20.0: {} + + undici@6.21.1: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + + unimodules-app-loader@5.0.1: {} + + unique-filename@3.0.0: + dependencies: + unique-slug: 4.0.0 + + unique-slug@4.0.0: + dependencies: + imurmurhash: 0.1.4 + + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 + + universalify@0.1.2: {} + + universalify@0.2.0: {} + + universalify@1.0.0: {} + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-notifier@7.3.1: + dependencies: + boxen: 8.0.1 + chalk: 5.4.1 + configstore: 7.0.0 + is-in-ci: 1.0.0 + is-installed-globally: 1.0.0 + is-npm: 6.0.0 + latest-version: 9.0.0 + pupa: 3.1.0 + semver: 7.7.1 + xdg-basedir: 5.1.0 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + use-latest-callback@0.2.3(react@18.3.1): + dependencies: + react: 18.3.1 + + use-sync-external-store@1.4.0(react@18.3.1): + dependencies: + react: 18.3.1 + + usehooks-ts@3.1.1(react@18.3.1): + dependencies: + lodash.debounce: 4.0.8 + react: 18.3.1 + + utif2@4.1.0: + dependencies: + pako: 1.0.11 + + util-deprecate@1.0.2: {} + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.18 + + utils-merge@1.0.1: {} + + uuid@7.0.3: {} + + uuid@8.3.2: {} + + v8-compile-cache-lib@3.0.1: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@5.0.1: {} + + vary@1.1.2: {} + + vlq@1.0.1: {} + + void-elements@3.1.0: {} + + vt-pbf@3.1.3: + dependencies: + '@mapbox/point-geometry': 0.1.0 + '@mapbox/vector-tile': 1.3.1 + pbf: 3.3.0 + + w3c-xmlserializer@4.0.0: + dependencies: + xml-name-validator: 4.0.0 + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + warn-once@0.1.1: {} + + watchpack@2.4.4: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + web-streams-polyfill@3.3.3: {} + + webidl-conversions@3.0.1: {} + + webidl-conversions@5.0.0: {} + + webidl-conversions@7.0.0: {} + + webpack-sources@3.3.2: {} + + webpack@5.98.0: + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.7 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.1 + browserslist: 4.24.4 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.1 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.2 + tapable: 2.2.2 + terser-webpack-plugin: 5.3.14(webpack@5.98.0) + watchpack: 2.4.4 + webpack-sources: 3.3.2 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webrtc-adapter@9.0.3: + dependencies: + sdp: 3.2.0 + + well-known-symbols@4.1.0: + dependencies: + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + + whatwg-encoding@2.0.0: + dependencies: + iconv-lite: 0.6.3 + + whatwg-fetch@3.6.20: {} + + whatwg-mimetype@3.0.0: {} + + whatwg-url-without-unicode@8.0.0-3: + dependencies: + buffer: 5.7.1 + punycode: 2.3.1 + webidl-conversions: 5.0.0 + + whatwg-url@11.0.0: + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + when-exit@2.1.4: {} + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.3 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.18 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.18: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + for-each: 0.3.5 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + wonka@6.3.4: {} + + word-wrap@1.2.5: {} + + wrap-ansi@3.0.1: + dependencies: + string-width: 2.1.1 + strip-ansi: 4.0.0 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@2.4.3: + dependencies: + graceful-fs: 4.2.11 + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + ws@6.2.3: + dependencies: + async-limiter: 1.0.1 + + ws@7.5.10: {} + + ws@8.17.1: {} + + ws@8.18.1: {} + + xcode@3.0.1: + dependencies: + simple-plist: 1.3.1 + uuid: 7.0.3 + + xdg-basedir@5.1.0: {} + + xhr@2.6.0: + dependencies: + global: 4.4.0 + is-function: 1.0.2 + parse-headers: 2.0.5 + xtend: 4.0.2 + + xml-name-validator@4.0.0: {} + + xml-parse-from-string@1.0.1: {} + + xml2js@0.5.0: + dependencies: + sax: 1.4.1 + xmlbuilder: 11.0.1 + + xml2js@0.6.0: + dependencies: + sax: 1.4.1 + xmlbuilder: 11.0.1 + + xml@1.0.1: {} + + xmlbuilder@11.0.1: {} + + xmlbuilder@14.0.0: {} + + xmlbuilder@15.1.1: {} + + xmlchars@2.2.0: {} + + xmlhttprequest-ssl@2.0.0: {} + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml@2.7.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} + + yocto-queue@1.1.1: {} + + yoctocolors-cjs@2.1.2: {} + + yoctocolors@2.1.1: {} + + zod-validation-error@3.4.0(zod@3.24.2): + dependencies: + zod: 3.24.2 + + zod@3.24.2: {} + + zustand@4.5.6(@types/react@18.3.18)(react@18.3.1): + dependencies: + use-sync-external-store: 1.4.0(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + react: 18.3.1 diff --git a/scripts/convert-svg.sh b/scripts/convert-svg.sh new file mode 100755 index 0000000..9f5f890 --- /dev/null +++ b/scripts/convert-svg.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Convert SVG to PNG +convert -background none -size 40x40 assets/images/user-marker.svg assets/images/user-marker.png \ No newline at end of file diff --git a/scripts/genrate-apk-and-install b/scripts/genrate-apk-and-install new file mode 100755 index 0000000..6de1fdf --- /dev/null +++ b/scripts/genrate-apk-and-install @@ -0,0 +1,5 @@ +#!/bin/bash +# this simple script will get the latest build url for the android platform +./android/gradlew assembleRelease -p ./android # build debug apk +find ./android -type f -name "app-release.apk" # find apk file +adb install "" \ No newline at end of file diff --git a/scripts/i18next-syntax-validation.js b/scripts/i18next-syntax-validation.js new file mode 100644 index 0000000..f348f04 --- /dev/null +++ b/scripts/i18next-syntax-validation.js @@ -0,0 +1,23 @@ +const validate = (message = "") => { + if (!(message || "").trim()) { + throw new SyntaxError("Message is Empty."); + } + if (typeof message !== "string") { + throw new TypeError("Message must be a String."); + } + if ( + (message.includes("{") || message.includes("}")) && + !/{{ ?(?:- |\w+?)(, ?)?\w+? ?}}/g.test(message) + ) { + throw new SyntaxError( + "Interpolation error. See: https://www.i18next.com/misc/json-format", + ); + } + if (message.includes("$t(") && !/\$t\([\w]+:\w+(?:\.\w+)*\)/g.test(message)) { + throw new SyntaxError( + "Nesting error. See: https://www.i18next.com/misc/json-format", + ); + } +}; + +module.exports = validate; diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000..da07aa6 Binary files /dev/null and b/src/.DS_Store differ diff --git a/src/api/calls/callFiles.ts b/src/api/calls/callFiles.ts new file mode 100644 index 0000000..ebed940 --- /dev/null +++ b/src/api/calls/callFiles.ts @@ -0,0 +1,196 @@ +import axios, { + type AxiosProgressEvent, + type AxiosRequestConfig, + type AxiosResponse, +} from 'axios'; + +import { createApiEndpoint } from '@/api/common/client'; +import { type CallFilesResult } from '@/models/v4/callFiles/callFilesResult'; +import { type SaveCallFileResult } from '@/models/v4/callFiles/saveCallFileResult'; + +// Event types for the download process +export type DownloadEventType = 'start' | 'progress' | 'complete' | 'error'; + +// Interface for download progress events +export interface DownloadProgressEvent { + type: DownloadEventType; + progress?: number; // 0-100 + loaded?: number; + total?: number; + error?: Error; + response?: AxiosResponse; +} + +// Interface for download options +export interface DownloadOptions { + onEvent?: (event: DownloadProgressEvent) => void; + headers?: Record; + timeout?: number; + fileName?: string; +} + +const getCallFilesApi = createApiEndpoint('/CallFiles/GetFilesForCall'); +const saveCallFileApi = createApiEndpoint('/CallFiles/SaveCallFile'); + +// Function to download a file with progress reporting +export const getCallAttachmentFile = async ( + url: string, + options: DownloadOptions = {} +): Promise => { + const { onEvent, headers = {}, timeout = 30000 } = options; + + try { + // Notify start event + onEvent?.({ + type: 'start', + }); + + const config: AxiosRequestConfig = { + responseType: 'blob', + headers, + timeout, + onDownloadProgress: (progressEvent: AxiosProgressEvent) => { + if (progressEvent.total) { + const percentCompleted = Math.round( + (progressEvent.loaded * 100) / progressEvent.total + ); + + // Notify progress event + onEvent?.({ + type: 'progress', + progress: percentCompleted, + loaded: progressEvent.loaded, + total: progressEvent.total, + }); + } + }, + }; + + const response = await axios.get(url, config); + + // Notify complete event + onEvent?.({ + type: 'complete', + response, + }); + + return response.data; + } catch (error) { + // Notify error event + onEvent?.({ + type: 'error', + error: + error instanceof Error ? error : new Error('Unknown error occurred'), + }); + + throw error; + } +}; + +// Utility function to save a blob as a file +export const saveBlobAsFile = (blob: Blob, fileName: string): void => { + const url = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = fileName; + link.click(); + + // Clean up + window.URL.revokeObjectURL(url); +}; + +export const getFiles = async ( + callId: string, + includeData: boolean, + type: number +) => { + const response = await getCallFilesApi.get({ + callId: callId, + includeData: includeData, + type: type, + }); + return response.data; +}; + +export const getCallImages = async (callId: string, includeData: boolean) => { + const response = await getCallFilesApi.get({ + callId: callId, + includeData: includeData, + type: 2, + }); + return response.data; +}; + +export const getCallFiles = async (callId: string, includeData: boolean) => { + const response = await getCallFilesApi.get({ + callId: callId, + includeData: includeData, + type: 3, + }); + return response.data; +}; + +export const getCallAudio = async (callId: string, includeData: boolean) => { + const response = await getCallFilesApi.get({ + callId: callId, + includeData: includeData, + type: 1, + }); + return response.data; +}; + +export const saveCallFile = async ( + callId: string, + userId: string, + note: string, + name: string, + latitude: number | null, + longitude: number | null, + file: string, + type: number +) => { + let data = { + CallId: callId, + UserId: userId, + Type: type, + Name: name, + Latitude: '', + Longitude: '', + Note: note, + Data: file, + }; + + if (latitude && longitude) { + data.Latitude = latitude?.toString(); + data.Longitude = longitude?.toString(); + } + + const response = await saveCallFileApi.post({ + ...data, + }); + return response.data; +}; + +export const saveCallImage = async ( + callId: string, + userId: string, + note: string, + name: string, + latitude: number | null, + longitude: number | null, + file: string +) => { + return saveCallFile(callId, userId, note, name, latitude, longitude, file, 2); +}; + +export const saveCallFileAttachment = async ( + callId: string, + userId: string, + note: string, + name: string, + latitude: number | null, + longitude: number | null, + file: string +) => { + return saveCallFile(callId, userId, note, name, latitude, longitude, file, 3); +}; diff --git a/src/api/calls/callNotes.ts b/src/api/calls/callNotes.ts new file mode 100644 index 0000000..245b419 --- /dev/null +++ b/src/api/calls/callNotes.ts @@ -0,0 +1,39 @@ +import { createApiEndpoint } from '@/api/common/client'; +import { type CallNotesResult } from '@/models/v4/callNotes/callNotesResult'; +import { type SaveCallNoteResult } from '@/models/v4/callNotes/saveCallNoteResult'; + +const getCallNotesApi = createApiEndpoint('/CallNotes/GetCallNotes'); +const saveCallNoteApi = createApiEndpoint('/CallNotes/SaveCallNote'); + +export const getCallNotes = async (callId: string) => { + const response = await getCallNotesApi.get({ + callId: callId, + }); + return response.data; +}; + +export const saveCallNote = async ( + callId: string, + userId: string, + note: string, + latitude: number | null, + longitude: number | null +) => { + let data = { + CallId: callId, + UserId: userId, + Note: note, + Latitude: '', + Longitude: '', + }; + + if (latitude && longitude) { + data.Latitude = latitude?.toString(); + data.Longitude = longitude?.toString(); + } + + const response = await saveCallNoteApi.post({ + ...data, + }); + return response.data; +}; diff --git a/src/api/calls/callPriorities.ts b/src/api/calls/callPriorities.ts new file mode 100644 index 0000000..cfcd327 --- /dev/null +++ b/src/api/calls/callPriorities.ts @@ -0,0 +1,13 @@ +import { createApiEndpoint } from '@/api/common/client'; +import { CallPrioritiesResult } from '@/models/v4/callPriorities/callPrioritiesResult'; +import { createCachedApiEndpoint } from '../common/cached-client'; + +const callsPrioritesApi = createCachedApiEndpoint('/CallPriorities/GetAllCallPriorites', { + ttl: (60 * 1000) * 2880, // Cache for 2 days + enabled: true, +}); + +export const getCallPriorities = async () => { + const response = await callsPrioritesApi.get(); + return response.data; +}; diff --git a/src/api/calls/callTypes.ts b/src/api/calls/callTypes.ts new file mode 100644 index 0000000..cfb2cf7 --- /dev/null +++ b/src/api/calls/callTypes.ts @@ -0,0 +1,12 @@ +import { CallTypesResult } from '@/models/v4/callTypes/callTypesResult'; +import { createCachedApiEndpoint } from '../common/cached-client'; + +const callsTypesApi = createCachedApiEndpoint('/CallTypes/GetAllCallTypes', { + ttl: (60 * 1000) * 2880, // Cache for 2 days + enabled: true, +}); + +export const getCallTypes = async () => { + const response = await callsTypesApi.get(); + return response.data; +}; \ No newline at end of file diff --git a/src/api/calls/calls.ts b/src/api/calls/calls.ts new file mode 100644 index 0000000..efbaadf --- /dev/null +++ b/src/api/calls/calls.ts @@ -0,0 +1,32 @@ +import { createCachedApiEndpoint } from '../common/cached-client'; +import { ActiveCallsResult } from '@/models/v4/calls/activeCallsResult'; +import { createApiEndpoint } from '../common/client'; +import { CallExtraDataResult } from '@/models/v4/calls/callExtraDataResult'; +import { CallResult } from '@/models/v4/calls/callResult'; + +const callsApi = createCachedApiEndpoint('/Calls/GetActiveCalls', { + ttl: 60 * 1000, // Cache for 60 seconds + enabled: true, +}); + +const getCallApi = createApiEndpoint('/Calls/GetCall'); +const getCallExtraDataApi = createApiEndpoint('/Calls/GetCallExtraData'); + +export const getCalls = async () => { + const response = await callsApi.get(); + return response.data; +}; + +export const getCallExtraData = async (callId: string) => { + const response = await getCallExtraDataApi.get({ + callId: encodeURIComponent(callId), + }); + return response.data; +}; + +export const getCall = async (callId: string) => { + const response = await getCallApi.get({ + callId: encodeURIComponent(callId), + }); + return response.data; +}; diff --git a/src/api/common/api-provider.tsx b/src/api/common/api-provider.tsx new file mode 100644 index 0000000..ff1e48d --- /dev/null +++ b/src/api/common/api-provider.tsx @@ -0,0 +1,13 @@ +import { useReactQueryDevTools } from '@dev-plugins/react-query'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import * as React from 'react'; + +export const queryClient = new QueryClient(); + +export function APIProvider({ children }: { children: React.ReactNode }) { + useReactQueryDevTools(queryClient); + return ( + // Provide the client to your App + {children} + ); +} diff --git a/src/api/common/cached-client.ts b/src/api/common/cached-client.ts new file mode 100644 index 0000000..e8b94a7 --- /dev/null +++ b/src/api/common/cached-client.ts @@ -0,0 +1,47 @@ +import { AxiosResponse } from 'axios'; +import { createApiEndpoint } from './client'; +import { cacheManager } from '@/lib/cache/cache-manager'; + +interface CacheConfig { + ttl?: number; // Time to live in milliseconds + enabled?: boolean; // Whether to use cache for this endpoint +} + +export const createCachedApiEndpoint = ( + endpoint: string, + cacheConfig: CacheConfig = { enabled: true } +) => { + const api = createApiEndpoint(endpoint); + const defaultTTL = 5 * 60 * 1000; // 5 minutes + + return { + get: async (params?: Record): Promise> => { + if (!cacheConfig.enabled) { + return api.get(params); + } + + const cached = cacheManager.get(endpoint, params); + if (cached) { + return Promise.resolve({ + data: cached, + status: 200, + statusText: 'OK (cached)', + headers: {}, + config: {}, + } as AxiosResponse); + } + + const response = await api.get(params); + cacheManager.set( + endpoint, + response.data, + params, + cacheConfig.ttl || defaultTTL + ); + return response; + }, + post: api.post, + put: api.put, + delete: api.delete, + }; +}; \ No newline at end of file diff --git a/src/api/common/client.tsx b/src/api/common/client.tsx new file mode 100644 index 0000000..6a6b91c --- /dev/null +++ b/src/api/common/client.tsx @@ -0,0 +1,140 @@ +import axios, { + type AxiosError, + type AxiosInstance, + type InternalAxiosRequestConfig, +} from 'axios'; + +import { refreshTokenRequest } from '@/lib/auth/api'; +import { logger } from '@/lib/logging'; +import { getBaseApiUrl } from '@/lib/storage/app'; +import useAuthStore from '@/stores/auth/store'; + +// Create axios instance with default config +const axiosInstance: AxiosInstance = axios.create({ + baseURL: getBaseApiUrl(), + headers: { + 'Content-Type': 'application/json', + }, +}); + +// Track if we're refreshing the token +let isRefreshing = false; +// Store pending requests +let failedQueue: { + resolve: (value?: unknown) => void; + reject: (reason?: unknown) => void; +}[] = []; + +const processQueue = (error: Error | null) => { + failedQueue.forEach((prom) => { + if (error) { + prom.reject(error); + } else { + prom.resolve(); + } + }); + failedQueue = []; +}; + +// Request interceptor for API calls +axiosInstance.interceptors.request.use( + (config: InternalAxiosRequestConfig) => { + const accessToken = useAuthStore.getState().accessToken; + if (accessToken) { + config.headers.Authorization = `Bearer ${accessToken}`; + } + return config; + }, + (error: AxiosError) => { + return Promise.reject(error); + } +); + +// Response interceptor for API calls +axiosInstance.interceptors.response.use( + (response) => response, + async (error: AxiosError) => { + const originalRequest = error.config; + if (!originalRequest) { + return Promise.reject(error); + } + // Handle 401 errors + if ( + error.response?.status === 401 && + !(originalRequest as InternalAxiosRequestConfig & { _retry?: boolean }) + ._retry + ) { + if (isRefreshing) { + // If refreshing, queue the request + return new Promise((resolve, reject) => { + failedQueue.push({ resolve, reject }); + }) + .then(() => { + return axiosInstance(originalRequest); + }) + .catch((err) => { + return Promise.reject(err); + }); + } + + // Add _retry property to request config type + ( + originalRequest as InternalAxiosRequestConfig & { _retry: boolean } + )._retry = true; + isRefreshing = true; + + try { + const refreshToken = useAuthStore.getState().refreshToken; + if (!refreshToken) { + throw new Error('No refresh token available'); + } + + const response = await refreshTokenRequest(refreshToken); + const { access_token, refresh_token: newRefreshToken } = response; + + // Update tokens in store + useAuthStore.setState({ + accessToken: access_token, + refreshToken: newRefreshToken, + status: 'signedIn', + error: null, + }); + + // Update Authorization header + axiosInstance.defaults.headers.common.Authorization = `Bearer ${access_token}`; + originalRequest.headers.Authorization = `Bearer ${access_token}`; + + processQueue(null); + return axiosInstance(originalRequest); + } catch (refreshError) { + processQueue(refreshError as Error); + // Handle refresh token failure + useAuthStore.getState().logout(); + logger.error({ + message: 'Token refresh failed', + context: { error: refreshError }, + }); + return Promise.reject(refreshError); + } finally { + isRefreshing = false; + } + } + + return Promise.reject(error); + } +); + +// Export configured axios instance +export const api = axiosInstance; + +// Helper function to create API endpoints +export const createApiEndpoint = (endpoint: string) => { + return { + get: (params?: Record) => + api.get(endpoint, { params }), + post: (data: Record) => api.post(endpoint, data), + put: (data: Record) => api.put(endpoint, data), + delete: (params?: Record) => + api.delete(endpoint, { params }), + }; +}; diff --git a/src/api/common/index.tsx b/src/api/common/index.tsx new file mode 100644 index 0000000..e5c6ea7 --- /dev/null +++ b/src/api/common/index.tsx @@ -0,0 +1,3 @@ +export * from './api-provider'; +export * from './client'; +export * from './utils'; diff --git a/src/api/common/utils.tsx b/src/api/common/utils.tsx new file mode 100644 index 0000000..34b2bdf --- /dev/null +++ b/src/api/common/utils.tsx @@ -0,0 +1,51 @@ +import type { + GetNextPageParamFunction, + GetPreviousPageParamFunction, +} from '@tanstack/react-query'; + +import type { PaginateQuery } from '../types'; + +type KeyParams = { + [key: string]: any; +}; +export const DEFAULT_LIMIT = 10; + +export function getQueryKey(key: string, params?: T) { + return [key, ...(params ? [params] : [])]; +} + +// for infinite query pages to flatList data +export function normalizePages(pages?: PaginateQuery[]): T[] { + return pages + ? pages.reduce((prev: T[], current) => [...prev, ...current.results], []) + : []; +} + +// a function that accept a url and return params as an object +export function getUrlParameters( + url: string | null +): { [k: string]: string } | null { + if (url === null) { + return null; + } + let regex = /[?&]([^=#]+)=([^&#]*)/g, + params = {}, + match; + while ((match = regex.exec(url))) { + if (match[1] !== null) { + //@ts-ignore + params[match[1]] = match[2]; + } + } + return params; +} + +export const getPreviousPageParam: GetNextPageParamFunction< + unknown, + PaginateQuery +> = (page) => getUrlParameters(page.previous)?.offset ?? null; + +export const getNextPageParam: GetPreviousPageParamFunction< + unknown, + PaginateQuery +> = (page) => getUrlParameters(page.next)?.offset ?? null; diff --git a/src/api/config/config.ts b/src/api/config/config.ts new file mode 100644 index 0000000..ec6f0d9 --- /dev/null +++ b/src/api/config/config.ts @@ -0,0 +1,17 @@ +import { type GetConfigResult } from '@/models/v4/configs/getConfigResult'; + +import { createCachedApiEndpoint } from '../common/cached-client'; + +const getConfigApi = createCachedApiEndpoint('/Config/GetConfig', { + ttl: 60 * 1000 * 1440, // Cache for 1 days + enabled: true, +}); + +export const getConfig = async (key: string) => { + const response = await getConfigApi.get({ + params: { + key: encodeURIComponent(key), + }, + }); + return response.data; +}; diff --git a/src/api/contacts/contacts.ts b/src/api/contacts/contacts.ts new file mode 100644 index 0000000..7aacdf8 --- /dev/null +++ b/src/api/contacts/contacts.ts @@ -0,0 +1,36 @@ +import { type ContactResult } from '@/models/v4/contacts/contactResult'; +import { type ContactsCategoriesResult } from '@/models/v4/contacts/contactsCategoriesResult'; +import { type ContactsResult } from '@/models/v4/contacts/contactsResult'; + +import { createCachedApiEndpoint } from '../common/cached-client'; +import { createApiEndpoint } from '../common/client'; + +// Define API endpoints +const getAllContactsApi = createCachedApiEndpoint('/Contacts/GetAllContacts', { + ttl: 60 * 1000 * 1440, // Cache for 1 day + enabled: true, +}); + +const getAllContactCategoriesApi = createCachedApiEndpoint('/Contacts/GetAllContactCategories', { + ttl: 60 * 1000 * 1440, // Cache for 1 day + enabled: true, +}); + +const getContactApi = createApiEndpoint('/Contacts/GetContactById'); + +export const getAllContacts = async () => { + const response = await getAllContactsApi.get(); + return response.data; +}; + +export const getContact = async (contactId: string) => { + const response = await getContactApi.get({ + contactId, + }); + return response.data; +}; + +export const getAllContactCategories = async () => { + const response = await getAllContactCategoriesApi.get(); + return response.data; +}; diff --git a/src/api/devices/push.ts b/src/api/devices/push.ts new file mode 100644 index 0000000..7be8a32 --- /dev/null +++ b/src/api/devices/push.ts @@ -0,0 +1,13 @@ +import { type PushRegistrationResult } from '@/models/v4/device/pushRegistrationResult'; +import { type PushRegistrationUnitInput } from '@/models/v4/device/pushRegistrationUnitInput'; + +import { createApiEndpoint } from '../common/client'; + +const registerUnitDeviceApi = createApiEndpoint('/Devices/RegisterUnitDevice'); + +export const registerUnitDevice = async (data: PushRegistrationUnitInput) => { + const response = await registerUnitDeviceApi.post({ + ...data, + }); + return response.data; +}; diff --git a/src/api/groups/groups.ts b/src/api/groups/groups.ts new file mode 100644 index 0000000..6e9256f --- /dev/null +++ b/src/api/groups/groups.ts @@ -0,0 +1,26 @@ +import { type GroupResult } from '@/models/v4/groups/groupResult'; +import { type GroupsResult } from '@/models/v4/groups/groupsResult'; + +import { createCachedApiEndpoint } from '../common/cached-client'; +import { createApiEndpoint } from '../common/client'; + +const getAllGroupsApi = createCachedApiEndpoint('/Groups/GetAllGroups', { + ttl: 60 * 1000 * 2880, // Cache for 2 days + enabled: true, +}); + +const getGroupsApi = createApiEndpoint('/Groups/GetAllGroups'); + +export const getAllGroups = async () => { + const response = await getAllGroupsApi.get(); + return response.data; +}; + +export const getGroup = async (groupId: string) => { + const response = await getGroupsApi.get({ + params: { + groupId: encodeURIComponent(groupId), + }, + }); + return response.data; +}; diff --git a/src/api/index.tsx b/src/api/index.tsx new file mode 100644 index 0000000..498fd62 --- /dev/null +++ b/src/api/index.tsx @@ -0,0 +1,2 @@ +export * from './common'; +export * from './types'; diff --git a/src/api/mapping/mapping.ts b/src/api/mapping/mapping.ts new file mode 100644 index 0000000..2e45a09 --- /dev/null +++ b/src/api/mapping/mapping.ts @@ -0,0 +1,20 @@ +import { type GetMapDataAndMarkersResult } from '@/models/v4/mapping/getMapDataAndMarkersResult'; +import { type GetMapLayersResult } from '@/models/v4/mapping/getMapLayersResult'; + +import { createApiEndpoint } from '../common/client'; + +const getMayLayersApi = createApiEndpoint('/Mapping/GetMayLayers'); + +const getMapDataAndMarkersApi = createApiEndpoint('/Mapping/GetMapDataAndMarkers'); + +export const getMapDataAndMarkers = async () => { + const response = await getMapDataAndMarkersApi.get(); + return response.data; +}; + +export const getMayLayers = async (type: number) => { + const response = await getMayLayersApi.get({ + type: encodeURIComponent(type), + }); + return response.data; +}; diff --git a/src/api/notes/notes.ts b/src/api/notes/notes.ts new file mode 100644 index 0000000..01df056 --- /dev/null +++ b/src/api/notes/notes.ts @@ -0,0 +1,66 @@ +import { type NoteCategoryResult } from '@/models/v4/notes/noteCategoryResult'; +import { type NoteResult } from '@/models/v4/notes/noteResult'; +import { type NotesResult } from '@/models/v4/notes/notesResult'; +import { type SaveNoteInput } from '@/models/v4/notes/saveNoteInput'; +import { type SaveNoteResult } from '@/models/v4/notes/saveNoteResult'; + +import { createCachedApiEndpoint } from '../common/cached-client'; +import { createApiEndpoint } from '../common/client'; + +const getAllNotesApi = createCachedApiEndpoint('/Notes/GetAllNotes', { + ttl: 60 * 1000 * 2880, // Cache for 2 days + enabled: true, +}); + +const getDispatchNoteApi = createCachedApiEndpoint('/Notes/GetDispatchNote', { + ttl: 60 * 1000 * 1440, // Cache for 1 days + enabled: true, +}); + +const getNoteCategoriesApi = createCachedApiEndpoint('/Notes/GetNoteCategories', { + ttl: 60 * 1000 * 2880, // Cache for 2 days + enabled: true, +}); + +const getAllUnexpiredNotesByCategoryApi = createApiEndpoint('/Notes/GetAllUnexpiredNotesByCategory'); + +const getNoteApi = createApiEndpoint('/Notes/GetNote'); + +const saveNoteApi = createApiEndpoint('/Notes/SaveNote'); + +export const getAllNotes = async () => { + const response = await getAllNotesApi.get(); + return response.data; +}; + +export const getDispatchNote = async () => { + const response = await getDispatchNoteApi.get(); + return response.data; +}; + +export const getAllUnexpiredNotesByCategory = async (category: string, includeUnCategorized: boolean) => { + const response = await getAllUnexpiredNotesByCategoryApi.get({ + category: category, + includeUnCategorized: includeUnCategorized, + }); + return response.data; +}; + +export const getNote = async (noteId: string) => { + const response = await getNoteApi.get({ + noteId: noteId, + }); + return response.data; +}; + +export const getNoteCategories = async () => { + const response = await getNoteCategoriesApi.get(); + return response.data; +}; + +export const saveNote = async (data: SaveNoteInput) => { + const response = await saveNoteApi.post({ + ...data, + }); + return response.data; +}; diff --git a/src/api/personnel/personnel.ts b/src/api/personnel/personnel.ts new file mode 100644 index 0000000..0452743 --- /dev/null +++ b/src/api/personnel/personnel.ts @@ -0,0 +1,41 @@ +import { type GetAllPersonnelInfosResult } from '@/models/v4/personnel/getAllPersonnelInfosResult'; +import { type GetPersonnelFilterOptionsResult } from '@/models/v4/personnel/getPersonnelFilterOptionsResult'; +import { type PersonnelInfoResult } from '@/models/v4/personnel/personnelInfoResult'; + +import { createCachedApiEndpoint } from '../common/cached-client'; +import { createApiEndpoint } from '../common/client'; + +const getPersonnelInfoApi = createApiEndpoint('/Personnel/GetPersonnelInfo'); + +const getAllPersonnelInfosApi = createApiEndpoint('/Personnel/GetAllPersonnelInfos'); + +const ugetPersonnelFilterOptionsApi = createCachedApiEndpoint('/Personnel/GetPersonnelFilterOptions', { + ttl: 60 * 1000 * 2880, // Cache for 2 days + enabled: true, +}); + +export const getPersonnelInfo = async (userId: string) => { + const response = await getPersonnelInfoApi.get({ + userId: userId, + }); + return response.data; +}; + +export const getAllPersonnelInfos = async (filter: string) => { + if (filter) { + const response = await getAllPersonnelInfosApi.get({ + params: { + activeFilter: encodeURIComponent(filter), + }, + }); + return response.data; + } + + const response = await getAllPersonnelInfosApi.get(); + return response.data; +}; + +export const getUnitsFilterOptions = async () => { + const response = await ugetPersonnelFilterOptionsApi.get(); + return response.data; +}; diff --git a/src/api/protocols/protocols.ts b/src/api/protocols/protocols.ts new file mode 100644 index 0000000..d99449c --- /dev/null +++ b/src/api/protocols/protocols.ts @@ -0,0 +1,23 @@ +import { type CallProtocolsResult } from '@/models/v4/callProtocols/callProtocolsResult'; + +import { createCachedApiEndpoint } from '../common/cached-client'; +import { createApiEndpoint } from '../common/client'; + +const getAllProtocolsApi = createCachedApiEndpoint('/Protocols/GetAllProtocols', { + ttl: 60 * 1000 * 2880, // Cache for 2 days + enabled: true, +}); + +const getProtocolApi = createApiEndpoint('/Protocols/GetProtocol'); + +export const getAllProtocols = async () => { + const response = await getAllProtocolsApi.get(); + return response.data; +}; + +export const getProtocol = async (protocolId: string) => { + const response = await getProtocolApi.get({ + protocolId, + }); + return response.data; +}; diff --git a/src/api/satuses/statuses.ts b/src/api/satuses/statuses.ts new file mode 100644 index 0000000..cdee4f8 --- /dev/null +++ b/src/api/satuses/statuses.ts @@ -0,0 +1,24 @@ +import { createApiEndpoint } from '@/api/common/client'; +import { type StatusesResult } from '@/models/v4/statuses/statusesResult'; +import { type UnitTypeStatusesResult } from '@/models/v4/statuses/unitTypeStatusesResult'; + +const getAllPersonnelStatusesApi = createApiEndpoint('/Statuses/GetAllStatusesForPersonnel'); + +const getAllPersonnelStaffingsApi = createApiEndpoint('/Statuses/GetAllStaffingsForPersonnel'); + +const getAllUnitStatusesApi = createApiEndpoint('/Statuses/GetAllUnitStatuses'); + +export const getAllPersonnelStatuses = async () => { + const response = await getAllPersonnelStatusesApi.get(); + return response.data; +}; + +export const getAllPersonnelStaffings = async () => { + const response = await getAllPersonnelStaffingsApi.get(); + return response.data; +}; + +export const getAllUnitStatuses = async () => { + const response = await getAllUnitStatusesApi.get(); + return response.data; +}; diff --git a/src/api/security/security.ts b/src/api/security/security.ts new file mode 100644 index 0000000..056d596 --- /dev/null +++ b/src/api/security/security.ts @@ -0,0 +1,10 @@ +import { type DepartmentRightsResult } from '@/models/v4/security/departmentRightsResult'; + +import { createApiEndpoint } from '../common/client'; + +const getCurrentUsersRightsApi = createApiEndpoint('/Security/GetCurrentUsersRights'); + +export const getCurrentUsersRights = async () => { + const response = await getCurrentUsersRightsApi.get(); + return response.data; +}; diff --git a/src/api/types.ts b/src/api/types.ts new file mode 100644 index 0000000..410359c --- /dev/null +++ b/src/api/types.ts @@ -0,0 +1,6 @@ +export type PaginateQuery = { + results: T[]; + count: number; + next: string | null; + previous: string | null; +}; diff --git a/src/api/units/unitRoles.ts b/src/api/units/unitRoles.ts new file mode 100644 index 0000000..7dffff1 --- /dev/null +++ b/src/api/units/unitRoles.ts @@ -0,0 +1,42 @@ +import { type ActiveUnitRolesResult } from '@/models/v4/unitRoles/activeUnitRolesResult'; +import { type SetRoleAssignmentsForUnitResult } from '@/models/v4/unitRoles/setRoleAssignmentsForUnitResult'; +import { type SetUnitRolesInput } from '@/models/v4/unitRoles/setUnitRolesInput'; +import { type UnitRolesForUnitResult } from '@/models/v4/unitRoles/unitRolesForUnitResult'; + +import { createCachedApiEndpoint } from '../common/cached-client'; +import { createApiEndpoint } from '../common/client'; + +const getRolesForUnitApi = createCachedApiEndpoint('/UnitRoles/GetRolesForUnit', { + ttl: 60 * 1000 * 2880, // Cache for 2 days + enabled: true, +}); + +const getRoleAssignmentsForUnitApi = createApiEndpoint('/UnitRoles/GetRoleAssignmentsForUnit'); +const setRoleAssignmentsForUnitApi = createApiEndpoint('/UnitRoles/SetRoleAssignmentsForUnit'); +const getAllUnitRolesAndAssignmentsForDepartmentApi = createApiEndpoint('/UnitRoles/GetAllUnitRolesAndAssignmentsForDepartment'); + +export const getRolesForUnit = async (unitId: string) => { + const response = await getRolesForUnitApi.get({ + unitId: unitId, + }); + return response.data; +}; + +export const getRoleAssignmentsForUnit = async (unitId: string) => { + const response = await getRoleAssignmentsForUnitApi.get({ + unitId: unitId, + }); + return response.data; +}; + +export const setRoleAssignmentsForUnit = async (data: SetUnitRolesInput) => { + const response = await setRoleAssignmentsForUnitApi.post({ + ...data, + }); + return response.data; +}; + +export const getAllUnitRolesAndAssignmentsForDepartment = async () => { + const response = await getAllUnitRolesAndAssignmentsForDepartmentApi.get(); + return response.data; +}; diff --git a/src/api/units/unitStatuses.ts b/src/api/units/unitStatuses.ts new file mode 100644 index 0000000..fa262ad --- /dev/null +++ b/src/api/units/unitStatuses.ts @@ -0,0 +1,32 @@ +import { createApiEndpoint } from '@/api/common/client'; +import { type UnitTypeStatusesResult } from '@/models/v4/statuses/unitTypeStatusesResult'; +import { type SaveUnitStatusInput } from '@/models/v4/unitStatus/saveUnitStatusInput'; +import { type UnitStatusesResult } from '@/models/v4/unitStatus/unitStatusesResult'; +import { type UnitStatusResult } from '@/models/v4/unitStatus/unitStatusResult'; + +const getAllUnitStatusesApi = createApiEndpoint('/UnitStatus/GetAllUnitStatuses'); +const getUnitStatusApi = createApiEndpoint('/UnitStatus/GetUnitStatus'); +const saveUnitStatusApi = createApiEndpoint('/UnitStatus/SaveUnitStatus'); + +export const getAllUnitStatuses = async () => { + const response = await getAllUnitStatusesApi.get(); + return response.data; +}; + +export const getUnitStatus = async (unitId: string) => { + const response = await getUnitStatusApi.get({ + unitId: unitId, + }); + return response.data; +}; + +export const saveUnitStatus = async (data: SaveUnitStatusInput) => { + if (!data.RespondingTo) { + data.RespondingTo = '0'; + } + + const response = await saveUnitStatusApi.post({ + ...data, + }); + return response.data; +}; diff --git a/src/api/units/units.ts b/src/api/units/units.ts new file mode 100644 index 0000000..58c29c2 --- /dev/null +++ b/src/api/units/units.ts @@ -0,0 +1,43 @@ +import { createCachedApiEndpoint } from '../common/cached-client'; +import { UnitsResult } from '@/models/v4/units/unitsResult'; +import { GetUnitFilterOptionsResult } from '@/models/v4/units/getUnitFilterOptionsResult'; +import { UnitsInfoResult } from '@/models/v4/units/unitInfoResult'; + +const unitsApi = createCachedApiEndpoint('/Units/GetAllUnits', { + ttl: (60 * 1000) * 2880, // Cache for 2 days + enabled: true, +}); + +const unitsInfosApi = createCachedApiEndpoint('/Units/GetAllUnitsInfos', { + ttl: (60 * 1000) * 2880, // Cache for 2 days + enabled: true, +}); + +const unitsFilterOptionsApi = createCachedApiEndpoint('/Units/GetUnitsFilterOptions', { + ttl: (60 * 1000) * 2880, // Cache for 2 days + enabled: true, +}); + +export const getUnits = async () => { + const response = await unitsApi.get(); + return response.data; +}; + +export const getUnitsInfos = async (filter: string) => { + if (filter) { + const response = await unitsInfosApi.get({ + params: { + activeFilter: encodeURIComponent(filter) + } + }); + return response.data; + } + + const response = await unitsInfosApi.get(); + return response.data; +}; + +export const getUnitsFilterOptions = async () => { + const response = await unitsFilterOptionsApi.get(); + return response.data; +}; \ No newline at end of file diff --git a/src/api/voice/index.ts b/src/api/voice/index.ts new file mode 100644 index 0000000..ddbb93f --- /dev/null +++ b/src/api/voice/index.ts @@ -0,0 +1,47 @@ +import { type CanConnectToVoiceSessionResult } from '@/models/v4/voice/canConnectToVoiceSessionResult'; +import { type DepartmentAudioResult } from '@/models/v4/voice/departmentAudioResult'; +import { type DepartmentVoiceResult } from '@/models/v4/voice/departmentVoiceResult'; +import { type VoiceSessionConnectionResult } from '@/models/v4/voice/voiceSessionConnectionResult'; + +import { createCachedApiEndpoint } from '../common/cached-client'; +import { createApiEndpoint } from '../common/client'; + +const getConnectToSessionApi = createApiEndpoint('/Voice/ConnectToSession'); + +const getCanConnectToVoiceSessionApi = createApiEndpoint('/Voice/CanConnectToVoiceSession'); + +//const getDepartmentVoiceSettingsApi = createCachedApiEndpoint('/Voice/GetDepartmentVoiceSettings', { +// ttl: 60 * 1000 * 2880, // Cache for 2 days +// enabled: true, +//}); + +const getDepartmentVoiceSettingsApi = createApiEndpoint('/Voice/GetDepartmentVoiceSettings'); + +const getDepartmentAudioStreamsApi = createCachedApiEndpoint('/Voice/GetDepartmentAudioStreams', { + ttl: 60 * 1000 * 2880, // Cache for 2 days + enabled: true, +}); + +export const getDepartmentVoiceSettings = async () => { + const response = await getDepartmentVoiceSettingsApi.get(); + return response.data; +}; + +export const getConnectToSession = async (sessionId: string) => { + const response = await getConnectToSessionApi.get({ + sessionId: sessionId, + }); + return response.data; +}; + +export const getDepartmentAudioStreams = async () => { + const response = await getDepartmentAudioStreamsApi.get(); + return response.data; +}; + +export const getCanConnectToVoiceSession = async (token: string) => { + const response = await getCanConnectToVoiceSessionApi.get({ + token: token, + }); + return response.data; +}; diff --git a/src/app/(app)/_layout.tsx b/src/app/(app)/_layout.tsx new file mode 100644 index 0000000..07597ab --- /dev/null +++ b/src/app/(app)/_layout.tsx @@ -0,0 +1,254 @@ +/* eslint-disable react/no-unstable-nested-components */ + +import { NovuProvider } from '@novu/react-native'; +import { Redirect, SplashScreen, Tabs } from 'expo-router'; +import { Contact, ListTree, Map, Megaphone, Menu, Notebook, Settings } from 'lucide-react-native'; +import React, { useCallback, useEffect, useRef } from 'react'; +import { useTranslation } from 'react-i18next'; +import { StyleSheet, useWindowDimensions } from 'react-native'; + +import { NotificationButton } from '@/components/notifications/NotificationButton'; +import { NotificationInbox } from '@/components/notifications/NotificationInbox'; +import Sidebar from '@/components/sidebar/sidebar'; +import { View } from '@/components/ui'; +import { Button, ButtonIcon, ButtonText } from '@/components/ui/button'; +import { Drawer, DrawerBackdrop, DrawerBody, DrawerContent, DrawerFooter, DrawerHeader } from '@/components/ui/drawer'; +import { Icon } from '@/components/ui/icon'; +import { Text } from '@/components/ui/text'; +import { useAuthStore } from '@/lib/auth'; +import { useIsFirstTime } from '@/lib/storage'; +import { type GetConfigResultData } from '@/models/v4/configs/getConfigResultData'; +import { usePushNotifications } from '@/services/push-notification'; +import { useCoreStore } from '@/stores/app/core-store'; +import { useCallsStore } from '@/stores/calls/store'; +import { useRolesStore } from '@/stores/roles/store'; +import { securityStore } from '@/stores/security/store'; + +export default function TabLayout() { + const { t } = useTranslation(); + const { status } = useAuthStore(); + const [isFirstTime, _setIsFirstTime] = useIsFirstTime(); + const [isOpen, setIsOpen] = React.useState(false); + const [isNotificationsOpen, setIsNotificationsOpen] = React.useState(false); + const { width, height } = useWindowDimensions(); + const isLandscape = width > height; + const hideSplash = useCallback(async () => { + await SplashScreen.hideAsync(); + }, []); + const parentRef = useRef(null); + + // Initialize push notifications + usePushNotifications(); + + useEffect(() => { + if (status !== 'idle') { + setTimeout(() => { + hideSplash(); + }, 1000); + } + + if (status === 'signedIn') { + useCoreStore.getState().init(); + useRolesStore.getState().init(); + useCallsStore.getState().init(); + securityStore.getState().getRights(); + useCoreStore.getState().fetchConfig(); + } + }, [hideSplash, status]); + + // Force drawer open in landscape + useEffect(() => { + if (isLandscape) { + setIsOpen(true); + } + }, [isLandscape]); + + // Get user ID and config for notifications + const config = useCoreStore((state) => state.config); + const activeUnitId = useCoreStore((state) => state.activeUnitId); + const rights = securityStore((state) => state.rights); + + if (isFirstTime) { + //setIsOnboarding(); + return ; + } + if (status === 'signedOut') { + return ; + } + + const content = ( + + + {/* Drawer - conditionally rendered as permanent in landscape */} + {isLandscape ? ( + + + + ) : ( + setIsOpen(false)}> + setIsOpen(false)} /> + + + Menu + + + + + + + + + + )} + + {/* Main content area */} + + + , + headerLeft: () => , + tabBarButtonTestID: 'map-tab', + headerRight: () => , + }} + /> + + , + tabBarButtonTestID: 'calls-tab', + headerRight: () => , + }} + /> + + , + tabBarButtonTestID: 'contacts-tab', + headerRight: () => , + }} + /> + + , + tabBarButtonTestID: 'notes-tab', + headerRight: () => , + }} + /> + + , + tabBarButtonTestID: 'protocols-tab', + headerRight: () => , + }} + /> + + , + tabBarButtonTestID: 'settings-tab', + }} + /> + + + + + ); + + return ( + <> + {activeUnitId && config && rights?.DepartmentCode ? ( + + {/* NotificationInbox at the root level */} + setIsNotificationsOpen(false)} /> + {content} + + ) : ( + content + )} + + ); +} + +interface CreateDrawerMenuButtonProps { + setIsOpen: (isOpen: boolean) => void; + isLandscape: boolean; +} + +const CreateDrawerMenuButton = ({ setIsOpen, isLandscape }: CreateDrawerMenuButtonProps) => { + if (isLandscape) { + return null; + } + + return ( + + ); +}; + +const CreateNotificationButton = ({ + config, + setIsNotificationsOpen, + activeUnitId, + departmentCode, +}: { + config: GetConfigResultData | null; + setIsNotificationsOpen: (isOpen: boolean) => void; + activeUnitId: string | null; + departmentCode: string | undefined; +}) => { + if (!activeUnitId || !config || !config.NovuApplicationId || !config.NovuBackendApiUrl || !config.NovuSocketUrl || !departmentCode) { + return null; + } + + return ( + + setIsNotificationsOpen(true)} /> + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + width: '100%', + height: '100%', + }, +}); diff --git a/src/app/(app)/calls.tsx b/src/app/(app)/calls.tsx new file mode 100644 index 0000000..cec70de --- /dev/null +++ b/src/app/(app)/calls.tsx @@ -0,0 +1,99 @@ +import { useFocusEffect } from '@react-navigation/native'; +import { router } from 'expo-router'; +import { PlusIcon, RefreshCcwDotIcon, Search, X } from 'lucide-react-native'; +import React, { useCallback, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { Pressable, RefreshControl, View } from 'react-native'; + +import { CallCard } from '@/components/calls/call-card'; +import { Loading } from '@/components/common/loading'; +import ZeroState from '@/components/common/zero-state'; +import { Box } from '@/components/ui/box'; +import { Fab, FabIcon } from '@/components/ui/fab'; +import { FlatList } from '@/components/ui/flat-list'; +import { Input, InputField, InputIcon, InputSlot } from '@/components/ui/input'; +import { type CallResultData } from '@/models/v4/calls/callResultData'; +import { useCallsStore } from '@/stores/calls/store'; + +export default function Calls() { + const { calls, isLoading, error, fetchCalls, fetchCallPriorities } = useCallsStore(); + const { t } = useTranslation(); + const [searchQuery, setSearchQuery] = useState(''); + + // Fetch data when screen comes into focus + useFocusEffect( + useCallback(() => { + fetchCallPriorities(); + fetchCalls(); + + return () => { + // Clean up if needed when screen loses focus + }; + }, [fetchCalls, fetchCallPriorities]) + ); + + const handleRefresh = () => { + fetchCalls(); + fetchCallPriorities(); + }; + + const handleNewCall = () => { + router.push('/call/new/'); + }; + + // Filter calls based on search query + const filteredCalls = calls.filter((call) => call.CallId.toLowerCase().includes(searchQuery.toLowerCase()) || (call.Nature?.toLowerCase() || '').includes(searchQuery.toLowerCase())); + + // Render content based on loading, error, and data states + const renderContent = () => { + if (isLoading) { + return ; + } + + if (error) { + return ; + } + + return ( + + data={filteredCalls} + renderItem={({ item }: { item: CallResultData }) => ( + router.push(`/call/${item.CallId}`)}> + p.Id === item.Priority)} /> + + )} + keyExtractor={(item: CallResultData) => item.CallId} + refreshControl={} + ListEmptyComponent={} + contentContainerStyle={{ paddingBottom: 20 }} + /> + ); + }; + + return ( + + + {/* Search input */} + + + + + + {searchQuery ? ( + setSearchQuery('')}> + + + ) : null} + + + {/* Main content */} + {renderContent()} + + {/* FAB button for creating new call */} + + + + + + ); +} diff --git a/src/app/(app)/contacts.tsx b/src/app/(app)/contacts.tsx new file mode 100644 index 0000000..4688a3f --- /dev/null +++ b/src/app/(app)/contacts.tsx @@ -0,0 +1,78 @@ +import { ContactIcon, Search, X } from 'lucide-react-native'; +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import { FlatList, RefreshControl } from 'react-native'; + +import { Loading } from '@/components/common/loading'; +import ZeroState from '@/components/common/zero-state'; +import { ContactCard } from '@/components/contacts/contact-card'; +import { ContactDetailsSheet } from '@/components/contacts/contact-details-sheet'; +import { Box } from '@/components/ui/box'; +import { Input, InputField, InputIcon, InputSlot } from '@/components/ui/input'; +import { View } from '@/components/ui/view'; +import { useContactsStore } from '@/stores/contacts/store'; + +export default function Contacts() { + const { t } = useTranslation(); + const { contacts, searchQuery, setSearchQuery, selectContact, isLoading, fetchContacts } = useContactsStore(); + const [refreshing, setRefreshing] = React.useState(false); + + React.useEffect(() => { + fetchContacts(); + }, [fetchContacts]); + + const handleRefresh = React.useCallback(async () => { + setRefreshing(true); + await fetchContacts(); + setRefreshing(false); + }, [fetchContacts]); + + const filteredContacts = React.useMemo(() => { + if (!searchQuery.trim()) return contacts; + + const query = searchQuery.toLowerCase(); + return contacts.filter( + (contact) => + (contact.FirstName?.toLowerCase().includes(query) ?? false) || + (contact.LastName?.toLowerCase().includes(query) ?? false) || + (contact.Email?.toLowerCase().includes(query) ?? false) || + (contact.CompanyName?.toLowerCase().includes(query) ?? false) || + (contact.OtherName?.toLowerCase().includes(query) ?? false) + ); + }, [contacts, searchQuery]); + + return ( + + + + + + + + {searchQuery ? ( + setSearchQuery('')}> + + + ) : null} + + + {isLoading && !refreshing ? ( + + ) : filteredContacts.length > 0 ? ( + item.ContactId} + renderItem={({ item }) => } + showsVerticalScrollIndicator={false} + contentContainerStyle={{ paddingBottom: 100 }} + refreshControl={} + /> + ) : ( + + )} + + + + + ); +} diff --git a/src/app/(app)/index.tsx b/src/app/(app)/index.tsx new file mode 100644 index 0000000..c905a2f --- /dev/null +++ b/src/app/(app)/index.tsx @@ -0,0 +1,216 @@ +import Mapbox from '@rnmapbox/maps'; +import { Stack } from 'expo-router'; +import React, { useEffect, useRef, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { Animated, StyleSheet, View } from 'react-native'; + +import { getMapDataAndMarkers } from '@/api/mapping/mapping'; +import MapPins from '@/components/maps/map-pins'; +import { useMapSignalRUpdates } from '@/hooks/use-map-signalr-updates'; +import { Env } from '@/lib/env'; +import { logger } from '@/lib/logging'; +import { onSortOptions } from '@/lib/utils'; +import { type MapMakerInfoData } from '@/models/v4/mapping/getMapDataAndMarkersData'; +import { locationService } from '@/services/location'; +import { useLocationStore } from '@/stores/app/location-store'; +import { useToastStore } from '@/stores/toast/store'; + +Mapbox.setAccessToken(Env.UNIT_MAPBOX_PUBKEY); + +export default function Map() { + const { t } = useTranslation(); + const mapRef = useRef(null); + const cameraRef = useRef(null); + const [hasUserMovedMap, setHasUserMovedMap] = useState(false); + const [mapPins, setMapPins] = useState([]); + const location = useLocationStore((state) => ({ + latitude: state.latitude, + longitude: state.longitude, + heading: state.heading, + })); + + const _mapOptions = Object.keys(Mapbox.StyleURL) + .map((key) => { + return { + label: key, + data: (Mapbox.StyleURL as any)[key], + }; + }) + .sort(onSortOptions); + + const [styleURL] = useState({ styleURL: _mapOptions[0].data }); + + const pulseAnim = useRef(new Animated.Value(1)).current; + useMapSignalRUpdates(setMapPins); + + useEffect(() => { + const startLocationTracking = async () => { + try { + await locationService.startLocationUpdates(); + logger.info({ + message: 'Location tracking started successfully', + }); + } catch (error) { + logger.error({ + message: 'MapPage: Failed to start location tracking. ' + JSON.stringify(error), + context: { + error, + }, + }); + + useToastStore.getState().showToast('error', 'Failed to start location tracking'); + } + }; + + startLocationTracking(); + + return () => { + locationService.stopLocationUpdates(); + }; + }, []); + + useEffect(() => { + if (location.latitude && location.longitude) { + logger.info({ + message: 'Location updated', + context: { + latitude: location.latitude, + longitude: location.longitude, + heading: location.heading, + }, + }); + + if (!hasUserMovedMap) { + cameraRef.current?.setCamera({ + centerCoordinate: [location.longitude, location.latitude], + zoomLevel: 12, + animationDuration: 1000, + }); + } + } + }, [location.latitude, location.longitude, location.heading, hasUserMovedMap]); + + useEffect(() => { + const fetchMapDataAndMarkers = async () => { + const mapDataAndMarkers = await getMapDataAndMarkers(); + + if (mapDataAndMarkers && mapDataAndMarkers.Data) { + setMapPins(mapDataAndMarkers.Data.MapMakerInfos); + } + }; + + fetchMapDataAndMarkers(); + }, [setMapPins]); + + useEffect(() => { + Animated.loop( + Animated.sequence([ + Animated.timing(pulseAnim, { + toValue: 1.2, + duration: 1000, + useNativeDriver: true, + }), + Animated.timing(pulseAnim, { + toValue: 1, + duration: 1000, + useNativeDriver: true, + }), + ]) + ).start(); + }, []); + + const onCameraChanged = (event: any) => { + if (event.properties.isUserInteraction) { + setHasUserMovedMap(true); + } + }; + + return ( + <> + + + + + + {location.latitude && location.longitude && ( + + + + + + + + + )} + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, + map: { + flex: 1, + }, + markerContainer: { + alignItems: 'center', + justifyContent: 'center', + width: 50, + height: 50, + zIndex: 1, + }, + markerInnerContainer: { + width: 40, + height: 40, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: 'rgba(52, 152, 219, 0.2)', + borderRadius: 20, + }, + markerDot: { + width: 16, + height: 16, + borderRadius: 8, + backgroundColor: '#3498db', + borderWidth: 3, + borderColor: '#fff', + }, + directionIndicator: { + position: 'absolute', + width: 0, + height: 0, + backgroundColor: 'transparent', + borderStyle: 'solid', + borderLeftWidth: 6, + borderRightWidth: 6, + borderBottomWidth: 20, + borderLeftColor: 'transparent', + borderRightColor: 'transparent', + borderBottomColor: '#3498db', + top: -4, + }, +}); diff --git a/src/app/(app)/notes.tsx b/src/app/(app)/notes.tsx new file mode 100644 index 0000000..7729c0d --- /dev/null +++ b/src/app/(app)/notes.tsx @@ -0,0 +1,73 @@ +import { FileText, Search, X } from 'lucide-react-native'; +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import { FlatList, RefreshControl, View } from 'react-native'; + +import { Loading } from '@/components/common/loading'; +import ZeroState from '@/components/common/zero-state'; +import { NoteCard } from '@/components/notes/note-card'; +import { NoteDetailsSheet } from '@/components/notes/note-details-sheet'; +import { Box } from '@/components/ui/box'; +import { Input } from '@/components/ui/input'; +import { InputField, InputIcon, InputSlot } from '@/components/ui/input'; +import { useNotesStore } from '@/stores/notes/store'; + +export default function Notes() { + const { t } = useTranslation(); + const { notes, searchQuery, setSearchQuery, selectNote, isLoading, fetchNotes } = useNotesStore(); + const [refreshing, setRefreshing] = React.useState(false); + + React.useEffect(() => { + fetchNotes(); + }, [fetchNotes]); + + const handleRefresh = React.useCallback(async () => { + setRefreshing(true); + await fetchNotes(); + setRefreshing(false); + }, [fetchNotes]); + + const filteredNotes = React.useMemo(() => { + if (!searchQuery.trim()) return notes; + + const query = searchQuery.toLowerCase(); + return notes.filter((note) => note.Title.toLowerCase().includes(query) || note.Body.toLowerCase().includes(query) || note.Category?.toLowerCase().includes(query)); + }, [notes, searchQuery]); + + return ( + <> + + + + + + + + {searchQuery ? ( + setSearchQuery('')}> + + + ) : null} + + + {isLoading && !refreshing ? ( + + ) : filteredNotes.length > 0 ? ( + item.NoteId} + renderItem={({ item }) => } + showsVerticalScrollIndicator={false} + contentContainerStyle={{ paddingBottom: 100 }} + refreshControl={} + /> + ) : ( + + )} + + + + + + ); +} diff --git a/src/app/(app)/protocols.tsx b/src/app/(app)/protocols.tsx new file mode 100644 index 0000000..9bcbae7 --- /dev/null +++ b/src/app/(app)/protocols.tsx @@ -0,0 +1,73 @@ +import { FileText, Search, X } from 'lucide-react-native'; +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import { FlatList, RefreshControl, View } from 'react-native'; + +import { Loading } from '@/components/common/loading'; +import ZeroState from '@/components/common/zero-state'; +import { ProtocolCard } from '@/components/protocols/protocol-card'; +import { ProtocolDetailsSheet } from '@/components/protocols/protocol-details-sheet'; +import { Box } from '@/components/ui/box'; +import { Input } from '@/components/ui/input'; +import { InputField, InputIcon, InputSlot } from '@/components/ui/input'; +import { useProtocolsStore } from '@/stores/protocols/store'; + +export default function Protocols() { + const { t } = useTranslation(); + const { protocols, searchQuery, setSearchQuery, selectProtocol, isLoading, fetchProtocols } = useProtocolsStore(); + const [refreshing, setRefreshing] = React.useState(false); + + React.useEffect(() => { + fetchProtocols(); + }, [fetchProtocols]); + + const handleRefresh = React.useCallback(async () => { + setRefreshing(true); + await fetchProtocols(); + setRefreshing(false); + }, [fetchProtocols]); + + const filteredProtocols = React.useMemo(() => { + if (!searchQuery.trim()) return protocols; + + const query = searchQuery.toLowerCase(); + return protocols.filter((protocol) => protocol.Name.toLowerCase().includes(query) || protocol.Description?.toLowerCase().includes(query) || protocol.Code?.toLowerCase().includes(query)); + }, [protocols, searchQuery]); + + return ( + <> + + + + + + + + {searchQuery ? ( + setSearchQuery('')}> + + + ) : null} + + + {isLoading && !refreshing ? ( + + ) : filteredProtocols.length > 0 ? ( + item.Id} + renderItem={({ item }) => } + showsVerticalScrollIndicator={false} + contentContainerStyle={{ paddingBottom: 100 }} + refreshControl={} + /> + ) : ( + + )} + + + + + + ); +} diff --git a/src/app/(app)/settings.tsx b/src/app/(app)/settings.tsx new file mode 100644 index 0000000..7e7ba2a --- /dev/null +++ b/src/app/(app)/settings.tsx @@ -0,0 +1,114 @@ +/* eslint-disable react/react-in-jsx-scope */ +import { Env } from '@env'; +import { useColorScheme } from 'nativewind'; +import React, { useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { Item } from '@/components/settings/item'; +import { LanguageItem } from '@/components/settings/language-item'; +import { LoginInfoBottomSheet } from '@/components/settings/login-info-bottom-sheet'; +import { ServerUrlBottomSheet } from '@/components/settings/server-url-bottom-sheet'; +import { ThemeItem } from '@/components/settings/theme-item'; +import { ToggleItem } from '@/components/settings/toggle-item'; +import { UnitSelectionBottomSheet } from '@/components/settings/unit-selection-bottom-sheet'; +import { ScrollView } from '@/components/ui'; +import { Box } from '@/components/ui/box'; +import { Card } from '@/components/ui/card'; +import { Heading } from '@/components/ui/heading'; +import { VStack } from '@/components/ui/vstack'; +import colors from '@/constants/colors'; +import { useAuth, useAuthStore } from '@/lib'; +import { logger } from '@/lib/logging'; +import { getBaseApiUrl } from '@/lib/storage/app'; +import { openLinkInBrowser } from '@/lib/utils'; +import { useCoreStore } from '@/stores/app/core-store'; +import { useUnitsStore } from '@/stores/units/store'; + +export default function Settings() { + const { t } = useTranslation(); + const signOut = useAuthStore.getState().logout; + const { colorScheme } = useColorScheme(); + const iconColor = colorScheme === 'dark' ? colors.dark.neutral[400] : colors.light.neutral[500]; + const [showLoginInfo, setShowLoginInfo] = React.useState(false); + const { login, status, error, isAuthenticated } = useAuth(); + const [showServerUrl, setShowServerUrl] = React.useState(false); + const [showUnitSelection, setShowUnitSelection] = React.useState(false); + const activeUnit = useCoreStore((state) => state.activeUnit); + const { units } = useUnitsStore(); + + const activeUnitName = React.useMemo(() => { + if (!activeUnit) return t('settings.none_selected'); + return activeUnit?.Name || t('common.unknown'); + }, [activeUnit, units]); + + const handleLoginInfoSubmit = async (data: { username: string; password: string }) => { + logger.info({ + message: 'Updating login info', + }); + await login({ username: data.username, password: data.password }); + }; + + useEffect(() => { + if (status === 'signedIn' && isAuthenticated) { + logger.info({ + message: 'Setting Login info successful', + }); + } + }, [status, isAuthenticated]); + + return ( + + + + {/* App Info Section */} + + {t('settings.app_info')} + + + + + + + + {/* Account Section */} + + {t('settings.account')} + + setShowServerUrl(true)} textStyle="text-info-600" /> + setShowLoginInfo(true)} textStyle="text-info-600" /> + setShowUnitSelection(true)} textStyle="text-info-600" /> + + + + + {/* Preferences Section */} + + {t('settings.preferences')} + + + + {}} /> + {}} /> + + + + {/* Support Section */} + + {t('settings.support')} + + openLinkInBrowser('https://resgrid.zohodesk.com/portal/en/home')} /> + openLinkInBrowser('https://resgrid.com/contact')} /> + openLinkInBrowser('https://resgrid.freshstatus.io')} /> + openLinkInBrowser('https://resgrid.com/privacy')} /> + openLinkInBrowser('https://resgrid.com/terms')} /> + + + + + + setShowLoginInfo(false)} onSubmit={handleLoginInfoSubmit} /> + setShowServerUrl(false)} /> + setShowUnitSelection(false)} /> + + ); +} diff --git a/src/app/+html.tsx b/src/app/+html.tsx new file mode 100644 index 0000000..64afece --- /dev/null +++ b/src/app/+html.tsx @@ -0,0 +1,43 @@ +import { ScrollViewStyleReset } from 'expo-router/html'; + +// This file is web-only and used to configure the root HTML for every +// web page during static rendering. +// The contents of this function only run in Node.js environments and +// do not have access to the DOM or browser APIs. +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + + + + + {/* + This viewport disables scaling which makes the mobile website act more like a native app. + However this does reduce built-in accessibility. If you want to enable scaling, use this instead: + + */} + + {/* + Disable body scrolling on web. This makes ScrollView components work closer to how they do on native. + However, body scrolling is often nice to have for mobile web. If you want to enable it, remove this line. + */} + + + {/* Using raw CSS styles as an escape-hatch to ensure the background color never flickers in dark-mode. */} + + + ${call.Note} + + `, + }} + androidLayerType="software" + /> + + + + + ), + }, + { + key: 'contact', + title: t('call_detail.tabs.contact'), + icon: , + content: ( + + + + {t('call_detail.reference_id')} + {call.ReferenceId} + + + {t('call_detail.external_id')} + {call.ExternalId} + + + {t('call_detail.contact_name')} + {call.ContactName} + + + {t('call_detail.contact_info')} + {call.ContactInfo} + + + + ), + }, + { + key: 'protocols', + title: t('call_detail.tabs.protocols'), + icon: , + content: ( + + {callExtraData?.Protocols && callExtraData.Protocols.length > 0 ? ( + + {callExtraData.Protocols.map((protocol, index) => ( + + {protocol.Name} + {protocol.Description} + + + + + + + + ${protocol.ProtocolText} + + `, + }} + androidLayerType="software" + /> + + + ))} + + ) : ( + {t('call_detail.no_protocols')} + )} + + ), + }, + { + key: 'dispatched', + title: t('call_detail.tabs.dispatched'), + icon: , + content: ( + + {callExtraData?.Dispatches && callExtraData.Dispatches.length > 0 ? ( + + {callExtraData.Dispatches.map((dispatched, index) => ( + + {dispatched.Name} + + + {t('call_detail.group')}: {dispatched.Group} + + + {t('call_detail.type')}: {dispatched.Type} + + + + ))} + + ) : ( + {t('call_detail.no_dispatched')} + )} + + ), + }, + { + key: 'timeline', + title: t('call_detail.tabs.timeline'), + icon: , + badge: callExtraData?.Activity?.length || 0, + content: ( + + {callExtraData?.Activity && callExtraData.Activity.length > 0 ? ( + + {callExtraData.Activity.map((event, index) => ( + + + {event.StatusText} + + + {event.Name} - {event.Group} + + {new Date(event.Timestamp).toLocaleString()} + {event.Note} + + ))} + + ) : ( + {t('call_detail.no_timeline')} + )} + + ), + }, + ]; + + return tabs; + }; + + return ( + <> + + + + setIsNotesModalOpen(false)} callId={callId} /> + setIsImagesModalOpen(false)} callId={callId} /> + setIsFilesModalOpen(false)} callId={callId} /> + + ); +} + +const styles = StyleSheet.create({ + container: { + width: '100%', + backgroundColor: 'transparent', + }, +}); diff --git a/src/app/call/new/index.tsx b/src/app/call/new/index.tsx new file mode 100644 index 0000000..87693b2 --- /dev/null +++ b/src/app/call/new/index.tsx @@ -0,0 +1,391 @@ +import { zodResolver } from '@hookform/resolvers/zod'; +import { router, Stack } from 'expo-router'; +import { ChevronDownIcon, PlusIcon } from 'lucide-react-native'; +import { useColorScheme } from 'nativewind'; +import React, { useEffect, useState } from 'react'; +import { Controller, useForm } from 'react-hook-form'; +import { useTranslation } from 'react-i18next'; +import { ScrollView, View } from 'react-native'; +import * as z from 'zod'; + +import { Loading } from '@/components/common/loading'; +import FullScreenLocationPicker from '@/components/maps/full-screen-location-picker'; +import LocationPicker from '@/components/maps/location-picker'; +import { Box } from '@/components/ui/box'; +import { Button, ButtonText } from '@/components/ui/button'; +import { Card } from '@/components/ui/card'; +import { FormControl, FormControlError, FormControlLabel, FormControlLabelText } from '@/components/ui/form-control'; +import { Input, InputField } from '@/components/ui/input'; +import { Select, SelectBackdrop, SelectContent, SelectDragIndicator, SelectDragIndicatorWrapper, SelectIcon, SelectInput, SelectItem, SelectPortal, SelectTrigger } from '@/components/ui/select'; +import { Text } from '@/components/ui/text'; +import { Textarea, TextareaInput } from '@/components/ui/textarea'; +import { useToast } from '@/components/ui/toast'; +import useAuthStore from '@/stores/auth/store'; +import { useCallsStore } from '@/stores/calls/store'; + +// Define the form schema using zod +const formSchema = z.object({ + name: z.string().min(1, { message: 'Name is required' }), + nature: z.string().min(1, { message: 'Nature is required' }), + note: z.string().optional(), + address: z.string().optional(), + coordinates: z.string().optional(), + what3words: z.string().optional(), + plusCode: z.string().optional(), + latitude: z.number().optional(), + longitude: z.number().optional(), + priority: z.string().min(1, { message: 'Priority is required' }), + type: z.string().optional(), + contactName: z.string().optional(), + contactInfo: z.string().optional(), +}); + +type FormValues = z.infer; + +export default function NewCall() { + const { t } = useTranslation(); + const { colorScheme } = useColorScheme(); + const { callPriorities, isLoading, error, fetchCallPriorities } = useCallsStore(); + const { user } = useAuthStore(); + const toast = useToast(); + const [showLocationPicker, setShowLocationPicker] = useState(false); + const [selectedLocation, setSelectedLocation] = useState<{ + latitude: number; + longitude: number; + address?: string; + } | null>(null); + + const { + control, + handleSubmit, + formState: { errors }, + reset, + setValue, + watch, + } = useForm({ + resolver: zodResolver(formSchema), + defaultValues: { + name: '', + nature: '', + note: '', + address: '', + coordinates: '', + what3words: '', + plusCode: '', + latitude: undefined, + longitude: undefined, + priority: '', + type: '', + contactName: '', + contactInfo: '', + }, + }); + + useEffect(() => { + fetchCallPriorities(); + }, [fetchCallPriorities]); + + const onSubmit = async (data: FormValues) => { + try { + // If we have latitude and longitude, add them to the data + if (selectedLocation?.latitude && selectedLocation?.longitude) { + data.latitude = selectedLocation.latitude; + data.longitude = selectedLocation.longitude; + } + + // TODO: Implement the API call to create a new call + console.log('Creating new call with data:', data); + + // Show success toast + toast.show({ + placement: 'top', + render: ({ id }) => { + return ( + + {t('calls.create_success')} + + ); + }, + }); + + // Navigate back to calls list + router.push('/calls'); + } catch (error) { + console.error('Error creating call:', error); + + // Show error toast + toast.show({ + placement: 'top', + render: ({ id }) => { + return ( + + {t('calls.create_error')} + + ); + }, + }); + } + }; + + // Handle location selection from the full-screen picker + const handleLocationSelected = (location: { latitude: number; longitude: number; address?: string }) => { + setSelectedLocation(location); + setShowLocationPicker(false); + + // Update form values + setValue('latitude', location.latitude); + setValue('longitude', location.longitude); + + if (location.address) { + setValue('address', location.address); + } + + // Format coordinates as string + setValue('coordinates', `${location.latitude.toFixed(6)}, ${location.longitude.toFixed(6)}`); + }; + + if (isLoading) { + return ; + } + + if (error) { + return ( + + + {error} + + + ); + } + + return ( + <> + + + + + {t('calls.create_new_call')} + + + + + {t('calls.name')} + + ( + + + + )} + /> + {errors.name && {errors.name.message}} + + + + + + + {t('calls.nature')} + + ( + + + + )} + /> + {errors.nature && {errors.nature.message}} + + + + + + + {t('calls.priority')} + + ( + <> + + + )} + /> + {errors.priority && {errors.priority.message}} + + + + + + + {t('calls.note')} + + ( + + )} + /> + + + + + {t('calls.call_location')} + + {/* Address Field */} + + + {t('calls.address')} + + ( + + + + )} + /> + + + {/* GPS Coordinates Field */} + + + {t('calls.coordinates')} + + ( + + + + )} + /> + + + {/* what3words Field */} + + + {t('calls.what3words')} + + ( + + + + )} + /> + + + {/* Plus Code Field */} + + + {t('calls.plus_code')} + + ( + + + + )} + /> + + + {/* Map Preview */} + + {selectedLocation ? ( + + ) : ( + + )} + + + + + + + {t('calls.contact_name')} + + ( + + + + )} + /> + + + + + + + {t('calls.contact_info')} + + ( + + + + )} + /> + + + + + + + + + + + + {/* Full-screen location picker modal */} + {showLocationPicker && setShowLocationPicker(false)} />} + + ); +} diff --git a/src/app/components/call-card/call-card.component.html b/src/app/components/call-card/call-card.component.html deleted file mode 100644 index 5d726de..0000000 --- a/src/app/components/call-card/call-card.component.html +++ /dev/null @@ -1,27 +0,0 @@ - - - -

{{ call?.Name }}

-
- - {{ call?.LoggedOnUtc | rgTimeAgoUtc }} - -
- - - - -
    -
  • - - {{ call?.Address }} - -
  • -
  • - - {{ call?.Number }} - -
  • -
-
-
\ No newline at end of file diff --git a/src/app/components/call-card/call-card.component.scss b/src/app/components/call-card/call-card.component.scss deleted file mode 100644 index 2f6d6e4..0000000 --- a/src/app/components/call-card/call-card.component.scss +++ /dev/null @@ -1,132 +0,0 @@ -ion-card { - box-shadow: none !important; - border-radius: 14px; - width: 94%; - - ion-card-title, - ion-card-subtitle { - color: #ffffff; - } - - ion-card-title { - font-size: 18px; - line-height: 26px; - font-weight: 600; - margin-bottom: 16px; - } - - ion-card-subtitle { - font-size: 13px; - line-height: 20px; - font-weight: 400; - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 3; /* number of lines to show */ - -webkit-box-orient: vertical; - } -} - -ion-item { - --background: transparent; -} - -.user_data { - --padding-top: 8px; - --color: #ffffff; - - ion-avatar { - img { - width: 100% !important; - } - } - - ion-label { - font-size: 13px; - p { - color: #ffffff; - font-weight: 500; - white-space: normal; - } - - span { - opacity: 0.7; - font-weight: 400; - } - } -} - -.blue { - --background: var(--ion-color-primary); -} - -.cyan { - --background: var(--ion-color-secondary); -} - -.magenta { - --background: var(--ion-color-tertiary); -} - -.red { - --background: var(--ion-color-danger); -} - -.green { - --background: var(--ion-color-success); -} - -.yellow { - --background: var(--ion-color-warning); -} - -.dark { - --background: var(--ion-color-dark); -} - -.gray { - --background: var(--ion-color-medium); -} - -ul { - padding-left: 0; - margin: 0; - - li { - display: inline-block; - - ion-item { - --padding-start: 0; - --padding-end: 0.4em; - --inner-padding-end: 0; - - ion-icon { - color: rgba(255, 255, 255, 0.8); - } - } - - ion-label { - font-size: 13px; - --color: rgba(255, 255, 255, 0.8); - } - - ion-icon { - font-size: 24px; - padding: 0.3em; - } - } -} - -.ios ion-card-title { - font-size: 18px; - line-height: 26px; - font-weight: 600; - margin-bottom: 16px; -} - -.ios ion-card-subtitle { - font-size: 13px; - line-height: 20px; - font-weight: 400; - text-transform: initial; -} diff --git a/src/app/components/call-card/call-card.component.ts b/src/app/components/call-card/call-card.component.ts deleted file mode 100644 index 126570e..0000000 --- a/src/app/components/call-card/call-card.component.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { CallPriorityResultData, CallResultData } from '@resgrid/ngx-resgridlib'; - -@Component({ - selector: 'app-call-card', - templateUrl: './call-card.component.html', - styleUrls: ['./call-card.component.scss'], -}) -export class CallCardComponent implements OnInit { - @Input() call: CallResultData; - @Input() priority: CallPriorityResultData; - @Input() color: string; - - constructor() {} - - ngOnInit() {} - - getColor() { - if (!this.call) { - return '#808080'; - } else if (this.call.CallId === '0') { - return '#808080'; - } else if (this.priority && this.priority.Color) { - return this.priority.Color; - } - - return '#808080'; - } - - public invertColor(hex: string, bw: boolean): string { - if (hex.indexOf('#') === 0) { - hex = hex.slice(1); - } - // convert 3-digit hex to 6-digits. - if (hex.length === 3) { - hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; - } - if (hex.length !== 6) { - throw new Error('Invalid HEX color.'); - } - let r = parseInt(hex.slice(0, 2), 16), - g = parseInt(hex.slice(2, 4), 16), - b = parseInt(hex.slice(4, 6), 16); - if (bw) { - // https://stackoverflow.com/a/3943023/112731 - return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF'; - } - // invert color components - let r2 = (255 - r).toString(16), - g2 = (255 - g).toString(16), - b2 = (255 - b).toString(16); - // pad each with zeros and return - return ( - '#' + this.padZero(r2, 2) + this.padZero(g2, 2) + this.padZero(b2, 2) - ); - } - - public padZero(str: string, len: number): string { - len = len || 2; - var zeros = new Array(len).join('0'); - return (zeros + str).slice(-len); - } -} diff --git a/src/app/components/call-info/call-info.component.html b/src/app/components/call-info/call-info.component.html deleted file mode 100644 index f921b09..0000000 --- a/src/app/components/call-info/call-info.component.html +++ /dev/null @@ -1,28 +0,0 @@ -
- - - - {{ call?.Number }} - - - - {{ call?.Name }} - - - - - - - - - - - {{getPriorityName()}} - {{ getDate(call?.LoggedOn) }} - {{ call?.LoggedOnUtc | rgTimeAgoUtc }} - - - {{ call?.Address }} - - -
\ No newline at end of file diff --git a/src/app/components/call-info/call-info.component.scss b/src/app/components/call-info/call-info.component.scss deleted file mode 100644 index 2a2fbad..0000000 --- a/src/app/components/call-info/call-info.component.scss +++ /dev/null @@ -1,55 +0,0 @@ -.bookings { - width: 94%; - margin-top: 20px; - margin-left: 10px; - margin-right: 10px; - box-shadow: 0px 0px 10px 0px grey; - border-radius: 5px; - overflow: hidden; - - .call-name { - display: block; - font-size: 16px; - text-align: right; - overflow: hidden; - } - - .call-nature { - display: block; - font-size: 12px; - color: gray; - text-align: left; - } - - .call-number { - font-size: 12px; - white-space: nowrap; - color: gray; - text-align: left; - } - - .call-address { - font-size: 12px; - text-align: left; - } - - .call-priority { - display: block; - font-size: 16px; - text-align: left; - overflow: hidden; - } - - .person-group { - display: block; - font-size: 14px; - text-align: left; - } - - .call-date-time { - font-size: 12px; - display: block; - text-align: left; - color: var(--ion-color-primary); - } -} diff --git a/src/app/components/call-info/call-info.component.ts b/src/app/components/call-info/call-info.component.ts deleted file mode 100644 index 256d1c7..0000000 --- a/src/app/components/call-info/call-info.component.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Component, OnInit, Input, ChangeDetectionStrategy } from '@angular/core'; -import { CallPriorityResultData, CallResultData, UtilsService } from '@resgrid/ngx-resgridlib'; - -@Component({ - changeDetection: ChangeDetectionStrategy.OnPush, - selector: 'app-call-card-info', - templateUrl: './call-info.component.html', - styleUrls: ['./call-info.component.scss'], -}) -export class CallInfoComponent implements OnInit { - @Input() call: CallResultData; - @Input() priority: CallPriorityResultData; - @Input() color: string; - - constructor(private utilsProvider: UtilsService) {} - - ngOnInit() {} - - getColor() { - if (!this.call) { - return 'gray'; - } else if (this.call.CallId === '0') { - return 'gray'; - } else if (this.priority) { - return this.priority.Color; - } - } - - getPriorityName() { - if (!this.call) { - return 'Normal'; - } else if (this.call.CallId === '0') { - return 'Normal'; - } else if (this.priority) { - return this.priority.Name; - } - - return 'Normal'; - } - - public getDate(date) { - return this.utilsProvider.getDate(date); - } -} diff --git a/src/app/components/components.module.ts b/src/app/components/components.module.ts deleted file mode 100644 index d31d1e3..0000000 --- a/src/app/components/components.module.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { CallCardComponent } from './call-card/call-card.component'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { CTAPanelComponent } from './cta-panel/cta-panel'; -import { NoteCardComponent } from './note-card/note-card.component'; -import { ProtocolCardComponent } from './protocol-card/protocol-card.component'; -import { CallInfoComponent } from './call-info/call-info.component'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - ReactiveFormsModule, - NgxResgridLibModule - ], - declarations: [ - CallCardComponent, - CTAPanelComponent, - NoteCardComponent, - ProtocolCardComponent, - CallInfoComponent - ], - exports: [ - CallCardComponent, - CTAPanelComponent, - NoteCardComponent, - ProtocolCardComponent, - CallInfoComponent - ] -}) -export class ComponentsModule {} diff --git a/src/app/components/cta-panel/cta-panel.html b/src/app/components/cta-panel/cta-panel.html deleted file mode 100644 index f245db1..0000000 --- a/src/app/components/cta-panel/cta-panel.html +++ /dev/null @@ -1,13 +0,0 @@ -
- - -

{{title}}

- -
{{details}}
-
- {{extraDetails}} - -
- - -
\ No newline at end of file diff --git a/src/app/components/cta-panel/cta-panel.scss b/src/app/components/cta-panel/cta-panel.scss deleted file mode 100644 index 2cee3ef..0000000 --- a/src/app/components/cta-panel/cta-panel.scss +++ /dev/null @@ -1,31 +0,0 @@ -.cta-panel { - position: relative; - display: block; - color: #78909C; - padding-top: 5rem; - text-align: center; - width: 100%; - - .top-icon { - text-align: center; - font-size: 5em; - color: #CFD8DC; - } - - h1 { - margin-bottom: 2rem; - } - div { - line-height: 2rem; - padding: 0 2rem 0 2rem; - } - div.details { - font-weight: bold; - } - .extra-details-icon { - vertical-align: middle; - } - .cta-button { - margin-top: 4rem; - } -} diff --git a/src/app/components/cta-panel/cta-panel.ts b/src/app/components/cta-panel/cta-panel.ts deleted file mode 100644 index c0620d3..0000000 --- a/src/app/components/cta-panel/cta-panel.ts +++ /dev/null @@ -1,35 +0,0 @@ -import {Component, Input, Output, EventEmitter} from '@angular/core'; - -/* - Dumb component to display: - - top icon - - title - - bold paragrah - - additional paragraph for more details (with optional icon) - - button - - All the elements above are optional and come from inputs. - (If you don't provide one of the inputs, the corresponding element will not be rendered) -*/ -@Component({ - selector: 'cta-panel', - templateUrl: 'cta-panel.html', - styleUrls: ['./cta-panel.scss'], -}) -export class CTAPanelComponent { - @Input() topIcon: string; - @Input() title: string; - @Input() details: string; - @Input() extraDetails: string; - @Input() extraDetailsIcon: string; - @Input() btnLabel: string; - @Input() hideButton: boolean; - - @Output() ctaClick = new EventEmitter(); - - constructor() {} - - onCtaClick() { - this.ctaClick.emit(); - } -} \ No newline at end of file diff --git a/src/app/components/note-card/note-card.component.html b/src/app/components/note-card/note-card.component.html deleted file mode 100644 index abc421f..0000000 --- a/src/app/components/note-card/note-card.component.html +++ /dev/null @@ -1,18 +0,0 @@ -
- - - {{note.Title}} - - {{note.Category}} - - - {{getDate(note.AddedOn)}} - - - - - - - - -
\ No newline at end of file diff --git a/src/app/components/note-card/note-card.component.scss b/src/app/components/note-card/note-card.component.scss deleted file mode 100644 index dcc767d..0000000 --- a/src/app/components/note-card/note-card.component.scss +++ /dev/null @@ -1,36 +0,0 @@ -.bookings { - width: 94%; - margin-top: 20px; - margin-left: 10px; - box-shadow: 0px 0px 10px 0px grey; - border-radius: 5px; - overflow: hidden; - - .person-name { - display: block; - font-size: 16px; - text-align: left; - } - - .person-roles { - display: block; - font-size: 12px; - white-space: nowrap; - overflow: hidden; - color: gray; - text-align: left; - } - - .person-group { - display: block; - font-size: 14px; - text-align: left; - } - - .date-time { - font-size: 12px; - display: block; - text-align: right; - color: var(--ion-color-primary); - } -} diff --git a/src/app/components/note-card/note-card.component.ts b/src/app/components/note-card/note-card.component.ts deleted file mode 100644 index 07a361c..0000000 --- a/src/app/components/note-card/note-card.component.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { NoteResultData, UtilsService } from '@resgrid/ngx-resgridlib'; -import { environment } from '../../../environments/environment'; - -@Component({ - selector: 'app-note-card', - templateUrl: './note-card.component.html', - styleUrls: ['./note-card.component.scss'], -}) -export class NoteCardComponent implements OnInit { - @Input() note: NoteResultData; - - constructor(private utilsProvider: UtilsService) { - - } - - ngOnInit() {} - - public getDate(date) { - return this.utilsProvider.formatDateForDisplay( - new Date(date), - 'yyyy-MM-dd HH:mm Z' - ); - } - - public getTimeago(date) { - return this.utilsProvider.getTimeAgo(date); - } - - getAvatarUrl(userId: string) { - return environment.baseApiUrl + environment.resgridApiUrl + '/Avatars/Get?id=' + userId - } -} diff --git a/src/app/components/protocol-card/protocol-card.component.html b/src/app/components/protocol-card/protocol-card.component.html deleted file mode 100644 index 0e1d49b..0000000 --- a/src/app/components/protocol-card/protocol-card.component.html +++ /dev/null @@ -1,18 +0,0 @@ -
- - - {{protocol.Name}} - - {{protocol.Code}} - - - {{getDate(protocol.CreatedOn)}} - - - - - - - - -
\ No newline at end of file diff --git a/src/app/components/protocol-card/protocol-card.component.scss b/src/app/components/protocol-card/protocol-card.component.scss deleted file mode 100644 index dcc767d..0000000 --- a/src/app/components/protocol-card/protocol-card.component.scss +++ /dev/null @@ -1,36 +0,0 @@ -.bookings { - width: 94%; - margin-top: 20px; - margin-left: 10px; - box-shadow: 0px 0px 10px 0px grey; - border-radius: 5px; - overflow: hidden; - - .person-name { - display: block; - font-size: 16px; - text-align: left; - } - - .person-roles { - display: block; - font-size: 12px; - white-space: nowrap; - overflow: hidden; - color: gray; - text-align: left; - } - - .person-group { - display: block; - font-size: 14px; - text-align: left; - } - - .date-time { - font-size: 12px; - display: block; - text-align: right; - color: var(--ion-color-primary); - } -} diff --git a/src/app/components/protocol-card/protocol-card.component.ts b/src/app/components/protocol-card/protocol-card.component.ts deleted file mode 100644 index 24d5973..0000000 --- a/src/app/components/protocol-card/protocol-card.component.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { CallProtocolsResultData, UtilsService } from '@resgrid/ngx-resgridlib'; -import { environment } from '../../../environments/environment'; - -@Component({ - selector: 'app-protocols-card', - templateUrl: './protocol-card.component.html', - styleUrls: ['./protocol-card.component.scss'], -}) -export class ProtocolCardComponent implements OnInit { - @Input() protocol: CallProtocolsResultData; - - constructor(private utilsProvider: UtilsService) { - - } - - ngOnInit() {} - - public getDate(date) { - return this.utilsProvider.formatDateForDisplay( - new Date(date), - 'yyyy-MM-dd HH:mm Z' - ); - } - - public getTimeago(date) { - return this.utilsProvider.getTimeAgo(date); - } - - getAvatarUrl(userId: string) { - return environment.baseApiUrl + environment.resgridApiUrl + '/Avatars/Get?id=' + userId - } -} diff --git a/src/app/config/gesture.config.ts b/src/app/config/gesture.config.ts deleted file mode 100644 index 2fb3887..0000000 --- a/src/app/config/gesture.config.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Injectable } from "@angular/core"; -import { HammerGestureConfig } from "@angular/platform-browser"; - -/** - * @hidden - * This class overrides the default Angular gesture config. - */ -@Injectable() -export class IonicGestureConfig extends HammerGestureConfig { - buildHammer(element: HTMLElement) { - const mc = new (window).Hammer(element); - - for (const eventName in this.overrides) { - if (eventName) { - mc.get(eventName).set(this.overrides[eventName]); - } - } - - return mc; - } -} \ No newline at end of file diff --git a/src/app/directives/scroll.directive.ts b/src/app/directives/scroll.directive.ts deleted file mode 100644 index 09d897e..0000000 --- a/src/app/directives/scroll.directive.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Directive, ElementRef } from '@angular/core'; - -@Directive({ - selector: '[rgScrollDirective]' -}) -export class ScrollDirective { - previousScrollHeightMinusTop: number; // the variable which stores the distance - readyFor: string; - toReset = false; - - constructor(public elementRef: ElementRef) { - this.previousScrollHeightMinusTop = 0; - this.readyFor = 'up'; - this.restore(); - } - - reset() { - this.previousScrollHeightMinusTop = 0; - this.readyFor = 'up'; - this.elementRef.nativeElement.scrollTop = this.elementRef.nativeElement.scrollHeight; - // resetting the scroll position to bottom because that is where chats start. - } - - restore() { - if (this.toReset) { - if (this.readyFor === 'up') { - this.elementRef.nativeElement.scrollTop = - this.elementRef.nativeElement.scrollHeight - - this.previousScrollHeightMinusTop; - // restoring the scroll position to the one stored earlier - } - this.toReset = false; - } - } - - prepareFor(direction: string) { - this.toReset = true; - this.readyFor = direction || 'up'; - this.elementRef.nativeElement.scrollTop = !this.elementRef.nativeElement.scrollTop // check for scrollTop is zero or not - ? this.elementRef.nativeElement.scrollTop + 1 - : this.elementRef.nativeElement.scrollTop; - this.previousScrollHeightMinusTop = - this.elementRef.nativeElement.scrollHeight - this.elementRef.nativeElement.scrollTop; - // the current position is stored before new messages are loaded - } -} \ No newline at end of file diff --git a/src/app/features/calls/actions/calls.actions.ts b/src/app/features/calls/actions/calls.actions.ts deleted file mode 100644 index 13ab1b8..0000000 --- a/src/app/features/calls/actions/calls.actions.ts +++ /dev/null @@ -1,538 +0,0 @@ -import { Action } from '@ngrx/store'; -import { - CallExtraDataResultData, - CallFileResultData, - CallNoteResultData, - CallPriorityResultData, - CallResultData, - DispatchedEventResultData, - GpsLocation, - RecipientsResultData -} from '@resgrid/ngx-resgridlib'; -import { GeoLocation } from 'src/app/models/geoLocation'; - -export enum CallsActionTypes { - GET_CALLS = '[CALLS] GET_CALLS', - GET_CALLS_DONE = '[CALLS] GET_CALLS_DONE', - GET_CALLS_FAIL = '[CALLS] GET_CALLS_FAIL', - GET_CALL_BYID = '[CALLS] GET_CALL_BYID', - GET_CALL_BYID_SUCCESS = "[CALLS] GET_CALL_BYID_SUCCESS", - GET_CALL_BYID_FAIL = "[CALLS] GET_CALL_BYID_FAIL", - GET_CALL_BYID_DONE = "[CALLS] GET_CALL_BYID_DONE", - SHOW_CALLNOTES = '[CALLS] SHOW_CALLNOTES', - OPEN_CALLNOTES = '[CALLS] OPEN_CALLNOTES', - SAVE_CALLNOTE = '[CALLS] SAVE_CALLNOTE', - SAVE_CALLNOTE_SUCCESS = '[CALLS] SAVE_CALLNOTE_SUCCESS', - SAVE_CALLNOTE_FAIL = '[CALLS] SAVE_CALLNOTE_FAIL', - CLOSE_CALLNOTES = '[CALLS] CLOSE_CALLNOTES', - SET_VIEW_CALL_MODAL = '[CALLS] SET_VIEW_CALL_MODAL', - DONE = '[CALLS] DONE', - SHOW_CALLIMAGES = '[CALLS] SHOW_CALLIMAGES', - OPEN_CALLIMAGES = '[CALLS] OPEN_CALLIMAGES', - UPLOAD_CALLIMAGE = '[CALLS] UPLOAD_CALLIMAGE', - UPLOAD_CALLIMAGE_SUCCESS = '[CALLS] UPLOAD_CALLIMAGE_SUCCESS', - UPLOAD_CALLIMAGE_FAIL = '[CALLS] UPLOAD_CALLIMAGE_FAIL', - SHOW_CALLFILESMODAL = '[CALLS] SHOW_CALLFILESMODAL', - OPEN_CALLFILESMODAL = '[CALLS] OPEN_CALLFILESMODAL', - UPLOAD_CALLFILE = '[CALLS] UPLOAD_CALLFILE', - UPLOAD_CALLFILE_SUCCESS = '[CALLS] UPLOAD_CALLFILE_SUCCESS', - UPLOAD_CALLFILE_FAIL = '[CALLS] UPLOAD_CALLFILE_FAIL', - SHOW_NEW_CALL_MODAL = '[CALLS] SHOW_NEW_CALL_MODAL', - CLOSE_NEW_CALL_MODAL = '[CALLS] CLOSE_NEW_CALL_MODAL', - SHOW_SET_LOCATION_MODAL = '[CALLS] SHOW_SET_LOCATION_MODAL', - CLOSE_SET_LOCATION_MODAL = '[CALLS] CLOSE_SET_LOCATION_MODAL', - SET_NEW_CALL_LOCATION = '[CALLS] SET_NEW_CALL_LOCATION', - DISPATCH_CALL = '[CALLS] DISPATCH_CALL', - DISPATCH_CALL_SUCCESS = '[CALLS] DISPATCH_CALL_SUCCESS', - DISPATCH_CALL_FAIL = '[CALLS] DISPATCH_CALL_FAIL', - SHOW_SELECT_DISPATCHS = '[CALLS] SHOW_SELECT_DISPATCHS', - SHOW_SELECT_DISPATCHS_SUCCESS = '[CALLS] SHOW_SELECT_DISPATCHS_SUCCESS', - SHOW_SELECT_DISPATCHS_FAIL = '[CALLS] SHOW_SELECT_DISPATCHS_FAIL', - CLOSE_SELECT_DISPATCHS_MODAL = '[CALLS] CLOSE_SELECT_DISPATCHS_MODAL', - UPDATE_SELECTED_DISPTACHES = '[CALLS] UPDATE_SELECTED_DISPTACHES', - SHOW_CLOSE_CALL_MODAL = '[CALLS] SHOW_CLOSE_CALL_MODAL', - CLOSE_CLOSE_CALL_MODAL = '[CALLS] CLOSE_CLOSE_CALL_MODAL', - CLOSE_CALL = '[CALLS] CLOSE_CALL', - CLOSE_CALL_SUCCESS = '[CALLS] CLOSE_CALL_SUCCESS', - CLOSE_CALL_FAIL = '[CALLS] CLOSE_CALL_FAIL', - SET_EDIT_CALL_DISPATCHES = '[CALLS] SET_EDIT_CALL_DISPATCHES', - SHOW_EDIT_CALL_SELECT_DISPATCHS = '[CALLS] SHOW_EDIT_CALL_SELECT_DISPATCHS', - SHOW_EDIT_CALL_SELECT_DISPATCHS_SUCCESS = '[CALLS] SHOW_EDIT_CALL_SELECT_DISPATCHS_SUCCESS', - SHOW_EDIT_CALL_SELECT_DISPATCHS_FAIL = '[CALLS] SHOW_EDIT_CALL_SELECT_DISPATCHS_FAIL', - GET_EDIT_CALL_DISPATCHES = '[CALLS] GET_EDIT_CALL_DISPATCHES', - GET_EDIT_CALL_DISPATCHES_SUCCESS = '[CALLS] GET_EDIT_CALL_DISPATCHES_SUCCESS', - SHOW_EDIT_CALL_MODAL = '[CALLS] SHOW_EDIT_CALL_MODAL', - CLOSE_EDIT_CALL_MODAL = '[CALLS] CLOSE_EDIT_CALL_MODAL', - UPDATE_EDIT_CALL_SELECTED_DISPTACHES = '[CALLS] UPDATE_EDIT_CALL_SELECTED_DISPTACHES', - UPDATE_CALL = '[CALLS] UPDATE_CALL', - UPDATE_CALL_SUCCESS = '[CALLS] UPDATE_CALL_SUCCESS', - UPDATE_CALL_FAIL = '[CALLS] UPDATE_CALL_FAIL', - CLOSE_VIEW_CALL_MODAL = '[CALLS] CLOSE_VIEW_CALL_MODAL', - CLEAR_CALLS = '[CALLS] CLEAR_CALLS', - GET_COORDINATESFORADDRESS = '[CALLS] GET_COORDINATESFORADDRESS', - GET_COORDINATESFORADDRESS_SUCCESS = '[CALLS] GET_COORDINATESFORADDRESS_SUCCESS', - GET_COORDINATESFORADDRESS_FAIL = '[CALLS] GET_COORDINATESFORADDRESS_FAIL', - GET_COORDINATES_FORW3W = '[CALLS] GET_COORDINATES_FORW3W', - GET_COORDINATES_FORW3W_SUCCESS = '[CALLS] GET_COORDINATES_FORW3W_SUCCESS', - GET_COORDINATES_FORW3W_FAIL = '[CALLS] GET_COORDINATES_FORW3W_FAIL', - GET_COORDINATES_FOR_PLUS = '[CALLS] GET_COORDINATES_FOR_PLUS', - GET_COORDINATES_FOR_PLUS_SUCCESS = '[CALLS] GET_COORDINATES_FOR_PLUS_SUCCESS', - GET_COORDINATES_FOR_PLUS_FAIL = '[CALLS] GET_COORDINATES_FOR_PLUS_FAIL', - EDIT_GET_COORDINATES_FOR_ADDRESS = '[CALLS] EDIT_GET_COORDINATES_FOR_ADDRESS', - EDIT_GET_COORDINATES_FOR_ADDRESS_SUCCESS = '[CALLS] EDIT_GET_COORDINATES_FOR_ADDRESS_SUCCESS', - EDIT_GET_COORDINATES_FOR_W3W = '[CALLS] EDIT_GET_COORDINATES_FOR_W3W', - EDIT_GET_COORDINATES_FOR_W3W_SUCCESS = '[CALLS] EDIT_GET_COORDINATES_FOR_W3W_SUCCESS', - EDIT_GET_COORDINATES_FOR_PLUS = '[CALLS] EDIT_GET_COORDINATES_FOR_PLUS', - EDIT_GET_COORDINATES_FOR_PLUS_SUCCESS = '[CALLS] EDIT_GET_COORDINATES_FOR_PLUS_SUCCESS', - SET_EDIT_CALL_LOCATION = '[CALLS] SET_EDIT_CALL_LOCATION', -} - -export class GetCalls implements Action { - readonly type = CallsActionTypes.GET_CALLS; - constructor() {} -} - -export class GetCallsDone implements Action { - readonly type = CallsActionTypes.GET_CALLS_DONE; - constructor(public calls: CallResultData[], public priorities: CallPriorityResultData[]) {} -} - -export class GetCallFail implements Action { - readonly type = CallsActionTypes.GET_CALLS_FAIL; - constructor() {} -} - -export class GetCallById implements Action { - readonly type = CallsActionTypes.GET_CALL_BYID; - constructor(public callId: string) {} -} - -export class GetCallByIdSuccess implements Action { - readonly type = CallsActionTypes.GET_CALL_BYID_SUCCESS; - constructor(public call: CallResultData, public data: CallExtraDataResultData, public priorities: CallPriorityResultData[]) {} -} - - -export class GetCallByIdFailure implements Action { - readonly type = CallsActionTypes.GET_CALL_BYID_FAIL; - constructor(public payload: string) {} -} - -export class GetCallByIdDone implements Action { - readonly type = CallsActionTypes.GET_CALL_BYID_DONE; - constructor() {} -} - -export class ShowCallNotesModal implements Action { - readonly type = CallsActionTypes.SHOW_CALLNOTES; - constructor(public callId: string) {} -} - -export class OpenCallNotesModal implements Action { - readonly type = CallsActionTypes.OPEN_CALLNOTES; - constructor(public payload: CallNoteResultData[]) {} -} - -export class CloseCallNotesModal implements Action { - readonly type = CallsActionTypes.CLOSE_CALLNOTES; - constructor() {} -} - -export class SaveCallNote implements Action { - readonly type = CallsActionTypes.SAVE_CALLNOTE; - constructor(public callId: string, public callNote: string, public userId: string) {} -} - -export class SaveCallNoteSuccess implements Action { - readonly type = CallsActionTypes.SAVE_CALLNOTE_SUCCESS; - constructor() {} -} - -export class SaveCallNoteFail implements Action { - readonly type = CallsActionTypes.SAVE_CALLNOTE_FAIL; - constructor() {} -} - -export class SetViewCallModal implements Action { - readonly type = CallsActionTypes.SET_VIEW_CALL_MODAL; - constructor() {} -} - -export class Done implements Action { - readonly type = CallsActionTypes.DONE; - constructor() {} -} - -export class ShowCallImagesModal implements Action { - readonly type = CallsActionTypes.SHOW_CALLIMAGES; - constructor(public callId: string) {} -} - -export class OpenCallImagesModal implements Action { - readonly type = CallsActionTypes.OPEN_CALLIMAGES; - constructor(public payload: CallFileResultData[]) {} -} - -export class UploadCallImage implements Action { - readonly type = CallsActionTypes.UPLOAD_CALLIMAGE; - constructor(public callId: string, public userId: string, public name: string, public image: string) {} -} - -export class UploadCallImageSuccess implements Action { - readonly type = CallsActionTypes.UPLOAD_CALLIMAGE_SUCCESS; - constructor() {} -} - -export class UploadCallImageFail implements Action { - readonly type = CallsActionTypes.UPLOAD_CALLIMAGE_FAIL; - constructor() {} -} - -export class ShowCallFilesModal implements Action { - readonly type = CallsActionTypes.SHOW_CALLFILESMODAL; - constructor(public callId: string) {} -} - -export class OpenCallFilesModal implements Action { - readonly type = CallsActionTypes.OPEN_CALLFILESMODAL; - constructor(public payload: CallFileResultData[]) {} -} - -export class UploadCallFile implements Action { - readonly type = CallsActionTypes.UPLOAD_CALLFILE; - constructor(public callId: string, public userId: string, public name: string, public image: string) {} -} - -export class UploadCallFileSuccess implements Action { - readonly type = CallsActionTypes.UPLOAD_CALLFILE_SUCCESS; - constructor() {} -} - -export class UploadCallFileFail implements Action { - readonly type = CallsActionTypes.UPLOAD_CALLFILE_FAIL; - constructor() {} -} - -export class ShowNewCallModal implements Action { - readonly type = CallsActionTypes.SHOW_NEW_CALL_MODAL; - constructor() {} -} - -export class ShowSetLocationModal implements Action { - readonly type = CallsActionTypes.SHOW_SET_LOCATION_MODAL; - constructor(public forNewCall: boolean, public latitude: number, public longitude: number) {} -} - -export class CloseSetLocationModal implements Action { - readonly type = CallsActionTypes.CLOSE_SET_LOCATION_MODAL; - constructor() {} -} - -export class CloseNewCallModal implements Action { - readonly type = CallsActionTypes.CLOSE_NEW_CALL_MODAL; - constructor() {} -} - -export class SetNewCallLocation implements Action { - readonly type = CallsActionTypes.SET_NEW_CALL_LOCATION; - constructor(public latitude: number, public longitude: number) {} -} - -export class SetEditCallLocation implements Action { - readonly type = CallsActionTypes.SET_EDIT_CALL_LOCATION; - constructor(public latitude: number, public longitude: number) {} -} - -export class DispatchCall implements Action { - readonly type = CallsActionTypes.DISPATCH_CALL; - constructor(public name: string, public priority: number, public callType: string, - public contactName: string, public contactInfo: string, public externalId: string, - public incidentId: string, public referenceId: string, public nature: string, - public notes: string, public address: string, public w3w: string, - public latitude: number, public longitude: number, public dispatchList: string, - public dispatchOn: string, public callFormData: string) {} -} - -export class DispatchCallSuccess implements Action { - readonly type = CallsActionTypes.DISPATCH_CALL_SUCCESS; - constructor() {} -} - -export class DispatchCallFail implements Action { - readonly type = CallsActionTypes.DISPATCH_CALL_FAIL; - constructor() {} -} - -export class ShowSelectDispatches implements Action { - readonly type = CallsActionTypes.SHOW_SELECT_DISPATCHS; - constructor() {} -} - -export class ShowSelectDispatchesSuccess implements Action { - readonly type = CallsActionTypes.SHOW_SELECT_DISPATCHS_SUCCESS; - constructor(public dispatches: RecipientsResultData[]) {} -} - -export class ShowSelectDispatchesFail implements Action { - readonly type = CallsActionTypes.SHOW_SELECT_DISPATCHS_FAIL; - constructor() {} -} - -export class CloseSelectDispatchesModal implements Action { - readonly type = CallsActionTypes.CLOSE_SELECT_DISPATCHS_MODAL; - constructor() {} -} - -export class UpdatedSelectedDispatches implements Action { - readonly type = CallsActionTypes.UPDATE_SELECTED_DISPTACHES; - constructor(public id: string, public checked: boolean) {} -} - -export class ShowCloseCallModal implements Action { - readonly type = CallsActionTypes.SHOW_CLOSE_CALL_MODAL; - constructor(public callId: string) {} -} - -export class CloseCloseCallModal implements Action { - readonly type = CallsActionTypes.CLOSE_CLOSE_CALL_MODAL; - constructor() {} -} - -export class CloseCall implements Action { - readonly type = CallsActionTypes.CLOSE_CALL; - constructor(public callId: string, public closeType: number, public closeNote: string) {} -} - -export class CloseCallSuccess implements Action { - readonly type = CallsActionTypes.CLOSE_CALL_SUCCESS; - constructor() {} -} - -export class CloseCallFail implements Action { - readonly type = CallsActionTypes.CLOSE_CALL_FAIL; - constructor() {} -} - -export class SetEditCallDispatches implements Action { - readonly type = CallsActionTypes.SET_EDIT_CALL_DISPATCHES; - constructor(public dispatchEvents: DispatchedEventResultData[]) {} -} - -export class ShowEditCallSelectDispatches implements Action { - readonly type = CallsActionTypes.SHOW_EDIT_CALL_SELECT_DISPATCHS; - constructor() {} -} - -export class ShowEditCallSelectDispatchesSuccess implements Action { - readonly type = CallsActionTypes.SHOW_EDIT_CALL_SELECT_DISPATCHS_SUCCESS; - constructor(public dispatches: RecipientsResultData[]) {} -} - -export class ShowEditCallSelectDispatchesFail implements Action { - readonly type = CallsActionTypes.SHOW_EDIT_CALL_SELECT_DISPATCHS_FAIL; - constructor() {} -} - -export class GetEditCallDispatches implements Action { - readonly type = CallsActionTypes.GET_EDIT_CALL_DISPATCHES; - constructor() {} -} - -export class GetEditCallDispatchesSuccess implements Action { - readonly type = CallsActionTypes.GET_EDIT_CALL_DISPATCHES_SUCCESS; - constructor(public dispatches: RecipientsResultData[]) {} -} - -export class ShowEditCallModal implements Action { - readonly type = CallsActionTypes.SHOW_EDIT_CALL_MODAL; - constructor(public callId: string) {} -} - -export class CloseEditCallModal implements Action { - readonly type = CallsActionTypes.CLOSE_EDIT_CALL_MODAL; - constructor() {} -} - -export class UpdatedEditCallSelectedDispatches implements Action { - readonly type = CallsActionTypes.UPDATE_EDIT_CALL_SELECTED_DISPTACHES; - constructor(public id: string, public checked: boolean) {} -} - -export class UpdateCall implements Action { - readonly type = CallsActionTypes.UPDATE_CALL; - constructor(public callId: string, public name: string, public priority: number, public callType: string, - public contactName: string, public contactInfo: string, public externalId: string, - public incidentId: string, public referenceId: string, public nature: string, - public notes: string, public address: string, public w3w: string, - public latitude: number, public longitude: number, public dispatchList: string, - public dispatchOn: string, public callFormData: string, public redispatch: boolean) {} -} - -export class UpdateCallSuccess implements Action { - readonly type = CallsActionTypes.UPDATE_CALL_SUCCESS; - constructor() {} -} - -export class UpdateCallFail implements Action { - readonly type = CallsActionTypes.UPDATE_CALL_FAIL; - constructor() {} -} - -export class CloseViewCallModal implements Action { - readonly type = CallsActionTypes.CLOSE_VIEW_CALL_MODAL; - constructor() {} -} - -export class ClearCalls implements Action { - readonly type = CallsActionTypes.CLEAR_CALLS; - constructor() {} -} - -export class GetCoordinatesForAddress implements Action { - readonly type = CallsActionTypes.GET_COORDINATESFORADDRESS; - constructor(public address: string) {} -} - -export class GetCoordinatesForAddressSuccess implements Action { - readonly type = CallsActionTypes.GET_COORDINATESFORADDRESS_SUCCESS; - constructor(public payload: GeoLocation) {} -} - -export class GetCoordinatesForAddressFail implements Action { - readonly type = CallsActionTypes.GET_COORDINATESFORADDRESS_FAIL; - constructor(public payload: string) {} -} - -export class GetCoordinatesForW3W implements Action { - readonly type = CallsActionTypes.GET_COORDINATES_FORW3W; - constructor(public w3w: string) {} -} - -export class GetCoordinatesForW3WSuccess implements Action { - readonly type = CallsActionTypes.GET_COORDINATES_FORW3W_SUCCESS; - constructor(public payload: GeoLocation) {} -} - -export class GetCoordinatesForW3WFail implements Action { - readonly type = CallsActionTypes.GET_COORDINATES_FORW3W_FAIL; - constructor(public payload: string) {} -} - -export class GetCoordinatesForPlus implements Action { - readonly type = CallsActionTypes.GET_COORDINATES_FOR_PLUS; - constructor(public plusCode: string) {} -} - -export class GetCoordinatesForPlusSuccess implements Action { - readonly type = CallsActionTypes.GET_COORDINATES_FOR_PLUS_SUCCESS; - constructor(public payload: GeoLocation) {} -} - -export class GetCoordinatesForPlusFail implements Action { - readonly type = CallsActionTypes.GET_COORDINATES_FOR_PLUS_FAIL; - constructor(public payload: string) {} -} - -export class EditGetCoordinatesForAddress implements Action { - readonly type = CallsActionTypes.EDIT_GET_COORDINATES_FOR_ADDRESS; - constructor(public address: string) {} -} - -export class EditGetCoordinatesForAddressSuccess implements Action { - readonly type = CallsActionTypes.EDIT_GET_COORDINATES_FOR_ADDRESS_SUCCESS; - constructor(public payload: GeoLocation) {} -} - -export class EditGetCoordinatesForW3W implements Action { - readonly type = CallsActionTypes.EDIT_GET_COORDINATES_FOR_W3W; - constructor(public w3w: string) {} -} - -export class EditGetCoordinatesForW3WSuccess implements Action { - readonly type = CallsActionTypes.EDIT_GET_COORDINATES_FOR_W3W_SUCCESS; - constructor(public payload: GeoLocation) {} -} - -export class EditGetCoordinatesForPlus implements Action { - readonly type = CallsActionTypes.EDIT_GET_COORDINATES_FOR_PLUS; - constructor(public plusCode: string) {} -} - -export class EditGetCoordinatesForPlusSuccess implements Action { - readonly type = CallsActionTypes.EDIT_GET_COORDINATES_FOR_PLUS_SUCCESS; - constructor(public payload: GeoLocation) {} -} - -export type CallActionsUnion = - | GetCalls - | GetCallsDone - | GetCallFail - | GetCallById - | GetCallByIdSuccess - | GetCallByIdFailure - | GetCallByIdDone - | ShowCallNotesModal - | OpenCallNotesModal - | SaveCallNote - | SaveCallNoteSuccess - | SaveCallNoteFail - | SetViewCallModal - | ShowCallImagesModal - | OpenCallImagesModal - | UploadCallImage - | UploadCallImageSuccess - | UploadCallImageFail - | ShowCallFilesModal - | OpenCallFilesModal - | UploadCallFile - | UploadCallFileSuccess - | UploadCallFileFail - | ShowNewCallModal - | ShowSetLocationModal - | CloseSetLocationModal - | SetNewCallLocation - | ShowSelectDispatches - | ShowSelectDispatchesSuccess - | CloseSelectDispatchesModal - | DispatchCall - | DispatchCallSuccess - | DispatchCallFail - | UpdatedSelectedDispatches - | ShowSelectDispatchesFail - | CloseNewCallModal - | ShowCloseCallModal - | CloseCloseCallModal - | CloseCall - | CloseCallSuccess - | CloseCallFail - | SetEditCallDispatches - | ShowEditCallSelectDispatches - | ShowEditCallSelectDispatchesSuccess - | ShowEditCallSelectDispatchesFail - | GetEditCallDispatches - | GetEditCallDispatchesSuccess - | ShowEditCallModal - | UpdatedEditCallSelectedDispatches - | CloseEditCallModal - | UpdateCall - | UpdateCallSuccess - | UpdateCallFail - | CloseViewCallModal - | ClearCalls - | GetCoordinatesForAddress - | GetCoordinatesForAddressSuccess - | GetCoordinatesForAddressFail - | GetCoordinatesForW3W - | GetCoordinatesForW3WSuccess - | GetCoordinatesForW3WFail - | GetCoordinatesForPlus - | GetCoordinatesForPlusSuccess - | GetCoordinatesForPlusFail - | EditGetCoordinatesForAddress - | EditGetCoordinatesForAddressSuccess - | EditGetCoordinatesForW3W - | EditGetCoordinatesForW3WSuccess - | EditGetCoordinatesForPlus - | EditGetCoordinatesForPlusSuccess - | SetEditCallLocation - ; diff --git a/src/app/features/calls/calls-routing.module.ts b/src/app/features/calls/calls-routing.module.ts deleted file mode 100644 index 0a0acab..0000000 --- a/src/app/features/calls/calls-routing.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class CallsRoutingModule {} diff --git a/src/app/features/calls/calls.module.ts b/src/app/features/calls/calls.module.ts deleted file mode 100644 index ab5fc52..0000000 --- a/src/app/features/calls/calls.module.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { reducer } from './reducers/calls.reducer'; -import { EffectsModule } from '@ngrx/effects'; -import { StoreModule } from '@ngrx/store'; -import { CallsRoutingModule } from './calls-routing.module'; -import { VoiceModule } from '../voice/voice.module'; -import { CallsEffects } from './effects/calls.effect'; -import { HomeModule } from '../home/home.module'; -import { ModalViewCallPage } from './pages/view-call/view-call.page'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { GalleryModule } from 'ng-gallery'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { ComponentsModule } from 'src/app/components/components.module'; -import { TranslateModule } from '@ngx-translate/core'; -import { NewCallPage } from './pages/new-call/new-call.page'; -import { SelectLocationPage } from './pages/select-location/select-location.page'; -import { SelectDispatchesPage } from './pages/select-dispatches/select-dispatches.page'; -import { ScrollingModule } from '@angular/cdk/scrolling'; -import { CloseCallPage } from './pages/close-call/close-call.page'; -import { EditCallPage } from './pages/edit-call/edit-call.page'; -import { SelectDispatchesEditPage } from './pages/select-dispatches-edit/select-dispatches-edit.page'; -import { ModalCallNotesPage } from './modals/notes-modal/modal-notes.page'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - BrowserAnimationsModule, - ReactiveFormsModule, - StoreModule.forFeature('callsModule', reducer), - EffectsModule.forFeature([CallsEffects]), - CallsRoutingModule, - NgxResgridLibModule, - GalleryModule, - ComponentsModule, - TranslateModule, - ScrollingModule - ], - declarations: [ - ModalViewCallPage, - NewCallPage, - SelectLocationPage, - SelectDispatchesPage, - CloseCallPage, - EditCallPage, - SelectDispatchesEditPage, - ModalCallNotesPage - ] -}) -export class CallsModule {} diff --git a/src/app/features/calls/effects/calls.effect.ts b/src/app/features/calls/effects/calls.effect.ts deleted file mode 100644 index fc86246..0000000 --- a/src/app/features/calls/effects/calls.effect.ts +++ /dev/null @@ -1,866 +0,0 @@ -import { Action, Store } from '@ngrx/store'; -import { - Actions, - concatLatestFrom, - createEffect, - ofType, -} from '@ngrx/effects'; -import { - catchError, - exhaustMap, - map, - mergeMap, - switchMap, - tap, - withLatestFrom, -} from 'rxjs/operators'; -import { Injectable } from '@angular/core'; -import { from, Observable, of, forkJoin } from 'rxjs'; -import { - CallFilesService, - CallNotesService, - CallsService, - MessagesService, - SaveUnitStatusInput, - UnitStatusService, - VoiceService, -} from '@resgrid/ngx-resgridlib'; -import { MenuController, ModalController } from '@ionic/angular'; -import { HomeState } from '../../home/store/home.store'; -import { selectHomeState, selectStatusesState } from 'src/app/store'; -import { LoadingProvider } from 'src/app/providers/loading'; -import { CallsState } from '../store/calls.store'; -import * as callActions from '../actions/calls.actions'; -import { ModalViewCallPage } from '../pages/view-call/view-call.page'; -import { NewCallPage } from '../pages/new-call/new-call.page'; -import { SelectLocationPage } from '../pages/select-location/select-location.page'; -import { SelectDispatchesPage } from '../pages/select-dispatches/select-dispatches.page'; -import { CloseCallPage } from '../pages/close-call/close-call.page'; -import { AlertProvider } from 'src/app/providers/alert'; -import { EditCallPage } from '../pages/edit-call/edit-call.page'; -import { SelectDispatchesEditPage } from '../pages/select-dispatches-edit/select-dispatches-edit.page'; -import { GeolocationProvider } from 'src/app/providers/geolocation'; -import { ModalCallNotesPage } from '../modals/notes-modal/modal-notes.page'; - -@Injectable() -export class CallsEffects { - private _modalRef: HTMLIonModalElement; - - getCalls$ = createEffect(() => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.GET_CALLS), - tap(() => this.loadingProvider.show()), - concatLatestFrom(() => [this.homeStore.select(selectHomeState)]), - switchMap(([action, homeState], index) => { - return this.callsProvider.getActiveCalls().pipe( - map((data) => ({ - type: callActions.CallsActionTypes.GET_CALLS_DONE, - calls: data.Data, - priorities: homeState.callPriorties, - })), - catchError(() => - of({ type: callActions.CallsActionTypes.GET_CALLS_FAIL }) - ) - ); - }) - ) - ); - - getCallById$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.GET_CALL_BYID - ), - tap(() => this.loadingProvider.show()), - concatLatestFrom(() => [this.homeStore.select(selectHomeState)]), - switchMap(([action, homeState], index) => - forkJoin([ - this.callsProvider.getCall(action.callId), - this.callsProvider.getCallExtraData(action.callId), - ]).pipe( - map((result) => ({ - type: callActions.CallsActionTypes.GET_CALL_BYID_SUCCESS, - call: result[0].Data, - data: result[1].Data, - priorities: homeState.callPriorties, - })), - catchError(() => - of({ type: callActions.CallsActionTypes.GET_CALL_BYID_FAIL }) - ) - ) - ) - ) - ); - - getCallByIdSuccess$ = createEffect(() => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.GET_CALL_BYID_SUCCESS), - switchMap(() => - this.runModal(ModalViewCallPage, 'modal-container-full', null, null) - ), - switchMap(() => this.loadingProvider.hide()), - map(() => ({ type: callActions.CallsActionTypes.GET_CALL_BYID_DONE })) - ) - ); - - getCallByIdFail$ = createEffect( - () => this.actions$.pipe(switchMap(() => this.loadingProvider.hide())), - { dispatch: false } - ); - - getCallsDone$ = createEffect(() => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.GET_CALLS_DONE), - exhaustMap(() => this.loadingProvider.hide()), - map((data) => ({ - type: callActions.CallsActionTypes.DONE, - })) - ) - ); - - getCallsFail$ = createEffect(() => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.GET_CALLS_FAIL), - switchMap(() => this.loadingProvider.hide()), - map((data) => ({ - type: callActions.CallsActionTypes.DONE, - })) - ) - ); - - showCallNotes$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.SHOW_CALLNOTES - ), - mergeMap((action) => - this.callNotesProvider.getCallNotes(action.callId).pipe( - map((data) => ({ - type: callActions.CallsActionTypes.OPEN_CALLNOTES, - payload: data.Data, - })) - ) - ) - ) - ); - - showCallNotesModal$ = createEffect(() => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.OPEN_CALLNOTES), - switchMap(() => - this.runModal( - ModalCallNotesPage, - 'modal-container-full', - null, - 'CallsFeatureCallNotesModal' - ) - ), - switchMap(() => this.loadingProvider.hide()), - map((data) => ({ - type: callActions.CallsActionTypes.DONE, - })) - ) - ); - - dismissCallNotesModal$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.CLOSE_CALLNOTES), - exhaustMap((data) => this.closeModal('CallsFeatureCallNotesModal')) - ), - { dispatch: false } - ); - - saveCallNote$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.SAVE_CALLNOTE - ), - mergeMap((action) => - this.callNotesProvider - .saveCallNote(action.callId, action.userId, action.callNote, null) - .pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: callActions.CallsActionTypes.SHOW_CALLNOTES, - callId: action.callId, - })), - // If request fails, dispatch failed action - catchError(() => - of({ type: callActions.CallsActionTypes.SAVE_CALLNOTE_FAIL }) - ) - ) - ) - ) - ); - - setVewCallBackToDefault$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.SET_VIEW_CALL_MODAL - ), - map((data) => ({ - type: callActions.CallsActionTypes.DONE, - })) - ) - ); - - openCallImagesModal$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.SHOW_CALLIMAGES - ), - tap(() => this.loadingProvider.hide()), - mergeMap((action) => - this.callFilesProvider.getCallImages(action.callId, true).pipe( - map((data) => ({ - type: callActions.CallsActionTypes.OPEN_CALLIMAGES, - payload: data.Data, - })) - ) - ) - ) - ); - - openCallFilesModal$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.SHOW_CALLFILESMODAL - ), - tap(() => this.loadingProvider.hide()), - mergeMap((action) => - this.callFilesProvider.getCallFiles(action.callId, true).pipe( - map((data) => ({ - type: callActions.CallsActionTypes.OPEN_CALLFILESMODAL, - payload: data.Data, - })) - ) - ) - ) - ); - - uploadCallImage$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.UPLOAD_CALLIMAGE - ), - mergeMap((action) => - this.callFilesProvider - .saveCallImage( - action.callId, - action.userId, - '', - action.name, - null, - action.image - ) - .pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: callActions.CallsActionTypes.SHOW_CALLIMAGES, - callId: action.callId, - })), - // If request fails, dispatch failed action - catchError(() => - of({ type: callActions.CallsActionTypes.UPLOAD_CALLIMAGE_FAIL }) - ) - ) - ) - ) - ); - - showNewCallModal$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.SHOW_NEW_CALL_MODAL), - switchMap(() => - this.runModal( - NewCallPage, - 'modal-container-full', - null, - 'CallsFeatureModal' - ) - ), - switchMap(() => this.loadingProvider.hide()) - ), - { dispatch: false } - ); - - showSetLocationModal$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.SHOW_SET_LOCATION_MODAL - ), - exhaustMap((data) => - this.runModal( - SelectLocationPage, - 'modal-container-full', - null, - 'SelectLocationModal' - ) - ), - map((action) => ({ - type: callActions.CallsActionTypes.DONE, - })) - ) - ); - - dismissSetLocationModal$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.CLOSE_SET_LOCATION_MODAL), - exhaustMap((data) => this.closeModal('SelectLocationModal')) - ), - { dispatch: false } - ); - - closeNewCallModal$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.CLOSE_NEW_CALL_MODAL - ), - exhaustMap((data) => this.closeModal('CallsFeatureModal')), - map((action) => ({ - type: callActions.CallsActionTypes.DONE, - })) - ) - ); - - showCloseCallModal$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.SHOW_CLOSE_CALL_MODAL), - switchMap(() => - this.runModal( - CloseCallPage, - 'modal-container-full', - null, - 'CallsFeatureCloseCallModal' - ) - ), - switchMap(() => this.loadingProvider.hide()) - ), - { dispatch: false } - ); - - closeCloseCallModal$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.CLOSE_CLOSE_CALL_MODAL - ), - exhaustMap((data) => this.closeModal('CallsFeatureCloseCallModal')), - map((action) => ({ - type: callActions.CallsActionTypes.DONE, - })) - ) - ); - - dispatchCall$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.DISPATCH_CALL - ), - mergeMap((action) => - this.callsProvider - .saveCall( - action.name, - action.priority, - action.callType, - action.contactName, - action.contactInfo, - action.externalId, - action.incidentId, - action.referenceId, - action.nature, - action.notes, - action.address, - action.w3w, - action.latitude, - action.longitude, - action.dispatchList, - action.dispatchOn, - action.callFormData - ) - .pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: callActions.CallsActionTypes.DISPATCH_CALL_SUCCESS, - })), - // If request fails, dispatch failed action - catchError(() => - of({ type: callActions.CallsActionTypes.DISPATCH_CALL_FAIL }) - ) - ) - ) - ) - ); - - showSelectDispatches$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.SHOW_SELECT_DISPATCHS - ), - switchMap((action) => - this.messagesService.getRecipients(true, true).pipe( - map((data) => ({ - type: callActions.CallsActionTypes.SHOW_SELECT_DISPATCHS_SUCCESS, - dispatches: data.Data, - })), - catchError(() => - of({ - type: callActions.CallsActionTypes.SHOW_SELECT_DISPATCHS_FAIL, - }) - ) - ) - ) - ) - ); - - showSelectDispatchesSuccess$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.SHOW_SELECT_DISPATCHS_SUCCESS), - exhaustMap((data) => - this.runModal( - SelectDispatchesPage, - 'modal-container-full', - null, - 'SelectDispatchesModal' - ) - ) - ), - { dispatch: false } - ); - - dismissSelectDispatchesModal$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.CLOSE_SELECT_DISPATCHS_MODAL), - exhaustMap((data) => this.closeModal('SelectDispatchesModal')) - ), - { dispatch: false } - ); - - createCallSuccessful$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.DISPATCH_CALL_SUCCESS - ), - exhaustMap((data) => this.closeModal(null)), - exhaustMap((data) => this.closeModal('CallsFeatureModal')), - map((data) => ({ - type: callActions.CallsActionTypes.GET_CALLS, - })) - ) - ); - - closeCall$ = createEffect(() => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.CLOSE_CALL), - tap(() => this.loadingProvider.show()), - mergeMap((action) => - this.callsProvider - .closeCall(action.callId, action.closeNote, action.closeType) - .pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: callActions.CallsActionTypes.CLOSE_CALL_SUCCESS, - })), - // If request fails, dispatch failed action - catchError(() => - of({ type: callActions.CallsActionTypes.CLOSE_CALL_FAIL }) - ) - ) - ) - ) - ); - - closeCallSuccessful$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.CLOSE_CALL_SUCCESS - ), - switchMap((data) => this.closeModal('CallsFeatureModal')), - switchMap((data) => this.closeModal('CallsFeatureCloseCallModal')), - switchMap(() => this.loadingProvider.hide()), - map((data) => ({ - type: callActions.CallsActionTypes.GET_CALLS, - })) - ) - ); - - closeCallFail$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.CLOSE_CALL_FAIL), - switchMap(() => this.loadingProvider.hide()), - switchMap((action) => - this.alertProvider.showErrorAlert( - 'Unable to Close Call', - '', - 'There was an issue trying to close the call, please try again.' - ) - ) - ), - { dispatch: false } - ); - - dismissEditCallSelectDispatchesModal$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.CLOSE_SELECT_DISPATCHS_MODAL), - exhaustMap((data) => this.closeModal('SelectDispatchesModal')) - ), - { dispatch: false } - ); - - getEditCallDispatches$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.GET_EDIT_CALL_DISPATCHES - ), - switchMap((action) => - this.messagesService.getRecipients(true, true).pipe( - map((data) => ({ - type: callActions.CallsActionTypes.GET_EDIT_CALL_DISPATCHES_SUCCESS, - dispatches: data.Data, - })), - catchError(() => - of({ - type: callActions.CallsActionTypes.DONE, - }) - ) - ) - ) - ) - ); - - showEditCallModal$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.SHOW_EDIT_CALL_MODAL), - switchMap(() => this.loadingProvider.show()), - switchMap(() => - this.runModal( - EditCallPage, - 'modal-container-full', - null, - 'CallsFeatureEditCallModal' - ) - ), - ), - { dispatch: false } - ); - - closeEditCallModal$ = createEffect( - () => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.CLOSE_EDIT_CALL_MODAL - ), - switchMap((data) => this.closeModal('CallsFeatureEditCallModal')) - ), - { dispatch: false } - ); - - closeViewCallModal$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.CLOSE_VIEW_CALL_MODAL - ), - switchMap((data) => this.closeModal(null)), - map((data) => ({ - type: callActions.CallsActionTypes.DONE, - })) - ) - ); - - showSelectEditCallDispatches$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.SHOW_EDIT_CALL_SELECT_DISPATCHS), - switchMap(() => - this.runModal( - SelectDispatchesEditPage, - 'modal-container-full', - null, - 'SelectDispatchesModal' - ) - ), - switchMap(() => this.loadingProvider.hide()) - ), - { dispatch: false } - ); - - updateCall$ = createEffect(() => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.UPDATE_CALL), - mergeMap((action) => - this.callsProvider - .updateCall( - action.callId, - action.name, - action.priority, - action.callType, - action.contactName, - action.contactInfo, - action.externalId, - action.incidentId, - action.referenceId, - action.nature, - action.notes, - action.address, - action.w3w, - action.latitude, - action.longitude, - action.dispatchList, - action.dispatchOn, - action.callFormData, - action.redispatch - ) - .pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: callActions.CallsActionTypes.UPDATE_CALL_SUCCESS, - })), - // If request fails, dispatch failed action - catchError(() => - of({ type: callActions.CallsActionTypes.UPDATE_CALL_FAIL }) - ) - ) - ) - ) - ); - - updateCallSuccessful$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.UPDATE_CALL_SUCCESS - ), - exhaustMap((data) => this.closeModal('CallsFeatureEditCallModal')), - map((data) => ({ - type: callActions.CallsActionTypes.GET_CALLS, - })) - ) - ); - - getCoordinatesForAddress$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.GET_COORDINATESFORADDRESS - ), - mergeMap((action) => - //this.locationProvider.getCoordinatesForAddressFromGoogle(action.address).pipe( - this.geocodingProvider.getLocationFromAddress(action.address).pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: callActions.CallsActionTypes.GET_COORDINATESFORADDRESS_SUCCESS, - payload: data, - })), - // If request fails, dispatch failed action - catchError(() => - of({ - type: callActions.CallsActionTypes.GET_COORDINATESFORADDRESS_FAIL, - }) - ) - ) - ) - ) - ); - - getCoordinatesForW3W$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.GET_COORDINATES_FORW3W - ), - mergeMap((action) => - //this.locationProvider.getCoordinatesForAddressFromGoogle(action.address).pipe( - this.geocodingProvider.getCoordinatesFromW3W(action.w3w).pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: callActions.CallsActionTypes.GET_COORDINATES_FORW3W_SUCCESS, - payload: data, - })), - // If request fails, dispatch failed action - catchError(() => - of({ - type: callActions.CallsActionTypes.GET_COORDINATES_FORW3W_FAIL, - }) - ) - ) - ) - ) - ); - - getCoordinatesForPlus$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.GET_COORDINATES_FOR_PLUS - ), - mergeMap((action) => - //this.locationProvider.getCoordinatesForAddressFromGoogle(action.address).pipe( - this.geocodingProvider.getCoordinatesFromPlusCode(action.plusCode).pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: callActions.CallsActionTypes.GET_COORDINATES_FOR_PLUS_SUCCESS, - payload: data, - })), - // If request fails, dispatch failed action - catchError(() => - of({ - type: callActions.CallsActionTypes.GET_COORDINATES_FOR_PLUS_FAIL, - }) - ) - ) - ) - ) - ); - - getCoordinatesForPlusFail$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.GET_COORDINATES_FOR_PLUS_FAIL), - switchMap(() => this.loadingProvider.hide()), - switchMap((action) => - this.alertProvider.showErrorAlert( - 'Plus Code Error', - '', - 'Unable to get coordinates from the plus code. Make sure its full and in the correct format and try again.' - ) - ) - ), - { dispatch: false } - ); - - editGetCoordinatesForAddress$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.EDIT_GET_COORDINATES_FOR_ADDRESS - ), - mergeMap((action) => - //this.locationProvider.getCoordinatesForAddressFromGoogle(action.address).pipe( - this.geocodingProvider.getLocationFromAddress(action.address).pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: callActions.CallsActionTypes.EDIT_GET_COORDINATES_FOR_ADDRESS_SUCCESS, - payload: data, - })), - // If request fails, dispatch failed action - catchError(() => - of({ - type: callActions.CallsActionTypes.GET_COORDINATESFORADDRESS_FAIL, - }) - ) - ) - ) - ) - ); - - editGetCoordinatesForW3W$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.EDIT_GET_COORDINATES_FOR_W3W - ), - mergeMap((action) => - //this.locationProvider.getCoordinatesForAddressFromGoogle(action.address).pipe( - this.geocodingProvider.getCoordinatesFromW3W(action.w3w).pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: callActions.CallsActionTypes.EDIT_GET_COORDINATES_FOR_W3W_SUCCESS, - payload: data, - })), - // If request fails, dispatch failed action - catchError(() => - of({ - type: callActions.CallsActionTypes.GET_COORDINATES_FORW3W_FAIL, - }) - ) - ) - ) - ) - ); - - editGetCoordinatesForPlus$ = createEffect(() => - this.actions$.pipe( - ofType( - callActions.CallsActionTypes.EDIT_GET_COORDINATES_FOR_PLUS - ), - mergeMap((action) => - //this.locationProvider.getCoordinatesForAddressFromGoogle(action.address).pipe( - this.geocodingProvider.getCoordinatesFromPlusCode(action.plusCode).pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: callActions.CallsActionTypes.EDIT_GET_COORDINATES_FOR_PLUS_SUCCESS, - payload: data, - })), - // If request fails, dispatch failed action - catchError(() => - of({ - type: callActions.CallsActionTypes.GET_COORDINATES_FOR_PLUS_FAIL, - }) - ) - ) - ) - ) - ); - - done$ = createEffect( - () => - this.actions$.pipe( - ofType(callActions.CallsActionTypes.DONE) - ), - { dispatch: false } - ); - - constructor( - private actions$: Actions, - private modalController: ModalController, - private unitStatusService: UnitStatusService, - private homeStore: Store, - private callsStore: Store, - private loadingProvider: LoadingProvider, - private callsProvider: CallsService, - private callNotesProvider: CallNotesService, - private callFilesProvider: CallFilesService, - private menuCtrl: MenuController, - private messagesService: MessagesService, - private alertProvider: AlertProvider, - private geocodingProvider: GeolocationProvider - ) {} - - runModal = async (component, cssClass, properties, id, opts = {}) => { - await this.menuCtrl.close(); - - if (!cssClass) { - cssClass = 'modal-container'; - } - - if (!id) { - id = 'CallsFeatureModal'; - } - - this._modalRef = await this.modalController.create({ - component: component, - cssClass: cssClass, - componentProps: properties, - id: id, - ...opts, - }); - - return from(this._modalRef.present()); - }; - - closeModal = async (id) => { - if (!id) { - id = 'CallsFeatureModal'; - } - - try { - var activeModal = await this.modalController.getTop(); - - if (activeModal) { - await this.modalController.dismiss(null, null, id); - } - } catch (error) {} - }; -} diff --git a/src/app/features/calls/modals/notes-modal/modal-notes.page.html b/src/app/features/calls/modals/notes-modal/modal-notes.page.html deleted file mode 100644 index 1335f9c..0000000 --- a/src/app/features/calls/modals/notes-modal/modal-notes.page.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - -
- -

Call Notes

-
-
-
- -
- -
- -
- {{note.FullName}} - - {{note.Note}} - {{note.TimestampFormatted}} - -
-
-
-
-
- - - \ No newline at end of file diff --git a/src/app/features/calls/modals/notes-modal/modal-notes.page.scss b/src/app/features/calls/modals/notes-modal/modal-notes.page.scss deleted file mode 100644 index 9a6b77d..0000000 --- a/src/app/features/calls/modals/notes-modal/modal-notes.page.scss +++ /dev/null @@ -1,182 +0,0 @@ - -.mainLogo { - margin-bottom: 5px; - display: block; - width: 90%; - max-width: 500px; - margin-left: auto; - margin-right: auto; -} - - -.more-button { - --border-radius: 0%; - --border-width: 0px; - --padding-start: 0px; - --padding-end: 0px; - } - - .button-group { - .col { - &:first-child:not(:last-child) { - padding-right: 0; - .button { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - } - &:not(:first-child):not(:last-child) { - padding-right: 0; - padding-left: 0; - .button { - border-radius: 0; - } - } - &:last-child:not(:first-child) { - padding-left: 0; - .button { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - } - } - } - - .notifications-badge { - position: absolute; - top: -3px; - right: -18px; - border-radius: 100%; - } - - .call-details { - padding-top: 5px; - } - .call-details .row { - padding: 15px 0; - border-top: solid 1px #eee; - } - .call-details .col { - padding: 0; - } - .call-details .col-100 { - width: 100%; - } - .call-details-breakline { - padding: 15px 0; - border-top: solid 1px #eee; - } - .call-details-breakline .call-details-label { - margin-bottom: 10px; - } - .call-details-label { - color: #777; - font-size: 13px; - } - .call-details-content { - font-size: 14px; - color: #000; - font-weight: 400; - } - .find-location { - padding: 10px 10px 0; - } - .find-location .button { - margin-bottom: 0; - } - .notopmargin { - margin-top: 0 !important; - } - .save-footer { - height: 64px; - background-color: rgba(255, 255, 255, 0.7); - } - .save-footer .button { - margin: 0 !important; - } - .l-map .scroll, - .l-map .map-content { - height: 100%; - } - - .list_div { - display: flex; - align-items: center; - .user_image { - height: 50px; - width: 50px; - border-radius: 100%; - background-position: top; - min-width: 50px; - min-height: 50px; - } - - .detail { - padding-left: 15px; - width: 100%; - padding: 12px; - border-bottom: 1px solid lightgray; - margin-bottom: 5px; - position: relative; - .username { - font-weight: 600; - // font-size: 15px; - margin-bottom: 5px; - } - - span { - display: flex; - - ion-icon { - font-size: 18px; - margin-right: 10px; - color: gray; - } - - .active { - color: #33b7f1; - } - .light { - color: gray; - font-size: 14px; - } - - .time { - color: gray; - font-size: 13px; - position: absolute; - top: 16px; - right: 0; - } - } - } - } - - .footer_div { - display: flex; - position: sticky; - bottom: 0; - justify-content: space-between; - align-items: center; - background-color: dimgrey; - - ion-input { - border: 1px solid lightgray; - --padding-start: 8px; - position: relative; - } - } - - .chat_div{ - position: relative; - margin-left: 5px; - } - - .user_image{ - height: 50px; - width: 50px; - border-radius: 100%; - background-position: top; - min-width: 50px; - min-height: 50px; - } \ No newline at end of file diff --git a/src/app/features/calls/modals/notes-modal/modal-notes.page.ts b/src/app/features/calls/modals/notes-modal/modal-notes.page.ts deleted file mode 100644 index 0d82551..0000000 --- a/src/app/features/calls/modals/notes-modal/modal-notes.page.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { CallsState } from '../../store/calls.store'; -import { Observable, take } from 'rxjs'; -import { selectCallsState, selectSettingsState } from 'src/app/store'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { ResgridConfig } from '@resgrid/ngx-resgridlib'; -import { SettingsState } from 'src/app/features/settings/store/settings.store'; -import * as CallsActions from '../../actions/calls.actions'; - -@Component({ - selector: 'app-modal-call-notes', - templateUrl: './modal-notes.page.html', - styleUrls: ['./modal-notes.page.scss'], -}) -export class ModalCallNotesPage implements OnInit { - public callsState$: Observable; - public settingsState$: Observable; - public isSavingNote: boolean = false; - public callNotesFormData: FormGroup; - - constructor( - private store: Store, - private settingsStore: Store, - public formBuilder: FormBuilder, - private config: ResgridConfig - ) { - this.callsState$ = this.store.select(selectCallsState); - this.settingsState$ = this.settingsStore.select(selectSettingsState); - - this.callNotesFormData = this.formBuilder.group({ - message: ['', [Validators.required]], - }); - } - - ngOnInit() { - - } - - dismissModal() { - this.store.dispatch(new CallsActions.CloseCallNotesModal()); - } - - public getAvatarUrl(userId) { - return this.config.apiUrl + '/Avatars/Get?id=' + userId; - } - - public saveNote() { - this.settingsStore - .select(selectSettingsState) - .pipe(take(1)) - .subscribe((settingsState) => { - if (settingsState && settingsState.user) { - this.store - .select(selectCallsState) - .pipe(take(1)) - .subscribe((state) => { - if (state && state.callToView) { - const note = this.callNotesFormData.value['message']; - - this.store.dispatch( - new CallsActions.SaveCallNote( - state.callToView.CallId, - note, - settingsState.user.userId - ) - ); - - this.callNotesFormData.controls['message'].setValue(''); - this.callNotesFormData.controls['message'].patchValue(''); - } - }); - } - }); - } -} diff --git a/src/app/features/calls/models/callAndPriorityData.ts b/src/app/features/calls/models/callAndPriorityData.ts deleted file mode 100644 index 87866fa..0000000 --- a/src/app/features/calls/models/callAndPriorityData.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { CallPriorityResultData, CallResultData } from '@resgrid/ngx-resgridlib'; - -export class CallAndPriorityData { - public Call: CallResultData; - public CallPriority: CallPriorityResultData; -} \ No newline at end of file diff --git a/src/app/features/calls/pages/close-call/close-call.page.html b/src/app/features/calls/pages/close-call/close-call.page.html deleted file mode 100644 index 81eea58..0000000 --- a/src/app/features/calls/pages/close-call/close-call.page.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - {{'closeCallPage.title' | translate}} - - - - - - - - - - - - Call Name - {{(callsState$ | async)?.callToView?.Name}} - - - Type - - Closed - Cancelled - Unfounded - Founded - Minor - - - - - Note - - - - - - - - - {{'closeCallPage.saveButton' | translate}} - - - - \ No newline at end of file diff --git a/src/app/features/calls/pages/close-call/close-call.page.ts b/src/app/features/calls/pages/close-call/close-call.page.ts deleted file mode 100644 index 7de5c94..0000000 --- a/src/app/features/calls/pages/close-call/close-call.page.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Component, ContentChild, ViewChild } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { selectCallsState, selectNewCallDispatchesState } from 'src/app/store'; -import { RecipientsResultData, UtilsService } from '@resgrid/ngx-resgridlib'; -import { SubSink } from 'subsink'; -import * as _ from 'lodash'; -import * as CallsActions from '../../actions/calls.actions'; -import { CallsState } from '../../store/calls.store'; -import { ScrollDirective } from 'src/app/directives/scroll.directive'; -import { IonContent } from '@ionic/angular'; -import { take } from 'rxjs/operators'; - -@Component({ - selector: 'app-calls-close-call', - templateUrl: './close-call.page.html', - styleUrls: ['./close-call.page.scss'], -}) -export class CloseCallPage { - public note: string; - public type: string = "1"; - private subs = new SubSink(); - public callsState$: Observable; - - constructor( - private callsStore: Store - ) { - this.callsState$ = this.callsStore.select(selectCallsState); - } - - ionViewDidEnter() { - - } - - ionViewDidLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - public closeModal() { - this.callsStore.dispatch(new CallsActions.CloseCloseCallModal()); - } - - public closeCall() { - this.callsState$.pipe(take(1)).subscribe(state => { - if (state && state.callToView) { - this.callsStore.dispatch(new CallsActions.CloseCall(state.callToView.CallId, parseInt(this.type), this.note)); - } - }); - } - - public isValid() { - if (!this.note || this.note.length <= 0) { - return false; - } - - return true; - } -} diff --git a/src/app/features/calls/pages/edit-call/edit-call.page.html b/src/app/features/calls/pages/edit-call/edit-call.page.html deleted file mode 100644 index 52602cc..0000000 --- a/src/app/features/calls/pages/edit-call/edit-call.page.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - {{'editCallPage.title' | translate}} - - - - - - - - - - - - {{'editCallPage.nameLabel' | translate}} - - - - {{'editCallPage.priorityLabel' | translate}} - - {{priority.Name}} - - - - {{'editCallPage.typeLabel' | translate}} - - {{type.Name}} - - - - {{'editCallPage.callIdLabel' | translate}} - - - - {{'editCallPage.natureLabel' | translate}} - - - {{'editCallPage.contactInfoHeader' | translate}} - - {{'editCallPage.contactNameLabel' | translate}} - - - - {{'editCallPage.contactNumberLabel' | translate}} - - - {{'editCallPage.locationHeader' | translate}} - -
- - - Address - - - GPS - - - what3words - - - Plus Code - - -
-
- - - - - - - - - Search for Address - - - -
-
- - - - - - - - - - - - - - Find Coordinates - - - -
-
- - - - - - - - - Search for w3w - - - -
-
- - - - - - - - - Search for Plus Code - - - -
-
-
-
- -
-
-
-
- {{'editCallPage.dispatchHeader' | translate}} - - {{'editCallPage.recipientsLabel' | translate}} - {{recipientList}} - - - - - - {{'editCallPage.redispatchLabel' | translate}} - - -
-
- - - - - - - {{'editCallPage.dispatchButton' | translate}} - - - - - - \ No newline at end of file diff --git a/src/app/features/calls/pages/edit-call/edit-call.page.ts b/src/app/features/calls/pages/edit-call/edit-call.page.ts deleted file mode 100644 index 2b45094..0000000 --- a/src/app/features/calls/pages/edit-call/edit-call.page.ts +++ /dev/null @@ -1,413 +0,0 @@ -import { Component, ViewChild } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { - selectCallsState, - selectConfigData, - selectEditCallDispatchesState, - selectEditCallLocationState, - selectHomeState, -} from 'src/app/store'; -import { - GetConfigResultData, - RecipientsResultData, - UtilsService, -} from '@resgrid/ngx-resgridlib'; -import { SubSink } from 'subsink'; -import * as _ from 'lodash'; -import { environment } from 'src/environments/environment'; -import { take } from 'rxjs/operators'; -import { AlertProvider } from 'src/app/providers/alert'; -import leaflet from 'leaflet'; -import { GeolocationProvider } from 'src/app/providers/geolocation'; -import { CallsState } from '../../store/calls.store'; -import * as CallsActions from '../../actions/calls.actions'; -import { GeoLocation } from 'src/app/models/geoLocation'; -import { HomeState } from 'src/app/features/home/store/home.store'; -import { LoadingProvider } from 'src/app/providers/loading'; - -@Component({ - selector: 'app-page-calls-edit-call', - templateUrl: './edit-call.page.html', - styleUrls: ['./edit-call.page.scss'], -}) -export class EditCallPage { - public callsState$: Observable; - public homeState$: Observable; - public dispatches$: Observable; - public editCallLocation$: Observable; - public configData$: Observable; - private subs = new SubSink(); - public note: string; - public userId: string; - public recipientList: string; - public type: string = 'No Type'; - public priority: string = '0'; - public subject: string = ''; - public body: string = ''; - public callId: string = ''; - public contactName: string = ''; - public contactNumber: string = ''; - public address: string = ''; - public w3w: string = ''; - public lat: string = ''; - public lon: string = ''; - public plus: string = ''; - public redispatch: boolean = false; - - public locationType: string = 'address'; - - public mapImgWidth: number; - public mapImgHeight: number; - public mapImgSrc: string; - public map: any; - public marker: any; - @ViewChild('callMap') mapContainer; - - constructor( - private callsStore: Store, - private homeStore: Store, - private utilsProvider: UtilsService, - private alertProvider: AlertProvider, - private geolocationProvider: GeolocationProvider, - private loadingProvider: LoadingProvider - ) { - this.callsState$ = this.callsStore.select(selectCallsState); - this.homeState$ = this.homeStore.select(selectHomeState); - this.dispatches$ = this.callsStore.select(selectEditCallDispatchesState); - this.editCallLocation$ = this.callsStore.select( - selectEditCallLocationState - ); - this.configData$ = this.homeStore.select(selectConfigData); - } - - async ionViewDidEnter() { - this.callsStore.dispatch(new CallsActions.GetEditCallDispatches()); - - this.recipientList = 'Select Recipients...'; - this.type = '0'; - this.subject = ''; - this.body = ''; - - this.subs.sink = this.editCallLocation$.subscribe((editCallLocation) => { - if (editCallLocation && this.map && this.marker) { - if (this.map.hasLayer(this.marker)) { - this.map.removeLayer(this.marker); - } - - this.lat = editCallLocation.Latitude.toString(); - this.lon = editCallLocation.Longitude.toString(); - - this.marker = leaflet.marker( - [editCallLocation.Latitude, editCallLocation.Longitude], - { - icon: new leaflet.icon({ - iconUrl: '/assets/mapping/Call.png', - iconSize: [32, 37], - iconAnchor: [16, 37], - }), - draggable: false, - } - ); - - this.marker.addTo(this.map); - this.map.setView( - [editCallLocation.Latitude, editCallLocation.Longitude], - 16 - ); - } - }); - - this.subs.sink = this.dispatches$.subscribe((recipients) => { - if (recipients && recipients.length > 0) { - this.recipientList = ''; - - recipients.forEach((recipient) => { - if (recipient.Selected) { - if (this.recipientList.length > 0) { - this.recipientList += ', ' + recipient.Name; - } else { - this.recipientList += recipient.Name; - } - } - }); - - if (this.recipientList.length === 0) { - this.recipientList = 'Select Recipients...'; - } - } else { - this.recipientList = 'Select Recipients...'; - } - }); - - this.callsState$.pipe(take(1)).subscribe(async (callsState) => { - if (callsState && callsState.callToView) { - this.type = callsState.callToView.Type; - this.priority = callsState.callToView.Priority.toString(); - this.subject = callsState.callToView.Name; - this.body = callsState.callToView.Nature; - this.callId = callsState.callToView.CallId; - this.contactName = callsState.callToView.ContactName; - this.contactNumber = callsState.callToView.ContactInfo; - this.address = callsState.callToView.Address; - this.w3w = callsState.callToView.What3Words; - - if (callsState.callToView.Geolocation && callsState.callToView.Geolocation.length > 0) { - const myArray = callsState.callToView.Geolocation.split(","); - - if (myArray.length === 2) { - this.lat = myArray[0].toString(); - this.lon = myArray[1].toString(); - - this.callsStore.dispatch( - new CallsActions.SetEditCallLocation( - parseInt(this.lat), - parseInt(this.lon) - ) - ); - } - } else if (callsState.callToView.Latitude && callsState.callToView.Longitude) { - this.lat = callsState.callToView.Latitude; - this.lon = callsState.callToView.Longitude; - } - - await this.initMap(); - await this.loadingProvider.hide(); - } - - if ( - callsState && - callsState.callViewData && - callsState.callViewData.Dispatches - ) { - this.callsStore.dispatch( - new CallsActions.SetEditCallDispatches( - callsState.callViewData.Dispatches - ) - ); - } - }); - } - - ionViewDidLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - public findCoordinates() { - if (this.lat && this.lon) { - if ( - this.lat.includes('°') || - this.lat.includes("'") || - this.lat.includes('"') || - this.lon.includes('°') || - this.lon.includes("'") || - this.lon.includes('"') - ) { - this.alertProvider.showOkAlert( - 'Coordinates Error', - '', - 'It looks like you entered your coordinates in DMS (Degrees, Minutes, Seconds) format. Please enter coordinates in decimal format.' - ); - } else { - this.callsStore.dispatch( - new CallsActions.SetEditCallLocation( - parseInt(this.lat), - parseInt(this.lon) - ) - ); - } - } - } - - public findCoordinatesForAddress() { - this.callsStore.dispatch( - new CallsActions.EditGetCoordinatesForAddress(this.address) - ); - } - - public findCoordinatesForW3W() { - this.callsStore.dispatch( - new CallsActions.EditGetCoordinatesForW3W(this.w3w) - ); - } - - public findCoordinatesForPlus() { - this.callsStore.dispatch( - new CallsActions.EditGetCoordinatesForPlus(this.plus) - ); - } - - public closeModal() { - this.callsStore.dispatch(new CallsActions.CloseEditCallModal()); - } - - public selectRecipients() { - this.callsStore.dispatch(new CallsActions.ShowEditCallSelectDispatches()); - } - - public send() { - if (this.subject.length === 0) { - this.alertProvider.showErrorAlert( - 'New Call Error', - '', - 'You must supply a name for the call.' - ); - return; - } - if (this.body.length === 0) { - this.alertProvider.showErrorAlert( - 'New Call Error', - '', - 'You must supply a nature for the call.' - ); - return; - } - this.callsState$.pipe(take(1)).subscribe((callsState) => { - let dispatchList = ''; - - if ( - callsState && - callsState.editCallWhoDispatch && - callsState.editCallWhoDispatch.length > 0 - ) { - callsState.editCallWhoDispatch.forEach((recipient) => { - if (recipient.Selected) { - if (dispatchList.length > 0) { - dispatchList = dispatchList.concat(`|${recipient.Id}`); - } else { - dispatchList = `${recipient.Id}`; - } - } - }); - } - - this.callsState$.pipe(take(1)).subscribe((callsState2) => { - if (callsState2) { - if (callsState2.editCallLocation) { - this.callsStore.dispatch( - new CallsActions.UpdateCall( - callsState2.callToView.CallId, - this.subject, - parseInt(this.priority, 10), - this.type, - this.contactName, - this.contactNumber, - this.callId, - null, - null, - this.body, - null, - this.address, - this.w3w, - callsState2.editCallLocation.Latitude, - callsState2.editCallLocation.Longitude, - dispatchList, - null, - null, - this.redispatch - ) - ); - } else { - this.callsStore.dispatch( - new CallsActions.UpdateCall( - callsState2.callToView.CallId, - this.subject, - parseInt(this.priority, 10), - this.type, - this.contactName, - this.contactNumber, - this.callId, - null, - null, - this.body, - null, - this.address, - this.w3w, - null, - null, - dispatchList, - null, - null, - this.redispatch - ) - ); - } - } - }); - }); - } - - private async initMap() { - let position = await this.geolocationProvider.getLocation(); - - this.configData$.pipe(take(1)).subscribe((configData) => { - if (this.map) { - this.map.off(); - this.map.remove(); - this.map = null; - } - - if (!this.lat && !this.lon) { - if (!position) { - position = new GeoLocation(0, 0); - } //TODO: Stop gap, should get a location from the department info somewhere - - if (position) { - this.callsStore.dispatch( - new CallsActions.SetEditCallLocation( - position.Latitude, - position.Longitude - ) - ); - } - } else { - position = new GeoLocation(parseInt(this.lat), parseInt(this.lon)); - } - - this.map = leaflet.map(this.mapContainer.nativeElement, { - dragging: false, - doubleClickZoom: false, - zoomControl: false, - }); - - leaflet - .tileLayer(configData.MapUrl, { - minZoom: 16, - maxZoom: 16, - crossOrigin: true, - attribution: configData.MapAttribution, - }) - .addTo(this.map); - - if (position) { - this.map.setView([position.Latitude, position.Longitude], 16); - - this.marker = leaflet.marker([position.Latitude, position.Longitude], { - icon: new leaflet.icon({ - iconUrl: '/assets/mapping/Call.png', - iconSize: [32, 37], - iconAnchor: [16, 37], - }), - draggable: false, - }); - - this.marker.addTo(this.map); - } - - const that = this; - setTimeout(() => that.map.invalidateSize(), 500); - }); - } - - public showSetLocationModal() { - this.editCallLocation$.pipe(take(1)).subscribe((editCallLocation) => { - if (editCallLocation) { - this.callsStore.dispatch(new CallsActions.ShowSetLocationModal(false, editCallLocation.Latitude, editCallLocation.Longitude)); - } else { - this.callsStore.dispatch(new CallsActions.ShowSetLocationModal(false, 0, 0)); - } - }); - } -} diff --git a/src/app/features/calls/pages/new-call/new-call.page.html b/src/app/features/calls/pages/new-call/new-call.page.html deleted file mode 100644 index fa0670b..0000000 --- a/src/app/features/calls/pages/new-call/new-call.page.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - {{'newCallPage.title' | translate}} - - - - - - - - - - - - -
{{'newCallPage.nameLabel' | translate}} (Required)
-
-
- - {{'newCallPage.priorityLabel' | translate}} - - {{priority.Name}} - - - - {{'newCallPage.typeLabel' | translate}} - - {{type.Name}} - - - - {{'newCallPage.callIdLabel' | translate}} - - - - {{'newCallPage.natureLabel' | translate}} - - - {{'newCallPage.contactInfoHeader' | translate}} - - {{'newCallPage.contactNameLabel' | translate}} - - - - {{'newCallPage.contactNumberLabel' | translate}} - - - {{'newCallPage.locationHeader' | translate}} - -
- - - Address - - - GPS - - - what3words - - - Plus Code - - -
-
- - - - - - - - - Search for Address - - - -
-
- - - - - - - - - - - - - - Find Coordinates - - - -
-
- - - - - - - - - Search for w3w - - - -
-
- - - - - - - - - Search for Plus Code - - - -
-
-
-
- -
-
-
-
- {{'newCallPage.dispatchHeader' | translate}} - - {{'newCallPage.recipientsLabel' | translate}} - {{recipientList}} - - - - -
-
- - - - - - - {{'newCallPage.dispatchButton' | translate}} - - - - - - \ No newline at end of file diff --git a/src/app/features/calls/pages/new-call/new-call.page.scss b/src/app/features/calls/pages/new-call/new-call.page.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/features/calls/pages/new-call/new-call.page.ts b/src/app/features/calls/pages/new-call/new-call.page.ts deleted file mode 100644 index 4596178..0000000 --- a/src/app/features/calls/pages/new-call/new-call.page.ts +++ /dev/null @@ -1,336 +0,0 @@ -import { Component, ViewChild } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { - selectCallsState, - selectConfigData, - selectHomeState, - selectNewCallDispatchesState, - selectNewCallLocationState, -} from 'src/app/store'; -import { - GetConfigResultData, - RecipientsResultData, - UtilsService, -} from '@resgrid/ngx-resgridlib'; -import { SubSink } from 'subsink'; -import * as _ from 'lodash'; -import { environment } from 'src/environments/environment'; -import { take } from 'rxjs/operators'; -import { AlertProvider } from 'src/app/providers/alert'; -import leaflet from 'leaflet'; -import { GeolocationProvider } from 'src/app/providers/geolocation'; -import { CallsState } from '../../store/calls.store'; -import * as CallsActions from '../../../../features/calls/actions/calls.actions'; -import { GeoLocation } from 'src/app/models/geoLocation'; -import { HomeState } from 'src/app/features/home/store/home.store'; - -@Component({ - selector: 'app-new-call', - templateUrl: './new-call.page.html', - styleUrls: ['./new-call.page.scss'], -}) -export class NewCallPage { - public callsState$: Observable; - public homeState$: Observable; - public dispatches$: Observable; - public newCallLocation$: Observable; - public configData$: Observable; - private subs = new SubSink(); - public note: string; - public userId: string; - public recipientList: string; - public type: string = 'No Type'; - public priority: string = '0'; - public subject: string = ''; - public body: string = ''; - public callId: string = ''; - public contactName: string = ''; - public contactNumber: string = ''; - public address: string = ''; - public w3w: string = ''; - public lat: string = ''; - public lon: string = ''; - public plus: string = ''; - - public locationType: string = 'address'; - - public mapImgWidth: number; - public mapImgHeight: number; - public mapImgSrc: string; - public map: any; - public marker: any; - @ViewChild('callMap') mapContainer; - - constructor( - private callsStore: Store, - private homeStore: Store, - private utilsProvider: UtilsService, - private alertProvider: AlertProvider, - private geolocationProvider: GeolocationProvider - ) { - this.callsState$ = this.callsStore.select(selectCallsState); - this.homeState$ = this.homeStore.select(selectHomeState); - this.dispatches$ = this.callsStore.select(selectNewCallDispatchesState); - this.newCallLocation$ = this.callsStore.select(selectNewCallLocationState); - this.configData$ = this.homeStore.select(selectConfigData); - } - - async ionViewDidEnter() { - this.recipientList = 'Select Recipients...'; - this.type = '0'; - this.subject = ''; - this.body = ''; - - await this.initMap(); - - this.subs.sink = this.newCallLocation$.subscribe((newCallLocation) => { - if (newCallLocation && this.map && this.marker) { - if (this.map.hasLayer(this.marker)) { - this.map.removeLayer(this.marker); - } - - this.marker = leaflet.marker( - [newCallLocation.Latitude, newCallLocation.Longitude], - { - icon: new leaflet.icon({ - iconUrl: '/assets/mapping/Call.png', - iconSize: [32, 37], - iconAnchor: [16, 37], - }), - draggable: false, - } - ); - - this.marker.addTo(this.map); - this.map.setView( - [newCallLocation.Latitude, newCallLocation.Longitude], - 16 - ); - } - }); - - this.subs.sink = this.dispatches$.subscribe((recipients) => { - if (recipients && recipients.length > 0) { - this.recipientList = ''; - - recipients.forEach((recipient) => { - if (recipient.Selected) { - if (this.recipientList.length > 0) { - this.recipientList += ', ' + recipient.Name; - } else { - this.recipientList += recipient.Name; - } - } - }); - - if (this.recipientList.length === 0) { - this.recipientList = 'Select Recipients...'; - } - } else { - this.recipientList = 'Select Recipients...'; - } - }); - } - - ionViewDidLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - public closeModal() { - this.callsStore.dispatch(new CallsActions.CloseNewCallModal()); - } - - public selectRecipients() { - this.callsState$.pipe(take(1)).subscribe((callsState) => { - if ( - callsState && - callsState.newCallWhoDispatch && - callsState.newCallWhoDispatch.length > 0 - ) { - this.callsStore.dispatch( - new CallsActions.ShowSelectDispatchesSuccess(null) - ); - } else { - this.callsStore.dispatch(new CallsActions.ShowSelectDispatches()); - } - }); - } - - public findCoordinates() { - if (this.lat && this.lon) { - if ( - this.lat.includes('°') || - this.lat.includes("'") || - this.lat.includes('"') || - this.lon.includes('°') || - this.lon.includes("'") || - this.lon.includes('"') - ) { - this.alertProvider.showOkAlert('Coordinates Error', '', 'It looks like you entered your coorinates in DMS (Degrees, Minutes, Seconds) format. Please enter coordinates in decimal format.'); - } else { - this.callsStore.dispatch( - new CallsActions.SetNewCallLocation( - parseInt(this.lat), - parseInt(this.lon) - ) - ); - } - } - } - - public findCoordinatesForAddress() { - this.callsStore.dispatch( - new CallsActions.GetCoordinatesForAddress(this.address) - ); - } - - public findCoordinatesForW3W() { - this.callsStore.dispatch( - new CallsActions.GetCoordinatesForW3W(this.w3w) - ); - } - - public findCoordinatesForPlus() { - this.callsStore.dispatch( - new CallsActions.GetCoordinatesForPlus(this.plus) - ); - } - - public send() { - if (this.subject.length === 0) { - this.alertProvider.showErrorAlert( - 'New Call Error', - '', - 'You must supply a name for the call.' - ); - return; - } - if (this.body.length === 0) { - this.alertProvider.showErrorAlert( - 'New Call Error', - '', - 'You must supply a nature for the call.' - ); - return; - } - this.callsState$.pipe(take(1)).subscribe((callsState) => { - let dispatchList = ''; - - if ( - callsState && - callsState.newCallWhoDispatch && - callsState.newCallWhoDispatch.length > 0 - ) { - callsState.newCallWhoDispatch.forEach((recipient) => { - if (recipient.Selected) { - if (dispatchList.length > 0) { - dispatchList = dispatchList.concat(`|${recipient.Id}`); - } else { - dispatchList = `${recipient.Id}`; - } - } - }); - } - - this.callsState$.pipe(take(1)).subscribe((callsState) => { - if (callsState) { - if (callsState.newCallLocation) { - this.callsStore.dispatch( - new CallsActions.DispatchCall( - this.subject, - parseInt(this.priority), - this.type, - this.contactName, - this.contactNumber, - this.callId, - null, - null, - this.body, - null, - this.address, - this.w3w, - callsState.newCallLocation.Latitude, - callsState.newCallLocation.Longitude, - dispatchList, - null, - null - ) - ); - } else { - } - } - }); - }); - } - - private async initMap() { - let position = await this.geolocationProvider.getLocation(); - - this.configData$.pipe(take(1)).subscribe((configData) => { - if (this.map) { - this.map.off(); - this.map.remove(); - this.map = null; - } - - if (!position) { - position = new GeoLocation(0, 0); - } //TODO: Stop gap, should get a location from the department info somewhere - - if (position) { - this.callsStore.dispatch( - new CallsActions.SetNewCallLocation( - position.Latitude, - position.Longitude - ) - ); - } - - this.map = leaflet.map(this.mapContainer.nativeElement, { - dragging: false, - doubleClickZoom: false, - zoomControl: false, - }); - - leaflet - .tileLayer(configData.MapUrl, { - minZoom: 16, - maxZoom: 16, - crossOrigin: true, - attribution: configData.MapAttribution, - }) - .addTo(this.map); - - if (position) { - this.map.setView([position.Latitude, position.Longitude], 16); - - this.marker = leaflet.marker([position.Latitude, position.Longitude], { - icon: new leaflet.icon({ - iconUrl: '/assets/mapping/Call.png', - iconSize: [32, 37], - iconAnchor: [16, 37], - }), - draggable: false, - }); - - this.marker.addTo(this.map); - } - - const that = this; - setTimeout(function () { - //window.dispatchEvent(new Event('resize')); - //that.map.invalidateSize.bind(that.map) - that.map.invalidateSize(); - }, 500); - }); - } - - public showSetLocationModal() { - this.newCallLocation$.pipe(take(1)).subscribe((newCallLocation) => { - this.callsStore.dispatch(new CallsActions.ShowSetLocationModal(true, newCallLocation.Latitude, newCallLocation.Longitude)); - }); - } -} diff --git a/src/app/features/calls/pages/select-dispatches-edit/select-dispatches-edit.page.html b/src/app/features/calls/pages/select-dispatches-edit/select-dispatches-edit.page.html deleted file mode 100644 index 79a139d..0000000 --- a/src/app/features/calls/pages/select-dispatches-edit/select-dispatches-edit.page.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - {{'selectRecipientsPage.title' | translate}} - - - - - - - - - - - {{group.key}} - - {{option.Name}} - - - - - - - - - - - {{'selectRecipientsPage.saveButton' | translate}} - - - - - - \ No newline at end of file diff --git a/src/app/features/calls/pages/select-dispatches-edit/select-dispatches-edit.page.scss b/src/app/features/calls/pages/select-dispatches-edit/select-dispatches-edit.page.scss deleted file mode 100644 index 878cc31..0000000 --- a/src/app/features/calls/pages/select-dispatches-edit/select-dispatches-edit.page.scss +++ /dev/null @@ -1,42 +0,0 @@ -.email { - margin-bottom: 6px; - - ion-label { - white-space: pre; - } - - .excerpt { - padding-top: 4px; - } - - .date { - font-size: small; - } - } - - ion-avatar { - width: 40px; - height: 40px; - } - - .email-circle { - width: 40px; - height: 40px; - border-radius: 50%; - color: #e4e4e4; - text-transform: capitalize; - font-weight: 500; - - display: flex; - align-items: center; - justify-content: center; - } - - .user-image { - height: 50px; - width: 50px; - border-radius: 50%; - background-position: center; - background-size: cover; - background-repeat: no-repeat; - } \ No newline at end of file diff --git a/src/app/features/calls/pages/select-dispatches-edit/select-dispatches-edit.page.ts b/src/app/features/calls/pages/select-dispatches-edit/select-dispatches-edit.page.ts deleted file mode 100644 index 2451393..0000000 --- a/src/app/features/calls/pages/select-dispatches-edit/select-dispatches-edit.page.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Component, ContentChild, ViewChild } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { selectCallsState, selectEditCallDispatchesState, selectNewCallDispatchesState } from 'src/app/store'; -import { RecipientsResultData, UtilsService } from '@resgrid/ngx-resgridlib'; -import { SubSink } from 'subsink'; -import * as _ from 'lodash'; -import * as CallsActions from '../../actions/calls.actions'; -import { CallsState } from '../../store/calls.store'; -import { ScrollDirective } from 'src/app/directives/scroll.directive'; -import { IonContent } from '@ionic/angular'; - -@Component({ - selector: 'app-select-dispatches-edit', - templateUrl: './select-dispatches-edit.page.html', - styleUrls: ['./select-dispatches-edit.page.scss'], -}) -export class SelectDispatchesEditPage { - private lastChecked: string = ''; - private position: number = 0; - private subs = new SubSink(); - public callsState$: Observable; - public whoToDispatch$: Observable; - public newCallWhoDispatch: RecipientsResultData[] = []; - //@ContentChild(ScrollDirective) scrollDirective; - @ViewChild(IonContent) content: IonContent; - - constructor( - private callsStore: Store, - private utilsProvider: UtilsService, - private scrollDirective: ScrollDirective - ) { - this.callsState$ = this.callsStore.select(selectCallsState); - this.whoToDispatch$ = this.callsStore.select(selectEditCallDispatchesState); - } - - ionViewDidEnter() { - this.subs.sink = this.whoToDispatch$.subscribe((dispatches) => { - if (dispatches) { - this.newCallWhoDispatch = dispatches; - if (this.position > 0) { - setTimeout(() => - this.content.scrollToPoint(0, this.position).then(() => {}) - ); - } - } - }); - } - - ionViewDidLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - public closeModal() { - this.callsStore.dispatch(new CallsActions.CloseSelectDispatchesModal()); - } - - confirm() { - this.callsStore.dispatch(new CallsActions.CloseSelectDispatchesModal()); - } - - public selectOption(event, id: string) { - var checked = event.target.checked; - this.lastChecked = id; - - this.callsStore.dispatch( - new CallsActions.UpdatedEditCallSelectedDispatches(id, checked) - ); - } - - private scrollToLastChecked() { - // This works, but puts the item at the top instead of where the user was on the scroll list, not ideal. - if (this.lastChecked) { - var element = document.getElementById(this.lastChecked); - if (element) { - this.content.scrollToPoint(0, element.offsetTop - 60).then(() => {}) - } - } - } - - public onScroll(event) { - if (event && event.detail && event.detail.scrollTop > 0) { - this.position = event.detail.scrollTop; - } - } -} diff --git a/src/app/features/calls/pages/select-dispatches/select-dispatches.page.html b/src/app/features/calls/pages/select-dispatches/select-dispatches.page.html deleted file mode 100644 index 79a139d..0000000 --- a/src/app/features/calls/pages/select-dispatches/select-dispatches.page.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - {{'selectRecipientsPage.title' | translate}} - - - - - - - - - - - {{group.key}} - - {{option.Name}} - - - - - - - - - - - {{'selectRecipientsPage.saveButton' | translate}} - - - - - - \ No newline at end of file diff --git a/src/app/features/calls/pages/select-dispatches/select-dispatches.page.scss b/src/app/features/calls/pages/select-dispatches/select-dispatches.page.scss deleted file mode 100644 index 878cc31..0000000 --- a/src/app/features/calls/pages/select-dispatches/select-dispatches.page.scss +++ /dev/null @@ -1,42 +0,0 @@ -.email { - margin-bottom: 6px; - - ion-label { - white-space: pre; - } - - .excerpt { - padding-top: 4px; - } - - .date { - font-size: small; - } - } - - ion-avatar { - width: 40px; - height: 40px; - } - - .email-circle { - width: 40px; - height: 40px; - border-radius: 50%; - color: #e4e4e4; - text-transform: capitalize; - font-weight: 500; - - display: flex; - align-items: center; - justify-content: center; - } - - .user-image { - height: 50px; - width: 50px; - border-radius: 50%; - background-position: center; - background-size: cover; - background-repeat: no-repeat; - } \ No newline at end of file diff --git a/src/app/features/calls/pages/select-dispatches/select-dispatches.page.ts b/src/app/features/calls/pages/select-dispatches/select-dispatches.page.ts deleted file mode 100644 index fca006a..0000000 --- a/src/app/features/calls/pages/select-dispatches/select-dispatches.page.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { Component, ContentChild, ViewChild } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { selectCallsState, selectNewCallDispatchesState } from 'src/app/store'; -import { RecipientsResultData, UtilsService } from '@resgrid/ngx-resgridlib'; -import { SubSink } from 'subsink'; -import * as _ from 'lodash'; -import * as CallsActions from '../../actions/calls.actions'; -import { CallsState } from '../../store/calls.store'; -import { ScrollDirective } from 'src/app/directives/scroll.directive'; -import { IonContent } from '@ionic/angular'; - -@Component({ - selector: 'app-select-dispatches', - templateUrl: './select-dispatches.page.html', - styleUrls: ['./select-dispatches.page.scss'], -}) -export class SelectDispatchesPage { - private lastChecked: string = ''; - private position: number = 0; - private subs = new SubSink(); - public callsState$: Observable; - public whoToDispatch$: Observable; - public newCallWhoDispatch: RecipientsResultData[] = []; - //@ContentChild(ScrollDirective) scrollDirective; - @ViewChild(IonContent) content: IonContent; - - constructor( - private callsStore: Store, - private utilsProvider: UtilsService, - private scrollDirective: ScrollDirective - ) { - this.callsState$ = this.callsStore.select(selectCallsState); - this.whoToDispatch$ = this.callsStore.select(selectNewCallDispatchesState); - } - - ionViewDidEnter() { - this.subs.sink = this.whoToDispatch$.subscribe((dispatches) => { - if (dispatches) { - //var scroll = await this.content.getScrollElement(); - //this.scrollDirective.prepareFor('up'); - this.newCallWhoDispatch = dispatches; - //setTimeout(() => this.scrollDirective.restore()); - if (this.position > 0) { - setTimeout(() => - //this.scrollToLastChecked() - this.content.scrollToPoint(0, this.position).then(() => {}) - ); - } - } - }); - } - - ionViewDidLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - public closeModal() { - this.callsStore.dispatch(new CallsActions.CloseSelectDispatchesModal()); - } - - confirm() { - this.callsStore.dispatch(new CallsActions.CloseSelectDispatchesModal()); - } - - public selectOption(event, id: string) { - var checked = event.target.checked; - this.lastChecked = id; - - this.callsStore.dispatch( - new CallsActions.UpdatedSelectedDispatches(id, checked) - ); - } - - private scrollToLastChecked() { - // This works, but puts the item at the top instead of where the user was on the scroll list, not ideal. - if (this.lastChecked) { - var element = document.getElementById(this.lastChecked); - if (element) { - this.content.scrollToPoint(0, element.offsetTop - 60).then(() => {}) - } - } - } - - public onScroll(event) { - //console.log(JSON.stringify(event)); - - if (event && event.detail && event.detail.scrollTop > 0) { - this.position = event.detail.scrollTop; - } - //if (event.detail.deltaY > 0) { - // this.position = event.detail.deltaY; - //} - } -} diff --git a/src/app/features/calls/pages/select-location/select-location.page.html b/src/app/features/calls/pages/select-location/select-location.page.html deleted file mode 100644 index 49cf8cc..0000000 --- a/src/app/features/calls/pages/select-location/select-location.page.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - {{'setLocationPage.title' | translate}} - - - - - - - - - -
-
- - - - - - - {{'setLocationPage.setLocationButton' | translate}} - - - - - - \ No newline at end of file diff --git a/src/app/features/calls/pages/select-location/select-location.page.scss b/src/app/features/calls/pages/select-location/select-location.page.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/features/calls/pages/select-location/select-location.page.ts b/src/app/features/calls/pages/select-location/select-location.page.ts deleted file mode 100644 index 5129bc6..0000000 --- a/src/app/features/calls/pages/select-location/select-location.page.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { Component, ViewChild } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { - selectCallsState, - selectConfigData, - selectEditCallLocationState, - selectNewCallLocationState, -} from 'src/app/store'; -import { GetConfigResultData } from '@resgrid/ngx-resgridlib'; -import { SubSink } from 'subsink'; -import * as _ from 'lodash'; -import { take } from 'rxjs/operators'; -import leaflet from 'leaflet'; -import { GeolocationProvider } from 'src/app/providers/geolocation'; -import * as CallsActions from '../../../../features/calls/actions/calls.actions'; -import { CallsState } from '../../store/calls.store'; -import { GeoLocation } from 'src/app/models/geoLocation'; - -@Component({ - selector: 'app-select-location', - templateUrl: './select-location.page.html', - styleUrls: ['./select-location.page.scss'], -}) -export class SelectLocationPage { - public callsState$: Observable; - public newCallLocation$: Observable; - public editCallLocation$: Observable; - public configData$: Observable; - private subs = new SubSink(); - - private forNewCall: boolean = false; - public map: any; - public marker: any; - @ViewChild('callMap') mapContainer; - - constructor( - private callsStore: Store, - private geolocationProvider: GeolocationProvider - ) { - this.callsState$ = this.callsStore.select(selectCallsState); - this.newCallLocation$ = this.callsStore.select(selectNewCallLocationState); - this.editCallLocation$ = this.callsStore.select( - selectEditCallLocationState - ); - this.configData$ = this.callsStore.select(selectConfigData); - } - - async ionViewDidEnter() { - await this.initMap(); - } - - ionViewDidLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - public closeModal() { - this.callsStore.dispatch(new CallsActions.CloseSetLocationModal()); - } - - private async initMap() { - this.configData$.pipe(take(1)).subscribe((configData) => { - this.callsState$.pipe(take(1)).subscribe((state) => { - this.forNewCall = state.setLocationModalForNewCall; - if (state.setLocationModalForNewCall) { - this.newCallLocation$.pipe(take(1)).subscribe((position) => { - this.setMap(position, configData); - }); - } else { - this.editCallLocation$.pipe(take(1)).subscribe((position) => { - this.setMap(position, configData); - }); - } - }); - }); - } - - private setMap(position: GeoLocation, configData: GetConfigResultData) { - if (this.map) { - this.map.off(); - this.map.remove(); - this.map = null; - } - - this.map = leaflet.map(this.mapContainer.nativeElement, { - dragging: true, - doubleClickZoom: false, - zoomControl: true, - }); - - leaflet - .tileLayer(configData.MapUrl, { - crossOrigin: true, - attribution: configData.MapAttribution, - }) - .addTo(this.map); - - this.map.setView([position.Latitude, position.Longitude], 16); - const that = this; - - this.marker = leaflet - .marker([position.Latitude, position.Longitude], { - icon: new leaflet.icon({ - iconUrl: '/assets/mapping/Call.png', - iconSize: [32, 37], - iconAnchor: [16, 37], - }), - draggable: true, - }) - .on('dragend', function (ev) { - var chagedPos = ev.target.getLatLng(); - - - that.callsStore.dispatch( - new CallsActions.SetNewCallLocation(chagedPos.lat, chagedPos.lng) - ); - }); - - this.marker.addTo(this.map); - - this.map.on('click', function (e) { - if (that.marker) { - that.marker.setLatLng(e.latlng); - } - - if (that.forNewCall) { - that.callsStore.dispatch( - new CallsActions.SetNewCallLocation(e.latlng.lat, e.latlng.lng) - ); - } else { - that.callsStore.dispatch( - new CallsActions.SetEditCallLocation(e.latlng.lat, e.latlng.lng) - ); - } - }); - - setTimeout(function () { - //window.dispatchEvent(new Event('resize')); - //that.map.invalidateSize.bind(that.map) - that.map.invalidateSize(); - }, 500); - } - - private addMarker(e) { - // Add marker to map at click location; add popup window - //var newMarker = new L.marker(e.latlng).addTo(map); - - if (this.marker) { - this.marker.setLatLng(e.latlng); - } - - this.callsStore.dispatch( - new CallsActions.SetNewCallLocation(e.latlng.lat, e.latlng.lng) - ); - } - - public setLocation() { - this.callsStore.dispatch(new CallsActions.CloseSetLocationModal()); - } -} diff --git a/src/app/features/calls/pages/view-call/view-call.page.html b/src/app/features/calls/pages/view-call/view-call.page.html deleted file mode 100644 index 8db5152..0000000 --- a/src/app/features/calls/pages/view-call/view-call.page.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - -
-
-
-
-
- - - - {{(callsState$ | async)?.callToView?.Name}} -
-

-
-
-
-
-
- - - - Notes - {{(callsState$ | async) ?.callToView?.NotesCount}} - - - - Images - {{(callsState$ | async)?.callToView?.ImgagesCount}} - - - - Files - {{(callsState$ | async)?.callToView?.FileCount}} - - - - Route - - - -
- -
-
- - - Data - - - Contact - - - Protocols - - - Dispatch - - - Activity - - -
- -
- - - -

Priority

-

{{(callsState$ | async)?.callToViewPriority?.Name}}

-
-
- - -

Timestamp

-

{{getFullDateTime((callsState$ | async)?.callToView?.LoggedOnUtc)}}

-
-
- - -

Type

-

{{(callsState$ | async)?.callToView?.Type}}

-
-
- - -

Address

-

{{(callsState$ | async)?.callToView?.Address}}

-
-
- - -

Notes

-

-
-
-
- - - - -

Reference Id

-

{{(callsState$ | async)?.callToView?.ReferenceId}}

-
-
- - -

External Id

-

{{(callsState$ | async)?.callToView?.ExternalId}}

-
-
- - -

Contact Name

-

{{(callsState$ | async)?.callToView?.ContactName}}

-
-
- - -

Contact Info

-

{{(callsState$ | async)?.callToView?.ContactInfo}}

-
-
-
- - - - - -

{{protocol.Name}} ({{protocol.Code}})

-
-

- - - -
-
-
- - - - -

{{dispatch.Name}}

-

{{dispatch.Group}} ({{dispatch.Type}})

-
-
-
- -
- - - - -

{{activity.Name}} ({{activity.Group}})

-
-

{{activity.StatusText}} {{formatTimestamp(activity.Timestamp)}}

- -

{{activity.Note}}

-
-
-
-
-
-
-
-
-
- -

Call Images

-
-
- -
-
- -
- -
-
- -

Call Files

-
-
- -
-
- - - -

{{file.Name}}

-

{{file.FileName}}

-
-
-
-
- -
-
diff --git a/src/app/features/calls/pages/view-call/view-call.page.scss b/src/app/features/calls/pages/view-call/view-call.page.scss deleted file mode 100644 index c413662..0000000 --- a/src/app/features/calls/pages/view-call/view-call.page.scss +++ /dev/null @@ -1,173 +0,0 @@ - -.more-button { - --border-radius: 0%; - --border-width: 0px; - --padding-start: 0px; - --padding-end: 0px; -} - -.button-group { - .col { - &:first-child:not(:last-child) { - padding-right: 0; - .button { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - } - &:not(:first-child):not(:last-child) { - padding-right: 0; - padding-left: 0; - .button { - border-radius: 0; - } - } - &:last-child:not(:first-child) { - padding-left: 0; - .button { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - } - } -} - -.notifications-badge { - position: absolute; - top: -3px; - right: -18px; - border-radius: 100%; -} - -.call-details { - padding-top: 5px; -} -.call-details .row { - padding: 15px 0; - border-top: solid 1px #eee; -} -.call-details .col { - padding: 0; -} -.call-details .col-100 { - width: 100%; -} -.call-details-breakline { - padding: 15px 0; - border-top: solid 1px #eee; -} -.call-details-breakline .call-details-label { - margin-bottom: 10px; -} -.call-details-label { - color: #777; - font-size: 13px; -} -.call-details-content { - font-size: 14px; - color: #000; - font-weight: 400; -} -.find-location { - padding: 10px 10px 0; -} -.find-location .button { - margin-bottom: 0; -} -.notopmargin { - margin-top: 0 !important; -} -.save-footer { - height: 64px; - background-color: rgba(255, 255, 255, 0.7); -} -.save-footer .button { - margin: 0 !important; -} -.l-map .scroll, -.l-map .map-content { - height: 100%; -} - -.list_div { - display: flex; - align-items: center; - .user_image { - height: 50px; - width: 50px; - border-radius: 100%; - background-position: top; - min-width: 50px; - min-height: 50px; - } - - .detail { - padding-left: 15px; - width: 100%; - padding: 12px; - border-bottom: 1px solid lightgray; - margin-bottom: 5px; - position: relative; - .username { - font-weight: 600; - // font-size: 15px; - margin-bottom: 5px; - } - - span { - display: flex; - - ion-icon { - font-size: 18px; - margin-right: 10px; - color: gray; - } - - .active { - color: #33b7f1; - } - .light { - color: gray; - font-size: 14px; - } - - .time { - color: gray; - font-size: 13px; - position: absolute; - top: 16px; - right: 0; - } - } - } -} - -.footer_div { - display: flex; - position: sticky; - bottom: 0; - justify-content: space-between; - align-items: center; - background-color: dimgrey; - - ion-input { - border-radius: 25px; - border: 1px solid lightgray; - --padding-start: 8px; - position: relative; - } -} - -.chat_div{ - position: relative; - margin-left: 5px; -} - -.user_image{ - height: 50px; - width: 50px; - border-radius: 100%; - background-position: top; - min-width: 50px; - min-height: 50px; -} \ No newline at end of file diff --git a/src/app/features/calls/pages/view-call/view-call.page.ts b/src/app/features/calls/pages/view-call/view-call.page.ts deleted file mode 100644 index 82a6123..0000000 --- a/src/app/features/calls/pages/view-call/view-call.page.ts +++ /dev/null @@ -1,432 +0,0 @@ -import { - AfterViewInit, - ChangeDetectorRef, - Component, - ViewChild, -} from '@angular/core'; -import { Platform, ToastController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { Observable, Subscription } from 'rxjs'; -import { - selectCallImagesState, - selectCallsState, - selectConfigData, - selectHomeState, - selectSettingsState, -} from 'src/app/store'; -import * as _ from 'lodash'; -import { CallsState } from '../../store/calls.store'; -import { - CallFileResultData, - CallFilesService, - GetConfigResultData, - ResgridConfig, - SecurityService, - UtilsService, -} from '@resgrid/ngx-resgridlib'; -import leaflet from 'leaflet'; -import { take } from 'rxjs/operators'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import * as CallsActions from '../../actions/calls.actions'; -import { SettingsState } from 'src/app/features/settings/store/settings.store'; -import { GalleryItem, ImageItem } from 'ng-gallery'; -import { HomeState } from 'src/app/features/home/store/home.store'; -import { CameraProvider } from 'src/app/providers/camera'; -import { ActionSheetController } from '@ionic/angular'; -import { FileProvider } from 'src/app/providers/file'; - -@Component({ - selector: 'app-page-calls-view-call', - templateUrl: './view-call.page.html', - styleUrls: ['./view-call.page.scss'], -}) -export class ModalViewCallPage implements AfterViewInit { - public callsState$: Observable; - public homeState$: Observable; - public settingsState$: Observable; - public configData$: Observable; - public selectOptions: any; - public tabType: string = 'data'; - public viewType: string = 'call'; - public isDevice: boolean = false; - private callId: string; - private mapEnabled: boolean = false; - private lat: string; - private lng: string; - public mapImgWidth: number; - public mapImgHeight: number; - public mapImgSrc: string; - public map: any; - public marker: any; - @ViewChild('viewCallMap') mapContainer; - - public isSavingNote: boolean = false; - public callNotesFormData: FormGroup; - public imageNote: string = ''; - - public images: GalleryItem[] = []; - public callImages$: Observable; - - private storeSub$: Subscription; - private callImagesSub$: Subscription; - private actionSheet: HTMLIonActionSheetElement; - - constructor( - private store: Store, - private config: ResgridConfig, - private utilsService: UtilsService, - public formBuilder: FormBuilder, - private settingsStore: Store, - private homeStore: Store, - private platform: Platform, - private callFilesService: CallFilesService, - private camera: CameraProvider, - private toastCtrl: ToastController, - private changeDetection: ChangeDetectorRef, - private actionSheetCtrl: ActionSheetController, - private securityService: SecurityService, - private fileProvider: FileProvider - ) { - this.callsState$ = this.store.select(selectCallsState); - this.settingsState$ = this.settingsStore.select(selectSettingsState); - this.homeState$ = this.homeStore.select(selectHomeState); - this.callImages$ = this.store.select(selectCallImagesState); - this.configData$ = this.homeStore.select(selectConfigData); - - this.callNotesFormData = this.formBuilder.group({ - message: ['', [Validators.required]], - }); - - this.isDevice = this.platform.is('mobile'); - - this.callImagesSub$ = this.callImages$.subscribe((callImages) => { - this.images = []; - if (callImages && callImages.length > 0) { - callImages.forEach((image) => { - this.images.push(new ImageItem({ src: image.Url })); - }); - - this.changeDetection.detectChanges(); - } - }); - - this.storeSub$ = this.callsState$.subscribe((state) => { - if (state && state.callToView && state.viewCallType === 'call') { - this.callId = state.callToView.CallId; - - if ( - state.callToView.Geolocation && - state.callToView.Geolocation.length > 0 - ) { - let coords = state.callToView.Geolocation.trim().split(','); - - if (coords.length === 2) { - this.lat = coords[0].trim(); - this.lng = coords[1].trim(); - this.mapEnabled = true; - } - - let that = this; - setTimeout(function () { - //window.dispatchEvent(new Event('resize')); - //that.map.invalidateSize.bind(that.map) - that.initMap(); - }, 500); - } - } - }); - } - - ngAfterViewInit(): void { - //this.images = []; - } - - dismissModal() { - this.images = []; - - this.store - .select(selectCallsState) - .pipe(take(1)) - .subscribe((state) => { - if (state && state.viewCallType === 'call') { - if (this.storeSub$) { - this.storeSub$.unsubscribe(); - this.storeSub$ = null; - } - - if (this.callImagesSub$) { - this.callImagesSub$.unsubscribe(); - this.callImagesSub$ = null; - } - this.store.dispatch(new CallsActions.CloseViewCallModal()); - } else { - this.store.dispatch(new CallsActions.SetViewCallModal()); - } - }); - } - - public getFullDateTime(dateToParse) { - return this.utilsService.formatDateForDisplay( - new Date(dateToParse), - 'yyyy-MM-dd HH:mm Z' - ); - } - - public formatTimestamp(timestamp) { - return this.utilsService.getDate(timestamp); - } - - public navCallNotes() { - this.store - .select(selectCallsState) - .pipe(take(1)) - .subscribe((state) => { - if (state && state.callToView) { - this.store.dispatch( - new CallsActions.ShowCallNotesModal(state.callToView.CallId) - ); - } - }); - } - - public navCallImages() { - this.store - .select(selectCallsState) - .pipe(take(1)) - .subscribe((state) => { - if (state && state.callToView) { - this.store.dispatch( - new CallsActions.ShowCallImagesModal(state.callToView.CallId) - ); - } - }); - } - - public navCallFiles() { - this.store - .select(selectCallsState) - .pipe(take(1)) - .subscribe((state) => { - if (state && state.callToView) { - this.store.dispatch( - new CallsActions.ShowCallFilesModal(state.callToView.CallId) - ); - } - }); - } - - public route() { - if (this.platform.is('ios')) { - window.open( - encodeURI('maps:daddr=' + this.lat + ' ' + this.lng), - '_system' - ); - } else if (this.platform.is('android')) { - window.open( - encodeURI('geo:0,0?q=' + this.lat + ',' + this.lng), - '_system' - ); - } else { - window.open( - encodeURI('maps:daddr=' + this.lat + ' ' + this.lng), - '_system' - ); - } - } - - private initMap() { - if (this.mapEnabled) { - this.configData$.pipe(take(1)).subscribe((configData) => { - if (this.map) { - this.map.off(); - this.map.remove(); - this.map = null; - } - - this.map = leaflet.map(this.mapContainer.nativeElement, { - dragging: false, - doubleClickZoom: false, - zoomControl: false, - }); - - leaflet - .tileLayer( - configData.MapUrl, - { - minZoom: 16, - maxZoom: 16, - crossOrigin: true, - attribution: configData.MapAttribution, - } - ) - .addTo(this.map); - - this.map.setView([this.lat, this.lng], 16); - - this.marker = leaflet.marker([this.lat, this.lng], { - icon: new leaflet.icon({ - iconUrl: 'assets/mapping/Call.png', - iconSize: [32, 37], - iconAnchor: [16, 37], - }), - draggable: false, //, - //title: markerInfo.Title, - //tooltip: markerInfo.Title - }); - - this.marker.addTo(this.map); - - let that = this; - setTimeout(function () { - //window.dispatchEvent(new Event('resize')); - //that.map.invalidateSize.bind(that.map) - that.map.invalidateSize(); - }, 500); - }); - } - } - - public getDispatchUrl(fileId) { - if (fileId && fileId.length > 0) { - return ( - this.config.apiUrl + - '/Calls/GetCallAudio?query=' + - encodeURIComponent(fileId) - ); - } else { - return ''; - } - } - - public getAvatarUrl(userId) { - return this.config.apiUrl + '/Avatars/Get?id=' + userId; - } - - public saveNote() { - this.settingsStore - .select(selectSettingsState) - .pipe(take(1)) - .subscribe((settingsState) => { - if (settingsState && settingsState.user) { - this.store - .select(selectCallsState) - .pipe(take(1)) - .subscribe((state) => { - if (state && state.callToView) { - const note = this.callNotesFormData.value['message']; - - this.store.dispatch( - new CallsActions.SaveCallNote( - state.callToView.CallId, - note, - settingsState.user.userId - ) - ); - - this.callNotesFormData.controls['message'].setValue(''); - this.callNotesFormData.controls['message'].patchValue(''); - } - }); - } - }); - } - - public async uploadPhoto() { - const photo = await this.camera.getImage(); - //debugger; - const base64Data = photo.base64String; //await this.camera.readAsBase64(photo); - const fileName = new Date().getTime() + '.jpeg'; - - this.homeState$.pipe(take(1)).subscribe((homeState) => { - this.settingsState$.pipe(take(1)).subscribe((settingsState) => { - this.callsState$.pipe(take(1)).subscribe((state) => { - if (state && state.callToView) { - let currentPosition = null; - //if (homeState && homeState.currentPosition) { - // currentPosition = homeState.currentPosition.Latitude + ',' + homeState.currentPosition.Longitude; - //} - - //debugger; - this.callFilesService - .saveCallImage( - state.callToView.CallId, - settingsState.user.userId, - this.imageNote, - fileName, - currentPosition, //homeState.currentPosition, - base64Data - ) - .subscribe( - async (result) => { - const toast = await this.toastCtrl.create({ - message: - 'Photo uploaded successfully. Please wait for the call to be updated.', - duration: 3000, - position: 'top', - cssClass: 'toast-success', - }); - toast.present(); - - this.store.dispatch( - new CallsActions.GetCallById(state.callToView.CallId) - ); - }, - async (err) => { - const toast = await this.toastCtrl.create({ - message: 'Unable to upload photo. Please try again later.', - duration: 3000, - position: 'top', - cssClass: 'toast-error', - }); - toast.present(); - } - ); - } - }); - }); - }); - } - - public async openFile(file: CallFileResultData) { - await this.fileProvider.openCallFile(file.FileName, file.Url); - } - - public uploadFile() {} - - public async showOptions() { - if (this.securityService.canUserCreateCalls()) { - this.actionSheet = await this.actionSheetCtrl.create({ - header: 'Call Options', - subHeader: '', - buttons: [ - { - text: 'Edit Call', - handler: () => { - this.store.dispatch( - new CallsActions.ShowEditCallModal(this.callId) - ); - }, - }, - { - text: 'Close Call', - role: 'destructive', - handler: () => { - this.store.dispatch( - new CallsActions.ShowCloseCallModal(this.callId) - ); - }, - }, - { - text: 'Cancel', - role: 'cancel', - data: { - action: 'cancel', - }, - }, - ], - }); - } - - await this.actionSheet.present(); - } -} diff --git a/src/app/features/calls/reducers/calls.reducer.ts b/src/app/features/calls/reducers/calls.reducer.ts deleted file mode 100644 index 4faa46c..0000000 --- a/src/app/features/calls/reducers/calls.reducer.ts +++ /dev/null @@ -1,331 +0,0 @@ -/* eslint-disable object-shorthand */ -import * as _ from 'lodash'; -import { initialState, CallsState } from '../store/calls.store'; -import { CallActionsUnion, CallsActionTypes } from '../actions/calls.actions'; -import { CallAndPriorityData } from '../models/callAndPriorityData'; -import { CallPriorityResultData } from '@resgrid/ngx-resgridlib'; -import { GeoLocation } from 'src/app/models/geoLocation'; - -// eslint-disable-next-line prefer-arrow/prefer-arrow-functions -export function reducer( - state: CallsState = initialState, - action: CallActionsUnion -): CallsState { - switch (action.type) { - case CallsActionTypes.GET_CALLS_DONE: - let activeCalls: CallAndPriorityData[] = []; - - action.calls.forEach((call) => { - let activePriority1: CallPriorityResultData = null; - const defaultPriority1 = _.find(action.priorities, ['Id', 0]); - const priorityForCall1 = _.find(action.priorities, [ - 'Id', - call.Priority, - ]); - - if (priorityForCall1) { - activePriority1 = priorityForCall1; - } else { - activePriority1 = defaultPriority1; - } - - const callData: CallAndPriorityData = { - Call: call, - CallPriority: activePriority1, - }; - - activeCalls.push(callData); - }); - - return { - ...state, - activeCalls: activeCalls, - }; - case CallsActionTypes.GET_CALL_BYID_SUCCESS: - let activePriority: CallPriorityResultData = null; - const defaultPriority = _.find(action.priorities, ['Id', 0]); - const priorityForCall = _.find(action.priorities, [ - 'Id', - action.call.Priority, - ]); - - if (priorityForCall) { - activePriority = priorityForCall; - } else { - activePriority = defaultPriority; - } - - return { - ...state, - callToView: action.call, - callViewData: action.data, - callToViewPriority: activePriority, - callFiles: [], - callImages: [], - callNotes: [], - viewCallType: 'call', - }; - case CallsActionTypes.OPEN_CALLNOTES: - return { - ...state, - callNotes: action.payload, - }; - case CallsActionTypes.SET_VIEW_CALL_MODAL: - return { - ...state, - viewCallType: 'call', - }; - case CallsActionTypes.OPEN_CALLIMAGES: - return { - ...state, - callImages: action.payload, - viewCallType: 'images', - }; - case CallsActionTypes.OPEN_CALLFILESMODAL: - return { - ...state, - callFiles: action.payload, - viewCallType: 'files', - }; - case CallsActionTypes.SET_NEW_CALL_LOCATION: - return { - ...state, - newCallLocation: new GeoLocation(action.latitude, action.longitude), - }; - case CallsActionTypes.SHOW_SELECT_DISPATCHS_SUCCESS: - if (action.dispatches && action.dispatches.length > 0) { - return { - ...state, - newCallWhoDispatch: action.dispatches, - }; - } else { - return { - ...state, - }; - } - case CallsActionTypes.UPDATE_SELECTED_DISPTACHES: - let recipients = _.cloneDeep(state.newCallWhoDispatch); - - if (recipients && recipients.length > 0) { - if (action.id !== '0') { - recipients.forEach((recipient) => { - if (recipient.Id == action.id) { - recipient.Selected = action.checked; - } - - if (recipient.Id === '0' && action.id !== '0') { - recipient.Selected = false; - } - }); - } else if (action.id === '0' && !action.checked) { - recipients.forEach((recipient) => { - recipient.Selected = false; - }); - } else if (action.id === '0' && action.checked) { - recipients.forEach((recipient) => { - if (recipient.Id == action.id) { - recipient.Selected = action.checked; - } else { - recipient.Selected = false; - } - }); - } - } - - return { - ...state, - newCallWhoDispatch: recipients, - }; - case CallsActionTypes.CLOSE_NEW_CALL_MODAL: - let whoToDispatchClear = _.cloneDeep(state.newCallWhoDispatch); - - if (whoToDispatchClear && whoToDispatchClear.length > 0) { - whoToDispatchClear.forEach((recipient) => { - recipient.Selected = false; - }); - } - - return { - ...state, - newCallWhoDispatch: whoToDispatchClear, - }; - case CallsActionTypes.DISPATCH_CALL_SUCCESS: - return { - ...state, - newCallLocation: null, - newCallWhoDispatch: null, - }; - case CallsActionTypes.SET_EDIT_CALL_DISPATCHES: - const editCallRecipients = _.cloneDeep(state.editCallWhoDispatch); - - if (action.dispatchEvents) { - action.dispatchEvents.forEach((dispatch) => { - if (dispatch.Type === 'User') { - editCallRecipients.forEach((recipient) => { - if (recipient.Id == `P:${dispatch.Id}`) { - recipient.Selected = true; - } - }); - } else if (dispatch.Type === 'Group') { - editCallRecipients.forEach((recipient) => { - if (recipient.Id == `G:${dispatch.Id}`) { - recipient.Selected = true; - } - }); - } else if (dispatch.Type === 'Role') { - editCallRecipients.forEach((recipient) => { - if (recipient.Id == `R:${dispatch.Id}`) { - recipient.Selected = true; - } - }); - } else if (dispatch.Type === 'Unit') { - editCallRecipients.forEach((recipient) => { - if (recipient.Id == `U:${dispatch.Id}`) { - recipient.Selected = true; - } - }); - } - }); - } - - return { - ...state, - editCallWhoDispatch: editCallRecipients, - }; - case CallsActionTypes.GET_EDIT_CALL_DISPATCHES_SUCCESS: - if (action.dispatches && action.dispatches.length > 0) { - return { - ...state, - editCallWhoDispatch: action.dispatches, - }; - } else { - return { - ...state, - }; - } - case CallsActionTypes.UPDATE_EDIT_CALL_SELECTED_DISPTACHES: - const editCallRecipientsUpdate = _.cloneDeep(state.editCallWhoDispatch); - - if (editCallRecipientsUpdate && editCallRecipientsUpdate.length > 0) { - if (action.id !== '0') { - editCallRecipientsUpdate.forEach((recipient) => { - if (recipient.Id == action.id) { - recipient.Selected = action.checked; - } - - if (recipient.Id === '0' && action.id !== '0') { - recipient.Selected = false; - } - }); - } else if (action.id === '0' && !action.checked) { - editCallRecipientsUpdate.forEach((recipient) => { - recipient.Selected = false; - }); - } else if (action.id === '0' && action.checked) { - editCallRecipientsUpdate.forEach((recipient) => { - if (recipient.Id == action.id) { - recipient.Selected = action.checked; - } else { - recipient.Selected = false; - } - }); - } - } - - return { - ...state, - editCallWhoDispatch: editCallRecipientsUpdate, - }; - case CallsActionTypes.CLOSE_CALL_SUCCESS: - return { - ...state, - viewCallType: 'call', - callToView: null, - callViewData: null, - callToViewPriority: null, - callNotes: null, - callImages: null, - callFiles: null, - }; - case CallsActionTypes.UPDATE_CALL_SUCCESS: - return { - ...state, - editCallLocation: null, - editCallWhoDispatch: null, - }; - case CallsActionTypes.CLOSE_EDIT_CALL_MODAL: - return { - ...state, - editCallLocation: null, - editCallWhoDispatch: null, - }; - case CallsActionTypes.CLOSE_VIEW_CALL_MODAL: - return { - ...state, - viewCallType: 'call', - callToView: null, - callViewData: null, - callToViewPriority: null, - callNotes: null, - callImages: null, - callFiles: null, - }; - case CallsActionTypes.CLEAR_CALLS: - return { - ...state, - activeCalls: null, - }; - case CallsActionTypes.GET_COORDINATESFORADDRESS_SUCCESS: - return { - ...state, - newCallLocation: action.payload, - }; - case CallsActionTypes.GET_COORDINATES_FORW3W_SUCCESS: - return { - ...state, - newCallLocation: action.payload, - }; - case CallsActionTypes.GET_COORDINATES_FOR_PLUS_SUCCESS: - return { - ...state, - newCallLocation: action.payload, - }; - case CallsActionTypes.EDIT_GET_COORDINATES_FOR_ADDRESS_SUCCESS: - return { - ...state, - editCallLocation: action.payload, - }; - case CallsActionTypes.EDIT_GET_COORDINATES_FOR_W3W_SUCCESS: - return { - ...state, - editCallLocation: action.payload, - }; - case CallsActionTypes.EDIT_GET_COORDINATES_FOR_PLUS_SUCCESS: - return { - ...state, - editCallLocation: action.payload, - }; - case CallsActionTypes.SET_EDIT_CALL_LOCATION: - return { - ...state, - editCallLocation: new GeoLocation(action.latitude, action.longitude), - }; - case CallsActionTypes.SHOW_SET_LOCATION_MODAL: - return { - ...state, - setLocationModalForNewCall: action.forNewCall, - setLocationModalLocation: new GeoLocation(action.latitude, action.longitude), - }; - default: - return state; - } -} - -export const getCallImages = (state: CallsState) => state.callImages; -export const getNewCallLocation = (state: CallsState) => state.newCallLocation; -export const getNewCallDispatches = (state: CallsState) => - state.newCallWhoDispatch; -export const getEditCallLocation = (state: CallsState) => - state.editCallLocation; -export const getEditCallDispatches = (state: CallsState) => - state.editCallWhoDispatch; diff --git a/src/app/features/calls/store/calls.store.ts b/src/app/features/calls/store/calls.store.ts deleted file mode 100644 index 0b0656f..0000000 --- a/src/app/features/calls/store/calls.store.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { CallExtraDataResultData, CallFileResultData, CallNoteResultData, CallPriorityResultData, CallResultData, RecipientsResultData } from '@resgrid/ngx-resgridlib'; -import { GeoLocation } from 'src/app/models/geoLocation'; -import { CallAndPriorityData } from '../models/callAndPriorityData'; - -export interface CallsState { - activeCalls: CallAndPriorityData[]; - - callToView: CallResultData; - callViewData: CallExtraDataResultData; - callToViewPriority: CallPriorityResultData; - - viewCallType: string; - callNotes: CallNoteResultData[]; - callImages: CallFileResultData[]; - callFiles: CallFileResultData[]; - - newCallLocation: GeoLocation; - newCallWhoDispatch: RecipientsResultData[]; - - editCallLocation: GeoLocation; - editCallWhoDispatch: RecipientsResultData[]; - - setLocationModalForNewCall: boolean; - setLocationModalLocation: GeoLocation; -} - -export const initialState: CallsState = { - activeCalls: null, - callToView: null, - callViewData: null, - callToViewPriority: null, - viewCallType: 'call', - callNotes: null, - callImages: null, - callFiles: null, - newCallLocation: null, - newCallWhoDispatch: null, - editCallLocation: null, - editCallWhoDispatch: null, - setLocationModalForNewCall: false, - setLocationModalLocation: null -}; \ No newline at end of file diff --git a/src/app/features/home/actions/home.actions.ts b/src/app/features/home/actions/home.actions.ts deleted file mode 100644 index 47a3716..0000000 --- a/src/app/features/home/actions/home.actions.ts +++ /dev/null @@ -1,221 +0,0 @@ -import { Action } from '@ngrx/store'; -import { - CallPriorityResultData, - CallResultData, - MapDataAndMarkersData, - UnitResultData, - UnitStatusResultData, - UnitTypeStatusResultData, - UnitRoleResultData, -} from '@resgrid/ngx-resgridlib'; -import { GeoLocation } from 'src/app/models/geoLocation'; -import { PushData } from 'src/app/models/pushData'; -import { AppPayload } from '../models/appPayload'; - -export enum HomeActionTypes { - LOADING_MAP = '[HOME] LOADING MAP', - LOADING_MAP_SUCCESS = '[HOME] LOADING_MAP_SUCCESS', - LOADING_MAP_FAIL = '[HOME] LOADING_MAP_FAIL', - GEOLOCATION_START_TRACKING = '[HOME] GEOLOCATION_START_TRACKING', - GEOLOCATION_STOP_TRACKING = '[HOME] GEOLOCATION_STOP_TRACKING', - GEOLOCATION_LOCATION_UPDATE = '[HOME] GEOLOCATION_LOCATION_UPDATE', - GEOLOCATION_LOCATION_UPDATE_SENT = '[HOME] GEOLOCATION_LOCATION_UPDATE_SENT', - GEOLOCATION_LOCATION_UPDATE_DONE = '[HOME] GEOLOCATION_LOCATION_UPDATE_DONE', - LOADING_APP_DATA = '[HOME] LOADING_APP_DATA', - LOADING_APP_DATA_SUCCESS = '[HOME] LOADING_APP_DATA_SUCCESS', - LOADING_APP_DATA_FAIL = '[HOME] LOADING_APP_DATA_FAIL', - LOADING_APP_DATA_DONE = '[HOME] LOADING_APP_DATA_DONE', - SET_ACTIVEUNIT = '[HOME] SET_ACTIVEUNIT', - SET_ACTIVEUNIT_DONE = '[HOME] SET_ACTIVEUNIT_DONE', - SET_ACTIVECALL = '[HOME] SET_ACTIVECALL', - SET_ACTIVECALL_DONE = '[HOME] SET_ACTIVECALL_DONE', - GET_CURRENT_STATUS = '[HOME] GET_CURRENT_STATUS', - GET_CURRENT_STATUS_DONE = '[HOME] GET_CURRENT_STATUS_DONE', - GET_CURRENT_STATUS_SET = '[HOME] GET_CURRENT_STATUS_SET', - CLOSE_MODAL = '[HOME] CLOSE_MODAL', - REFRESH_MAP_DATA = '[HOME] REFRESH_MAP_DATA', - START_SIGNALR = '[HOME] START_SIGNALR', - STOP_SIGNALR = '[HOME] STOP_SIGNALR', - PUSH_CALLRECEIVED = '[HOME] PUSH_CALLRECEIVED', - PUSH_CALLRECEIVED_SHOWMODAL = '[HOME] PUSH_CALLRECEIVED_SHOWMODAL', - BACKGROUND_GEOLOCATION_START = '[HOME] BACKGROUND_GEOLOCATION_START', - BACKGROUND_GEOLOCATION_STOP = '[HOME] BACKGROUND_GEOLOCATION_STOP', - GET_CURRENT_ROLES = '[HOME] GET_CURRENT_ROLES', - GET_CURRENT_ROLES_DONE = '[HOME] GET_CURRENT_ROLES_DONE', - GET_CURRENT_ROLES_SET = '[HOME] GET_CURRENT_ROLES_SET', -} - -export class LoadingMap implements Action { - readonly type = HomeActionTypes.LOADING_MAP; - constructor() {} -} - -export class LoadingMapSuccess implements Action { - readonly type = HomeActionTypes.LOADING_MAP_SUCCESS; - constructor(public payload: MapDataAndMarkersData) {} -} - -export class LoadingMapFail implements Action { - readonly type = HomeActionTypes.LOADING_MAP_FAIL; - constructor(public payload: string) {} -} - -export class LoadAppData implements Action { - readonly type = HomeActionTypes.LOADING_APP_DATA; - constructor() {} -} - -export class LoadAppDataSuccess implements Action { - readonly type = HomeActionTypes.LOADING_APP_DATA_SUCCESS; - constructor(public payload: AppPayload) {} -} - -export class DoneLoadAppData implements Action { - readonly type = HomeActionTypes.LOADING_APP_DATA_DONE; - constructor() {} -} - -export class LoadAppDataFail implements Action { - readonly type = HomeActionTypes.LOADING_APP_DATA_FAIL; - constructor(public payload: string) {} -} - -export class GeolocationStartTracking implements Action { - readonly type = HomeActionTypes.GEOLOCATION_START_TRACKING; - constructor() {} -} - -export class GeolocationStopTracking implements Action { - readonly type = HomeActionTypes.GEOLOCATION_STOP_TRACKING; - constructor() {} -} - -export class GeolocationLocationUpdate implements Action { - readonly type = HomeActionTypes.GEOLOCATION_LOCATION_UPDATE; - constructor(public payload: GeoLocation) {} -} - -export class GeolocationLocationUpdateDone implements Action { - readonly type = HomeActionTypes.GEOLOCATION_LOCATION_UPDATE_DONE; - constructor() {} -} - -export class GeolocationLocationUpdateSent implements Action { - readonly type = HomeActionTypes.GEOLOCATION_LOCATION_UPDATE_SENT; - constructor() {} -} - -export class SetActiveUnit implements Action { - readonly type = HomeActionTypes.SET_ACTIVEUNIT; - constructor(public unit: UnitResultData, public statuses: UnitTypeStatusResultData) {} -} - -export class SetActiveUnitDone implements Action { - readonly type = HomeActionTypes.SET_ACTIVEUNIT_DONE; - constructor() {} -} - -export class SetActiveCall implements Action { - readonly type = HomeActionTypes.SET_ACTIVECALL; - constructor(public call: CallResultData, public priority: CallPriorityResultData) {} -} - -export class SetActiveCallDone implements Action { - readonly type = HomeActionTypes.SET_ACTIVECALL_DONE; - constructor() {} -} - -export class GetCurrentStatus implements Action { - readonly type = HomeActionTypes.GET_CURRENT_STATUS; - constructor() {} -} - -export class GetCurrentStatusSet implements Action { - readonly type = HomeActionTypes.GET_CURRENT_STATUS_SET; - constructor(public status: UnitStatusResultData) {} -} - -export class GetCurrentStatusDone implements Action { - readonly type = HomeActionTypes.GET_CURRENT_STATUS_DONE; - constructor() {} -} - -export class CloseModal implements Action { - readonly type = HomeActionTypes.CLOSE_MODAL; - constructor() {} -} - -export class RefreshMapData implements Action { - readonly type = HomeActionTypes.REFRESH_MAP_DATA; - constructor() {} -} - -export class StartSignalR implements Action { - readonly type = HomeActionTypes.START_SIGNALR; - constructor() {} -} - -export class StopSignalR implements Action { - readonly type = HomeActionTypes.STOP_SIGNALR; - constructor() {} -} - -export class PushCallReceived implements Action { - readonly type = HomeActionTypes.PUSH_CALLRECEIVED; - constructor(public pushData: PushData) {} -} - -export class BackgroundGeolocationStart implements Action { - readonly type = HomeActionTypes.BACKGROUND_GEOLOCATION_START; - constructor() {} -} - -export class BackgroundGeolocationStop implements Action { - readonly type = HomeActionTypes.BACKGROUND_GEOLOCATION_STOP; - constructor() {} -} - -export class GetCurrentRoles implements Action { - readonly type = HomeActionTypes.GET_CURRENT_ROLES; - constructor() {} -} - -export class GetCurrentRolesSet implements Action { - readonly type = HomeActionTypes.GET_CURRENT_ROLES_SET; - constructor(public roles: UnitRoleResultData[]) {} -} - -export class GetCurrentRolesDone implements Action { - readonly type = HomeActionTypes.GET_CURRENT_ROLES_DONE; - constructor() {} -} - -export type HomeActionsUnion = - | LoadingMap - | LoadingMapSuccess - | LoadingMapFail - | GeolocationStartTracking - | GeolocationStopTracking - | GeolocationLocationUpdate - | LoadAppDataSuccess - | LoadAppDataFail - | LoadAppData - | SetActiveUnit - | SetActiveUnitDone - | SetActiveCall - | SetActiveCallDone - | GetCurrentStatus - | GetCurrentStatusDone - | GetCurrentStatusSet - | CloseModal - | GeolocationLocationUpdateDone - | GeolocationLocationUpdateSent - | RefreshMapData - | StartSignalR - | StopSignalR - | PushCallReceived - | BackgroundGeolocationStart - | BackgroundGeolocationStop - | GetCurrentRoles - | GetCurrentRolesSet - | GetCurrentRolesDone; diff --git a/src/app/features/home/components/roles-card/roles-card.component.html b/src/app/features/home/components/roles-card/roles-card.component.html deleted file mode 100644 index e81911e..0000000 --- a/src/app/features/home/components/roles-card/roles-card.component.html +++ /dev/null @@ -1,5 +0,0 @@ - - -

{{ status }}

-
-
diff --git a/src/app/features/home/components/roles-card/roles-card.component.scss b/src/app/features/home/components/roles-card/roles-card.component.scss deleted file mode 100644 index 172a8a4..0000000 --- a/src/app/features/home/components/roles-card/roles-card.component.scss +++ /dev/null @@ -1,21 +0,0 @@ -ion-card { - box-shadow: none !important; - border-radius: 4px; - min-height: 20px; -} - -ion-card-content { - display: flex; - flex-direction: column; - justify-content: space-between; - min-height: 20px; - height: 100%; - - .text { - font-size: 12px; - font-weight: 600; - line-height: 12px; - white-space: normal; - color: #ffffff; - } -} diff --git a/src/app/features/home/components/roles-card/roles-card.component.ts b/src/app/features/home/components/roles-card/roles-card.component.ts deleted file mode 100644 index 3575a21..0000000 --- a/src/app/features/home/components/roles-card/roles-card.component.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { UnitResultData, UnitStatusResultData } from '@resgrid/ngx-resgridlib'; -import { Observable, Subscription, take } from 'rxjs'; -import { selectCurrentUnitStatus, selectHomeState, selectRolesState } from 'src/app/store'; -import { HomeState } from '../../store/home.store'; -import * as RoleActions from '../../../../features/roles/store/roles.actions'; -import { RolesState } from 'src/app/features/roles/store/roles.store'; - -@Component({ - selector: 'app-home-roles-card', - templateUrl: './roles-card.component.html', - styleUrls: ['./roles-card.component.scss'], -}) -export class RolesCardComponent implements OnInit { - public isVisible: boolean = false; - public rolesState$: Observable; - public homeState$: Observable; - public $rolesStateSub: Subscription; - - @Input() color: string = 'gray'; - @Input() status: string = 'Unknown'; - - constructor(private rolesStore: Store, private homeStore: Store) { - this.rolesState$ = this.rolesStore.select(selectRolesState); - this.homeState$ = this.homeStore.select(selectHomeState); - } - - ngOnInit() { - if (!this.$rolesStateSub || this.$rolesStateSub.closed) { - this.$rolesStateSub = this.rolesState$.subscribe((state) => { - let activeCount = 0; - if (state && state.roles) { - if (state.roles.length > 0) { - if (state.unitRoleAssignments) { - state.unitRoleAssignments.forEach((ura) => { - if ( - ura.FullName && - ura.FullName !== '' && - ura.UnitId === state.roles[0].UnitId - ) { - activeCount++; - } - }); - } - this.status = `${activeCount} of ${state.roles.length} Roles Active`; - this.isVisible = true; - } else { - this.status = 'No Roles'; - this.isVisible = false; - } - } else { - this.status = 'No Roles'; - this.isVisible = false; - } - }); - } - } - - public showModal() { - this.homeState$.pipe(take(1)).subscribe((state) => { - if (state && state.activeUnit && state.activeUnit.UnitId) { - this.homeStore.dispatch(new RoleActions.GetSetRoleData(state.activeUnit.UnitId)); - } - }); - } -} diff --git a/src/app/features/home/components/status-card/status-card.component.html b/src/app/features/home/components/status-card/status-card.component.html deleted file mode 100644 index 60814f0..0000000 --- a/src/app/features/home/components/status-card/status-card.component.html +++ /dev/null @@ -1,5 +0,0 @@ - - -

{{ status }}

-
-
diff --git a/src/app/features/home/components/status-card/status-card.component.scss b/src/app/features/home/components/status-card/status-card.component.scss deleted file mode 100644 index 172a8a4..0000000 --- a/src/app/features/home/components/status-card/status-card.component.scss +++ /dev/null @@ -1,21 +0,0 @@ -ion-card { - box-shadow: none !important; - border-radius: 4px; - min-height: 20px; -} - -ion-card-content { - display: flex; - flex-direction: column; - justify-content: space-between; - min-height: 20px; - height: 100%; - - .text { - font-size: 12px; - font-weight: 600; - line-height: 12px; - white-space: normal; - color: #ffffff; - } -} diff --git a/src/app/features/home/components/status-card/status-card.component.ts b/src/app/features/home/components/status-card/status-card.component.ts deleted file mode 100644 index 1d309c7..0000000 --- a/src/app/features/home/components/status-card/status-card.component.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { UnitResultData, UnitStatusResultData } from '@resgrid/ngx-resgridlib'; -import { Observable } from 'rxjs'; -import { selectCurrentUnitStatus, selectHomeState } from 'src/app/store'; -import { HomeState } from '../../store/home.store'; - -@Component({ - selector: 'app-home-status-card', - templateUrl: './status-card.component.html', - styleUrls: ['./status-card.component.scss'], -}) -export class StatusCardComponent implements OnInit { - public homeState$: Observable; - - @Input() color: string = 'gray'; - @Input() status: string = 'Unknown'; - - constructor(private homeStore: Store) { - this.homeState$ = this.homeStore.select(selectHomeState); - - } - - -ngOnInit() { - this.homeState$.subscribe(state => { - if (state && state.currentStatus) { - if (state.currentStatus.StateStyle === 'label-danger') { - this.color = '#ED5565'; - } else if (state.currentStatus.StateStyle === 'label-info') { - this.color = '#23c6c8'; - } else if (state.currentStatus.StateStyle === 'label-warning') { - this.color = '#f8ac59'; - } else if (state.currentStatus.StateStyle === 'label-success') { - this.color = '#449d44'; - } else if (state.currentStatus.StateStyle === 'label-onscene') { - this.color = '#449d44'; - } else if (state.currentStatus.StateStyle === 'label-primary') { - this.color = '#228BCB'; - } else if (state.currentStatus.StateStyle === 'label-returning') { - this.color = ''; - } else if (state.currentStatus.StateStyle === 'label-default') { - this.color = '#262626'; - } else if (state.currentStatus.StateStyle === 'label-enroute') { - this.color = '#449d44'; - } else { - this.color = state.currentStatus.StateStyle; - } - - this.status = state.currentStatus.State; - } else { - this.color = '#262626'; - this.status = 'Unknown'; - } - }); -} - -} diff --git a/src/app/features/home/components/units-card/unit-card.component.html b/src/app/features/home/components/units-card/unit-card.component.html deleted file mode 100644 index 3ba5a9c..0000000 --- a/src/app/features/home/components/units-card/unit-card.component.html +++ /dev/null @@ -1,7 +0,0 @@ - - -

{{ unit?.Type }}

-

{{ unit?.Name }}

-

{{ unit?.GroupName }}

-
-
diff --git a/src/app/features/home/components/units-card/unit-card.component.scss b/src/app/features/home/components/units-card/unit-card.component.scss deleted file mode 100644 index 177a605..0000000 --- a/src/app/features/home/components/units-card/unit-card.component.scss +++ /dev/null @@ -1,36 +0,0 @@ -ion-card { - box-shadow: none !important; - border-radius: 10px; - min-height: 50px; -} - -ion-card-content { - display: flex; - flex-direction: column; - justify-content: space-between; - min-height: 50px; - height: 100%; - - .category { - font-size: 12px; - line-height: 16px; - text-transform: uppercase; - margin-bottom: 6px; - opacity: 0.8; - } - - .text { - font-size: 15px; - font-weight: 600; - line-height: 20px; - white-space: normal; - margin-bottom: 6px; - } - - .caption { - font-size: 12px; - line-height: 20px; - margin-bottom: 0; - opacity: 0.6; - } -} diff --git a/src/app/features/home/components/units-card/unit-card.component.ts b/src/app/features/home/components/units-card/unit-card.component.ts deleted file mode 100644 index d5747dc..0000000 --- a/src/app/features/home/components/units-card/unit-card.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { UnitResultData } from '@resgrid/ngx-resgridlib'; - -@Component({ - selector: 'app-home-unit-card', - templateUrl: './unit-card.component.html', - styleUrls: ['./unit-card.component.scss'], -}) -export class UnitCardComponent implements OnInit { - - @Input() unit: UnitResultData; - @Input() color: string; - - constructor() { } - - ngOnInit() {} - -} diff --git a/src/app/features/home/effects/home.effects.ts b/src/app/features/home/effects/home.effects.ts deleted file mode 100644 index b274cb4..0000000 --- a/src/app/features/home/effects/home.effects.ts +++ /dev/null @@ -1,454 +0,0 @@ -import * as homeAction from '../actions/home.actions'; -import { Action, Store } from '@ngrx/store'; -import { - Actions, - concatLatestFrom, - createEffect, - ofType, -} from '@ngrx/effects'; -import { - catchError, - exhaustMap, - filter, - map, - mergeMap, - switchMap, - tap, -} from 'rxjs/operators'; -import { Injectable } from '@angular/core'; -import { from, Observable, of } from 'rxjs'; -import { MenuController, ModalController } from '@ionic/angular'; -import { AlertProvider } from 'src/app/providers/alert'; -import { LoadingProvider } from 'src/app/providers/loading'; -import { StorageProvider } from 'src/app/providers/storage'; -import { Router } from '@angular/router'; -import { - MappingService, - UnitStatusService, - UnitLocationService, - SaveUnitLocationInput, - UnitRolesService, -} from '@resgrid/ngx-resgridlib'; -import { HomeState } from '../store/home.store'; -import { HomeProvider } from '../providers/home'; -import { VoiceState } from '../../voice/store/voice.store'; -import * as VoiceActions from '../../voice/actions/voice.actions'; -import { selectHomeState } from 'src/app/store'; -import { PushProvider } from 'src/app/providers/push'; -import { ModalCallPush } from '../modals/callPush/modal-callPush.page'; -import { GeolocationProvider } from 'src/app/providers/geolocation'; -import { RolesState } from '../../roles/store/roles.store'; -import * as RolesActions from '../../roles/store/roles.actions'; - -@Injectable() -export class HomeEffects { - private _modalRef: HTMLIonModalElement; - - loadingMap$ = createEffect(() => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.LOADING_MAP), - mergeMap((action) => - this.mapProvider.getMapDataAndMarkers().pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: homeAction.HomeActionTypes.LOADING_MAP_SUCCESS, - payload: data.Data, - })), - // If request fails, dispatch failed action - catchError(() => - of({ type: homeAction.HomeActionTypes.LOADING_MAP_FAIL }) - ) - ) - ) - ) - ); - - loadingMapSuccess$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.LOADING_MAP_SUCCESS), - switchMap((action) => this.loadingProvider.hide()) - ), - { dispatch: false } - ); - - loadingMapFail$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.LOADING_MAP_FAIL), - switchMap((action) => this.loadingProvider.hide()), - switchMap((action) => this.alertProvider.showErrorAlert( - 'Unable to load map data', - '', - 'There was an issue trying to fetch the map data, please try again.' - )) - ), - { dispatch: false } - ); - - loadAppData$ = createEffect(() => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.LOADING_APP_DATA), - mergeMap((action) => - this.homeProvider.getAppData().pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: homeAction.HomeActionTypes.LOADING_APP_DATA_SUCCESS, - payload: data, - })), - // If request fails, dispatch failed action - catchError(() => - of({ type: homeAction.HomeActionTypes.LOADING_APP_DATA_FAIL }) - ) - ) - ) - ) - ); - - loadAppDataSuccess$ = createEffect(() => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.LOADING_APP_DATA_SUCCESS), - switchMap((action) => this.loadingProvider.hide()), - tap((action) => { - this.voiceStore.dispatch(new VoiceActions.GetVoipInfo()); - }), - tap((action) => { - this.voiceStore.dispatch(new VoiceActions.GetAudioStreams()); - }), - tap((action) => { - //this.store.dispatch(new homeAction.GetCurrentRoles()); - this.rolesStore.dispatch(new RolesActions.UpdateSetRoleData()) - }), - map((action) => ({ - type: homeAction.HomeActionTypes.LOADING_APP_DATA_DONE, - })) - ) - ); - - loadAppDataFail$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.LOADING_APP_DATA_FAIL), - switchMap((action) => this.loadingProvider.hide()), - switchMap((action) => this.alertProvider.showErrorAlert( - 'Unable to load data', - '', - 'There was an issue trying to fetch the app data, please try again.' - )) - ), - { dispatch: false } - ); - - geolocationStartTracking$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.GEOLOCATION_START_TRACKING), - switchMap((action) => this.geoProvider.startTracking()) - ), - { dispatch: false } - ); - - geolocationStopTracking$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.GEOLOCATION_STOP_TRACKING), - switchMap((action) => this.geoProvider.stopTracking()) - ), - { dispatch: false } - ); - - backgroundGeolocationStartTracking$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.BACKGROUND_GEOLOCATION_START), - switchMap((action) => this.geoProvider.initBackgroundGeolocation()) - ), - { dispatch: false } - ); - - backgroundGeolocationStopTracking$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.BACKGROUND_GEOLOCATION_STOP), - switchMap((action) => this.geoProvider.stopBackgroundGeolocation()) - ), - { dispatch: false } - ); - - setActiveUnit$ = createEffect(() => - this.actions$.pipe( - ofType( - homeAction.HomeActionTypes.SET_ACTIVEUNIT - ), - map((data) => { - return { - type: homeAction.HomeActionTypes.SET_ACTIVEUNIT_DONE, - }; - }) - ) - ); - - setActiveUnitDone$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.SET_ACTIVEUNIT_DONE), - switchMap((action) => this.pushProvider.initPush()) - ), - { dispatch: false } - ); - - closeModal$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.CLOSE_MODAL), - switchMap((action) => this.closeModal()) - ), - { dispatch: false } - ); - - setActiveCall$ = createEffect(() => - this.actions$.pipe( - ofType( - homeAction.HomeActionTypes.SET_ACTIVECALL - ), - map((data) => { - return { - type: homeAction.HomeActionTypes.SET_ACTIVECALL_DONE, - }; - }) - ) - ); - - setActiveCallDone$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.SET_ACTIVECALL_DONE), - tap((action) => {}) - ), - { dispatch: false } - ); - - getCurrentStatusSet$ = createEffect(() => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.GET_CURRENT_STATUS_SET), - map((data) => { - return { - type: homeAction.HomeActionTypes.GET_CURRENT_STATUS_DONE, - }; - }) - ) - ); - - getCurrentStatusDone$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.GET_CURRENT_STATUS_DONE), - tap((action) => {}) - ), - { dispatch: false } - ); - - getCurrentStatus$ = createEffect(() => - this.actions$.pipe( - ofType( - homeAction.HomeActionTypes.GET_CURRENT_STATUS - ), - concatLatestFrom(() => [this.store.select(selectHomeState)]), - switchMap(([action, homeState], index) => { - return this.unitStatusService - .getUnitStatus(homeState.activeUnit?.UnitId) - .pipe( - map((data) => { - return { - type: homeAction.HomeActionTypes.GET_CURRENT_STATUS_SET, - status: data.Data, - }; - }), - catchError(() => - of({ - type: homeAction.HomeActionTypes.GET_CURRENT_STATUS_DONE, - }) - ) - ); - }) - ) - ); - - getCurrentRoles$ = createEffect(() => - this.actions$.pipe( - ofType( - homeAction.HomeActionTypes.GET_CURRENT_ROLES - ), - concatLatestFrom(() => [this.store.select(selectHomeState)]), - switchMap(([action, homeState], index) => { - return this.unitRolesService - .getRolesForUnit(homeState.activeUnit?.UnitId) - .pipe( - map((data) => { - return { - type: homeAction.HomeActionTypes.GET_CURRENT_ROLES_SET, - roles: data.Data, - }; - }), - catchError(() => - of({ - type: homeAction.HomeActionTypes.GET_CURRENT_ROLES_DONE, - }) - ) - ); - }) - ) - ); - - geoPositionUpdate$ = createEffect(() => - this.actions$.pipe( - ofType( - homeAction.HomeActionTypes.GEOLOCATION_LOCATION_UPDATE - ), - concatLatestFrom(() => [this.store.select(selectHomeState)]), - switchMap(([action, homeState], index) => { - if (homeState && homeState.activeUnit) { - let date = new Date(); - let doSend = true; - - let location: SaveUnitLocationInput = { - UnitId: homeState.activeUnit?.UnitId, - Timestamp: date.toUTCString().replace('UTC', 'GMT'), - Latitude: action.payload.Latitude?.toString(), - Longitude: action.payload.Longitude?.toString(), - Accuracy: action.payload.Accuracy?.toString(), - Altitude: action.payload.Altitude?.toString(), - AltitudeAccuracy: action.payload.AltitudeAccuracy?.toString(), - Speed: action.payload.Speed?.toString(), - Heading: action.payload.Heading?.toString(), - }; - - if (!homeState.currentPositionTimestamp) { - console.log('does not have current position timestamp'); - doSend = true; - } else { - let diff = - (date.getTime() - homeState.currentPositionTimestamp.getTime()) / - 30000; - console.log('geolocation timestamp diff: ' + diff); - - if (diff >= 2) { - doSend = true; - } else { - doSend = false; - } - } - - if (doSend) { - return this.unitLocationService.saveUnitLocation(location).pipe( - map((data) => { - return { - type: homeAction.HomeActionTypes - .GEOLOCATION_LOCATION_UPDATE_SENT, - }; - }) - ); - } else { - return of({ - type: homeAction.HomeActionTypes.GEOLOCATION_LOCATION_UPDATE_DONE, - }); - } - } else { - return of({ - type: homeAction.HomeActionTypes.GEOLOCATION_LOCATION_UPDATE_DONE, - }); - } - }) - ) - ); - - startSignalR$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.START_SIGNALR), - tap((action) => { - this.homeProvider.startSignalR(); - }) - ), - { dispatch: false } - ); - - stopSignalR$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.STOP_SIGNALR), - tap((action) => { - this.homeProvider.stopSignalR(); - }) - ), - { dispatch: false } - ); - - pushNewCallReceived$ = createEffect(() => - this.actions$.pipe( - ofType( - homeAction.HomeActionTypes.PUSH_CALLRECEIVED - ), - map((data) => { - return { - type: homeAction.HomeActionTypes.PUSH_CALLRECEIVED_SHOWMODAL, - }; - }) - ) - ); - - showPushNewCallReceivedModal$ = createEffect( - () => - this.actions$.pipe( - ofType(homeAction.HomeActionTypes.PUSH_CALLRECEIVED_SHOWMODAL), - exhaustMap((data) => this.runModal(ModalCallPush, null, null)) - ), - { dispatch: false } - ); - - constructor( - private actions$: Actions, - private store: Store, - private modalController: ModalController, - private alertProvider: AlertProvider, - private loadingProvider: LoadingProvider, - private storageProvider: StorageProvider, - private mapProvider: MappingService, - private router: Router, - private geoProvider: GeolocationProvider, - private homeProvider: HomeProvider, - private voiceStore: Store, - private unitStatusService: UnitStatusService, - private unitLocationService: UnitLocationService, - private pushProvider: PushProvider, - private menuCtrl: MenuController, - private unitRolesService: UnitRolesService, - private rolesStore: Store - ) {} - - runModal = async (component, cssClass, properties) => { - await this.closeModal(); - await this.menuCtrl.close(); - - if (!cssClass) { - cssClass = 'modal-container'; - } - - this._modalRef = await this.modalController.create({ - component: component, - cssClass: cssClass, - componentProps: { - info: properties, - }, - }); - - return from(this._modalRef.present()); - }; - - closeModal = async () => { - //if (this._modalRef) { - await this.modalController.dismiss(); - this._modalRef = null; - //} - }; -} diff --git a/src/app/features/home/home-routing.module.ts b/src/app/features/home/home-routing.module.ts deleted file mode 100644 index dbbba80..0000000 --- a/src/app/features/home/home-routing.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - { - path: '', - redirectTo: 'tabs', - pathMatch: 'full' - }, - { - path: 'tabs', - loadChildren: () => import('./pages/tabs/tabs.module').then(m => m.TabsPageModule) - }, - { - path: 'splash', - loadChildren: () => import('./pages/splash/splash.module').then(m => m.SplashPageModule) - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class HomeRoutingModule {} diff --git a/src/app/features/home/home.module.ts b/src/app/features/home/home.module.ts deleted file mode 100644 index 67bbba1..0000000 --- a/src/app/features/home/home.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { reducer } from './reducers/home.reducer'; -import { EffectsModule } from '@ngrx/effects'; -import { HomeEffects } from './effects/home.effects'; -import { StoreModule } from '@ngrx/store'; -import { HomeRoutingModule } from './home-routing.module'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { ModalCallPush } from './modals/callPush/modal-callPush.page'; -import { TranslateModule } from '@ngx-translate/core'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - ReactiveFormsModule, - StoreModule.forFeature('homeModule', reducer), - EffectsModule.forFeature([HomeEffects]), - HomeRoutingModule, - NgxResgridLibModule, - TranslateModule - ], - declarations: [ModalCallPush] -}) -export class HomeModule {} diff --git a/src/app/features/home/modals/callPush/modal-callPush.page.html b/src/app/features/home/modals/callPush/modal-callPush.page.html deleted file mode 100644 index b46cc79..0000000 --- a/src/app/features/home/modals/callPush/modal-callPush.page.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - -
- - - -

{{'newCallPushModal.newCallPrefix' | translate}}: {{(pushData$ | async).title}}

-
-
- - - {{(pushData$ | async).body}} - - - - - - {{'newCallPushModal.respondButton' | translate}} - - - - - {{'close' | translate}} - - - -
-
-
diff --git a/src/app/features/home/modals/callPush/modal-callPush.page.scss b/src/app/features/home/modals/callPush/modal-callPush.page.scss deleted file mode 100644 index 0c2b8e7..0000000 --- a/src/app/features/home/modals/callPush/modal-callPush.page.scss +++ /dev/null @@ -1,73 +0,0 @@ -.container { - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; -} - -h4 { - font-weight: 600; - font-size: 17px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); -} - -p { - font-weight: normal; - font-size: 13px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 3; /* number of lines to show */ - -webkit-box-orient: vertical; -} - -ion-fab-button { - --box-shadow: none !important; - --color: var(--ion-color-primary); -} - -.action-button { - --border-radius: 6px; - --box-shadow: none !important; - min-height: 48px; - - span { - font-weight: 400; - font-size: 14px; - text-transform: initial; - } - - .button-text { - display: flex; - justify-content: space-between; - align-items: center; - width: 100%; - padding: 0 8px; - color: var(--ion-color-primary); - - ion-icon { - font-size: 20px; - color: var(--ion-color-primary); - } - } -} - -@media (max-device-height: 640px), handheld and (orientation: portrait) { - ion-img { - width: 64px; - } - - h4 { - font-size: 15px; - } - - p { - line-height: 21px; - font-size: 12px; - } -} diff --git a/src/app/features/home/modals/callPush/modal-callPush.page.ts b/src/app/features/home/modals/callPush/modal-callPush.page.ts deleted file mode 100644 index ffc10e8..0000000 --- a/src/app/features/home/modals/callPush/modal-callPush.page.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import * as SettingsActions from '../../../settings/actions/settings.actions'; -import { HomeState } from 'src/app/features/home/store/home.store'; -import { Observable } from 'rxjs'; -import { selectHomeState, selectPushData } from 'src/app/store'; -import { CallResultData, UnitResultData } from '@resgrid/ngx-resgridlib'; -import { take } from 'rxjs/operators'; -import * as _ from 'lodash'; -import { PushData } from 'src/app/models/pushData'; - -@Component({ - selector: 'app-modal-callPush', - templateUrl: './modal-callPush.page.html', - styleUrls: ['./modal-callPush.page.scss'], -}) -export class ModalCallPush implements OnInit { - public homeState$: Observable; - public pushData$: Observable; - - constructor(private modal: ModalController, private store: Store) { - this.homeState$ = this.store.select(selectHomeState); - this.pushData$ = this.store.select(selectPushData); - } - - ngOnInit() { - - } - - public dismissModal() { - this.modal.dismiss(); - } - - public set() { - this.store - .select(selectHomeState) - .pipe(take(1)) - .subscribe((state) => { - if (state && state.pushData) { - - const call = _.find(state.calls, ['CallId', state.pushData.entityId]); - - const defaultPriority = _.find(state.callPriorties, ['Id', 0]); - const priorityForCall = _.find(state.callPriorties, [ - 'Id', - call.Priority, - ]); - - if (priorityForCall) { - this.store.dispatch( - new SettingsActions.SetActiveCall( - call, - priorityForCall - ) - ); - } else { - this.store.dispatch( - new SettingsActions.SetActiveCall( - call, - defaultPriority - ) - ); - } - } - - this.modal.dismiss(); - }); - } -} diff --git a/src/app/features/home/models/appPayload.ts b/src/app/features/home/models/appPayload.ts deleted file mode 100644 index 2352f50..0000000 --- a/src/app/features/home/models/appPayload.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { CallPriorityResultData, CallResultData, CallTypeResultData, DepartmentRightsResult, FormResultData, GetConfigResultData, GetPersonnelForCallGridResultData, GetRolesForCallGridResultData, GroupResultData, UnitResultData, UnitStatusResultData, UnitTypeStatusResultData } from '@resgrid/ngx-resgridlib'; -import { ActiveUnitRoleResultData } from '@resgrid/ngx-resgridlib/lib/models/v4/unitRoles/activeUnitRoleResultData'; - -export class AppPayload { - public Units: UnitResultData[]; - public Calls: CallResultData[]; - public CallPriorties: CallPriorityResultData[]; - public CallTypes: CallTypeResultData[]; - public UnitStatuses: UnitTypeStatusResultData[]; - public UnitRoleAssignments: ActiveUnitRoleResultData[]; - public Groups: GroupResultData[]; - public ActiveUnitId: string = ''; - public ActiveCallId: string = ''; - public IsMobileApp: boolean = false; - public Config: GetConfigResultData; - public Rights: DepartmentRightsResult; -} \ No newline at end of file diff --git a/src/app/features/home/pages/calls/calls.module.ts b/src/app/features/home/pages/calls/calls.module.ts deleted file mode 100644 index ea214d0..0000000 --- a/src/app/features/home/pages/calls/calls.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { RouterModule } from '@angular/router'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { CallsPage } from './calls.page'; -import { HomeModule } from '../../home.module'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { ComponentsModule } from 'src/app/components/components.module'; -import { TranslateModule } from '@ngx-translate/core'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - RouterModule.forChild([ - { - path: '', - component: CallsPage - } - ]), - NgxResgridLibModule, - ComponentsModule, - TranslateModule - ], - declarations: [CallsPage] -}) -export class CallsPageModule {} diff --git a/src/app/features/home/pages/calls/calls.page.html b/src/app/features/home/pages/calls/calls.page.html deleted file mode 100644 index bb90e51..0000000 --- a/src/app/features/home/pages/calls/calls.page.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - -
- -
- - - - - - - - - - - - - -
diff --git a/src/app/features/home/pages/calls/calls.page.scss b/src/app/features/home/pages/calls/calls.page.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/features/home/pages/calls/calls.page.ts b/src/app/features/home/pages/calls/calls.page.ts deleted file mode 100644 index c3f2ffb..0000000 --- a/src/app/features/home/pages/calls/calls.page.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { ChangeDetectorRef, Component } from '@angular/core'; -import { MenuController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { CallPriorityResultData, CallResultData, SecurityService } from '@resgrid/ngx-resgridlib'; -import { Observable } from 'rxjs'; -import { CallsState } from 'src/app/features/calls/store/calls.store'; -import { selectCallsState } from 'src/app/store'; -import * as CallsActions from "../../../../features/calls/actions/calls.actions"; -import { CallAndPriorityData } from 'src/app/features/calls/models/callAndPriorityData'; - -@Component({ - selector: 'app-home-calls', - templateUrl: 'calls.page.html', - styleUrls: ['calls.page.scss'] -}) -export class CallsPage { - private searchTerm: string = ''; - public callsState$: Observable; - - constructor(public menuCtrl: MenuController, - private callsStore: Store, - private cdr: ChangeDetectorRef, - private securityService: SecurityService) { - this.callsState$ = this.callsStore.select(selectCallsState); - } - - ionViewWillEnter() { - this.menuCtrl.enable(false); - this.load(); - } - - public refresh(event) { - this.load(); - - setTimeout(() => { - event.target.complete(); - }, 1000); - } - - public hideSearch() { - this.searchTerm = ''; - } - - public search(event) { - this.searchTerm = event.target.value; - this.cdr.detectChanges(); - } - - public filterCalls(calls: CallAndPriorityData[]) { - if (this.searchTerm) { - if (calls) { - let filteredCalls = new Array(); - - calls.forEach(call => { - if (call.Call.Name && call.Call.Name.toLowerCase().includes(this.searchTerm.trim().toLowerCase())) { - filteredCalls.push(call); - } else if (call.Call.Nature && call.Call.Nature.toLowerCase().includes(this.searchTerm.trim().toLowerCase())) { - filteredCalls.push(call); - } else if (call.Call.Address && call.Call.Address.toLowerCase().includes(this.searchTerm.trim().toLowerCase())) { - filteredCalls.push(call); - } else if (call.Call.Note && call.Call.Note.toLowerCase().includes(this.searchTerm.trim().toLowerCase())) { - filteredCalls.push(call); - } - }); - - return filteredCalls; - } - } else { - return calls; - } - } - - private load() { - this.callsStore.dispatch(new CallsActions.GetCalls()); - } - - public newCall() { - this.callsStore.dispatch( - new CallsActions.ShowNewCallModal() - ); - } - - public canCreateCall() { - return this.securityService.canUserCreateCalls(); - } - - public viewCall(callId) { - this.callsStore.dispatch( - new CallsActions.GetCallById(callId) - ); - } -} diff --git a/src/app/features/home/pages/map/map.module.ts b/src/app/features/home/pages/map/map.module.ts deleted file mode 100644 index e41e765..0000000 --- a/src/app/features/home/pages/map/map.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { MapPage } from './map.page'; -import { RouterModule } from '@angular/router'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - RouterModule.forChild([ - { - path: '', - component: MapPage - } - ]) - ], - declarations: [MapPage] -}) -export class MapPageModule {} diff --git a/src/app/features/home/pages/map/map.page.html b/src/app/features/home/pages/map/map.page.html deleted file mode 100644 index b45fa91..0000000 --- a/src/app/features/home/pages/map/map.page.html +++ /dev/null @@ -1,15 +0,0 @@ - -
- - - - - - - - - - - - -
\ No newline at end of file diff --git a/src/app/features/home/pages/map/map.page.scss b/src/app/features/home/pages/map/map.page.scss deleted file mode 100644 index 742bbc6..0000000 --- a/src/app/features/home/pages/map/map.page.scss +++ /dev/null @@ -1,15 +0,0 @@ -.app-home-map { - .marker { - display: block; - border: none; - border-radius: 50%; - cursor: pointer; - padding: 0; - } - - .carmarker { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 399.5 841.9'%3E%3CradialGradient id='a' cx='198.55' cy='420.944' r='327.4' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23c91515'/%3E%3Cstop offset='.17' stop-color='%23c01313'/%3E%3Cstop offset='.442' stop-color='%23a90e0e'/%3E%3Cstop offset='.78' stop-color='%23830606'/%3E%3Cstop offset='1' stop-color='%23670000'/%3E%3C/radialGradient%3E%3Cpath fill='url(%23a)' d='M198.6 0c-41.6-.5-74.1 6-95.7 11.8C74.6 19.6 64 26.6 56.5 33.7c-20.1 18.9-24.7 44.3-26 56v447.4l-24.1-8.2c-5.3 21.2 24.1 30 24.1 30v128.4c-.3 8-1.8 74.8 52.8 120.7 49 41.1 106.1 33.2 115.5 33.2 9.4 0 66.6 7.8 115.5-33.2 54.7-45.9 53.2-112.7 52.8-120.7v-129l12.3-6.2c6-3 10-8.8 10.8-15.5l1.1-9.5-24.1 7.7v-445c-1.3-11.8-5.8-37.1-26-56-7.6-7.1-18.2-14.1-46.5-21.9C273.3 6 240.7-.5 199.2 0'/%3E%3Cpath opacity='.65' fill='%23161616' d='M327.6 622c-7.1-65.8-13.6-132.7-19.1-198.6-7.7-91-13.9-181.4-18.6-268.8l3.6-.2c4.6 87.3 10.9 177.7 18.6 268.7 5.6 65.9 12 132.7 19.1 198.5l-3.6.4z'/%3E%3Cpath opacity='.5' fill='%23EBEBEB' d='M198.7 128.1c-9.4-.2-18.8-.8-28.4 1.9-7.5 2.1-11 4.7-14.3 2.7-6-3.4-7-18.5 0-26 2.2-2.3 4.9-3.7 11.4-5.2 7-1.7 17.6-2.3 31.5-2.3 13.9-.1 24.5.6 31.5 2.3 6.5 1.5 9.2 2.9 11.4 5.2 7 7.5 6 22.5 0 26-3.4 1.9-6.9-.6-14.3-2.7-9.7-2.6-19.4-2.1-28.8-1.9z'/%3E%3Cpath opacity='.65' fill='%23161616' d='M300.1 40.1c-14.4-4.4-29.2-7.6-44.1-9.5-9.7-1.3-19.5-2-29.3-2.3v-1.8c9.8.2 19.7 1 29.5 2.3 15 2 29.9 5.2 44.4 9.6l-.5 1.7z'/%3E%3Cg opacity='.5' fill='%23EBEBEB'%3E%3Cpath d='M198.9 36.2c5.8 0 8.9 2.5 8.9 3.5s-3.1 3.5-8.9 3.5-8.9-2.5-8.9-3.5 3.2-3.5 8.9-3.5m0-3.6c-6.9 0-12.5 3.2-12.5 7.1s5.6 7.1 12.5 7.1 12.5-3.2 12.5-7.1-5.5-7.1-12.5-7.1z'/%3E%3Cpath d='M213.5 41.5h-29.2c-.9 0-1.6-.7-1.6-1.6 0-.9.7-1.6 1.6-1.6h29.2c.9 0 1.6.7 1.6 1.6 0 .9-.7 1.6-1.6 1.6z'/%3E%3C/g%3E%3ClinearGradient id='b' gradientUnits='userSpaceOnUse' x1='1511.313' y1='93.019' x2='1511.313' y2='73.665' gradientTransform='matrix(-1 0 0 1 1695.542 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23b)' d='M198.9 92.2l-23.4.8c-2.6.1-4.8-1.7-5.2-4.3l-.7-4.5 29.3-10.6v18.6z'/%3E%3Cpath opacity='.5' fill='%23EBEBEB' d='M198.9.1c-35.1-.7-77.8 5.5-87.3 11.1-4.7 2.8-8.3 6-11.2 8.6-2.3 2.1-3.4 5.2-2.9 8.2l1.3 8.3c13.1-6 31.2-12.6 53.5-16.1 18.1-2.9 34-2.9 46.5-2.1 12.6-.8 28.5-.8 46.5 2.1 22.3 3.5 40.4 10.2 53.5 16.1l1.3-8.3c.5-3.1-.6-6.1-2.9-8.2-2.9-2.6-6.7-5.5-11.2-8.6-7.2-5-49.4-11.9-87.1-11.1z'/%3E%3Cpath opacity='.65' fill='%23161616' d='M70.1 622l-3.6-.4C73.6 555.8 80 489 85.6 423c7.7-91 13.9-181.4 18.6-268.7l3.6.2c-4.6 87.3-10.9 177.8-18.6 268.8-5.6 66-12 132.8-19.1 198.7zM97.6 40.1l-.5-1.7c14.5-4.4 29.4-7.6 44.4-9.6 9.7-1.3 19.6-2 29.5-2.3v1.8c-9.8.2-19.6 1-29.3 2.3-14.8 1.9-29.7 5.1-44.1 9.5z'/%3E%3Cpath opacity='.65' fill='%23161616' d='M279.2 156.3H118.5c-10.8 0-21.3-1.9-31.3-5.8l-6.3-2.4.7-1.7 6.3 2.4c9.8 3.8 20.2 5.7 30.7 5.7h160.8c10.5 0 20.9-1.9 30.7-5.7l6.3-2.4.7 1.7-6.3 2.4c-10.3 3.8-20.8 5.8-31.6 5.8zM198.9 14.7c-10.3 0-26 5.5-27.9 10.4-.4 1-.8 2.9 0 5.7h55.8c.8-2.8.4-4.7 0-5.7-1.9-4.9-17.6-10.4-27.9-10.4z'/%3E%3ClinearGradient id='c' gradientUnits='userSpaceOnUse' x1='198.86' y1='836.542' x2='198.86' y2='815.224'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath opacity='.5' fill='url(%23c)' d='M198.8 816.4l-36.9-1.2c-2.6-.1-4.1 3-2.4 5 1.1 2.4 4.1 7.8 10.3 11.8 7.4 4.8 26.5 4.6 29 4.5 2.5.2 21.6.3 29-4.5 6.3-4 9.2-9.4 10.3-11.8 1.7-2 .3-5.1-2.4-5l-36.9 1.2'/%3E%3Cpath fill='%23161616' d='M198.8 721.4c-18.8 0-106.8-9.7-126.3-64.1-3.5-9.7-7-19.4-7-41.6 0-17.2 12.5-93.8 16.7-119.6 24.9 22.8 116.6 24.3 116.6 24.3s91.7-1.5 116.6-24.3c4.2 25.9 16.7 102.5 16.7 119.6 0 22.2-3.5 31.9-7 41.6-19.5 54.3-107.4 64.1-126.3 64.1'/%3E%3ClinearGradient id='d' gradientUnits='userSpaceOnUse' x1='278.145' y1='805.778' x2='353.531' y2='675.206'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23d)' d='M336.3 665.5c2.2.3 5.2 3.6 7.3 19.1 1.6 10.2 4.8 39.9-11.4 72-15.9 31.5-40.9 46.5-50.1 51.5 5.5-16.9 13.2-40.7 22.8-69.2 18-54 25.4-74.2 31.4-73.4z'/%3E%3ClinearGradient id='e' gradientUnits='userSpaceOnUse' x1='452.813' y1='512.957' x2='217.939' y2='278.084'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23293e4f'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23e)' d='M347.4 618.4c-6.8-31.5-15.1-76.5-20.3-131.2-2-21.1-4.4-51.8-5.5-127.2-.7-47.2-.8-110.7 1.2-186.7 5.7 3.9 12.9 10.3 16.4 20 2.1 6 1.9 11 2.1 12.4 8.2 53.5 10.9 106.4 10.3 159.7-.7 61.9-1.5 140.7-3.9 234.1l-.3 18.9z'/%3E%3Cpath fill='%23474747' d='M200.4 695.9c-.6-1.2-2.4-1.2-3 0-1.3 2.7-2.7 6.7-2.8 11.7-.1 5.5 1.5 9.9 2.8 12.7.6 1.2 2.4 1.2 3 0 1.4-2.8 2.9-7.2 2.8-12.7-.1-5-1.5-9-2.8-11.7zM237.2 694.9c-.4-1.1-1.9-1.1-2.5-.1-1.2 2.2-2.6 5.4-2.9 9.6-.4 4.5.7 8.3 1.7 10.7.4 1.1 1.9 1.1 2.5.1 1.3-2.3 2.8-5.9 3-10.4.2-4.2-.8-7.6-1.8-9.9zM276.9 686.5c-.2-.9-1.3-1.1-1.9-.4-1.2 1.5-2.6 3.9-3.3 7.1-.8 3.5-.3 6.5.2 8.4.2.9 1.3 1.1 1.9.4 1.2-1.6 2.8-4.2 3.4-7.7.6-3.2.2-5.9-.3-7.8z'/%3E%3ClinearGradient id='f' gradientUnits='userSpaceOnUse' x1='213.513' y1='93.019' x2='213.513' y2='73.665'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23f)' d='M198.9 92.2l23.4.8c2.6.1 4.8-1.7 5.2-4.3l.7-4.5-29.3-10.6v18.6z'/%3E%3ClinearGradient id='g' gradientUnits='userSpaceOnUse' x1='1496.671' y1='131.651' x2='1496.671' y2='55.901' gradientTransform='matrix(-1 0 0 1 1695.542 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23g)' d='M198.9 82.5c-58.7-.2-98.8 37.3-108.8 48.1-1.3 1.5-3.7 1.2-4.8-.4-4.9-7.7-7.3-16.6-8.3-21.8-.6-2.8.4-5.7 2.5-7.6 29.5-27.2 92.4-44.9 119.4-44.9s89.9 17.8 119.4 44.9c2.1 1.9 3 4.8 2.5 7.6-1 5.2-3.4 14.1-8.3 21.8-1.1 1.7-3.4 1.9-4.8.4-10.1-10.8-50.1-48.2-108.8-48.1z'/%3E%3ClinearGradient id='h' gradientUnits='userSpaceOnUse' x1='1396.357' y1='88.659' x2='1596.986' y2='88.659' gradientTransform='matrix(-1 0 0 1 1695.542 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23h)' d='M198.9 80.9C143.4 80.6 105 115 105 115l-3.4-4.6c-5.7-7.8-3.3-18.8 5-23.6 15.6-8.9 29.5-13.8 39-17 6.2-2.1 14-4.5 23.3-6.8 4.4-1 8.9-.7 13.1.9 6.1 2.4 16.8 2.4 16.8 2.4s10.7 0 16.8-2.4c4.2-1.6 8.7-1.9 13.1-.9 9.3 2.2 17.1 4.7 23.3 6.8 9.6 3.3 23.4 8.1 39 17 8.4 4.8 10.7 15.8 5 23.6l-3 4.1c.1 0-39.7-33.7-94.1-33.6z'/%3E%3ClinearGradient id='i' gradientUnits='userSpaceOnUse' x1='298.469' y1='86.549' x2='339.328' y2='86.549'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23i)' d='M316.9 148.7c.6 1.2 2.2 1.4 3 .3 10.2-13.2 14.6-25.5 16.6-33.1 8.6-32.7-2.9-64.7-19.1-82.1-2.5-2.7-11.6-12.5-16.2-10.1-3.6 1.9-2.6 10.4-2.2 13.4 4.5 5.9 10.5 15 15.5 27.1 4.6 11.2 9.4 23 8 38.1-.5 5.5-3.4 15.5-11.4 27.5-1.1 1.6-1.3 3.7-.4 5.5l6.2 13.4z'/%3E%3Cpath fill='%23F21919' d='M320.4 146l.7 2.6c.2.8 1.4 1 1.8.2l17.3-37.6c.1-.2.1-.4 0-.6l-.7-2.6c-.2-.8-1.4-1-1.8-.2l-17.3 37.6c-.1.2-.1.4 0 .6z'/%3E%3Cpath fill='%23D3D3D3' d='M319.5 77.6l10-8.1c-2.8-7.8-6.8-17.2-12.9-27.2-5.5-9-11-12.5-16.2-18.2-.6.5-4.6 3.9-4.6 9 0 2.9 1.2 5.8 3.3 8 5.6 5.9 10.4 12.6 13.6 20.1l6.8 16.4z'/%3E%3ClinearGradient id='j' gradientUnits='userSpaceOnUse' x1='1389.247' y1='678.652' x2='1498.562' y2='489.313' gradientTransform='matrix(-1 0 0 1 1641.173 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23293e4f'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23j)' d='M198.9 531s-70.3-3.6-98.7-13.1c-6.2-2.1-12.8 2-13.7 8.5l-12.1 87.4c-2.1 15.4 6.8 30.2 21.5 35.3 31.7 10.9 85.5 13.1 103.1 12 17.6 1.1 71.4-1.1 103.1-12 14.7-5 23.6-19.9 21.5-35.3l-12.1-87.4c-.9-6.5-7.5-10.5-13.7-8.5-28.6 9.4-98.9 13.1-98.9 13.1'/%3E%3Cpath fill='%23474747' d='M198.9 693.3c-24.9 0-90.2-10.9-103.4-29.8 0 0 64.8 16.1 103.4 16.6 37.1-.7 103.4-16.6 103.4-16.6-13.2 18.8-78.5 29.8-103.4 29.8zM160.5 694.9c.4-1.1 1.9-1.1 2.5-.1 1.2 2.2 2.6 5.4 2.9 9.6.4 4.5-.7 8.3-1.7 10.7-.4 1.1-1.9 1.1-2.5.1-1.3-2.3-2.8-5.9-3-10.4-.2-4.2.8-7.6 1.8-9.9zM120.8 686.5c.2-.9 1.3-1.1 1.9-.4 1.2 1.5 2.6 3.9 3.3 7.1.8 3.5.3 6.5-.2 8.4-.2.9-1.3 1.1-1.9.4-1.2-1.6-2.8-4.2-3.4-7.7-.6-3.2-.2-5.9.3-7.8z'/%3E%3ClinearGradient id='k' gradientUnits='userSpaceOnUse' x1='1568.425' y1='805.778' x2='1643.811' y2='675.206' gradientTransform='matrix(-1 0 0 1 1688 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23k)' d='M61.4 665.5c-2.2.3-5.2 3.6-7.3 19.1-1.6 10.2-4.8 39.9 11.4 72 15.9 31.5 40.9 46.5 50.1 51.5-5.5-16.9-13.2-40.7-22.8-69.2-18-54-25.4-74.2-31.4-73.4z'/%3E%3ClinearGradient id='l' gradientUnits='userSpaceOnUse' x1='1743.093' y1='512.957' x2='1508.22' y2='278.084' gradientTransform='matrix(-1 0 0 1 1688 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23293e4f'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23l)' d='M50.4 618.4c6.8-31.5 15.1-76.5 20.3-131.2 2-21.1 4.4-51.8 5.5-127.2.7-47.2.8-110.7-1.2-186.7-5.7 3.9-12.9 10.3-16.4 20-2.1 6-1.9 11-2.1 12.4-8.2 53.5-10.9 106.4-10.3 159.7.7 61.9 1.5 140.7 3.9 234.1l.3 18.9z'/%3E%3ClinearGradient id='m' gradientUnits='userSpaceOnUse' x1='1588.749' y1='86.549' x2='1629.608' y2='86.549' gradientTransform='matrix(-1 0 0 1 1688 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23m)' d='M80.9 148.7c-.6 1.2-2.2 1.4-3 .3-10.2-13.2-14.6-25.5-16.6-33.1-8.6-32.7 2.9-64.7 19.1-82.1 2.5-2.7 11.6-12.5 16.2-10.1 3.6 1.9 2.6 10.4 2.2 13.4-4.5 5.9-10.5 15-15.5 27.1-4.6 11.2-9.4 23-8 38.1.5 5.5 3.4 15.5 11.4 27.5 1.1 1.6 1.3 3.7.4 5.5l-6.2 13.4z'/%3E%3Cpath fill='%23F21919' d='M77.4 146l-.7 2.6c-.2.8-1.4 1-1.8.2l-17.3-37.6c-.1-.2-.1-.4 0-.6l.7-2.6c.2-.8 1.4-1 1.8-.2l17.3 37.6v.6z'/%3E%3Cpath fill='%23D3D3D3' d='M78.3 77.6l-10-8.1c2.8-7.8 6.8-17.2 12.9-27.2 5.5-9 11-12.5 16.2-18.2.6.5 4.6 3.9 4.6 9 0 2.9-1.2 5.8-3.3 8C93 47.2 88.2 53.9 85 61.4l-6.7 16.2z'/%3E%3Cpath fill='%23161616' d='M359.5 543.8c-1.3 0-2.5-.8-3-2.1-.6-1.7.2-3.5 1.9-4.1l31-11.5c1.6-.6 3.5.2 4.1 1.9.6 1.7-.2 3.5-1.9 4.1l-31 11.5c-.3.2-.7.2-1.1.2zM38.7 543.8c1.3 0 2.5-.8 3-2.1.6-1.7-.2-3.5-1.9-4.1l-31-11.5c-1.6-.6-3.5.2-4.1 1.9s.2 3.5 1.9 4.1l31 11.5c.4.2.8.2 1.1.2z'/%3E%3Cg opacity='.5' fill='%23EBEBEB'%3E%3Cpath d='M198.9 822.4c5.8 0 8.9 2.5 8.9 3.5s-3.1 3.5-8.9 3.5-8.9-2.5-8.9-3.5 3.2-3.5 8.9-3.5m0-3.6c-6.9 0-12.5 3.2-12.5 7.1s5.6 7.1 12.5 7.1 12.5-3.2 12.5-7.1-5.5-7.1-12.5-7.1z'/%3E%3Cpath d='M213.5 827.6h-29.2c-.9 0-1.6-.7-1.6-1.6 0-.9.7-1.6 1.6-1.6h29.2c.9 0 1.6.7 1.6 1.6 0 .9-.7 1.6-1.6 1.6z'/%3E%3C/g%3E%3Cpath fill='%23FFF' d='M207.1 369.8h-14.6c-2.9 0-5.3-2.4-5.3-5.3v-70.4c0-2.9 2.4-5.3 5.3-5.3h14.6c2.9 0 5.3 2.4 5.3 5.3v70.4c0 2.9-2.4 5.3-5.3 5.3z'/%3E%3ClinearGradient id='n' gradientUnits='userSpaceOnUse' x1='199.75' y1='301.317' x2='199.75' y2='342.529'%3E%3Cstop offset='0' stop-color='%2319a160'/%3E%3Cstop offset='.229' stop-color='%2317965a'/%3E%3Cstop offset='.629' stop-color='%23137948'/%3E%3Cstop offset='1' stop-color='%230e5935'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23n)' d='M208.7 307.9c-.6-1.7-2.8-6.6-8.9-6.6s-8.3 4.9-8.9 6.6c-.6 1.7-1.1 4.8-.8 7.6.7 7.8 9.7 27 9.7 27s9-19.1 9.7-27c.2-2.8-.2-5.8-.8-7.6z'/%3E%3C/svg%3E"); - height: 50px; - width: 24px; - } -} diff --git a/src/app/features/home/pages/map/map.page.ts b/src/app/features/home/pages/map/map.page.ts deleted file mode 100644 index 9b4c9a8..0000000 --- a/src/app/features/home/pages/map/map.page.ts +++ /dev/null @@ -1,351 +0,0 @@ -import { AfterViewInit, Component, ViewChild } from '@angular/core'; -import mapboxgl from 'mapbox-gl'; -import * as turf from '@turf/turf'; -import { GeoLocation } from 'src/app/models/geoLocation'; -import { environment } from 'src/environments/environment.prod'; -import { Observable, Subscription, take } from 'rxjs'; -import { HomeState } from '../../store/home.store'; -import { Store } from '@ngrx/store'; -import { - selectConfigData, - selectCurrentPositionState, - selectLastMapUpdateDate, - selectSettingsState, -} from 'src/app/store'; -import * as HomeActions from '../../actions/home.actions'; -import { GetConfigResultData, SignalRService, UtilsService } from '@resgrid/ngx-resgridlib'; -import { MapProvider } from 'src/app/providers/map'; -import { MenuController } from '@ionic/angular'; -import { GeolocationProvider } from 'src/app/providers/geolocation'; -import { SubSink } from 'subsink'; -import { SettingsState } from 'src/app/features/settings/store/settings.store'; - -@Component({ - selector: 'app-home-map', - templateUrl: 'map.page.html', - styleUrls: ['map.page.scss'], -}) -export class MapPage { - public currentPosition$: Observable; - public mapUpdatedTimestamp$: Observable; - public configData$: Observable; - public settingsState$: Observable; - - private subs = new SubSink(); - - private lastMapUpdateTimestamp: any; - private creatingMap: boolean = false; - private configData: GetConfigResultData = null; - - public position: GeoLocation; - public map: any; - public vehicleMarker: any; - public userMovedMap: boolean = false; - public isInitialLoad: boolean = true; - public showAll: boolean = false; - @ViewChild('vehicleMap') mapContainer; - - constructor( - private geoProvider: GeolocationProvider, - private store: Store, - private utilsProvider: UtilsService, - private mapProvider: MapProvider, - public menu: MenuController, - private signalRProvider: SignalRService - ) { - this.currentPosition$ = this.store.select(selectCurrentPositionState); - this.mapUpdatedTimestamp$ = this.store.select(selectLastMapUpdateDate); - this.configData$ = this.store.select(selectConfigData); - this.settingsState$ = this.store.select(selectSettingsState); - } - - ionViewWillEnter() { - this.isInitialLoad = true; - this.menu.enable(true); - } - - ionViewDidEnter() { - this.settingsState$.pipe(take(1)).subscribe((settingsState) => { - if (settingsState) { - this.showAll = settingsState.showAll; - } - }); - - this.subs.sink = this.currentPosition$.subscribe((location) => { - this.position = location; - - if ( - location && - location.Latitude && - location.Longitude - ) { - if (this.map) { - if (!this.userMovedMap) { - this.map.flyTo({ - center: new mapboxgl.LngLat( - location.Longitude, - location.Latitude - ), - essential: true, - }); - } - - if (this.isInitialLoad) { - this.map.flyTo({ - center: new mapboxgl.LngLat( - location.Longitude, - location.Latitude - ), - essential: true, - }); - this.isInitialLoad = false; - } - - this.createUpdateVehicleMarker( - location.Latitude, - location.Longitude, - location.Heading - ); - } - } - }); - - this.subs.sink = this.mapUpdatedTimestamp$.subscribe((timestamp) => { - if (timestamp) { - this.refreshMap(); - } - }); - - this.subs.sink = this.configData$.subscribe((config) => { - if (config) { - this.configData = config; - - if (this.configData && this.configData.NavigationMapKey) { - if (!this.map && !this.creatingMap) { - this.store.dispatch(new HomeActions.GeolocationStartTracking()); - this.store.dispatch(new HomeActions.StartSignalR()); - - this.loadMap(); - } - } - } - }); - - this.loadMap(); - } - - ionViewWillLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - public loadAPIWrapper(map) { - this.map = map; - } - - public resetMap() { - this.map = null; - this.vehicleMarker = null; - this.userMovedMap = false; - } - - private async loadMap() { - //let position = await this.geoProvider.getLocation(); - const that = this; - - if (this.configData && this.configData.NavigationMapKey) { - if (!this.creatingMap) { - if (this.map) { - this.resetMap(); - } - - this.creatingMap = true; - this.userMovedMap = false; - this.lastMapUpdateTimestamp = new Date(); - - setTimeout(function () { - mapboxgl.accessToken = that.configData.NavigationMapKey; - that.map = new mapboxgl.Map({ - container: 'vehicleMap', - style: 'mapbox://styles/mapbox/streets-v11', - zoom: 13, - }); - that.map.addControl(new mapboxgl.NavigationControl()); - - that.setMapEvents(); - that.mapProvider.setImages(that.map); - that.creatingMap = false; - - that.mapProvider.setMarkersForMap( - that.map, - that.position, - that.userMovedMap, - that.showAll - ); - - if (that.map) { - that.map.resize(); - that.map.triggerRepaint(); - } - }, 500); - } - - setTimeout(function () { - if (that.map) { - that.map.resize(); - that.map.triggerRepaint(); - } - }, 1500); - } else { - setTimeout(function () { - that.loadMap(); - }, 500); - } - } - - public onResize(event) { - if (this.map) { - const that = this; - setTimeout(function () { - if (that.map) { - that.map.resize(); - that.map.triggerRepaint(); - } - }, 500); - } - } - - public refreshMap() { - this.mapProvider.setMarkersForMap( - this.map, - this.position, - this.userMovedMap, - this.showAll - ); - - this.lastMapUpdateTimestamp = new Date(); - } - - public resetOnVehicle() { - this.userMovedMap = false; - - if (this.map && this.position) { - this.map.jumpTo({ - center: new mapboxgl.LngLat( - this.position.Longitude, - this.position.Latitude - ), - essential: true, - }); - this.map.setZoom(13); - } - } - - public seeAll() { - this.userMovedMap = true; - - let bounds = this.mapProvider.coordinates.reduce(function (bounds, coord) { - return bounds.extend(coord); - }, new mapboxgl.LngLatBounds( - this.mapProvider.coordinates[0], - this.mapProvider.coordinates[1] - )); - - this.map.fitBounds(bounds, { - padding: 40, - }); - } - - private setMapEvents() { - const that = this; - - this.map.on('load', function () { - //that.mapProvider.setMarkersForMap(that.map); - }); - - this.map.on('touchend', function (data) { - //var e = (data && data.originalEvent) || {}; - that.userMovedMap = true; - }); - - this.map.on('touchmove', function (data) { - //var e = (data && data.originalEvent) || {}; - //that.userMovedMap = true; - }); - - this.map.on('mousedown', function (data) { - //var e = (data && data.originalEvent) || {}; - //that.userMovedMap = true; - }); - - this.map.on('zoomend', function (data) { - //var e = (data && data.originalEvent) || {}; - //that.userMovedMap = true; - }); - - this.map.on('zoom', function (data) { - //var e = (data && data.originalEvent) || {}; - //that.userMovedMap = true; - }); - - this.map.on('moveend', function (data) { - //var e = (data && data.originalEvent) || {}; - //that.userMovedMap = true; - }); - - this.map.on('move', function (data) { - //var e = (data && data.originalEvent) || {}; - //that.userMovedMap = true; - }); - } - - private updateMarkerDirection(oldLng, oldLat, newLng, newLat) { - let el = this.vehicleMarker.getElement(); - - if (!oldLat || !oldLng) { - oldLng = newLng; - oldLat = newLat; - } - - const angle = - turf.rhumbBearing( - turf.point([oldLat, oldLng]), - turf.point([newLat, newLng]) - ) + 180; - - let carDirection = angle - this.map.getBearing(); - if (el.style.transform.includes('rotate')) { - el.style.transform = el.style.transform.replace( - /rotate(.*)/, - 'rotate(' + carDirection + 'deg)' - ); - } else { - el.style.transform = - el.style.transform + 'rotate(' + carDirection + 'deg)'; - } - } - - private createUpdateVehicleMarker(latitude, longitude, angle) { - if (!this.vehicleMarker) { - let el = document.createElement('div'); - el.className = 'carmarker'; - el.style.backgroundSize = '100%'; - el.style.width = `24px`; - el.style.height = `50px`; - el.style.backgroundImage = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 399.5 841.9'%3E%3CradialGradient id='a' cx='198.55' cy='420.944' r='327.4' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23c91515'/%3E%3Cstop offset='.17' stop-color='%23c01313'/%3E%3Cstop offset='.442' stop-color='%23a90e0e'/%3E%3Cstop offset='.78' stop-color='%23830606'/%3E%3Cstop offset='1' stop-color='%23670000'/%3E%3C/radialGradient%3E%3Cpath fill='url(%23a)' d='M198.6 0c-41.6-.5-74.1 6-95.7 11.8C74.6 19.6 64 26.6 56.5 33.7c-20.1 18.9-24.7 44.3-26 56v447.4l-24.1-8.2c-5.3 21.2 24.1 30 24.1 30v128.4c-.3 8-1.8 74.8 52.8 120.7 49 41.1 106.1 33.2 115.5 33.2 9.4 0 66.6 7.8 115.5-33.2 54.7-45.9 53.2-112.7 52.8-120.7v-129l12.3-6.2c6-3 10-8.8 10.8-15.5l1.1-9.5-24.1 7.7v-445c-1.3-11.8-5.8-37.1-26-56-7.6-7.1-18.2-14.1-46.5-21.9C273.3 6 240.7-.5 199.2 0'/%3E%3Cpath opacity='.65' fill='%23161616' d='M327.6 622c-7.1-65.8-13.6-132.7-19.1-198.6-7.7-91-13.9-181.4-18.6-268.8l3.6-.2c4.6 87.3 10.9 177.7 18.6 268.7 5.6 65.9 12 132.7 19.1 198.5l-3.6.4z'/%3E%3Cpath opacity='.5' fill='%23EBEBEB' d='M198.7 128.1c-9.4-.2-18.8-.8-28.4 1.9-7.5 2.1-11 4.7-14.3 2.7-6-3.4-7-18.5 0-26 2.2-2.3 4.9-3.7 11.4-5.2 7-1.7 17.6-2.3 31.5-2.3 13.9-.1 24.5.6 31.5 2.3 6.5 1.5 9.2 2.9 11.4 5.2 7 7.5 6 22.5 0 26-3.4 1.9-6.9-.6-14.3-2.7-9.7-2.6-19.4-2.1-28.8-1.9z'/%3E%3Cpath opacity='.65' fill='%23161616' d='M300.1 40.1c-14.4-4.4-29.2-7.6-44.1-9.5-9.7-1.3-19.5-2-29.3-2.3v-1.8c9.8.2 19.7 1 29.5 2.3 15 2 29.9 5.2 44.4 9.6l-.5 1.7z'/%3E%3Cg opacity='.5' fill='%23EBEBEB'%3E%3Cpath d='M198.9 36.2c5.8 0 8.9 2.5 8.9 3.5s-3.1 3.5-8.9 3.5-8.9-2.5-8.9-3.5 3.2-3.5 8.9-3.5m0-3.6c-6.9 0-12.5 3.2-12.5 7.1s5.6 7.1 12.5 7.1 12.5-3.2 12.5-7.1-5.5-7.1-12.5-7.1z'/%3E%3Cpath d='M213.5 41.5h-29.2c-.9 0-1.6-.7-1.6-1.6 0-.9.7-1.6 1.6-1.6h29.2c.9 0 1.6.7 1.6 1.6 0 .9-.7 1.6-1.6 1.6z'/%3E%3C/g%3E%3ClinearGradient id='b' gradientUnits='userSpaceOnUse' x1='1511.313' y1='93.019' x2='1511.313' y2='73.665' gradientTransform='matrix(-1 0 0 1 1695.542 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23b)' d='M198.9 92.2l-23.4.8c-2.6.1-4.8-1.7-5.2-4.3l-.7-4.5 29.3-10.6v18.6z'/%3E%3Cpath opacity='.5' fill='%23EBEBEB' d='M198.9.1c-35.1-.7-77.8 5.5-87.3 11.1-4.7 2.8-8.3 6-11.2 8.6-2.3 2.1-3.4 5.2-2.9 8.2l1.3 8.3c13.1-6 31.2-12.6 53.5-16.1 18.1-2.9 34-2.9 46.5-2.1 12.6-.8 28.5-.8 46.5 2.1 22.3 3.5 40.4 10.2 53.5 16.1l1.3-8.3c.5-3.1-.6-6.1-2.9-8.2-2.9-2.6-6.7-5.5-11.2-8.6-7.2-5-49.4-11.9-87.1-11.1z'/%3E%3Cpath opacity='.65' fill='%23161616' d='M70.1 622l-3.6-.4C73.6 555.8 80 489 85.6 423c7.7-91 13.9-181.4 18.6-268.7l3.6.2c-4.6 87.3-10.9 177.8-18.6 268.8-5.6 66-12 132.8-19.1 198.7zM97.6 40.1l-.5-1.7c14.5-4.4 29.4-7.6 44.4-9.6 9.7-1.3 19.6-2 29.5-2.3v1.8c-9.8.2-19.6 1-29.3 2.3-14.8 1.9-29.7 5.1-44.1 9.5z'/%3E%3Cpath opacity='.65' fill='%23161616' d='M279.2 156.3H118.5c-10.8 0-21.3-1.9-31.3-5.8l-6.3-2.4.7-1.7 6.3 2.4c9.8 3.8 20.2 5.7 30.7 5.7h160.8c10.5 0 20.9-1.9 30.7-5.7l6.3-2.4.7 1.7-6.3 2.4c-10.3 3.8-20.8 5.8-31.6 5.8zM198.9 14.7c-10.3 0-26 5.5-27.9 10.4-.4 1-.8 2.9 0 5.7h55.8c.8-2.8.4-4.7 0-5.7-1.9-4.9-17.6-10.4-27.9-10.4z'/%3E%3ClinearGradient id='c' gradientUnits='userSpaceOnUse' x1='198.86' y1='836.542' x2='198.86' y2='815.224'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath opacity='.5' fill='url(%23c)' d='M198.8 816.4l-36.9-1.2c-2.6-.1-4.1 3-2.4 5 1.1 2.4 4.1 7.8 10.3 11.8 7.4 4.8 26.5 4.6 29 4.5 2.5.2 21.6.3 29-4.5 6.3-4 9.2-9.4 10.3-11.8 1.7-2 .3-5.1-2.4-5l-36.9 1.2'/%3E%3Cpath fill='%23161616' d='M198.8 721.4c-18.8 0-106.8-9.7-126.3-64.1-3.5-9.7-7-19.4-7-41.6 0-17.2 12.5-93.8 16.7-119.6 24.9 22.8 116.6 24.3 116.6 24.3s91.7-1.5 116.6-24.3c4.2 25.9 16.7 102.5 16.7 119.6 0 22.2-3.5 31.9-7 41.6-19.5 54.3-107.4 64.1-126.3 64.1'/%3E%3ClinearGradient id='d' gradientUnits='userSpaceOnUse' x1='278.145' y1='805.778' x2='353.531' y2='675.206'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23d)' d='M336.3 665.5c2.2.3 5.2 3.6 7.3 19.1 1.6 10.2 4.8 39.9-11.4 72-15.9 31.5-40.9 46.5-50.1 51.5 5.5-16.9 13.2-40.7 22.8-69.2 18-54 25.4-74.2 31.4-73.4z'/%3E%3ClinearGradient id='e' gradientUnits='userSpaceOnUse' x1='452.813' y1='512.957' x2='217.939' y2='278.084'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23293e4f'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23e)' d='M347.4 618.4c-6.8-31.5-15.1-76.5-20.3-131.2-2-21.1-4.4-51.8-5.5-127.2-.7-47.2-.8-110.7 1.2-186.7 5.7 3.9 12.9 10.3 16.4 20 2.1 6 1.9 11 2.1 12.4 8.2 53.5 10.9 106.4 10.3 159.7-.7 61.9-1.5 140.7-3.9 234.1l-.3 18.9z'/%3E%3Cpath fill='%23474747' d='M200.4 695.9c-.6-1.2-2.4-1.2-3 0-1.3 2.7-2.7 6.7-2.8 11.7-.1 5.5 1.5 9.9 2.8 12.7.6 1.2 2.4 1.2 3 0 1.4-2.8 2.9-7.2 2.8-12.7-.1-5-1.5-9-2.8-11.7zM237.2 694.9c-.4-1.1-1.9-1.1-2.5-.1-1.2 2.2-2.6 5.4-2.9 9.6-.4 4.5.7 8.3 1.7 10.7.4 1.1 1.9 1.1 2.5.1 1.3-2.3 2.8-5.9 3-10.4.2-4.2-.8-7.6-1.8-9.9zM276.9 686.5c-.2-.9-1.3-1.1-1.9-.4-1.2 1.5-2.6 3.9-3.3 7.1-.8 3.5-.3 6.5.2 8.4.2.9 1.3 1.1 1.9.4 1.2-1.6 2.8-4.2 3.4-7.7.6-3.2.2-5.9-.3-7.8z'/%3E%3ClinearGradient id='f' gradientUnits='userSpaceOnUse' x1='213.513' y1='93.019' x2='213.513' y2='73.665'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23f)' d='M198.9 92.2l23.4.8c2.6.1 4.8-1.7 5.2-4.3l.7-4.5-29.3-10.6v18.6z'/%3E%3ClinearGradient id='g' gradientUnits='userSpaceOnUse' x1='1496.671' y1='131.651' x2='1496.671' y2='55.901' gradientTransform='matrix(-1 0 0 1 1695.542 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23g)' d='M198.9 82.5c-58.7-.2-98.8 37.3-108.8 48.1-1.3 1.5-3.7 1.2-4.8-.4-4.9-7.7-7.3-16.6-8.3-21.8-.6-2.8.4-5.7 2.5-7.6 29.5-27.2 92.4-44.9 119.4-44.9s89.9 17.8 119.4 44.9c2.1 1.9 3 4.8 2.5 7.6-1 5.2-3.4 14.1-8.3 21.8-1.1 1.7-3.4 1.9-4.8.4-10.1-10.8-50.1-48.2-108.8-48.1z'/%3E%3ClinearGradient id='h' gradientUnits='userSpaceOnUse' x1='1396.357' y1='88.659' x2='1596.986' y2='88.659' gradientTransform='matrix(-1 0 0 1 1695.542 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23h)' d='M198.9 80.9C143.4 80.6 105 115 105 115l-3.4-4.6c-5.7-7.8-3.3-18.8 5-23.6 15.6-8.9 29.5-13.8 39-17 6.2-2.1 14-4.5 23.3-6.8 4.4-1 8.9-.7 13.1.9 6.1 2.4 16.8 2.4 16.8 2.4s10.7 0 16.8-2.4c4.2-1.6 8.7-1.9 13.1-.9 9.3 2.2 17.1 4.7 23.3 6.8 9.6 3.3 23.4 8.1 39 17 8.4 4.8 10.7 15.8 5 23.6l-3 4.1c.1 0-39.7-33.7-94.1-33.6z'/%3E%3ClinearGradient id='i' gradientUnits='userSpaceOnUse' x1='298.469' y1='86.549' x2='339.328' y2='86.549'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23i)' d='M316.9 148.7c.6 1.2 2.2 1.4 3 .3 10.2-13.2 14.6-25.5 16.6-33.1 8.6-32.7-2.9-64.7-19.1-82.1-2.5-2.7-11.6-12.5-16.2-10.1-3.6 1.9-2.6 10.4-2.2 13.4 4.5 5.9 10.5 15 15.5 27.1 4.6 11.2 9.4 23 8 38.1-.5 5.5-3.4 15.5-11.4 27.5-1.1 1.6-1.3 3.7-.4 5.5l6.2 13.4z'/%3E%3Cpath fill='%23F21919' d='M320.4 146l.7 2.6c.2.8 1.4 1 1.8.2l17.3-37.6c.1-.2.1-.4 0-.6l-.7-2.6c-.2-.8-1.4-1-1.8-.2l-17.3 37.6c-.1.2-.1.4 0 .6z'/%3E%3Cpath fill='%23D3D3D3' d='M319.5 77.6l10-8.1c-2.8-7.8-6.8-17.2-12.9-27.2-5.5-9-11-12.5-16.2-18.2-.6.5-4.6 3.9-4.6 9 0 2.9 1.2 5.8 3.3 8 5.6 5.9 10.4 12.6 13.6 20.1l6.8 16.4z'/%3E%3ClinearGradient id='j' gradientUnits='userSpaceOnUse' x1='1389.247' y1='678.652' x2='1498.562' y2='489.313' gradientTransform='matrix(-1 0 0 1 1641.173 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23293e4f'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23j)' d='M198.9 531s-70.3-3.6-98.7-13.1c-6.2-2.1-12.8 2-13.7 8.5l-12.1 87.4c-2.1 15.4 6.8 30.2 21.5 35.3 31.7 10.9 85.5 13.1 103.1 12 17.6 1.1 71.4-1.1 103.1-12 14.7-5 23.6-19.9 21.5-35.3l-12.1-87.4c-.9-6.5-7.5-10.5-13.7-8.5-28.6 9.4-98.9 13.1-98.9 13.1'/%3E%3Cpath fill='%23474747' d='M198.9 693.3c-24.9 0-90.2-10.9-103.4-29.8 0 0 64.8 16.1 103.4 16.6 37.1-.7 103.4-16.6 103.4-16.6-13.2 18.8-78.5 29.8-103.4 29.8zM160.5 694.9c.4-1.1 1.9-1.1 2.5-.1 1.2 2.2 2.6 5.4 2.9 9.6.4 4.5-.7 8.3-1.7 10.7-.4 1.1-1.9 1.1-2.5.1-1.3-2.3-2.8-5.9-3-10.4-.2-4.2.8-7.6 1.8-9.9zM120.8 686.5c.2-.9 1.3-1.1 1.9-.4 1.2 1.5 2.6 3.9 3.3 7.1.8 3.5.3 6.5-.2 8.4-.2.9-1.3 1.1-1.9.4-1.2-1.6-2.8-4.2-3.4-7.7-.6-3.2-.2-5.9.3-7.8z'/%3E%3ClinearGradient id='k' gradientUnits='userSpaceOnUse' x1='1568.425' y1='805.778' x2='1643.811' y2='675.206' gradientTransform='matrix(-1 0 0 1 1688 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23k)' d='M61.4 665.5c-2.2.3-5.2 3.6-7.3 19.1-1.6 10.2-4.8 39.9 11.4 72 15.9 31.5 40.9 46.5 50.1 51.5-5.5-16.9-13.2-40.7-22.8-69.2-18-54-25.4-74.2-31.4-73.4z'/%3E%3ClinearGradient id='l' gradientUnits='userSpaceOnUse' x1='1743.093' y1='512.957' x2='1508.22' y2='278.084' gradientTransform='matrix(-1 0 0 1 1688 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23293e4f'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23l)' d='M50.4 618.4c6.8-31.5 15.1-76.5 20.3-131.2 2-21.1 4.4-51.8 5.5-127.2.7-47.2.8-110.7-1.2-186.7-5.7 3.9-12.9 10.3-16.4 20-2.1 6-1.9 11-2.1 12.4-8.2 53.5-10.9 106.4-10.3 159.7.7 61.9 1.5 140.7 3.9 234.1l.3 18.9z'/%3E%3ClinearGradient id='m' gradientUnits='userSpaceOnUse' x1='1588.749' y1='86.549' x2='1629.608' y2='86.549' gradientTransform='matrix(-1 0 0 1 1688 0)'%3E%3Cstop offset='0' stop-color='%234f4f4f'/%3E%3Cstop offset='1' stop-color='%23b8b8b8'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23m)' d='M80.9 148.7c-.6 1.2-2.2 1.4-3 .3-10.2-13.2-14.6-25.5-16.6-33.1-8.6-32.7 2.9-64.7 19.1-82.1 2.5-2.7 11.6-12.5 16.2-10.1 3.6 1.9 2.6 10.4 2.2 13.4-4.5 5.9-10.5 15-15.5 27.1-4.6 11.2-9.4 23-8 38.1.5 5.5 3.4 15.5 11.4 27.5 1.1 1.6 1.3 3.7.4 5.5l-6.2 13.4z'/%3E%3Cpath fill='%23F21919' d='M77.4 146l-.7 2.6c-.2.8-1.4 1-1.8.2l-17.3-37.6c-.1-.2-.1-.4 0-.6l.7-2.6c.2-.8 1.4-1 1.8-.2l17.3 37.6v.6z'/%3E%3Cpath fill='%23D3D3D3' d='M78.3 77.6l-10-8.1c2.8-7.8 6.8-17.2 12.9-27.2 5.5-9 11-12.5 16.2-18.2.6.5 4.6 3.9 4.6 9 0 2.9-1.2 5.8-3.3 8C93 47.2 88.2 53.9 85 61.4l-6.7 16.2z'/%3E%3Cpath fill='%23161616' d='M359.5 543.8c-1.3 0-2.5-.8-3-2.1-.6-1.7.2-3.5 1.9-4.1l31-11.5c1.6-.6 3.5.2 4.1 1.9.6 1.7-.2 3.5-1.9 4.1l-31 11.5c-.3.2-.7.2-1.1.2zM38.7 543.8c1.3 0 2.5-.8 3-2.1.6-1.7-.2-3.5-1.9-4.1l-31-11.5c-1.6-.6-3.5.2-4.1 1.9s.2 3.5 1.9 4.1l31 11.5c.4.2.8.2 1.1.2z'/%3E%3Cg opacity='.5' fill='%23EBEBEB'%3E%3Cpath d='M198.9 822.4c5.8 0 8.9 2.5 8.9 3.5s-3.1 3.5-8.9 3.5-8.9-2.5-8.9-3.5 3.2-3.5 8.9-3.5m0-3.6c-6.9 0-12.5 3.2-12.5 7.1s5.6 7.1 12.5 7.1 12.5-3.2 12.5-7.1-5.5-7.1-12.5-7.1z'/%3E%3Cpath d='M213.5 827.6h-29.2c-.9 0-1.6-.7-1.6-1.6 0-.9.7-1.6 1.6-1.6h29.2c.9 0 1.6.7 1.6 1.6 0 .9-.7 1.6-1.6 1.6z'/%3E%3C/g%3E%3Cpath fill='%23FFF' d='M207.1 369.8h-14.6c-2.9 0-5.3-2.4-5.3-5.3v-70.4c0-2.9 2.4-5.3 5.3-5.3h14.6c2.9 0 5.3 2.4 5.3 5.3v70.4c0 2.9-2.4 5.3-5.3 5.3z'/%3E%3ClinearGradient id='n' gradientUnits='userSpaceOnUse' x1='199.75' y1='301.317' x2='199.75' y2='342.529'%3E%3Cstop offset='0' stop-color='%2319a160'/%3E%3Cstop offset='.229' stop-color='%2317965a'/%3E%3Cstop offset='.629' stop-color='%23137948'/%3E%3Cstop offset='1' stop-color='%230e5935'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23n)' d='M208.7 307.9c-.6-1.7-2.8-6.6-8.9-6.6s-8.3 4.9-8.9 6.6c-.6 1.7-1.1 4.8-.8 7.6.7 7.8 9.7 27 9.7 27s9-19.1 9.7-27c.2-2.8-.2-5.8-.8-7.6z'/%3E%3C/svg%3E")`; - this.vehicleMarker = new mapboxgl.Marker(el); - this.vehicleMarker.setLngLat(new mapboxgl.LngLat(longitude, latitude)); - this.vehicleMarker.addTo(this.map); - } else { - let position = this.vehicleMarker.getLngLat(); - - if (position) { - let lng = position.lng; - let lat = position.lat; - this.vehicleMarker.setLngLat(new mapboxgl.LngLat(longitude, latitude)); - this.updateMarkerDirection(lng, lat, longitude, latitude); - } - } - } -} diff --git a/src/app/features/home/pages/ptt/ptt.module.ts b/src/app/features/home/pages/ptt/ptt.module.ts deleted file mode 100644 index 84388ba..0000000 --- a/src/app/features/home/pages/ptt/ptt.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { RouterModule } from '@angular/router'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { PTTPage } from './ptt.page'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { ComponentsModule } from 'src/app/components/components.module'; -import { TranslateModule } from '@ngx-translate/core'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - RouterModule.forChild([ - { - path: '', - component: PTTPage - } - ]), - NgxResgridLibModule, - ComponentsModule, - TranslateModule - ], - declarations: [PTTPage] -}) -export class PttPageModule {} diff --git a/src/app/features/home/pages/ptt/ptt.page.html b/src/app/features/home/pages/ptt/ptt.page.html deleted file mode 100644 index 692fbb7..0000000 --- a/src/app/features/home/pages/ptt/ptt.page.html +++ /dev/null @@ -1,39 +0,0 @@ - -
- -
- - - -
  -

{{'pttPage.transmittingOnChan' | translate}} {{selectedChannel.Name}}

-
-
-
- - - -
-
-
-
- {{'pttPage.startTalking' | translate}} -
-
- {{'pttPage.stopTalking' | translate}} -
-
-
-
-
-
- - - -

{{'pttPage.noChanSelected' | translate}}

-
-
- -
-
diff --git a/src/app/features/home/pages/ptt/ptt.page.scss b/src/app/features/home/pages/ptt/ptt.page.scss deleted file mode 100644 index 4842d70..0000000 --- a/src/app/features/home/pages/ptt/ptt.page.scss +++ /dev/null @@ -1,78 +0,0 @@ -.circle { - position: relative; - display: block; - margin: 50px 50px; - background-color: transparent; - color: #222; - text-align: center; -} - -.circle:after { - display: block; - padding-bottom: 100%; - width: 100%; - height: 0; - border-radius: 50%; - background-color: #ddd; - content: ""; -} - -.circle__inner { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; -} - -.circle__wrapper { - display: table; - width: 100%; - height: 100%; -} - -.circle__icon { - vertical-align: top; -} - -.circle__content { - display: table-cell; - padding: 1em; - vertical-align: middle; -} - -@media (min-width: 480px) { - .circle__content { - font-size: 2em; - } - - .buttonCol { - padding-left: 30px; - padding-right: 30px; - } -} - -@media (min-width: 768px) { - .circle__content { - font-size: 2em; - } - - .buttonCol { - padding-left: 12em; - padding-right: 12em; - } -} - -.glow-on-hover { - margin: 50px 50px; - border-radius: 50%; - -webkit-box-shadow: 0 0 20px blue; - -moz-box-shadow: 0 0 20px blue; - box-shadow: 0 0 20px blue; -} - -.glow-on-hover:after { - background-color: #696969; -} - diff --git a/src/app/features/home/pages/ptt/ptt.page.ts b/src/app/features/home/pages/ptt/ptt.page.ts deleted file mode 100644 index 8091428..0000000 --- a/src/app/features/home/pages/ptt/ptt.page.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { Component } from '@angular/core'; -import { MenuController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { - CallPriorityResultData, - CallResultData, - DepartmentVoiceChannelResultData, -} from '@resgrid/ngx-resgridlib'; -import { Observable, Subscription } from 'rxjs'; -import { CallsState } from 'src/app/features/calls/store/calls.store'; -import { VoiceState } from 'src/app/features/voice/store/voice.store'; -import { AudioProvider } from 'src/app/providers/audio'; -//import { OpenViduService } from 'src/app/providers/openvidu'; -import { selectCallsState, selectVoiceState } from 'src/app/store'; -import * as CallsActions from '../../../calls/actions/calls.actions'; -import * as VoiceActions from '../../../voice/actions/voice.actions'; - -@Component({ - selector: 'app-home-ptt', - templateUrl: 'ptt.page.html', - styleUrls: ['ptt.page.scss'], -}) -export class PTTPage { - public selectedChannel: DepartmentVoiceChannelResultData; - public isTransmitting: boolean = false; - public voiceState$: Observable; - - private voiceSubscription: Subscription; - - constructor( - private store: Store, - //public openViduService: OpenViduService, - private audioProvider: AudioProvider - ) { - this.voiceState$ = this.store.select(selectVoiceState); - } - - ionViewDidEnter() { - this.voiceSubscription = this.voiceState$.subscribe((state) => { - if (state) { - if (state.currentActiveVoipChannel) { - this.selectedChannel = state.currentActiveVoipChannel; - } else if (state.channels) { - this.selectedChannel = state.channels[0]; - } - - this.isTransmitting = state.isTransmitting; - } - }); - } - - ionViewWillLeave() { - if (this.voiceSubscription) { - this.voiceSubscription.unsubscribe(); - this.voiceSubscription = null; - } - } - - public toggleTransmitting() { - if (this.isTransmitting) { - this.stopTransmitting() - } else { - this.startTransmitting(); - } - } - - public startTransmitting(): void { - if (this.selectedChannel.Id !== '') { - this.audioProvider.playTransmitStart(); - this.store.dispatch(new VoiceActions.StartTransmitting()); - } - } - - public stopTransmitting(): void { - if (this.selectedChannel.Id !== '') { - this.store.dispatch(new VoiceActions.StopTransmitting()); - this.audioProvider.playTransmitEnd(); - } - } - - public onChannelChange(channel) { - if (this.isTransmitting) { - this.stopTransmitting(); - } - - if (channel.Id === '') { - this.store.dispatch(new VoiceActions.SetNoChannel()); - } else { - this.store.dispatch(new VoiceActions.SetActiveChannel(channel)); - } - } -} diff --git a/src/app/features/home/pages/settings/settings.module.ts b/src/app/features/home/pages/settings/settings.module.ts deleted file mode 100644 index cf660b5..0000000 --- a/src/app/features/home/pages/settings/settings.module.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; - -import { IonicModule } from '@ionic/angular'; - -import { SettingsPage } from './settings.page'; -import { RouterModule } from '@angular/router'; -import { TranslateModule } from '@ngx-translate/core'; - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - IonicModule, - ReactiveFormsModule, - RouterModule.forChild([ - { - path: '', - component: SettingsPage - } - ]), - TranslateModule - ], - declarations: [SettingsPage] -}) -export class SettingsPageModule {} diff --git a/src/app/features/home/pages/settings/settings.page.html b/src/app/features/home/pages/settings/settings.page.html deleted file mode 100644 index 8384f14..0000000 --- a/src/app/features/home/pages/settings/settings.page.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - {{'settingsPage.accountSettingsSection' | translate}} - - - - - - -

{{'settingsPage.serverInfoLabel' | translate}}

-

{{'settingsPage.serverInfoText' | translate}}

-
-
- - - - - -

{{'settingsPage.loginInfoLabel' | translate}}

-

{{'settingsPage.loginInfoText' | translate}}

-
-
- - - - - -

{{'settingsPage.logoutLabel' | translate}}

-

{{'settingsPage.logoutText' | translate}}

-
-
-
-
-
- - - - - {{'settingsPage.applicationSection' | translate}} - - - - - - -

{{'settingsPage.setActiveUnitLabel' | translate}}

-

{{'settingsPage.setActiveUnitText' | translate}}

-
-
- - - - - -

{{'settingsPage.darkThemeLabel' | translate}}

-

{{'settingsPage.darkThemeText' | translate}}

-
- - Default - Light - Dark - -
- - - - - -

{{'settingsPage.keepActiveLabel' | translate}}

-

{{'settingsPage.keepActiveText' | translate}}

-
- -
- - - - - - -

{{'settingsPage.backgroundGeolocationLabel' | translate}}

-

{{'settingsPage.backgroundGeolocationText' | translate}}

-
- -
- - - - - -

{{'settingsPage.pushNotificationLabel' | translate}}

-

{{'settingsPage.pushNotificationText' | translate}}

-
- -
-
-
-
- - - - - {{'settingsPage.optionsSection' | translate}} - - - - - - -

{{'settingsPage.aboutLabel' | translate}}

-

{{'settingsPage.aboutText' | translate}}

-
-
-
-
-
-
- -
diff --git a/src/app/features/home/pages/settings/settings.page.scss b/src/app/features/home/pages/settings/settings.page.scss deleted file mode 100644 index c0cf5d8..0000000 --- a/src/app/features/home/pages/settings/settings.page.scss +++ /dev/null @@ -1,79 +0,0 @@ -ion-toolbar { - --background: transparent; -} - -ion-avatar { - display: flex; - align-items: center; - justify-content: center; - - ion-icon { - font-size: 16pt; - color: #ffffff; - } -} - -ion-list-header { - font-weight: 600; - font-size: 17px; - line-height: 22px; - padding: 0; - color: var(--ion-color-facebook); -} - -ion-item { - --padding-start: 0; - --inner-padding-end: 0; - - h2 { - font-weight: 600; - font-size: 15px; - line-height: 20px; - } - - p { - font-size: 13px; - line-height: 18px; - color: #999999; - } -} - -.blue-bg { - background: var(--ion-color-primary); -} - -.red-bg { - background: var(--ion-color-google); -} - -.green-bg { - background: var(--ion-color-success); -} - -.navy-bg { - background: var(--ion-color-facebook); -} - -.cyan-bg { - background: var(--ion-color-secondary); -} - -.yellow-bg { - background: var(--ion-color-warning); -} - -.orange-bg { - background: var(--ion-color-mbt-orange); -} - -.purple-bg { - background: var(--ion-color-tertiary); -} - -.pink-bg { - background: var(--ion-color-mbt-pink); -} - -.gray-bg { - background: var(--ion-color-medium); -} diff --git a/src/app/features/home/pages/settings/settings.page.ts b/src/app/features/home/pages/settings/settings.page.ts deleted file mode 100644 index f688098..0000000 --- a/src/app/features/home/pages/settings/settings.page.ts +++ /dev/null @@ -1,228 +0,0 @@ -import { Component, OnInit, Output } from '@angular/core'; -import { MenuController, Platform } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { SettingsState } from '../../../../features/settings/store/settings.store'; -import * as SettingsActions from '../../../../features/settings/actions/settings.actions'; -import { Observable, Subscription } from 'rxjs'; -import { HomeState } from '../../store/home.store'; -import { - selectBackgroundGeolocationState, - selectHeadsetType, - selectHomeState, - selectKeepAliveState, - selectPushNotificationState, - selectSelectedMic, - selectSettingsState, - selectShowAllState, - selectThemePreferenceState, -} from 'src/app/store'; -import { BluetoothProvider } from 'src/app/providers/bluetooth'; -import { SubSink } from 'subsink'; -import { SleepProvider } from 'src/app/providers/sleep'; -//import { OpenViduDevicesService } from 'src/app/providers/openviduDevices'; -import { IDevice } from 'src/app/models/deviceType'; - -@Component({ - selector: 'app-home-settings', - templateUrl: './settings.page.html', - styleUrls: ['./settings.page.scss'], -}) -export class SettingsPage implements OnInit { - public homeState$: Observable; - public settingsState$: Observable; - - public pushNotificationEnabled$: Observable; - public keepAlive$: Observable; - public backgroundGeolocationEnabled$: Observable; - public themePreference$: Observable; - public showAll$: Observable; - - public pushNotificationEnabled: boolean = false; - public keepAliveEnabled: boolean = false; - public isLoggedIn: boolean = false; - - public themePreference: string = '-1'; - public headSetType: string = '-1'; - - private subs = new SubSink(); - - public microphones: IDevice[] = []; - public selectedMicrophone: string; - - public speakers: IDevice[] = []; - public selectedSpeaker: IDevice; - - constructor( - public menuCtrl: MenuController, - private store: Store, - private homeStore: Store, - private bluetoothProvider: BluetoothProvider, - private sleepProvider: SleepProvider, - private platform: Platform, - //private deviceService: OpenViduDevicesService - ) { - this.homeState$ = this.homeStore.select(selectHomeState); - this.settingsState$ = this.store.select(selectSettingsState); - this.pushNotificationEnabled$ = this.store.select(selectPushNotificationState); - this.keepAlive$ = this.store.select(selectKeepAliveState); - this.backgroundGeolocationEnabled$ = this.store.select(selectBackgroundGeolocationState); - this.themePreference$ = this.store.select(selectThemePreferenceState); - this.showAll$ = this.store.select(selectShowAllState); - } - - ngOnInit() { - this.menuCtrl.enable(false); - } - - ionViewWillEnter() { - this.menuCtrl.enable(false); - - //this.subs.sink = this.store.select(selectPushNotificationState).subscribe(data => - // this.pushNotificationEnabled = data - // ); - //this.subs.sink = this.store.select(selectPerferDarkModeState).subscribe(data => - // this.perferDarkMode = data - // ); - //this.subs.sink = this.store.select(selectKeepAliveState).subscribe(data => - // this.keepAliveEnabled = data - // ); - - this.subs.sink = this.store.select(selectHeadsetType).subscribe((data) => { - if (data) { - this.headSetType = data.toString(); - } - }); - - this.subs.sink = this.store.select(selectSelectedMic).subscribe((data) => { - if (data) { - this.selectedMicrophone = data.toString(); - } - }); - - this.subs.sink = this.store.select(selectSettingsState).subscribe((data) => { - if (data) { - this.isLoggedIn = data.loggedIn; - } - }); - } - - async ionViewDidEnter() { - this.menuCtrl.enable(false); - - //await this.deviceService.initDevices(); //.then(() => { - //this.microphones = this.deviceService.getMicrophones(); - // this.selectedMicrophone = this.deviceService.getMicSelected(); - //}); - } - - ionViewWillLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - showLoginModal() { - this.store.dispatch(new SettingsActions.ShowLoginModal()); - } - - showSetActiveModal() { - this.store.dispatch(new SettingsActions.ShowSetActiveModal()); - } - - showSetServerAddressModal() { - this.store.dispatch(new SettingsActions.ShowSetServerModal()); - } - - showsAboutModal() { - this.store.dispatch(new SettingsActions.ShowAboutModal()); - } - - //async selectAudioDevice() { - // await this.bluetoothProvider.init(); - // } - - public setBackgroundGeolocation(event) { - - if (event.detail.checked) { - this.store.dispatch( - new SettingsActions.ShowBackgroundGeolocationMessage() - ); - } - - this.store.dispatch( - new SettingsActions.SaveBackgroundGeolocationSetting(event.detail.checked) - ); - } - - public setPushNotification(event) { - this.store.dispatch( - new SettingsActions.SavePushNotificationSetting(event.detail.checked) - ); - } - - public setPerferDarkMode(event) { - this.store.dispatch( - new SettingsActions.SavePerferDarkModeSetting(parseInt(event)) - ); - } - - public setKeepAlive(event) { - this.store.dispatch( - new SettingsActions.SaveKeepAliveSetting(event.detail.checked) - ); - - if (event.detail.checked) { - this.sleepProvider.enable(); - } else { - this.sleepProvider.disable(); - } - } - - public setShowAll(event) { - if (event && event.detail) { - this.store.dispatch( - new SettingsActions.SaveMapShowAllSetting(event.detail.checked) - ); - } - } - - public setHeadsetType(event) { - this.headSetType = event; - this.store.dispatch( - new SettingsActions.SaveHeadsetTypeSetting(parseInt(event)) - ); - } - - public logOut() { - this.store.dispatch(new SettingsActions.ShowPromptForLogout()); - } - - public isAndroid() { - return this.platform.is('android'); - } - - public isIos() { - return this.platform.is('ios'); - } - - public shouldHideLoginAndDevice(): boolean { - if (!this.platform.is('android') || !this.platform.is('ios')) { - return true; - } - - if (!this.isLoggedIn) { - return true; - } - } - - public async connectBle(): Promise { - await this.bluetoothProvider.init(parseInt(this.headSetType)); - await this.bluetoothProvider.start(); - } - - public setMic(event) { - this.selectedMicrophone = event; - //this.deviceService.setMicSelected(event); - this.store.dispatch(new SettingsActions.SaveMicSetting(event)); - } -} diff --git a/src/app/features/home/pages/splash/splash.module.ts b/src/app/features/home/pages/splash/splash.module.ts deleted file mode 100644 index 9c03867..0000000 --- a/src/app/features/home/pages/splash/splash.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; - -import { IonicModule } from '@ionic/angular'; -import { RouterModule } from '@angular/router'; -import { SplashPage } from './splash.page'; - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - IonicModule, - ReactiveFormsModule, - RouterModule.forChild([ - { - path: '', - component: SplashPage - } - ]) - ], - declarations: [SplashPage] -}) -export class SplashPageModule {} diff --git a/src/app/features/home/pages/splash/splash.page.html b/src/app/features/home/pages/splash/splash.page.html deleted file mode 100644 index 6b287da..0000000 --- a/src/app/features/home/pages/splash/splash.page.html +++ /dev/null @@ -1,5 +0,0 @@ - - -
-
-
diff --git a/src/app/features/home/pages/splash/splash.page.scss b/src/app/features/home/pages/splash/splash.page.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/features/home/pages/splash/splash.page.ts b/src/app/features/home/pages/splash/splash.page.ts deleted file mode 100644 index 2fb22cd..0000000 --- a/src/app/features/home/pages/splash/splash.page.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { MenuController } from '@ionic/angular'; - -@Component({ - selector: 'app-home-splash', - templateUrl: './splash.page.html', - styleUrls: ['./splash.page.scss'], -}) -export class SplashPage implements OnInit { - - constructor(public menuCtrl: MenuController) { } - - ngOnInit() { - - } - - ionViewWillEnter() { - this.menuCtrl.enable(false); - } -} diff --git a/src/app/features/home/pages/tabs/tabs-routing.module.ts b/src/app/features/home/pages/tabs/tabs-routing.module.ts deleted file mode 100644 index 2891b50..0000000 --- a/src/app/features/home/pages/tabs/tabs-routing.module.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { TabsPage } from './tabs.page'; - -const routes: Routes = [ - { - path: '', - component: TabsPage, - children: [ - { - path: 'map', - loadChildren: () => import('../map/map.module').then(m => m.MapPageModule) - }, - { - path: 'calls', - loadChildren: () => import('../calls/calls.module').then(m => m.CallsPageModule) - }, - { - path: 'ptt', - loadChildren: () => import('../ptt/ptt.module').then(m => m.PttPageModule) - }, - { - path: 'settings', - loadChildren: () => import('../settings/settings.module').then(m => m.SettingsPageModule) - }, - { - path: 'notes', - loadChildren: () => import('../../../notes/pages/notes-list/notes-list.module').then(m => m.NotesListModule) - }, - { - path: 'protocols', - loadChildren: () => import('../../../protocols/pages/protocols/protocols.module').then(m => m.ProtocolsModule) - }, - { - path: '', - redirectTo: '/home/tabs/map', - pathMatch: 'full' - } - ] - }, - { - path: '', - redirectTo: '/home/tabs/map', - pathMatch: 'full' - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], -}) -export class TabsPageRoutingModule {} diff --git a/src/app/features/home/pages/tabs/tabs.module.ts b/src/app/features/home/pages/tabs/tabs.module.ts deleted file mode 100644 index a9460d3..0000000 --- a/src/app/features/home/pages/tabs/tabs.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import { TabsPageRoutingModule } from './tabs-routing.module'; - -import { TabsPage } from './tabs.page'; -import { VoiceModule } from 'src/app/features/voice/voice.module'; -import { TranslateModule } from '@ngx-translate/core'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - TabsPageRoutingModule, - VoiceModule, - TranslateModule - ], - declarations: [TabsPage] -}) -export class TabsPageModule {} diff --git a/src/app/features/home/pages/tabs/tabs.page.html b/src/app/features/home/pages/tabs/tabs.page.html deleted file mode 100644 index 56a7a8b..0000000 --- a/src/app/features/home/pages/tabs/tabs.page.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - {{'appName' | translate}} - - - - - - - - - - - - {{'tabsPage.mapTab' | translate}} - - - - - {{'tabsPage.callsTab' | translate}} - - - - - {{'tabsPage.notesTab' | translate}} - - - - - {{'tabsPage.protocolsTab' | translate}} - - - - - {{'tabsPage.settingsTab' | translate}} - - - - \ No newline at end of file diff --git a/src/app/features/home/pages/tabs/tabs.page.scss b/src/app/features/home/pages/tabs/tabs.page.scss deleted file mode 100644 index 8b13789..0000000 --- a/src/app/features/home/pages/tabs/tabs.page.scss +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/app/features/home/pages/tabs/tabs.page.ts b/src/app/features/home/pages/tabs/tabs.page.ts deleted file mode 100644 index 177f4f5..0000000 --- a/src/app/features/home/pages/tabs/tabs.page.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Component } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { SettingsState } from 'src/app/features/settings/store/settings.store'; -import { VoiceState } from 'src/app/features/voice/store/voice.store'; -import { selectSettingsState, selectVoiceState } from 'src/app/store'; - -@Component({ - selector: 'app-home-tabs', - templateUrl: 'tabs.page.html', - styleUrls: ['tabs.page.scss'] -}) -export class TabsPage { - public settingsState$: Observable; - public voiceState$: Observable; - - constructor(private store: Store, private voiceStore: Store,) { - this.settingsState$ = this.store.select(selectSettingsState); - this.voiceState$ = this.voiceStore.select(selectVoiceState); - } -} diff --git a/src/app/features/home/providers/home.ts b/src/app/features/home/providers/home.ts deleted file mode 100644 index bccc122..0000000 --- a/src/app/features/home/providers/home.ts +++ /dev/null @@ -1,184 +0,0 @@ -import { Injectable, Inject } from "@angular/core"; -import { HttpClient } from "@angular/common/http"; -import { Observable, forkJoin, Subscription } from "rxjs"; -import { map, take } from "rxjs/operators"; -import { - CallPrioritiesService, - CallsService, - CallTypesService, - ConfigService, - ConnectionState, - Consts, - EventsService, - GroupsService, - SecurityService, - SignalRService, - StatusesService, - UnitRolesService, - UnitsService -} from '@resgrid/ngx-resgridlib'; -import * as _ from "lodash"; -import { AppPayload } from "../models/appPayload"; -import { Store } from "@ngrx/store"; -import { HomeState } from "../store/home.store"; -import { SettingsState } from "../../settings/store/settings.store"; -import { selectIsLoggedInState, selectSettingsState } from "src/app/store"; -import * as HomeActions from "../actions/home.actions"; -import { StorageProvider } from "src/app/providers/storage"; -import { Platform } from "@ionic/angular"; -import { environment } from "src/environments/environment"; - -@Injectable({ - providedIn: "root", -}) -export class HomeProvider { - public isLoggedInState$: Observable; - - constructor( - public http: HttpClient, - private unitsProvider: UnitsService, - private callsProvider: CallsService, - private callPrioritiesProvider: CallPrioritiesService, - private statusesService: StatusesService, - private unitRolesService: UnitRolesService, - private callTypesProvider: CallTypesService, - private homeStore: Store, - private settingsStore: Store, - private storageProvider: StorageProvider, - private groupsProvider: GroupsService, - private signalRProvider: SignalRService, - private events: EventsService, - private consts: Consts, - private platform: Platform, - private configService: ConfigService, - private securityProvider: SecurityService - ) { - this.isLoggedInState$ = this.settingsStore.select(selectIsLoggedInState); - - const that = this; - setTimeout(function(){ - that.isLoggedInState$.subscribe((isLoggedIn) => { - if (isLoggedIn) { - that.homeStore.dispatch( - new HomeActions.LoadAppData() - ); - } - }); - }, 1000); - } - - public getAppData(): Observable { - const getUnits = this.unitsProvider.getAllUnits(); - const getCalls = this.callsProvider.getActiveCalls(); - const getCallPriorities = this.callPrioritiesProvider.getAllCallPriorites(); - const getunitStatuses = this.statusesService.getAllUnitStatuses(); - //const getUnitRolesAssignments = this.unitRolesService.getAllUnitRolesAndAssignmentsForDepartment(); - const getCallTypes = this.callTypesProvider.getAllCallTypes(); - const getActiveUnit = this.storageProvider.getActiveUnit(); - const getActiveCall = this.storageProvider.getActiveCall(); - const getGroups = this.groupsProvider.getallGroups(); - const getConfig = this.configService.getConfig(environment.appKey, true); - const getCurrentUserRights = this.securityProvider.applySecurityRights(); - - return forkJoin({ - units: getUnits, - calls: getCalls, - priorities: getCallPriorities, - unitStatuses: getunitStatuses, - //roleAssignments: getUnitRolesAssignments, - callTypes: getCallTypes, - groups: getGroups, - activeUnit: getActiveUnit, - activeCall: getActiveCall, - config: getConfig, - currentUserRights: getCurrentUserRights - }).pipe( - map((results) => { - return { - Units: results.units.Data, - Calls: results.calls.Data, - CallPriorties: results.priorities.Data, - UnitStatuses: results.unitStatuses.Data, - //UnitRoleAssignments: results.roleAssignments.Data, - UnitRoleAssignments: [], - CallTypes: results.callTypes.Data, - Groups: results.groups.Data, - ActiveUnitId: results.activeUnit, - ActiveCallId: results.activeCall, - IsMobileApp: this.platform.is("ios") || this.platform.is("android"), - Config: results.config.Data, - Rights: results.currentUserRights - }; - }) - ); - } - - public startSignalR() { - this.settingsStore - .select(selectSettingsState) - .pipe(take(1)) - .subscribe((settings) => { - if (settings && settings.user && settings.user.departmentId) { - this.signalRProvider.connectionState$.subscribe( - (state: ConnectionState) => { - if (state === ConnectionState.Disconnected) { - this.signalRProvider.restart(settings.user.departmentId); - } - } - ); - - this.signalRProvider.start(settings.user.departmentId); - this.init(); - } - }); - } - - public stopSignalR() { - this.signalRProvider.stop(); - } - - public init() { - this.events.subscribe( - this.consts.SIGNALR_EVENTS.PERSONNEL_STATUS_UPDATED, - (data: any) => { - this.homeStore.dispatch(new HomeActions.RefreshMapData()); - } - ); - this.events.subscribe( - this.consts.SIGNALR_EVENTS.UNIT_STATUS_UPDATED, - (data: any) => { - this.homeStore.dispatch(new HomeActions.RefreshMapData()); - } - ); - this.events.subscribe( - this.consts.SIGNALR_EVENTS.CALLS_UPDATED, - (data: any) => { - this.homeStore.dispatch(new HomeActions.RefreshMapData()); - } - ); - this.events.subscribe( - this.consts.SIGNALR_EVENTS.CALL_ADDED, - (data: any) => { - this.homeStore.dispatch(new HomeActions.RefreshMapData()); - } - ); - this.events.subscribe( - this.consts.SIGNALR_EVENTS.CALL_CLOSED, - (data: any) => { - this.homeStore.dispatch(new HomeActions.RefreshMapData()); - } - ); - this.events.subscribe( - this.consts.SIGNALR_EVENTS.PERSONNEL_LOCATION_UPDATED, - (data: any) => { - this.homeStore.dispatch(new HomeActions.RefreshMapData()); - } - ); - this.events.subscribe( - this.consts.SIGNALR_EVENTS.UNIT_LOCATION_UPDATED, - (data: any) => { - this.homeStore.dispatch(new HomeActions.RefreshMapData()); - } - ); - } -} diff --git a/src/app/features/home/reducers/home.reducer.ts b/src/app/features/home/reducers/home.reducer.ts deleted file mode 100644 index 47c43b4..0000000 --- a/src/app/features/home/reducers/home.reducer.ts +++ /dev/null @@ -1,159 +0,0 @@ -import { - CallPriorityResultData, - CallResultData, - UnitResultData, - UnitTypeStatusResultData, -} from '@resgrid/ngx-resgridlib'; -import { HomeActionsUnion, HomeActionTypes } from '../actions/home.actions'; -import { HomeState, initialState } from '../store/home.store'; -import * as _ from 'lodash'; - -export function reducer( - state: HomeState = initialState, - action: HomeActionsUnion -): HomeState { - switch (action.type) { - case HomeActionTypes.LOADING_MAP: - return { - ...state, - }; - case HomeActionTypes.LOADING_MAP_SUCCESS: - return { - ...state, - mapData: action.payload, - }; - case HomeActionTypes.LOADING_MAP_FAIL: - return { - ...state, - }; - case HomeActionTypes.GEOLOCATION_LOCATION_UPDATE: - return { - ...state, - currentPosition: action.payload, - }; - case HomeActionTypes.GEOLOCATION_LOCATION_UPDATE_SENT: - return { - ...state, - currentPositionTimestamp: new Date(), - }; - case HomeActionTypes.LOADING_APP_DATA_SUCCESS: - let activeUnit: UnitResultData = null; - let activeStatuses: UnitTypeStatusResultData = null; - let activeCall: CallResultData = null; - let activePriority: CallPriorityResultData = null; - - if (action.payload.ActiveUnitId) { - activeUnit = _.find(action.payload.Units, [ - 'UnitId', - action.payload.ActiveUnitId, - ]); - - const defaultStatuses = _.find(action.payload.UnitStatuses, [ - 'UnitType', - '0', - ]); - - if (activeUnit && activeUnit.Type) { - const statusesForType = _.find(action.payload.UnitStatuses, [ - 'UnitType', - activeUnit.Type.toString(), - ]); - - if (statusesForType) { - activeStatuses = statusesForType; - } else { - activeStatuses = defaultStatuses; - } - } else { - activeStatuses = defaultStatuses; - } - } - - if (action.payload.ActiveCallId) { - activeCall = _.find(action.payload.Calls, [ - 'CallId', - action.payload.ActiveCallId, - ]); - - const defaultPriority = _.find(action.payload.CallPriorties, ['Id', 0]); - - if (activeCall) { - const priorityForCall = _.find(action.payload.CallPriorties, [ - 'Id', - activeCall.Priority, - ]); - - if (priorityForCall) { - activePriority = priorityForCall; - } else { - activePriority = defaultPriority; - } - } else { - activePriority = defaultPriority; - } - } - - return { - ...state, - units: action.payload.Units, - calls: action.payload.Calls, - callPriorties: action.payload.CallPriorties, - callTypes: action.payload.CallTypes, - unitStatuses: action.payload.UnitStatuses, - //unitRoleAssignments: action.payload.UnitRoleAssignments, - groups: action.payload.Groups, - activeUnit: activeUnit, - activeStatuses: activeStatuses, - activeCall: activeCall, - activePriority: activePriority, - isMobileApp: action.payload.IsMobileApp, - config: action.payload.Config, - rights: action.payload.Rights, - }; - case HomeActionTypes.SET_ACTIVEUNIT: - return { - ...state, - activeUnit: action.unit, - activeStatuses: action.statuses, - }; - case HomeActionTypes.SET_ACTIVECALL: - return { - ...state, - activeCall: action.call, - activePriority: action.priority, - }; - case HomeActionTypes.GET_CURRENT_STATUS_SET: - return { - ...state, - currentStatus: action.status, - }; - //case HomeActionTypes.GET_CURRENT_ROLES_SET: - // return { - // ...state, - // roles: action.roles, - // }; - case HomeActionTypes.REFRESH_MAP_DATA: - const now = new Date(); - - return { - ...state, - mapDataTimestamp: now.toUTCString(), - }; - case HomeActionTypes.PUSH_CALLRECEIVED: - return { - ...state, - pushData: action.pushData, - }; - default: - return state; - } -} - -export const getCurrentPositionState = (state: HomeState) => - state.currentPosition; -export const getCurrentUnitStatus = (state: HomeState) => state.currentStatus; -export const getActiveUnit = (state: HomeState) => state.activeUnit; -export const getLastMapDataUpdate = (state: HomeState) => - state.mapDataTimestamp; -export const getPushData = (state: HomeState) => state.pushData; -export const getConfigData = (state: HomeState) => state.config; diff --git a/src/app/features/home/store/home.store.ts b/src/app/features/home/store/home.store.ts deleted file mode 100644 index cc2d940..0000000 --- a/src/app/features/home/store/home.store.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { CallPriorityResultData, CallResultData, CallTypeResultData, DepartmentRightsResult, GetConfigResultData, GroupResultData, MapDataAndMarkersData, UnitResultData, UnitStatusResultData, UnitTypeStatusResultData } from '@resgrid/ngx-resgridlib'; -import { GeoLocation } from "src/app/models/geoLocation"; -import { PushData } from "src/app/models/pushData"; - -export interface HomeState { - mapData: MapDataAndMarkersData; - mapDataTimestamp: string; - - currentPositionTimestamp: Date; - currentPosition: GeoLocation; - - activeUnit: UnitResultData; - activeCall: CallResultData; - activePriority: CallPriorityResultData; - activeStatuses: UnitTypeStatusResultData; - - currentStatus: UnitStatusResultData; - //roles: UnitRoleResultData[]; - - pushData: PushData; - - // App Data - isMobileApp: boolean; - units: UnitResultData[]; - calls: CallResultData[]; - callPriorties: CallPriorityResultData[]; - callTypes: CallTypeResultData[]; - unitStatuses: UnitTypeStatusResultData[]; - //unitRoleAssignments: ActiveUnitRoleResultData[]; - groups: GroupResultData[]; - config: GetConfigResultData; - rights: DepartmentRightsResult; -} - -export const initialState: HomeState = { - mapData: null, - currentPosition: null, - activeUnit: null, - activeCall: null, - activeStatuses: new UnitTypeStatusResultData(), - activePriority: new CallPriorityResultData(), - units: [], - calls: [], - callPriorties: [], - callTypes: [], - unitStatuses: [], - //unitRoleAssignments: [], - groups: [], - currentStatus: null, - currentPositionTimestamp: null, - mapDataTimestamp: null, - pushData: null, - //roles: [], - isMobileApp: false, - rights: null, - config: null, -}; diff --git a/src/app/features/messages/actions/messages.actions.ts b/src/app/features/messages/actions/messages.actions.ts deleted file mode 100644 index 89de0f6..0000000 --- a/src/app/features/messages/actions/messages.actions.ts +++ /dev/null @@ -1,214 +0,0 @@ -import { Action } from '@ngrx/store'; -import { MessageRecipientInput, MessageResultData, RecipientsResultData } from '@resgrid/ngx-resgridlib'; - -export enum MessagesActionTypes { - LOAD_INBOX_MESSAGES = '[MESSAGES] LOAD_TODAY_SHIFTS', - LOAD_INBOX_MESSAGES_SUCCESS = '[MESSAGES] LOAD_INBOX_MESSAGES_SUCCESS', - LOAD_INBOX_MESSAGES_FAIL = '[MESSAGES] LOAD_INBOX_MESSAGES_FAIL', - LOAD_INBOX_MESSAGES_DONE = '[MESSAGES] LOAD_INBOX_MESSAGES_DONE', - LOAD_OUTBOX_MESSAGES = '[MESSAGES] LOAD_OUTBOX_MESSAGES', - LOAD_OUTBOX_MESSAGES_SUCCESS = '[MESSAGES] LOAD_OUTBOX_MESSAGES_SUCCESS', - LOAD_OUTBOX_MESSAGES_FAIL = '[MESSAGES] LOAD_OUTBOX_MESSAGES_FAIL', - LOAD_OUTBOX_MESSAGES_DONE = '[MESSAGES] LOAD_OUTBOX_MESSAGES_DONE', - VIEW_MESSAGE = '[MESSAGES] VIEW_MESSAGE', - VIEW_MESSAGE_SUCCESS = '[MESSAGES] VIEW_MESSAGE_SUCCESS', - VIEW_MESSAGE_FAIL = '[MESSAGES] VIEW_MESSAGE_FAIL', - RESPOND_TO_MESSAGE = '[MESSAGES] RESPOND_TO_MESSAGE', - RESPOND_TO_MESSAGE_SUCCESS = '[MESSAGES] RESPOND_TO_MESSAGE_SUCCESS', - RESPOND_TO_MESSAGE_FAIL = '[MESSAGES] RESPOND_TO_MESSAGE_FAIL', - RESPOND_TO_MESSAGE_DONE = '[MESSAGES] RESPOND_TO_MESSAGE_DONE', - DELETE_MESSAGE = '[MESSAGES] DELETE_MESSAGE', - DELETE_MESSAGE_SUCCESS = '[MESSAGES] DELETE_MESSAGE_SUCCESS', - DELETE_MESSAGE_FAIL = '[MESSAGES] DELETE_MESSAGE_FAIL', - DELETE_MESSAGE_DONE = '[MESSAGES] DELETE_MESSAGE_DONE', - NEW_MESSAGE = '[MESSAGES] NEW_MESSAGE', - NEW_MESSAGE_SUCCESS = '[MESSAGES] NEW_MESSAGE_SUCCESS', - SHOW_SELECT_RECIPIENTS = '[MESSAGES] SHOW_SELECT_RECIPIENTS', - SHOW_SELECT_RECIPIENTS_SUCCESS = '[MESSAGES] SHOW_SELECT_RECIPIENTS_SUCCESS', - CLOSE_SELECT_RECIPIENTS_MODAL = '[MESSAGES] CLOSE_SELECT_RECIPIENTS_MODAL', - UPDATE_SELECTED_RECIPIENTS = '[MESSAGES] UPDATE_SELECTED_RECIPIENTS', - CLOSE_NEW_MESSAGE_MODAL = '[MESSAGES] CLOSE_NEW_MESSAGE_MODAL', - SEND_MESSAGE = '[MESSAGES] SEND_MESSAGE', - SEND_MESSAGE_SUCCESS = '[MESSAGES] SEND_MESSAGE_SUCCESS', - SEND_MESSAGE_FAIL = '[MESSAGES] SEND_MESSAGE_FAIL', - SEND_MESSAGE_DONE = '[MESSAGES] SEND_MESSAGE_DONE', - DISMISS_MODAL = '[MESSAGES] DISMISS_MODAL', - CLEAR_MESSAGES = '[MESSAGES] CLEAR_MESSAGES', -} - -export class LoadInboxMessages implements Action { - readonly type = MessagesActionTypes.LOAD_INBOX_MESSAGES; - constructor() {} -} - -export class LoadInboxMessagesSuccess implements Action { - readonly type = MessagesActionTypes.LOAD_INBOX_MESSAGES_SUCCESS; - constructor(public payload: MessageResultData[]) {} -} - -export class LoadInboxMessagesFail implements Action { - readonly type = MessagesActionTypes.LOAD_INBOX_MESSAGES_FAIL; - constructor() {} -} - -export class LoadOutboxMessages implements Action { - readonly type = MessagesActionTypes.LOAD_OUTBOX_MESSAGES; - constructor() {} -} - -export class LoadOutboxMessagesSuccess implements Action { - readonly type = MessagesActionTypes.LOAD_OUTBOX_MESSAGES_SUCCESS; - constructor(public payload: MessageResultData[]) {} -} - -export class LoadOutboxMessagesFail implements Action { - readonly type = MessagesActionTypes.LOAD_OUTBOX_MESSAGES_FAIL; - constructor() {} -} - -export class ViewMessage implements Action { - readonly type = MessagesActionTypes.VIEW_MESSAGE; - constructor(public message: MessageResultData) {} -} - -export class ViewMessageSuccess implements Action { - readonly type = MessagesActionTypes.VIEW_MESSAGE_SUCCESS; - constructor() {} -} - -export class ViewMessageFail implements Action { - readonly type = MessagesActionTypes.VIEW_MESSAGE_FAIL; - constructor() {} -} - -export class RespondToMessage implements Action { - readonly type = MessagesActionTypes.RESPOND_TO_MESSAGE; - constructor(public messageId: string, public userId: string, public responseType: number, public note: string) {} -} - -export class RespondToMessageSuccess implements Action { - readonly type = MessagesActionTypes.RESPOND_TO_MESSAGE_SUCCESS; - constructor() {} -} - -export class RespondToMessageDone implements Action { - readonly type = MessagesActionTypes.RESPOND_TO_MESSAGE_DONE; - constructor(public payload: MessageResultData[]) {} -} - -export class RespondToMessageFail implements Action { - readonly type = MessagesActionTypes.RESPOND_TO_MESSAGE_FAIL; - constructor() {} -} - -export class DeleteMessage implements Action { - readonly type = MessagesActionTypes.DELETE_MESSAGE; - constructor(public messageId: string) {} -} - -export class DeleteMessageSuccess implements Action { - readonly type = MessagesActionTypes.DELETE_MESSAGE_SUCCESS; - constructor() {} -} - -export class DeleteMessageDone implements Action { - readonly type = MessagesActionTypes.DELETE_MESSAGE_DONE; - constructor(public payload: MessageResultData[]) {} -} - -export class DeleteMessageFail implements Action { - readonly type = MessagesActionTypes.DELETE_MESSAGE_FAIL; - constructor() {} -} - -export class NewMessage implements Action { - readonly type = MessagesActionTypes.NEW_MESSAGE; - constructor() {} -} - -export class ShowSelectRecipients implements Action { - readonly type = MessagesActionTypes.SHOW_SELECT_RECIPIENTS; - constructor() {} -} - -export class ShowSelectRecipientsSuccess implements Action { - readonly type = MessagesActionTypes.SHOW_SELECT_RECIPIENTS_SUCCESS; - constructor(public recipients: RecipientsResultData[]) {} -} - -export class CloseSelectRecipientsModal implements Action { - readonly type = MessagesActionTypes.CLOSE_SELECT_RECIPIENTS_MODAL; - constructor() {} -} - -export class UpdateSelectedRecipient implements Action { - readonly type = MessagesActionTypes.UPDATE_SELECTED_RECIPIENTS; - constructor(public id: string, public checked: boolean) {} -} - -export class CloseNewMessageModal implements Action { - readonly type = MessagesActionTypes.CLOSE_NEW_MESSAGE_MODAL; - constructor() {} -} - -export class SendMessage implements Action { - readonly type = MessagesActionTypes.SEND_MESSAGE; - constructor(public title: string, public body: string, public messageType: number, public recipients: MessageRecipientInput[]) {} -} - -export class SendMessageSuccess implements Action { - readonly type = MessagesActionTypes.SEND_MESSAGE_SUCCESS; - constructor() {} -} - -export class SendMessageDone implements Action { - readonly type = MessagesActionTypes.SEND_MESSAGE_DONE; - constructor() {} -} - -export class SendMessageFail implements Action { - readonly type = MessagesActionTypes.SEND_MESSAGE_FAIL; - constructor() {} -} - -export class DismissModal implements Action { - readonly type = MessagesActionTypes.DISMISS_MODAL; - constructor() {} -} - -export class ClearMessages implements Action { - readonly type = MessagesActionTypes.CLEAR_MESSAGES; - constructor() {} -} - -export type MessagesActionsUnion = - LoadInboxMessages - | LoadInboxMessagesSuccess - | LoadInboxMessagesFail - | LoadOutboxMessages - | LoadOutboxMessagesSuccess - | LoadOutboxMessagesFail - | DismissModal - | ViewMessage - | ViewMessageSuccess - | ViewMessageFail - | RespondToMessage - | RespondToMessageSuccess - | RespondToMessageFail - | RespondToMessageDone - | DeleteMessage - | DeleteMessageSuccess - | DeleteMessageFail - | DeleteMessageDone - | NewMessage - | ShowSelectRecipients - | ShowSelectRecipientsSuccess - | UpdateSelectedRecipient - | CloseNewMessageModal - | CloseSelectRecipientsModal - | SendMessage - | SendMessageSuccess - | SendMessageFail - | SendMessageDone - | ClearMessages - ; diff --git a/src/app/features/messages/effects/messages.effect.ts b/src/app/features/messages/effects/messages.effect.ts deleted file mode 100644 index bca7971..0000000 --- a/src/app/features/messages/effects/messages.effect.ts +++ /dev/null @@ -1,386 +0,0 @@ -import { Store } from '@ngrx/store'; -import { Actions, createEffect, ofType } from '@ngrx/effects'; -import { Injectable } from '@angular/core'; -import { - MenuController, - ModalController, - ToastController, -} from '@ionic/angular'; -import { - CalendarService, - MessagesService, - ShiftsService, - UtilsService, -} from '@resgrid/ngx-resgridlib'; -import { - exhaustMap, - mergeMap, - catchError, - map, - switchMap, - tap, -} from 'rxjs/operators'; -import { of } from 'rxjs'; -import { StorageProvider } from 'src/app/providers/storage'; -import * as _ from 'lodash'; -import { MessagesState } from '../store/messages.store'; -import { AlertProvider } from 'src/app/providers/alert'; -import * as messagesAction from '../actions/messages.actions'; -import { ViewMessagePage } from '../pages/view-message/view-message.page'; -import { NewMessagePage } from '../pages/new-message/new-message.page'; -import { SelectRecipientsPage } from '../pages/select-recipients/select-recipients.page'; -import { LoadingProvider } from 'src/app/providers/loading'; - -@Injectable() -export class MessagesEffects { - private _modalRef: HTMLIonModalElement; - - getInboxMessages$ = createEffect(() => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.LOAD_INBOX_MESSAGES - ), - tap(() => this.loadingProvider.show()), - mergeMap((action) => - this.messagesService.getInboxMessages().pipe( - map((data) => ({ - type: messagesAction.MessagesActionTypes - .LOAD_INBOX_MESSAGES_SUCCESS, - payload: data.Data, - })), - catchError(() => - of({ - type: messagesAction.MessagesActionTypes.LOAD_INBOX_MESSAGES_FAIL, - }) - ) - ) - ) - ) - ); - - getInboxMessagesSuccess$ = createEffect(() => - this.actions$.pipe( - ofType(messagesAction.MessagesActionTypes.LOAD_INBOX_MESSAGES_SUCCESS), - switchMap(() => this.loadingProvider.hide()), - map((data) => ({ - type: messagesAction.MessagesActionTypes.LOAD_INBOX_MESSAGES_DONE, - })) - ) - ); - - getOutboxMessages$ = createEffect(() => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.LOAD_OUTBOX_MESSAGES - ), - tap(() => this.loadingProvider.show()), - mergeMap((action) => - this.messagesService.getOutboxMessages().pipe( - map((data) => ({ - type: messagesAction.MessagesActionTypes - .LOAD_OUTBOX_MESSAGES_SUCCESS, - payload: data.Data, - })), - catchError(() => - of({ - type: messagesAction.MessagesActionTypes - .LOAD_OUTBOX_MESSAGES_FAIL, - }) - ) - ) - ) - ) - ); - - getOutboxMessagesSuccess$ = createEffect(() => - this.actions$.pipe( - ofType(messagesAction.MessagesActionTypes.LOAD_OUTBOX_MESSAGES_SUCCESS), - switchMap(() => this.loadingProvider.hide()), - map((data) => ({ - type: messagesAction.MessagesActionTypes.LOAD_OUTBOX_MESSAGES_DONE, - })) - ) - ); - - viewMessage$ = createEffect(() => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.VIEW_MESSAGE - ), - switchMap(() => - this.runModal(ViewMessagePage, 'modal-container-full', null, null) - ), - map((action) => ({ - type: messagesAction.MessagesActionTypes.VIEW_MESSAGE_SUCCESS, - })) - ) - ); - - respondToMessage$ = createEffect(() => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.RESPOND_TO_MESSAGE - ), - switchMap((action) => { - return this.messagesService - .respondToMessage(action.messageId, action.responseType, action.note) - .pipe( - map((data) => { - return { - type: messagesAction.MessagesActionTypes - .RESPOND_TO_MESSAGE_SUCCESS, - }; - }), - catchError(() => - of({ - type: messagesAction.MessagesActionTypes - .RESPOND_TO_MESSAGE_FAIL, - }) - ) - ); - }) - ) - ); - - respondToMessageSuccess$ = createEffect(() => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.RESPOND_TO_MESSAGE_SUCCESS - ), - exhaustMap((data) => this.closeModal(null)), - mergeMap((action) => - this.messagesService.getInboxMessages().pipe( - map((data) => ({ - type: messagesAction.MessagesActionTypes.RESPOND_TO_MESSAGE_DONE, - payload: data.Data, - })), - catchError(() => - of({ type: messagesAction.MessagesActionTypes.DISMISS_MODAL }) - ) - ) - ) - ) - ); - - deleteMessage$ = createEffect(() => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.DELETE_MESSAGE - ), - switchMap((action) => { - return this.messagesService.deleteMessage(action.messageId).pipe( - map((data) => { - return { - type: messagesAction.MessagesActionTypes.DELETE_MESSAGE_SUCCESS, - }; - }), - catchError(() => - of({ - type: messagesAction.MessagesActionTypes.DELETE_MESSAGE_FAIL, - }) - ) - ); - }) - ) - ); - - deleteMessageSuccess$ = createEffect(() => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.DELETE_MESSAGE_SUCCESS - ), - exhaustMap((data) => this.closeModal(null)), - mergeMap((action) => - this.messagesService.getInboxMessages().pipe( - map((data) => ({ - type: messagesAction.MessagesActionTypes.DELETE_MESSAGE_DONE, - payload: data.Data, - })), - catchError(() => - of({ type: messagesAction.MessagesActionTypes.DISMISS_MODAL }) - ) - ) - ) - ) - ); - - newMessage$ = createEffect(() => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.NEW_MESSAGE - ), - switchMap(() => - this.runModal(NewMessagePage, 'modal-container-full', null, null) - ), - map((action) => ({ - type: messagesAction.MessagesActionTypes.NEW_MESSAGE_SUCCESS, - })) - ) - ); - - showSelectRecipients$ = createEffect(() => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.SHOW_SELECT_RECIPIENTS - ), - switchMap((action) => { - return this.messagesService.getRecipients(true, false).pipe( - map((data) => { - return { - type: messagesAction.MessagesActionTypes - .SHOW_SELECT_RECIPIENTS_SUCCESS, - recipients: data.Data, - }; - }), - catchError(() => - of({ - type: messagesAction.MessagesActionTypes.DELETE_MESSAGE_FAIL, - }) - ) - ); - }) - ) - ); - - showSelectRecipientsSuccess$ = createEffect( - () => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.SHOW_SELECT_RECIPIENTS_SUCCESS - ), - exhaustMap((data) => - this.runModal( - SelectRecipientsPage, - 'modal-container-full', - null, - 'SelectRecipientsModal' - ) - ) - ), - { dispatch: false } - ); - - dismissSelectRecipientsModal$ = createEffect( - () => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.CLOSE_SELECT_RECIPIENTS_MODAL - ), - exhaustMap((data) => this.closeModal('SelectRecipientsModal')) - ), - { dispatch: false } - ); - - closeNewMessageModal$ = createEffect(() => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.CLOSE_NEW_MESSAGE_MODAL - ), - map((action) => ({ - type: messagesAction.MessagesActionTypes.DISMISS_MODAL, - })) - ) - ); - - sendMessage$ = createEffect(() => - this.actions$.pipe( - ofType( - messagesAction.MessagesActionTypes.SEND_MESSAGE - ), - switchMap((action) => { - return this.messagesService - .sendMessage( - action.title, - action.body, - action.messageType, - action.recipients - ) - .pipe( - map((data) => { - return { - type: messagesAction.MessagesActionTypes - .CLOSE_NEW_MESSAGE_MODAL, - }; - }), - catchError(() => - of({ - type: messagesAction.MessagesActionTypes.SEND_MESSAGE_FAIL, - }) - ) - ); - }) - ) - ); - - dismissModal$ = createEffect( - () => - this.actions$.pipe( - ofType(messagesAction.MessagesActionTypes.DISMISS_MODAL), - exhaustMap((data) => this.closeModal(null)) - ), - { dispatch: false } - ); - - constructor( - private actions$: Actions, - private store: Store, - private messagesService: MessagesService, - private toastController: ToastController, - private menuCtrl: MenuController, - private modalController: ModalController, - private storageProvider: StorageProvider, - private utilsProvider: UtilsService, - private alertProvider: AlertProvider, - private loadingProvider: LoadingProvider - ) {} - - showToast = async (message) => { - const toast = await this.toastController.create({ - message: message, - duration: 3000, - }); - toast.present(); - }; - - runModal = async (component, cssClass, properties, id) => { - //await this.menuCtrl.close(); - - if (!cssClass) { - cssClass = 'modal-container'; - } - - if (!id) { - id = 'MessagesFeatureModal'; - } - - //await this.closeModal(id); - - this._modalRef = await this.modalController.create({ - component: component, - cssClass: cssClass, - componentProps: { - info: properties, - }, - id: id, - }); - - return this._modalRef.present(); - }; - - closeModal = async (id) => { - if (!id) { - id = 'MessagesFeatureModal'; - } - - this.modalController.getTop().then(async (modal) => { - if (modal) { - await this.modalController.dismiss(null, null, id); - } - }); - - //if (this._modalRef) { - // await this.modalController.dismiss(null, null, id); - // this._modalRef = null; - //} - }; -} diff --git a/src/app/features/messages/messages-routing.module.ts b/src/app/features/messages/messages-routing.module.ts deleted file mode 100644 index ba5eb92..0000000 --- a/src/app/features/messages/messages-routing.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - { - path: '', - redirectTo: 'list', - pathMatch: 'full' - }, - { - path: 'list', - loadChildren: () => import('./pages/messages-list/messages-list.module').then(m => m.MessagesListModule) - }, -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class MessagesRoutingModule {} diff --git a/src/app/features/messages/messages.module.ts b/src/app/features/messages/messages.module.ts deleted file mode 100644 index c334a2e..0000000 --- a/src/app/features/messages/messages.module.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { NgModule } from '@angular/core'; -import { StoreModule } from '@ngrx/store'; -import { EffectsModule } from '@ngrx/effects'; -import { CommonModule } from '@angular/common'; -import { ReactiveFormsModule, FormsModule } from '@angular/forms'; -import { MessagesRoutingModule } from './messages-routing.module'; -import { reducer } from './reducers/messages.reducer'; -import { MessagesEffects } from './effects/messages.effect'; -import { IonicModule } from '@ionic/angular'; -import { HammerModule } from '@angular/platform-browser'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { TranslateModule } from '@ngx-translate/core'; -import { ShellModule } from 'src/app/shell/shell.module'; -import { ComponentsModule } from 'src/app/components/components.module'; -import { CalendarModule } from 'angular-calendar'; -import { ViewMessagePage } from './pages/view-message/view-message.page'; -import { NewMessagePage } from './pages/new-message/new-message.page'; -import { SelectRecipientsPage } from './pages/select-recipients/select-recipients.page'; - -@NgModule({ - declarations: [ - ViewMessagePage, - NewMessagePage, - SelectRecipientsPage - ], - imports: [ - IonicModule, - CommonModule, - FormsModule, - ReactiveFormsModule, - MessagesRoutingModule, - StoreModule.forFeature('messagesModule', reducer), - EffectsModule.forFeature([MessagesEffects]), - HammerModule, - NgxResgridLibModule, - TranslateModule, - ShellModule, - TranslateModule, - ComponentsModule, - CalendarModule, - ], - providers: [], - exports: [ - ViewMessagePage, - NewMessagePage, - SelectRecipientsPage - ] -}) -export class MessagesModule { } diff --git a/src/app/features/messages/pages/messages-list/messages-list.module.ts b/src/app/features/messages/pages/messages-list/messages-list.module.ts deleted file mode 100644 index dfa3bf3..0000000 --- a/src/app/features/messages/pages/messages-list/messages-list.module.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { MessagesListPage } from './messages-list.page'; -import { RouterModule } from '@angular/router'; -import { TranslateModule } from '@ngx-translate/core'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { HammerModule } from '@angular/platform-browser'; -import { ShellModule } from 'src/app/shell/shell.module'; -import { ComponentsModule } from 'src/app/components/components.module'; -import { CalendarModule, DateAdapter } from 'angular-calendar'; -import { adapterFactory } from 'angular-calendar/date-adapters/date-fns'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - RouterModule.forChild([ - { - path: '', - component: MessagesListPage - } - ]), - TranslateModule, - HammerModule, - NgxResgridLibModule, - ShellModule, - ComponentsModule, - CalendarModule.forRoot({ - provide: DateAdapter, - useFactory: adapterFactory, - }), - ], - declarations: [MessagesListPage] -}) -export class MessagesListModule {} diff --git a/src/app/features/messages/pages/messages-list/messages-list.page.html b/src/app/features/messages/pages/messages-list/messages-list.page.html deleted file mode 100644 index c8a61cc..0000000 --- a/src/app/features/messages/pages/messages-list/messages-list.page.html +++ /dev/null @@ -1,85 +0,0 @@ - -
- - - {{ 'messagesPage.inboxTab' | translate }} - - - {{ 'messagesPage.outboxTab' | translate }} - - -
- -
-
- - - - - - - - -
- -
- - - - - - - - -
-
- - - - - -
\ No newline at end of file diff --git a/src/app/features/messages/pages/messages-list/messages-list.page.scss b/src/app/features/messages/pages/messages-list/messages-list.page.scss deleted file mode 100644 index 878cc31..0000000 --- a/src/app/features/messages/pages/messages-list/messages-list.page.scss +++ /dev/null @@ -1,42 +0,0 @@ -.email { - margin-bottom: 6px; - - ion-label { - white-space: pre; - } - - .excerpt { - padding-top: 4px; - } - - .date { - font-size: small; - } - } - - ion-avatar { - width: 40px; - height: 40px; - } - - .email-circle { - width: 40px; - height: 40px; - border-radius: 50%; - color: #e4e4e4; - text-transform: capitalize; - font-weight: 500; - - display: flex; - align-items: center; - justify-content: center; - } - - .user-image { - height: 50px; - width: 50px; - border-radius: 50%; - background-position: center; - background-size: cover; - background-repeat: no-repeat; - } \ No newline at end of file diff --git a/src/app/features/messages/pages/messages-list/messages-list.page.ts b/src/app/features/messages/pages/messages-list/messages-list.page.ts deleted file mode 100644 index 9b843e1..0000000 --- a/src/app/features/messages/pages/messages-list/messages-list.page.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { Component } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable, Subject } from 'rxjs'; -import { - selectMessagesState, -} from 'src/app/store'; -import { MessagesState } from '../../store/messages.store'; -import * as MessagesActions from '../../actions/messages.actions'; -import { - CalendarEvent, - CalendarView, -} from 'angular-calendar'; -import { - MessageResultData, - SecurityService, - UtilsService, -} from '@resgrid/ngx-resgridlib'; -import { SubSink } from 'subsink'; -import * as _ from 'lodash'; -import { environment } from 'src/environments/environment'; - -@Component({ - selector: 'app-messages-list', - templateUrl: './messages-list.page.html', - styleUrls: ['./messages-list.page.scss'], -}) -export class MessagesListPage { - public tabType: string = 'received'; - public viewDate: Date = new Date(); - public refresh = new Subject(); - public activeDayIsOpen: boolean = true; - public view: CalendarView = CalendarView.Month; - public messagesState$: Observable; - private subs = new SubSink(); - public events: CalendarEvent<{ item: any }>[] = []; - - constructor( - private messagesStore: Store, - private utilsProvider: UtilsService, - private securityService: SecurityService - ) { - this.messagesState$ = this.messagesStore.select(selectMessagesState); - } - - ionViewDidEnter() { - this.loadInbox(); - } - - ionViewDidLeave() { - this.messagesStore.dispatch(new MessagesActions.ClearMessages()); - - if (this.subs) { - this.subs.unsubscribe(); - } - } - - public viewMessage(message: MessageResultData) { - this.messagesStore.dispatch(new MessagesActions.ViewMessage(message)); - } - - public getAvatarUrl(userId: string) { - return ( - environment.baseApiUrl + - environment.resgridApiUrl + - '/Avatars/Get?id=' + - userId - ); - } - - public segmentChanged(ev: any) { - if (ev && ev.detail && ev.detail.value) { - if (ev.detail.value === 'received') { - this.loadInbox(); - } else if (ev.detail.value === 'sent') { - this.loadOutbox(); - } - } - } - - public canCreateMessage() { - return this.securityService.canUserCreateMessages(); - } - - public newMessage() { - this.messagesStore.dispatch(new MessagesActions.NewMessage()); - } - - public refreshInbox(event) { - this.loadInbox(); - - setTimeout(() => { - event.target.complete(); - }, 1000); - } - - public refreshOutbox(event) { - this.loadOutbox(); - - setTimeout(() => { - event.target.complete(); - }, 1000); - } - - private loadInbox() { - this.messagesStore.dispatch(new MessagesActions.LoadInboxMessages()); - } - - private loadOutbox() { - this.messagesStore.dispatch(new MessagesActions.LoadOutboxMessages()); - } -} diff --git a/src/app/features/messages/pages/new-message/new-message.page.html b/src/app/features/messages/pages/new-message/new-message.page.html deleted file mode 100644 index d4c2b2f..0000000 --- a/src/app/features/messages/pages/new-message/new-message.page.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - {{'newMessagePage.title' | translate}} - - - - - - - - - - - - {{'newMessagePage.recipientsLabel' | translate}} - {{recipientList}} - - - - - - {{'newMessagePage.typeLabel' | translate}} - - {{'newMessagePage.messageType' | translate}} - {{'newMessagePage.callbackType' | translate}} - {{'newMessagePage.pollType' | translate}} - - - - {{'newMessagePage.subjectLabel' | translate}} - - - - {{'newMessagePage.bodyLabel' | translate}} - - - - - - - - - - - {{'newMessagePage.sendButton' | translate}} - - - - - - - \ No newline at end of file diff --git a/src/app/features/messages/pages/new-message/new-message.page.scss b/src/app/features/messages/pages/new-message/new-message.page.scss deleted file mode 100644 index 878cc31..0000000 --- a/src/app/features/messages/pages/new-message/new-message.page.scss +++ /dev/null @@ -1,42 +0,0 @@ -.email { - margin-bottom: 6px; - - ion-label { - white-space: pre; - } - - .excerpt { - padding-top: 4px; - } - - .date { - font-size: small; - } - } - - ion-avatar { - width: 40px; - height: 40px; - } - - .email-circle { - width: 40px; - height: 40px; - border-radius: 50%; - color: #e4e4e4; - text-transform: capitalize; - font-weight: 500; - - display: flex; - align-items: center; - justify-content: center; - } - - .user-image { - height: 50px; - width: 50px; - border-radius: 50%; - background-position: center; - background-size: cover; - background-repeat: no-repeat; - } \ No newline at end of file diff --git a/src/app/features/messages/pages/new-message/new-message.page.ts b/src/app/features/messages/pages/new-message/new-message.page.ts deleted file mode 100644 index 1f0b5b4..0000000 --- a/src/app/features/messages/pages/new-message/new-message.page.ts +++ /dev/null @@ -1,164 +0,0 @@ -import { Component } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable, Subject } from 'rxjs'; -import { selectMessagesState, selectRecipientsState, selectSettingsState } from 'src/app/store'; -import { MessagesState } from '../../store/messages.store'; -import { CalendarEvent, CalendarView } from 'angular-calendar'; -import { MessageRecipientInput, MessageResultData, RecipientsResultData, UtilsService } from '@resgrid/ngx-resgridlib'; -import { SubSink } from 'subsink'; -import * as _ from 'lodash'; -import { environment } from 'src/environments/environment'; -import * as MessagesActions from '../../actions/messages.actions'; -import { SettingsState } from 'src/app/features/settings/store/settings.store'; -import { take } from 'rxjs/operators'; -import { ModalController } from '@ionic/angular'; -import { SelectRecipientsPage } from '../select-recipients/select-recipients.page'; -import { AlertProvider } from 'src/app/providers/alert'; - -@Component({ - selector: 'app-new-message', - templateUrl: './new-message.page.html', - styleUrls: ['./new-message.page.scss'], -}) -export class NewMessagePage { - public messagesState$: Observable; - public settingsState$: Observable; - public recipients$: Observable; - private subs = new SubSink(); - public note: string; - public userId: string; - public recipientList: string; - public type: string = "0"; - public subject: string = ''; - public body: string = ''; - - constructor( - private messagesStore: Store, - private settingsStore: Store, - private utilsProvider: UtilsService, - private alertProvider: AlertProvider - ) { - this.messagesState$ = this.messagesStore.select(selectMessagesState); - this.settingsState$ = this.messagesStore.select(selectSettingsState); - this.recipients$ = this.messagesStore.select(selectRecipientsState); - } - - ionViewDidEnter() { - this.recipientList = 'Select Recipients...'; - this.type = "0"; - this.subject = ''; - this.body = ''; - - this.settingsState$.pipe(take(1)).subscribe((settingsState) => { - if (settingsState && settingsState.user) { - this.userId = settingsState.user.userId; - } - }); - - this.subs.sink = this.recipients$.subscribe((recipients) => { - if (recipients && recipients.length > 0) { - this.recipientList = ''; - - recipients.forEach(recipient => { - if (recipient.Selected) { - if (this.recipientList.length > 0) { - this.recipientList += ', ' + recipient.Name; - } else { - this.recipientList += recipient.Name; - } - } - }); - - if (this.recipientList.length === 0) { - this.recipientList = 'Select Recipients...'; - } - } else { - this.recipientList = 'Select Recipients...'; - } - }); - } - - ionViewDidLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - public closeModal() { - this.messagesStore.dispatch(new MessagesActions.CloseNewMessageModal()); - } - - public selectRecipients() { - this.messagesState$.pipe(take(1)).subscribe((messageState) => { - if (messageState && messageState.recipients && messageState.recipients.length > 0) { - this.messagesStore.dispatch( - new MessagesActions.ShowSelectRecipientsSuccess(null) - ); - } else { - this.messagesStore.dispatch( - new MessagesActions.ShowSelectRecipients() - ); - } - }); - } - - public send() { - if (this.recipientList === '' || this.recipientList === 'Select Recipients...') { - this.alertProvider.showOkAlert( - 'Send Message Error', - '', - 'You must select at least one recipient.' - ) - return; - } - - if (this.subject === '') { - this.alertProvider.showOkAlert( - 'Send Message Error', - '', - 'You must enter a subject.' - ) - return; - } - - if (this.body === '') { - this.alertProvider.showOkAlert( - 'Send Message Error', - '', - 'You must supply a body for the message.' - ) - return; - } - - this.messagesState$.pipe(take(1)).subscribe((messagesState) => { - if (messagesState && messagesState.recipients && messagesState.recipients.length > 0) { - let recipients: MessageRecipientInput[] = []; - - messagesState.recipients.forEach(recipient => { - - let recipientType = 0; - - if (recipient.Type === 'Personnel') { - recipientType = 1; - } if (recipient.Type === 'Groups') { - recipientType = 2; - } if (recipient.Type === 'Roles') { - recipientType = 3; - } - - if (recipient.Selected) { - recipients.push({ - Id: recipient.Id, - Type: recipientType, - Name: recipient.Name - }); - } - }); - - this.messagesStore.dispatch( - new MessagesActions.SendMessage(this.subject, this.body, parseInt(this.type), recipients) - ); - } - }); - } -} diff --git a/src/app/features/messages/pages/select-recipients/select-recipients.page.html b/src/app/features/messages/pages/select-recipients/select-recipients.page.html deleted file mode 100644 index 4d9454d..0000000 --- a/src/app/features/messages/pages/select-recipients/select-recipients.page.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - {{'selectRecipientsPage.title' | translate}} - - - - - - - - - - - {{group.key}} - - {{option.Name}} - - - - - - - - - - - {{'selectRecipientsPage.saveButton' | translate}} - - - - - - \ No newline at end of file diff --git a/src/app/features/messages/pages/select-recipients/select-recipients.page.scss b/src/app/features/messages/pages/select-recipients/select-recipients.page.scss deleted file mode 100644 index 878cc31..0000000 --- a/src/app/features/messages/pages/select-recipients/select-recipients.page.scss +++ /dev/null @@ -1,42 +0,0 @@ -.email { - margin-bottom: 6px; - - ion-label { - white-space: pre; - } - - .excerpt { - padding-top: 4px; - } - - .date { - font-size: small; - } - } - - ion-avatar { - width: 40px; - height: 40px; - } - - .email-circle { - width: 40px; - height: 40px; - border-radius: 50%; - color: #e4e4e4; - text-transform: capitalize; - font-weight: 500; - - display: flex; - align-items: center; - justify-content: center; - } - - .user-image { - height: 50px; - width: 50px; - border-radius: 50%; - background-position: center; - background-size: cover; - background-repeat: no-repeat; - } \ No newline at end of file diff --git a/src/app/features/messages/pages/select-recipients/select-recipients.page.ts b/src/app/features/messages/pages/select-recipients/select-recipients.page.ts deleted file mode 100644 index 5ff8ec3..0000000 --- a/src/app/features/messages/pages/select-recipients/select-recipients.page.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { ChangeDetectorRef, Component, ViewChild } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable, Subject } from 'rxjs'; -import { - selectHomeState, - selectMessagesState, - selectRecipientsState, - selectSettingsState, -} from 'src/app/store'; -import { MessagesState } from '../../store/messages.store'; -import { CalendarEvent, CalendarView } from 'angular-calendar'; -import { MessageResultData, RecipientsResultData, UtilsService } from '@resgrid/ngx-resgridlib'; -import { SubSink } from 'subsink'; -import * as _ from 'lodash'; -import { environment } from 'src/environments/environment'; -import * as MessagesActions from '../../actions/messages.actions'; -import { SettingsState } from 'src/app/features/settings/store/settings.store'; -import { take } from 'rxjs/operators'; -import { HomeState } from 'src/app/features/home/store/home.store'; -import { IonContent, ModalController } from '@ionic/angular'; - -@Component({ - selector: 'app-select-recipients', - templateUrl: './select-recipients.page.html', - styleUrls: ['./select-recipients.page.scss'], -}) -export class SelectRecipientsPage { - private position: number = 0; - private subs = new SubSink(); - public messagesState$: Observable; - public recipientsToMessage$: Observable; - public recipients: RecipientsResultData[] = []; - @ViewChild(IonContent) content: IonContent; - - constructor( - private messagesStore: Store, - private utilsProvider: UtilsService - ) { - this.messagesState$ = this.messagesStore.select(selectMessagesState); - this.recipientsToMessage$ = this.messagesStore.select(selectRecipientsState); - } - - ionViewDidEnter() { - this.subs.sink = this.recipientsToMessage$.subscribe((sendTo) => { - if (sendTo) { - this.recipients = sendTo; - if (this.position > 0) { - setTimeout(() => - this.content.scrollToPoint(0, this.position).then(() => {}) - ); - } - } - }); - } - - ionViewDidLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - public closeModal() { - this.messagesStore.dispatch( - new MessagesActions.CloseSelectRecipientsModal() - ); - } - - confirm() { - this.messagesStore.dispatch( - new MessagesActions.CloseSelectRecipientsModal() - ); - } - - public selectOption(event, id: string) { - var checked = event.target.checked; - - this.messagesStore.dispatch( - new MessagesActions.UpdateSelectedRecipient(id, checked) - ); - } - - public onScroll(event) { - if (event && event.detail && event.detail.scrollTop > 0) { - this.position = event.detail.scrollTop; - } - } -} diff --git a/src/app/features/messages/pages/view-message/view-message.page.html b/src/app/features/messages/pages/view-message/view-message.page.html deleted file mode 100644 index f215242..0000000 --- a/src/app/features/messages/pages/view-message/view-message.page.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - {{'viewMessagePage.title' | translate}} - - - - - - - - - -

{{(messagesState$ | async).viewMessage?.Subject}}

- - - - - - - -

{{(messagesState$ | async).viewMessage?.SendingName}}

-

{{'viewMessagePage.toYou' | translate}} • {{formatDate((messagesState$ | async).viewMessage?.SentOn)}}

-
-
-
- -
- -
- - - - {{'viewMessagePage.respondToMessage' | translate}} - - - -
- - - - {{'viewMessagePage.respondToMessageLabel' | translate}} - - - - - - - - - {{'viewMessagePage.respondToMessageYes' | translate}} - - - - - {{'viewMessagePage.respondToMessageMaybe' | translate}} - - - - - {{'viewMessagePage.respondToMessageNo' | translate}} - - - - -
- - - - {{'viewMessagePage.recipients' | translate}} - - - - - - - - - -

{{r.Name}}

-

{{formatDate(r.RespondedOn)}}

-
-
- -

{{r.Note}}

-

{{'viewMessagePage.respondToMessageYes' | translate}}

-

{{'viewMessagePage.respondToMessageNo' | translate}}

-

{{'viewMessagePage.respondToMessageMaybe' | translate}}

-
-
-
-
-
- - - - - - - {{'viewMessagePage.deleteButton' | translate}} - - - - - - - - {{'viewMessagePage.replyButton' | translate}} - - - - - - - - - - \ No newline at end of file diff --git a/src/app/features/messages/pages/view-message/view-message.page.scss b/src/app/features/messages/pages/view-message/view-message.page.scss deleted file mode 100644 index 878cc31..0000000 --- a/src/app/features/messages/pages/view-message/view-message.page.scss +++ /dev/null @@ -1,42 +0,0 @@ -.email { - margin-bottom: 6px; - - ion-label { - white-space: pre; - } - - .excerpt { - padding-top: 4px; - } - - .date { - font-size: small; - } - } - - ion-avatar { - width: 40px; - height: 40px; - } - - .email-circle { - width: 40px; - height: 40px; - border-radius: 50%; - color: #e4e4e4; - text-transform: capitalize; - font-weight: 500; - - display: flex; - align-items: center; - justify-content: center; - } - - .user-image { - height: 50px; - width: 50px; - border-radius: 50%; - background-position: center; - background-size: cover; - background-repeat: no-repeat; - } \ No newline at end of file diff --git a/src/app/features/messages/pages/view-message/view-message.page.ts b/src/app/features/messages/pages/view-message/view-message.page.ts deleted file mode 100644 index 9c38630..0000000 --- a/src/app/features/messages/pages/view-message/view-message.page.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { Component } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable, Subject } from 'rxjs'; -import { - selectMessagesState, selectSettingsState, -} from 'src/app/store'; -import { MessagesState } from '../../store/messages.store'; -import { - CalendarEvent, - CalendarView, -} from 'angular-calendar'; -import { MessageResultData, UtilsService } from '@resgrid/ngx-resgridlib'; -import { SubSink } from 'subsink'; -import * as _ from 'lodash'; -import { environment } from 'src/environments/environment'; -import * as MessagesActions from '../../actions/messages.actions'; -import { SettingsState } from 'src/app/features/settings/store/settings.store'; -import { take } from 'rxjs/operators'; - -@Component({ - selector: 'app-view-message', - templateUrl: './view-message.page.html', - styleUrls: ['./view-message.page.scss'], -}) -export class ViewMessagePage { - public tabType: string = 'received'; - public viewDate: Date = new Date(); - public refresh = new Subject(); - public activeDayIsOpen: boolean = true; - public view: CalendarView = CalendarView.Month; - public messagesState$: Observable; - public settingsState$: Observable; - private subs = new SubSink(); - public events: CalendarEvent<{ item: any }>[] = []; - public note: string; - public userId: string; - - constructor( - private messagesStore: Store, - private settingsStore: Store, - private utilsProvider: UtilsService - ) { - this.messagesState$ = this.messagesStore.select(selectMessagesState); - this.settingsState$ = this.messagesStore.select(selectSettingsState); - } - - ionViewDidEnter() { - this.settingsState$.pipe(take(1)).subscribe((settingsState) => { - if (settingsState && settingsState.user) { - this.userId = settingsState.user.userId; - } - }); - } - - ionViewDidLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - public isInTheFuture(message: MessageResultData) { - if (message && message.ExpiredOn && new Date(message.ExpiredOn) >= new Date()) { - return true; - } - - return false; - } - - public canSignup(message: MessageResultData) { - if (message && (message.Type === 1 || message.Type === 2)) { - let userRespond = _.find(message.Recipients, [ - 'UserId', - this.userId - ]); - - if (userRespond && userRespond.RespondedOn) { - return false; - } - - return true; - } - - return false; - } - - public closeModal() { - this.messagesStore.dispatch(new MessagesActions.DismissModal()); - } - - public setResponding(type: number) { - this.messagesState$.pipe(take(1)).subscribe((messageState) => { - if (messageState && messageState.viewMessage) { - this.messagesStore.dispatch(new MessagesActions.RespondToMessage(messageState.viewMessage.MessageId, this.userId, type, this.note)); - } - }); - } - - public delete() { - this.messagesState$.pipe(take(1)).subscribe((messageState) => { - if (messageState && messageState.viewMessage) { - this.messagesStore.dispatch(new MessagesActions.DeleteMessage(messageState.viewMessage.MessageId)); - } - }); - } - - public getAvatarUrl(userId: string) { - return ( - environment.baseApiUrl + - environment.resgridApiUrl + - '/Avatars/Get?id=' + - userId - ); - } - - public formatDate(date: string) { - if (date) - return this.utilsProvider.formatDateForDisplay(new Date(date), 'yyyy-MM-dd HH:mm Z'); - - return ''; - } - - public newMessage() { - this.messagesStore.dispatch(new MessagesActions.NewMessage()); - } -} diff --git a/src/app/features/messages/reducers/messages.reducer.ts b/src/app/features/messages/reducers/messages.reducer.ts deleted file mode 100644 index c6d87a0..0000000 --- a/src/app/features/messages/reducers/messages.reducer.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { MessagesState, initialState } from '../store/messages.store'; - -import * as _ from 'lodash'; -import { - MessagesActionsUnion, - MessagesActionTypes, -} from '../actions/messages.actions'; - -export function reducer( - state: MessagesState = initialState, - action: MessagesActionsUnion -): MessagesState { - switch (action.type) { - case MessagesActionTypes.LOAD_INBOX_MESSAGES_SUCCESS: - return { - ...state, - inboxMessages: action.payload, - }; - case MessagesActionTypes.LOAD_OUTBOX_MESSAGES_SUCCESS: - return { - ...state, - outboxMessages: action.payload, - }; - case MessagesActionTypes.VIEW_MESSAGE: - return { - ...state, - viewMessage: action.message, - }; - case MessagesActionTypes.RESPOND_TO_MESSAGE_DONE: - return { - ...state, - inboxMessages: action.payload, - }; - case MessagesActionTypes.DELETE_MESSAGE_DONE: - return { - ...state, - inboxMessages: action.payload, - }; - case MessagesActionTypes.SHOW_SELECT_RECIPIENTS_SUCCESS: - if (action.recipients && action.recipients.length > 0) { - return { - ...state, - recipients: action.recipients, - }; - } else { - return { - ...state, - }; - } - case MessagesActionTypes.UPDATE_SELECTED_RECIPIENTS: - let recipients = _.cloneDeep(state.recipients); - - if (recipients && recipients.length > 0) { - if (action.id !== '0') { - recipients.forEach((recipient) => { - if (recipient.Id == action.id) { - recipient.Selected = action.checked; - } - - if (recipient.Id === '0' && action.id !== '0') { - recipient.Selected = false; - } - }); - } else if (action.id === '0' && !action.checked) { - recipients.forEach((recipient) => { - recipient.Selected = false; - }); - } else if (action.id === '0' && action.checked) { - recipients.forEach((recipient) => { - if (recipient.Id == action.id) { - recipient.Selected = action.checked; - } else { - recipient.Selected = false; - } - }); - } - } - - return { - ...state, - recipients: recipients, - }; - case MessagesActionTypes.CLOSE_NEW_MESSAGE_MODAL: - let recipientsClear = _.cloneDeep(state.recipients); - - if (recipientsClear && recipientsClear.length > 0) { - recipientsClear.forEach((recipient) => { - recipient.Selected = false; - }); - } - - return { - ...state, - recipients: recipientsClear, - }; - case MessagesActionTypes.CLEAR_MESSAGES: - return { - ...state, - inboxMessages: null, - outboxMessages: null, - }; - default: - return state; - } -} - -export const getRecipients = (state: MessagesState) => state.recipients; diff --git a/src/app/features/messages/store/messages.store.ts b/src/app/features/messages/store/messages.store.ts deleted file mode 100644 index ca73c57..0000000 --- a/src/app/features/messages/store/messages.store.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { MessageResultData, RecipientsResultData, ShiftDaysResultData, ShiftResultData } from "@resgrid/ngx-resgridlib"; - - -export interface MessagesState { - inboxMessages: MessageResultData[]; - outboxMessages: MessageResultData[]; - viewMessage: MessageResultData; - recipients: RecipientsResultData[]; -} - -export const initialState: MessagesState = { - inboxMessages: null, - outboxMessages: null, - viewMessage: null, - recipients: null -}; \ No newline at end of file diff --git a/src/app/features/notes/actions/notes.actions.ts b/src/app/features/notes/actions/notes.actions.ts deleted file mode 100644 index 368885a..0000000 --- a/src/app/features/notes/actions/notes.actions.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { Action } from '@ngrx/store'; -import { CallProtocolsResultData, MapDataAndMarkersData, NoteCategoryResultData, NoteResultData } from '@resgrid/ngx-resgridlib'; - -export enum NotesActionTypes { - LOAD_NOTES = '[NOTES] LOAD_NOTES', - LOAD_NOTES_SUCCESS = '[NOTES] LOAD_NOTES_SUCCESS', - LOAD_NOTES_FAIL = '[NOTES] LOAD_NOTES_FAIL', - LOAD_NOTES_DONE = '[NOTES] LOAD_NOTES_DONE', - VIEW_NOTE = '[NOTES] VIEW_NOTE', - VIEW_NOTE_DONE = '[NOTES] VIEW_NOTE_DONE', - DISMISS_MODAL = '[NOTES] DISMISS_MODAL', - SAVE_NOTE = '[NOTES] SAVE_NOTE', - SAVE_NOTE_SUCCESS = '[NOTES] SAVE_NOTE_SUCCESS', - SAVE_NOTE_FAIL = '[NOTES] SAVE_NOTE_FAIL', - SAVE_NOTE_DONE = '[NOTES] SAVE_NOTE_DONE', - SHOW_NEW_NOTE_MODAL = '[NOTES] SHOW_NEW_NOTE_MODAL', - SHOW_NEW_NOTE_MODAL_SUCCESS = '[NOTES] SHOW_NEW_NOTE_MODAL_SUCCESS', - SHOW_NEW_NOTE_MODAL_DONE = '[NOTES] SHOW_NEW_NOTE_MODAL_DONE', -} - -export class LoadNotes implements Action { - readonly type = NotesActionTypes.LOAD_NOTES; - constructor() {} -} - -export class LoadNotesSuccess implements Action { - readonly type = NotesActionTypes.LOAD_NOTES_SUCCESS; - constructor(public payload: NoteResultData[]) {} -} - -export class LoadNotesFail implements Action { - readonly type = NotesActionTypes.LOAD_NOTES_FAIL; - constructor() {} -} - -export class LoadNotesDone implements Action { - readonly type = NotesActionTypes.LOAD_NOTES_DONE; - constructor() {} -} - -export class ViewNote implements Action { - readonly type = NotesActionTypes.VIEW_NOTE; - constructor(public note: NoteResultData) {} -} - -export class ViewNoteDone implements Action { - readonly type = NotesActionTypes.VIEW_NOTE_DONE; - constructor() {} -} - -export class SaveNote implements Action { - readonly type = NotesActionTypes.SAVE_NOTE; - constructor(public title: string, public body: string, public category: string, public isAdminOnly: boolean, public expiresOn: string) {} -} - -export class SaveNoteSuccess implements Action { - readonly type = NotesActionTypes.SAVE_NOTE_SUCCESS; - constructor(public payload: NoteResultData[]) {} -} - -export class SaveNoteFail implements Action { - readonly type = NotesActionTypes.SAVE_NOTE_FAIL; - constructor() {} -} - -export class SaveNoteDone implements Action { - readonly type = NotesActionTypes.SAVE_NOTE_DONE; - constructor() {} -} - -export class ShowNewNoteModal implements Action { - readonly type = NotesActionTypes.SHOW_NEW_NOTE_MODAL; - constructor() {} -} - -export class ShowNewNoteModalSuccess implements Action { - readonly type = NotesActionTypes.SHOW_NEW_NOTE_MODAL_SUCCESS; - constructor(public categories: NoteCategoryResultData[]) {} -} - -export class ShowNewNoteModalDone implements Action { - readonly type = NotesActionTypes.SHOW_NEW_NOTE_MODAL_DONE; - constructor() {} -} - -export class DismissModal implements Action { - readonly type = NotesActionTypes.DISMISS_MODAL; - constructor() {} -} - -export type NotesActionsUnion = - | LoadNotes - | LoadNotesSuccess - | LoadNotesFail - | LoadNotesDone - | ViewNote - | ViewNoteDone - | SaveNote - | SaveNoteSuccess - | SaveNoteFail - | ShowNewNoteModal - | ShowNewNoteModalSuccess - | ShowNewNoteModalDone - | SaveNoteDone - | DismissModal - ; diff --git a/src/app/features/notes/effects/notes.effect.ts b/src/app/features/notes/effects/notes.effect.ts deleted file mode 100644 index 0e3562a..0000000 --- a/src/app/features/notes/effects/notes.effect.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { Store } from '@ngrx/store'; -import { Actions, concatLatestFrom, createEffect, ofType } from '@ngrx/effects'; -import { Injectable } from '@angular/core'; -import { - MenuController, - ModalController, - ToastController, -} from '@ionic/angular'; -import * as notesAction from '../actions/notes.actions'; -import { CallProtocolsService, MappingService, NotesService, PersonnelService, UnitsService } from '@resgrid/ngx-resgridlib'; -import { - catchError, - exhaustMap, map, mergeMap, switchMap, tap, -} from 'rxjs/operators'; -import { StorageProvider } from 'src/app/providers/storage'; -import * as _ from 'lodash'; -import { NotesState } from '../store/notes.store'; -import { from, of } from 'rxjs'; -import { ViewNotePage } from '../pages/view-note/view-notepage'; -import { LoadingProvider } from 'src/app/providers/loading'; -import { NewNotePage } from '../pages/new-note/new-note.page'; - -@Injectable() -export class NotesEffects { - private _modalRef: HTMLIonModalElement; - - getNotesList$ = createEffect(() => - this.actions$.pipe( - ofType( - notesAction.NotesActionTypes.LOAD_NOTES - ), - tap(() => this.loadingProvider.show()), - mergeMap((action) => - this.notesProvider.getAllNotes().pipe( - map((data) => ({ - type: notesAction.NotesActionTypes.LOAD_NOTES_SUCCESS, - payload: data.Data, - })), - catchError(() => - of({ - type: notesAction.NotesActionTypes.LOAD_NOTES_FAIL, - }) - ) - ) - ) - ) - ); - - getNotesListSuccess$ = createEffect(() => - this.actions$.pipe( - ofType(notesAction.NotesActionTypes.LOAD_NOTES_SUCCESS), - switchMap(() => this.loadingProvider.hide()), - map((data) => ({ - type: notesAction.NotesActionTypes.LOAD_NOTES_DONE, - })) - ) - ); - - viewNote$ = createEffect(() => - this.actions$.pipe( - ofType( - notesAction.NotesActionTypes.VIEW_NOTE - ), - switchMap(() => - this.runModal(ViewNotePage, 'modal-container-full', null) - ), - map((action) => ({ - type: notesAction.NotesActionTypes.VIEW_NOTE_DONE, - })) - ) - ); - - saveNote$ = createEffect(() => - this.actions$.pipe( - ofType( - notesAction.NotesActionTypes.SAVE_NOTE - ), - tap(() => this.loadingProvider.show()), - mergeMap((action) => - this.notesProvider.saveNote(action.title, action.body, action.category, action.isAdminOnly, action.expiresOn).pipe( - map((data) => ({ - type: notesAction.NotesActionTypes.SAVE_NOTE_SUCCESS, - })), - catchError(() => - of({ - type: notesAction.NotesActionTypes.SAVE_NOTE_FAIL, - }) - ) - ) - ) - ) - ); - - saveNoteSuccess$ = createEffect(() => - this.actions$.pipe( - ofType(notesAction.NotesActionTypes.SAVE_NOTE_SUCCESS), - switchMap(async (action) => this.closeModal()), - switchMap(async (action) => this.loadingProvider.hide()), - map((data) => ({ - type: notesAction.NotesActionTypes.LOAD_NOTES, - })) - ) - ); - - saveNoteFail$ = createEffect(() => - this.actions$.pipe( - ofType(notesAction.NotesActionTypes.SAVE_NOTE_FAIL), - switchMap(async (action) => this.loadingProvider.hide()), - map((data) => ({ - type: notesAction.NotesActionTypes.SAVE_NOTE_DONE, - })) - ) - ); - - showNewNoteModal$ = createEffect(() => - this.actions$.pipe( - ofType( - notesAction.NotesActionTypes.SHOW_NEW_NOTE_MODAL - ), - tap(() => this.loadingProvider.show()), - mergeMap((action) => - this.notesProvider.getNoteCategories().pipe( - map((data) => ({ - type: notesAction.NotesActionTypes.SHOW_NEW_NOTE_MODAL_SUCCESS, - categories: data.Data, - })), - catchError(() => - of({ - type: notesAction.NotesActionTypes.LOAD_NOTES_FAIL, - }) - ) - ) - ) - ) - ); - - showNewNoteModalSuccess$ = createEffect(() => - this.actions$.pipe( - ofType(notesAction.NotesActionTypes.SHOW_NEW_NOTE_MODAL_SUCCESS), - exhaustMap((data) => this.runModal(NewNotePage, null, null, { - breakpoints: [0, 0.7], - initialBreakpoint: 0.7, - })), - switchMap(async (action) => this.loadingProvider.hide()), - map((data) => ({ - type: notesAction.NotesActionTypes.SHOW_NEW_NOTE_MODAL_DONE, - })) - ) - ); - - dismissModal$ = createEffect( - () => - this.actions$.pipe( - ofType(notesAction.NotesActionTypes.DISMISS_MODAL), - exhaustMap((data) => this.closeModal()) - ), - { dispatch: false } - ); - - constructor( - private actions$: Actions, - private store: Store, - private notesProvider: NotesService, - private toastController: ToastController, - private menuCtrl: MenuController, - private modalController: ModalController, - private storageProvider: StorageProvider, - private loadingProvider: LoadingProvider - ) {} - - showToast = async (message) => { - const toast = await this.toastController.create({ - message: message, - duration: 3000, - }); - toast.present(); - }; - - runModal = async (component, cssClass, properties, opts = {}) => { - await this.closeModal(); - await this.menuCtrl.close(); - - if (!cssClass) { - cssClass = 'modal-container'; - } - - this._modalRef = await this.modalController.create({ - component: component, - cssClass: cssClass, - componentProps: properties, - ...opts, - }); - - return from(this._modalRef.present()); - }; - - closeModal = async () => { - try { - //if (this._modalRef) { - await this.modalController.dismiss(); - this._modalRef = null; - //} - } catch (error) { } - }; -} diff --git a/src/app/features/notes/notes-routing.module.ts b/src/app/features/notes/notes-routing.module.ts deleted file mode 100644 index 8532687..0000000 --- a/src/app/features/notes/notes-routing.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - { - path: '', - redirectTo: 'list', - pathMatch: 'full' - }, - { - path: 'list', - loadChildren: () => import('./pages/notes-list/notes-list.module').then(m => m.NotesListModule) - }, - { - path: 'view', - loadChildren: () => import('./pages/view-note/view-note.module').then(m => m.ViewNoteModule) - }, -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class NotesRoutingModule {} diff --git a/src/app/features/notes/notes.module.ts b/src/app/features/notes/notes.module.ts deleted file mode 100644 index d62aab4..0000000 --- a/src/app/features/notes/notes.module.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { NgModule } from '@angular/core'; -import { StoreModule } from '@ngrx/store'; -import { EffectsModule } from '@ngrx/effects'; -import { CommonModule } from '@angular/common'; -import { ReactiveFormsModule, FormsModule } from '@angular/forms'; -import { NotesRoutingModule } from './notes-routing.module'; -import { reducer } from './reducers/notes.reducer'; -import { IonicModule } from '@ionic/angular'; -import { HammerModule } from '@angular/platform-browser'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { TranslateModule } from '@ngx-translate/core'; -import { NotesEffects } from './effects/notes.effect'; -import { ShellModel } from 'src/app/shell/data-store'; -import { ShellModule } from 'src/app/shell/shell.module'; -import { NewNotePage } from './pages/new-note/new-note.page'; - -@NgModule({ - declarations: [ - NewNotePage - ], - imports: [ - IonicModule, - CommonModule, - FormsModule, - ReactiveFormsModule, - NotesRoutingModule, - StoreModule.forFeature('notesModule', reducer), - EffectsModule.forFeature([NotesEffects]), - HammerModule, - NgxResgridLibModule, - TranslateModule, - ShellModule - ], - providers: [], - exports: [ - NewNotePage - ] -}) -export class NotesModule { } diff --git a/src/app/features/notes/pages/new-note/new-note.page.html b/src/app/features/notes/pages/new-note/new-note.page.html deleted file mode 100644 index cbc09fd..0000000 --- a/src/app/features/notes/pages/new-note/new-note.page.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - {{'newNotePage.title' | translate}} - - - - - - - - - - - - {{'newNotePage.titleLabel' | translate}} - - - - {{'newNotePage.categoryLabel' | translate}} - - {{ category.Category }} - - - - {{'newNotePage.doesNoteExpireLabel' | translate}} - - - - {{'newNotePage.expiresOnLabel' | translate}} - - - - {{'newNotePage.isAdminOnlyLabel' | translate}} - - - - {{'newNotePage.bodyLabel' | translate}} - - - - {{'newNotePage.saveButton' | translate}} - - - - - - - - - \ No newline at end of file diff --git a/src/app/features/notes/pages/new-note/new-note.page.scss b/src/app/features/notes/pages/new-note/new-note.page.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/features/notes/pages/new-note/new-note.page.ts b/src/app/features/notes/pages/new-note/new-note.page.ts deleted file mode 100644 index 6892dee..0000000 --- a/src/app/features/notes/pages/new-note/new-note.page.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Component } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable, Subject } from 'rxjs'; -import { selectNotesState, selectSettingsState } from 'src/app/store'; -import { MessageRecipientInput, MessageResultData, NoteCategoryResultData, RecipientsResultData, UtilsService } from '@resgrid/ngx-resgridlib'; -import { SubSink } from 'subsink'; -import * as _ from 'lodash'; -import { environment } from 'src/environments/environment'; -import { SettingsState } from 'src/app/features/settings/store/settings.store'; -import { take } from 'rxjs/operators'; -import { ModalController } from '@ionic/angular'; -import { AlertProvider } from 'src/app/providers/alert'; -import { NotesState } from '../../store/notes.store'; -import * as NotesActions from '../../actions/notes.actions'; - -@Component({ - selector: 'app-notes-new-note', - templateUrl: './new-note.page.html', - styleUrls: ['./new-note.page.scss'], -}) -export class NewNotePage { - public notesState$: Observable; - private subs = new SubSink(); - - public title: string = ''; - public body: string = ''; - public isAdminOnly: boolean = false; - public doesNoteExpire: boolean = false; - public expiresOn: string = ''; - public category: NoteCategoryResultData; - - constructor( - private notesStore: Store, - private settingsStore: Store, - private utilsProvider: UtilsService, - private alertProvider: AlertProvider - ) { - this.notesState$ = this.notesStore.select(selectNotesState); - } - - ionViewDidEnter() { - this.title = ''; - this.body = ''; - } - - ionViewDidLeave() { - if (this.subs) { - this.subs.unsubscribe(); - } - } - - compareWith(o1: NoteCategoryResultData, o2: NoteCategoryResultData) { - return o1 && o2 ? o1.Category === o2.Category : o1 === o2; - } - - public closeModal() { - this.notesStore.dispatch(new NotesActions.DismissModal()); - } - - public save() { - let categoryName = null; - let noteExpiresOn = null; - - if (this.category && this.category.Category) { - categoryName = this.category.Category; - } - - if (this.doesNoteExpire && this.expiresOn) { - noteExpiresOn = this.expiresOn; - } - - this.notesStore.dispatch(new NotesActions.SaveNote(this.title, this.body, categoryName, this.isAdminOnly, noteExpiresOn)); - } -} diff --git a/src/app/features/notes/pages/notes-list/notes-list.module.ts b/src/app/features/notes/pages/notes-list/notes-list.module.ts deleted file mode 100644 index 1dcffce..0000000 --- a/src/app/features/notes/pages/notes-list/notes-list.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { NotesListPage } from './notes-list.page'; -import { RouterModule } from '@angular/router'; -import { TranslateModule } from '@ngx-translate/core'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { HammerModule } from '@angular/platform-browser'; -import { ShellModule } from 'src/app/shell/shell.module'; -import { ComponentsModule } from 'src/app/components/components.module'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - RouterModule.forChild([ - { - path: '', - component: NotesListPage - } - ]), - TranslateModule, - HammerModule, - NgxResgridLibModule, - ShellModule, - ComponentsModule - ], - declarations: [NotesListPage] -}) -export class NotesListModule {} diff --git a/src/app/features/notes/pages/notes-list/notes-list.page.html b/src/app/features/notes/pages/notes-list/notes-list.page.html deleted file mode 100644 index b06cd88..0000000 --- a/src/app/features/notes/pages/notes-list/notes-list.page.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - -
- -
- - - - - - - - - - - - - -
diff --git a/src/app/features/notes/pages/notes-list/notes-list.page.scss b/src/app/features/notes/pages/notes-list/notes-list.page.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/features/notes/pages/notes-list/notes-list.page.ts b/src/app/features/notes/pages/notes-list/notes-list.page.ts deleted file mode 100644 index cb3295e..0000000 --- a/src/app/features/notes/pages/notes-list/notes-list.page.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { ChangeDetectorRef, Component } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { selectNotesState } from 'src/app/store'; -import { NotesState } from '../../store/notes.store'; -import * as NotesActions from '../../actions/notes.actions'; -import { NoteResultData, SecurityService } from '@resgrid/ngx-resgridlib'; -import { MenuController } from '@ionic/angular'; - -@Component({ - selector: 'app-notes-list', - templateUrl: './notes-list.page.html', - styleUrls: ['./notes-list.page.scss'], -}) -export class NotesListPage { - private searchTerm: string = ''; - public notesState$: Observable; - - constructor(private notesStore: Store, - private cdr: ChangeDetectorRef, - private securityService: SecurityService, - public menuCtrl: MenuController) { - this.notesState$ = this.notesStore.select(selectNotesState); - } - - ionViewDidEnter() { - this.menuCtrl.enable(false); - - this.load(); - } - - ionViewDidLeave() {} - - public viewNote(note: NoteResultData) { - if (note) { - this.notesStore.dispatch(new NotesActions.ViewNote(note)); - } - } - - public refresh(event) { - this.load(); - - setTimeout(() => { - event.target.complete(); - }, 1000); - } - - public hideSearch() { - this.searchTerm = ''; - } - - public search(event) { - this.searchTerm = event.target.value; - this.cdr.detectChanges(); - } - - public newNote() { - this.notesStore.dispatch(new NotesActions.ShowNewNoteModal()); - } - - public canCreateNote() { - return this.securityService.canUserCreateNotes(); - } - - public filterNotes(notes: NoteResultData[]) { - if (this.searchTerm) { - if (notes) { - let filteredNotes = new Array(); - - notes.forEach(note => { - if (note.Title && note.Title.toLowerCase().includes(this.searchTerm.toLowerCase())) { - filteredNotes.push(note); - } else if (note.Body && note.Body.toLowerCase().includes(this.searchTerm.toLowerCase())) { - filteredNotes.push(note); - } else if (note.Category && note.Category.toLowerCase().includes(this.searchTerm.toLowerCase())) { - filteredNotes.push(note); - } - }); - - return filteredNotes; - } - } else { - return notes; - } - } - - private load() { - this.notesStore.dispatch(new NotesActions.LoadNotes()); - } -} diff --git a/src/app/features/notes/pages/view-note/view-note.module.ts b/src/app/features/notes/pages/view-note/view-note.module.ts deleted file mode 100644 index 43af001..0000000 --- a/src/app/features/notes/pages/view-note/view-note.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { ViewNotePage } from './view-notepage'; -import { RouterModule } from '@angular/router'; -import { TranslateModule } from '@ngx-translate/core'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { HammerModule } from '@angular/platform-browser'; -import { ShellModule } from 'src/app/shell/shell.module'; -import { ComponentsModule } from 'src/app/components/components.module'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - RouterModule.forChild([ - { - path: '', - component: ViewNotePage - } - ]), - TranslateModule, - HammerModule, - NgxResgridLibModule, - ShellModule, - ComponentsModule - ], - declarations: [ViewNotePage] -}) -export class ViewNoteModule {} diff --git a/src/app/features/notes/pages/view-note/view-note.page.html b/src/app/features/notes/pages/view-note/view-note.page.html deleted file mode 100644 index 97b374f..0000000 --- a/src/app/features/notes/pages/view-note/view-note.page.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - -
-
-
-
-
- {{(notesState$ | async)?.viewNote?.Title}} -
-

-
-
-
- - - Note Text - - - Info - - -
- -
-
-

-
- - - - -

Created On

-

{{(notesState$ | async)?.viewNote?.AddedOn}}

-
-
- - -

Category

-

{{(notesState$ | async)?.viewNote?.Category}}

-
-
-
- - -
-
-
-
diff --git a/src/app/features/notes/pages/view-note/view-note.page.scss b/src/app/features/notes/pages/view-note/view-note.page.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/features/notes/pages/view-note/view-notepage.ts b/src/app/features/notes/pages/view-note/view-notepage.ts deleted file mode 100644 index 5b30956..0000000 --- a/src/app/features/notes/pages/view-note/view-notepage.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Component } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { selectNotesState } from 'src/app/store'; -import { NotesState } from '../../store/notes.store'; -import * as NotesActions from "../../actions/notes.actions"; - -@Component({ - selector: 'app-notes-view-note', - templateUrl: './view-note.page.html', - styleUrls: ['./view-note.page.scss'], -}) -export class ViewNotePage { - public tabType: string = 'text'; - public notesState$: Observable; - - constructor(private notesStore: Store) { - this.notesState$ = this.notesStore.select(selectNotesState); - } - - ionViewDidEnter() { - - } - - ionViewDidLeave() { - - } - - public closeModal() { - this.notesStore.dispatch( - new NotesActions.DismissModal() - ); - } -} diff --git a/src/app/features/notes/reducers/notes.reducer.ts b/src/app/features/notes/reducers/notes.reducer.ts deleted file mode 100644 index b3e2bda..0000000 --- a/src/app/features/notes/reducers/notes.reducer.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { initialState, NotesState } from '../store/notes.store'; -import { NotesActionTypes } from '../actions/notes.actions'; - -import * as _ from 'lodash'; -import { NotesActionsUnion } from '../actions/notes.actions'; - -export function reducer( - state: NotesState = initialState, - action: NotesActionsUnion -): NotesState { - switch (action.type) { - case NotesActionTypes.LOAD_NOTES_SUCCESS: - return { - ...state, - notes: action.payload, - }; - case NotesActionTypes.VIEW_NOTE: - return { - ...state, - viewNote: action.note, - }; - case NotesActionTypes.SHOW_NEW_NOTE_MODAL_SUCCESS: - return { - ...state, - noteCategories: action.categories, - }; - default: - return state; - } -} diff --git a/src/app/features/notes/store/notes.store.ts b/src/app/features/notes/store/notes.store.ts deleted file mode 100644 index bfe57d8..0000000 --- a/src/app/features/notes/store/notes.store.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { NoteCategoryResultData, NoteResultData } from "@resgrid/ngx-resgridlib"; - -export interface NotesState { - notes: NoteResultData[]; - viewNote: NoteResultData; - noteCategories: NoteCategoryResultData[]; -} - -export const initialState: NotesState = { - notes: null, - viewNote: null, - noteCategories: null -}; \ No newline at end of file diff --git a/src/app/features/protocols/actions/protocols.actions.ts b/src/app/features/protocols/actions/protocols.actions.ts deleted file mode 100644 index d9d86cd..0000000 --- a/src/app/features/protocols/actions/protocols.actions.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { Action } from '@ngrx/store'; -import { CallProtocolsResultData, MapDataAndMarkersData } from '@resgrid/ngx-resgridlib'; - -export enum ProtocolsActionTypes { - LOAD_PROTOCOLS = '[PROTOCOLS] LOAD_PROTOCOLS', - LOAD_PROTOCOLS_SUCCESS = '[PROTOCOLS] LOAD_PROTOCOLS_SUCCESS', - LOAD_PROTOCOLS_FAIL = '[PROTOCOLS] LOAD_PROTOCOLS_FAIL', - LOAD_PROTOCOLS_DONE = '[PROTOCOLS] LOAD_PROTOCOLS_DONE', - VIEW_PROTOCOL = '[PROTOCOLS] VIEW_PROTOCOL', - VIEW_PROTOCOL_DONE = '[PROTOCOLS] VIEW_PROTOCOL_DONE', - DISMISS_MODAL = '[PROTOCOLS] DISMISS_MODAL', -} - -export class LoadProtocols implements Action { - readonly type = ProtocolsActionTypes.LOAD_PROTOCOLS; - constructor() {} -} - -export class LoadProtocolsSuccess implements Action { - readonly type = ProtocolsActionTypes.LOAD_PROTOCOLS_SUCCESS; - constructor(public payload: CallProtocolsResultData[]) {} -} - -export class LoadProtocolsFail implements Action { - readonly type = ProtocolsActionTypes.LOAD_PROTOCOLS_FAIL; - constructor() {} -} - -export class LoadProtocolsDone implements Action { - readonly type = ProtocolsActionTypes.LOAD_PROTOCOLS_DONE; - constructor() {} -} - -export class ViewProtocol implements Action { - readonly type = ProtocolsActionTypes.VIEW_PROTOCOL; - constructor(public protocol: CallProtocolsResultData) {} -} - -export class ViewProtocolDone implements Action { - readonly type = ProtocolsActionTypes.VIEW_PROTOCOL_DONE; - constructor() {} -} - -export class DismissModal implements Action { - readonly type = ProtocolsActionTypes.DISMISS_MODAL; - constructor() {} -} - -export type ProtocolsActionsUnion = - | LoadProtocols - | LoadProtocolsSuccess - | LoadProtocolsFail - | LoadProtocolsDone - | ViewProtocol - | ViewProtocolDone - | DismissModal - ; diff --git a/src/app/features/protocols/effects/protocols.effect.ts b/src/app/features/protocols/effects/protocols.effect.ts deleted file mode 100644 index 69931a6..0000000 --- a/src/app/features/protocols/effects/protocols.effect.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { Store } from '@ngrx/store'; -import { Actions, concatLatestFrom, createEffect, ofType } from '@ngrx/effects'; -import { Injectable } from '@angular/core'; -import { - MenuController, - ModalController, - ToastController, -} from '@ionic/angular'; -import * as protocolsAction from '../actions/protocols.actions'; -import { CallProtocolsService, MappingService, PersonnelService, UnitsService } from '@resgrid/ngx-resgridlib'; -import { - catchError, - exhaustMap, map, mergeMap, switchMap, tap, -} from 'rxjs/operators'; -import { StorageProvider } from 'src/app/providers/storage'; -import * as _ from 'lodash'; -import { ProtocolsState } from '../store/protocols.store'; -import { of } from 'rxjs'; -import { ViewProtocolPage } from '../pages/view-protocol/view-protocol.page'; - -@Injectable() -export class ProtocolsEffects { - private _modalRef: HTMLIonModalElement; - - getProtocolsList$ = createEffect(() => - this.actions$.pipe( - ofType( - protocolsAction.ProtocolsActionTypes.LOAD_PROTOCOLS - ), - mergeMap((action) => - this.protocolsProvider.getAllCallProtocols().pipe( - map((data) => ({ - type: protocolsAction.ProtocolsActionTypes.LOAD_PROTOCOLS_SUCCESS, - payload: data.Data, - })), - catchError(() => - of({ - type: protocolsAction.ProtocolsActionTypes.LOAD_PROTOCOLS_FAIL, - }) - ) - ) - ) - ) - ); - - viewPerson$ = createEffect(() => - this.actions$.pipe( - ofType( - protocolsAction.ProtocolsActionTypes.VIEW_PROTOCOL - ), - switchMap(() => - this.runModal(ViewProtocolPage, 'modal-container-full', null) - ), - map((action) => ({ - type: protocolsAction.ProtocolsActionTypes.VIEW_PROTOCOL_DONE, - })) - ) - ); - - dismissModal$ = createEffect( - () => - this.actions$.pipe( - ofType(protocolsAction.ProtocolsActionTypes.DISMISS_MODAL), - exhaustMap((data) => this.closeModal()) - ), - { dispatch: false } - ); - - constructor( - private actions$: Actions, - private store: Store, - private protocolsProvider: CallProtocolsService, - private toastController: ToastController, - private menuCtrl: MenuController, - private modalController: ModalController, - private storageProvider: StorageProvider - ) {} - - showToast = async (message) => { - const toast = await this.toastController.create({ - message: message, - duration: 3000, - }); - toast.present(); - }; - - runModal = async (component, cssClass, properties) => { - await this.closeModal(); - await this.menuCtrl.close(); - - if (!cssClass) { - cssClass = 'modal-container'; - } - - this._modalRef = await this.modalController.create({ - component: component, - cssClass: cssClass, - componentProps: { - info: properties, - }, - }); - - return this._modalRef.present(); - }; - - closeModal = async () => { - if (this._modalRef) { - await this.modalController.dismiss(); - this._modalRef = null; - } - }; -} diff --git a/src/app/features/protocols/pages/protocols/protocols.module.ts b/src/app/features/protocols/pages/protocols/protocols.module.ts deleted file mode 100644 index a9b2de9..0000000 --- a/src/app/features/protocols/pages/protocols/protocols.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { ProtocolsPage } from './protocols.page'; -import { RouterModule } from '@angular/router'; -import { TranslateModule } from '@ngx-translate/core'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { HammerModule } from '@angular/platform-browser'; -import { ShellModule } from 'src/app/shell/shell.module'; -import { ComponentsModule } from 'src/app/components/components.module'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - RouterModule.forChild([ - { - path: '', - component: ProtocolsPage - } - ]), - TranslateModule, - HammerModule, - NgxResgridLibModule, - ShellModule, - ComponentsModule - ], - declarations: [ProtocolsPage] -}) -export class ProtocolsModule {} diff --git a/src/app/features/protocols/pages/protocols/protocols.page.html b/src/app/features/protocols/pages/protocols/protocols.page.html deleted file mode 100644 index 52f1715..0000000 --- a/src/app/features/protocols/pages/protocols/protocols.page.html +++ /dev/null @@ -1,9 +0,0 @@ - -
- -
- - - -
diff --git a/src/app/features/protocols/pages/protocols/protocols.page.scss b/src/app/features/protocols/pages/protocols/protocols.page.scss deleted file mode 100644 index 3ebe680..0000000 --- a/src/app/features/protocols/pages/protocols/protocols.page.scss +++ /dev/null @@ -1,3 +0,0 @@ -#map { - height: 100%; -} \ No newline at end of file diff --git a/src/app/features/protocols/pages/protocols/protocols.page.ts b/src/app/features/protocols/pages/protocols/protocols.page.ts deleted file mode 100644 index 04a05d7..0000000 --- a/src/app/features/protocols/pages/protocols/protocols.page.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Component, OnInit, Output, ViewChild } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable, Subscription } from 'rxjs'; -import { selectProtocolsState } from 'src/app/store'; -import { ProtocolsState } from '../../store/protocols.store'; -import * as ProtocolActions from '../../actions/protocols.actions'; -import { CallProtocolsResultData } from '@resgrid/ngx-resgridlib'; -import { MenuController } from '@ionic/angular'; - -@Component({ - selector: 'app-protocols-list', - templateUrl: './protocols.page.html', - styleUrls: ['./protocols.page.scss'], -}) -export class ProtocolsPage { - private mappingStateSub: Subscription; - public protocolsState$: Observable; - - constructor(private protocolsStore: Store, public menuCtrl: MenuController) { - this.protocolsState$ = this.protocolsStore.select(selectProtocolsState); - } - - ionViewDidEnter() { - this.menuCtrl.enable(false); - this.protocolsStore.dispatch(new ProtocolActions.LoadProtocols()); - } - - ionViewDidLeave() {} - - public viewProtocol(protocol: CallProtocolsResultData) { - if (protocol) { - this.protocolsStore.dispatch(new ProtocolActions.ViewProtocol(protocol)); - } - } -} diff --git a/src/app/features/protocols/pages/view-protocol/view-protocol.module.ts b/src/app/features/protocols/pages/view-protocol/view-protocol.module.ts deleted file mode 100644 index ddafb57..0000000 --- a/src/app/features/protocols/pages/view-protocol/view-protocol.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { ViewProtocolPage } from './view-protocol.page'; -import { RouterModule } from '@angular/router'; -import { TranslateModule } from '@ngx-translate/core'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { HammerModule } from '@angular/platform-browser'; -import { ShellModule } from 'src/app/shell/shell.module'; -import { ComponentsModule } from 'src/app/components/components.module'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - RouterModule.forChild([ - { - path: '', - component: ViewProtocolPage - } - ]), - TranslateModule, - HammerModule, - NgxResgridLibModule, - ShellModule, - ComponentsModule - ], - declarations: [ViewProtocolPage] -}) -export class ViewProtocolModule {} diff --git a/src/app/features/protocols/pages/view-protocol/view-protocol.page.html b/src/app/features/protocols/pages/view-protocol/view-protocol.page.html deleted file mode 100644 index 72189bd..0000000 --- a/src/app/features/protocols/pages/view-protocol/view-protocol.page.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -
-
-
-
-
- {{(protocolsState$ | async)?.viewprotocol?.Name}} -
-

-
-
-
- - - Protocol Text - - - Info - - - Attachments - - -
- -
-
- -
- - - - -

Created On

-

{{(protocolsState$ | async)?.viewprotocol?.CreatedOn}}

-
-
-
- - - - -

{{attachment.FileName}}

-

{{attachment.FileType}}

-
-
-
- -
-
-
-
diff --git a/src/app/features/protocols/pages/view-protocol/view-protocol.page.scss b/src/app/features/protocols/pages/view-protocol/view-protocol.page.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/features/protocols/pages/view-protocol/view-protocol.page.ts b/src/app/features/protocols/pages/view-protocol/view-protocol.page.ts deleted file mode 100644 index 15c0247..0000000 --- a/src/app/features/protocols/pages/view-protocol/view-protocol.page.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Component, OnInit, Output, ViewChild } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable, Subscription } from 'rxjs'; -import { selectProtocolsState } from 'src/app/store'; -import { ProtocolsState } from '../../store/protocols.store'; -import * as ProtocolActions from '../../actions/protocols.actions'; -import { FileProvider } from 'src/app/providers/file'; - -@Component({ - selector: 'app-protocols-view-protocol', - templateUrl: './view-protocol.page.html', - styleUrls: ['./view-protocol.page.scss'], -}) -export class ViewProtocolPage { - public tabType: string = 'text'; - public protocolsState$: Observable; - - constructor(private protocolsStore: Store, - private fileProvider: FileProvider) { - this.protocolsState$ = this.protocolsStore.select(selectProtocolsState); - } - - ionViewDidEnter() {} - - ionViewDidLeave() {} - - public closeModal() { - this.protocolsStore.dispatch(new ProtocolActions.DismissModal()); - } - - public async viewAttachment(name: string, id: string) { - await this.fileProvider.openProtocolAttachment(name, id); - } -} diff --git a/src/app/features/protocols/protocols-routing.module.ts b/src/app/features/protocols/protocols-routing.module.ts deleted file mode 100644 index bed1bd6..0000000 --- a/src/app/features/protocols/protocols-routing.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - { - path: '', - redirectTo: 'list', - pathMatch: 'full' - }, - { - path: 'list', - loadChildren: () => import('./pages/protocols/protocols.module').then(m => m.ProtocolsModule) - }, - { - path: 'view', - loadChildren: () => import('./pages/view-protocol/view-protocol.module').then(m => m.ViewProtocolModule) - }, -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class ProtocolsRoutingModule {} diff --git a/src/app/features/protocols/protocols.module.ts b/src/app/features/protocols/protocols.module.ts deleted file mode 100644 index 53044ff..0000000 --- a/src/app/features/protocols/protocols.module.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { NgModule } from '@angular/core'; -import { StoreModule } from '@ngrx/store'; -import { EffectsModule } from '@ngrx/effects'; -import { CommonModule } from '@angular/common'; -import { ReactiveFormsModule, FormsModule } from '@angular/forms'; -import { ProtocolsRoutingModule } from './protocols-routing.module'; -import { reducer } from './reducers/protocols.reducer'; -import { ProtocolsEffects } from './effects/protocols.effect'; -import { IonicModule } from '@ionic/angular'; -import { HammerModule } from '@angular/platform-browser'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { TranslateModule } from '@ngx-translate/core'; -import { ShellModule } from 'src/app/shell/shell.module'; - -@NgModule({ - declarations: [ - ], - imports: [ - IonicModule, - CommonModule, - FormsModule, - ReactiveFormsModule, - ProtocolsRoutingModule, - StoreModule.forFeature('protocolsModule', reducer), - EffectsModule.forFeature([ProtocolsEffects]), - HammerModule, - NgxResgridLibModule, - TranslateModule, - ShellModule - ], - providers: [], - exports: [ - ] -}) -export class ProtocolsModule { } diff --git a/src/app/features/protocols/reducers/protocols.reducer.ts b/src/app/features/protocols/reducers/protocols.reducer.ts deleted file mode 100644 index 48abe84..0000000 --- a/src/app/features/protocols/reducers/protocols.reducer.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { initialState, ProtocolsState } from '../store/protocols.store'; -import { - ProtocolsActionsUnion, - ProtocolsActionTypes, -} from '../actions/protocols.actions'; - -import * as _ from 'lodash'; - -export function reducer( - state: ProtocolsState = initialState, - action: ProtocolsActionsUnion -): ProtocolsState { - switch (action.type) { - case ProtocolsActionTypes.LOAD_PROTOCOLS_SUCCESS: - return { - ...state, - protocols: action.payload, - }; - case ProtocolsActionTypes.VIEW_PROTOCOL: - return { - ...state, - viewprotocol: action.protocol, - }; - default: - return state; - } -} diff --git a/src/app/features/protocols/store/protocols.store.ts b/src/app/features/protocols/store/protocols.store.ts deleted file mode 100644 index 7f51dd4..0000000 --- a/src/app/features/protocols/store/protocols.store.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { CallProtocolsResultData } from "@resgrid/ngx-resgridlib"; - -export interface ProtocolsState { - protocols: CallProtocolsResultData[]; - viewprotocol: CallProtocolsResultData; -} - -export const initialState: ProtocolsState = { - protocols: null, - viewprotocol: null -}; \ No newline at end of file diff --git a/src/app/features/roles/pages/set-roles/modal-set-roles.module.ts b/src/app/features/roles/pages/set-roles/modal-set-roles.module.ts deleted file mode 100644 index 062416f..0000000 --- a/src/app/features/roles/pages/set-roles/modal-set-roles.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { RouterModule } from '@angular/router'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { ComponentsModule } from 'src/app/components/components.module'; -import { TranslateModule } from '@ngx-translate/core'; -import { ModalSetRolesPage } from './modal-set-roles.page'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - RouterModule.forChild([ - { - path: '', - component: ModalSetRolesPage - } - ]), - NgxResgridLibModule, - ComponentsModule, - TranslateModule - ], - declarations: [ModalSetRolesPage] -}) -export class ModalSetRolesPageModule {} diff --git a/src/app/features/roles/pages/set-roles/modal-set-roles.page.html b/src/app/features/roles/pages/set-roles/modal-set-roles.page.html deleted file mode 100644 index f9b2a66..0000000 --- a/src/app/features/roles/pages/set-roles/modal-set-roles.page.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -
- - - -

{{'setRolesPage.info' | translate}}

-
-
- - - - - -
{{role.Name}}
- {{user.FirstName}} {{user.LastName}} -
-
- - {{'setRolesPage.saveButton' | translate}} - -
-
-
-
-
-
\ No newline at end of file diff --git a/src/app/features/roles/pages/set-roles/modal-set-roles.page.scss b/src/app/features/roles/pages/set-roles/modal-set-roles.page.scss deleted file mode 100644 index 0c2b8e7..0000000 --- a/src/app/features/roles/pages/set-roles/modal-set-roles.page.scss +++ /dev/null @@ -1,73 +0,0 @@ -.container { - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; -} - -h4 { - font-weight: 600; - font-size: 17px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); -} - -p { - font-weight: normal; - font-size: 13px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 3; /* number of lines to show */ - -webkit-box-orient: vertical; -} - -ion-fab-button { - --box-shadow: none !important; - --color: var(--ion-color-primary); -} - -.action-button { - --border-radius: 6px; - --box-shadow: none !important; - min-height: 48px; - - span { - font-weight: 400; - font-size: 14px; - text-transform: initial; - } - - .button-text { - display: flex; - justify-content: space-between; - align-items: center; - width: 100%; - padding: 0 8px; - color: var(--ion-color-primary); - - ion-icon { - font-size: 20px; - color: var(--ion-color-primary); - } - } -} - -@media (max-device-height: 640px), handheld and (orientation: portrait) { - ion-img { - width: 64px; - } - - h4 { - font-size: 15px; - } - - p { - line-height: 21px; - font-size: 12px; - } -} diff --git a/src/app/features/roles/pages/set-roles/modal-set-roles.page.ts b/src/app/features/roles/pages/set-roles/modal-set-roles.page.ts deleted file mode 100644 index 0b13df6..0000000 --- a/src/app/features/roles/pages/set-roles/modal-set-roles.page.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { UntypedFormGroup } from '@angular/forms'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { HomeState } from 'src/app/features/home/store/home.store'; -import { Observable } from 'rxjs'; -import { selectRolesState } from 'src/app/store'; -import { - ActiveUnitRoleResultData, - CallResultData, - SetUnitRolesInput, - SetUnitRolesRoleInput, - UnitRoleResultData, -} from '@resgrid/ngx-resgridlib'; -import { take } from 'rxjs/operators'; -import * as _ from 'lodash'; -import { RolesState } from '../../store/roles.store'; -import * as RolesActions from '../../store/roles.actions'; - -@Component({ - selector: 'app-modal-set-roles', - templateUrl: './modal-set-roles.page.html', - styleUrls: ['./modal-set-roles.page.scss'], -}) -export class ModalSetRolesPage implements OnInit { - public selectedCall: CallResultData; - public serverForm: UntypedFormGroup; - public rolesState$: Observable; - public selectOptions: any; - public selectedPersonnel: ActiveUnitRoleResultData[] = []; - - constructor(private modal: ModalController, private store: Store, private rolesStore: Store) { - this.rolesState$ = this.store.select(selectRolesState); - } - - ngOnInit() { - this.rolesState$.pipe(take(1)).subscribe((state) => { - if (state && state.roles && state.unitRoleAssignments) { - this.selectedPersonnel = _.cloneDeep(this.filterRoles(state.roles, state.unitRoleAssignments)); - } - }); - } - - dismissModal() { - this.modal.dismiss(); - } - - compareWith(o1: string, o2: string) { - return o1 && o1 === o2; - } - - public filterRoles( - roles: UnitRoleResultData[], - unitRoleAssignments: ActiveUnitRoleResultData[] - ) { - let filteredRoles: ActiveUnitRoleResultData[] = []; - - if (roles && - roles.length > 0 && - unitRoleAssignments && - unitRoleAssignments.length > 0 - ) { - unitRoleAssignments.forEach((ura) => { - if (ura.UnitId === roles[0].UnitId) { - filteredRoles.push(ura); - } - }); - } - - //this.selectedPersonnel = _.cloneDeep(filteredRoles); - return filteredRoles; - } - - public handleUserChange(role: any, event: any) { - if (role && event && event.detail) { - for (let i = 0; i < this.selectedPersonnel.length; i++) { - if (this.selectedPersonnel[i].UnitRoleId == role.UnitRoleId) { - this.selectedPersonnel[i].UserId = event.detail.value; - } - } - } - } - - save() { - let input: SetUnitRolesInput; - input = { - UnitId: this.selectedPersonnel[0].UnitId, - Roles: [], - }; - - this.selectedPersonnel.forEach(person => { - let role: SetUnitRolesRoleInput = { - UserId: person.UserId, - RoleId: person.UnitRoleId, - Name: person.Name - } - - input.Roles.push(role); - }); - - this.rolesStore.dispatch(new RolesActions.SaveRoleData(input)); - } -} diff --git a/src/app/features/roles/roles-routing.module.ts b/src/app/features/roles/roles-routing.module.ts deleted file mode 100644 index 4ed9520..0000000 --- a/src/app/features/roles/roles-routing.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - { - path: '', - redirectTo: 'setRoles', - pathMatch: 'full' - }, - { - path: 'setRoles', - loadChildren: () => import('./pages/set-roles/modal-set-roles.module').then(m => m.ModalSetRolesPageModule) - }, -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class NotesRoutingModule {} diff --git a/src/app/features/roles/roles.module.ts b/src/app/features/roles/roles.module.ts deleted file mode 100644 index 138e276..0000000 --- a/src/app/features/roles/roles.module.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { NgModule } from '@angular/core'; -import { StoreModule } from '@ngrx/store'; -import { EffectsModule } from '@ngrx/effects'; -import { CommonModule } from '@angular/common'; -import { ReactiveFormsModule, FormsModule } from '@angular/forms'; -import { NotesRoutingModule } from './roles-routing.module'; -import { reducer } from './store/roles.reducer'; -import { IonicModule } from '@ionic/angular'; -import { HammerModule } from '@angular/platform-browser'; -import { NgxResgridLibModule } from '@resgrid/ngx-resgridlib'; -import { TranslateModule } from '@ngx-translate/core'; -import { ShellModule } from 'src/app/shell/shell.module'; -import { RolesEffects } from './store/roles.effect'; - -@NgModule({ - declarations: [ - - ], - imports: [ - IonicModule, - CommonModule, - FormsModule, - ReactiveFormsModule, - NotesRoutingModule, - StoreModule.forFeature('rolesModule', reducer), - EffectsModule.forFeature([RolesEffects]), - HammerModule, - NgxResgridLibModule, - TranslateModule, - ShellModule - ], - providers: [], - exports: [ - - ] -}) -export class RolesModule { } diff --git a/src/app/features/roles/store/roles.actions.ts b/src/app/features/roles/store/roles.actions.ts deleted file mode 100644 index 6801f8a..0000000 --- a/src/app/features/roles/store/roles.actions.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { Action } from '@ngrx/store'; -import { ActiveUnitRoleResultData, PersonnelInfoResultData, SetUnitRolesInput, UnitRoleResultData } from '@resgrid/ngx-resgridlib'; - -export enum RolesActionTypes { - GET_SET_ROLE_DATA = '[ROLES] GET_SET_ROLE_DATA', - GET_SET_ROLE_DATA_SUCCESS = '[ROLES] GET_SET_ROLE_DATA_SUCCESS', - GET_SET_ROLE_DATA_FAIL = '[ROLES] GET_SET_ROLE_DATA_FAIL', - SHOW_SET_ROLE_MODAL = '[ROLES] SHOW_SET_ROLE_MODAL', - SAVE_ROLE_DATA = '[ROLES] SAVE_ROLE_DATA', - SAVE_ROLE_DATA_SUCCESS = '[ROLES] SAVE_ROLE_DATA_SUCCESS', - SAVE_ROLE_DATA_FAIL = '[ROLES] SAVE_ROLE_DATA_FAIL', - UPDATE_SET_ROLE_DATA = '[ROLES] UPDATE_SET_ROLE_DATA', - UPDATE_SET_ROLE_DATA_SUCCESS = '[ROLES] UPDATE_SET_ROLE_DATA_SUCCESS', - UPDATE_SET_ROLE_DATA_FAIL = '[ROLES] UPDATE_SET_ROLE_DATA_FAIL', - DISMISS_MODAL = '[ROLES] DISMISS_MODAL', -} - -export class DismissModal implements Action { - readonly type = RolesActionTypes.DISMISS_MODAL; - constructor() {} -} - -export class GetSetRoleData implements Action { - readonly type = RolesActionTypes.GET_SET_ROLE_DATA; - constructor(public unitId: string) {} -} - -export class GetSetRoleDataSuccess implements Action { - readonly type = RolesActionTypes.GET_SET_ROLE_DATA_SUCCESS; - constructor(public roles: UnitRoleResultData[], - public unitRoleAssignments: ActiveUnitRoleResultData[], - public users: PersonnelInfoResultData[]) {} -} - -export class GetSetRoleDataFail implements Action { - readonly type = RolesActionTypes.GET_SET_ROLE_DATA_FAIL; - constructor() {} -} - -export class ShowSetRoleDataModal implements Action { - readonly type = RolesActionTypes.SHOW_SET_ROLE_MODAL; - constructor() {} -} - -export class SaveRoleData implements Action { - readonly type = RolesActionTypes.SAVE_ROLE_DATA; - constructor(public assignments: SetUnitRolesInput) {} -} - -export class SaveRoleDataSuccess implements Action { - readonly type = RolesActionTypes.SAVE_ROLE_DATA_SUCCESS; - constructor(public unitId: string) {} -} - -export class SaveRoleDataFail implements Action { - readonly type = RolesActionTypes.SAVE_ROLE_DATA_FAIL; - constructor() {} -} - -export class UpdateSetRoleData implements Action { - readonly type = RolesActionTypes.UPDATE_SET_ROLE_DATA; - constructor() {} -} - -export class UpdateSetRoleDataSuccess implements Action { - readonly type = RolesActionTypes.UPDATE_SET_ROLE_DATA_SUCCESS; - constructor(public roles: UnitRoleResultData[], - public unitRoleAssignments: ActiveUnitRoleResultData[], - public users: PersonnelInfoResultData[]) {} -} - -export class UpdateSetRoleDataFail implements Action { - readonly type = RolesActionTypes.UPDATE_SET_ROLE_DATA_FAIL; - constructor() {} -} - -export type RolesActionsUnion = - | DismissModal - | GetSetRoleData - | GetSetRoleDataSuccess - | GetSetRoleDataFail - | ShowSetRoleDataModal - | SaveRoleData - | SaveRoleDataSuccess - | SaveRoleDataFail - | UpdateSetRoleData - | UpdateSetRoleDataSuccess - | UpdateSetRoleDataFail - ; diff --git a/src/app/features/roles/store/roles.effect.ts b/src/app/features/roles/store/roles.effect.ts deleted file mode 100644 index 5f0070f..0000000 --- a/src/app/features/roles/store/roles.effect.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { Store } from '@ngrx/store'; -import { Actions, concatLatestFrom, createEffect, ofType } from '@ngrx/effects'; -import { Injectable } from '@angular/core'; -import { - MenuController, - ModalController, - ToastController, -} from '@ionic/angular'; -import * as notesAction from './roles.actions'; -import { - NotesService, - PersonnelService, - UnitRolesService, -} from '@resgrid/ngx-resgridlib'; -import { catchError, exhaustMap, map, mergeMap, switchMap, tap } from 'rxjs/operators'; -import { StorageProvider } from 'src/app/providers/storage'; -import * as _ from 'lodash'; -import { forkJoin, from, of } from 'rxjs'; -import { LoadingProvider } from 'src/app/providers/loading'; -import { RolesState } from './roles.store'; -import { ModalSetRolesPage } from '../pages/set-roles/modal-set-roles.page'; -import { selectHomeState } from 'src/app/store'; - -@Injectable() -export class RolesEffects { - private _modalRef: HTMLIonModalElement; - - getSetRoleData$ = createEffect(() => - this.actions$.pipe( - ofType( - notesAction.RolesActionTypes.GET_SET_ROLE_DATA - ), - mergeMap((action) => - forkJoin([ - this.unitRolesService.getRolesForUnit(action.unitId), - this.unitRolesService.getAllUnitRolesAndAssignmentsForDepartment(), - this.personnelService.getAllPersonnelInfos(''), - ]).pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: notesAction.RolesActionTypes.GET_SET_ROLE_DATA_SUCCESS, - roles: data[0].Data, - unitRoleAssignments: data[1].Data, - users: data[2].Data, - })), - // If request fails, dispatch failed action - catchError(() => - of({ type: notesAction.RolesActionTypes.GET_SET_ROLE_DATA_FAIL }) - ) - ) - ) - ) - ); - - getSetRoleDataSuccess$ = createEffect(() => - this.actions$.pipe( - ofType( - notesAction.RolesActionTypes.GET_SET_ROLE_DATA_SUCCESS - ), - map((data) => { - return { - type: notesAction.RolesActionTypes.SHOW_SET_ROLE_MODAL, - }; - }) - ) - ); - - showSetRolesModal$ = createEffect( - () => - this.actions$.pipe( - ofType(notesAction.RolesActionTypes.SHOW_SET_ROLE_MODAL), - exhaustMap((data) => this.runModal(ModalSetRolesPage, null, null)) - ), - { dispatch: false } - ); - - saveRoleData$ = createEffect(() => - this.actions$.pipe( - ofType( - notesAction.RolesActionTypes.SAVE_ROLE_DATA - ), - tap(() => this.loadingProvider.show()), - mergeMap((action) => - this.unitRolesService.setRoleAssignmentsForUnit(action.assignments).pipe( - map((data) => ({ - type: notesAction.RolesActionTypes.SAVE_ROLE_DATA_SUCCESS, - unitId: action.assignments.UnitId, - })), - catchError(() => - of({ - type: notesAction.RolesActionTypes.SAVE_ROLE_DATA_FAIL, - }) - ) - ) - ) - ) - ); - - saveRoleDataSuccess$ = createEffect(() => - this.actions$.pipe( - ofType( - notesAction.RolesActionTypes.SAVE_ROLE_DATA_SUCCESS - ), - switchMap(async (action) => this.closeModal()), - switchMap(async (action) => this.loadingProvider.hide()), - map((action) => ({ - type: notesAction.RolesActionTypes.UPDATE_SET_ROLE_DATA, - })) - ) - ); - - updateSetRoleData$ = createEffect(() => - this.actions$.pipe( - ofType( - notesAction.RolesActionTypes.UPDATE_SET_ROLE_DATA - ), - concatLatestFrom(() => [this.store.select(selectHomeState)]), - mergeMap(([action, homeState], index) => - forkJoin([ - this.unitRolesService.getRolesForUnit(homeState.activeUnit?.UnitId), - this.unitRolesService.getAllUnitRolesAndAssignmentsForDepartment(), - this.personnelService.getAllPersonnelInfos(''), - ]).pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: notesAction.RolesActionTypes.UPDATE_SET_ROLE_DATA_SUCCESS, - roles: data[0].Data, - unitRoleAssignments: data[1].Data, - users: data[2].Data, - })), - // If request fails, dispatch failed action - catchError(() => - of({ type: notesAction.RolesActionTypes.UPDATE_SET_ROLE_DATA_FAIL }) - ) - ) - ) - ) - ); - - saveRoleDataFail$ = createEffect( - () => - this.actions$.pipe( - ofType(notesAction.RolesActionTypes.SAVE_ROLE_DATA_FAIL), - switchMap(async (action) => this.loadingProvider.hide()), - ), - { dispatch: false } - ); - - dismissModal$ = createEffect( - () => - this.actions$.pipe( - ofType(notesAction.RolesActionTypes.DISMISS_MODAL), - exhaustMap((data) => this.closeModal()) - ), - { dispatch: false } - ); - - constructor( - private actions$: Actions, - private store: Store, - private notesProvider: NotesService, - private toastController: ToastController, - private menuCtrl: MenuController, - private modalController: ModalController, - private storageProvider: StorageProvider, - private loadingProvider: LoadingProvider, - private unitRolesService: UnitRolesService, - private personnelService: PersonnelService - ) {} - - showToast = async (message) => { - const toast = await this.toastController.create({ - message: message, - duration: 3000, - }); - toast.present(); - }; - - runModal = async (component, cssClass, properties, opts = {}) => { - await this.closeModal(); - await this.menuCtrl.close(); - - if (!cssClass) { - cssClass = 'modal-container'; - } - - this._modalRef = await this.modalController.create({ - component: component, - cssClass: cssClass, - componentProps: properties, - ...opts, - }); - - return from(this._modalRef.present()); - }; - - closeModal = async () => { - try { - //if (this._modalRef) { - await this.modalController.dismiss(); - this._modalRef = null; - //} - } catch (error) {} - }; -} diff --git a/src/app/features/roles/store/roles.reducer.ts b/src/app/features/roles/store/roles.reducer.ts deleted file mode 100644 index 7f72f5f..0000000 --- a/src/app/features/roles/store/roles.reducer.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { initialState, RolesState } from './roles.store'; -import { RolesActionTypes } from './roles.actions'; - -import * as _ from 'lodash'; -import { RolesActionsUnion } from './roles.actions'; - -export function reducer( - state: RolesState = initialState, - action: RolesActionsUnion -): RolesState { - switch (action.type) { - case RolesActionTypes.GET_SET_ROLE_DATA_SUCCESS: - return { - ...state, - roles: action.roles, - unitRoleAssignments: action.unitRoleAssignments, - users: action.users, - }; - case RolesActionTypes.UPDATE_SET_ROLE_DATA_SUCCESS: - return { - ...state, - roles: action.roles, - unitRoleAssignments: action.unitRoleAssignments, - users: action.users, - }; - default: - return state; - } -} diff --git a/src/app/features/roles/store/roles.store.ts b/src/app/features/roles/store/roles.store.ts deleted file mode 100644 index 91e9742..0000000 --- a/src/app/features/roles/store/roles.store.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ActiveUnitRoleResultData, NoteCategoryResultData, NoteResultData, PersonnelInfoResultData, UnitRoleResultData } from "@resgrid/ngx-resgridlib"; - -export interface RolesState { - roles: UnitRoleResultData[]; - unitRoleAssignments: ActiveUnitRoleResultData[]; - users: PersonnelInfoResultData[]; -} - -export const initialState: RolesState = { - roles: null, - unitRoleAssignments: null, - users: null -}; \ No newline at end of file diff --git a/src/app/features/settings/actions/settings.actions.ts b/src/app/features/settings/actions/settings.actions.ts deleted file mode 100644 index 7b02f9b..0000000 --- a/src/app/features/settings/actions/settings.actions.ts +++ /dev/null @@ -1,246 +0,0 @@ -import { Action } from '@ngrx/store'; -import { CallPriorityResultData, CallResultData, UnitResultData, UnitTypeStatusResultData } from '@resgrid/ngx-resgridlib'; -import { UserInfo } from 'src/app/models/userInfo'; -import { LoginPayload } from '../models/loginPayload'; - -export enum SettingActionTypes { - SHOW_LOGIN_MODAL = '[SETTINGS] SHOW_LOGIN_MODAL', - LOGIN = '[SETTINGS] LOGIN', - LOGIN_SUCCESS = '[SETTINGS] LOGIN_SUCCESS', - LOGIN_FAIL = '[SETTINGS] LOGIN_FAIL', - IS_LOGIN = '[SETTINGS] IS_LOGIN', - LOGIN_DONE = '[SETTINGS] LOGIN_DONE', - PRIME_SETTINGS = '[SETTINGS] PRIME_SETTINGS', - NAV_SETTINGS = '[SETTINGS] NAV_SETTINGS', - NAV_HOME = '[SETTINGS] NAV_SETTINGS', - SET_LOGINDATA_NAV_HOME = '[SETTINGS] SET_LOGINDATA_NAV_HOME', - SHOW_SETACTIVE_MODAL = '[SETTINGS] SHOW_SETACTIVE_MODAL', - SET_SERVERADDRESS = '[SETTINGS] SET_SERVERADDRESS', - SET_SERVERADDRESS_DONE = '[SETTINGS] SET_SERVERADDRESS_DONE', - SHOW_SETSERVER_MODAL = '[SETTINGS] SHOW_SETSERVER_MODAL', - SET_ACTIVEUNIT = '[SETTINGS] SET_ACTIVEUNIT', - SET_ACTIVECALL = '[SETTINGS] SET_ACTIVECALL', - SHOW_SETACTIVECALL_MODAL = '[SETTINGS] SHOW_SETACTIVECALL_MODAL', - SAVE_PUSH_NOTIFICATION_SETTING = '[SETTINGS] SAVE_PUSH_NOTIFICATION_SETTING', - SAVE_BACKGROUND_GEOLOCATION_SETTING = '[SETTINGS] SAVE_BACKGROUND_GEOLOCATION_SETTING', - GET_APP_SETTINGS = '[SETTINGS] GET_APP_SETTINGS', - SET_APP_SETTINGS = '[SETTINGS] SET_APP_SETTINGS', - REGISTER_PUSH = '[SETTINGS] REGISTER_PUSH', - DONE = '[SETTINGS] DONE', - SAVE_PERFER_DARKMODE_SETTING = '[SETTINGS] SAVE_PERFER_DARKMODE_SETTING', - SAVE_KEEP_ALIVE_SETTING = '[SETTINGS] SAVE_KEEP_ALIVE_SETTING', - SHOW_LOGOUTPROMPT = '[SETTINGS] SHOW_LOGOUTPROMPT', - LOGOUT = '[SETTINGS] LOGOUT', - SHOW_ABOUT_MODAL = '[SETTINGS] SHOW_ABOUT_MODAL', - SAVE_HEADSET_TYPE_SETTING = '[SETTINGS] SAVE_HEADSET_TYPE_SETTING', - SAVE_MIC_SETTING = '[SETTINGS] SAVE_MIC_SETTING', - SET_IS_APP_ACTIVE = '[SETTINGS] SET_IS_APP_ACTIVE', - DISMISS_MODAL = '[SETTINGS] DISMISS_MODAL', - SHOW_BACKGROUND_GEOLOCATION_MSG = '[SETTINGS] SHOW_BACKGROUND_GEOLOCATION_MSG', - SAVE_SHOW_ALL_SETTING = '[SETTINGS] SAVE_SHOW_ALL_SETTING', -} - -export class ShowLoginModal implements Action { - readonly type = SettingActionTypes.SHOW_LOGIN_MODAL; - constructor() {} -} - -export class Login implements Action { - readonly type = SettingActionTypes.LOGIN; - constructor(public payload: LoginPayload) {} -} - -export class LoginSuccess implements Action { - readonly type = SettingActionTypes.LOGIN_SUCCESS; - constructor(public user: UserInfo) {} -} - -export class LoginFail implements Action { - readonly type = SettingActionTypes.LOGIN_FAIL; - constructor(public payload: string) {} -} - -export class IsLogin implements Action { - readonly type = SettingActionTypes.IS_LOGIN; -} - -export class LoginDone implements Action { - readonly type = SettingActionTypes.LOGIN_DONE; -} - -export class PrimeSettings implements Action { - readonly type = SettingActionTypes.PRIME_SETTINGS; - constructor() {} -} - -export class NavigateToSettings implements Action { - readonly type = SettingActionTypes.NAV_SETTINGS; -} - -export class NavigateToHome implements Action { - readonly type = SettingActionTypes.NAV_HOME; -} - -export class SetLoginDataAndNavigateToHome implements Action { - readonly type = SettingActionTypes.SET_LOGINDATA_NAV_HOME; - constructor(public user: UserInfo, public enablePushNotifications: boolean, - public themePreference: number, public keepAlive: boolean, public headsetType: number, - public backgroundGeolocationEnabled: boolean, public showAll: boolean) {} -} - -export class ShowSetActiveModal implements Action { - readonly type = SettingActionTypes.SHOW_SETACTIVE_MODAL; - constructor() {} -} - -export class SetServerAddress implements Action { - readonly type = SettingActionTypes.SET_SERVERADDRESS; - constructor(public serverAddress: string) {} -} - -export class SetServerAddressDone implements Action { - readonly type = SettingActionTypes.SET_SERVERADDRESS_DONE; - constructor() {} -} - -export class ShowSetServerModal implements Action { - readonly type = SettingActionTypes.SHOW_SETSERVER_MODAL; - constructor() {} -} - -export class SetActiveUnit implements Action { - readonly type = SettingActionTypes.SET_ACTIVEUNIT; - constructor(public unit: UnitResultData, public statuses: UnitTypeStatusResultData) {} -} - -export class SetActiveCall implements Action { - readonly type = SettingActionTypes.SET_ACTIVECALL; - constructor(public call: CallResultData, public priority: CallPriorityResultData) {} -} - -export class ShowSetActiveCallModal implements Action { - readonly type = SettingActionTypes.SHOW_SETACTIVECALL_MODAL; - constructor() {} -} - -export class SavePushNotificationSetting implements Action { - readonly type = SettingActionTypes.SAVE_PUSH_NOTIFICATION_SETTING; - constructor(public enablePushNotifications: boolean) {} -} - -export class SaveBackgroundGeolocationSetting implements Action { - readonly type = SettingActionTypes.SAVE_BACKGROUND_GEOLOCATION_SETTING; - constructor(public enableBackgroundGeolocation: boolean) {} -} - -export class SavePerferDarkModeSetting implements Action { - readonly type = SettingActionTypes.SAVE_PERFER_DARKMODE_SETTING; - constructor(public themePreference: number) {} -} - -export class SaveKeepAliveSetting implements Action { - readonly type = SettingActionTypes.SAVE_KEEP_ALIVE_SETTING; - constructor(public keepAlive: boolean) {} -} - -export class SaveMapShowAllSetting implements Action { - readonly type = SettingActionTypes.SAVE_SHOW_ALL_SETTING; - constructor(public showAll: boolean) {} -} - -export class GetApplicationSettings implements Action { - readonly type = SettingActionTypes.GET_APP_SETTINGS; - constructor() {} -} - -export class SetApplicationSettings implements Action { - readonly type = SettingActionTypes.SET_APP_SETTINGS; - constructor(public enablePushNotifications: boolean, public themePreference: number, public keepAlive: boolean, - public headsetType: number, public selectedMic: string) {} -} - -export class RegisterPush implements Action { - readonly type = SettingActionTypes.REGISTER_PUSH; - constructor() {} -} - -export class ShowPromptForLogout implements Action { - readonly type = SettingActionTypes.SHOW_LOGOUTPROMPT; - constructor() {} -} - -export class Logout implements Action { - readonly type = SettingActionTypes.LOGOUT; - constructor() {} -} - -export class Done implements Action { - readonly type = SettingActionTypes.DONE; - constructor() {} -} - -export class ShowAboutModal implements Action { - readonly type = SettingActionTypes.SHOW_ABOUT_MODAL; - constructor() {} -} - -export class SaveHeadsetTypeSetting implements Action { - readonly type = SettingActionTypes.SAVE_HEADSET_TYPE_SETTING; - constructor(public headsetType: number) {} -} - -export class SaveMicSetting implements Action { - readonly type = SettingActionTypes.SAVE_MIC_SETTING; - constructor(public mic: string) {} -} - -export class SetIsAppActive implements Action { - readonly type = SettingActionTypes.SET_IS_APP_ACTIVE; - constructor(public isActive: boolean) {} -} - -export class DismissModal implements Action { - readonly type = SettingActionTypes.DISMISS_MODAL; - constructor() {} -} - -export class ShowBackgroundGeolocationMessage implements Action { - readonly type = SettingActionTypes.SHOW_BACKGROUND_GEOLOCATION_MSG; - constructor() {} -} - -export type SettingsActionsUnion = - | ShowLoginModal - | Login - | LoginSuccess - | LoginFail - | IsLogin - | LoginDone - | PrimeSettings - | NavigateToSettings - | NavigateToHome - | SetLoginDataAndNavigateToHome - | ShowSetActiveModal - | SetServerAddress - | SetServerAddressDone - | SetActiveUnit - | ShowSetServerModal - | SetActiveCall - | ShowSetActiveCallModal - | SavePushNotificationSetting - | GetApplicationSettings - | SetApplicationSettings - | RegisterPush - | Done - | SavePerferDarkModeSetting - | SaveKeepAliveSetting - | ShowPromptForLogout - | Logout - | ShowAboutModal - | SaveHeadsetTypeSetting - | SaveMicSetting - | SetIsAppActive - | SaveBackgroundGeolocationSetting - | DismissModal - | ShowBackgroundGeolocationMessage - ; diff --git a/src/app/features/settings/effects/settings.effects.ts b/src/app/features/settings/effects/settings.effects.ts deleted file mode 100644 index 997b89b..0000000 --- a/src/app/features/settings/effects/settings.effects.ts +++ /dev/null @@ -1,641 +0,0 @@ -import * as settingsAction from '../actions/settings.actions'; -import { Action, Store } from '@ngrx/store'; -import { - Actions, - concatLatestFrom, - createEffect, - ofType, -} from '@ngrx/effects'; -import { - catchError, - concatMap, - exhaustMap, - filter, - map, - mergeMap, - switchMap, - tap, -} from 'rxjs/operators'; -import { Injectable } from '@angular/core'; -import { forkJoin, from, Observable, of } from 'rxjs'; -import { SettingsState } from '../store/settings.store'; -import { MenuController, ModalController, Platform } from '@ionic/angular'; -import { ModalLoginPage } from '../modals/login/modal-login.page'; -import { AuthProvider } from '../providers/auth'; -import { AlertProvider } from 'src/app/providers/alert'; -import { LoadingProvider } from 'src/app/providers/loading'; -import { StorageProvider } from 'src/app/providers/storage'; -import { Router } from '@angular/router'; -import { ModalSelectActivePage } from '../modals/selectUnit/modal-selectActive.page'; -import { ModalServerInfoPage } from '../modals/serverInfo/modal-serverInfo.page'; -import { HomeState } from '../../home/store/home.store'; -import * as homeActions from '../../../features/home/actions/home.actions'; -import { ModalSelectCallPage } from '../modals/selectCall/modal-selectCall.page'; -import { PushProvider } from 'src/app/providers/push'; -import { SleepProvider } from 'src/app/providers/sleep'; -import { ModalConfirmLogoutPage } from '../modals/confirmLogout/modal-confirmLogout.page'; -import { ModalAboutPage } from '../modals/about/modal-about.page'; -//import { HandsetProvider } from 'src/app/providers/handset'; -import { BluetoothProvider } from 'src/app/providers/bluetooth'; -import * as Sentry from "@sentry/angular"; -import { VoiceState } from '../../voice/store/voice.store'; -import * as VoiceActions from '../../voice/actions/voice.actions'; -import { CacheProvider } from 'src/app/providers/cache'; - -@Injectable() -export class SettingsEffects { - private _modalRef: HTMLIonModalElement; - - showLoginModal$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.SHOW_LOGIN_MODAL), - exhaustMap((data) => this.runModal(ModalLoginPage, null, null)) - ), - { dispatch: false } - ); - - login$ = createEffect(() => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.LOGIN), - exhaustMap((action) => - this.authProvider - .login(action.payload.username, action.payload.password) - .pipe( - mergeMap((data) => - from(this.storageProvider.setLoginData(data)).pipe( - //filter((data) => !!data), - map((data) => { - if (data && data.Rights) { - Sentry.setUser({ - username: data.sub, - email: data.Rights.EmailAddress, - name: data.Rights.FullName, - departmentId: data.Rights.DepartmentId, - departmentName: data.Rights.DepartmentName }); - - return { - type: settingsAction.SettingActionTypes - .SET_LOGINDATA_NAV_HOME, - user: { - userId: data.sub, - emailAddress: data.Rights.EmailAddress, - fullName: data.Rights.FullName, - departmentId: data.Rights.DepartmentId, - departmentName: data.Rights.DepartmentName, - }, - }; - } else { - return { - type: settingsAction.SettingActionTypes.NAV_SETTINGS, - }; - } - }), - tap((data) => { - this.authProvider.startTrackingRefreshToken(); - }), - catchError(() => - of({ type: settingsAction.SettingActionTypes.LOGIN_FAIL }) - ) - ) - ), - catchError(() => - of({ type: settingsAction.SettingActionTypes.LOGIN_FAIL }) - ) - ) - ) - ) - ); - - loginSuccess$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.LOGIN_SUCCESS), - switchMap(() => this.loadingProvider.hide()), - switchMap(() => this.router.navigate(['/home'])) - ), - { dispatch: false } - ); - - loginDone$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.LOGIN_DONE), - switchMap(() => this.loadingProvider.hide()) - ), - { dispatch: false } - ); - - loginFail$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.LOGIN_FAIL), - switchMap(() => this.loadingProvider.hide()), - switchMap((action) => - this.alertProvider.showErrorAlert( - 'Login Error', - '', - 'There was an issue trying to log you in, please check your username and password and try again.' - ) - ) - ), - { dispatch: false } - ); - - loggingIn$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.IS_LOGIN), - switchMap(() => this.loadingProvider.show()) - ), - { dispatch: false } - ); - - primeSettings$ = createEffect(() => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.PRIME_SETTINGS - ), - exhaustMap((action) => - forkJoin([ - this.storageProvider.getStartupData(), - this.authProvider.refreshTokens(), - ]).pipe( - map((data) => { - try { - if ( - data && - data[0] && - data[0].loginData && - data[0].loginData.Rights - ) { - Sentry.setUser({ - username: data[0].loginData.sub, - email: data[0].loginData.Rights.EmailAddress, - name: data[0].loginData.Rights.FullName, - departmentId: data[0].loginData.Rights.DepartmentId, - departmentName: data[0].loginData.Rights.DepartmentName }); - - return { - type: settingsAction.SettingActionTypes - .SET_LOGINDATA_NAV_HOME, - user: { - userId: data[0].loginData.sub, - emailAddress: data[0].loginData.Rights.EmailAddress, - fullName: data[0].loginData.Rights.FullName, - departmentId: data[0].loginData.Rights.DepartmentId, - departmentName: data[0].loginData.Rights.DepartmentName, - }, - enablePushNotifications: data[0].pushNotificationsEnabled, - themePreference: data[0].themePreference, - keepAlive: data[0].keepAlive, - headsetType: data[0].headsetType, - backgroundGeolocationEnabled: data[0].backgroundGeolocationEnabled, - showAll: data[0].showAll - }; - } else { - return { - type: settingsAction.SettingActionTypes.NAV_SETTINGS, - }; - } - } catch (error) { - console.error(JSON.stringify(error)); - return { - type: settingsAction.SettingActionTypes.NAV_SETTINGS, - }; - } - }), - catchError(() => - of({ type: settingsAction.SettingActionTypes.NAV_SETTINGS }) - ) - ) - ) - ) - ); - - setLoginDataNavHome$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.SET_LOGINDATA_NAV_HOME), - tap(() => { - this.authProvider.startTrackingRefreshToken(); - }), - switchMap(() => this.loadingProvider.hide()), - switchMap(() => this.closeModal()), - switchMap(() => this.router.navigate(['/home'])) - ), - { dispatch: false } - ); - - navToSettings$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.NAV_SETTINGS), - switchMap(() => this.router.navigate(['/home/tabs/settings'])) - ), - { dispatch: false } - ); - - showSetActiveModal$ = createEffect(() => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.SHOW_SETACTIVE_MODAL), - switchMap(() => - this.runModal(ModalSelectActivePage, null, null, { - breakpoints: [0, 0.3, 0.5], - initialBreakpoint: 0.3, - }) - ), - map((data) => { - return { - type: settingsAction.SettingActionTypes.DONE, - }; - }) - ) - ); - - setServerAddress$ = createEffect(() => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.SET_SERVERADDRESS - ), - tap((action) => - this.storageProvider.setServerAddress(action.serverAddress) - ), - map((data) => { - return { - type: settingsAction.SettingActionTypes.SET_SERVERADDRESS_DONE, - }; - }) - ) - ); - - setServerAddressDone$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.SET_SERVERADDRESS_DONE), - switchMap((action) => - this.closeModal() - ), - switchMap((action) => - this.alertProvider.showOkAlert( - 'Resgrid Api', - 'Server Address Set', - 'The server address has been saved. You will need to quit the application completely and re-open for this to take effect.' - ) - ) - ), - { dispatch: false } - ); - - showSetServerAddressModal$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.SHOW_SETSERVER_MODAL), - switchMap((data) => this.runModal(ModalServerInfoPage, null, null)) - ), - { dispatch: false } - ); - - setActiveUnit$ = createEffect( - () => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.SET_ACTIVEUNIT - ), - tap((action) => { - this.homeStore.dispatch( - new homeActions.SetActiveUnit(action.unit, action.statuses) - ); - }), - tap((action) => { - this.voiceStore.dispatch(new VoiceActions.GetVoipInfo()); - }), - switchMap((action) => - this.storageProvider.setActiveUnit(action.unit.UnitId) - ), - switchMap((action) => this.closeModal()) - ), - { dispatch: false } - ); - - setActiveCall$ = createEffect( - () => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.SET_ACTIVECALL - ), - tap((action) => { - this.homeStore.dispatch( - new homeActions.SetActiveCall(action.call, action.priority) - ); - }), - switchMap(async (action) => - this.storageProvider.setActiveCall(action.call.CallId) - ), - switchMap(async (action) => this.closeModal()) - ), - { dispatch: false } - ); - - showSetActiveCallModal$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.SHOW_SETACTIVECALL_MODAL), - exhaustMap((data) => - this.runModal(ModalSelectCallPage, null, null, { - breakpoints: [0, 0.3, 0.5], - initialBreakpoint: 0.3, - }) - ) - ), - { dispatch: false } - ); - - savePushNotificationSetting$ = createEffect(() => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.SAVE_PUSH_NOTIFICATION_SETTING - ), - switchMap((action) => - this.storageProvider.setEnablePushNotifications( - action.enablePushNotifications - ) - ), - map((data) => { - return { - type: settingsAction.SettingActionTypes.DONE, - }; - }) - ) - ); - - saveBackgroundGeolocationSetting$ = createEffect(() => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.SAVE_BACKGROUND_GEOLOCATION_SETTING - ), - switchMap((action) => - this.storageProvider.setEnableBackgroundGeolocation( - action.enableBackgroundGeolocation - ) - ), - map((data) => { - return { - type: settingsAction.SettingActionTypes.DONE, - }; - }) - ) - ); - - savePerferDarkModeSetting$ = createEffect(() => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.SAVE_PERFER_DARKMODE_SETTING - ), - switchMap((action) => - this.storageProvider.setThemePreference(action.themePreference) - ), - map((data) => { - return { - type: settingsAction.SettingActionTypes.DONE, - }; - }) - ) - ); - - saveKeepAliveSetting$ = createEffect(() => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.SAVE_KEEP_ALIVE_SETTING - ), - switchMap(async (action) => - this.storageProvider.setKeepAlive(action.keepAlive) - ), - map((data) => { - return { - type: settingsAction.SettingActionTypes.DONE, - }; - }) - ) - ); - - saveShowAllSetting$ = createEffect(() => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.SAVE_SHOW_ALL_SETTING - ), - switchMap(async (action) => - this.storageProvider.setShowAll(action.showAll) - ), - map((data) => { - return { - type: settingsAction.SettingActionTypes.DONE, - }; - }) - ) - ); - - getApplicationSettings$ = createEffect(() => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.GET_APP_SETTINGS - ), - exhaustMap((action) => - forkJoin([ - from(this.storageProvider.getEnablePushNotifications()), - from(this.storageProvider.getKeepAlive()), - from(this.storageProvider.getThemePreference()), - from(this.storageProvider.getHeadsetType()), - from(this.storageProvider.getSelectedMic()), - from(this.storageProvider.getEnableBackgroundGeolocation()), - ]).pipe( - map((result) => ({ - type: settingsAction.SettingActionTypes.SET_APP_SETTINGS, - enablePushNotifications: result[0], - keepAlive: result[1], - themePreference: result[2], - headsetType: result[3], - selectedMic: result[4], - enableBackgroundGeolocation: result[5], - })) - ) - ) - ) - ); - - registerPush$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.REGISTER_PUSH), - switchMap((action) => this.pushProvider.initPush()) - ), - { dispatch: false } - ); - - showConfirmLogoff$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.SHOW_LOGOUTPROMPT), - exhaustMap((data) => - this.runModal(ModalConfirmLogoutPage, null, null, { - breakpoints: [0, 0.2, 0.5, 1], - initialBreakpoint: 0.2, - }) - ) - ), - { dispatch: false } - ); - - logoff$ = createEffect(() => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.LOGOUT), - switchMap(() => this.storageProvider.clear()), - switchMap(() => this.cacheProvider.deleteAllCache()), - tap(() => { - this.authProvider.logout(); - }), - switchMap(async () => this.closeModal()), - map((data) => { - return { - type: settingsAction.SettingActionTypes.DONE, - }; - }) - ) - ); - - showAboutModal$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.SHOW_ABOUT_MODAL), - exhaustMap((data) => this.runModal(ModalAboutPage, null, null)) - ), - { dispatch: false } - ); - - saveHeadsetTypeSetting$ = createEffect(() => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.SAVE_HEADSET_TYPE_SETTING - ), - switchMap((action) => - this.storageProvider.setHeadsetType(action.headsetType) - ), - map((data) => { - return { - type: settingsAction.SettingActionTypes.DONE, - }; - }) - ) - ); - - saveSelectMic$ = createEffect(() => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.SAVE_MIC_SETTING - ), - switchMap((action) => this.storageProvider.setSelectedMic(action.mic)), - map((data) => { - return { - type: settingsAction.SettingActionTypes.DONE, - }; - }) - ) - ); - - setIsAppActive$ = createEffect(() => - this.actions$.pipe( - ofType( - settingsAction.SettingActionTypes.SET_IS_APP_ACTIVE - ), - tap((action) => { - if (!action.isActive) { - this.homeStore.dispatch(new homeActions.GeolocationStopTracking()); - this.homeStore.dispatch(new homeActions.BackgroundGeolocationStart()); - } else { - this.homeStore.dispatch(new homeActions.GeolocationStartTracking()); - this.homeStore.dispatch(new homeActions.BackgroundGeolocationStop()); - } - }), - map((data) => { - return { - type: settingsAction.SettingActionTypes.DONE, - }; - }) - ) - ); - - done$ = createEffect( - () => this.actions$.pipe(ofType(settingsAction.SettingActionTypes.DONE)), - { dispatch: false } - ); - - dismissModal$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.DISMISS_MODAL), - switchMap(() => this.closeModal()) - ), - { dispatch: false } - ); - - showBackgroundGeolocationMessage$ = createEffect( - () => - this.actions$.pipe( - ofType(settingsAction.SettingActionTypes.SHOW_BACKGROUND_GEOLOCATION_MSG), - switchMap((action) => this.alertProvider.showOkAlert( - 'Background Geolocation', - '', - 'If you enable background geolocation Resgrid Unit will continue to send your position to the server even if you are not in the app.', - )) - ), - { dispatch: false } - ); - - constructor( - private actions$: Actions, - private store: Store, - private modalController: ModalController, - private authProvider: AuthProvider, - private alertProvider: AlertProvider, - private loadingProvider: LoadingProvider, - private storageProvider: StorageProvider, - private router: Router, - private pushProvider: PushProvider, - private homeStore: Store, - //private handsetProvider: HandsetProvider, - private menuCtrl: MenuController, - private platform: Platform, - private bluetoothProvider: BluetoothProvider, - private voiceStore: Store, - private cacheProvider: CacheProvider - ) {} - - runModal = async (component, cssClass, properties, opts = {}) => { - await this.closeModal(); - await this.menuCtrl.close(); - - if (!cssClass) { - cssClass = 'modal-container'; - } - - this._modalRef = await this.modalController.create({ - component: component, - cssClass: cssClass, - componentProps: properties, - ...opts, - }); - - return this._modalRef.present(); - }; - - closeModal = async () => { - try { - if (this._modalRef) { - await this.modalController.dismiss(); - this._modalRef = null; - } - } catch (error) { - this._modalRef = null; - } - }; -} diff --git a/src/app/features/settings/modals/about/modal-about.page.html b/src/app/features/settings/modals/about/modal-about.page.html deleted file mode 100644 index b6cfd74..0000000 --- a/src/app/features/settings/modals/about/modal-about.page.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - -
- - - - - - - - -

The Resgrid Unit app is used with the Resgrid system to control a unit (apparatus) or team of individuals to relay AVL, call info, status and - notes for First Responder organizations, like volunteer and career fire, EMS, search and rescue and many more.

-
-
- - - - - - - - -

{{'aboutPage.appVersion' | translate}}

-

{{applicationVersion}}

-
-
- - - - - -

{{'aboutPage.apiLocation' | translate}}

-

{{serverAddress}}

-
-
-
-
-
-
-
-
\ No newline at end of file diff --git a/src/app/features/settings/modals/about/modal-about.page.scss b/src/app/features/settings/modals/about/modal-about.page.scss deleted file mode 100644 index 6d68bfd..0000000 --- a/src/app/features/settings/modals/about/modal-about.page.scss +++ /dev/null @@ -1,9 +0,0 @@ - -.mainLogo { - margin-bottom: 5px; - display: block; - width: 90%; - max-width: 500px; - margin-left: auto; - margin-right: auto; -} \ No newline at end of file diff --git a/src/app/features/settings/modals/about/modal-about.page.ts b/src/app/features/settings/modals/about/modal-about.page.ts deleted file mode 100644 index 88c563e..0000000 --- a/src/app/features/settings/modals/about/modal-about.page.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { SettingsState } from '../../store/settings.store'; -import * as SettingsActions from '../../actions/settings.actions'; -import { StorageProvider } from 'src/app/providers/storage'; -import { environment } from 'src/environments/environment'; - -@Component({ - selector: 'app-modal-about', - templateUrl: './modal-about.page.html', - styleUrls: ['./modal-about.page.scss'], -}) -export class ModalAboutPage implements OnInit { - public serverAddress: string = ''; - public applicationVersion: string = ''; - - constructor( - private modal: ModalController, - private store: Store, - private storageService: StorageProvider - ) {} - - ngOnInit() { - let serverAddress = this.storageService.getServerAddress(); - - if (serverAddress) { - this.serverAddress = serverAddress; - } else { - this.serverAddress = 'https://api.resgrid.com'; - } - - this.applicationVersion = environment.version; - } - - dismissModal() { - this.modal.dismiss(); - } -} diff --git a/src/app/features/settings/modals/confirmLogout/modal-confirmLogout.page.html b/src/app/features/settings/modals/confirmLogout/modal-confirmLogout.page.html deleted file mode 100644 index 586769a..0000000 --- a/src/app/features/settings/modals/confirmLogout/modal-confirmLogout.page.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - -
- - - - {{'logoutModal.confirmLogoutText' | translate}} - - - - - - Yes - - - - - No - - - - -
-
diff --git a/src/app/features/settings/modals/confirmLogout/modal-confirmLogout.page.scss b/src/app/features/settings/modals/confirmLogout/modal-confirmLogout.page.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/features/settings/modals/confirmLogout/modal-confirmLogout.page.ts b/src/app/features/settings/modals/confirmLogout/modal-confirmLogout.page.ts deleted file mode 100644 index ee8853b..0000000 --- a/src/app/features/settings/modals/confirmLogout/modal-confirmLogout.page.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { passwordValidator } from 'src/app/validators/password.validator'; -import { SettingsState } from '../../store/settings.store'; -import * as SettingsActions from "../../actions/settings.actions"; - -@Component({ - selector: 'app-modal-confirmLogout', - templateUrl: './modal-confirmLogout.page.html', - styleUrls: ['./modal-confirmLogout.page.scss'], -}) -export class ModalConfirmLogoutPage implements OnInit { - - constructor(private modal: ModalController, private store: Store) { } - - ngOnInit() { - - } - - dismissModal() { - this.modal.dismiss(); - } - - logout() { - this.store.dispatch(new SettingsActions.Logout()); - } - -} diff --git a/src/app/features/settings/modals/login/modal-login.page.html b/src/app/features/settings/modals/login/modal-login.page.html deleted file mode 100644 index b1b5841..0000000 --- a/src/app/features/settings/modals/login/modal-login.page.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - -
- - - {{'loginModal.loginText' | translate}} - - - -
- - -
{{'loginModal.usernameLabel' | translate}} (Required)
-
-
-
- {{'loginModal.usernameErrorText' | translate}} -
- - -
{{'loginModal.passwordLabel' | translate}} (Required)
-
-
-
- - {{'loginModal.passwordErrorText' | translate}} - - - {{loginForm.get('password').errors.message}} - -
- - {{'login' | translate}} - -
-
-
-
-
-
diff --git a/src/app/features/settings/modals/login/modal-login.page.scss b/src/app/features/settings/modals/login/modal-login.page.scss deleted file mode 100644 index 5dbcce1..0000000 --- a/src/app/features/settings/modals/login/modal-login.page.scss +++ /dev/null @@ -1,80 +0,0 @@ -.container { - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; -} - -h4 { - font-weight: 600; - font-size: 17px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); -} - -p { - font-weight: normal; - font-size: 13px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 3; /* number of lines to show */ - -webkit-box-orient: vertical; -} - -ion-fab-button { - --box-shadow: none !important; - --color: var(--ion-color-primary); -} - -.action-button { - --border-radius: 6px; - --box-shadow: none !important; - min-height: 48px; - - span { - font-weight: 400; - font-size: 14px; - text-transform: initial; - } - - .button-text { - display: flex; - justify-content: space-between; - align-items: center; - width: 100%; - padding: 0 8px; - color: var(--ion-color-primary); - - ion-icon { - font-size: 20px; - color: var(--ion-color-primary); - } - } -} - -.errors-container { - font-size: 12px; - font-weight: 600; - color: var(--ion-color-mbt-red); - margin-bottom: 8px; -} - -@media (max-device-height: 640px), handheld and (orientation: portrait) { - ion-img { - width: 64px; - } - - h4 { - font-size: 15px; - } - - p { - line-height: 21px; - font-size: 12px; - } -} diff --git a/src/app/features/settings/modals/login/modal-login.page.ts b/src/app/features/settings/modals/login/modal-login.page.ts deleted file mode 100644 index e481385..0000000 --- a/src/app/features/settings/modals/login/modal-login.page.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { passwordValidator } from 'src/app/validators/password.validator'; -import { SettingsState } from '../../store/settings.store'; -import * as SettingsActions from "../../actions/settings.actions"; - -@Component({ - selector: 'app-modal-login', - templateUrl: './modal-login.page.html', - styleUrls: ['./modal-login.page.scss'], -}) -export class ModalLoginPage implements OnInit { - loginForm: UntypedFormGroup; - - constructor(private modal: ModalController, private formBuilder: UntypedFormBuilder, - private store: Store) { } - - ngOnInit() { - this.loginForm = this.formBuilder.group({ - username: [null, [Validators.required]], - password: [null, [Validators.required, passwordValidator]] - }); - } - - dismissModal() { - this.modal.dismiss(); - } - - signIn() { - if (this.loginForm.valid) { - this.store.dispatch(new SettingsActions.IsLogin()); - - const authData = { - username: this.f.username.value.trim(), - password: this.f.password.value.trim(), - }; - - this.store.dispatch(new SettingsActions.Login(authData)); - } else { - console.log('invalid'); - } - } - - get f() { - return this.loginForm.controls; - } - -} diff --git a/src/app/features/settings/modals/selectCall/modal-selectCall.page.html b/src/app/features/settings/modals/selectCall/modal-selectCall.page.html deleted file mode 100644 index cc852a5..0000000 --- a/src/app/features/settings/modals/selectCall/modal-selectCall.page.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - -
- - - - - Active Call - - {{ call.Name }} - - - - {{'setActive' | translate}} - - - - -
-
diff --git a/src/app/features/settings/modals/selectCall/modal-selectCall.page.scss b/src/app/features/settings/modals/selectCall/modal-selectCall.page.scss deleted file mode 100644 index 0c2b8e7..0000000 --- a/src/app/features/settings/modals/selectCall/modal-selectCall.page.scss +++ /dev/null @@ -1,73 +0,0 @@ -.container { - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; -} - -h4 { - font-weight: 600; - font-size: 17px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); -} - -p { - font-weight: normal; - font-size: 13px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 3; /* number of lines to show */ - -webkit-box-orient: vertical; -} - -ion-fab-button { - --box-shadow: none !important; - --color: var(--ion-color-primary); -} - -.action-button { - --border-radius: 6px; - --box-shadow: none !important; - min-height: 48px; - - span { - font-weight: 400; - font-size: 14px; - text-transform: initial; - } - - .button-text { - display: flex; - justify-content: space-between; - align-items: center; - width: 100%; - padding: 0 8px; - color: var(--ion-color-primary); - - ion-icon { - font-size: 20px; - color: var(--ion-color-primary); - } - } -} - -@media (max-device-height: 640px), handheld and (orientation: portrait) { - ion-img { - width: 64px; - } - - h4 { - font-size: 15px; - } - - p { - line-height: 21px; - font-size: 12px; - } -} diff --git a/src/app/features/settings/modals/selectCall/modal-selectCall.page.ts b/src/app/features/settings/modals/selectCall/modal-selectCall.page.ts deleted file mode 100644 index 5e430fa..0000000 --- a/src/app/features/settings/modals/selectCall/modal-selectCall.page.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { FormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import * as SettingsActions from '../../actions/settings.actions'; -import { HomeState } from 'src/app/features/home/store/home.store'; -import { Observable } from 'rxjs'; -import { selectHomeState } from 'src/app/store'; -import { CallResultData, UnitResultData } from '@resgrid/ngx-resgridlib'; -import { take } from 'rxjs/operators'; -import * as _ from 'lodash'; - -@Component({ - selector: 'app-modal-selectCall', - templateUrl: './modal-selectCall.page.html', - styleUrls: ['./modal-selectCall.page.scss'], -}) -export class ModalSelectCallPage implements OnInit { - public selectedCall: CallResultData; - public serverForm: UntypedFormGroup; - public homeState$: Observable; - public selectOptions: any; - - constructor(private modal: ModalController, private store: Store) { - this.homeState$ = this.store.select(selectHomeState); - } - - ngOnInit() { - this.selectOptions = { - title: 'Select Call', - subTitle: 'The active call your working', - mode: 'lg' - }; - - this.homeState$.subscribe((state) => { - if (state && state.activeCall) { - this.selectedCall = state.activeCall; - } - }); - } - - dismissModal() { - this.modal.dismiss(); - } - - compareWith(o1: CallResultData, o2: CallResultData) { - return o1 && o2 ? o1.CallId === o2.CallId : o1 === o2; - } - - save() { - this.store - .select(selectHomeState) - .pipe(take(1)) - .subscribe((state) => { - if (this.selectedCall) { - - const defaultPriority = _.find(state.callPriorties, ['Id', 0]); - const priorityForCall = _.find(state.callPriorties, [ - 'Id', - this.selectedCall.Priority, - ]); - - if (priorityForCall) { - this.store.dispatch( - new SettingsActions.SetActiveCall( - this.selectedCall, - priorityForCall - ) - ); - } else { - this.store.dispatch( - new SettingsActions.SetActiveCall( - this.selectedCall, - defaultPriority - ) - ); - } - } - }); - } -} diff --git a/src/app/features/settings/modals/selectUnit/modal-selectActive.page.html b/src/app/features/settings/modals/selectUnit/modal-selectActive.page.html deleted file mode 100644 index 73ef516..0000000 --- a/src/app/features/settings/modals/selectUnit/modal-selectActive.page.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - -
- - - -
- - Active Unit - - {{ unit.Name }} - - -
- - {{'setActive' | translate}} - -
-
-
-
-
diff --git a/src/app/features/settings/modals/selectUnit/modal-selectActive.page.scss b/src/app/features/settings/modals/selectUnit/modal-selectActive.page.scss deleted file mode 100644 index 0c2b8e7..0000000 --- a/src/app/features/settings/modals/selectUnit/modal-selectActive.page.scss +++ /dev/null @@ -1,73 +0,0 @@ -.container { - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; -} - -h4 { - font-weight: 600; - font-size: 17px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); -} - -p { - font-weight: normal; - font-size: 13px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 3; /* number of lines to show */ - -webkit-box-orient: vertical; -} - -ion-fab-button { - --box-shadow: none !important; - --color: var(--ion-color-primary); -} - -.action-button { - --border-radius: 6px; - --box-shadow: none !important; - min-height: 48px; - - span { - font-weight: 400; - font-size: 14px; - text-transform: initial; - } - - .button-text { - display: flex; - justify-content: space-between; - align-items: center; - width: 100%; - padding: 0 8px; - color: var(--ion-color-primary); - - ion-icon { - font-size: 20px; - color: var(--ion-color-primary); - } - } -} - -@media (max-device-height: 640px), handheld and (orientation: portrait) { - ion-img { - width: 64px; - } - - h4 { - font-size: 15px; - } - - p { - line-height: 21px; - font-size: 12px; - } -} diff --git a/src/app/features/settings/modals/selectUnit/modal-selectActive.page.ts b/src/app/features/settings/modals/selectUnit/modal-selectActive.page.ts deleted file mode 100644 index 92f3e0f..0000000 --- a/src/app/features/settings/modals/selectUnit/modal-selectActive.page.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { passwordValidator } from 'src/app/validators/password.validator'; -import { SettingsState } from '../../store/settings.store'; -import * as SettingsActions from '../../actions/settings.actions'; -import { HomeState } from 'src/app/features/home/store/home.store'; -import { Observable } from 'rxjs'; -import { selectHomeState } from 'src/app/store'; -import { UnitResultData } from '@resgrid/ngx-resgridlib'; -import { take } from 'rxjs/operators'; -import * as _ from 'lodash'; - -@Component({ - selector: 'app-modal-selectActive', - templateUrl: './modal-selectActive.page.html', - styleUrls: ['./modal-selectActive.page.scss'], -}) -export class ModalSelectActivePage implements OnInit { - public selectedUnit: UnitResultData; - public serverForm: UntypedFormGroup; - public homeState$: Observable; - - constructor( - private modal: ModalController, - private formBuilder: UntypedFormBuilder, - private store: Store - ) { - this.homeState$ = this.store.select(selectHomeState); - } - - ngOnInit() { - this.homeState$.pipe(take(1)).subscribe((state) => { - if (state && state.activeUnit) { - this.selectedUnit = state.activeUnit; - } - }); - } - - dismissModal() { - this.modal.dismiss(); - } - - compareWith(o1: UnitResultData, o2: UnitResultData) { - return o1 && o2 ? o1.UnitId === o2.UnitId : o1 === o2; - } - - save() { - this.store - .select(selectHomeState) - .pipe(take(1)) - .subscribe((state) => { - if (this.selectedUnit) { - const defaultStatuses = _.find(state.unitStatuses, ['UnitType', '0']); - const statusesForType = _.find(state.unitStatuses, [ - 'UnitType', - this.selectedUnit.Type, - ]); - - if (statusesForType) { - this.store.dispatch( - new SettingsActions.SetActiveUnit( - this.selectedUnit, - statusesForType - ) - ); - } else { - this.store.dispatch( - new SettingsActions.SetActiveUnit( - this.selectedUnit, - defaultStatuses - ) - ); - } - } - }); - } -} diff --git a/src/app/features/settings/modals/serverInfo/modal-serverInfo.page.html b/src/app/features/settings/modals/serverInfo/modal-serverInfo.page.html deleted file mode 100644 index e50b177..0000000 --- a/src/app/features/settings/modals/serverInfo/modal-serverInfo.page.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - -
- - - - {{'setServerModal.serverInfoText' | translate}} - - - - -
-
- - {{'setServerModal.serverLabel' | translate}} - - -
-
- {{'setServerModal.serverErrorText' | translate}} - - {{serverForm.get('serverAddress').errors.message}} - -
- - {{'setServerModal.saveButton' | translate}} - -
-
-
-
-
-
\ No newline at end of file diff --git a/src/app/features/settings/modals/serverInfo/modal-serverInfo.page.scss b/src/app/features/settings/modals/serverInfo/modal-serverInfo.page.scss deleted file mode 100644 index 5dbcce1..0000000 --- a/src/app/features/settings/modals/serverInfo/modal-serverInfo.page.scss +++ /dev/null @@ -1,80 +0,0 @@ -.container { - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; -} - -h4 { - font-weight: 600; - font-size: 17px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); -} - -p { - font-weight: normal; - font-size: 13px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 3; /* number of lines to show */ - -webkit-box-orient: vertical; -} - -ion-fab-button { - --box-shadow: none !important; - --color: var(--ion-color-primary); -} - -.action-button { - --border-radius: 6px; - --box-shadow: none !important; - min-height: 48px; - - span { - font-weight: 400; - font-size: 14px; - text-transform: initial; - } - - .button-text { - display: flex; - justify-content: space-between; - align-items: center; - width: 100%; - padding: 0 8px; - color: var(--ion-color-primary); - - ion-icon { - font-size: 20px; - color: var(--ion-color-primary); - } - } -} - -.errors-container { - font-size: 12px; - font-weight: 600; - color: var(--ion-color-mbt-red); - margin-bottom: 8px; -} - -@media (max-device-height: 640px), handheld and (orientation: portrait) { - ion-img { - width: 64px; - } - - h4 { - font-size: 15px; - } - - p { - line-height: 21px; - font-size: 12px; - } -} diff --git a/src/app/features/settings/modals/serverInfo/modal-serverInfo.page.ts b/src/app/features/settings/modals/serverInfo/modal-serverInfo.page.ts deleted file mode 100644 index 696f643..0000000 --- a/src/app/features/settings/modals/serverInfo/modal-serverInfo.page.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { - UntypedFormBuilder, - UntypedFormGroup, - Validators, -} from '@angular/forms'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { SettingsState } from '../../store/settings.store'; -import * as SettingsActions from '../../actions/settings.actions'; -import { urlValidator } from 'src/app/validators/url.validators'; -import { StorageProvider } from 'src/app/providers/storage'; - -@Component({ - selector: 'app-modal-serverInfo', - templateUrl: './modal-serverInfo.page.html', - styleUrls: ['./modal-serverInfo.page.scss'], -}) -export class ModalServerInfoPage implements OnInit { - serverForm: UntypedFormGroup; - - constructor( - private modal: ModalController, - private formBuilder: UntypedFormBuilder, - private store: Store, - private storageService: StorageProvider - ) {} - - ngOnInit() { - this.serverForm = this.formBuilder.group({ - serverAddress: [ - 'https://api.resgrid.com', - [Validators.required, urlValidator], - ], - }); - - let serverAddress = this.storageService.getServerAddress(); - if (serverAddress) { - this.serverForm.controls['serverAddress'].setValue(serverAddress); - this.serverForm.controls['serverAddress'].patchValue(serverAddress); - } - } - - dismissModal() { - this.modal.dismiss(); - } - - save() { - if (this.serverForm.valid) { - this.store.dispatch( - new SettingsActions.SetServerAddress(this.f.serverAddress.value.trim()) - ); - } else { - console.log('invalid'); - } - } - - get f() { - return this.serverForm.controls; - } -} diff --git a/src/app/features/settings/models/loginPayload.ts b/src/app/features/settings/models/loginPayload.ts deleted file mode 100644 index 0307399..0000000 --- a/src/app/features/settings/models/loginPayload.ts +++ /dev/null @@ -1,4 +0,0 @@ -export class LoginPayload { - public username: string = ''; - public password: string = ''; -} \ No newline at end of file diff --git a/src/app/features/settings/models/startupData.ts b/src/app/features/settings/models/startupData.ts deleted file mode 100644 index 904a4e3..0000000 --- a/src/app/features/settings/models/startupData.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { LoginResult } from "src/app/models/loginResult"; - -export class StartupData { - public loginData: LoginResult = new LoginResult(); - public activeUnitId: string = ''; - public pushNotificationsEnabled: boolean = false; - public themePreference: number = -1; - public keepAlive: boolean = false; - public headsetType: number = -1; - public activeCallId: string = ''; - public backgroundGeolocationEnabled: boolean = false; - public showAll: boolean = false; -} diff --git a/src/app/features/settings/providers/auth.ts b/src/app/features/settings/providers/auth.ts deleted file mode 100644 index e0652a8..0000000 --- a/src/app/features/settings/providers/auth.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { Injectable, Inject } from "@angular/core"; -import { combineLatest, concat, Observable, of, Subscription } from "rxjs"; -import { - AuthService, - ProfileModel, - SecurityService, -} from '@resgrid/ngx-resgridlib'; -import { map, mergeMap } from "rxjs/operators"; -import { LoginResult } from "src/app/models/loginResult"; - -@Injectable({ - providedIn: "root", -}) -export class AuthProvider { - private refreshTokenSub: Subscription; - - constructor( - private authProvider: AuthService, - private securityService: SecurityService - ) {} - - public login(username: string, password: string): Observable { - const login = this.authProvider.login({ - username: username, - password: password, - refresh_token: "", - }); - const getDepartmentRights = this.securityService.applySecurityRights(); - - return login.pipe( - mergeMap((loginResult) => { - return combineLatest([of(loginResult), getDepartmentRights]); - }), - map(([loginResult, rightsResult]) => { - let result: LoginResult = loginResult as LoginResult; - result.Rights = rightsResult.Data; - - return result; - }) - ); - } - - public startTrackingRefreshToken(): void { - this.refreshTokenSub = this.authProvider.init().subscribe(result => { - //console.log(JSON.stringify(result)); - }); - } - - public refreshTokens() { - return this.authProvider.refreshTokens(); - } - - public logout() { - this.authProvider.logout(); - } -} diff --git a/src/app/features/settings/reducers/settings.reducer.ts b/src/app/features/settings/reducers/settings.reducer.ts deleted file mode 100644 index b5e6dd8..0000000 --- a/src/app/features/settings/reducers/settings.reducer.ts +++ /dev/null @@ -1,123 +0,0 @@ -import * as _ from 'lodash'; -import { initialState, SettingsState } from '../store/settings.store'; -import { - SettingActionTypes, - SettingsActionsUnion, -} from '../actions/settings.actions'; - -export function reducer( - state: SettingsState = initialState, - action: SettingsActionsUnion -): SettingsState { - switch (action.type) { - case SettingActionTypes.IS_LOGIN: - return { - ...state, - isLogging: true, - }; - case SettingActionTypes.LOGIN_SUCCESS: - return { - ...state, - loggedIn: true, - user: action.user, - }; - case SettingActionTypes.SET_LOGINDATA_NAV_HOME: - return { - ...state, - loggedIn: true, - user: action.user, - enablePushNotifications: action.enablePushNotifications, - themePreference: action.themePreference, - keepAlive: action.keepAlive, - headsetType: action.headsetType, - enableBackgroundGeolocation: action.backgroundGeolocationEnabled - }; - case SettingActionTypes.LOGIN_FAIL: - return { - ...state, - errorMsg: 'Invalid user credentials', - isLogging: false, - }; - case SettingActionTypes.IS_LOGIN: - return { - ...state, - isLogging: true, - }; - case SettingActionTypes.LOGIN_DONE: - return { - ...state, - isLogging: false, - }; - case SettingActionTypes.SAVE_PUSH_NOTIFICATION_SETTING: - return { - ...state, - enablePushNotifications: action.enablePushNotifications, - }; - case SettingActionTypes.SAVE_BACKGROUND_GEOLOCATION_SETTING: - return { - ...state, - enableBackgroundGeolocation: action.enableBackgroundGeolocation, - }; - case SettingActionTypes.SAVE_PERFER_DARKMODE_SETTING: - return { - ...state, - themePreference: action.themePreference, - }; - case SettingActionTypes.SAVE_KEEP_ALIVE_SETTING: - return { - ...state, - keepAlive: action.keepAlive, - }; - case SettingActionTypes.SAVE_HEADSET_TYPE_SETTING: - return { - ...state, - headsetType: action.headsetType, - }; - case SettingActionTypes.SET_APP_SETTINGS: - return { - ...state, - enablePushNotifications: action.enablePushNotifications, - keepAlive: action.keepAlive, - themePreference: action.themePreference, - headsetType: action.headsetType, - }; - case SettingActionTypes.LOGOUT: - return { - ...state, - loggedIn: false, - errorMsg: null, - isLogging: false, - user: null, - enablePushNotifications: false, - themePreference: -1, - keepAlive: false, - headsetType: -1, - }; - case SettingActionTypes.SAVE_MIC_SETTING: - return { - ...state, - selectedMic: action.mic, - }; - case SettingActionTypes.SET_IS_APP_ACTIVE: - return { - ...state, - isAppActive: action.isActive, - }; - default: - return state; - } -} - -export const getIsLoggedInState = (state: SettingsState) => state.loggedIn; -export const getPushNotificationState = (state: SettingsState) => - state.enablePushNotifications; -export const getKeepAliveState = (state: SettingsState) => state.keepAlive; -export const getHeadsetTypeState = (state: SettingsState) => state.headsetType; -export const getSelectedMicState = (state: SettingsState) => state.selectedMic; -export const getIsAppActiveState = (state: SettingsState) => state.isAppActive; -export const getBackgroundGeolocationState = (state: SettingsState) => - state.enableBackgroundGeolocation; - export const getUserState = (state: SettingsState) => state.user; - export const getThemePreferenceState = (state: SettingsState) => - state.themePreference; - export const getShowAllState = (state: SettingsState) => state.showAll; \ No newline at end of file diff --git a/src/app/features/settings/settings-routing.module.ts b/src/app/features/settings/settings-routing.module.ts deleted file mode 100644 index e655006..0000000 --- a/src/app/features/settings/settings-routing.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - { - path: '', - redirectTo: 'main', - pathMatch: 'full' - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class SettingsRoutingModule {} diff --git a/src/app/features/settings/settings.module.ts b/src/app/features/settings/settings.module.ts deleted file mode 100644 index eac151a..0000000 --- a/src/app/features/settings/settings.module.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { reducer } from './reducers/settings.reducer'; -import {SettingsRoutingModule } from './settings-routing.module'; -import { EffectsModule } from '@ngrx/effects'; -import { SettingsEffects } from './effects/settings.effects'; -import { StoreModule } from '@ngrx/store'; -import { ModalLoginPage } from './modals/login/modal-login.page'; -import { ModalServerInfoPage } from './modals/serverInfo/modal-serverInfo.page'; -import { ModalSelectActivePage } from './modals/selectUnit/modal-selectActive.page'; -import { ModalSelectCallPage } from './modals/selectCall/modal-selectCall.page'; -import { ModalConfirmLogoutPage } from './modals/confirmLogout/modal-confirmLogout.page'; -import { ModalAboutPage } from './modals/about/modal-about.page'; -import { TranslateModule } from '@ngx-translate/core'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - ReactiveFormsModule, - StoreModule.forFeature('settingsModule', reducer), - EffectsModule.forFeature([SettingsEffects]), - SettingsRoutingModule, - TranslateModule - ], - declarations: [ - ModalLoginPage, - ModalServerInfoPage, - ModalSelectActivePage, - ModalSelectCallPage, - ModalConfirmLogoutPage, - ModalAboutPage - ], - exports: [] -}) -export class SettingsModule {} diff --git a/src/app/features/settings/store/settings.store.ts b/src/app/features/settings/store/settings.store.ts deleted file mode 100644 index 6099894..0000000 --- a/src/app/features/settings/store/settings.store.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { HeadsetType } from "src/app/models/headsetType"; -import { UserInfo } from "src/app/models/userInfo"; - -export interface SettingsState { - loggedIn: boolean; - errorMsg: string; - isLogging: boolean; - user: UserInfo; - enablePushNotifications: boolean; - themePreference: number; - keepAlive: boolean; - headsetType: number; - selectedMic: string; - isAppActive: boolean; - enableBackgroundGeolocation: boolean; - showAll: boolean; -} - -export const initialState: SettingsState = { - loggedIn: false, - errorMsg: null, - isLogging: false, - user: null, - enablePushNotifications: false, - themePreference: -1, - keepAlive: false, - headsetType: -1, - selectedMic: "", - isAppActive: true, - enableBackgroundGeolocation: false, - showAll: false -}; diff --git a/src/app/features/statuses/actions/statuses.actions.ts b/src/app/features/statuses/actions/statuses.actions.ts deleted file mode 100644 index 8feb4cb..0000000 --- a/src/app/features/statuses/actions/statuses.actions.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { Action } from '@ngrx/store'; -import { - CallResultData, - GroupResultData, - StatusesResultData, -} from '@resgrid/ngx-resgridlib'; -import { StatusDestination } from '../models/statusDestination'; - -export enum StatusesActionTypes { - SUBMIT_UNIT_STATUS_START = '[STATUSES] SUBMIT_UNIT_STATUS_START', - SUBMIT_UNIT_STATUS_SET = '[STATUSES] SUBMIT_UNIT_STATUS_SET', - SUBMIT_UNIT_STATUS_NOTE = '[STATUSES] SUBMIT_UNIT_STATUS_NOTE', - SUBMIT_UNIT_STATUS_DESTINATION = '[STATUSES] SUBMIT_UNIT_STATUS_DESTINATION', - SUBMIT_UNIT_STATUS_DESTINATION_MODAL = '[STATUSES] SUBMIT_UNIT_STATUS_DESTINATION_MODAL', - SUBMIT_UNIT_STATUS_DESTINATION_SET = '[STATUSES] SUBMIT_UNIT_STATUS_DESTINATION_SET', - SUBMIT_UNIT_STATUS_NOTE_SET = '[STATUSES] SUBMIT_UNIT_STATUS_NOTE_SET', - SUBMIT_UNIT_STATUS_NOTE_MODAL = '[STATUSES] SUBMIT_UNIT_STATUS_NOTE_MODAL', - SUBMIT_UNIT_STATUS_SET_DONE = '[STATUSES] SUBMIT_UNIT_STATUS_SET_DONE', - SUBMIT_UNIT_STATUS_SET_ERROR = '[STATUSES] SUBMIT_UNIT_STATUS_SET_ERROR', - SUBMIT_UNIT_STATUS_SET_FINISH = '[STATUSES] SUBMIT_UNIT_STATUS_SET_FINISH', -} - -export class SubmitUnitStatus implements Action { - readonly type = StatusesActionTypes.SUBMIT_UNIT_STATUS_START; - constructor(public status: StatusesResultData, public groups: GroupResultData[], public calls: CallResultData[]) {} -} - -export class SubmitUnitStatusSet implements Action { - readonly type = StatusesActionTypes.SUBMIT_UNIT_STATUS_SET; - constructor() {} -} - -export class SubmitUnitStatusNote implements Action { - readonly type = StatusesActionTypes.SUBMIT_UNIT_STATUS_NOTE; - constructor(public status: StatusesResultData) {} -} - -export class SubmitUnitStatusNoteModal implements Action { - readonly type = StatusesActionTypes.SUBMIT_UNIT_STATUS_NOTE_MODAL; - constructor(public status: StatusesResultData) {} -} - -export class SubmitUnitStatusDesination implements Action { - readonly type = StatusesActionTypes.SUBMIT_UNIT_STATUS_DESTINATION; - constructor(public status: StatusesResultData, public destinations: StatusDestination[]) {} -} - -export class SubmitUnitStatusDesinationModal implements Action { - readonly type = StatusesActionTypes.SUBMIT_UNIT_STATUS_DESTINATION_MODAL; - constructor() {} -} - -export class SubmitUnitStatusDesinationSet implements Action { - readonly type = StatusesActionTypes.SUBMIT_UNIT_STATUS_DESTINATION_SET; - constructor(public status: StatusesResultData, public destination: StatusDestination) {} -} - -export class SubmitUnitStatusNoteSet implements Action { - readonly type = StatusesActionTypes.SUBMIT_UNIT_STATUS_NOTE_SET; - constructor(public note: string) {} -} - -export class SubmitUnitStatusSetDone implements Action { - readonly type = StatusesActionTypes.SUBMIT_UNIT_STATUS_SET_DONE; - constructor() {} -} - -export class SubmitUnitStatusSetError implements Action { - readonly type = StatusesActionTypes.SUBMIT_UNIT_STATUS_SET_ERROR; - constructor(public payload: string) {} -} - -export class SubmitUnitStatusSetFinish implements Action { - readonly type = StatusesActionTypes.SUBMIT_UNIT_STATUS_SET_FINISH; - constructor() {} -} - -export type StatusesActionsUnion = - | SubmitUnitStatus - | SubmitUnitStatusSet - | SubmitUnitStatusNote - | SubmitUnitStatusDesination - | SubmitUnitStatusDesinationModal - | SubmitUnitStatusDesinationSet - | SubmitUnitStatusNoteSet - | SubmitUnitStatusNoteModal - | SubmitUnitStatusSetDone - | SubmitUnitStatusSetError - | SubmitUnitStatusSetFinish; diff --git a/src/app/features/statuses/components/actionsList/action-lists.component.html b/src/app/features/statuses/components/actionsList/action-lists.component.html deleted file mode 100644 index 05afc33..0000000 --- a/src/app/features/statuses/components/actionsList/action-lists.component.html +++ /dev/null @@ -1,4 +0,0 @@ -
- - {{status.Text}} -
\ No newline at end of file diff --git a/src/app/features/statuses/components/actionsList/action-lists.component.scss b/src/app/features/statuses/components/actionsList/action-lists.component.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/features/statuses/components/actionsList/action-lists.component.ts b/src/app/features/statuses/components/actionsList/action-lists.component.ts deleted file mode 100644 index c34b78f..0000000 --- a/src/app/features/statuses/components/actionsList/action-lists.component.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Component, OnInit } from "@angular/core"; -import { Store } from "@ngrx/store"; -import { DepartmentVoiceChannelResultData, StatusesResultData } from '@resgrid/ngx-resgridlib'; -import { Observable } from "rxjs"; -import { take } from "rxjs/operators"; -import { HomeState } from "src/app/features/home/store/home.store"; -import { selectAvailableChannelsState, selectHomeState, selectVoiceState } from "src/app/store"; -import { StatusesState } from "../../store/statuses.store"; -import * as StatusesActions from '../../actions/statuses.actions'; - -@Component({ - selector: "app-action-lists", - templateUrl: "./action-lists.component.html", - styleUrls: ["./action-lists.component.scss"], -}) -export class UnitActionsListComponent implements OnInit { - public homeState$: Observable; - - constructor(private store: Store, private statusesStore: Store) { - this.homeState$ = this.store.select(selectHomeState); - } - - ngOnInit(): void { - } - - public submitStatus(status: StatusesResultData) { - this.store - .select(selectHomeState) - .pipe(take(1)) - .subscribe((state) => { - this.statusesStore.dispatch( - new StatusesActions.SubmitUnitStatus( - status, - state.groups, - state.calls - ) - ); - }); - } -} diff --git a/src/app/features/statuses/effects/statuses.effect.ts b/src/app/features/statuses/effects/statuses.effect.ts deleted file mode 100644 index c28e793..0000000 --- a/src/app/features/statuses/effects/statuses.effect.ts +++ /dev/null @@ -1,376 +0,0 @@ -import * as statusesAction from '../actions/statuses.actions'; -import { Action, Store } from '@ngrx/store'; -import { - Actions, - concatLatestFrom, - createEffect, - ofType, -} from '@ngrx/effects'; -import { - catchError, - exhaustMap, - map, - mergeMap, - switchMap, - tap, - withLatestFrom, -} from 'rxjs/operators'; -import { Injectable } from '@angular/core'; -import { from, Observable, of } from 'rxjs'; -import { - SaveUnitStatusInput, - UnitStatusService, - VoiceService, -} from '@resgrid/ngx-resgridlib'; -import { StatusDestination } from '../models/statusDestination'; -import { ModalSetStatusDestinationPage } from '../modals/setStatusDestination/modal-setStatusDestination.page'; -import { MenuController, ModalController } from '@ionic/angular'; -import { ModalSetStatusNotePage } from '../modals/setStatusNote/modal-setStatusNote.page'; -import { HomeState } from '../../home/store/home.store'; -import { StatusesState } from '../store/statuses.store'; -import { selectHomeState, selectStatusesState } from 'src/app/store'; -import { LoadingProvider } from 'src/app/providers/loading'; -import * as HomeActions from '../../../features/home/actions/home.actions'; - -@Injectable() -export class StatusesEffects { - private _modalRef: HTMLIonModalElement; - - submitUnitStatus$ = createEffect(() => - this.actions$.pipe( - ofType( - statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_START - ), - tap((action) => {}), - map((data) => { - if (data && data.status) { - if (data.status.Detail === 0) { - // No detail - return { - type: statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_NOTE, - status: data.status, - }; - } - - let destinations: StatusDestination[] = []; - - if (data.status.Detail === 1) { - //Stations - data.groups.forEach((group) => { - if (group.TypeId == 2) { - destinations.push({ - id: group.GroupId, - name: group.Name, - type: 1, // Station type - }); - } - }); - } else if (data.status.Detail === 2) { - // Calls - data.calls.forEach((call) => { - destinations.push({ - id: call.CallId, - name: call.Name, - type: 2, // Call type - }); - }); - } else if (data.status.Detail === 3) { - // Calls and Stations - data.groups.forEach((group) => { - if (group.TypeId == 2) { - destinations.push({ - id: group.GroupId, - name: group.Name, - type: 1, // Station type - }); - } - }); - - data.calls.forEach((call) => { - destinations.push({ - id: call.CallId, - name: call.Name, - type: 2, // Call type - }); - }); - } - - return { - type: statusesAction.StatusesActionTypes - .SUBMIT_UNIT_STATUS_DESTINATION, - status: data.status, - destinations: destinations, - }; - } else { - return { - type: statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_SET, - }; - } - }) - ) - ); - - submitUnitStatusDestinationSet$ = createEffect(() => - this.actions$.pipe( - ofType( - statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_DESTINATION_SET - ), - tap((action) => {}), - map((data) => { - if (data && data.status) { - if (data.status.Note === 0) { - //None = 0, - //Optional = 1, - //Required = 2 - - // No Note - return { - type: statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_SET, - }; - } - - return { - type: statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_NOTE, - status: data.status, - }; - } else { - return { - type: statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_SET, - }; - } - }) - ) - ); - - submitUnitStatusSet$ = createEffect(() => - this.actions$.pipe( - ofType( - statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_SET - ), - concatLatestFrom(() => [ - this.homeStore.select(selectHomeState), - this.statusesStore.select(selectStatusesState), - ]), - switchMap(([action, homeState, statusesState], index) => { - let unitStatus: SaveUnitStatusInput = new SaveUnitStatusInput(); - let date = new Date(); - - unitStatus.Id = homeState.activeUnit?.UnitId; - unitStatus.Type = statusesState.submittingUnitStatus.Id.toString(); - unitStatus.Timestamp = date.toISOString(); - unitStatus.TimestampUtc = date.toUTCString().replace('UTC', 'GMT'); - unitStatus.Note = statusesState.submittingUnitStatusNote; - - if (homeState.currentPosition) { - if (homeState.currentPosition.Latitude) { - unitStatus.Latitude = homeState.currentPosition.Latitude.toString(); - } - - if (homeState.currentPosition.Longitude) { - unitStatus.Longitude = - homeState.currentPosition.Longitude.toString(); - } - - if (homeState.currentPosition.Altitude) { - unitStatus.Altitude = homeState.currentPosition.Altitude.toString(); - } - - if (homeState.currentPosition.Heading) { - unitStatus.Heading = homeState.currentPosition.Heading.toString(); - } - - if (homeState.currentPosition.Speed) { - unitStatus.Speed = homeState.currentPosition.Speed.toString(); - } - - if (homeState.currentPosition.Accuracy) { - unitStatus.Accuracy = homeState.currentPosition.Accuracy.toString(); - } - - if (homeState.currentPosition.AltitudeAccuracy) { - unitStatus.AltitudeAccuracy = - homeState.currentPosition.AltitudeAccuracy.toString(); - } - } - //unitStatus.EventId - //unitStatus.Roles: SaveUnitStatusRoleInput[]; - - if (statusesState.submitStatusDestination) { - unitStatus.RespondingTo = - statusesState.submitStatusDestination.id.toString(); - } - - return this.unitStatusService.saveUnitStatus(unitStatus).pipe( - map((data) => { - return { - type: statusesAction.StatusesActionTypes - .SUBMIT_UNIT_STATUS_SET_DONE, - }; - }), - catchError(() => - of({ - type: statusesAction.StatusesActionTypes - .SUBMIT_UNIT_STATUS_SET_ERROR, - }) - ) - ); - }) - ) - ); - - submitUnitStatusNote$ = createEffect(() => - this.actions$.pipe( - ofType( - statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_NOTE - ), - tap((action) => {}), - map((data) => { - if (data && data.status) { - if (data.status.Note === 0) { - //None = 0, - //Optional = 1, - //Required = 2 - - // No Note - return { - type: statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_SET, - status: data.status, - }; - } - - return { - type: statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_NOTE_MODAL, - }; - } else { - return { - type: statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_SET, - }; - } - }) - ) - ); - - submitUnitStatusNoteSet$ = createEffect(() => - this.actions$.pipe( - ofType( - statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_NOTE_SET - ), - switchMap(async (action) => this.closeModal()), - switchMap(async (action) => this.loadingProvider.hide()), - map((data) => { - return { - type: statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_SET, - }; - }) - ) - ); - - submitUnitStatusNoteModal$ = createEffect( - () => - this.actions$.pipe( - ofType( - statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_NOTE_MODAL - ), - exhaustMap((data) => this.runModal(ModalSetStatusNotePage, null, null, { - breakpoints: [0, 0.2, 0.5], - initialBreakpoint: 0.5, - })) - ), - { dispatch: false } - ); - - - submitUnitStatusDestination$ = createEffect( - () => - this.actions$.pipe( - ofType( - statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_DESTINATION - ), - concatLatestFrom(() => [ - this.homeStore.select(selectHomeState), - ]), - exhaustMap(([action, homeState], index) => { - if (homeState.activeCall) { - let componentProps = { - 'activeCallId': homeState.activeCall.CallId, - }; - - return this.runModal(ModalSetStatusDestinationPage, null, componentProps, { - breakpoints: [0, 0.3, 0.5], - initialBreakpoint: 0.3, - }); - } - - return this.runModal(ModalSetStatusDestinationPage, null, null, { - breakpoints: [0, 0.3, 0.5], - initialBreakpoint: 0.3, - }); - }) - ), - { dispatch: false } - ); - - submitUnitStatusSetDone$ = createEffect( - () => - this.actions$.pipe( - ofType(statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_SET_DONE), - switchMap(() => this.closeModal()), - switchMap(() => this.loadingProvider.hide()), - tap(() => { - this.homeStore.dispatch(new HomeActions.GetCurrentStatus()); - }), - map((data) => { - return { - type: statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_SET_FINISH, - }; - }) - ) - ); - - submitUnitStatusSetError$ = createEffect( - () => - this.actions$.pipe( - ofType(statusesAction.StatusesActionTypes.SUBMIT_UNIT_STATUS_SET_ERROR), - switchMap(() => this.closeModal()), - switchMap(() => this.loadingProvider.hide()), - ), - { dispatch: false } - ); - - constructor( - private actions$: Actions, - private modalController: ModalController, - private unitStatusService: UnitStatusService, - private homeStore: Store, - private statusesStore: Store, - private loadingProvider: LoadingProvider, - private menuCtrl: MenuController - ) {} - - runModal = async (component, cssClass, properties, opts = {}) => { - await this.closeModal(); - await this.menuCtrl.close(); - - if (!cssClass) { - cssClass = 'modal-container'; - } - - this._modalRef = await this.modalController.create({ - component: component, - cssClass: cssClass, - componentProps: properties, - ...opts, - }); - - return from(this._modalRef.present()); - }; - - closeModal = async () => { - try { - //if (this._modalRef) { - await this.modalController.dismiss(); - this._modalRef = null; - //} - } catch (error) { } - }; -} diff --git a/src/app/features/statuses/modals/setStatusDestination/modal-setStatusDestination.page.html b/src/app/features/statuses/modals/setStatusDestination/modal-setStatusDestination.page.html deleted file mode 100644 index 9fa80ad..0000000 --- a/src/app/features/statuses/modals/setStatusDestination/modal-setStatusDestination.page.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - -
- - - - - {{'setDestinationModal.destinationLabel' | translate}} - - {{ destination.name }} - - - - {{'setDestinationModal.setButton' | translate}} - - - - -
-
diff --git a/src/app/features/statuses/modals/setStatusDestination/modal-setStatusDestination.page.scss b/src/app/features/statuses/modals/setStatusDestination/modal-setStatusDestination.page.scss deleted file mode 100644 index 0c2b8e7..0000000 --- a/src/app/features/statuses/modals/setStatusDestination/modal-setStatusDestination.page.scss +++ /dev/null @@ -1,73 +0,0 @@ -.container { - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; -} - -h4 { - font-weight: 600; - font-size: 17px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); -} - -p { - font-weight: normal; - font-size: 13px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 3; /* number of lines to show */ - -webkit-box-orient: vertical; -} - -ion-fab-button { - --box-shadow: none !important; - --color: var(--ion-color-primary); -} - -.action-button { - --border-radius: 6px; - --box-shadow: none !important; - min-height: 48px; - - span { - font-weight: 400; - font-size: 14px; - text-transform: initial; - } - - .button-text { - display: flex; - justify-content: space-between; - align-items: center; - width: 100%; - padding: 0 8px; - color: var(--ion-color-primary); - - ion-icon { - font-size: 20px; - color: var(--ion-color-primary); - } - } -} - -@media (max-device-height: 640px), handheld and (orientation: portrait) { - ion-img { - width: 64px; - } - - h4 { - font-size: 15px; - } - - p { - line-height: 21px; - font-size: 12px; - } -} diff --git a/src/app/features/statuses/modals/setStatusDestination/modal-setStatusDestination.page.ts b/src/app/features/statuses/modals/setStatusDestination/modal-setStatusDestination.page.ts deleted file mode 100644 index 10c2a75..0000000 --- a/src/app/features/statuses/modals/setStatusDestination/modal-setStatusDestination.page.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { HomeState } from 'src/app/features/home/store/home.store'; -import { Observable } from 'rxjs'; -import { selectHomeState, selectStatusesState } from 'src/app/store'; -import { CallResultData, StatusesResultData, UnitResultData } from '@resgrid/ngx-resgridlib'; -import { take } from 'rxjs/operators'; -import * as _ from 'lodash'; -import { StatusesState } from '../../store/statuses.store'; -import { StatusDestination } from '../../models/statusDestination'; -import * as StatusesActions from '../../actions/statuses.actions'; -import * as SettingsActions from '../../../settings/actions/settings.actions'; - -@Component({ - selector: 'app-modal-setStatusDestination', - templateUrl: './modal-setStatusDestination.page.html', - styleUrls: ['./modal-setStatusDestination.page.scss'], -}) -export class ModalSetStatusDestinationPage implements OnInit { - public selectedDestination: StatusDestination; - public statusesState$: Observable; - public selectOptions: any; - public status: StatusesResultData; - - @Input() activeCallId: string; - - constructor( - private modal: ModalController, - private statusesStore: Store, - private homeStore: Store - ) { - this.statusesState$ = this.statusesStore.select(selectStatusesState); - } - - ngOnInit() { - this.selectOptions = { - title: 'Select Destination', - subTitle: 'The destination of your action', - mode: 'lg', - }; - - if (this.activeCallId && this.activeCallId !== '0') { - this.statusesStore - .select(selectStatusesState) - .pipe(take(1)) - .subscribe((statusesState) => { - if (statusesState && statusesState.submittingUnitStatus) { - this.status = statusesState.submittingUnitStatus; - } - if (statusesState && statusesState.submitStatusDestinations) { - statusesState.submitStatusDestinations.forEach((destination) => { - if (destination.id == this.activeCallId) { - this.selectedDestination = destination; - } - }); - } - }); - } - } - - dismissModal() { - this.modal.dismiss(); - } - - compareWith(o1: StatusDestination, o2: StatusDestination) { - return o1 && o2 ? o1.id === o2.id : o1 === o2; - } - - public canSubmit(): boolean { - if (this.status) { - if (this.status.Note === 3 && !this.selectedDestination) { - return false; - } - } - - return true; - } - - setDestination() { - if (this.canSubmit) { - this.statusesStore - .select(selectStatusesState) - .pipe(take(1)) - .subscribe((state) => { - if (this.selectedDestination) { - if (this.selectedDestination.type === 2) { - this.homeStore - .select(selectHomeState) - .pipe(take(1)) - .subscribe((state) => { - const selectedCall = _.find(state.calls, ['CallId', this.selectedDestination.id]); - const defaultPriority = _.find(state.callPriorties, ['Id', 0]); - const priorityForCall = _.find(state.callPriorties, [ - 'Id', - selectedCall.Priority, - ]); - - if (priorityForCall) { - this.homeStore.dispatch( - new SettingsActions.SetActiveCall( - selectedCall, - priorityForCall - ) - ); - } else { - this.homeStore.dispatch( - new SettingsActions.SetActiveCall( - selectedCall, - defaultPriority - ) - ); - } - }); - } - } - - this.statusesStore.dispatch( - new StatusesActions.SubmitUnitStatusDesinationSet( - state.submittingUnitStatus, - this.selectedDestination - ) - ); - }); - } - } -} diff --git a/src/app/features/statuses/modals/setStatusNote/modal-setStatusNote.page.html b/src/app/features/statuses/modals/setStatusNote/modal-setStatusNote.page.html deleted file mode 100644 index 9cb7812..0000000 --- a/src/app/features/statuses/modals/setStatusNote/modal-setStatusNote.page.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - -
- - - -
- - {{'setStatusModal.noteLabel' | translate}} - - - - {{'setStatusModal.setButton' | translate}} - -
-
-
-
-
-
\ No newline at end of file diff --git a/src/app/features/statuses/modals/setStatusNote/modal-setStatusNote.page.scss b/src/app/features/statuses/modals/setStatusNote/modal-setStatusNote.page.scss deleted file mode 100644 index 0c2b8e7..0000000 --- a/src/app/features/statuses/modals/setStatusNote/modal-setStatusNote.page.scss +++ /dev/null @@ -1,73 +0,0 @@ -.container { - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; -} - -h4 { - font-weight: 600; - font-size: 17px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); -} - -p { - font-weight: normal; - font-size: 13px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 3; /* number of lines to show */ - -webkit-box-orient: vertical; -} - -ion-fab-button { - --box-shadow: none !important; - --color: var(--ion-color-primary); -} - -.action-button { - --border-radius: 6px; - --box-shadow: none !important; - min-height: 48px; - - span { - font-weight: 400; - font-size: 14px; - text-transform: initial; - } - - .button-text { - display: flex; - justify-content: space-between; - align-items: center; - width: 100%; - padding: 0 8px; - color: var(--ion-color-primary); - - ion-icon { - font-size: 20px; - color: var(--ion-color-primary); - } - } -} - -@media (max-device-height: 640px), handheld and (orientation: portrait) { - ion-img { - width: 64px; - } - - h4 { - font-size: 15px; - } - - p { - line-height: 21px; - font-size: 12px; - } -} diff --git a/src/app/features/statuses/modals/setStatusNote/modal-setStatusNote.page.ts b/src/app/features/statuses/modals/setStatusNote/modal-setStatusNote.page.ts deleted file mode 100644 index 63ca9bc..0000000 --- a/src/app/features/statuses/modals/setStatusNote/modal-setStatusNote.page.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { HomeState } from 'src/app/features/home/store/home.store'; -import { Observable } from 'rxjs'; -import { selectHomeState, selectStatusesState } from 'src/app/store'; -import { - CallResultData, - StatusesResultData, - UnitResultData, -} from '@resgrid/ngx-resgridlib'; -import { take } from 'rxjs/operators'; -import * as _ from 'lodash'; -import { StatusesState } from '../../store/statuses.store'; -import * as StatusesActions from '../../actions/statuses.actions'; -import * as HomeActions from '../../../../features/home/actions/home.actions'; - -@Component({ - selector: 'app-modal-setStatusNote', - templateUrl: './modal-setStatusNote.page.html', - styleUrls: ['./modal-setStatusNote.page.scss'], -}) -export class ModalSetStatusNotePage implements OnInit { - public status: StatusesResultData; - public noteForm: UntypedFormGroup; - public statusesState$: Observable; - public selectOptions: any; - - constructor( - private modal: ModalController, - private store: Store, - public formBuilder: UntypedFormBuilder - ) { - this.statusesState$ = this.store.select(selectStatusesState); - } - - ngOnInit() { - this.statusesState$.subscribe((state) => { - if (state && state.submittingUnitStatus) { - this.status = state.submittingUnitStatus; - } - }); - - this.selectOptions = { - title: 'Select Call', - subTitle: 'The active call your working', - mode: 'lg', - }; - - this.noteForm = this.formBuilder.group({ - callNote: [''], - }); - } - - get form() { - return this.noteForm.controls; - } - - dismissModal() { - this.modal.dismiss(); - } - - public canSubmit(): boolean { - if (this.status) { - const callForm = this.form; - const callNote = callForm['callNote'].value; - - if (this.status.Note === 3 && (!callNote || callNote.length === 0)) { - return false; - } - } - - return true; - } - - setNote() { - if (this.canSubmit()) { - const callForm = this.form; - const callNote = callForm['callNote'].value; - this.store.dispatch(new StatusesActions.SubmitUnitStatusNoteSet(callNote)); - } - } -} diff --git a/src/app/features/statuses/models/statusDestination.ts b/src/app/features/statuses/models/statusDestination.ts deleted file mode 100644 index 8a4954c..0000000 --- a/src/app/features/statuses/models/statusDestination.ts +++ /dev/null @@ -1,5 +0,0 @@ -export class StatusDestination { - public name: string = ''; - public id: string = ''; - public type: number = 0; -} \ No newline at end of file diff --git a/src/app/features/statuses/reducers/statuses.reducer.ts b/src/app/features/statuses/reducers/statuses.reducer.ts deleted file mode 100644 index 59f8705..0000000 --- a/src/app/features/statuses/reducers/statuses.reducer.ts +++ /dev/null @@ -1,57 +0,0 @@ -import * as _ from 'lodash'; -import { initialState, StatusesState } from '../store/statuses.store'; -import { - StatusesActionsUnion, - StatusesActionTypes, -} from '../actions/statuses.actions'; - -export function reducer( - state: StatusesState = initialState, - action: StatusesActionsUnion -): StatusesState { - switch (action.type) { - case StatusesActionTypes.SUBMIT_UNIT_STATUS_START: - let setStatusType = 0; - - if (action.status) { - //None = 0, - //Stations = 1, - //Calls = 2, - //CallsAndStations = 3 - setStatusType = action.status.Detail; - } - - return { - ...state, - submittingUnitStatus: action.status, - submittingUnitStatusModalDisplay: setStatusType, - }; - case StatusesActionTypes.SUBMIT_UNIT_STATUS_DESTINATION: - return { - ...state, - submitStatusDestinations: action.destinations, - }; - case StatusesActionTypes.SUBMIT_UNIT_STATUS_NOTE_SET: - return { - ...state, - submittingUnitStatusNote: action.note, - }; - case StatusesActionTypes.SUBMIT_UNIT_STATUS_DESTINATION_SET: - return { - ...state, - submitStatusDestination: action.destination, - }; - case StatusesActionTypes.SUBMIT_UNIT_STATUS_SET_DONE: - return { - ...state, - submittingUnitStatus: null, - submittingUnitStatusUnitId: null, - submittingUnitStatusModalDisplay: 0, - submitStatusDestinations: null, - submittingUnitStatusNote: null, - submitStatusDestination: null - }; - default: - return state; - } -} diff --git a/src/app/features/statuses/statuses-routing.module.ts b/src/app/features/statuses/statuses-routing.module.ts deleted file mode 100644 index 9a51a9c..0000000 --- a/src/app/features/statuses/statuses-routing.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class StatusesRoutingModule {} diff --git a/src/app/features/statuses/statuses.module.ts b/src/app/features/statuses/statuses.module.ts deleted file mode 100644 index 4b9a156..0000000 --- a/src/app/features/statuses/statuses.module.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { NgModule } from '@angular/core'; -import { StoreModule } from '@ngrx/store'; -import { EffectsModule } from '@ngrx/effects'; -import { CommonModule } from '@angular/common'; -import { ReactiveFormsModule, FormsModule } from '@angular/forms'; -import { StatusesRoutingModule } from './statuses-routing.module'; -import { reducer } from './reducers/statuses.reducer'; -import { StatusesEffects } from './effects/statuses.effect'; -//import { LeafletModule } from '@asymmetrik/ngx-leaflet'; -import { IonicModule } from '@ionic/angular'; -import { ModalSetStatusDestinationPage } from './modals/setStatusDestination/modal-setStatusDestination.page'; -import { UnitActionsListComponent } from './components/actionsList/action-lists.component'; -import { ModalSetStatusNotePage } from './modals/setStatusNote/modal-setStatusNote.page'; -import { TranslateModule } from '@ngx-translate/core'; - -@NgModule({ - declarations: [ - ModalSetStatusDestinationPage, - ModalSetStatusNotePage, - UnitActionsListComponent - ], - imports: [ - IonicModule, - CommonModule, - FormsModule, - ReactiveFormsModule, - StatusesRoutingModule, - StoreModule.forFeature('statusesModule', reducer), - EffectsModule.forFeature([StatusesEffects]), - TranslateModule - ], - providers: [], - exports: [ - ModalSetStatusDestinationPage, - ModalSetStatusNotePage, - UnitActionsListComponent - ] -}) -export class StatusesModule { } diff --git a/src/app/features/statuses/store/statuses.store.ts b/src/app/features/statuses/store/statuses.store.ts deleted file mode 100644 index 8b01ebb..0000000 --- a/src/app/features/statuses/store/statuses.store.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { StatusesResultData } from '@resgrid/ngx-resgridlib'; -import { StatusDestination } from "../models/statusDestination"; - - -export interface StatusesState { - submittingUnitStatus: StatusesResultData; - submittingUnitStatusUnitId: string; - submittingUnitStatusModalDisplay: number; - submitStatusDestinations: StatusDestination[]; - submittingUnitStatusNote: string; - submitStatusDestination: StatusDestination; -} - -export const initialState: StatusesState = { - submittingUnitStatus: null, - submittingUnitStatusUnitId: null, - submittingUnitStatusModalDisplay: 0, - submitStatusDestinations: null, - submittingUnitStatusNote: null, - submitStatusDestination: null -}; \ No newline at end of file diff --git a/src/app/features/voice/actions/voice.actions.ts b/src/app/features/voice/actions/voice.actions.ts deleted file mode 100644 index d3f0dbe..0000000 --- a/src/app/features/voice/actions/voice.actions.ts +++ /dev/null @@ -1,229 +0,0 @@ -import { Action } from '@ngrx/store'; -import { - DepartmentAudioResultStreamData, - DepartmentVoiceChannelResultData, - DepartmentVoiceResultData, -} from '@resgrid/ngx-resgridlib'; -//import { StreamManager } from 'openvidu-browser'; - -export enum VoiceActionTypes { - GET_VOIPINFO = '[VOICE] GET_VOIPINFO', - GET_VOIPINFO_SUCCESS = '[VOICE] GET_VOIPINFO_SUCCESS', - GET_VOIPINFO_FAIL = '[VOICE] GET_VOIPINFO_FAIL', - START_VOIP_SERVICES = '[VOICE] START_VOIP_SERVICES', - VOIP_CALL_PROGRESS = '[VOICE] VOIP_CALL_PROGRESS', - VOIP_CALL_FAILED = '[VOICE] VOIP_CALL_FAILED', - VOIP_CALL_ENDED = '[VOICE] VOIP_CALL_ENDED', - VOIP_CALL_CONNECTED = '[VOICE] VOIP_CALL_CONNECTED', - VOIP_PHONE_CONNECTED = '[VOICE] VOIP_PHONE_CONNECTED', - VOIP_PHONE_DISCONNECTED = '[VOICE] VOIP_PHONE_DISCONNECTED', - VOIP_PHONE_NEWSESSION = '[VOICE] VOIP_PHONE_NEWSESSION', - VOIP_PHONE_SIPREGISTERED = '[VOICE] VOIP_PHONE_SIPREGISTERED', - VOIP_PHONE_SIPUNREGISTERED = '[VOICE] VOIP_PHONE_SIPUNREGISTERED', - VOIP_PHONE_SIPREGISTERFAILED = '[VOICE] VOIP_PHONE_SIPREGISTERFAILED', - START_TRANSMITTING = '[VOICE] START_TRANSMITTING', - STOP_TRANSMITTING = '[VOICE] STOP_TRANSMITTING', - SET_NOCHANNEL = '[VOICE] SET_NOCHANNEL', - SET_ACTIVECHANNEL = '[VOICE] SET_ACTIVECHANNEL', - VOIP_PHONE_DISCONNECT = '[VOICE] VOIP_PHONE_DISCONNECT', - ADD_OPENVIDU_STREAM = '[VOICE] ADD_OPENVIDU_STREAM', - REMOVE_OPENVIDU_STREAM = '[VOICE] REMOVE_OPENVIDU_STREAM', - DONE = '[VOICE] DONE', - SET_CURRENT_VOICE_STATE = '[VOICE] SET_CURRENT_VOICE_STATE', - INCREMENT_PARTICIPANTS = '[VOICE] INCREMENT_PARTICIPANTS', - DECREMENT_PARTICIPANTS = '[VOICE] DECREMENT_PARTICIPANTS', - SHOW_PTT_PLUGIN = '[VOICE] SHOW_PTT_PLUGIN', - SHOW_SELECT_AUDIO_MODAL = '[VOICE] SHOW_SELECT_AUDIO_MODAL', - GET_AUDIOSTREAMS = '[VOICE] GET_AUDIOSTREAMS', - GET_AUDIOSTREAMS_SUCCESS = '[VOICE] GET_AUDIOSTREAMS_SUCCESS', - GET_AUDIOSTREAMS_FAIL = '[VOICE] GET_AUDIOSTREAMS_FAIL', - SET_ACTIVE_AUDIOSTREAM = '[VOICE] SET_ACTIVE_AUDIOSTREAM', -} - -export class GetVoipInfo implements Action { - readonly type = VoiceActionTypes.GET_VOIPINFO; - constructor() {} -} - -export class GetVoipInfoSuccess implements Action { - readonly type = VoiceActionTypes.GET_VOIPINFO_SUCCESS; - constructor(public payload: DepartmentVoiceResultData) {} -} - -export class GetVoipInfoFail implements Action { - readonly type = VoiceActionTypes.GET_VOIPINFO_FAIL; - constructor() {} -} - -export class StartVoipServices implements Action { - readonly type = VoiceActionTypes.START_VOIP_SERVICES; - constructor(public payload: DepartmentVoiceResultData) {} -} - -export class VoipCallProgress implements Action { - readonly type = VoiceActionTypes.VOIP_CALL_PROGRESS; - constructor() {} -} - -export class VoipCallFailed implements Action { - readonly type = VoiceActionTypes.VOIP_CALL_FAILED; - constructor(public cause: string) {} -} - -export class VoipCallEnded implements Action { - readonly type = VoiceActionTypes.VOIP_CALL_ENDED; - constructor(public cause: string) {} -} - -export class VoipCallConnected implements Action { - readonly type = VoiceActionTypes.VOIP_CALL_CONNECTED; - constructor() {} -} - -export class VoipPhoneConnected implements Action { - readonly type = VoiceActionTypes.VOIP_PHONE_CONNECTED; - constructor() {} -} - -export class VoipPhoneDisconnected implements Action { - readonly type = VoiceActionTypes.VOIP_PHONE_DISCONNECTED; - constructor() {} -} - -export class VoipPhoneSipRegistered implements Action { - readonly type = VoiceActionTypes.VOIP_PHONE_SIPREGISTERED; - constructor() {} -} - -export class VoipPhoneSipUnregistered implements Action { - readonly type = VoiceActionTypes.VOIP_PHONE_SIPUNREGISTERED; - constructor() {} -} - -export class VoipPhoneSipRegisterFailed implements Action { - readonly type = VoiceActionTypes.VOIP_PHONE_SIPREGISTERFAILED; - constructor() {} -} - -export class VoipPhoneNewSession implements Action { - readonly type = VoiceActionTypes.VOIP_PHONE_NEWSESSION; - constructor() {} -} - -export class StartTransmitting implements Action { - readonly type = VoiceActionTypes.START_TRANSMITTING; - constructor() {} -} - -export class StopTransmitting implements Action { - readonly type = VoiceActionTypes.STOP_TRANSMITTING; - constructor() {} -} - -export class SetNoChannel implements Action { - readonly type = VoiceActionTypes.SET_NOCHANNEL; - constructor() {} -} - -export class SetActiveChannel implements Action { - readonly type = VoiceActionTypes.SET_ACTIVECHANNEL; - constructor(public channel: DepartmentVoiceChannelResultData) {} -} - -export class DisconnectActiveCall implements Action { - readonly type = VoiceActionTypes.VOIP_PHONE_DISCONNECT; - constructor() {} -} - -export class AddOpenViduStream implements Action { - readonly type = VoiceActionTypes.ADD_OPENVIDU_STREAM; - constructor(/*public stream: StreamManager*/) {} -} - -export class RemoveOpenViduStream implements Action { - readonly type = VoiceActionTypes.REMOVE_OPENVIDU_STREAM; - constructor(/*public stream: StreamManager*/) {} -} - -export class SetCurrentVoiceState implements Action { - readonly type = VoiceActionTypes.SET_CURRENT_VOICE_STATE; - constructor(public state: string) {} -} - -export class IncrementParticipants implements Action { - readonly type = VoiceActionTypes.INCREMENT_PARTICIPANTS; - constructor() {} -} - -export class DecrementParticipants implements Action { - readonly type = VoiceActionTypes.DECREMENT_PARTICIPANTS; - constructor() {} -} - -export class ShowPTTPlugin implements Action { - readonly type = VoiceActionTypes.SHOW_PTT_PLUGIN; - constructor() {} -} - - -export class GetAudioStreams implements Action { - readonly type = VoiceActionTypes.GET_AUDIOSTREAMS; - constructor() {} -} - -export class GetAudioStreamsSuccess implements Action { - readonly type = VoiceActionTypes.GET_AUDIOSTREAMS_SUCCESS; - constructor(public payload: DepartmentAudioResultStreamData[]) {} -} - -export class GetAudioStreamsFail implements Action { - readonly type = VoiceActionTypes.GET_AUDIOSTREAMS_FAIL; - constructor() {} -} - -export class ShowAudioStreamModal implements Action { - readonly type = VoiceActionTypes.SHOW_SELECT_AUDIO_MODAL; - constructor() {} -} - -export class SetActiveAudioStream implements Action { - readonly type = VoiceActionTypes.SET_ACTIVE_AUDIOSTREAM; - constructor(public payload: DepartmentAudioResultStreamData) {} -} - -export class Done implements Action { - readonly type = VoiceActionTypes.DONE; - constructor() {} -} - -export type VoiceActionsUnion = - | GetVoipInfo - | GetVoipInfoSuccess - | GetVoipInfoFail - | VoipCallProgress - | VoipCallFailed - | VoipCallEnded - | VoipCallConnected - | VoipPhoneConnected - | VoipPhoneDisconnected - | VoipPhoneSipRegistered - | VoipPhoneSipUnregistered - | VoipPhoneSipRegisterFailed - | VoipPhoneNewSession - | StartTransmitting - | StopTransmitting - | SetNoChannel - | SetActiveChannel - | DisconnectActiveCall - | StartVoipServices - | AddOpenViduStream - | RemoveOpenViduStream - | SetCurrentVoiceState - | Done - | IncrementParticipants - | DecrementParticipants - | GetAudioStreams - | GetAudioStreamsSuccess - | GetAudioStreamsFail - | ShowAudioStreamModal - | SetActiveAudioStream; diff --git a/src/app/features/voice/effects/voice.effect.ts b/src/app/features/voice/effects/voice.effect.ts deleted file mode 100644 index 5e6390f..0000000 --- a/src/app/features/voice/effects/voice.effect.ts +++ /dev/null @@ -1,313 +0,0 @@ -import * as voiceAction from '../actions/voice.actions'; -import { Action, Store } from '@ngrx/store'; -import { - Actions, - concatLatestFrom, - createEffect, - ofType, -} from '@ngrx/effects'; -import { catchError, concatMap, exhaustMap, map, mergeMap, switchMap, tap } from 'rxjs/operators'; -import { Injectable } from '@angular/core'; -import { from, Observable, of } from 'rxjs'; -import { VoiceState } from '../store/voice.store'; -import { - VoiceService, -} from '@resgrid/ngx-resgridlib'; -import { HomeState } from '../../home/store/home.store'; -import { selectHomeState, selectSettingsState, selectVoiceState } from 'src/app/store'; -import { SettingsState } from '../../settings/store/settings.store'; -import { AudioProvider } from 'src/app/providers/audio'; -import { MenuController, ModalController, ToastController } from '@ionic/angular'; -import { Resgrid, ResgridPluginStartOptions } from 'capacitor-plugin-resgrid'; -import { ModalAudioStreams } from '../modal/audio-streams/modal-audioStreams.page'; -import { environment } from 'src/environments/environment'; -import { Capacitor } from '@capacitor/core'; - -@Injectable() -export class VoiceEffects { - private _modalRef: HTMLIonModalElement; - - getVoipInfo$ = createEffect(() => - this.actions$.pipe( - ofType( - voiceAction.VoiceActionTypes.GET_VOIPINFO - ), - concatLatestFrom(() => [this.store.select(selectVoiceState), this.homeStore.select(selectHomeState), this.settingsStore.select(selectSettingsState)]), - exhaustMap(([action, voiceState, homeState, settingsState], index) => - this.voiceService.getDepartmentVoiceSettings().pipe( - map((data) => { - if (data && data.Data && data.Data.VoiceEnabled && homeState.isMobileApp) { - if (settingsState && settingsState.user) { - let name = settingsState.user.fullName; - - let options = { - token: '', - url: data.Data.VoipServerWebsocketSslAddress, - type: 0, - title: 'test', - defaultMic: '', - defaultSpeaker: '', - apiUrl: environment.baseApiUrl + '/', - canConnectToVoiceApiToken: data.Data.CanConnectApiToken, - rooms: [] - }; - - if (data.Data.Channels && data.Data.Channels.length > 0) { - data.Data.Channels.forEach(channel => { - options.rooms.push({name: channel.Name, id: channel.Id, token: channel.Token}); - }); - } - - if ((Capacitor.getPlatform() === 'android' || Capacitor.getPlatform() === 'ios') && Capacitor.isPluginAvailable('Resgrid')) { - Resgrid.start(options).then(function after_resgrid_plugin_start(data) { - - }); - } - - // Disabling this for now. Need to figure out how to get the permissions to work. - //Resgrid.requestPermissions(); - } - } - - if (!homeState.isMobileApp && data.Data.VoiceEnabled) { - data.Data.VoiceEnabled = false; - } - - return { - type: voiceAction.VoiceActionTypes.GET_VOIPINFO_SUCCESS, - payload: data.Data, - } - }), - tap((data) => {}), - // If request fails, dispatch failed action - catchError(() => - of({ type: voiceAction.VoiceActionTypes.GET_VOIPINFO_FAIL }) - ) - ) - ) - ) - ); - - getVoipInfoSuccess$ = createEffect( - () => - this.actions$.pipe( - ofType( - voiceAction.VoiceActionTypes.GET_VOIPINFO_SUCCESS - ), - map((data) => ({ - type: voiceAction.VoiceActionTypes.START_VOIP_SERVICES, - payload: data.payload, - })) - ) - ); - - startVoipServices$ = createEffect( - () => - this.actions$.pipe( - ofType( - voiceAction.VoiceActionTypes.START_VOIP_SERVICES - ), - tap((action) => { - //this.voiceProvider.startVoipServices(action.payload); - }) - ), - { dispatch: false } - ); - - showPttPlugin$ = createEffect( - () => - this.actions$.pipe( - ofType( - voiceAction.VoiceActionTypes.SHOW_PTT_PLUGIN - ), - tap((action) => { - Resgrid.showModal(); - }) - ), - { dispatch: false } - ); - - setNoChannel$ = createEffect(() => - this.actions$.pipe( - ofType( - voiceAction.VoiceActionTypes.SET_NOCHANNEL - ), - tap((data) => { - //this.openViduService.leaveSession(); - }) - ), - { dispatch: false } - ); - - setActiveChannel$ = createEffect(() => this.actions$.pipe( - ofType(voiceAction.VoiceActionTypes.SET_ACTIVECHANNEL), - concatLatestFrom(() => [ - this.homeStore.select(selectHomeState), - this.settingsStore.select(selectSettingsState), - ]), - mergeMap(([action, homeState, settingsState], index) => - of(action).pipe( - concatMap((data) => { - Resgrid.showModal(); - return of(data); - }) - ) - )), - { dispatch: false } - ); - - voipCallStartTransmitting$ = createEffect(() => - this.actions$.pipe( - ofType( - voiceAction.VoiceActionTypes.START_TRANSMITTING - ), - tap((data) => { - //this.openViduService.unmute(); - }) - ), - { dispatch: false } - ); - - voipCallStopTransmitting$ = createEffect(() => - this.actions$.pipe( - ofType( - voiceAction.VoiceActionTypes.STOP_TRANSMITTING - ), - tap((data) => { - //this.openViduService.mute(); - }) - ), - { dispatch: false } - ); - - addOpenViduStream$ = createEffect(() => - this.actions$.pipe( - ofType( - voiceAction.VoiceActionTypes.ADD_OPENVIDU_STREAM - ), - map((data) => ({ - type: voiceAction.VoiceActionTypes.DONE, - })) - ) - ); - - removeOpenViduStream$ = createEffect(() => - this.actions$.pipe( - ofType( - voiceAction.VoiceActionTypes.REMOVE_OPENVIDU_STREAM - ), - map((data) => ({ - type: voiceAction.VoiceActionTypes.DONE, - })) - ) - ); - - getAudioStreams$ = createEffect(() => - this.actions$.pipe( - ofType(voiceAction.VoiceActionTypes.GET_AUDIOSTREAMS), - mergeMap((action) => - this.voiceService.getDepartmentAudioStreams().pipe( - // If successful, dispatch success action with result - map((data) => ({ - type: voiceAction.VoiceActionTypes.GET_AUDIOSTREAMS_SUCCESS, - payload: data.Data, - })), - // If request fails, dispatch failed action - catchError(() => - of({ type: voiceAction.VoiceActionTypes.GET_AUDIOSTREAMS_FAIL }) - ) - ) - ) - ) - ); - - getAudioStreamsSuccess$ = createEffect( - () => - this.actions$.pipe( - ofType( - voiceAction.VoiceActionTypes.GET_AUDIOSTREAMS_SUCCESS - ), - map((data) => ({ - type: voiceAction.VoiceActionTypes.START_VOIP_SERVICES, - payload: data.payload, - })) - ) - ); - - submitUnitStatusDestination$ = createEffect( - () => - this.actions$.pipe( - ofType( - voiceAction.VoiceActionTypes.SHOW_SELECT_AUDIO_MODAL - ), - concatLatestFrom(() => [ - this.homeStore.select(selectHomeState), - ]), - exhaustMap(([action, homeState], index) => { - return this.runModal(ModalAudioStreams, null, null, { - breakpoints: [0, 0.3, 0.5], - initialBreakpoint: 0.3, - }); - }) - ), - { dispatch: false } - ); - - done$ = createEffect( - () => - this.actions$.pipe( - ofType(voiceAction.VoiceActionTypes.DONE) - ), - { dispatch: false } - ); - - constructor( - private actions$: Actions, - private store: Store, - //private voiceProvider: KazooVoiceService, - private voiceService: VoiceService, - //private openViduService: OpenViduService, - private homeStore: Store, - private settingsStore: Store, - //private handsetProvider: HandsetProvider, - private audioProvider: AudioProvider, - private toastController: ToastController, - private menuCtrl: MenuController, - private modalController: ModalController, - ) {} - - runModal = async (component, cssClass, properties, opts = {}) => { - await this.closeModal(); - await this.menuCtrl.close(); - - if (!cssClass) { - cssClass = 'modal-container'; - } - - this._modalRef = await this.modalController.create({ - component: component, - cssClass: cssClass, - componentProps: properties, - ...opts, - }); - - return from(this._modalRef.present()); - }; - - closeModal = async () => { - try { - //if (this._modalRef) { - await this.modalController.dismiss(); - this._modalRef = null; - //} - } catch (error) { } - }; - - showToast = async (message) => { - const toast = await this.toastController.create({ - message: message, - duration: 3000, - }); - toast.present(); - }; -} diff --git a/src/app/features/voice/modal/audio-streams/modal-audioStreams.page.html b/src/app/features/voice/modal/audio-streams/modal-audioStreams.page.html deleted file mode 100644 index b4277df..0000000 --- a/src/app/features/voice/modal/audio-streams/modal-audioStreams.page.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - -
- - - - - - {{ stream.Name }} - - - - {{'selectAudioStreamModal.setButton' | translate}} - - - - -
-
- diff --git a/src/app/features/voice/modal/audio-streams/modal-audioStreams.page.scss b/src/app/features/voice/modal/audio-streams/modal-audioStreams.page.scss deleted file mode 100644 index 0c2b8e7..0000000 --- a/src/app/features/voice/modal/audio-streams/modal-audioStreams.page.scss +++ /dev/null @@ -1,73 +0,0 @@ -.container { - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; -} - -h4 { - font-weight: 600; - font-size: 17px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); -} - -p { - font-weight: normal; - font-size: 13px; - line-height: 22px; - text-align: left; - color: var(--ion-color-dark); - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 3; /* number of lines to show */ - -webkit-box-orient: vertical; -} - -ion-fab-button { - --box-shadow: none !important; - --color: var(--ion-color-primary); -} - -.action-button { - --border-radius: 6px; - --box-shadow: none !important; - min-height: 48px; - - span { - font-weight: 400; - font-size: 14px; - text-transform: initial; - } - - .button-text { - display: flex; - justify-content: space-between; - align-items: center; - width: 100%; - padding: 0 8px; - color: var(--ion-color-primary); - - ion-icon { - font-size: 20px; - color: var(--ion-color-primary); - } - } -} - -@media (max-device-height: 640px), handheld and (orientation: portrait) { - ion-img { - width: 64px; - } - - h4 { - font-size: 15px; - } - - p { - line-height: 21px; - font-size: 12px; - } -} diff --git a/src/app/features/voice/modal/audio-streams/modal-audioStreams.page.ts b/src/app/features/voice/modal/audio-streams/modal-audioStreams.page.ts deleted file mode 100644 index a7bd4f2..0000000 --- a/src/app/features/voice/modal/audio-streams/modal-audioStreams.page.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { ModalController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import * as SettingsActions from '../../../settings/actions/settings.actions'; -import { HomeState } from 'src/app/features/home/store/home.store'; -import { Observable } from 'rxjs'; -import { selectHomeState, selectPushData, selectVoiceState } from 'src/app/store'; -import { CallResultData, DepartmentAudioResultStreamData, DepartmentVoiceChannelResultData, UnitResultData } from '@resgrid/ngx-resgridlib'; -import { take } from 'rxjs/operators'; -import * as _ from 'lodash'; -import { PushData } from 'src/app/models/pushData'; -import { VoiceState } from '../../store/voice.store'; -import * as VoiceActions from '../../actions/voice.actions'; - -@Component({ - selector: 'app-modal-voice-audioStreams', - templateUrl: './modal-audioStreams.page.html', - styleUrls: ['./modal-audioStreams.page.scss'], -}) -export class ModalAudioStreams implements OnInit { - public voiceState$: Observable; - public selectedChannel: DepartmentAudioResultStreamData; - - constructor(private modal: ModalController, private store: Store) { - this.voiceState$ = this.store.select(selectVoiceState); - } - - ngOnInit() { - - } - - public dismissModal() { - this.modal.dismiss(); - } - - compareWith(o1: DepartmentAudioResultStreamData, o2: DepartmentAudioResultStreamData) { - return o1 && o2 ? o1.Id === o2.Id : o1 === o2; - } - - public set() { - this.store.dispatch(new VoiceActions.SetActiveAudioStream(this.selectedChannel)); - this.modal.dismiss(); - } -} diff --git a/src/app/features/voice/reducers/voice.reducer.ts b/src/app/features/voice/reducers/voice.reducer.ts deleted file mode 100644 index f619bf1..0000000 --- a/src/app/features/voice/reducers/voice.reducer.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { VoiceState, initialState } from '../store/voice.store'; -import { VoiceActionTypes, VoiceActionsUnion } from '../actions/voice.actions'; - -import * as _ from 'lodash'; -import { - DepartmentAudioResultStreamData, - DepartmentVoiceChannelResultData, -} from '@resgrid/ngx-resgridlib'; - -export function reducer( - state: VoiceState = initialState, - action: VoiceActionsUnion -): VoiceState { - switch (action.type) { - case VoiceActionTypes.GET_VOIPINFO_SUCCESS: - let channels: DepartmentVoiceChannelResultData[] = new Array(); - //channels.push({ - // Id: '', - // Name: 'Off', - // ConferenceNumber: 0, - // IsDefault: false, - //}); - - if (action && action.payload && action.payload.Channels) { - channels.push(...action.payload.Channels); - - //channels.push({ - // Name: 'Disconnect', - // ConferenceNumber: -1, - // IsDefault: false, - //}); - } - - return { - ...state, - isVoiceEnabled: action.payload.VoiceEnabled, - voipSystemInfo: action.payload, - isTransmitting: false, - channels: channels, - }; - case VoiceActionTypes.START_TRANSMITTING: - return { - ...state, - isTransmitting: true, - }; - case VoiceActionTypes.STOP_TRANSMITTING: - return { - ...state, - isTransmitting: false, - }; - case VoiceActionTypes.SET_NOCHANNEL: - return { - ...state, - currentActiveVoipChannel: null, - }; - case VoiceActionTypes.SET_ACTIVECHANNEL: - return { - ...state, - currentActiveVoipChannel: action.channel, - }; - case VoiceActionTypes.ADD_OPENVIDU_STREAM: - //let subs = _.cloneDeep(state.subscribers); - //subs.push(action.stream); - - return { - ...state, - //subscribers: subs, - }; - case VoiceActionTypes.REMOVE_OPENVIDU_STREAM: - //let subs1 = _.cloneDeep(state.subscribers); - - //const index = subs1.indexOf(action.stream, 0); - //if (index > -1) { - // subs1.splice(index, 1); - //} - - return { - ...state, - //subscribers: subs1, - }; - case VoiceActionTypes.SET_CURRENT_VOICE_STATE: - return { - ...state, - currentVoipStatus: action.state, - }; - case VoiceActionTypes.INCREMENT_PARTICIPANTS: - return { - ...state, - participants: state.participants + 1, - }; - case VoiceActionTypes.DECREMENT_PARTICIPANTS: - return { - ...state, - participants: state.participants - 1, - }; - case VoiceActionTypes.GET_AUDIOSTREAMS_SUCCESS: - let steams: DepartmentAudioResultStreamData[] = new Array(); - steams.push({ - Id: '', - Name: 'Off', - Url: '', - Type: '', - }); - - if (action && action.payload) { - steams.push(...action.payload); - } - - return { - ...state, - audioStreams: steams, - }; - case VoiceActionTypes.SET_ACTIVE_AUDIOSTREAM: - return { - ...state, - activeAudioStream: action.payload, - }; - default: - return state; - } -} - -export const getAvailableChannels = (state: VoiceState) => state.channels; -export const getActiveStream = (state: VoiceState) => state.activeAudioStream; diff --git a/src/app/features/voice/shared/voice-header/voice-header.component.html b/src/app/features/voice/shared/voice-header/voice-header.component.html deleted file mode 100644 index 2583b42..0000000 --- a/src/app/features/voice/shared/voice-header/voice-header.component.html +++ /dev/null @@ -1,29 +0,0 @@ -
- - - - - - - - - - - - - - - - - - - - - - - - - -
\ No newline at end of file diff --git a/src/app/features/voice/shared/voice-header/voice-header.component.scss b/src/app/features/voice/shared/voice-header/voice-header.component.scss deleted file mode 100644 index dadb264..0000000 --- a/src/app/features/voice/shared/voice-header/voice-header.component.scss +++ /dev/null @@ -1,17 +0,0 @@ -.div-button { - display:inline-block; - color:#444; - background: #3880ff; - vertical-align:middle; - text-align: center; - border-radius: 4px; - padding-top: 0.7em; - padding-bottom: 0.7em; - padding-left: 1.6em; - padding-right: 1.6em; - transition: box-shadow 280ms cubic-bezier(.4, 0, .2, 1), background-color 15ms linear, color 15ms linear; - font-size: 14px; - font-weight: 500; - letter-spacing: 0.06em; - box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); -} \ No newline at end of file diff --git a/src/app/features/voice/shared/voice-header/voice-header.component.ts b/src/app/features/voice/shared/voice-header/voice-header.component.ts deleted file mode 100644 index 1cafc4f..0000000 --- a/src/app/features/voice/shared/voice-header/voice-header.component.ts +++ /dev/null @@ -1,188 +0,0 @@ -import { - ChangeDetectorRef, - Component, - ElementRef, - OnDestroy, - OnInit, - ViewChild, -} from '@angular/core'; -import { Store } from '@ngrx/store'; -import { - DepartmentAudioResultStreamData, - DepartmentVoiceChannelResultData, -} from '@resgrid/ngx-resgridlib'; -import { Observable, Subscription, timer } from 'rxjs'; -import { AudioProvider } from 'src/app/providers/audio'; -import { - selectActiveStreamState, - selectHomeState, - selectSettingsState, - selectVoiceState, -} from 'src/app/store'; -import * as VoiceActions from '../../actions/voice.actions'; -import { VoiceState } from '../../store/voice.store'; -import { - BitrateOptions, - VgApiService, -} from '@videogular/ngx-videogular/core'; -import { ModuloConfig } from '@videogular/ngx-videogular/modulo'; -import * as _ from 'lodash'; -import { SettingsState } from 'src/app/features/settings/store/settings.store'; -import { HomeState } from 'src/app/features/home/store/home.store'; - -@Component({ - selector: 'app-voice-header', - templateUrl: './voice-header.component.html', - styleUrls: ['./voice-header.component.scss'], -}) -export class VoiceFooterComponent implements OnInit, OnDestroy { - public selectedChannel: DepartmentVoiceChannelResultData; - public streams: DepartmentAudioResultStreamData[]; - public isTransmitting: boolean = false; - public voiceState$: Observable; - public settingsState$: Observable; - public homeState$: Observable; - - private api: VgApiService; - public url: string = ''; - public type: string = 'audio/mp4'; - public isPlayerHidden: boolean = true; - public bitrates: BitrateOptions[]; - - @ViewChild('media', { static: false }) media: ElementRef; - moduloConfig: ModuloConfig = { - dimensions: { - width: 200, - height: 50, - }, - fillStyle: 'black', - strokeStyle: 'white', - lineWidth: 1.5, - scaleFactor: 0.8, - }; - - private participants: number = 0; - private voiceSubscription: Subscription; - private audioStreamSubscription: Subscription; - - constructor( - private store: Store, - private audioProvider: AudioProvider, - private ref: ChangeDetectorRef - ) { - this.voiceState$ = this.store.select(selectVoiceState); - this.settingsState$ = this.store.select(selectSettingsState); - this.homeState$ = this.store.select(selectHomeState); - this.streams = []; - } - - ngOnInit(): void { - this.voiceSubscription = this.voiceState$.subscribe((state) => { - if (state) { - if (state.currentActiveVoipChannel) { - this.selectedChannel = state.currentActiveVoipChannel; - } else if (state.channels) { - this.selectedChannel = state.channels[0]; - } - - this.isTransmitting = state.isTransmitting; - - if (this.participants !== state.participants) { - this.ref.detectChanges(); - this.participants = state.participants; - } - } - }); - - this.audioStreamSubscription = this.store - .select(selectActiveStreamState) - .subscribe((audioStream) => { - if (audioStream) { - if (audioStream.Name !== 'Off') { - this.api.pause(); - this.streams = []; - - const source = timer(1000, 2000); - const timerSubscription: Subscription = source.subscribe(() => { - this.streams.push(audioStream); - this.api.play(); - - timerSubscription.unsubscribe(); - }); - - //this.api.play(); - this.isPlayerHidden = false; - } else { - this.api.pause(); - this.streams = []; - this.isPlayerHidden = true; - } - } - }); - } - - ngOnDestroy(): void { - if (this.voiceSubscription) { - this.voiceSubscription.unsubscribe(); - this.voiceSubscription = null; - } - - if (this.audioStreamSubscription) { - this.audioStreamSubscription.unsubscribe(); - this.audioStreamSubscription = null; - } - } - - onPlayerReady(api: VgApiService) { - this.api = api; - } - - public toggleTransmitting() { - if (this.isTransmitting) { - this.stopTransmitting(); - } else { - this.startTransmitting(); - } - } - - public startTransmitting(): void { - if (this.selectedChannel.Id !== '') { - this.audioProvider.playTransmitStart(); - this.store.dispatch(new VoiceActions.StartTransmitting()); - } - } - - public stopTransmitting(): void { - if (this.selectedChannel.Id !== '') { - this.store.dispatch(new VoiceActions.StopTransmitting()); - this.audioProvider.playTransmitEnd(); - } - } - - public onChannelChange(channel) { - if (this.isTransmitting) { - this.stopTransmitting(); - } - - if (channel.Id === '') { - this.store.dispatch(new VoiceActions.SetNoChannel()); - } else { - this.store.dispatch(new VoiceActions.SetActiveChannel(channel)); - } - } - - public openPTT() { - this.store.dispatch(new VoiceActions.ShowPTTPlugin()); - } - - public viewStreams() { - this.store.dispatch(new VoiceActions.ShowAudioStreamModal()); - } - - public getPlayerWidth() { - if (this.isPlayerHidden) - return '0px'; - else - return '200px'; - } -} diff --git a/src/app/features/voice/store/voice.store.ts b/src/app/features/voice/store/voice.store.ts deleted file mode 100644 index b8367b4..0000000 --- a/src/app/features/voice/store/voice.store.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { DepartmentAudioResultStreamData, DepartmentVoiceChannelResultData, DepartmentVoiceResultData } from '@resgrid/ngx-resgridlib'; -//import { StreamManager } from "openvidu-browser"; - -export interface VoiceState { - isVoiceEnabled: boolean; - isTransmitting: boolean; - voipSystemInfo: DepartmentVoiceResultData; - currentVoipStatus: string; - currentActiveVoipChannel: DepartmentVoiceChannelResultData; - channels: DepartmentVoiceChannelResultData[]; - //subscribers: StreamManager[]; - participants: number; - activeAudioStream: DepartmentAudioResultStreamData; - audioStreams: DepartmentAudioResultStreamData[]; -} - -export const initialState: VoiceState = { - isVoiceEnabled: false, - isTransmitting: false, - voipSystemInfo: null, - currentVoipStatus: 'Disconnected', - currentActiveVoipChannel: null, - channels: null, - //subscribers: [], - participants: 0, - activeAudioStream: null, - audioStreams:[] -}; \ No newline at end of file diff --git a/src/app/features/voice/voice-routing.module.ts b/src/app/features/voice/voice-routing.module.ts deleted file mode 100644 index d2bc82f..0000000 --- a/src/app/features/voice/voice-routing.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class VoiceRoutingModule {} diff --git a/src/app/features/voice/voice.module.ts b/src/app/features/voice/voice.module.ts deleted file mode 100644 index 81f22b3..0000000 --- a/src/app/features/voice/voice.module.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { NgModule } from '@angular/core'; -import { StoreModule } from '@ngrx/store'; -import { EffectsModule } from '@ngrx/effects'; -import { CommonModule } from '@angular/common'; -import { ReactiveFormsModule, FormsModule } from '@angular/forms'; -import { VoiceRoutingModule } from './voice-routing.module'; -import { reducer } from './reducers/voice.reducer'; -import { VoiceEffects } from './effects/voice.effect'; -//import { LeafletModule } from '@asymmetrik/ngx-leaflet'; -import { VoiceFooterComponent } from './shared/voice-header/voice-header.component'; -import { IonicModule } from '@ionic/angular'; -import { HammerModule, HAMMER_GESTURE_CONFIG } from '@angular/platform-browser'; -import { IonicGestureConfig } from 'src/app/config/gesture.config'; -import { VgCoreModule } from '@videogular/ngx-videogular/core'; -import { VgControlsModule } from '@videogular/ngx-videogular/controls'; -import { VgOverlayPlayModule } from '@videogular/ngx-videogular/overlay-play'; -import { VgBufferingModule } from '@videogular/ngx-videogular/buffering'; -import { ModalAudioStreams } from './modal/audio-streams/modal-audioStreams.page'; -import { TranslateModule } from '@ngx-translate/core'; -import { VgModuloModule } from '@videogular/ngx-videogular/modulo'; - -@NgModule({ - declarations: [ - VoiceFooterComponent, - ModalAudioStreams - ], - imports: [ - IonicModule, - CommonModule, - FormsModule, - ReactiveFormsModule, - VoiceRoutingModule, - //LeafletModule, - StoreModule.forFeature('voiceModule', reducer), - EffectsModule.forFeature([VoiceEffects]), - HammerModule, - VgCoreModule, - VgControlsModule, - VgOverlayPlayModule, - VgBufferingModule, - VgModuloModule, - TranslateModule - ], - providers: [], - exports: [ - VoiceFooterComponent, - ModalAudioStreams - ] -}) -export class VoiceModule { } diff --git a/src/app/login/index.tsx b/src/app/login/index.tsx new file mode 100644 index 0000000..a0d942e --- /dev/null +++ b/src/app/login/index.tsx @@ -0,0 +1,83 @@ +import { useRouter } from 'expo-router'; +import React, { useEffect, useState } from 'react'; +import { useTranslation } from 'react-i18next'; + +import type { LoginFormProps } from '@/app/login/login-form'; +import { FocusAwareStatusBar } from '@/components/ui'; +import { Button, ButtonText } from '@/components/ui/button'; +import { Modal, ModalBackdrop, ModalBody, ModalContent, ModalFooter, ModalHeader } from '@/components/ui/modal'; +import { Text } from '@/components/ui/text'; +import { useAuth } from '@/lib/auth'; +import { logger } from '@/lib/logging'; + +import { LoginForm } from './login-form'; + +export default function Login() { + const [isErrorModalVisible, setIsErrorModalVisible] = useState(false); + const { t } = useTranslation(); + const router = useRouter(); + const { login, status, error, isAuthenticated } = useAuth(); + useEffect(() => { + if (status === 'signedIn' && isAuthenticated) { + logger.info({ + message: 'Login successful, redirecting to home', + }); + router.push('/(app)'); + } + }, [status, isAuthenticated, router]); + + useEffect(() => { + if (status === 'error') { + logger.error({ + message: 'Login failed', + context: { error }, + }); + setIsErrorModalVisible(true); + } + }, [status, error]); + + const onSubmit: LoginFormProps['onSubmit'] = async (data) => { + logger.info({ + message: 'Starting Login (button press)', + context: { username: data.username }, + }); + await login({ username: data.username, password: data.password }); + }; + + return ( + <> + + + + { + setIsErrorModalVisible(false); + }} + size="full" + > + + + + {t('login.errorModal.title')} + + + {t('login.errorModal.message')} + + + + + + + + ); +} diff --git a/src/app/login/login-form.tsx b/src/app/login/login-form.tsx new file mode 100644 index 0000000..3cca104 --- /dev/null +++ b/src/app/login/login-form.tsx @@ -0,0 +1,173 @@ +import { zodResolver } from '@hookform/resolvers/zod'; +import { AlertTriangle, EyeIcon, EyeOffIcon } from 'lucide-react-native'; +import { useColorScheme } from 'nativewind'; +import React, { useState } from 'react'; +import type { SubmitHandler } from 'react-hook-form'; +import { Controller, useForm } from 'react-hook-form'; +import { useTranslation } from 'react-i18next'; +import { Image, Keyboard } from 'react-native'; +import { KeyboardAvoidingView } from 'react-native-keyboard-controller'; +import * as z from 'zod'; + +import { View } from '@/components/ui'; +import { Button, ButtonSpinner, ButtonText } from '@/components/ui/button'; +import { FormControl, FormControlError, FormControlErrorIcon, FormControlErrorText, FormControlLabel, FormControlLabelText } from '@/components/ui/form-control'; +import { Input, InputField, InputIcon, InputSlot } from '@/components/ui/input'; +import { Text } from '@/components/ui/text'; +import colors from '@/constants/colors'; + +const loginFormSchema = z.object({ + username: z + .string({ + required_error: 'Username is required', + }) + .min(3, 'Username must be at least 3 characters'), + password: z + .string({ + required_error: 'Password is required', + }) + .min(6, 'Password must be at least 6 characters'), +}); + +export type FormType = z.infer; + +export type LoginFormProps = { + onSubmit?: SubmitHandler; + isLoading?: boolean; + error?: string; +}; + +export const LoginForm = ({ onSubmit = () => {}, isLoading = false, error = undefined }: LoginFormProps) => { + const { colorScheme } = useColorScheme(); + const { t } = useTranslation(); + const { + control, + handleSubmit, + formState: { errors }, + } = useForm({ + resolver: zodResolver(loginFormSchema), + }); + const [validated, setValidated] = useState({ + usernameValid: true, + passwordValid: true, + }); + + const [showPassword, setShowPassword] = useState(false); + + const handleState = () => { + setShowPassword((showState) => { + return !showState; + }); + }; + const handleKeyPress = () => { + Keyboard.dismiss(); + handleSubmit(onSubmit)(); + }; + + return ( + + + + + Sign In + + + To login in to the Resgrid Unit app, please enter your username and password. Resgrid Unit is an app designed to interface between a Unit (apparatus, team, etc) and the Resgrid system. + + + + + {t('login.username')} + + { + try { + await loginFormSchema.parseAsync({ username: value }); + return true; + } catch (error: any) { + return error.message; + } + }, + }} + render={({ field: { onChange, onBlur, value } }) => ( + + + + )} + /> + + + {errors?.username?.message || (!validated.usernameValid && 'Username not found')} + + + {/* Label Message */} + + + {t('login.password')} + + { + try { + await loginFormSchema.parseAsync({ password: value }); + return true; + } catch (error: any) { + return error.message; + } + }, + }} + render={({ field: { onChange, onBlur, value } }) => ( + + + + + + + )} + /> + + + {errors?.password?.message || (!validated.passwordValid && t('login.password_incorrect'))} + + + + {isLoading ? ( + + ) : ( + + )} + + + ); +}; diff --git a/src/app/models/audioUser.ts b/src/app/models/audioUser.ts deleted file mode 100644 index 376037a..0000000 --- a/src/app/models/audioUser.ts +++ /dev/null @@ -1,161 +0,0 @@ -import { Publisher, StreamManager } from "openvidu-browser"; -import { VideoType } from "./video-type"; - -export class AudioUser { - /** - * The Connection ID that is publishing the stream - */ - connectionId: string; - - /** - * The user nickname - */ - nickname: string; - - /** - * StreamManager object ([[Publisher]] or [[Subscriber]]) - */ - streamManager: StreamManager; - - /** - * @hidden - */ - avatar: string; - - /** - * @hidden - */ - local: boolean; - - /** - * @hidden - */ - // private randomAvatar: string; - - /** - * @hidden - */ - videoSizeBig: boolean; - - /** - * @hidden - */ - constructor(connectionId?: string, streamManager?: StreamManager, nickname?: string) { - this.connectionId = connectionId || ''; - this.nickname = nickname || 'OpenVidu'; - this.streamManager = streamManager || null; - } - - /** - * Return `true` if audio track is active and `false` if audio track is muted - */ - public isAudioActive(): boolean { - // console.log("isAudioActive"); - return (this.streamManager)?.stream?.audioActive; - } - - /** - * Return `true` if video track is active and `false` if video track is muted - */ - public isVideoActive(): boolean { - // console.log("isVideoActive"); - return (this.streamManager)?.stream?.videoActive; - } - - /** - * Return the connection ID - */ - public getConnectionId(): string { - return this.streamManager?.stream?.connection?.connectionId || this.connectionId; - } - - /** - * Return the user nickname - */ - public getNickname(): string { - return this.nickname; - } - - /** - * Return the [[streamManger]] object - */ - public getStreamManager(): StreamManager { - return this.streamManager; - } - - /** - * Return the user avatar - */ - public getAvatar(): string { - return this.avatar; - } - - public setAvatar(avatar: string) { - this.avatar = avatar; - } - - /** - * Return `true` if user has a local role and `false` if not - */ - public isLocal(): boolean { - return this.local; - } - - /** - * Return `true` if user has a remote role and `false` if not - */ - public isRemote(): boolean { - return (this.streamManager)?.remote; - } - - /** - * Return `true` if user has a screen role and `false` if not - */ - public isScreen(): boolean { - // console.log("isScreen"); - return (this.streamManager)?.stream?.typeOfVideo === VideoType.SCREEN; - } - - /** - * Return `true` if user has a camera role and `false` if not - */ - public isCamera(): boolean { - // console.log("CCC"); - return (this.streamManager)?.stream?.typeOfVideo === VideoType.CAMERA || (this.isLocal() && !this.isScreen()); - } - - /** - * Set the streamManager value object - * @param streamManager value of streamManager - */ - public setStreamManager(streamManager: StreamManager) { - this.streamManager = streamManager; - } - - /** - * Set the user nickname value - * @param nickname value of user nickname - */ - public setNickname(nickname: string) { - this.nickname = nickname; - } - - public isVideoSizeBig(): boolean { - return this.videoSizeBig; - } - - /** - * @hidden - */ - public setVideoSizeBig(big: boolean) { - this.videoSizeBig = big; - } - - /** - * @hidden - */ - // Used when the streamManager is null (users without devices) - public setLocal(local: boolean) { - this.local = local; - } -} \ No newline at end of file diff --git a/src/app/models/deviceType.ts b/src/app/models/deviceType.ts deleted file mode 100644 index 2d7aa08..0000000 --- a/src/app/models/deviceType.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface IDevice { - label: string; - device: string; - type?: CameraType; -} - -export enum CameraType { - FRONT = 'FRONT', - BACK = 'BACK' -} diff --git a/src/app/models/geoLocation.ts b/src/app/models/geoLocation.ts deleted file mode 100644 index 39c861f..0000000 --- a/src/app/models/geoLocation.ts +++ /dev/null @@ -1,14 +0,0 @@ -export class GeoLocation { - public Latitude: number; - public Longitude: number; - public Accuracy: number; - public Altitude: number; - public AltitudeAccuracy: number; - public Heading: number; - public Speed: number; - - constructor(latitude: number, longitude: number) { - this.Latitude = latitude; - this.Longitude = longitude; - } -} \ No newline at end of file diff --git a/src/app/models/headsetType.ts b/src/app/models/headsetType.ts deleted file mode 100644 index d0f81be..0000000 --- a/src/app/models/headsetType.ts +++ /dev/null @@ -1,4 +0,0 @@ -export class HeadsetType { - id: number = -1; - name: string = 'None'; -} diff --git a/src/app/models/loginResult.ts b/src/app/models/loginResult.ts deleted file mode 100644 index e296e20..0000000 --- a/src/app/models/loginResult.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { DepartmentRightsResultData, ProfileModel } from '@resgrid/ngx-resgridlib'; - -export class LoginResult implements ProfileModel { - public sub: string = ''; - public jti: string = ''; - public useage: string = ''; - public at_hash: string = ''; - public nbf: number = 0; - public exp: number = 0; - public iat: number = 0; - public iss: string = ''; - public name: string = ''; - public oi_au_id: string = ''; - public oi_tkn_id: string = ''; - public Rights: DepartmentRightsResultData = new DepartmentRightsResultData(); -} \ No newline at end of file diff --git a/src/app/models/pushData.ts b/src/app/models/pushData.ts deleted file mode 100644 index d42c51e..0000000 --- a/src/app/models/pushData.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class PushData { - public type: number = 0; - public title: string = ''; - public body: string = ''; - public entityId: string = ''; -} \ No newline at end of file diff --git a/src/app/models/userInfo.ts b/src/app/models/userInfo.ts deleted file mode 100644 index 90a7967..0000000 --- a/src/app/models/userInfo.ts +++ /dev/null @@ -1,26 +0,0 @@ -export class UserInfo { - userId: string = ''; - userName: string = ''; - emailAddress: string = ''; - fullName: string = ''; - departmentId: string = ''; - authToken: string = ''; - authTokenExpiry: string = ''; - departmentName: string = ''; - departmentCreatedOn: string = ''; - enableDetailedResponses: boolean = false; - enablePushNotifications: boolean = false; - pushRegistrationId: string = ''; - personnelFilter: string = ''; - unitsFilter: string = ''; - sortRespondingTop: boolean = false; - enableCustomSounds: boolean = false; - enableGeolocation: boolean = false; - language: string = ''; - enableSounds: boolean = false; - enableLiveUpdates: boolean = false; - lastSynced: string = ''; - pushRegisteredOn: string = ''; - customUrl: string = ''; - customUrlValidated: boolean = false; -} diff --git a/src/app/models/video-type.ts b/src/app/models/video-type.ts deleted file mode 100644 index 3162b70..0000000 --- a/src/app/models/video-type.ts +++ /dev/null @@ -1,10 +0,0 @@ -export enum VideoType { - CAMERA = 'CAMERA', - SCREEN = 'SCREEN', - CUSTOM = 'CUSTOM' -} - -export enum ScreenType { - WINDOW = 'window', - SCREEN = 'screen' -} \ No newline at end of file diff --git a/src/app/onboarding.tsx b/src/app/onboarding.tsx new file mode 100644 index 0000000..a953d0d --- /dev/null +++ b/src/app/onboarding.tsx @@ -0,0 +1,161 @@ +import { useRouter } from 'expo-router'; +import { Bell, ChevronRight, MapPin, Users } from 'lucide-react-native'; +import { useColorScheme } from 'nativewind'; +import React, { useEffect, useRef, useState } from 'react'; +import { Dimensions, FlatList, Image } from 'react-native'; +import Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated'; + +import { FocusAwareStatusBar, SafeAreaView, View } from '@/components/ui'; +import { Button, ButtonText } from '@/components/ui/button'; +import { Pressable } from '@/components/ui/pressable'; +import { Text } from '@/components/ui/text'; +import { useIsFirstTime } from '@/lib/storage'; +import { useAuthStore } from '@/lib/auth'; + +const { width } = Dimensions.get('window'); + +type OnboardingItemProps = { + title: string; + description: string; + icon: React.ReactNode; +}; + +const onboardingData: OnboardingItemProps[] = [ + { + title: 'Resgrid Unit', + description: "Track your unit's location and status in real-time with our advanced mapping and AVL system", + icon: , + }, + { + title: 'Instant Notifications', + description: 'Receive immediate alerts for emergencies and important updates from your department', + icon: , + }, + { + title: 'Interact with Calls', + description: 'Seamlessly view call information and interact with your team members for efficient emergency response', + icon: , + }, +]; + +const OnboardingItem: React.FC = ({ title, description, icon }) => { + return ( + + {icon} + {title} + {description} + + ); +}; + +const Pagination: React.FC<{ currentIndex: number; length: number }> = ({ currentIndex, length }) => { + return ( + + {Array.from({ length }).map((_, index) => ( + + ))} + + ); +}; + +export default function Onboarding() { + const [_, setIsFirstTime] = useIsFirstTime(); + const { status, setIsOnboarding } = useAuthStore(); + const router = useRouter(); + const [currentIndex, setCurrentIndex] = useState(0); + const flatListRef = useRef(null); + const buttonOpacity = useSharedValue(0); + const { colorScheme } = useColorScheme(); + + useEffect(() => { + setIsOnboarding(); + }, []); + + const handleScroll = (event: { nativeEvent: { contentOffset: { x: number } } }) => { + const index = Math.round(event.nativeEvent.contentOffset.x / width); + setCurrentIndex(index); + + // Show button with animation when on the last slide + if (index === onboardingData.length - 1) { + buttonOpacity.value = withTiming(1, { duration: 500 }); + } else { + buttonOpacity.value = withTiming(0, { duration: 300 }); + } + }; + + const nextSlide = () => { + if (currentIndex < onboardingData.length - 1) { + flatListRef.current?.scrollToIndex({ + index: currentIndex + 1, + animated: true, + }); + } + }; + + const buttonAnimatedStyle = useAnimatedStyle(() => { + return { + opacity: buttonOpacity.value, + transform: [{ translateY: (1 - buttonOpacity.value) * 20 }], + }; + }); + + return ( + + + ); +} diff --git a/src/app/providers/alert.ts b/src/app/providers/alert.ts deleted file mode 100644 index 071f47a..0000000 --- a/src/app/providers/alert.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Injectable } from '@angular/core'; -import { AlertController } from '@ionic/angular'; - -@Injectable({ - providedIn: 'root', -}) -export class AlertProvider { - constructor(private alertCtrl: AlertController) {} - - public async showOkAlert(title: string, subTitle: string, body: string) { - const alert = await this.alertCtrl.create({ - //cssClass: 'my-custom-class', - header: title, - subHeader: subTitle, - message: body, - buttons: ['OK'], - }); - - await alert.present(); - } - - public async showErrorAlert(title: string, subTitle: string, body: string) { - const alert = await this.alertCtrl.create({ - //cssClass: 'my-custom-class', - header: title, - subHeader: subTitle, - message: body, - buttons: ['OK'], - }); - - await alert.present(); - } - - public showAutoCloseSuccessAlert(title: string) {} -} diff --git a/src/app/providers/audio.ts b/src/app/providers/audio.ts deleted file mode 100644 index 4e3cc64..0000000 --- a/src/app/providers/audio.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Howl, Howler } from 'howler'; - -@Injectable({ - providedIn: 'root', -}) -export class AudioProvider { - - constructor() {} - - public playTransmitStart() { - const host = location.protocol + '//' + location.host; - - let sound = new Howl({ - src: ['/assets/audio/ui/Space_Notification1.mp3'], - autoplay: true, - loop: false, - volume: 1.0, - html5: true - }); - } - - public playTransmitEnd() { - const host = location.protocol + '//' + location.host; - - let sound = new Howl({ - src: ['/assets/audio/ui/Space_Notification2.mp3'], - autoplay: true, - loop: false, - volume: 1.0, - html5: true - }); - } - -} diff --git a/src/app/providers/bluetooth.ts b/src/app/providers/bluetooth.ts deleted file mode 100644 index 8527f0d..0000000 --- a/src/app/providers/bluetooth.ts +++ /dev/null @@ -1,225 +0,0 @@ -import { Injectable } from '@angular/core'; -import { - BleClient, - BleDevice, - numbersToDataView, - numberToUUID, -} from '@capacitor-community/bluetooth-le'; -import { ToastController } from '@ionic/angular'; -import { Store } from '@ngrx/store'; -import { DepartmentVoiceChannelResultData } from '@resgrid/ngx-resgridlib'; -import { Observable, Subscription } from 'rxjs'; -import { VoiceState } from '../features/voice/store/voice.store'; -import { selectVoiceState } from '../store'; -import { AudioProvider } from './audio'; -import * as VoiceActions from '../features/voice/actions/voice.actions'; - -@Injectable({ - providedIn: 'root', -}) -export class BluetoothProvider { - //private HEADSET_SERVICE = numberToUUID(0x1108); - //private CORDLESSPHONE_SERVICE = numberToUUID(0x1109); - //private AUDIOSOURCE_SERVICE = numberToUUID(0x110a); - //private AUDIOSINK_SERVICE = numberToUUID(0x110b); - //private INTERCOM_SERVICE = numberToUUID(0x1110); - //private HEADSETGW_SERVICE = numberToUUID(0x1112); - //private HANDSFREE_SERVICE = numberToUUID(0x111e); - //private HANDSFREEGW_SERVICE = numberToUUID(0x111f); - //private HEADSETHS_SERVICE = numberToUUID(0x1131); - //private HID_SERVICE = numberToUUID(0x1124); - //private AVRC_SERVICE = numberToUUID(0x110e); - //private AVRCC_SERVICE = numberToUUID(0x110f); - //private AVRCT_SERVICE = numberToUUID(0x110c); - //private BATTERY_SERVICE = numberToUUID(0x180f); - //private BATTERY_CHARACTERISTIC = numberToUUID(0x2a19); - - private AINA_HEADSET = 'D11C8116-A913-434D-A79D-97AE94A529B3'; - private AINA_HEADSET_SERVICE = '127FACE1-CB21-11E5-93D0-0002A5D5C51B'; - private AINA_HEADSET_SVC_PROP = '127FBEEF-CB21-11E5-93D0-0002A5D5C51B'; - - private B01INRICO_HEADSET = '2BD21C44-0198-4B92-9110-D622D53D8E37'; - private B01INRICO_HEADSET_SERVICE = '6666'; - private B01INRICO_HEADSET_SERVICE_CHAR = '8888'; - - //private GENERIC_SERVICE = numberToUUID(0x1800); - - //private INRICOHANDHELD_SERVICE = numberToUUID(26214); // 26214 30583 - //private HYSHANDHELD_SERVICE = numberToUUID(65504); - - //private DEVICE_NAME_CHARACTERISTIC = numberToUUID(0x2a00); - //private APPEARANCE_CHARACTERISTIC = numberToUUID(0x2a01); - //private PPCP_CHARACTERISTIC = numberToUUID(0x2a04); //Peripheral Preferred Connection Parameters. - //private SERVICECHANGED_CHARACTERISTIC = numberToUUID(0x2a05); - - private selectedChannel: DepartmentVoiceChannelResultData; - private voiceState$: Observable; - private voiceStateSubscription: Subscription - private device: BleDevice = null; - private type: number = 0; - private isListening: boolean = false; - private isTransmitting = false; - - constructor(private store: Store, - //public openViduService: OpenViduService, - private audioProvider: AudioProvider, - private toastController: ToastController, - //private openViduDevicesService: OpenViduDevicesService - ) { - this.voiceState$ = this.store.select(selectVoiceState); - } - - public async init(headsetType: number): Promise { - try { - this.type = headsetType; - await BleClient.initialize(); - - if (!this.voiceStateSubscription) { - this.voiceStateSubscription = this.voiceState$.subscribe(async (state) => { - if (state) { - if (state.currentActiveVoipChannel) { - this.selectedChannel = state.currentActiveVoipChannel; - - //if (state.currentActiveVoipChannel.Id === '') { - // await this.stop(); - //} else { - // await this.start(); - // } - } //else if (state.channels) { - //this.selectedChannel = state.channels[0]; - //await this.stop(); - //} else { - // await this.stop(); - // } - } - }); - } - } catch (error) { - console.error(error); - } - } - - public async start(): Promise { - try { - await this.stop(); - - this.device = await BleClient.requestDevice({ - services: [this.getServiceForType()], - optionalServices: [], - }); - - await BleClient.connect(this.device.deviceId, () => console.log('device disconnected event')); - console.log('connected to device', this.device); - - //await this.openViduDevicesService.initDevices(); - - const services = await BleClient.getServices(this.device.deviceId); - console.log('services ', JSON.stringify(services)); - - if (!this.isListening) { - await BleClient.startNotifications( - this.device.deviceId, - this.AINA_HEADSET_SERVICE, - this.AINA_HEADSET_SVC_PROP, - (value: DataView) => { - let intValue = this.parseBleData(value); - console.log('reading: ', intValue); - this.triggerHeadsetEvents(intValue); - } - ); - this.isListening = true; - } - } catch (error) { - console.error(error); - } - } - - public async stop(): Promise { - try { - await this.stopListening(); - await this.disconnect(); - console.log('disconnected from device'); - } catch (error) { - console.error(error); - } - } - - private async stopListening(): Promise { - if (this.device && this.isListening) { - await BleClient.stopNotifications(this.device.deviceId, this.getServiceForType(), this.getCharacteristicForType()); - this.isListening = false; - } - } - - private async disconnect(): Promise { - if (this.device) { - await BleClient.disconnect(this.device.deviceId); - this.device = null; - } - } - - private parseBleData(value: DataView): number { - //const flags = value.getUint8(0); - //const rate16Bits = flags & 0x1; - let data: number; - //if (rate16Bits > 0) { - // data = value.getUint16(1, true); - //} else { - data = value.getUint8(0); - //} - return data; - } - - private getServiceForType() { - switch (this.type) { - case 0: - return this.AINA_HEADSET_SERVICE; - case 1: - return this.B01INRICO_HEADSET_SERVICE; - } - } - - private getCharacteristicForType() { - switch (this.type) { - case 0: - return this.AINA_HEADSET_SVC_PROP; - case 1: - return this.B01INRICO_HEADSET_SERVICE_CHAR; - } - } - - private triggerHeadsetEvents(event: number) { - switch (this.type) { - case 0: // Aina - if (event === 0) { - this.stopTransmitting(); - } else if (event === 1) { - this.startTransmitting(); - } - break; - case 1: // B01 Inrico - - break; - } - } - - private startTransmitting(): void { - if (!this.isTransmitting) { - if (this.selectedChannel?.Id !== '') { - this.isTransmitting = true; - this.audioProvider.playTransmitStart(); - this.store.dispatch(new VoiceActions.StartTransmitting()); - } - } - } - - private stopTransmitting(): void { - if (this.isTransmitting) { - if (this.selectedChannel?.Id !== '') { - this.isTransmitting = false; - this.store.dispatch(new VoiceActions.StopTransmitting()); - this.audioProvider.playTransmitEnd(); - } - } - } -} diff --git a/src/app/providers/cache.ts b/src/app/providers/cache.ts deleted file mode 100644 index 03ed165..0000000 --- a/src/app/providers/cache.ts +++ /dev/null @@ -1,160 +0,0 @@ -import { Injectable } from '@angular/core'; -import { - CapacitorSQLite, - SQLiteConnection, - SQLiteDBConnection, -} from '@capacitor-community/sqlite'; - -@Injectable({ - providedIn: 'root', -}) -export class CacheProvider { - private isInitialized: boolean = false; - private isWeb: boolean = false; - private readonly sqlite: SQLiteConnection = new SQLiteConnection(CapacitorSQLite); - private _db: SQLiteDBConnection | null = null; - - private readonly db_name = 'rgrespcache'; - private readonly cache_table = 'cache'; - - constructor() {} - - public async initialize() { - console.log(`initializing the cache provider`); - - if (!this.isInitialized) { - if (this.isWeb) { - if (!document.querySelector(this.db_name)) { - const sqlitedb = document.createElement(this.db_name); - document.body.appendChild(sqlitedb); - await customElements.whenDefined(this.db_name); - } - - await this.sqlite.initWebStore(); - this.isInitialized = true; - } - - try { - - const ret = await this.sqlite.checkConnectionsConsistency(); - const isConn = (await this.sqlite.isConnection(this.db_name, false)).result; - - if (ret.result && isConn) { - this._db = await this.sqlite.retrieveConnection(this.db_name, false); - } else { - this._db = await this.sqlite.createConnection(this.db_name, false, "no-encryption", 1, false); - } - - if (this._db === null) { - console.log(`database.service initialize Error: _db is null`); - } - - await this._db.open(); - console.log(`$$$ initialize createConnection successful`); - - await this.ensureTablesExist(); - console.log(`$$$ initialize successful`); - this.isInitialized = true; - } catch (err) { - console.log( - `database.service initialize Error: ${JSON.stringify(err)}` - ); - } - } else { - return new Promise((resolve, reject) => { - resolve(); - }); - } - } - - private async ensureTablesExist(): Promise { - try { - if (this._db !== null) { - //await this._db.open(); - //await this._db.execute(`PRAGMA journal_mode=WAL;`, false); - await this._db.execute( - `CREATE TABLE IF NOT EXISTS ${this.cache_table}(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, cacheKey TEXT, expiresOn TEXT, data TEXT);` - ); - console.log(`$$$ ensureTablesExist successful`); - } else { - console.log(`database.service ensureTablesExist Error: _db is null`); - } - } catch (err) { - console.log( - `database.service ensureTablesExist Error: ${JSON.stringify(err)}` - ); - } - } - - public async get(key: string): Promise { - try { - await this.initialize(); - - let ret = await this._db.query(`SELECT * FROM ${this.cache_table} WHERE cacheKey = ?;`, [key]); - if (ret && ret.values && ret.values.length > 0) { - const now = new Date(); - if (new Date(ret.values[0].expiresOn) > now && ret.values[0].data) { - //console.log(`cache get data: ${ret.values[0].data}`); - return ret.values[0].data; - } else { - await this.delete(key); - return null; - } - } else { - return Promise.reject(new Error('Error getting cache item from db')); - } - } catch (err) { - console.log(`cache.service get Error: ${JSON.stringify(err)}`); - - //return Promise.reject(new Error('Error getting cache item from db')); - return null; - } - } - - public async put(key: string, expiresOn: Date, data: string): Promise { - try { - await this.initialize(); - - let sqlcmd: string = `INSERT INTO ${this.cache_table} (cacheKey,expiresOn,data) VALUES (?,?,?)`; - let values: Array = [key, expiresOn, data]; - let ret = await this._db.run(sqlcmd, values); - - if (!ret.changes.lastId) { - return Promise.reject(new Error('Insert cache item failed')); - } - } catch (err) { - console.log(`cache.service put Error: ${JSON.stringify(err)}`); - - //return Promise.reject(new Error('Error putting item in cache db')); - return; - } - } - - public async delete(key: string): Promise { - try { - await this.initialize(); - - let res = await this._db.execute( - `DELETE FROM ${this.cache_table} WHERE cacheKey = '${key}';` - ); - } catch (err) { - console.log( - `cache.service delete Error: ${JSON.stringify(err)}` - ); - } - } - - public async deleteAllCache(): Promise { - try { - await this.initialize(); - - let res = await this._db.execute( - `DELETE FROM ${this.cache_table};` - ); - } catch (err) { - console.log( - `cache.service deleteAllCache Error: ${JSON.stringify(err)}` - ); - } - } -} diff --git a/src/app/providers/camera.ts b/src/app/providers/camera.ts deleted file mode 100644 index d8e4879..0000000 --- a/src/app/providers/camera.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Injectable } from '@angular/core'; -import { AlertController, Platform, ToastController } from '@ionic/angular'; -import { - Camera, - CameraResultType, - CameraSource, - Photo, -} from '@capacitor/camera'; -import { Filesystem, Directory, Encoding } from '@capacitor/filesystem'; -import { encode } from 'base64-arraybuffer'; - -@Injectable({ - providedIn: 'root', -}) -export class CameraProvider { - constructor(private toastCtrl: ToastController, private platform: Platform) {} - - public async getImage(): Promise { - const result = await Camera.requestPermissions({ - permissions: ['camera', 'photos'], - }); - - if (result && - (result.camera === 'granted' || result.photos === 'granted')) { - const image = await Camera.getPhoto({ - quality: 50, - allowEditing: false, - resultType: CameraResultType.Base64, - source: CameraSource.Prompt, - }); - - return image; - } else { - const toast = await this.toastCtrl.create({ - message: - 'Resgrid Unit does not have permission to access Camera or Photos.', - duration: 3000, - position: 'top', - }); - toast.present(); - } - } - - public async readAsBase64(photo: Photo) { - if (this.platform.is('hybrid')) { - const file = await Filesystem.readFile({ - path: photo.path - }); - - //debugger; - return file.data; - } else { - // Fetch the photo, read as a blob, then convert to base64 format - const response = await fetch(photo.webPath); - const blob = await response.blob(); - - return (await this.convertBlobToBase64(blob)) as string; - } - } - - // Helper function - convertBlobToBase64 = (blob: Blob) => - new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.onerror = reject; - reader.onload = () => { - const { result } = reader; - const data = result as ArrayBuffer; - resolve(encode(data)); - }; - reader.readAsArrayBuffer(blob); - }); -} diff --git a/src/app/providers/file.ts b/src/app/providers/file.ts deleted file mode 100644 index 841a967..0000000 --- a/src/app/providers/file.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { HttpClient, HttpEventType } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { Directory, Filesystem } from '@capacitor/filesystem'; -import { LoadingController } from '@ionic/angular'; -import { typePropertyIsNotAllowedInProps } from '@ngrx/store/src/models'; -import { CallFilesService, CallProtocolsService, CallsService } from '@resgrid/ngx-resgridlib'; -import { FileOpener } from '@capacitor-community/file-opener'; - -@Injectable({ - providedIn: 'root', -}) -export class FileProvider { - - - constructor(private protocolsService: CallProtocolsService, - private callFilesService: CallFilesService) {} - - - - public async openProtocolAttachment(attachmentName: string, attachmentId: string) { - this.protocolsService.getCallProtocolAttachmentFile(attachmentId).subscribe(async (event) => { - if (event.type === HttpEventType.DownloadProgress) { - - } else if (event.type === HttpEventType.Response) { - - const base64 = await this.convertBlobToBase64(event.body) as string; - - const savedFile = await Filesystem.writeFile({ - path: attachmentName, - data: base64, - directory: Directory.Documents, - }); - - await FileOpener.open({filePath: savedFile.uri}); - } - }); - } - - public async openCallFile(fileName: string, url: string) { - this.callFilesService.getCallAttachmentFile(url).subscribe(async (event) => { - if (event.type === HttpEventType.DownloadProgress) { - - } else if (event.type === HttpEventType.Response) { - - const base64 = await this.convertBlobToBase64(event.body) as string; - - const savedFile = await Filesystem.writeFile({ - path: fileName, - data: base64, - directory: Directory.Documents, - }); - - await FileOpener.open({filePath: savedFile.uri}); - } - }); - } - - private convertBlobToBase64(blob: Blob): Promise { - return new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.onerror = reject; - reader.onload = () => { - resolve(reader.result as string); - }; - reader.readAsDataURL(blob); - }); - } -} diff --git a/src/app/providers/geolocation.ts b/src/app/providers/geolocation.ts deleted file mode 100644 index c7a5f08..0000000 --- a/src/app/providers/geolocation.ts +++ /dev/null @@ -1,430 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Platform } from '@ionic/angular'; -import { - DeviceService, - GetConfigResultData, - GpsLocation, - SaveUnitLocationInput, - UnitLocationService, -} from '@resgrid/ngx-resgridlib'; -import { StorageProvider } from './storage'; -import { registerPlugin } from '@capacitor/core'; -import { BackgroundGeolocationPlugin } from '@capacitor-community/background-geolocation'; -import { Store } from '@ngrx/store'; -import { HomeState } from '../features/home/store/home.store'; -import { Geolocation, Position } from '@capacitor/geolocation'; -import { GeoLocation } from '../models/geoLocation'; -const BackgroundGeolocation = registerPlugin( - 'BackgroundGeolocation' -); -import * as HomeActions from '../features/home/actions/home.actions'; -import { - ConnectableObservable, - Observable, - bindCallback, - map, - of, - publishReplay, - switchMap, - take, - throwError, -} from 'rxjs'; -import { selectConfigData } from '../store'; -import { HttpClient } from '@angular/common/http'; - -declare var OpenLocationCode: any; - -@Injectable({ - providedIn: 'root', -}) -export class GeolocationProvider { - isRegistering: boolean = false; - watchPositionId: string = null; - backgroundWatcherId: string = null; - private w3wKey: string = ''; - private lastLocationUpdate: Date = null; - - private configData$: Observable; - protected geocoder$: Observable; - - constructor( - private loader: LazyGoogleMapsLoader, - private platform: Platform, - private storageProvider: StorageProvider, - private deviceService: DeviceService, - private unitLocationService: UnitLocationService, - private store: Store, - private http: HttpClient - ) { - this.configData$ = this.store.select(selectConfigData); - - this.configData$.subscribe((configData) => { - if (configData && configData.GoogleMapsKey && !this.geocoder$) { - this.w3wKey = configData.W3WKey; - - const connectableGeocoder$ = new Observable((subscriber) => { - loader.load(configData.GoogleMapsKey).then(() => subscriber.next()); - }).pipe( - map(() => this._createGeocoder()), - publishReplay(1) - ) as ConnectableObservable; - - connectableGeocoder$.connect(); // ignore the subscription - // since we will remain subscribed till application exits - - this.geocoder$ = connectableGeocoder$; - } - }); - } - - private _createGeocoder() { - return new google.maps.Geocoder(); - } - - private _getGoogleResults( - geocoder: google.maps.Geocoder, - request: google.maps.GeocoderRequest - ): Observable { - const geocodeObservable = bindCallback(geocoder.geocode); - return geocodeObservable(request).pipe( - switchMap(([results, status]) => { - if (status === google.maps.GeocoderStatus.OK) { - return of(results); - } - - return throwError(status); - }) - ); - } - - private geocode( - request: google.maps.GeocoderRequest - ): Observable { - return this.geocoder$.pipe( - switchMap((geocoder) => this._getGoogleResults(geocoder, request)) - ); - } - - public async getLocation(): Promise { - let position: Position = null; - - try { - position = await Geolocation.getCurrentPosition(); - } catch (err) { - console.log(err); - } - - if ( - position && - position.coords.latitude != 0 && - position.coords.longitude && - position.coords.longitude != 0 - ) { - return new GeoLocation( - position.coords.latitude, - position.coords.longitude - ); - } - - return null; - } - - public async startTracking() { - if (!this.watchPositionId) { - this.watchPositionId = await Geolocation.watchPosition( - { - enableHighAccuracy: true, - timeout: 10000, - maximumAge: 10000, - }, - (position, err) => { - if (position) { - let location = new GeoLocation( - position.coords.latitude, - position.coords.longitude - ); - location.Accuracy = position.coords.accuracy; - location.Altitude = position.coords.altitude; - location.AltitudeAccuracy = position.coords.altitudeAccuracy; - location.Heading = position.coords.heading; - location.Speed = position.coords.speed; - - this.store.dispatch( - new HomeActions.GeolocationLocationUpdate(location) - ); - } - } - ); - } - } - - public async stopTracking() { - if (this.watchPositionId) { - await Geolocation.clearWatch({ id: this.watchPositionId }); - this.watchPositionId = null; - } - } - - public async initBackgroundGeolocation(): Promise { - const that = this; - - if (this.platform.is('mobile')) { - let enableBackgroundGeolocation = - await this.storageProvider.getEnableBackgroundGeolocation(); - let unitId = await that.storageProvider.getActiveUnit(); - - if (unitId && enableBackgroundGeolocation) { - BackgroundGeolocation.addWatcher( - { - // If the "backgroundMessage" option is defined, the watcher will - // provide location updates whether the app is in the background or the - // foreground. If it is not defined, location updates are only - // guaranteed in the foreground. This is true on both platforms. - - // On Android, a notification must be shown to continue receiving - // location updates in the background. This option specifies the text of - // that notification. - backgroundMessage: - 'Cancel to prevent battery drain and stop tracking.', - - // The title of the notification mentioned above. Defaults to "Using - // your location". - backgroundTitle: 'Resgrid Unit is using your location.', - - // Whether permissions should be requested from the user automatically, - // if they are not already granted. Defaults to "true". - requestPermissions: true, - - // If "true", stale locations may be delivered while the device - // obtains a GPS fix. You are responsible for checking the "time" - // property. If "false", locations are guaranteed to be up to date. - // Defaults to "false". - stale: false, - - // The minimum number of meters between subsequent locations. Defaults - // to 0. - distanceFilter: 0 - }, - function callback(location, error) { - if (error) { - if (error.code === 'NOT_AUTHORIZED') { - if ( - window.confirm( - 'The Resgrid Unit app needs your location, ' + - 'but does not have permission.\n\n' + - 'Open settings now?' - ) - ) { - // It can be useful to direct the user to their device's - // settings when location permissions have been denied. The - // plugin provides the 'openSettings' method to do exactly - // this. - BackgroundGeolocation.openSettings(); - } - } - return console.error(error); - } - - if (location) { - let date = new Date(); - - if (that.lastLocationUpdate) { - let diff = date.getTime() - that.lastLocationUpdate.getTime(); - - if (diff < 60000) { - return; - } - } - - that.lastLocationUpdate = date; - - let input = new SaveUnitLocationInput(); - input.UnitId = unitId; - input.Timestamp = date.toUTCString().replace('UTC', 'GMT'); - input.Latitude = location.latitude.toString(); - input.Longitude = location.longitude.toString(); - - if (location.accuracy) { - input.Accuracy = location.accuracy.toString(); - } - - if (location.altitude) { - input.Altitude = location.altitude.toString(); - } - - if (location.altitudeAccuracy) { - input.AltitudeAccuracy = location.altitudeAccuracy.toString(); - } - - if (location.speed) { - input.Speed = location.speed.toString(); - } - - if (location.bearing) { - input.Heading = location.bearing.toString(); - } - - that.unitLocationService - .saveUnitLocation(input) - .subscribe((data) => { - if (data) { - } - }); - - return console.log(location); - } - } - ).then(function after_the_watcher_has_been_added(watcher_id) { - // When a watcher is no longer needed, it should be removed by calling - // 'removeWatcher' with an object containing its ID. - //BackgroundGeolocation.removeWatcher({ - // id: watcher_id - //}); - that.backgroundWatcherId = watcher_id; - }); - } - } - } - - public async stopBackgroundGeolocation(): Promise { - if (this.backgroundWatcherId) { - await BackgroundGeolocation.removeWatcher({ - id: this.backgroundWatcherId, - }); - this.backgroundWatcherId = null; - } - } - - public getLocationFromAddress(address: string) { - return this.geocode({ address: address }).pipe( - map((data) => { - if (data && data.length > 0) { - return new GeoLocation( - data[0].geometry.location.lat(), - data[0].geometry.location.lng() - ); - } - - return null; - }) - ); - } - - public getCoordinatesFromW3W(w3w: string): Observable { - return this.http - .get( - `https://api.what3words.com/v3/convert-to-coordinates?words=${w3w}&key=${this.w3wKey}` - ) - .pipe( - map((data: any) => { - if (data && data.coordinates) { - return new GeoLocation(data.coordinates.lat, data.coordinates.lng); - } - - return null; - }) - ); - } - - public getCoordinatesFromPlusCode(plusCode: string): Observable { - return new Observable((observer) => { - try { - const decoded = OpenLocationCode.decode(plusCode); - observer.next( - new GeoLocation(decoded.latitudeCenter, decoded.longitudeCenter) - ); - observer.complete(); - } catch (error) { - observer.error(error); - } - }); - } -} - -@Injectable({ - providedIn: 'root', -}) -export class LazyGoogleMapsLoader { - protected _scriptLoadingPromise: any; - protected readonly _SCRIPT_ID: string = 'googleMapsApiScript'; - protected readonly callbackName: string = `lazyMapsAPILoader`; - - constructor() {} - - load(googleMapsKey: string): Promise { - //const window = this._windowRef.nativeWindow() as any; - if (window.google && window.google.maps) { - // Google maps already loaded on the page. - return Promise.resolve(); - } - - if (this._scriptLoadingPromise) { - return this._scriptLoadingPromise; - } - - // this can happen in HMR situations or Stackblitz.io editors. - const scriptOnPage = document.getElementById(this._SCRIPT_ID); - if (scriptOnPage) { - this._assignScriptLoadingPromise(scriptOnPage); - return this._scriptLoadingPromise; - } - - const script = document.createElement('script'); - script.type = 'text/javascript'; - script.async = true; - script.defer = true; - script.id = this._SCRIPT_ID; - script.src = this._getScriptSrc(this.callbackName, googleMapsKey); - this._assignScriptLoadingPromise(script); - document.body.appendChild(script); - return this._scriptLoadingPromise; - } - - private _assignScriptLoadingPromise(scriptElem: HTMLElement) { - this._scriptLoadingPromise = new Promise((resolve, reject) => { - window[this.callbackName] = () => { - resolve(true); - }; - - scriptElem.onerror = (error: any) => { - reject(error); - }; - }); - } - - protected _getScriptSrc(callbackName: string, googleMapsKey: string): string { - const hostAndPath: string = 'maps.googleapis.com/maps/api/js'; - const queryParams: { [key: string]: string | string[] } = { - v: 'quarterly', - callback: callbackName, - key: googleMapsKey, - //client: this._config.clientId, - //channel: this._config.channel, - //libraries: this._config.libraries, - //region: this._config.region, - language: 'en-US', - }; - const params: string = Object.keys(queryParams) - .filter((k: string) => queryParams[k] != null) - .filter((k: string) => { - // remove empty arrays - return ( - !Array.isArray(queryParams[k]) || - (Array.isArray(queryParams[k]) && queryParams[k].length > 0) - ); - }) - .map((k: string) => { - // join arrays as comma separated strings - const i = queryParams[k]; - if (Array.isArray(i)) { - return { key: k, value: i.join(',') }; - } - return { key: k, value: queryParams[k] }; - }) - .map((entry: { key: string; value: string | string[] }) => { - return `${entry.key}=${entry.value}`; - }) - .join('&'); - return `https://${hostAndPath}?${params}`; - } -} diff --git a/src/app/providers/loading.ts b/src/app/providers/loading.ts deleted file mode 100644 index 3624ce1..0000000 --- a/src/app/providers/loading.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Injectable } from '@angular/core'; -import { LoadingController } from '@ionic/angular'; - -@Injectable({ - providedIn: 'root', -}) -export class LoadingProvider { - private spinner: HTMLIonLoadingElement; - - constructor(private loadingCtrl: LoadingController) {} - - // Show loading - public async show() { - this.spinner = await this.loadingCtrl.create({ - //cssClass: 'my-custom-class', - message: 'Please wait...', - }); - await this.spinner.present(); - } - - // Hide loading - public async hide() { - if (this.spinner) { - await this.loadingCtrl.dismiss(); - this.spinner = null; - } - } -} diff --git a/src/app/providers/map.ts b/src/app/providers/map.ts deleted file mode 100644 index 62e6e20..0000000 --- a/src/app/providers/map.ts +++ /dev/null @@ -1,444 +0,0 @@ -import { Injectable, Inject } from '@angular/core'; -import { MapMakerInfoData, MappingService } from '@resgrid/ngx-resgridlib'; -import { GeoLocation } from '../models/geoLocation'; -import mapboxgl from 'mapbox-gl'; -import { take } from 'rxjs/operators'; - -@Injectable({ - providedIn: 'root', -}) -export class MapProvider { - public coordinates = []; - - constructor(private mappingService: MappingService) {} - - public setImages(mapElement: any) { - if (mapElement) { - mapElement.loadImage('assets/mapping/Call.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Call-marker', image); - }); - - mapElement.loadImage( - 'assets/mapping/Engine_Available.png', - (error, image) => { - if (error) throw error; - mapElement.addImage('Engine_Available-marker', image); - } - ); - - mapElement.loadImage( - 'assets/mapping/Engine_Responding.png', - (error, image) => { - if (error) throw error; - mapElement.addImage('Engine_Responding-marker', image); - } - ); - - mapElement.loadImage('assets/mapping/Event.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Event-marker', image); - }); - - mapElement.loadImage('assets/mapping/Helipad.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Helipad-marker', image); - }); - - mapElement.loadImage( - 'assets/mapping/Person_Available.png', - (error, image) => { - if (error) throw error; - mapElement.addImage('Person_Available-marker', image); - } - ); - - mapElement.loadImage( - 'assets/mapping/Person_OnScene.png', - (error, image) => { - if (error) throw error; - mapElement.addImage('Person_OnScene-marker', image); - } - ); - - mapElement.loadImage( - 'assets/mapping/Person_RespondingCall.png', - (error, image) => { - if (error) throw error; - mapElement.addImage('Person_RespondingCall-marker', image); - } - ); - - mapElement.loadImage( - 'assets/mapping/Person_RespondingStation.png', - (error, image) => { - if (error) throw error; - mapElement.addImage('Person_RespondingStation-marker', image); - } - ); - - mapElement.loadImage('assets/mapping/Person.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Person-marker', image); - }); - - mapElement.loadImage( - 'assets/mapping/Rescue_Available.png', - (error, image) => { - if (error) throw error; - mapElement.addImage('Rescue_Available-marker', image); - } - ); - - mapElement.loadImage( - 'assets/mapping/Rescue_Responding.png', - (error, image) => { - if (error) throw error; - mapElement.addImage('Rescue_Responding-marker', image); - } - ); - - mapElement.loadImage('assets/mapping/Station.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Station-marker', image); - }); - - mapElement.loadImage('assets/mapping/WaterSupply.png', (error, image) => { - if (error) throw error; - mapElement.addImage('WaterSupply-marker', image); - }); - - mapElement.loadImage('assets/mapping/Aircraft.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Aircraft-marker', image); - }); - - mapElement.loadImage('assets/mapping/Ambulance.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Ambulance-marker', image); - }); - - mapElement.loadImage('assets/mapping/Blast.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Blast-marker', image); - }); - - mapElement.loadImage('assets/mapping/Bulldozer.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Bulldozer-marker', image); - }); - - mapElement.loadImage('assets/mapping/Bus.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Bus-marker', image); - }); - - mapElement.loadImage('assets/mapping/Camper.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Camper-marker', image); - }); - - mapElement.loadImage('assets/mapping/Car.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Car-marker', image); - }); - - mapElement.loadImage('assets/mapping/CarAccident.png', (error, image) => { - if (error) throw error; - mapElement.addImage('CarAccident-marker', image); - }); - - mapElement.loadImage('assets/mapping/CarTwo.png', (error, image) => { - if (error) throw error; - mapElement.addImage('CarTwo-marker', image); - }); - - mapElement.loadImage('assets/mapping/Check.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Check-marker', image); - }); - - mapElement.loadImage('assets/mapping/CrimeScene.png', (error, image) => { - if (error) throw error; - mapElement.addImage('CrimeScene-marker', image); - }); - - mapElement.loadImage('assets/mapping/Earthquake.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Earthquake-marker', image); - }); - - mapElement.loadImage( - 'assets/mapping/EmergencyPhone.png', - (error, image) => { - if (error) throw error; - mapElement.addImage('EmergencyPhone-marker', image); - } - ); - - mapElement.loadImage('assets/mapping/Fire.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Fire-marker', image); - }); - - mapElement.loadImage('assets/mapping/FirstAid.png', (error, image) => { - if (error) throw error; - mapElement.addImage('FirstAid-marker', image); - }); - - mapElement.loadImage('assets/mapping/Flag.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Flag-marker', image); - }); - - mapElement.loadImage('assets/mapping/Flood.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Flood-marker', image); - }); - - mapElement.loadImage('assets/mapping/FourByFour.png', (error, image) => { - if (error) throw error; - mapElement.addImage('FourByFour-marker', image); - }); - - mapElement.loadImage('assets/mapping/Gathering.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Gathering-marker', image); - }); - - mapElement.loadImage('assets/mapping/Group.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Group-marker', image); - }); - - mapElement.loadImage('assets/mapping/Helicopter.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Helicopter-marker', image); - }); - - mapElement.loadImage('assets/mapping/Hospital.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Hospital-marker', image); - }); - - mapElement.loadImage('assets/mapping/Industry.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Industry-marker', image); - }); - - mapElement.loadImage('assets/mapping/LineDown.png', (error, image) => { - if (error) throw error; - mapElement.addImage('LineDown-marker', image); - }); - - mapElement.loadImage('assets/mapping/Motorcycle.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Motorcycle-marker', image); - }); - - mapElement.loadImage('assets/mapping/Pickup.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Pickup-marker', image); - }); - - mapElement.loadImage('assets/mapping/Plowtruck.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Plowtruck-marker', image); - }); - - mapElement.loadImage('assets/mapping/Poison.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Poison-marker', image); - }); - - mapElement.loadImage('assets/mapping/PowerOutage.png', (error, image) => { - if (error) throw error; - mapElement.addImage('PowerOutage-marker', image); - }); - - mapElement.loadImage('assets/mapping/Radiation.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Radiation-marker', image); - }); - - mapElement.loadImage('assets/mapping/Search.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Search-marker', image); - }); - - mapElement.loadImage('assets/mapping/Shooting.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Shooting-marker', image); - }); - - mapElement.loadImage('assets/mapping/Tires.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Tires-marker', image); - }); - - mapElement.loadImage('assets/mapping/Tools.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Tools-marker', image); - }); - - mapElement.loadImage('assets/mapping/TreeDown.png', (error, image) => { - if (error) throw error; - mapElement.addImage('TreeDown-marker', image); - }); - - mapElement.loadImage('assets/mapping/Truck.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Truck-marker', image); - }); - - mapElement.loadImage('assets/mapping/Van.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Van-marker', image); - }); - - mapElement.loadImage('assets/mapping/Velocimeter.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Velocimeter-marker', image); - }); - - mapElement.loadImage('assets/mapping/Watercraft.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Watercraft-marker', image); - }); - - mapElement.loadImage('assets/mapping/Workshop.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Workshop-marker', image); - }); - - mapElement.loadImage('assets/mapping/Worksite.png', (error, image) => { - if (error) throw error; - mapElement.addImage('Worksite-marker', image); - }); - } - } - - public setMarkersForMap( - mapElement: any, - position: GeoLocation, - userMovedMap: boolean, - showAll: boolean - ): void { - if (mapElement) { - this.mappingService - .getMapDataAndMarkers() - .pipe(take(1)) - .subscribe( - (data: any) => { - if (data && data.Data && data.Data.MapMakerInfos) { - this.coordinates = []; - - const places = { - type: 'FeatureCollection', - features: [], - }; - - data.Data.MapMakerInfos.forEach( - (markerInfo: MapMakerInfoData) => { - const feature = { - type: 'Feature', - properties: { - description: `${markerInfo.Title}`, - icon: `${markerInfo.ImagePath}-marker`, - }, - geometry: { - type: 'Point', - coordinates: [markerInfo.Longitude, markerInfo.Latitude], - }, - }; - - this.coordinates.push(feature.geometry.coordinates); - - places.features.push(feature); - } - ); - - try { - let mpLayer = mapElement.getLayer('poi-labels'); - - //if (mapElement.isSourceLoaded('places') === true) { - if (typeof mpLayer != 'undefined') { - mapElement.removeLayer('poi-labels'); - mapElement.removeSource('places'); - } - } catch (error) {} - - mapElement.addSource('places', { - type: 'geojson', - data: places, - }); - - mapElement.addLayer({ - id: 'poi-labels', - type: 'symbol', - source: 'places', - layout: { - 'text-field': ['get', 'description'], - 'text-variable-anchor': ['top', 'bottom', 'left', 'right'], - 'text-radial-offset': 0.5, - 'text-justify': 'auto', - 'icon-image': ['get', 'icon'], - }, - }); - - if (!userMovedMap) { - if (!position && this.coordinates.length > 1) { - let bounds = this.coordinates.reduce(function ( - bounds, - coord - ) { - return bounds.extend(coord); - }, - new mapboxgl.LngLatBounds(this.coordinates[0], this.coordinates[1])); - - mapElement.fitBounds(bounds, { - padding: 40, - }); - } else { - if (position && position.Latitude && position.Longitude) { - if (showAll && this.coordinates.length > 1) { - let bounds = this.coordinates.reduce(function ( - bounds, - coord - ) { - return bounds.extend(coord); - }, - new mapboxgl.LngLatBounds(this.coordinates[0], this.coordinates[1])); - - mapElement.fitBounds(bounds, { - padding: 40, - }); - - mapElement.jumpTo({ - center: new mapboxgl.LngLat( - position.Longitude, - position.Latitude - ), - essential: true, - }); - } else { - mapElement.jumpTo({ - center: new mapboxgl.LngLat( - position.Longitude, - position.Latitude - ), - essential: true, - }); - - mapElement.setZoom(13); - } - } - } - } - } - }, - (err: any) => {} - ); - } - } -} diff --git a/src/app/providers/moduleStorage.ts b/src/app/providers/moduleStorage.ts deleted file mode 100644 index 4aae83e..0000000 --- a/src/app/providers/moduleStorage.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Injectable } from '@angular/core'; -import { IStorageProvider, UtilsService } from '@resgrid/ngx-resgridlib'; -import { Preferences } from '@capacitor/preferences'; - -@Injectable({ - providedIn: 'root', -}) -export class ModuleStorageProvider implements IStorageProvider { - public async read(key: string): Promise { - const { value } = await Preferences?.get({ key: key }); - - return value; - } - - public async write(key: string, value: string): Promise { - return await Preferences?.set({ - key: key, - value: value, - }); - } - - public async remove(key: string): Promise { - return await Preferences?.remove({key: key}); - } - - public async clear(): Promise { - return await Preferences?.clear(); - } -} \ No newline at end of file diff --git a/src/app/providers/photo.ts b/src/app/providers/photo.ts deleted file mode 100644 index c2f276b..0000000 --- a/src/app/providers/photo.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Camera, CameraResultType, CameraSource, Photo } from '@capacitor/camera'; -import { Capacitor } from '@capacitor/core'; -import { Directory, Filesystem } from '@capacitor/filesystem'; -import { Storage } from '@capacitor/storage'; -import { Platform } from '@ionic/angular'; - - -@Injectable({ - providedIn: 'root', - }) - export class PhotoService { - public photos: UserPhoto[] = []; - private PHOTO_STORAGE: string = 'photos'; - - constructor(private platform: Platform) {} - - /* Use the device camera to take a photo: - // https://capacitor.ionicframework.com/docs/apis/camera - // Store the photo data into permanent file storage: - // https://capacitor.ionicframework.com/docs/apis/filesystem - // Store a reference to all photo filepaths using Storage API: - // https://capacitor.ionicframework.com/docs/apis/storage - */ - public async getPhoto() { - // Take a photo - const capturedPhoto = await Camera.getPhoto({ - resultType: CameraResultType.Uri, // file-based data; provides best performance - source: CameraSource.Prompt, - quality: 100, // highest quality (0 to 100) - }); - - const base64Data = await this.readAsBase64(capturedPhoto); - - return base64Data; - } - - // Read camera photo into base64 format based on the platform the app is running on - private async readAsBase64(cameraPhoto: Photo) { - // "hybrid" will detect Cordova or Capacitor - if (this.platform.is('hybrid')) { - // Read the file into base64 format - const file = await Filesystem.readFile({ - path: cameraPhoto.path, - }); - - return file.data; - } else { - // Fetch the photo, read as a blob, then convert to base64 format - const response = await fetch(cameraPhoto.webPath!); - const blob = await response.blob(); - - return (await this.convertBlobToBase64(blob)) as string; - } - } - - convertBlobToBase64 = (blob: Blob) => - new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.onerror = reject; - reader.onload = () => { - resolve(reader.result); - }; - reader.readAsDataURL(blob); - }); - } - - export interface UserPhoto { - filepath: string; - webviewPath: string; - } \ No newline at end of file diff --git a/src/app/providers/push.ts b/src/app/providers/push.ts deleted file mode 100644 index 9de1ff8..0000000 --- a/src/app/providers/push.ts +++ /dev/null @@ -1,470 +0,0 @@ -import { Injectable } from '@angular/core'; -import { - PushNotifications, - Token, - ActionPerformed, - PushNotificationSchema, -} from '@resgrid/push-notifications'; -import { Router } from '@angular/router'; -import { Platform } from '@ionic/angular'; -import { StorageProvider } from './storage'; -import { DeviceService } from '@resgrid/ngx-resgridlib'; -import { HomeState } from '../features/home/store/home.store'; -import { Store } from '@ngrx/store'; -import { selectHomeState } from '../store'; -import { take } from 'rxjs/operators'; -import * as HomeActions from '../features/home/actions/home.actions'; -import { PushData } from '../models/pushData'; -import { from } from 'rxjs'; - -@Injectable({ - providedIn: 'root', -}) -export class PushProvider { - isRegistering: boolean = false; - - constructor( - private router: Router, - private platform: Platform, - private storageProvider: StorageProvider, - private deviceService: DeviceService, - private homeStore: Store - ) {} - - public async initPush(): Promise { - if (this.platform.is('mobile')) { - let enablePushNotifications = - await this.storageProvider.getEnablePushNotifications(); - if (enablePushNotifications) { - this.registerPush(); - } - } - } - - private registerPush() { - PushNotifications.requestPermissions().then((permission) => { - if (permission.receive === 'granted') { - // Register with Apple / Google to receive push via APNS/FCM - PushNotifications.register(); - } else { - // No permission for push granted - } - }); - - PushNotifications.addListener('registration', (token: Token) => { - if (!this.isRegistering) { - console.log('My token: ' + JSON.stringify(token)); - this.isRegistering = true; - - let platform = 0; - if (this.platform.is('ios')) { - platform = 7; - } else if (this.platform.is('android')) { - platform = 8; - } - - from(this.storageProvider.getDeviceId()) - .pipe(take(1)) - .subscribe((deviceId) => { - this.homeStore - .select(selectHomeState) - .pipe(take(1)) - .subscribe((state) => { - if (state && state.activeUnit) { - this.deviceService - .RegisterUnitPush( - token.value, - state.activeUnit.UnitId, - deviceId, - platform - ) - .subscribe((data) => { - console.log('Registered push'); - this.isRegistering = false; - }); - } - }); - }); - } - }); - - PushNotifications.addListener('registrationError', (error: any) => { - console.log('Error: ' + JSON.stringify(error)); - }); - - PushNotifications.addListener( - 'pushNotificationReceived', - async (notification: PushNotificationSchema) => { - console.log('Push received: ' + JSON.stringify(notification)); - const data = notification.data; - if (data.eventCode) { - if (data.eventCode && data.eventCode.trim().indexOf('C', 0) === 0) { - this.homeStore.dispatch(new HomeActions.LoadAppData()); - let callId = data.eventCode.trim().replace("C", ""); - - let pushData: PushData = { - type: 1, - title: notification.title, - body: notification.body, - entityId: callId, - }; - this.homeStore.dispatch(new HomeActions.PushCallReceived(pushData)); - } else if ( - data.eventCode && - data.eventCode.trim().indexOf('T', 0) === 0 - ) { - } else if ( - data.eventCode && - data.eventCode.trim().indexOf('G', 0) === 0 - ) { - } - } - } - ); - - PushNotifications.addListener( - 'pushNotificationActionPerformed', - async (notification: ActionPerformed) => { - const data = notification.notification.data; - console.log( - 'Action performed: ' + JSON.stringify(notification.notification) - ); - if (data.eventCode && data.eventCode.trim().indexOf('C', 0) === 0) { - let callId = data.eventCode.trim().replace("C", ""); - - this.homeStore.dispatch(new HomeActions.LoadAppData()); - let pushData: PushData = { - type: data.type, - title: notification.notification.title, - body: notification.notification.body, - entityId: callId, - }; - this.homeStore.dispatch(new HomeActions.PushCallReceived(pushData)); - } - } - ); - - if (this.platform.is('android')) { - this.createChannels(); - } - } - - private createChannels() { - PushNotifications.createChannel({ - id: 'calls', - name: 'Generic Call', - description: 'Generic Call', - importance: 5, - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: '0', - name: 'Emergency Call', - description: 'Emergency Call', - importance: 5, - sound: 'callemergency', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: '1', - name: 'High Call', - description: 'High Call', - importance: 5, - sound: 'callhigh', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: '2', - name: 'Medium Call', - description: 'Medium Call', - importance: 5, - sound: 'callmedium', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: '3', - name: 'Low Call', - description: 'Low Call', - importance: 5, - sound: 'calllow', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'notif', - name: 'Notification', - description: 'Notifications', - importance: 5, - vibration: false, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'message', - name: 'Message', - description: 'Messages', - importance: 5, - vibration: false, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c1', - name: 'Custom Call 1', - description: 'Custom Call Tone 1', - importance: 5, - sound: 'c1', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c2', - name: 'Custom Call 2', - description: 'Custom Call Tone 2', - importance: 5, - sound: 'c2', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c3', - name: 'Custom Call 3', - description: 'Custom Call Tone 3', - importance: 5, - sound: 'c3', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c4', - name: 'Custom Call 4', - description: 'Custom Call Tone 4', - importance: 5, - sound: 'c4', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c5', - name: 'Custom Call 5', - description: 'Custom Call Tone 5', - importance: 5, - sound: 'c5', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c6', - name: 'Custom Call 6', - description: 'Custom Call Tone 6', - importance: 5, - sound: 'c6', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c7', - name: 'Custom Call 7', - description: 'Custom Call Tone 7', - importance: 5, - sound: 'c7', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c8', - name: 'Custom Call 8', - description: 'Custom Call Tone 8', - importance: 5, - sound: 'c8', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c9', - name: 'Custom Call 9', - description: 'Custom Call Tone 9', - importance: 5, - sound: 'c9', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c10', - name: 'Custom Call 10', - description: 'Custom Call Tone 10', - importance: 5, - sound: 'c10', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c11', - name: 'Custom Call 11', - description: 'Custom Call Tone 11', - importance: 5, - sound: 'c11', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c12', - name: 'Custom Call 12', - description: 'Custom Call Tone 12', - importance: 5, - sound: 'c12', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c13', - name: 'Custom Call 13', - description: 'Custom Call Tone 13', - importance: 5, - sound: 'c13', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c14', - name: 'Custom Call 14', - description: 'Custom Call Tone 14', - importance: 5, - sound: 'c14', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c15', - name: 'Custom Call 15', - description: 'Custom Call Tone 15', - importance: 5, - sound: 'c15', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c16', - name: 'Custom Call 16', - description: 'Custom Call Tone 16', - importance: 5, - sound: 'c16', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c17', - name: 'Custom Call 17', - description: 'Custom Call Tone 17', - importance: 5, - sound: 'c17', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c18', - name: 'Custom Call 18', - description: 'Custom Call Tone 18', - importance: 5, - sound: 'c18', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c19', - name: 'Custom Call 19', - description: 'Custom Call Tone 19', - importance: 5, - sound: 'c19', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c20', - name: 'Custom Call 20', - description: 'Custom Call Tone 20', - importance: 5, - sound: 'c20', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c21', - name: 'Custom Call 21', - description: 'Custom Call Tone 21', - importance: 5, - sound: 'c21', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c22', - name: 'Custom Call 22', - description: 'Custom Call Tone 22', - importance: 5, - sound: 'c22', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c23', - name: 'Custom Call 23', - description: 'Custom Call Tone 23', - importance: 5, - sound: 'c23', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c24', - name: 'Custom Call 24', - description: 'Custom Call Tone 24', - importance: 5, - sound: 'c24', - vibration: true, - visibility: 1, - }); - - PushNotifications.createChannel({ - id: 'c25', - name: 'Custom Call 25', - description: 'Custom Call Tone 25', - importance: 5, - sound: 'c25', - vibration: true, - visibility: 1, - }); - } -} diff --git a/src/app/providers/sleep.ts b/src/app/providers/sleep.ts deleted file mode 100644 index 0e92172..0000000 --- a/src/app/providers/sleep.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Injectable } from '@angular/core'; -import { KeepAwake } from '@capacitor-community/keep-awake'; -import { Platform } from '@ionic/angular'; -import { StorageProvider } from './storage'; - -@Injectable({ - providedIn: 'root', -}) -export class SleepProvider { - constructor(private storageProvider: StorageProvider, public platform: Platform) {} - - public async init(): Promise { - - if (this.platform.is('mobile')) { - let keepAlive = await this.storageProvider.getKeepAlive(); - if (keepAlive) { - await KeepAwake.keepAwake(); - console.log('SleepProvider: keep awake enabled'); - return true; - } else { - await KeepAwake.allowSleep(); - console.log('SleepProvider: keep awake disabled'); - return false; - } - } - } - - public async enable() { - if (this.platform.is('mobile')) { - await KeepAwake.keepAwake(); - } - } - - public async disable() { - if (this.platform.is('mobile')) { - await KeepAwake.allowSleep(); - } - } -} diff --git a/src/app/providers/storage.ts b/src/app/providers/storage.ts deleted file mode 100644 index fecbbdc..0000000 --- a/src/app/providers/storage.ts +++ /dev/null @@ -1,210 +0,0 @@ -import { Injectable } from '@angular/core'; -import { UtilsService } from '@resgrid/ngx-resgridlib'; -import { StartupData } from '../features/settings/models/startupData'; -import { LoginResult } from '../models/loginResult'; -import { Preferences } from '@capacitor/preferences'; - -@Injectable({ - providedIn: 'root', -}) -export class StorageProvider { - constructor(private utilsService: UtilsService) {} - - async init() { - //await Storage.create(); - await this.initDeviceId(); - } - - private async set(key: string, value: string): Promise { - return await Preferences?.set({ - key: key, - value: value, - }); - } - - private async get(key: string): Promise { - const { value } = await Preferences?.get({ key: key }); - - return value; - } - - public async clear(): Promise { - return await Preferences?.clear(); - } - - private async initDeviceId(): Promise { - const deviceId = await this.get('RGUnitDeviceId'); - - if (!deviceId) { - const newDeviceId = this.utilsService.generateUUID(); - await this.set('RGUnitDeviceId', newDeviceId); - } - } - - // Server Address needs to be handled differently because it's used before the app is initialized - public getServerAddress(): string { //Promise { - //return await this.get('serverAddress'); - return localStorage.getItem(`RgUnitApp.serverAddress`); - } - - // Server Address needs to be handled differently because it's used before the app is initialized - public setServerAddress(serverAddress: string): void { //Promise { - localStorage.setItem(`RgUnitApp.serverAddress`, serverAddress); - //return await this.set('serverAddress', serverAddress); - } - - public async getDeviceId(): Promise { - return await this.get('RGUnitDeviceId'); - } - - public async setLoginData(loginData: LoginResult): Promise { - await this.set('RGUnitLoginData', JSON.stringify(loginData)); - - return loginData - } - - public async getLoginData(): Promise { - return JSON.parse(await this.get('RGUnitLoginData')); - } - - - public async setEnablePushNotifications(enablePush: boolean): Promise { - return await this.set('RGUnitEnablePush', enablePush?.toString()); - } - - public async setEnableBackgroundGeolocation(enableBackgroundGeolocation: boolean): Promise { - return await this.set('RGUnitEnableBackgroundGeo', enableBackgroundGeolocation?.toString()); - } - - public async getEnableBackgroundGeolocation(): Promise { - let data = await this.get('RGUnitEnableBackgroundGeo'); - if (data) { - let isSet = (data === 'true'); - return isSet; - } - - return true; - } - - public async setActiveCall(callId: string): Promise { - return await this.set('activeCall', callId); - } - - public async getActiveCall(): Promise { - return await this.get('activeCall'); - } - - public async getActiveUnit(): Promise { - return await this.get('activeUnit'); - } - - public async setActiveUnit(unitId: string): Promise { - return await this.set('activeUnit', unitId); - } - - public async getEnablePushNotifications(): Promise { - let data = await this.get('RGUnitEnablePush'); - if (data) { - let isSet = (data === 'true'); - return isSet; - } - - return true; - } - - public setThemePreference(perferDark: number): Promise { - if (typeof(perferDark) === 'undefined') { - perferDark = -1; - } - - return this.set('RGUnitThemePref', perferDark.toString()); - } - - public setKeepAlive(keepAlive: boolean): Promise { - return this.set('RGUnitKeepAlive', keepAlive?.toString()); - } - - public setShowAll(showAll: boolean): Promise { - return this.set('RGUnitShowAll', showAll?.toString()); - } - - public setHeadsetType(headsetType: number): Promise { - return this.set('RGUnitHeadsetType', headsetType?.toString()); - } - - public setSelectedMic(mic: string): Promise { - return this.set('RGUnitSelectedMic', mic); - } - - public async getSelectedMic(): Promise { - let data = await this.get('RGUnitSelectedMic'); - if (data) { - return data; - } - - return ''; - } - - public async getThemePreference(): Promise { - let data = await this.get('RGUnitThemePref'); - if (data) { - return parseInt(data); - } - - return -1; - } - - public async getKeepAlive(): Promise { - let data = await this.get('RGUnitKeepAlive'); - if (data) { - let isSet = (data === 'true'); - return isSet; - } - - return false; - } - - public async getShowAll(): Promise { - let data = await this.get('RGUnitShowAll'); - if (data) { - let isSet = (data === 'true'); - return isSet; - } - - return false; - } - - public async getHeadsetType(): Promise { - let data = await this.get('RGUnitHeadsetType'); - if (data) { - return parseInt(data); - } - - return -1; - } - - - public async getStartupData(): Promise { - const loginData = await this.getLoginData(); - const activeUnit = await this.getActiveUnit(); - const activeCall = await this.getActiveCall(); - const pushNotifications = await this.getEnablePushNotifications(); - const themePreference = await this.getThemePreference(); - const keepAlive = await this.getKeepAlive(); - const headsetType = await this.getHeadsetType(); - const enableBackgroundGeolocation = await this.getEnableBackgroundGeolocation(); - const showAll = await this.getShowAll(); - - return { - loginData: loginData, - activeUnitId: activeUnit, - activeCallId: activeCall, - pushNotificationsEnabled: pushNotifications, - themePreference: themePreference, - keepAlive: keepAlive, - headsetType: headsetType, - backgroundGeolocationEnabled: enableBackgroundGeolocation, - showAll: showAll - }; - } -} diff --git a/src/app/reducers/index.ts b/src/app/reducers/index.ts deleted file mode 100644 index d480ab1..0000000 --- a/src/app/reducers/index.ts +++ /dev/null @@ -1,55 +0,0 @@ -import {ActionReducerMap, ActionReducer, MetaReducer} from '@ngrx/store'; -import {environment} from '../../environments/environment'; -import * as fromRouter from '@ngrx/router-store'; -import { localStorageSync } from 'ngrx-store-localstorage'; - -/** - * storeFreeze prevents state from being mutated. When mutation occurs, an - * exception will be thrown. This is useful during development mode to - * ensure that none of the reducers accidentally mutates the state. - */ -import {storeFreeze} from 'ngrx-store-freeze'; - -/** - * As mentioned, we treat each reducer like a table in a database. This means - * our top level state interface is just a map of keys to inner state types. - */ -export interface State { - router: fromRouter.RouterReducerState; -} - - -function localStorageSyncReducer(reducer: ActionReducer): ActionReducer { - return localStorageSync({ - keys: ['settingsModule', 'homeModule', 'statusesModule', 'callsModule'], - rehydrate: true - })(reducer); -} - -/** - * Our state is composed of a map of action reducer functions. - * These reducer functions are called with each dispatched action - * and the current or initial state and return a new immutable state. - */ -export const reducers: ActionReducerMap < State > = { - router: fromRouter.routerReducer -}; - -// console.log all actions -export function logger(reducer: ActionReducer < State >): ActionReducer < State > { - return function(state: State, action: any): State { - console.log('state', state); - console.log('action', action); - - return reducer(state, action); - }; -} - -/** - * By default, @ngrx/store uses combineReducers with the reducer map to compose - * the root meta-reducer. To add more meta-reducers, provide an array of meta-reducers - * that will be composed to form the root meta-reducer. - */ -export const metaReducers: MetaReducer < State > [] = !environment.production - ? [logger, storeFreeze] //localStorageSyncReducer - : []; diff --git a/src/app/shell/aspect-ratio/aspect-ratio.component.html b/src/app/shell/aspect-ratio/aspect-ratio.component.html deleted file mode 100644 index e4c1c70..0000000 --- a/src/app/shell/aspect-ratio/aspect-ratio.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
- -
diff --git a/src/app/shell/aspect-ratio/aspect-ratio.component.scss b/src/app/shell/aspect-ratio/aspect-ratio.component.scss deleted file mode 100644 index 9e30fee..0000000 --- a/src/app/shell/aspect-ratio/aspect-ratio.component.scss +++ /dev/null @@ -1,14 +0,0 @@ -:host { - display: block; - overflow: hidden; - position: relative; - width: 100%; - - .content-wrapper { - position: absolute; - top: 0px; - bottom: 0px; - left: 0px; - right: 0px; - } -} diff --git a/src/app/shell/aspect-ratio/aspect-ratio.component.ts b/src/app/shell/aspect-ratio/aspect-ratio.component.ts deleted file mode 100644 index f921c51..0000000 --- a/src/app/shell/aspect-ratio/aspect-ratio.component.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Component, Input, HostBinding } from '@angular/core'; - -@Component({ - selector: 'app-aspect-ratio', - templateUrl: './aspect-ratio.component.html', - styleUrls: ['./aspect-ratio.component.scss'] -}) -export class AspectRatioComponent { - - @HostBinding('style.padding') ratioPadding = '0px'; - - @Input() - set ratio(ratio: { w: number, h: number }) { - ratio = (ratio !== undefined && ratio !== null) ? ratio : {w: 1, h: 1}; - - const heightRatio = (ratio.h / ratio.w * 100) + '%'; - - // Conserve aspect ratio (see: http://stackoverflow.com/a/10441480/1116959) - this.ratioPadding = '0px 0px ' + heightRatio + ' 0px'; - } - - constructor() { } -} diff --git a/src/app/shell/data-store.ts b/src/app/shell/data-store.ts deleted file mode 100644 index 5efb635..0000000 --- a/src/app/shell/data-store.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Observable, of, combineLatest, ReplaySubject } from 'rxjs'; -import { delay, map, startWith } from 'rxjs/operators'; -import { environment } from '../../environments/environment'; - -export class ShellModel { - isShell = false; -} - -export class DataStore { - // We wait on purpose 2 secs on local environment when fetching from json to simulate the backend roundtrip. - // However, in production you should set this delay to 0 in the environment.prod file. - // eslint-disable-next-line max-len - private networkDelay = (environment.appShellConfig && environment.appShellConfig.networkDelay) ? environment.appShellConfig.networkDelay : 0; - - private timeline: ReplaySubject = new ReplaySubject(1); - - constructor(private shellModel: T) { } - - // Static function with generics - // (ref: https://stackoverflow.com/a/24293088/1116959) - // Append a shell (T & ShellModel) to every value (T) emmited to the timeline - public static AppendShell(dataObservable: Observable, shellModel: T, networkDelay = 400): Observable { - const delayObservable = of(true).pipe( - delay(networkDelay) - ); - - // Assign shell flag accordingly - // (ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - return combineLatest([ - delayObservable, - dataObservable - ]).pipe( - // Dismiss unnecessary delayValue - map(([delayValue, dataValue]: [boolean, T]): (T & ShellModel) => Object.assign(dataValue, {isShell: false})), - // Set the shell model as the initial value - startWith(Object.assign(shellModel, {isShell: true})) - ); - } - - load(dataSourceObservable: Observable, networkDelay?: number): void { - // eslint-disable-next-line no-shadow, @typescript-eslint/no-shadow - const delay = (typeof networkDelay === 'number') ? networkDelay : this.networkDelay; - - let processedDataSource: Observable; - - // If no network delay, then don't show shell - if (delay === 0) { - processedDataSource = dataSourceObservable; - } else { - processedDataSource = DataStore.AppendShell(dataSourceObservable, this.shellModel, delay); - } - - processedDataSource - .subscribe((dataValue: T & ShellModel) => { - this.timeline.next(dataValue); - }); - } - - public get state(): Observable { - return this.timeline.asObservable(); - } -} diff --git a/src/app/shell/image-shell/image-shell.component.html b/src/app/shell/image-shell/image-shell.component.html deleted file mode 100644 index 1afed9b..0000000 --- a/src/app/shell/image-shell/image-shell.component.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/app/shell/image-shell/image-shell.component.scss b/src/app/shell/image-shell/image-shell.component.scss deleted file mode 100644 index 21f5866..0000000 --- a/src/app/shell/image-shell/image-shell.component.scss +++ /dev/null @@ -1,182 +0,0 @@ -:host { - --image-shell-loading-background: #EEE; - --image-shell-border-radius: 0px; - --image-shell-color: #333; - - display: block; - position: relative; - height: 100%; - border-radius: var(--image-shell-border-radius); - transition: all ease-in-out .3s; - z-index: 2; - - // By default, hide the spinner - & > .spinner { - display: none; - } - - // Loading background - &::before { - content: ''; - background: var(--image-shell-loading-background); - border-radius: var(--image-shell-border-radius); - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - } - - &:not([display="cover"]) { - width: 100%; - overflow: hidden; - - & > .inner-img { - transition: visibility 0s linear, opacity .5s linear; - opacity: 0; - visibility: hidden; - width: 100%; - height: 100%; - border-radius: var(--image-shell-border-radius); - // Image should fill the space while loading - display: block; - } - - &.img-ssr, - &.img-loaded { - // Hide loading background once the image has loaded - &::before { - display: none; - } - - & > .inner-img { - opacity: 1; - visibility: visible; - } - } - - &.img-error { - & > .inner-img { - // For the Alt text - color: var(--image-shell-color); - font-size: 12px; - } - - // Add placeholder background - &::after { - content: attr(data-error); - display: flex; - align-items: center; - justify-content: center; - position: absolute; - top: 0; - width: 100%; - height: 100%; - box-sizing: border-box; - padding: 10px; - color: var(--image-shell-color); - background-color: var(--image-shell-loading-background); - font-size: 12px; - } - } - } - - // * NOTE: we didn't add .img-error styles for 'cover' display on purpose. - // If it is display: cover - &[display="cover"] { - background-size: cover; - background-repeat: no-repeat; - - // In cover display, we can have content inside the element, thus we need to put these elements beneath - &::before, - & > .spinner { - z-index: -1; - } - - & > .inner-img { - display: none; - visibility: hidden; - } - - &.img-ssr, - &.img-loaded { - // Hide loading background once the image has loaded - &::before { - display: none; - } - } - } -} - -:host([animation="gradient"]) { - --image-shell-loading-background: #EEE; - --image-shell-animation-color: #DDD; - - // The animation that goes beneath the masks - &::before { - background: - linear-gradient(to right, var(--image-shell-loading-background) 8%, var(--image-shell-animation-color) 18%, var(--image-shell-loading-background) 33%); - background-size: 800px 104px; - animation: animateBackground 2s ease-in-out infinite; - } - - &.img-ssr, - &.img-loaded, - &.img-error { - // Reset background animation - &::before { - background: none; - animation: 0; - } - } - - @keyframes animateBackground { - 0%{ - background-position: -468px 0 - } - - 100%{ - background-position: 468px 0 - } - } -} - -:host([animation="spinner"]) { - --image-shell-spinner-size: 28px; - --image-shell-spinner-color: #CCC; - - & > .spinner { - display: block; - position: absolute; - top: calc(50% - calc(var(--image-shell-spinner-size) / 2)); - left: calc(50% - calc(var(--image-shell-spinner-size) / 2)); - width: var(--image-shell-spinner-size); - height: var(--image-shell-spinner-size); - font-size: var(--image-shell-spinner-size); - line-height: var(--image-shell-spinner-size); - color: var(--image-shell-spinner-color); - } - - &.img-ssr, - &.img-loaded, - &.img-error { - & > .spinner { - display: none; - visibility: hidden; - } - } -} - -:host(.add-overlay) { - --image-shell-overlay-background: rgba(0, 0, 0, .4); - - &.img-ssr, - &.img-loaded, - &.img-error { - // Add background overlay after the image has loaded - &::before { - display: block; - background: var(--image-shell-overlay-background); - } - } -} diff --git a/src/app/shell/image-shell/image-shell.component.ts b/src/app/shell/image-shell/image-shell.component.ts deleted file mode 100644 index 2ce1d95..0000000 --- a/src/app/shell/image-shell/image-shell.component.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { Component, Input, HostBinding } from '@angular/core'; -import { environment } from '../../../environments/environment'; - -import { ImageShellState, TransferStateHelper } from '../../utils/transfer-state-helper'; - -@Component({ - selector: 'app-image-shell', - templateUrl: './image-shell.component.html', - styleUrls: ['./image-shell.component.scss'] -}) -export class ImageShellComponent { - // To debug shell styles, change configuration in the environment file - private debugDisplay = (environment.appShellConfig && environment.appShellConfig.debug) ? environment.appShellConfig.debug : false; - - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match - _src = ''; - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match - _alt = ''; - // eslint-disable-next-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match - _loadingStrategy: 'lazy' | 'eager' = 'lazy'; - // eslint-disable-next-line @typescript-eslint/naming-convention, no-underscore-dangle, id-blacklist, id-match - _display = ''; - - @HostBinding('class.img-ssr') imageSSR = false; - @HostBinding('class.img-loaded') imageLoaded = false; - @HostBinding('class.img-error') imageError = false; - - @HostBinding('attr.data-error') errorMessage = 'Could not load image'; - - @HostBinding('style.backgroundImage') backgroundImage: string; - - @HostBinding('attr.display') - @Input() - set display(val: string) { - this._display = (val !== undefined && val !== null) ? val : ''; - - // For display 'cover' we use a hidden aux image. As it's hidden, if set loading to 'lazy' it won't ever trigger the loading mechanism - if (this._display === 'cover') { - this._loadingStrategy = 'eager'; - } - } - get display(): string { - return this._display; - } - - @Input() - set src(val: string) { - if (!this.debugDisplay) { - this._src = (val !== undefined && val !== null) ? val : ''; - } - - // When using SSR (Server Side Rendering), avoid the loading animation while the image resource is being loaded - const imageState = this.transferStateHelper.checkImageShellState('shell-images-state', this._src); - - if (imageState === ImageShellState.SSR || imageState === ImageShellState.BROWSER_FROM_SSR) { - this._imageProcessedInServer(); - } else { - if (this._display === 'cover') { - // Unset the background-image until the image is loaded - this.backgroundImage = 'unset'; - } - } - } - - @Input() - set alt(val: string) { - this._alt = (val !== undefined && val !== null) ? val : ''; - } - - constructor( - private transferStateHelper: TransferStateHelper - ) { } - - _imageProcessedInServer(): void { - this.imageSSR = true; - - // Also set backgroundImage so it's ready when transitioning from SSR to the browser - if (this._display === 'cover') { - this.backgroundImage = 'url(' + this._src + ')'; - } - } - - _imageLoaded(): void { - this.imageLoaded = true; - - // If it's a cover image then set the background-image property accordingly - if (this._display === 'cover') { - // Now that the image is loaded, set the background image - this.backgroundImage = 'url(' + this._src + ')'; - } - } - - _imageLoadError(event: Event): void { - // Image error event get's called when the src is empty. We use emty values for the shell. - // (see: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#Image_loading_errors) - // Avoid that shell case - if (this._src && this._src !== '') { - this.imageLoaded = false; - this.imageSSR = false; - - setTimeout(() => { - this.imageError = true; - }, 500); - } - } -} diff --git a/src/app/shell/shell.module.ts b/src/app/shell/shell.module.ts deleted file mode 100644 index db9baf8..0000000 --- a/src/app/shell/shell.module.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { IonicModule } from '@ionic/angular'; - -import { AspectRatioComponent } from './aspect-ratio/aspect-ratio.component'; -import { ImageShellComponent } from './image-shell/image-shell.component'; -import { TextShellComponent } from './text-shell/text-shell.component'; - -@NgModule({ - declarations: [ - AspectRatioComponent, - ImageShellComponent, - TextShellComponent - ], - imports: [ - CommonModule, - IonicModule - ], - exports: [ - AspectRatioComponent, - ImageShellComponent, - TextShellComponent - ] -}) -export class ShellModule { } diff --git a/src/app/shell/text-shell/mixins/background-height.scss b/src/app/shell/text-shell/mixins/background-height.scss deleted file mode 100644 index f70c248..0000000 --- a/src/app/shell/text-shell/mixins/background-height.scss +++ /dev/null @@ -1,6 +0,0 @@ -@mixin background-height($property, $lines: 1) { - $line-height: var(--text-shell-line-height, 16px); - $line-spacing: var(--text-shell-line-gutter, 3px); - - #{$property}: calc((#{$line-height} * #{$lines}) + (#{$line-spacing} * (#{$lines} - 1))); -} diff --git a/src/app/shell/text-shell/mixins/bouncing-lines-background.scss b/src/app/shell/text-shell/mixins/bouncing-lines-background.scss deleted file mode 100644 index dc90065..0000000 --- a/src/app/shell/text-shell/mixins/bouncing-lines-background.scss +++ /dev/null @@ -1,92 +0,0 @@ -@import "./utils"; - -@mixin bouncing-lines-background($lines: 1) { - $line-height: var(--text-shell-line-height, 16px); - $line-spacing: var(--text-shell-line-gutter, 3px); - $bg-color: var(--text-shell-line-color, #CCC); - $mask-color: var(--text-shell-background, #FFF); - $line-bg-color: var(--text-shell-background, #FFF); - $bg-y-pos: 0px; - $rand-width: #{randomNum(85, 95)}; - $bg-image: 'linear-gradient(to right, ' + $bg-color + ' ' + $rand-width + '% , ' + $mask-color + ' ' + $rand-width + '%)'; - $bg-position: '0 ' + $bg-y-pos; - $bg-size: '100% ' + $line-height; - $bg-size-animation-from: '85% ' + $line-height; - $bg-size-animation-to: '100% ' + $line-height; - - @if ($lines == 1) { - background-image: #{$bg-image}; - background-position: #{$bg-position}; - background-size: #{$bg-size}; - background-repeat: no-repeat; - - animation-direction: alternate; - animation-name: animateLine; - - @keyframes animateLine { - 0%{ - background-size: #{$bg-size-animation-from}; - } - - 100%{ - background-size: #{$bg-size-animation-to}; - } - } - } @else { - @for $i from 2 through $lines { - // Add separator between lines - $bg-image: append($bg-image, linear-gradient(to right, #{$line-bg-color} 100%, #{$line-bg-color} 100%)); - // This linear-gradient as separator starts below the last line, - // so we have to add $line-height to our y-pos pointer - $bg-y-pos: calc((#{$line-height} * (#{$i} - 1)) + (#{$line-spacing} * (#{$i} - 2))); - $bg-position: append($bg-position, '0 ' + $bg-y-pos); - $bg-size: append($bg-size, '100% ' + $line-spacing); - // separator lines have the same initial and end state, thus no animation occurs - $bg-size-animation-from: append($bg-size-animation-from, '100% ' + $line-spacing); - $bg-size-animation-to: append($bg-size-animation-to, '100% ' + $line-spacing); - - // Add new line - // The last line should be narrow than the others - @if ($i == $lines) { - $rand-width: #{randomNum(30, 50)}; - $bg-size-animation-from: append($bg-size-animation-from, '55% ' + $line-height); - } @else { - $rand-width: #{randomNum(60, 80)}; - $bg-size-animation-from: append($bg-size-animation-from, '75% ' + $line-height); - } - - $bg-image: append($bg-image, 'linear-gradient(to right, ' + $bg-color + ' ' + $rand-width + '% , ' + $mask-color + ' ' + $rand-width + '%)'); - // This new line starts below the prviously added separator, - // so we have to add $line-spacing to our y-pos pointer - $bg-y-pos: calc((#{$line-height} * (#{$i} - 1)) + (#{$line-spacing} * (#{$i} - 1))); - $bg-position: append($bg-position, '0 ' + $bg-y-pos); - $bg-size: append($bg-size, '100% ' + $line-height); - $bg-size-animation-to: append($bg-size-animation-to, '100% ' + $line-height); - } - - background-image: #{to-string($bg-image, ', ')}; - background-position: #{to-string($bg-position, ', ')}; - background-size: #{to-string($bg-size, ', ')}; - background-repeat: no-repeat; - - animation-direction: alternate-reverse; - animation-name: animateMultiLine; - - @keyframes animateMultiLine { - 0%{ - background-size: #{to-string($bg-size-animation-from, ', ')}; - } - - 100%{ - background-size: #{to-string($bg-size-animation-to, ', ')}; - } - } - } - - @include background-height(min-height, $lines); - - animation-fill-mode: forwards; - animation-iteration-count: infinite; - animation-timing-function: ease-in-out; - animation-duration: 1s; -} diff --git a/src/app/shell/text-shell/mixins/masked-lines-background.scss b/src/app/shell/text-shell/mixins/masked-lines-background.scss deleted file mode 100644 index d6d2155..0000000 --- a/src/app/shell/text-shell/mixins/masked-lines-background.scss +++ /dev/null @@ -1,53 +0,0 @@ -@import "./utils"; -@import "./background-height"; - -@mixin masked-lines-background($lines: 1) { - $line-height: var(--text-shell-line-height, 16px); - $line-spacing: var(--text-shell-line-gutter, 3px); - $bg-color: var(--text-shell-line-color, #CCC); - $mask-color: var(--text-shell-background, #FFF); - $line-bg-color: var(--text-shell-background, #FFF); - $bg-y-pos: 0px; - $rand-width: #{randomNum(85, 95)}; - $bg-image: 'linear-gradient(to right, ' + $bg-color + ' ' + $rand-width + '% , ' + $mask-color + ' ' + $rand-width + '%)'; - $bg-position: '0 ' + $bg-y-pos; - $bg-size: '100% ' + $line-height; - - @if ($lines == 1) { - background-image: #{$bg-image}; - background-position: #{$bg-position}; - background-size: #{$bg-size}; - background-repeat: no-repeat; - } @else { - @for $i from 2 through $lines { - // Add separator between lines - $bg-image: append($bg-image, linear-gradient(to right, #{$line-bg-color} 100%, #{$line-bg-color} 100%)); - // This linear-gradient as separator starts below the last line, - // so we have to add $line-height to our y-pos pointer - $bg-y-pos: calc((#{$line-height} * (#{$i} - 1)) + (#{$line-spacing} * (#{$i} - 2))); - $bg-position: append($bg-position, '0 ' + $bg-y-pos); - $bg-size: append($bg-size, '100% ' + $line-spacing); - - // Add new line - // The last line should be narrow than the others - @if ($i == $lines) { - $rand-width: #{randomNum(30, 50)}; - } @else { - $rand-width: #{randomNum(60, 80)}; - } - $bg-image: append($bg-image, 'linear-gradient(to right, ' + $bg-color + ' ' + $rand-width + '% , ' + $mask-color + ' ' + $rand-width + '%)'); - // This new line starts below the prviously added separator, - // so we have to add $line-spacing to our y-pos pointer - $bg-y-pos: calc((#{$line-height} * (#{$i} - 1)) + (#{$line-spacing} * (#{$i} - 1))); - $bg-position: append($bg-position, '0 ' + $bg-y-pos); - $bg-size: append($bg-size, '100% ' + $line-height); - } - - background-image: #{to-string($bg-image, ', ')}; - background-position: #{to-string($bg-position, ', ')}; - background-size: #{to-string($bg-size, ', ')}; - background-repeat: no-repeat; - } - - @include background-height(min-height, $lines); -} diff --git a/src/app/shell/text-shell/mixins/utils.scss b/src/app/shell/text-shell/mixins/utils.scss deleted file mode 100644 index e923869..0000000 --- a/src/app/shell/text-shell/mixins/utils.scss +++ /dev/null @@ -1,28 +0,0 @@ -// Inspired in: https://stackoverflow.com/a/41096631/1116959 -@function randomNum($min, $max) { - $rand: random(); - $randomNum: $min + floor($rand * (($max - $min) + 1)); - - @return $randomNum; -} - -// Inspired in: https://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/ -@function to-string($list, $glue: '', $is-nested: false) { - $result: null; - - @for $i from 1 through length($list) { - $e: nth($list, $i); - - @if type-of($e) == list { - $result: $result#{to-string($e, $glue, true)}; - } @else { - $result: if( - $i != length($list) or $is-nested, - $result#{$e}#{$glue}, - $result#{$e} - ); - } - } - - @return $result; -} diff --git a/src/app/shell/text-shell/text-shell.component.html b/src/app/shell/text-shell/text-shell.component.html deleted file mode 100644 index 7d7d768..0000000 --- a/src/app/shell/text-shell/text-shell.component.html +++ /dev/null @@ -1 +0,0 @@ -{{ _data }} diff --git a/src/app/shell/text-shell/text-shell.component.scss b/src/app/shell/text-shell/text-shell.component.scss deleted file mode 100644 index d30947a..0000000 --- a/src/app/shell/text-shell/text-shell.component.scss +++ /dev/null @@ -1,134 +0,0 @@ -@import "./mixins/background-height"; -@import "./mixins/masked-lines-background"; -@import "./mixins/bouncing-lines-background"; - -$max-lines-count: 6; - -:host { - --text-shell-background: transparent; - --text-shell-line-color: #EEE; - --text-shell-line-height: 16px; - --text-shell-line-gutter: 3px; - - display: block; - position: relative; - color: transparent; - background-color: var(--text-shell-background); - transform-style: preserve-3d; - // To fix 1px line misalignment in chrome: https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip - // (I also noticed that if I set the color to a solid color instead of having opacity, the issue doesn't happen) - background-clip: content-box; -} - -// Default styles. When no animation attribute is provided -:host(:not([animation])) { - // Default one line text-shell - @include masked-lines-background(1); - - // Support for [lines] attribute - @for $i from 1 through $max-lines-count { - &[lines="#{ $i }"] { - @include masked-lines-background($i); - } - } - - &.text-loaded { - background: none; - min-height: inherit; - color: inherit; - } -} - -// Bouncing line loading animation -:host([animation="bouncing"]) { - // Default one line text-shell - @include bouncing-lines-background(1); - - // Support for [lines] attribute - @for $i from 1 through $max-lines-count { - &[lines="#{ $i }"] { - @include bouncing-lines-background($i); - } - } - - &.text-loaded { - background: none; - min-height: inherit; - color: inherit; - // 0 is the default value (see: https://stackoverflow.com/a/15963044/1116959) - animation: 0; - } -} - -// Background gradient beneath masked lines -:host([animation="gradient"]) { - --text-shell-background: #FFF; - --text-shell-line-color: transparent !important; - --text-shell-animation-background: #EEE; - --text-shell-animation-color: #DDD; - - - // Calculate default height for 1 line - @include background-height(min-height, 1); - - // The animation that goes beneath the masks - &::before { - content: ""; - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - background: - linear-gradient(to right, var(--text-shell-animation-background) 8%, var(--text-shell-animation-color) 18%, var(--text-shell-animation-background) 33%); - background-size: 800px 104px; - animation: animateBackground 2s ease-in-out infinite; - } - - @keyframes animateBackground { - 0%{ - background-position: -468px 0 - } - - 100%{ - background-position: 468px 0 - } - } - - // The masks - &::after { - content: ""; - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - - // Default one line text-shell - @include masked-lines-background(1); - } - - // Support for [lines] attribute - @for $i from 1 through $max-lines-count { - &[lines="#{ $i }"] { - // Calculate default height for $i lines - @include background-height(min-height, $i); - - &::after { - @include masked-lines-background($i); - } - } - } - - &.text-loaded { - background: none; - min-height: inherit; - color: inherit; - - &::before, - &::after { - background: none; - animation: 0; - } - } -} diff --git a/src/app/shell/text-shell/text-shell.component.ts b/src/app/shell/text-shell/text-shell.component.ts deleted file mode 100644 index 4ecf809..0000000 --- a/src/app/shell/text-shell/text-shell.component.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Component, Input, HostBinding } from '@angular/core'; -import { environment } from '../../../environments/environment'; - -@Component({ - selector: 'app-text-shell', - templateUrl: './text-shell.component.html', - styleUrls: ['./text-shell.component.scss'] -}) -export class TextShellComponent { - // To debug shell styles, change configuration in the environment file - private debugMode = (environment.appShellConfig && environment.appShellConfig.debug) ? environment.appShellConfig.debug : false; - - // eslint-disable-next-line @typescript-eslint/naming-convention, no-underscore-dangle, id-blacklist, id-match - _data: ''; - - @HostBinding('class.text-loaded') textLoaded = false; - - @Input() set data(val: any) { - if (!this.debugMode) { - this._data = (val !== undefined && val !== null) ? val : ''; - } - - if (this._data && this._data !== '') { - this.textLoaded = true; - } else { - this.textLoaded = false; - } - } - - constructor() { } -} diff --git a/src/app/store/index.ts b/src/app/store/index.ts deleted file mode 100644 index d03e3d9..0000000 --- a/src/app/store/index.ts +++ /dev/null @@ -1,163 +0,0 @@ -import { createFeatureSelector, createSelector } from '@ngrx/store'; -import { HomeState } from '../features/home/store/home.store'; -import { SettingsState } from '../features/settings/store/settings.store'; -import * as fromRoot from '../reducers/index'; -import * as homeReducers from '../features/home/reducers/home.reducer'; -import * as settingsReducers from '../features/settings/reducers/settings.reducer'; -import * as voiceReducers from '../features/voice/reducers/voice.reducer'; -import * as callsReducers from '../features/calls/reducers/calls.reducer'; -import * as messagesReducers from '../features/messages/reducers/messages.reducer'; -import { VoiceState } from '../features/voice/store/voice.store'; -import { StatusesState } from '../features/statuses/store/statuses.store'; -import { CallsState } from '../features/calls/store/calls.store'; -import { NotesState } from '../features/notes/store/notes.store'; -import { ProtocolsState } from '../features/protocols/store/protocols.store'; -import { RolesState } from '../features/roles/store/roles.store'; -import { MessagesState } from '../features/messages/store/messages.store'; - -export interface State extends fromRoot.State { - settings: SettingsState; - home: HomeState; -} - -export const selectSettingsState = createFeatureSelector('settingsModule'); - -export const selectIsLoggedInState = createSelector( - selectSettingsState, - settingsReducers.getIsLoggedInState -); - -export const selectPushNotificationState = createSelector( - selectSettingsState, - settingsReducers.getPushNotificationState -); - -export const selectBackgroundGeolocationState = createSelector( - selectSettingsState, - settingsReducers.getBackgroundGeolocationState -); - -export const selectThemePreferenceState = createSelector( - selectSettingsState, - settingsReducers.getThemePreferenceState -); - -export const selectShowAllState = createSelector( - selectSettingsState, - settingsReducers.getShowAllState -); - -export const selectKeepAliveState = createSelector( - selectSettingsState, - settingsReducers.getKeepAliveState -); - -export const selectHeadsetType = createSelector( - selectSettingsState, - settingsReducers.getHeadsetTypeState -); - -export const selectSelectedMic = createSelector( - selectSettingsState, - settingsReducers.getSelectedMicState -); - -export const selectIsAppActive = createSelector( - selectSettingsState, - settingsReducers.getIsAppActiveState -); - -export const selectLoggedInUser = createSelector( - selectSettingsState, - settingsReducers.getUserState -); - - -export const selectHomeState = createFeatureSelector('homeModule'); - -export const selectCurrentPositionState = createSelector( - selectHomeState, - homeReducers.getCurrentPositionState -); - -export const selectCurrentUnitStatus = createSelector( - selectHomeState, - homeReducers.getCurrentUnitStatus -); - -export const selectActiveUnit = createSelector( - selectHomeState, - homeReducers.getActiveUnit -); - -export const selectLastMapUpdateDate = createSelector( - selectHomeState, - homeReducers.getLastMapDataUpdate -); - -export const selectPushData = createSelector( - selectHomeState, - homeReducers.getPushData -); - -export const selectConfigData = createSelector( - selectHomeState, - homeReducers.getConfigData -); - -export const selectVoiceState = createFeatureSelector('voiceModule'); - -export const selectAvailableChannelsState = createSelector( - selectVoiceState, - voiceReducers.getAvailableChannels -); - -export const selectActiveStreamState = createSelector( - selectVoiceState, - voiceReducers.getActiveStream -); - -export const selectStatusesState = createFeatureSelector('statusesModule'); - -export const selectCallsState = createFeatureSelector('callsModule'); - -export const selectCallImagesState = createSelector( - selectCallsState, - callsReducers.getCallImages -); - -export const selectNewCallLocationState = createSelector( - selectCallsState, - callsReducers.getNewCallLocation -); - -export const selectNewCallDispatchesState = createSelector( - selectCallsState, - callsReducers.getNewCallDispatches -); - -export const selectEditCallLocationState = createSelector( - selectCallsState, - callsReducers.getEditCallLocation -); - -export const selectEditCallDispatchesState = createSelector( - selectCallsState, - callsReducers.getEditCallDispatches -); - - -export const selectNotesState = createFeatureSelector('notesModule'); - - -export const selectProtocolsState = createFeatureSelector('protocolsModule'); - - -export const selectRolesState = createFeatureSelector('rolesModule'); - -export const selectMessagesState = createFeatureSelector('messagesModule'); - -export const selectRecipientsState = createSelector( - selectMessagesState, - messagesReducers.getRecipients -); \ No newline at end of file diff --git a/src/app/utils/history-helper.service.ts b/src/app/utils/history-helper.service.ts deleted file mode 100644 index a2286a3..0000000 --- a/src/app/utils/history-helper.service.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Router, NavigationEnd } from '@angular/router'; -import { filter } from 'rxjs/operators'; - -@Injectable({ - providedIn: 'root' -}) -export class HistoryHelperService { - previousUrl: string; - - constructor(private router: Router) { - this.router.events - .pipe( - filter(event => event instanceof NavigationEnd) - ) - .subscribe(({urlAfterRedirects}: NavigationEnd) => { - // console.log('previous URL', this.previousUrl); - this.previousUrl = urlAfterRedirects; - // console.log('NEW previous URL', this.previousUrl); - }); - } -} diff --git a/src/app/utils/resolver-helper.ts b/src/app/utils/resolver-helper.ts deleted file mode 100644 index 7fd3ead..0000000 --- a/src/app/utils/resolver-helper.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { DataStore } from '../shell/data-store'; -import { Observable, of } from 'rxjs'; - -export interface IResolvedRouteData { - data: T | DataStore; -} - -export class ResolverHelper { - // More info on function overloads here: https://www.typescriptlang.org/docs/handbook/functions.html#overloads - public static extractData(source: (T | DataStore), constructor: (new(...args: any[]) => T)): Observable { - if (source instanceof DataStore) { - return source.state; - } else if (source instanceof constructor) { - // The right side of instanceof should be an expression evaluating to a constructor function (ie. a class), not a type - // That's why we included an extra parameter which acts as a constructor function for type T - // (see: https://github.com/microsoft/TypeScript/issues/5236) - return of(source); - } - } -} diff --git a/src/app/utils/transfer-state-helper.ts b/src/app/utils/transfer-state-helper.ts deleted file mode 100644 index 5a6a84f..0000000 --- a/src/app/utils/transfer-state-helper.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { isPlatformServer } from '@angular/common'; -import { Inject, Injectable, PLATFORM_ID, makeStateKey, TransferState } from '@angular/core'; - -import { Observable, of } from 'rxjs'; -import { tap } from 'rxjs/operators'; - -export enum ImageShellState { - SSR = 'ssr-loaded', - BROWSER_FROM_SSR = 'browser-loaded-from-ssr', - NOT_FOUND = 'not-found' -} - -@Injectable({ - providedIn: 'root' -}) -export class TransferStateHelper { - - constructor( - @Inject(PLATFORM_ID) private platformId: object, - private state: TransferState, - ) { } - - // Method with generic param - checkDataSourceState(stateKey: string, dataSource: Observable): Observable { - const dataKey = makeStateKey(stateKey); - - if (isPlatformServer(this.platformId)) { - // When loading resource in the server, store the result in the TransferState - // to use when transitioning to the browser from the SSR rendered app - return dataSource.pipe( - tap( - (data: T) => { - this.state.set(dataKey, data); - } - ) - ); - } else { - // Check if we have data in the TransferState - if (this.state.hasKey(dataKey)) { - const stateData = this.state.get(dataKey, null); - - if (stateData && stateData !== null) { - const cachedDataSource = of(stateData); - - // After using it, remove data from state - // this.state.remove(dataKey); - - // Set a flag to track if the dataSource is being cached in the server state or not - Object.assign(cachedDataSource, {ssr_state: true}); - - return cachedDataSource; - } else { - return dataSource; - } - } else { - return dataSource; - } - } - } - - // This method checks if a specific image was previously handled in the server - checkImageShellState(stateKey: string, imageSource: string): ImageShellState { - let imageState: ImageShellState = ImageShellState.NOT_FOUND; - - // Make sure we are not dealing with empty image sources - if (imageSource !== '') { - // We will store a collection of image sources in the state - const dataKey = makeStateKey>(stateKey); - - if (isPlatformServer(this.platformId)) { - // When loading resource in the server, store the result in the TransferState - // to use when transitioning to the browser from the SSR rendered app - - const stateImages = this.state.get(dataKey, []); - stateImages.push(imageSource); - - this.state.set(dataKey, stateImages); - - // Running in the server, in this execution the image is set in the transfer state for the first time - imageState = ImageShellState.SSR; - } else { - // Check if we have data in the TransferState - if (this.state.hasKey(dataKey)) { - const stateData = this.state.get(dataKey, []); - - // Check if the image was previously loaded in the server - if (stateData.includes(imageSource)) { - imageState = ImageShellState.BROWSER_FROM_SSR; - } - } - } - } - - return imageState; - } -} diff --git a/src/app/utils/universal-interceptor.ts b/src/app/utils/universal-interceptor.ts deleted file mode 100644 index a184d80..0000000 --- a/src/app/utils/universal-interceptor.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Injectable, Inject, Optional } from '@angular/core'; -import { HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http'; -import { Request } from 'express'; -import { REQUEST } from '@nguniversal/express-engine/tokens'; - -@Injectable() -export class UniversalInterceptor implements HttpInterceptor { - - constructor(@Optional() @Inject(REQUEST) protected request: Request) {} - - intercept(req: HttpRequest, next: HttpHandler) { - let serverReq: HttpRequest = req; - if (this.request) { - let newUrl = `${this.request.protocol}://${this.request.get('host')}`; - if (!req.url.startsWith('/')) { - newUrl += '/'; - } - newUrl += req.url; - serverReq = req.clone({url: newUrl}); - } - return next.handle(serverReq); - } -} diff --git a/src/app/validators/email.validators.ts b/src/app/validators/email.validators.ts deleted file mode 100644 index ca72866..0000000 --- a/src/app/validators/email.validators.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { AbstractControl } from '@angular/forms'; - -export function emailValidator(control: AbstractControl) { - - if (control && control.value !== null && control.value !== undefined) { - const regex = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/g; - const email = control.value as string; - - if (!email.match(regex) && email.length > 0) { - return { invalidEmail: true }; - } - } - return null; -} diff --git a/src/app/validators/password.validator.ts b/src/app/validators/password.validator.ts deleted file mode 100644 index 6cd7082..0000000 --- a/src/app/validators/password.validator.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { AbstractControl } from '@angular/forms'; - -export function passwordValidator(control: AbstractControl) { - - if (control && control.value !== null && control.value !== undefined) { - const value = control.value as string; - if (value.length < 6) { - return { - invalidPassword: true, - message: 'Password must be at least 6 characters long', - }; - } - } - return null; -} diff --git a/src/app/validators/url.validators.ts b/src/app/validators/url.validators.ts deleted file mode 100644 index 2657db9..0000000 --- a/src/app/validators/url.validators.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { AbstractControl } from '@angular/forms'; - -export function urlValidator(control: AbstractControl) { - if (control && control.value !== null && control.value !== undefined) { - let validUrl = true; - - try { - new URL(control.value); - } catch { - validUrl = false; - } - if (!validUrl) { - return { - invalidUrl: true, - message: 'Value does not appear to be a valid url.', - }; - } - - return true; - } - - return null; -} diff --git a/src/assets/audio/EmergencyCall.mp3 b/src/assets/audio/EmergencyCall.mp3 deleted file mode 100644 index 17d017c..0000000 Binary files a/src/assets/audio/EmergencyCall.mp3 and /dev/null differ diff --git a/src/assets/audio/HighCall.mp3 b/src/assets/audio/HighCall.mp3 deleted file mode 100644 index d3a12a0..0000000 Binary files a/src/assets/audio/HighCall.mp3 and /dev/null differ diff --git a/src/assets/audio/LowCall.mp3 b/src/assets/audio/LowCall.mp3 deleted file mode 100644 index dcd83e3..0000000 Binary files a/src/assets/audio/LowCall.mp3 and /dev/null differ diff --git a/src/assets/audio/MediumCall.mp3 b/src/assets/audio/MediumCall.mp3 deleted file mode 100644 index 82d3ed8..0000000 Binary files a/src/assets/audio/MediumCall.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c1.mp3 b/src/assets/audio/custom/c1.mp3 deleted file mode 100644 index cc4b024..0000000 Binary files a/src/assets/audio/custom/c1.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c10.mp3 b/src/assets/audio/custom/c10.mp3 deleted file mode 100644 index 4772450..0000000 Binary files a/src/assets/audio/custom/c10.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c11.mp3 b/src/assets/audio/custom/c11.mp3 deleted file mode 100644 index 10df5ca..0000000 Binary files a/src/assets/audio/custom/c11.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c12.mp3 b/src/assets/audio/custom/c12.mp3 deleted file mode 100644 index e1d28de..0000000 Binary files a/src/assets/audio/custom/c12.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c13.mp3 b/src/assets/audio/custom/c13.mp3 deleted file mode 100644 index 637fc5f..0000000 Binary files a/src/assets/audio/custom/c13.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c14.mp3 b/src/assets/audio/custom/c14.mp3 deleted file mode 100644 index c650796..0000000 Binary files a/src/assets/audio/custom/c14.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c15.mp3 b/src/assets/audio/custom/c15.mp3 deleted file mode 100644 index b1bf7c2..0000000 Binary files a/src/assets/audio/custom/c15.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c18.mp3 b/src/assets/audio/custom/c18.mp3 deleted file mode 100644 index 7453a38..0000000 Binary files a/src/assets/audio/custom/c18.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c2.mp3 b/src/assets/audio/custom/c2.mp3 deleted file mode 100644 index 75f6d3b..0000000 Binary files a/src/assets/audio/custom/c2.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c20.mp3 b/src/assets/audio/custom/c20.mp3 deleted file mode 100644 index c55a6d1..0000000 Binary files a/src/assets/audio/custom/c20.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c21.mp3 b/src/assets/audio/custom/c21.mp3 deleted file mode 100644 index 3e59e23..0000000 Binary files a/src/assets/audio/custom/c21.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c22.mp3 b/src/assets/audio/custom/c22.mp3 deleted file mode 100644 index 1925219..0000000 Binary files a/src/assets/audio/custom/c22.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c23.mp3 b/src/assets/audio/custom/c23.mp3 deleted file mode 100644 index 37b5341..0000000 Binary files a/src/assets/audio/custom/c23.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c25.mp3 b/src/assets/audio/custom/c25.mp3 deleted file mode 100644 index 5511599..0000000 Binary files a/src/assets/audio/custom/c25.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c3.mp3 b/src/assets/audio/custom/c3.mp3 deleted file mode 100644 index 47ce83c..0000000 Binary files a/src/assets/audio/custom/c3.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c4.mp3 b/src/assets/audio/custom/c4.mp3 deleted file mode 100644 index 97c83d5..0000000 Binary files a/src/assets/audio/custom/c4.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c5.mp3 b/src/assets/audio/custom/c5.mp3 deleted file mode 100644 index a0829af..0000000 Binary files a/src/assets/audio/custom/c5.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c8.mp3 b/src/assets/audio/custom/c8.mp3 deleted file mode 100644 index 3bb9513..0000000 Binary files a/src/assets/audio/custom/c8.mp3 and /dev/null differ diff --git a/src/assets/audio/custom/c9.mp3 b/src/assets/audio/custom/c9.mp3 deleted file mode 100644 index 1fb0330..0000000 Binary files a/src/assets/audio/custom/c9.mp3 and /dev/null differ diff --git a/src/assets/env.js b/src/assets/env.js deleted file mode 100644 index a3ff6a5..0000000 --- a/src/assets/env.js +++ /dev/null @@ -1,15 +0,0 @@ -(function (window) { - window['env'] = window['env'] || {}; - - // Environment variables - window['env']['baseApiUrl'] = 'https://qaapi.resgrid.com'; - window['env']['resgridApiUrl'] = '/api/v4'; - window['env']['channelUrl'] = 'https://qaevents.resgrid.com/'; - window['env']['channelHubName'] = 'eventingHub'; - window['env']['realtimeGeolocationHubName'] = 'geolocationHub'; - window['env']['logLevel'] = '0'; - window['env']['isDemo'] = 'false'; - window['env']['demoToken'] = 'DEMOTOKEN'; - window['env']['loggingKey'] = 'LOGGINGKEY'; - window['env']['appKey'] = 'APPKEY'; - })(this); \ No newline at end of file diff --git a/src/assets/env.prod.js b/src/assets/env.prod.js deleted file mode 100644 index d74c7da..0000000 --- a/src/assets/env.prod.js +++ /dev/null @@ -1,15 +0,0 @@ -(function (window) { - window['env'] = window['env'] || {}; - - // Environment variables - window['env']['baseApiUrl'] = '${BASE_API_URL}'; - window['env']['resgridApiUrl'] = '${API_URL}'; - window['env']['channelUrl'] = '${CHANNEL_URL}'; - window['env']['channelHubName'] = '${CHANNEL_HUB_NAME}'; - window['env']['realtimeGeolocationHubName'] = '${GEOLOCATION_HUB_NAME}'; - window['env']['logLevel'] = '${LOG_LEVEL}'; - window['env']['isDemo'] = '${IS_DEMO}'; - window['env']['demoToken'] = '${DEMO_TOKEN}'; - window['env']['loggingKey'] = '${LOGGING_KEY}'; - window['env']['appKey'] = '${APP_KEY}'; - })(this); \ No newline at end of file diff --git a/src/assets/fonts/CircularStd-Black.ttf b/src/assets/fonts/CircularStd-Black.ttf deleted file mode 100644 index ba37192..0000000 Binary files a/src/assets/fonts/CircularStd-Black.ttf and /dev/null differ diff --git a/src/assets/fonts/CircularStd-Bold.ttf b/src/assets/fonts/CircularStd-Bold.ttf deleted file mode 100644 index 291e4d2..0000000 Binary files a/src/assets/fonts/CircularStd-Bold.ttf and /dev/null differ diff --git a/src/assets/fonts/CircularStd-Book.ttf b/src/assets/fonts/CircularStd-Book.ttf deleted file mode 100644 index c55d6a6..0000000 Binary files a/src/assets/fonts/CircularStd-Book.ttf and /dev/null differ diff --git a/src/assets/fonts/CircularStd-Medium.ttf b/src/assets/fonts/CircularStd-Medium.ttf deleted file mode 100644 index 4b50d1e..0000000 Binary files a/src/assets/fonts/CircularStd-Medium.ttf and /dev/null differ diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json deleted file mode 100644 index 6e992b3..0000000 --- a/src/assets/i18n/en.json +++ /dev/null @@ -1,493 +0,0 @@ -{ - "appName": "Resgrid Unit", - "settingsPage": { - "title": "Settings", - "advancedSettingsTitle": "Advanced Settings", - "advResyncLabel": "ReSync Data", - "advCustomRespondingLabel": "Custom Responding Text", - "advCustomUrlLabel": "Custom Url", - "accountSettingsSection": "Account Settings", - "serverInfoLabel": "Server Information", - "serverInfoText": "The server (api) the app will talk to", - "loginInfoLabel": "Login Information", - "loginInfoText": "Your login information needed to authenticate", - "logoutLabel": "Log out", - "logoutText": "Log out of Resgrid Unit", - "applicationSection": "Application settings", - "setActiveUnitLabel": "Set Active Unit", - "setActiveUnitText": "Select what unit this app is currently operating for", - "darkThemeLabel": "Dark Theme", - "darkThemeText": "Prefer Dark Mode (Theme)", - "keepActiveLabel": "Keep Active", - "keepActiveText": "Prevent sleep when the app is active", - "backgroundGeolocationLabel": "Background Geolocation", - "backgroundGeolocationText": "Geolocation updated is app is in the background", - "pushNotificationLabel": "Push Notifications", - "pushNotificationText": "Enable push notifications on this device", - "headsetLabel": "Headset", - "headsetText": "Bluetooth headset for Push-To-Talk", - "microphoneLabel": "Microphone", - "microphoneText": "Microphone used for Push-To-Talk", - "optionsSection": "Options", - "aboutLabel": "About", - "aboutText": "Shows application information", - "requestPermissionsLabel": "Request Permissions", - "requestPermissionsText": "Requests the require app permissions (audio, microphone, gps)", - "showAllOnMapLabel": "Show All On Map", - "showAllOnMapLabelText": "Always zoom the map out to show all pins on the map" - }, - "personnelPage": { - "title": "Personnel", - "ctaPanel": { - "title": "No Personnel", - "details": "", - "extraDetails": "", - "buttonLabel": "" - }, - "ctaPanel2": { - "title": "Load in Progress", - "details": "We are currently fetching your latest department information and can't show you personnel yet.", - "extraDetails": "This message will disappear once the load is finished or you can pull to refresh to retry", - "buttonLabel": "" - } - }, - "pttPage": { - "title": "PTT", - "ctaPanel": { - "title": "PTT Not Enabled", - "details": "Your department has not enabled PTT", - "extraDetails": "PTT is an addon that you can add to your subscription to allow voice communications via Resgrid", - "buttonLabel": "" - }, - "transmittingOnChan": "Tranmitting on channel", - "startTalking": "Tap to Start Talking", - "stopTalking": "Transmitting... Tap to Stop", - "noChanSelected": "No channel selected, please select one from the top right hand drop down." - }, - "unitsPage": { - "title": "Units", - "ctaPanel": { - "title": "No Units", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - }, - "aboutPage": { - "appVersion": "Application Version", - "apiLocation": "Current API" - }, - "setRolesPage": { - "info": "Set the current personnel current active in the unit roles. This will allow you to see who is responding to a call and who is on scene.", - "saveButton": "Set Active Roles for this Unit" - }, - "logoutModal": { - "confirmLogoutText": "Are you sure you want to log out?" - }, - "loginModal": { - "loginText": "Please enter your Resgrid credentials to log into the app", - "usernameLabel": "Username", - "usernameErrorText": "Username is required", - "passwordLabel": "Password", - "passwordErrorText": "Password is required" - }, - "setServerModal": { - "serverInfoText": "The default server address is https://api.resgrid.com and should be unchanged unless you are using a custom server.", - "serverLabel": "Server", - "serverErrorText": "Server Address is required", - "saveButton": "Set Server and Validate" - }, - "setDestinationModal": { - "destinationLabel": "Destination", - "setButton": "Set Destination" - }, - "selectAudioStreamModal": { - "streamLabel": "Stream", - "setButton": "Play Audio Stream" - }, - "setStatusModal": { - "noteLabel": "Note", - "setButton": "Set Note" - }, - "tabsPage": { - "mapTab": "Map", - "pttTab": "PTT", - "callsTab": "Calls", - "settingsTab": "Settings", - "menuTab": "Menu", - "notesTab": "Notes", - "protocolsTab": "Protocols" - }, - "notesPage": { - "title": "Notes", - "addLabel": "Add", - "ctaPanel": { - "title": "No Notes", - "details": "Click the add button to add a note, or you can add notes from the website.", - "extraDetails": "", - "buttonLabel": "" - } - }, - "newNotePage": { - "title": "New Note", - "addLabel": "Add", - "titleLabel": "Note Title", - "bodyLabel": "Note Body", - "saveButton": "Save Note", - "categoryLabel": "Note Category", - "expiresOnLabel": "Expires On", - "isAdminOnlyLabel": "Is Admin Only", - "doesNoteExpireLabel": "Does Note Expire" - }, - "protocolsPage": { - "title": "Protocols", - "addLabel": "Add", - "ctaPanel": { - "title": "No Protocols", - "details": "There are no Dispatch Protocols, you can add them using the website.", - "extraDetails": "", - "buttonLabel": "" - } - }, - "callNotesPage": { - "title": "Call Notes", - "addLabel": "Add", - "ctaPanel": { - "title": "No Call Notes", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - }, - "customDetailPage": { - "title": "Custom Detail", - "addLabel": "", - "ctaPanel": { - "title": "", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - }, - "customNotePage": { - "title": "Note For Action", - "noteLabel": "Note", - "buttonText": "Next", - "noteRequired": "The note is required", - "noteOptional": "The note is optional", - "ctaPanel": { - "title": "", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - }, - "callImagesPage": { - "title": "Call Images", - "addLabel": "Add", - "ctaPanel": { - "title": "No Call Images", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - }, - "callFilesPage": { - "title": "Call Files", - "addLabel": "Add", - "ctaPanel": { - "title": "No Call Files", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - }, - "callsPage": { - "title": "Calls", - "ctaPanel": { - "title": "No Calls", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - }, - "callDetailPage": { - "title": "Calls", - "notesButton": "Notes", - "imagesButton": "Images", - "filesButton": "Files", - "routeButton": "Route", - "dataTab": "Data", - "contactTab": "Contact", - "protocolsTab": "Protocols", - "dispatchTab": "Dispatch", - "activityTab": "Activity", - "dataTabPriority": "Priority", - "dataTabTimestamp": "Timestamp", - "dataTabType": "Type", - "dataTabAddress": "Address", - "dataTabNotes": "Notes", - "contactTabReferenceId": "Reference Id", - "contactTabExternalId": "External Id", - "contactTabContactName": "Contact Name", - "contactTabContactInfo": "Contact Info", - "callNotes": "Call Notes", - "enterNoteLabel": "Enter Note...", - "callImages": "Call Images", - "imageNoteLabel": "Image Note...", - "uploadPhotoButton": "Upload Photo", - "callFiles": "Call Files" - }, - "newCallPage": { - "title": "New Call", - "nameLabel": "Name", - "priorityLabel": "Priority", - "typeLabel": "Type", - "callIdLabel": "Call Id", - "contactNameLabel": "Contact Name", - "contactNumberLabel": "Contact Number", - "addressLabel": "Address", - "what3wordsLabel": "What3Words", - "natureLabel": "Nature", - "contactInfoHeader": "Contact Info", - "locationHeader": "Location", - "dispatchHeader": "Who To Dispatch", - "dispatchButton": "Create and Dispatch Call", - "recipientsLabel": "Dispatch", - "latitudeLabel": "Latitude (Decimal Notiation)", - "longitudeLabel": "Longitude (Decimal Notiation)", - "googlePlusLabel": "Plus Code (Full Open Location Code)" - }, - "selectRecipientsPage": { - "title": "Select Recipients", - "saveButton": "Save Selected Recipients" - }, - "closeCallPage": { - "title": "Close Call", - "saveButton": "Close Call" - }, - "editCallPage": { - "title": "Edit Call", - "nameLabel": "Name", - "priorityLabel": "Priority", - "typeLabel": "Type", - "callIdLabel": "Call Id", - "contactNameLabel": "Contact Name", - "contactNumberLabel": "Contact Number", - "addressLabel": "Address", - "what3wordsLabel": "What3Words", - "natureLabel": "Nature", - "contactInfoHeader": "Contact Info", - "locationHeader": "Location", - "dispatchHeader": "Who To Dispatch", - "dispatchButton": "Update Call", - "recipientsLabel": "Dispatch", - "redispatchLabel": "Re-Dispatch", - "latitudeLabel": "Latitude (Decimal Notiation)", - "longitudeLabel": "Longitude (Decimal Notiation)", - "googlePlusLabel": "Plus Code (Full Open Location Code)" - }, - "setLocationPage": { - "title": "Set Location", - "setLocationButton": "Set Location" - }, - "newCallPushModal": { - "newCallPrefix": "New Call", - "respondButton": "Respond and Set Active" - }, - "unitDetailPage": { - "title": "Unit Detail", - "ctaPanel": { - "title": "", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - }, - "profilePage": { - "title": "Profile", - "editButton": "Edit Info", - "ctaPanel": { - "title": "", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - }, - "staffingSchedulePage": { - "title": "Staffing Schedule", - "timeframeLablel": "Timeframe", - "stateLablel": "State", - "changeToLablel": "Change To", - "enabledText": "Enabled", - "disabledText": "Disabled" - }, - "staffingSchedulesPage": { - "title": "Staffing Schedules", - "addButton": "Add", - "timeframeLablel": "Timeframe", - "changeToLablel": "Change To", - "ctaPanel": { - "title": "No Staffing Schedules", - "details": "Click the Add button to add an automatated staffing change", - "extraDetails": "", - "buttonLabel": "" - } - }, - "messagesPage": { - "title": "Messages", - "newLabel": "New", - "messageTypeLabel": "Message", - "callbackTypeLabel": "Callback", - "pollTypeLabel": "Poll", - "inboxTab": "Inbox", - "outboxTab": "Outbox", - "ctaPanel": { - "title": "No Messages in the Inbox", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - }, - "chatsPage": { - "title": "Chats", - "newLabel": "New", - "chatsTab": "Chats", - "groupsTab": "Groups", - "ctaPanel": { - "title": "No Chats", - "details": "Tap new to create a new 1 on 1 chat", - "extraDetails": "For group chats tap the groups tab at the bottom", - "buttonLabel": "New Chat" - } - }, - "newChatPage": { - "title": "New Chat", - "newLabel": "New", - "chatsTab": "Chats", - "groupsTab": "Groups", - "ctaPanel": { - "title": "No Personnel", - "details": "Tap new to create a new 1 on 1 chat", - "extraDetails": "For group chats tap the groups tab at the bottom", - "buttonLabel": "New Chat" - } - }, - "chatGroupsPage": { - "title": "Chat Groups", - "newLabel": "New", - "chatsTab": "Chats", - "groupsTab": "Groups" - }, - "outboxPage": { - "title": "Sent Messages", - "newLabel": "New", - "messageTypeLabel": "Message", - "callbackTypeLabel": "Callback", - "pollTypeLabel": "Poll", - "inboxTab": "Inbox", - "outboxTab": "Outbox", - "ctaPanel": { - "title": "You have not sent any messages", - "details": "You can send a message by clicking the new button.", - "extraDetails": "", - "buttonLabel": "" - } - }, - "addStaffingSchedulePage": { - "title": "New Staffing Schedule", - "typeLablel": "Type", - "dateText": "Date", - "weeklyText": "Weekly", - "timeLablel": "Time", - "dateLablel": "Date", - "staffingLablel": "Staffing", - "noteLablel": "Note", - "daysOfTheWeekText": "Days of the Week", - "saveButtonLabel": "Add Staffing Schedule" - }, - "calendarPage": { - "title": "Calendar", - "todayLabel": "Today", - "upcomingLablel": "Upcoming", - "calendarLablel": "Calendar", - "ctaPanel": { - "title": "No Items For Today", - "details": "", - "extraDetails": "", - "buttonLabel": "" - }, - "ctaPanel2": { - "title": "No Upcoming Items", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - }, - "staffing": { - "title": "Staffing" - }, - "availableAtPage": { - "title": "Standing By At" - }, - "respondingToPage": { - "title": "Responding To" - }, - "onsceneAtPage": { - "title": "Onscene At" - }, - "personDetailPage": { - "title": "View Person" - }, - "responding": "Responding", - "notResponding": "Not Responding", - "standingBy": "Standing By", - "onScene": "On Scene", - "available": "Available", - "delayed": "Delayed", - "unavailable": "Unavailable", - "comitted": "Committed", - "onShift": "On Shift", - "settingsNotSetPanel": { - "title": "Settings Not Set", - "details": "It appears that this is your first time to the BigBoard app, or the first time here with this new version. You need to set your settings (login) before you can start adding widgets", - "extraDetails": "Click the button below to login", - "buttonLabel": "Set Your Settings" - }, - "noWidgetsPanel": { - "title": "No Widgets Added", - "details": "Your settings are set but you have not added any widgets to your dashboard yet. Use the plus (+) button to add a widget, and you can then move the widget around by holding the widget header and resize buy hovering over the buttom and right edge of the widget.", - "extraDetails": "Click the button below to add a widget or click the plus (+) button in the header", - "buttonLabel": "Add A Widget" - }, - "account": "Account", - "language": "Language", - "ok": "Ok", - "cancel": "Cancel", - "skip": "Skip", - "continue": "Continue", - "close": "Close", - "login": "Login", - "setActive": "Set Active", - "signup": "Signup", - "email": "Email", - "password": "Password", - "passwordConfirm": "Password confirmation", - "shiftsPage": { - "title": "Shifts", - "todaySegment": "Today", - "shiftsSegment": "Shifts", - "noShiftsPanel": { - "title": "No Shifts Today", - "details": "", - "extraDetails": "", - "buttonLabel": "" - }, - "ctaPanel2": { - "title": "No Shifts Created", - "details": "", - "extraDetails": "", - "buttonLabel": "" - } - } -} diff --git a/src/assets/images/loginbg.png b/src/assets/images/loginbg.png deleted file mode 100644 index 48bc1a1..0000000 Binary files a/src/assets/images/loginbg.png and /dev/null differ diff --git a/src/assets/js/openlocationcode.min.js b/src/assets/js/openlocationcode.min.js deleted file mode 100644 index e4753a4..0000000 --- a/src/assets/js/openlocationcode.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,r){"function"==typeof define&&define.amd?define(function(){return e.returnExportsGlobal=r()}):"object"==typeof module&&module.exports?module.exports=r():e.OpenLocationCode=r()}(this,function(){var e={CODE_PRECISION_NORMAL:10,CODE_PRECISION_EXTRA:11},r="23456789CFGHJMPQRVWX",t=r.length,n=Math.pow(t,4),o=Math.pow(t,3),i=[20,1,.05,.0025,125e-6],a=Math.pow(5,4),u=Math.pow(4,4),f=o*Math.pow(5,5),h=o*Math.pow(4,5);e.getAlphabet=function(){return r};var l=e.isValid=function(e){if(!e||"string"!=typeof e)return!1;if(-1==e.indexOf("+"))return!1;if(e.indexOf("+")!=e.lastIndexOf("+"))return!1;if(1==e.length)return!1;if(e.indexOf("+")>8||e.indexOf("+")%2==1)return!1;if(e.indexOf("0")>-1){if(e.indexOf("+")<8)return!1;if(0==e.indexOf("0"))return!1;var t=e.match(new RegExp("(0+)","g"));if(t.length>1||t[0].length%2==1||t[0].length>6)return!1;if("+"!=e.charAt(e.length-1))return!1}if(e.length-e.indexOf("+")-1==1)return!1;for(var n=0,o=(e=e.replace(new RegExp("\\++"),"").replace(new RegExp("0+"),"")).length;n=0&&e.indexOf("+")<8)},s=e.isFull=function(e){if(!l(e))return!1;if(d(e))return!1;if(r.indexOf(e.charAt(0).toUpperCase())*t>=180)return!1;if(e.length>1&&r.indexOf(e.charAt(1).toUpperCase())*t>=360)return!1;return!0},p=e.encode=function(n,o,i){if(n=Number(n),o=Number(o),i=void 0===i?e.CODE_PRECISION_NORMAL:Math.min(15,Number(i)),isNaN(n)||isNaN(o)||isNaN(i))throw new Error("ValueError: Parameters are not numbers");if(i<2||i<10&&i%2==1)throw new Error("IllegalArgumentException: Invalid Open Location Code length");n=g(n),o=C(o),90==n&&(n-=M(i));var a="",u=Math.floor(Math.round((n+90)*f*1e6)/1e6),l=Math.floor(Math.round((o+180)*h*1e6)/1e6);if(i>10)for(var d=0;d<5;d++){a=r.charAt(4*(u%5)+l%4)+a,u=Math.floor(u/5),l=Math.floor(l/4)}else u=Math.floor(u/Math.pow(5,5)),l=Math.floor(l/Math.pow(4,5));for(d=0;d<5;d++)a=r.charAt(l%t)+a,a=r.charAt(u%t)+a,u=Math.floor(u/t),l=Math.floor(l/t);return a=a.substring(0,8)+"+"+a.substring(8),i>=8?a.substring(0,i+1):a.substring(0,i)+Array(8-i+1).join("0")+"+"},c=e.decode=function(e){if(!s(e))throw new Error("IllegalArgumentException: Passed Open Location Code is not a valid full code: "+e);e=e.replace("+","").replace(/0/g,"").toLocaleUpperCase("en-US");for(var i=-90*o,l=-180*o,d=0,p=0,c=Math.min(e.length,10),g=n,M=0;M10){var x=a,E=u;c=Math.min(e.length,15);for(M=10;M=-90?a.latitudeCenter-=o:r-i>a.latitudeCenter&&a.latitudeCenter+o<=90&&(a.latitudeCenter+=o),t+ia.longitudeCenter&&(a.longitudeCenter+=o),p(a.latitudeCenter,a.longitudeCenter,a.codeLength)},e.shorten=function(e,r,t){if(!s(e))throw new Error("ValueError: Passed code is not valid and full: "+e);if(-1!=e.indexOf("0"))throw new Error("ValueError: Cannot shorten padded codes: "+e);e=e.toUpperCase();var n=c(e);if(n.codeLength<6)throw new Error("ValueError: Code length must be at least 6");if(r=Number(r),t=Number(t),isNaN(r)||isNaN(t))throw new Error("ValueError: Reference position are not numbers");r=g(r),t=C(t);for(var o=Math.max(Math.abs(n.latitudeCenter-r),Math.abs(n.longitudeCenter-t)),a=i.length-2;a>=1;a--)if(o<.3*i[a])return e.substring(2*(a+1));return e};var g=function(e){return Math.min(90,Math.max(-90,e))},M=function(e){return e<=10?Math.pow(t,Math.floor(e/-2+2)):Math.pow(t,-3)/Math.pow(5,e-10)},C=function(e){for(;e<-180;)e+=360;for(;e>=180;)e-=360;return e},w=e.CodeArea=function(r,t,n,o,i){return new e.CodeArea.fn.Init(r,t,n,o,i)};return w.fn=w.prototype={Init:function(e,r,t,n,o){this.latitudeLo=e,this.longitudeLo=r,this.latitudeHi=t,this.longitudeHi=n,this.codeLength=o,this.latitudeCenter=Math.min(e+(t-e)/2,90),this.longitudeCenter=Math.min(r+(n-r)/2,180)}},w.fn.Init.prototype=w.fn,e}); \ No newline at end of file diff --git a/src/assets/libs/animate.min.css b/src/assets/libs/animate.min.css deleted file mode 100644 index 76d2fe1..0000000 --- a/src/assets/libs/animate.min.css +++ /dev/null @@ -1,7 +0,0 @@ -@charset "UTF-8";/*! - * animate.css - https://animate.style/ - * Version - 4.1.1 - * Licensed under the MIT license - http://opensource.org/licenses/MIT - * - * Copyright (c) 2020 Animate.css - */:root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.animate__animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.animate__animated.animate__infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animate__animated.animate__repeat-1{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.animate__animated.animate__repeat-2{-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.animate__animated.animate__repeat-3{-webkit-animation-iteration-count:3;animation-iteration-count:3;-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.animate__animated.animate__delay-1s{-webkit-animation-delay:1s;animation-delay:1s;-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.animate__animated.animate__delay-2s{-webkit-animation-delay:2s;animation-delay:2s;-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}.animate__animated.animate__delay-3s{-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.animate__animated.animate__delay-4s{-webkit-animation-delay:4s;animation-delay:4s;-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.animate__animated.animate__delay-5s{-webkit-animation-delay:5s;animation-delay:5s;-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.animate__animated.animate__faster{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.animate__animated.animate__fast{-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-duration:calc(var(--animate-duration)*0.8);animation-duration:calc(var(--animate-duration)*0.8)}.animate__animated.animate__slow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.animate__animated.animate__slower{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animate__animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animate__animated[class*=Out]{opacity:0}}@-webkit-keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}@keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}.animate__bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.animate__flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.animate__shakeX{-webkit-animation-name:shakeX;animation-name:shakeX}@-webkit-keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}@keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}.animate__shakeY{-webkit-animation-name:shakeY;animation-name:shakeY}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.animate__headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.animate__swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.animate__jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.animate__heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-duration:calc(var(--animate-duration)*1.3);animation-duration:calc(var(--animate-duration)*1.3);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInDown{-webkit-animation-name:backInDown;animation-name:backInDown}@-webkit-keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInLeft{-webkit-animation-name:backInLeft;animation-name:backInLeft}@-webkit-keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInRight{-webkit-animation-name:backInRight;animation-name:backInRight}@-webkit-keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInUp{-webkit-animation-name:backInUp;animation-name:backInUp}@-webkit-keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}@keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}.animate__backOutDown{-webkit-animation-name:backOutDown;animation-name:backOutDown}@-webkit-keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}@keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}.animate__backOutLeft{-webkit-animation-name:backOutLeft;animation-name:backOutLeft}@-webkit-keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}@keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}.animate__backOutRight{-webkit-animation-name:backOutRight;animation-name:backOutRight}@-webkit-keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}@keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}.animate__backOutUp{-webkit-animation-name:backOutUp;animation-name:backOutUp}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.animate__bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}.animate__bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}.animate__bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}.animate__bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}.animate__bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate__fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopLeft{-webkit-animation-name:fadeInTopLeft;animation-name:fadeInTopLeft}@-webkit-keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopRight{-webkit-animation-name:fadeInTopRight;animation-name:fadeInTopRight}@-webkit-keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomLeft{-webkit-animation-name:fadeInBottomLeft;animation-name:fadeInBottomLeft}@-webkit-keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomRight{-webkit-animation-name:fadeInBottomRight;animation-name:fadeInBottomRight}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.animate__fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.animate__fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.animate__fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.animate__fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.animate__fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}@keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}.animate__fadeOutTopLeft{-webkit-animation-name:fadeOutTopLeft;animation-name:fadeOutTopLeft}@-webkit-keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}@keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}.animate__fadeOutTopRight{-webkit-animation-name:fadeOutTopRight;animation-name:fadeOutTopRight}@-webkit-keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}@keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}.animate__fadeOutBottomRight{-webkit-animation-name:fadeOutBottomRight;animation-name:fadeOutBottomRight}@-webkit-keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}@keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}.animate__fadeOutBottomLeft{-webkit-animation-name:fadeOutBottomLeft;animation-name:fadeOutBottomLeft}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animate__animated.animate__flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.animate__flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.animate__flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInRight{-webkit-animation-name:lightSpeedInRight;animation-name:lightSpeedInRight;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInLeft{-webkit-animation-name:lightSpeedInLeft;animation-name:lightSpeedInLeft;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.animate__lightSpeedOutRight{-webkit-animation-name:lightSpeedOutRight;animation-name:lightSpeedOutRight;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}@keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}.animate__lightSpeedOutLeft{-webkit-animation-name:lightSpeedOutLeft;animation-name:lightSpeedOutLeft;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.animate__rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.animate__rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.animate__rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.animate__hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2);-webkit-animation-name:hinge;animation-name:hinge;-webkit-transform-origin:top left;transform-origin:top left}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.animate__rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.animate__zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.animate__zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}.animate__zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft;-webkit-transform-origin:left center;transform-origin:left center}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}.animate__zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight;-webkit-transform-origin:right center;transform-origin:right center}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} \ No newline at end of file diff --git a/src/assets/libs/libwebphone.js b/src/assets/libs/libwebphone.js deleted file mode 100644 index 1f582b8..0000000 --- a/src/assets/libs/libwebphone.js +++ /dev/null @@ -1,20 +0,0 @@ -var libwebphone=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="dist",n(n.s=29)}([function(e,t,n){"use strict";var r=n(17);e.exports={USER_AGENT:"".concat(r.title," ").concat(r.version),SIP:"sip",SIPS:"sips",causes:{CONNECTION_ERROR:"Connection Error",REQUEST_TIMEOUT:"Request Timeout",SIP_FAILURE_CODE:"SIP Failure Code",INTERNAL_ERROR:"Internal Error",BUSY:"Busy",REJECTED:"Rejected",REDIRECTED:"Redirected",UNAVAILABLE:"Unavailable",NOT_FOUND:"Not Found",ADDRESS_INCOMPLETE:"Address Incomplete",INCOMPATIBLE_SDP:"Incompatible SDP",MISSING_SDP:"Missing SDP",AUTHENTICATION_ERROR:"Authentication Error",BYE:"Terminated",WEBRTC_ERROR:"WebRTC Error",CANCELED:"Canceled",NO_ANSWER:"No Answer",EXPIRES:"Expires",NO_ACK:"No ACK",DIALOG_ERROR:"Dialog Error",USER_DENIED_MEDIA_ACCESS:"User Denied Media Access",BAD_MEDIA_DESCRIPTION:"Bad Media Description",RTP_TIMEOUT:"RTP Timeout"},SIP_ERROR_CAUSES:{REDIRECTED:[300,301,302,305,380],BUSY:[486,600],REJECTED:[403,603],NOT_FOUND:[404,604],UNAVAILABLE:[480,410,408,430],ADDRESS_INCOMPLETE:[484,424],INCOMPATIBLE_SDP:[488,606],AUTHENTICATION_ERROR:[401,407]},ACK:"ACK",BYE:"BYE",CANCEL:"CANCEL",INFO:"INFO",INVITE:"INVITE",MESSAGE:"MESSAGE",NOTIFY:"NOTIFY",OPTIONS:"OPTIONS",REGISTER:"REGISTER",REFER:"REFER",UPDATE:"UPDATE",SUBSCRIBE:"SUBSCRIBE",DTMF_TRANSPORT:{INFO:"INFO",RFC2833:"RFC2833"},REASON_PHRASE:{100:"Trying",180:"Ringing",181:"Call Is Being Forwarded",182:"Queued",183:"Session Progress",199:"Early Dialog Terminated",200:"OK",202:"Accepted",204:"No Notification",300:"Multiple Choices",301:"Moved Permanently",302:"Moved Temporarily",305:"Use Proxy",380:"Alternative Service",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",410:"Gone",412:"Conditional Request Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Unsupported URI Scheme",417:"Unknown Resource-Priority",420:"Bad Extension",421:"Extension Required",422:"Session Interval Too Small",423:"Interval Too Brief",424:"Bad Location Information",428:"Use Identity Header",429:"Provide Referrer Identity",430:"Flow Failed",433:"Anonymity Disallowed",436:"Bad Identity-Info",437:"Unsupported Certificate",438:"Invalid Identity Header",439:"First Hop Lacks Outbound Support",440:"Max-Breadth Exceeded",469:"Bad Info Package",470:"Consent Needed",478:"Unresolvable Destination",480:"Temporarily Unavailable",481:"Call/Transaction Does Not Exist",482:"Loop Detected",483:"Too Many Hops",484:"Address Incomplete",485:"Ambiguous",486:"Busy Here",487:"Request Terminated",488:"Not Acceptable Here",489:"Bad Event",491:"Request Pending",493:"Undecipherable",494:"Security Agreement Required",500:"JsSIP Internal Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Server Time-out",505:"Version Not Supported",513:"Message Too Large",580:"Precondition Failure",600:"Busy Everywhere",603:"Decline",604:"Does Not Exist Anywhere",606:"Not Acceptable"},ALLOWED_METHODS:"INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO,NOTIFY",ACCEPTED_BODY_TYPES:"application/sdp, application/dtmf-relay",MAX_FORWARDS:69,SESSION_EXPIRES:90,MIN_SESSION_EXPIRES:60,CONNECTION_RECOVERY_MAX_INTERVAL:30,CONNECTION_RECOVERY_MIN_INTERVAL:2}},function(e,t,n){"use strict";function r(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,a=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,s=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw s}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:32,r="";for(t=0;t>>32-t}function n(e,t){var n=2147483648&e,r=2147483648&t,i=1073741824&e,o=1073741824&t,s=(1073741823&e)+(1073741823&t);return i&o?2147483648^s^n^r:i|o?1073741824&s?3221225472^s^n^r:1073741824^s^n^r:s^n^r}function r(e,r,i,o,s,a,l){return e=n(e,n(n(function(e,t,n){return e&t|~e&n}(r,i,o),s),l)),n(t(e,a),r)}function i(e,r,i,o,s,a,l){return e=n(e,n(n(function(e,t,n){return e&n|t&~n}(r,i,o),s),l)),n(t(e,a),r)}function o(e,r,i,o,s,a,l){return e=n(e,n(n(function(e,t,n){return e^t^n}(r,i,o),s),l)),n(t(e,a),r)}function s(e,r,i,o,s,a,l){return e=n(e,n(n(function(e,t,n){return t^(e|~n)}(r,i,o),s),l)),n(t(e,a),r)}function a(e){var t,n="",r="";for(t=0;t<=3;t++)n+=(r="0".concat((e>>>8*t&255).toString(16))).substr(r.length-2,2);return n}var l,u,c,d,h,f,p,g,m,_;for(l=function(e){for(var t,n=e.length,r=n+8,i=16*((r-r%64)/64+1),o=new Array(i-1),s=0,a=0;a>>29,o}(e=function(e){e=e.replace(/\r\n/g,"\n");for(var t="",n=0;n127&&r<2048?(t+=String.fromCharCode(r>>6|192),t+=String.fromCharCode(63&r|128)):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128),t+=String.fromCharCode(63&r|128))}return t}(e)),p=1732584193,g=4023233417,m=2562383102,_=271733878,u=0;u1&&void 0!==arguments[1]?arguments[1]:{};return e&&Object.assign({},e)||t}},function(e,t,n){"use strict";e.exports=function(){function e(e){return'"'+e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g,escape)+'"'}var t={parse:function(t,r){var i={CRLF:u,DIGIT:c,ALPHA:d,HEXDIG:h,WSP:f,OCTET:p,DQUOTE:g,SP:m,HTAB:_,alphanum:v,reserved:y,unreserved:b,mark:C,escaped:T,LWS:w,SWS:S,HCOLON:A,TEXT_UTF8_TRIM:E,TEXT_UTF8char:I,UTF8_NONASCII:R,UTF8_CONT:k,LHEX:function(){var e;null===(e=c())&&(/^[a-f]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[a-f]")));return e},token:x,token_nodot:M,separators:function(){var e;40===t.charCodeAt(o)?(e="(",o++):(e=null,l('"("'));null===e&&(41===t.charCodeAt(o)?(e=")",o++):(e=null,l('")"')),null===e&&(60===t.charCodeAt(o)?(e="<",o++):(e=null,l('"<"')),null===e&&(62===t.charCodeAt(o)?(e=">",o++):(e=null,l('">"')),null===e&&(64===t.charCodeAt(o)?(e="@",o++):(e=null,l('"@"')),null===e&&(44===t.charCodeAt(o)?(e=",",o++):(e=null,l('","')),null===e&&(59===t.charCodeAt(o)?(e=";",o++):(e=null,l('";"')),null===e&&(58===t.charCodeAt(o)?(e=":",o++):(e=null,l('":"')),null===e&&(92===t.charCodeAt(o)?(e="\\",o++):(e=null,l('"\\\\"')),null===e&&null===(e=g())&&(47===t.charCodeAt(o)?(e="/",o++):(e=null,l('"/"')),null===e&&(91===t.charCodeAt(o)?(e="[",o++):(e=null,l('"["')),null===e&&(93===t.charCodeAt(o)?(e="]",o++):(e=null,l('"]"')),null===e&&(63===t.charCodeAt(o)?(e="?",o++):(e=null,l('"?"')),null===e&&(61===t.charCodeAt(o)?(e="=",o++):(e=null,l('"="')),null===e&&(123===t.charCodeAt(o)?(e="{",o++):(e=null,l('"{"')),null===e&&(125===t.charCodeAt(o)?(e="}",o++):(e=null,l('"}"')),null===e&&null===(e=m())&&(e=_()))))))))))))))));return e},word:D,STAR:O,SLASH:L,EQUAL:P,LPAREN:N,RPAREN:j,RAQUOT:U,LAQUOT:F,COMMA:q,SEMI:H,COLON:z,LDQUOT:G,RDQUOT:V,comment:function e(){var t,n,r,i;if(i=o,null!==(t=N())){for(n=[],null===(r=B())&&null===(r=J())&&(r=e());null!==r;)n.push(r),null===(r=B())&&null===(r=J())&&(r=e());null!==n&&null!==(r=j())?t=[t,n,r]:(t=null,o=i)}else t=null,o=i;return t},ctext:B,quoted_string:W,quoted_string_clean:Y,qdtext:K,quoted_pair:J,SIP_URI_noparams:Q,SIP_URI:$,uri_scheme:Z,uri_scheme_sips:X,uri_scheme_sip:ee,userinfo:te,user:ne,user_unreserved:re,password:ie,hostport:oe,host:se,hostname:ae,domainlabel:le,toplabel:ue,IPv6reference:ce,IPv6address:de,h16:he,ls32:fe,IPv4address:pe,dec_octet:ge,port:me,uri_parameters:_e,uri_parameter:ve,transport_param:ye,user_param:be,method_param:Ce,ttl_param:Te,maddr_param:we,lr_param:Se,other_param:Ae,pname:Ee,pvalue:Ie,paramchar:Re,param_unreserved:ke,headers:xe,header:Me,hname:De,hvalue:Oe,hnv_unreserved:Le,Request_Response:function(){var e;null===(e=ct())&&(e=Pe());return e},Request_Line:Pe,Request_URI:Ne,absoluteURI:je,hier_part:Ue,net_path:Fe,abs_path:qe,opaque_part:He,uric:ze,uric_no_slash:Ge,path_segments:Ve,segment:Be,param:We,pchar:Ye,scheme:Ke,authority:Je,srvr:Qe,reg_name:$e,query:Ze,SIP_Version:Xe,INVITEm:et,ACKm:tt,OPTIONSm:nt,BYEm:rt,CANCELm:it,REGISTERm:ot,SUBSCRIBEm:st,NOTIFYm:at,REFERm:lt,Method:ut,Status_Line:ct,Status_Code:dt,extension_code:ht,Reason_Phrase:ft,Allow_Events:function(){var e,t,n,r,i,s;if(i=o,null!==(e=jt())){for(t=[],s=o,null!==(n=q())&&null!==(r=jt())?n=[n,r]:(n=null,o=s);null!==n;)t.push(n),s=o,null!==(n=q())&&null!==(r=jt())?n=[n,r]:(n=null,o=s);null!==t?e=[e,t]:(e=null,o=i)}else e=null,o=i;return e},Call_ID:function(){var e,n,r,i,s,a;i=o,s=o,null!==(e=D())?(a=o,64===t.charCodeAt(o)?(n="@",o++):(n=null,l('"@"')),null!==n&&null!==(r=D())?n=[n,r]:(n=null,o=a),null!==(n=null!==n?n:"")?e=[e,n]:(e=null,o=s)):(e=null,o=s);null!==e&&(e=function(e){qn=t.substring(o,e)}(i));null===e&&(o=i);return e},Contact:function(){var e,t,n,r,i,s,a;if(i=o,null===(e=O()))if(s=o,null!==(e=pt())){for(t=[],a=o,null!==(n=q())&&null!==(r=pt())?n=[n,r]:(n=null,o=a);null!==n;)t.push(n),a=o,null!==(n=q())&&null!==(r=pt())?n=[n,r]:(n=null,o=a);null!==t?e=[e,t]:(e=null,o=s)}else e=null,o=s;null!==e&&(e=function(e){var t,n;for(n=qn.multi_header.length,t=0;ts&&(s=o,a=[]),a.push(e))}function u(){var e;return"\r\n"===t.substr(o,2)?(e="\r\n",o+=2):(e=null,l('"\\r\\n"')),e}function c(){var e;return/^[0-9]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[0-9]")),e}function d(){var e;return/^[a-zA-Z]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[a-zA-Z]")),e}function h(){var e;return/^[0-9a-fA-F]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[0-9a-fA-F]")),e}function f(){var e;return null===(e=m())&&(e=_()),e}function p(){var e;return/^[\0-\xFF]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[\\0-\\xFF]")),e}function g(){var e;return/^["]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l('["]')),e}function m(){var e;return 32===t.charCodeAt(o)?(e=" ",o++):(e=null,l('" "')),e}function _(){var e;return 9===t.charCodeAt(o)?(e="\t",o++):(e=null,l('"\\t"')),e}function v(){var e;return/^[a-zA-Z0-9]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[a-zA-Z0-9]")),e}function y(){var e;return 59===t.charCodeAt(o)?(e=";",o++):(e=null,l('";"')),null===e&&(47===t.charCodeAt(o)?(e="/",o++):(e=null,l('"/"')),null===e&&(63===t.charCodeAt(o)?(e="?",o++):(e=null,l('"?"')),null===e&&(58===t.charCodeAt(o)?(e=":",o++):(e=null,l('":"')),null===e&&(64===t.charCodeAt(o)?(e="@",o++):(e=null,l('"@"')),null===e&&(38===t.charCodeAt(o)?(e="&",o++):(e=null,l('"&"')),null===e&&(61===t.charCodeAt(o)?(e="=",o++):(e=null,l('"="')),null===e&&(43===t.charCodeAt(o)?(e="+",o++):(e=null,l('"+"')),null===e&&(36===t.charCodeAt(o)?(e="$",o++):(e=null,l('"$"')),null===e&&(44===t.charCodeAt(o)?(e=",",o++):(e=null,l('","'))))))))))),e}function b(){var e;return null===(e=v())&&(e=C()),e}function C(){var e;return 45===t.charCodeAt(o)?(e="-",o++):(e=null,l('"-"')),null===e&&(95===t.charCodeAt(o)?(e="_",o++):(e=null,l('"_"')),null===e&&(46===t.charCodeAt(o)?(e=".",o++):(e=null,l('"."')),null===e&&(33===t.charCodeAt(o)?(e="!",o++):(e=null,l('"!"')),null===e&&(126===t.charCodeAt(o)?(e="~",o++):(e=null,l('"~"')),null===e&&(42===t.charCodeAt(o)?(e="*",o++):(e=null,l('"*"')),null===e&&(39===t.charCodeAt(o)?(e="'",o++):(e=null,l('"\'"')),null===e&&(40===t.charCodeAt(o)?(e="(",o++):(e=null,l('"("')),null===e&&(41===t.charCodeAt(o)?(e=")",o++):(e=null,l('")"')))))))))),e}function T(){var e,n,r,i,s;return i=o,s=o,37===t.charCodeAt(o)?(e="%",o++):(e=null,l('"%"')),null!==e&&null!==(n=h())&&null!==(r=h())?e=[e,n,r]:(e=null,o=s),null!==e&&(e=e.join("")),null===e&&(o=i),e}function w(){var e,t,n,r,i,s;for(r=o,i=o,s=o,e=[],t=f();null!==t;)e.push(t),t=f();if(null!==e&&null!==(t=u())?e=[e,t]:(e=null,o=s),null!==(e=null!==e?e:"")){if(null!==(n=f()))for(t=[];null!==n;)t.push(n),n=f();else t=null;null!==t?e=[e,t]:(e=null,o=i)}else e=null,o=i;return null!==e&&(e=" "),null===e&&(o=r),e}function S(){var e;return e=null!==(e=w())?e:""}function A(){var e,n,r,i,s;for(i=o,s=o,e=[],null===(n=m())&&(n=_());null!==n;)e.push(n),null===(n=m())&&(n=_());return null!==e?(58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=S())?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(e=":"),null===e&&(o=i),e}function E(){var e,n,r,i,s,a,l;if(s=o,a=o,null!==(n=I()))for(e=[];null!==n;)e.push(n),n=I();else e=null;if(null!==e){for(n=[],l=o,r=[],i=w();null!==i;)r.push(i),i=w();for(null!==r&&null!==(i=I())?r=[r,i]:(r=null,o=l);null!==r;){for(n.push(r),l=o,r=[],i=w();null!==i;)r.push(i),i=w();null!==r&&null!==(i=I())?r=[r,i]:(r=null,o=l)}null!==n?e=[e,n]:(e=null,o=a)}else e=null,o=a;return null!==e&&(e=function(e){return t.substring(o,e)}(s)),null===e&&(o=s),e}function I(){var e;return/^[!-~]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[!-~]")),null===e&&(e=R()),e}function R(){var e;return/^[\x80-\uFFFF]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[\\x80-\\uFFFF]")),e}function k(){var e;return/^[\x80-\xBF]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[\\x80-\\xBF]")),e}function x(){var e,n,r;if(r=o,null===(n=v())&&(45===t.charCodeAt(o)?(n="-",o++):(n=null,l('"-"')),null===n&&(46===t.charCodeAt(o)?(n=".",o++):(n=null,l('"."')),null===n&&(33===t.charCodeAt(o)?(n="!",o++):(n=null,l('"!"')),null===n&&(37===t.charCodeAt(o)?(n="%",o++):(n=null,l('"%"')),null===n&&(42===t.charCodeAt(o)?(n="*",o++):(n=null,l('"*"')),null===n&&(95===t.charCodeAt(o)?(n="_",o++):(n=null,l('"_"')),null===n&&(43===t.charCodeAt(o)?(n="+",o++):(n=null,l('"+"')),null===n&&(96===t.charCodeAt(o)?(n="`",o++):(n=null,l('"`"')),null===n&&(39===t.charCodeAt(o)?(n="'",o++):(n=null,l('"\'"')),null===n&&(126===t.charCodeAt(o)?(n="~",o++):(n=null,l('"~"')))))))))))),null!==n)for(e=[];null!==n;)e.push(n),null===(n=v())&&(45===t.charCodeAt(o)?(n="-",o++):(n=null,l('"-"')),null===n&&(46===t.charCodeAt(o)?(n=".",o++):(n=null,l('"."')),null===n&&(33===t.charCodeAt(o)?(n="!",o++):(n=null,l('"!"')),null===n&&(37===t.charCodeAt(o)?(n="%",o++):(n=null,l('"%"')),null===n&&(42===t.charCodeAt(o)?(n="*",o++):(n=null,l('"*"')),null===n&&(95===t.charCodeAt(o)?(n="_",o++):(n=null,l('"_"')),null===n&&(43===t.charCodeAt(o)?(n="+",o++):(n=null,l('"+"')),null===n&&(96===t.charCodeAt(o)?(n="`",o++):(n=null,l('"`"')),null===n&&(39===t.charCodeAt(o)?(n="'",o++):(n=null,l('"\'"')),null===n&&(126===t.charCodeAt(o)?(n="~",o++):(n=null,l('"~"'))))))))))));else e=null;return null!==e&&(e=function(e){return t.substring(o,e)}(r)),null===e&&(o=r),e}function M(){var e,n,r;if(r=o,null===(n=v())&&(45===t.charCodeAt(o)?(n="-",o++):(n=null,l('"-"')),null===n&&(33===t.charCodeAt(o)?(n="!",o++):(n=null,l('"!"')),null===n&&(37===t.charCodeAt(o)?(n="%",o++):(n=null,l('"%"')),null===n&&(42===t.charCodeAt(o)?(n="*",o++):(n=null,l('"*"')),null===n&&(95===t.charCodeAt(o)?(n="_",o++):(n=null,l('"_"')),null===n&&(43===t.charCodeAt(o)?(n="+",o++):(n=null,l('"+"')),null===n&&(96===t.charCodeAt(o)?(n="`",o++):(n=null,l('"`"')),null===n&&(39===t.charCodeAt(o)?(n="'",o++):(n=null,l('"\'"')),null===n&&(126===t.charCodeAt(o)?(n="~",o++):(n=null,l('"~"'))))))))))),null!==n)for(e=[];null!==n;)e.push(n),null===(n=v())&&(45===t.charCodeAt(o)?(n="-",o++):(n=null,l('"-"')),null===n&&(33===t.charCodeAt(o)?(n="!",o++):(n=null,l('"!"')),null===n&&(37===t.charCodeAt(o)?(n="%",o++):(n=null,l('"%"')),null===n&&(42===t.charCodeAt(o)?(n="*",o++):(n=null,l('"*"')),null===n&&(95===t.charCodeAt(o)?(n="_",o++):(n=null,l('"_"')),null===n&&(43===t.charCodeAt(o)?(n="+",o++):(n=null,l('"+"')),null===n&&(96===t.charCodeAt(o)?(n="`",o++):(n=null,l('"`"')),null===n&&(39===t.charCodeAt(o)?(n="'",o++):(n=null,l('"\'"')),null===n&&(126===t.charCodeAt(o)?(n="~",o++):(n=null,l('"~"')))))))))));else e=null;return null!==e&&(e=function(e){return t.substring(o,e)}(r)),null===e&&(o=r),e}function D(){var e,n,r;if(r=o,null===(n=v())&&(45===t.charCodeAt(o)?(n="-",o++):(n=null,l('"-"')),null===n&&(46===t.charCodeAt(o)?(n=".",o++):(n=null,l('"."')),null===n&&(33===t.charCodeAt(o)?(n="!",o++):(n=null,l('"!"')),null===n&&(37===t.charCodeAt(o)?(n="%",o++):(n=null,l('"%"')),null===n&&(42===t.charCodeAt(o)?(n="*",o++):(n=null,l('"*"')),null===n&&(95===t.charCodeAt(o)?(n="_",o++):(n=null,l('"_"')),null===n&&(43===t.charCodeAt(o)?(n="+",o++):(n=null,l('"+"')),null===n&&(96===t.charCodeAt(o)?(n="`",o++):(n=null,l('"`"')),null===n&&(39===t.charCodeAt(o)?(n="'",o++):(n=null,l('"\'"')),null===n&&(126===t.charCodeAt(o)?(n="~",o++):(n=null,l('"~"')),null===n&&(40===t.charCodeAt(o)?(n="(",o++):(n=null,l('"("')),null===n&&(41===t.charCodeAt(o)?(n=")",o++):(n=null,l('")"')),null===n&&(60===t.charCodeAt(o)?(n="<",o++):(n=null,l('"<"')),null===n&&(62===t.charCodeAt(o)?(n=">",o++):(n=null,l('">"')),null===n&&(58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null===n&&(92===t.charCodeAt(o)?(n="\\",o++):(n=null,l('"\\\\"')),null===n&&null===(n=g())&&(47===t.charCodeAt(o)?(n="/",o++):(n=null,l('"/"')),null===n&&(91===t.charCodeAt(o)?(n="[",o++):(n=null,l('"["')),null===n&&(93===t.charCodeAt(o)?(n="]",o++):(n=null,l('"]"')),null===n&&(63===t.charCodeAt(o)?(n="?",o++):(n=null,l('"?"')),null===n&&(123===t.charCodeAt(o)?(n="{",o++):(n=null,l('"{"')),null===n&&(125===t.charCodeAt(o)?(n="}",o++):(n=null,l('"}"')))))))))))))))))))))))),null!==n)for(e=[];null!==n;)e.push(n),null===(n=v())&&(45===t.charCodeAt(o)?(n="-",o++):(n=null,l('"-"')),null===n&&(46===t.charCodeAt(o)?(n=".",o++):(n=null,l('"."')),null===n&&(33===t.charCodeAt(o)?(n="!",o++):(n=null,l('"!"')),null===n&&(37===t.charCodeAt(o)?(n="%",o++):(n=null,l('"%"')),null===n&&(42===t.charCodeAt(o)?(n="*",o++):(n=null,l('"*"')),null===n&&(95===t.charCodeAt(o)?(n="_",o++):(n=null,l('"_"')),null===n&&(43===t.charCodeAt(o)?(n="+",o++):(n=null,l('"+"')),null===n&&(96===t.charCodeAt(o)?(n="`",o++):(n=null,l('"`"')),null===n&&(39===t.charCodeAt(o)?(n="'",o++):(n=null,l('"\'"')),null===n&&(126===t.charCodeAt(o)?(n="~",o++):(n=null,l('"~"')),null===n&&(40===t.charCodeAt(o)?(n="(",o++):(n=null,l('"("')),null===n&&(41===t.charCodeAt(o)?(n=")",o++):(n=null,l('")"')),null===n&&(60===t.charCodeAt(o)?(n="<",o++):(n=null,l('"<"')),null===n&&(62===t.charCodeAt(o)?(n=">",o++):(n=null,l('">"')),null===n&&(58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null===n&&(92===t.charCodeAt(o)?(n="\\",o++):(n=null,l('"\\\\"')),null===n&&null===(n=g())&&(47===t.charCodeAt(o)?(n="/",o++):(n=null,l('"/"')),null===n&&(91===t.charCodeAt(o)?(n="[",o++):(n=null,l('"["')),null===n&&(93===t.charCodeAt(o)?(n="]",o++):(n=null,l('"]"')),null===n&&(63===t.charCodeAt(o)?(n="?",o++):(n=null,l('"?"')),null===n&&(123===t.charCodeAt(o)?(n="{",o++):(n=null,l('"{"')),null===n&&(125===t.charCodeAt(o)?(n="}",o++):(n=null,l('"}"'))))))))))))))))))))))));else e=null;return null!==e&&(e=function(e){return t.substring(o,e)}(r)),null===e&&(o=r),e}function O(){var e,n,r,i,s;return i=o,s=o,null!==(e=S())?(42===t.charCodeAt(o)?(n="*",o++):(n=null,l('"*"')),null!==n&&null!==(r=S())?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(e="*"),null===e&&(o=i),e}function L(){var e,n,r,i,s;return i=o,s=o,null!==(e=S())?(47===t.charCodeAt(o)?(n="/",o++):(n=null,l('"/"')),null!==n&&null!==(r=S())?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(e="/"),null===e&&(o=i),e}function P(){var e,n,r,i,s;return i=o,s=o,null!==(e=S())?(61===t.charCodeAt(o)?(n="=",o++):(n=null,l('"="')),null!==n&&null!==(r=S())?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(e="="),null===e&&(o=i),e}function N(){var e,n,r,i,s;return i=o,s=o,null!==(e=S())?(40===t.charCodeAt(o)?(n="(",o++):(n=null,l('"("')),null!==n&&null!==(r=S())?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(e="("),null===e&&(o=i),e}function j(){var e,n,r,i,s;return i=o,s=o,null!==(e=S())?(41===t.charCodeAt(o)?(n=")",o++):(n=null,l('")"')),null!==n&&null!==(r=S())?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(e=")"),null===e&&(o=i),e}function U(){var e,n,r,i;return r=o,i=o,62===t.charCodeAt(o)?(e=">",o++):(e=null,l('">"')),null!==e&&null!==(n=S())?e=[e,n]:(e=null,o=i),null!==e&&(e=">"),null===e&&(o=r),e}function F(){var e,n,r,i;return r=o,i=o,null!==(e=S())?(60===t.charCodeAt(o)?(n="<",o++):(n=null,l('"<"')),null!==n?e=[e,n]:(e=null,o=i)):(e=null,o=i),null!==e&&(e="<"),null===e&&(o=r),e}function q(){var e,n,r,i,s;return i=o,s=o,null!==(e=S())?(44===t.charCodeAt(o)?(n=",",o++):(n=null,l('","')),null!==n&&null!==(r=S())?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(e=","),null===e&&(o=i),e}function H(){var e,n,r,i,s;return i=o,s=o,null!==(e=S())?(59===t.charCodeAt(o)?(n=";",o++):(n=null,l('";"')),null!==n&&null!==(r=S())?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(e=";"),null===e&&(o=i),e}function z(){var e,n,r,i,s;return i=o,s=o,null!==(e=S())?(58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=S())?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(e=":"),null===e&&(o=i),e}function G(){var e,t,n,r;return n=o,r=o,null!==(e=S())&&null!==(t=g())?e=[e,t]:(e=null,o=r),null!==e&&(e='"'),null===e&&(o=n),e}function V(){var e,t,n,r;return n=o,r=o,null!==(e=g())&&null!==(t=S())?e=[e,t]:(e=null,o=r),null!==e&&(e='"'),null===e&&(o=n),e}function B(){var e;return/^[!-']/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[!-']")),null===e&&(/^[*-[]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[*-[]")),null===e&&(/^[\]-~]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[\\]-~]")),null===e&&null===(e=R())&&(e=w()))),e}function W(){var e,n,r,i,s,a;if(s=o,a=o,null!==(e=S()))if(null!==(n=g())){for(r=[],null===(i=K())&&(i=J());null!==i;)r.push(i),null===(i=K())&&(i=J());null!==r&&null!==(i=g())?e=[e,n,r,i]:(e=null,o=a)}else e=null,o=a;else e=null,o=a;return null!==e&&(e=function(e){return t.substring(o,e)}(s)),null===e&&(o=s),e}function Y(){var e,n,r,i,s,a;if(s=o,a=o,null!==(e=S()))if(null!==(n=g())){for(r=[],null===(i=K())&&(i=J());null!==i;)r.push(i),null===(i=K())&&(i=J());null!==r&&null!==(i=g())?e=[e,n,r,i]:(e=null,o=a)}else e=null,o=a;else e=null,o=a;return null!==e&&(e=function(e){var n=t.substring(o,e).trim();return n.substring(1,n.length-1).replace(/\\([\x00-\x09\x0b-\x0c\x0e-\x7f])/g,"$1")}(s)),null===e&&(o=s),e}function K(){var e;return null===(e=w())&&(33===t.charCodeAt(o)?(e="!",o++):(e=null,l('"!"')),null===e&&(/^[#-[]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[#-[]")),null===e&&(/^[\]-~]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[\\]-~]")),null===e&&(e=R())))),e}function J(){var e,n,r;return r=o,92===t.charCodeAt(o)?(e="\\",o++):(e=null,l('"\\\\"')),null!==e?(/^[\0-\t]/.test(t.charAt(o))?(n=t.charAt(o),o++):(n=null,l("[\\0-\\t]")),null===n&&(/^[\x0B-\f]/.test(t.charAt(o))?(n=t.charAt(o),o++):(n=null,l("[\\x0B-\\f]")),null===n&&(/^[\x0E-]/.test(t.charAt(o))?(n=t.charAt(o),o++):(n=null,l("[\\x0E-]")))),null!==n?e=[e,n]:(e=null,o=r)):(e=null,o=r),e}function Q(){var e,n,r,i,s,a;return s=o,a=o,null!==(e=Z())?(58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=null!==(r=te())?r:"")&&null!==(i=oe())?e=[e,n,r,i]:(e=null,o=a)):(e=null,o=a),null!==e&&(e=function(e){try{qn.uri=new Un(qn.scheme,qn.user,qn.host,qn.port),delete qn.scheme,delete qn.user,delete qn.host,delete qn.host_type,delete qn.port}catch(e){qn=-1}}()),null===e&&(o=s),e}function $(){var e,n,i,s,a,u,c,d;return c=o,d=o,null!==(e=Z())?(58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(i=null!==(i=te())?i:"")&&null!==(s=oe())&&null!==(a=_e())&&null!==(u=null!==(u=xe())?u:"")?e=[e,n,i,s,a,u]:(e=null,o=d)):(e=null,o=d),null!==e&&(e=function(e){try{qn.uri=new Un(qn.scheme,qn.user,qn.host,qn.port,qn.uri_params,qn.uri_headers),delete qn.scheme,delete qn.user,delete qn.host,delete qn.host_type,delete qn.port,delete qn.uri_params,"SIP_URI"===r&&(qn=qn.uri)}catch(e){qn=-1}}()),null===e&&(o=c),e}function Z(){var e;return null===(e=X())&&(e=ee()),e}function X(){var e,n,r;return n=o,"sips"===t.substr(o,4).toLowerCase()?(e=t.substr(o,4),o+=4):(e=null,l('"sips"')),null!==e&&(r=e,e=void(qn.scheme=r.toLowerCase())),null===e&&(o=n),e}function ee(){var e,n,r;return n=o,"sip"===t.substr(o,3).toLowerCase()?(e=t.substr(o,3),o+=3):(e=null,l('"sip"')),null!==e&&(r=e,e=void(qn.scheme=r.toLowerCase())),null===e&&(o=n),e}function te(){var e,n,r,i,s,a;return i=o,s=o,null!==(e=ne())?(a=o,58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=ie())?n=[n,r]:(n=null,o=a),null!==(n=null!==n?n:"")?(64===t.charCodeAt(o)?(r="@",o++):(r=null,l('"@"')),null!==r?e=[e,n,r]:(e=null,o=s)):(e=null,o=s)):(e=null,o=s),null!==e&&(e=function(e){qn.user=decodeURIComponent(t.substring(o-1,e))}(i)),null===e&&(o=i),e}function ne(){var e,t;if(null===(t=b())&&null===(t=T())&&(t=re()),null!==t)for(e=[];null!==t;)e.push(t),null===(t=b())&&null===(t=T())&&(t=re());else e=null;return e}function re(){var e;return 38===t.charCodeAt(o)?(e="&",o++):(e=null,l('"&"')),null===e&&(61===t.charCodeAt(o)?(e="=",o++):(e=null,l('"="')),null===e&&(43===t.charCodeAt(o)?(e="+",o++):(e=null,l('"+"')),null===e&&(36===t.charCodeAt(o)?(e="$",o++):(e=null,l('"$"')),null===e&&(44===t.charCodeAt(o)?(e=",",o++):(e=null,l('","')),null===e&&(59===t.charCodeAt(o)?(e=";",o++):(e=null,l('";"')),null===e&&(63===t.charCodeAt(o)?(e="?",o++):(e=null,l('"?"')),null===e&&(47===t.charCodeAt(o)?(e="/",o++):(e=null,l('"/"'))))))))),e}function ie(){var e,n,r;for(r=o,e=[],null===(n=b())&&null===(n=T())&&(38===t.charCodeAt(o)?(n="&",o++):(n=null,l('"&"')),null===n&&(61===t.charCodeAt(o)?(n="=",o++):(n=null,l('"="')),null===n&&(43===t.charCodeAt(o)?(n="+",o++):(n=null,l('"+"')),null===n&&(36===t.charCodeAt(o)?(n="$",o++):(n=null,l('"$"')),null===n&&(44===t.charCodeAt(o)?(n=",",o++):(n=null,l('","')))))));null!==n;)e.push(n),null===(n=b())&&null===(n=T())&&(38===t.charCodeAt(o)?(n="&",o++):(n=null,l('"&"')),null===n&&(61===t.charCodeAt(o)?(n="=",o++):(n=null,l('"="')),null===n&&(43===t.charCodeAt(o)?(n="+",o++):(n=null,l('"+"')),null===n&&(36===t.charCodeAt(o)?(n="$",o++):(n=null,l('"$"')),null===n&&(44===t.charCodeAt(o)?(n=",",o++):(n=null,l('","')))))));return null!==e&&(e=function(e){qn.password=t.substring(o,e)}(r)),null===e&&(o=r),e}function oe(){var e,n,r,i,s;return i=o,null!==(e=se())?(s=o,58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=me())?n=[n,r]:(n=null,o=s),null!==(n=null!==n?n:"")?e=[e,n]:(e=null,o=i)):(e=null,o=i),e}function se(){var e,n;return n=o,null===(e=ae())&&null===(e=pe())&&(e=ce()),null!==e&&(e=function(e){return qn.host=t.substring(o,e).toLowerCase(),qn.host}(n)),null===e&&(o=n),e}function ae(){var e,n,r,i,s,a;for(i=o,s=o,e=[],a=o,null!==(n=le())?(46===t.charCodeAt(o)?(r=".",o++):(r=null,l('"."')),null!==r?n=[n,r]:(n=null,o=a)):(n=null,o=a);null!==n;)e.push(n),a=o,null!==(n=le())?(46===t.charCodeAt(o)?(r=".",o++):(r=null,l('"."')),null!==r?n=[n,r]:(n=null,o=a)):(n=null,o=a);return null!==e&&null!==(n=ue())?(46===t.charCodeAt(o)?(r=".",o++):(r=null,l('"."')),null!==(r=null!==r?r:"")?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(e=function(e){return qn.host_type="domain",t.substring(o,e)}(i)),null===e&&(o=i),e}function le(){var e,n,r,i;if(i=o,null!==(e=v())){for(n=[],null===(r=v())&&(45===t.charCodeAt(o)?(r="-",o++):(r=null,l('"-"')),null===r&&(95===t.charCodeAt(o)?(r="_",o++):(r=null,l('"_"'))));null!==r;)n.push(r),null===(r=v())&&(45===t.charCodeAt(o)?(r="-",o++):(r=null,l('"-"')),null===r&&(95===t.charCodeAt(o)?(r="_",o++):(r=null,l('"_"'))));null!==n?e=[e,n]:(e=null,o=i)}else e=null,o=i;return e}function ue(){var e,n,r,i;if(i=o,null!==(e=d())){for(n=[],null===(r=v())&&(45===t.charCodeAt(o)?(r="-",o++):(r=null,l('"-"')),null===r&&(95===t.charCodeAt(o)?(r="_",o++):(r=null,l('"_"'))));null!==r;)n.push(r),null===(r=v())&&(45===t.charCodeAt(o)?(r="-",o++):(r=null,l('"-"')),null===r&&(95===t.charCodeAt(o)?(r="_",o++):(r=null,l('"_"'))));null!==n?e=[e,n]:(e=null,o=i)}else e=null,o=i;return e}function ce(){var e,n,r,i,s;return i=o,s=o,91===t.charCodeAt(o)?(e="[",o++):(e=null,l('"["')),null!==e&&null!==(n=de())?(93===t.charCodeAt(o)?(r="]",o++):(r=null,l('"]"')),null!==r?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(e=function(e){return qn.host_type="IPv6",t.substring(o,e)}(i)),null===e&&(o=i),e}function de(){var e,n,r,i,s,a,u,c,d,h,f,p,g,m,_,v;return m=o,_=o,null!==(e=he())?(58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=he())?(58===t.charCodeAt(o)?(i=":",o++):(i=null,l('":"')),null!==i&&null!==(s=he())?(58===t.charCodeAt(o)?(a=":",o++):(a=null,l('":"')),null!==a&&null!==(u=he())?(58===t.charCodeAt(o)?(c=":",o++):(c=null,l('":"')),null!==c&&null!==(d=he())?(58===t.charCodeAt(o)?(h=":",o++):(h=null,l('":"')),null!==h&&null!==(f=he())?(58===t.charCodeAt(o)?(p=":",o++):(p=null,l('":"')),null!==p&&null!==(g=fe())?e=[e,n,r,i,s,a,u,c,d,h,f,p,g]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null===e&&(_=o,"::"===t.substr(o,2)?(e="::",o+=2):(e=null,l('"::"')),null!==e&&null!==(n=he())?(58===t.charCodeAt(o)?(r=":",o++):(r=null,l('":"')),null!==r&&null!==(i=he())?(58===t.charCodeAt(o)?(s=":",o++):(s=null,l('":"')),null!==s&&null!==(a=he())?(58===t.charCodeAt(o)?(u=":",o++):(u=null,l('":"')),null!==u&&null!==(c=he())?(58===t.charCodeAt(o)?(d=":",o++):(d=null,l('":"')),null!==d&&null!==(h=he())?(58===t.charCodeAt(o)?(f=":",o++):(f=null,l('":"')),null!==f&&null!==(p=fe())?e=[e,n,r,i,s,a,u,c,d,h,f,p]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null===e&&(_=o,"::"===t.substr(o,2)?(e="::",o+=2):(e=null,l('"::"')),null!==e&&null!==(n=he())?(58===t.charCodeAt(o)?(r=":",o++):(r=null,l('":"')),null!==r&&null!==(i=he())?(58===t.charCodeAt(o)?(s=":",o++):(s=null,l('":"')),null!==s&&null!==(a=he())?(58===t.charCodeAt(o)?(u=":",o++):(u=null,l('":"')),null!==u&&null!==(c=he())?(58===t.charCodeAt(o)?(d=":",o++):(d=null,l('":"')),null!==d&&null!==(h=fe())?e=[e,n,r,i,s,a,u,c,d,h]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null===e&&(_=o,"::"===t.substr(o,2)?(e="::",o+=2):(e=null,l('"::"')),null!==e&&null!==(n=he())?(58===t.charCodeAt(o)?(r=":",o++):(r=null,l('":"')),null!==r&&null!==(i=he())?(58===t.charCodeAt(o)?(s=":",o++):(s=null,l('":"')),null!==s&&null!==(a=he())?(58===t.charCodeAt(o)?(u=":",o++):(u=null,l('":"')),null!==u&&null!==(c=fe())?e=[e,n,r,i,s,a,u,c]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null===e&&(_=o,"::"===t.substr(o,2)?(e="::",o+=2):(e=null,l('"::"')),null!==e&&null!==(n=he())?(58===t.charCodeAt(o)?(r=":",o++):(r=null,l('":"')),null!==r&&null!==(i=he())?(58===t.charCodeAt(o)?(s=":",o++):(s=null,l('":"')),null!==s&&null!==(a=fe())?e=[e,n,r,i,s,a]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null===e&&(_=o,"::"===t.substr(o,2)?(e="::",o+=2):(e=null,l('"::"')),null!==e&&null!==(n=he())?(58===t.charCodeAt(o)?(r=":",o++):(r=null,l('":"')),null!==r&&null!==(i=fe())?e=[e,n,r,i]:(e=null,o=_)):(e=null,o=_),null===e&&(_=o,"::"===t.substr(o,2)?(e="::",o+=2):(e=null,l('"::"')),null!==e&&null!==(n=fe())?e=[e,n]:(e=null,o=_),null===e&&(_=o,"::"===t.substr(o,2)?(e="::",o+=2):(e=null,l('"::"')),null!==e&&null!==(n=he())?e=[e,n]:(e=null,o=_),null===e&&(_=o,null!==(e=he())?("::"===t.substr(o,2)?(n="::",o+=2):(n=null,l('"::"')),null!==n&&null!==(r=he())?(58===t.charCodeAt(o)?(i=":",o++):(i=null,l('":"')),null!==i&&null!==(s=he())?(58===t.charCodeAt(o)?(a=":",o++):(a=null,l('":"')),null!==a&&null!==(u=he())?(58===t.charCodeAt(o)?(c=":",o++):(c=null,l('":"')),null!==c&&null!==(d=he())?(58===t.charCodeAt(o)?(h=":",o++):(h=null,l('":"')),null!==h&&null!==(f=fe())?e=[e,n,r,i,s,a,u,c,d,h,f]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null===e&&(_=o,null!==(e=he())?(v=o,58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=he())?n=[n,r]:(n=null,o=v),null!==(n=null!==n?n:"")?("::"===t.substr(o,2)?(r="::",o+=2):(r=null,l('"::"')),null!==r&&null!==(i=he())?(58===t.charCodeAt(o)?(s=":",o++):(s=null,l('":"')),null!==s&&null!==(a=he())?(58===t.charCodeAt(o)?(u=":",o++):(u=null,l('":"')),null!==u&&null!==(c=he())?(58===t.charCodeAt(o)?(d=":",o++):(d=null,l('":"')),null!==d&&null!==(h=fe())?e=[e,n,r,i,s,a,u,c,d,h]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null===e&&(_=o,null!==(e=he())?(v=o,58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=he())?n=[n,r]:(n=null,o=v),null!==(n=null!==n?n:"")?(v=o,58===t.charCodeAt(o)?(r=":",o++):(r=null,l('":"')),null!==r&&null!==(i=he())?r=[r,i]:(r=null,o=v),null!==(r=null!==r?r:"")?("::"===t.substr(o,2)?(i="::",o+=2):(i=null,l('"::"')),null!==i&&null!==(s=he())?(58===t.charCodeAt(o)?(a=":",o++):(a=null,l('":"')),null!==a&&null!==(u=he())?(58===t.charCodeAt(o)?(c=":",o++):(c=null,l('":"')),null!==c&&null!==(d=fe())?e=[e,n,r,i,s,a,u,c,d]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null===e&&(_=o,null!==(e=he())?(v=o,58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=he())?n=[n,r]:(n=null,o=v),null!==(n=null!==n?n:"")?(v=o,58===t.charCodeAt(o)?(r=":",o++):(r=null,l('":"')),null!==r&&null!==(i=he())?r=[r,i]:(r=null,o=v),null!==(r=null!==r?r:"")?(v=o,58===t.charCodeAt(o)?(i=":",o++):(i=null,l('":"')),null!==i&&null!==(s=he())?i=[i,s]:(i=null,o=v),null!==(i=null!==i?i:"")?("::"===t.substr(o,2)?(s="::",o+=2):(s=null,l('"::"')),null!==s&&null!==(a=he())?(58===t.charCodeAt(o)?(u=":",o++):(u=null,l('":"')),null!==u&&null!==(c=fe())?e=[e,n,r,i,s,a,u,c]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null===e&&(_=o,null!==(e=he())?(v=o,58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=he())?n=[n,r]:(n=null,o=v),null!==(n=null!==n?n:"")?(v=o,58===t.charCodeAt(o)?(r=":",o++):(r=null,l('":"')),null!==r&&null!==(i=he())?r=[r,i]:(r=null,o=v),null!==(r=null!==r?r:"")?(v=o,58===t.charCodeAt(o)?(i=":",o++):(i=null,l('":"')),null!==i&&null!==(s=he())?i=[i,s]:(i=null,o=v),null!==(i=null!==i?i:"")?(v=o,58===t.charCodeAt(o)?(s=":",o++):(s=null,l('":"')),null!==s&&null!==(a=he())?s=[s,a]:(s=null,o=v),null!==(s=null!==s?s:"")?("::"===t.substr(o,2)?(a="::",o+=2):(a=null,l('"::"')),null!==a&&null!==(u=fe())?e=[e,n,r,i,s,a,u]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null===e&&(_=o,null!==(e=he())?(v=o,58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=he())?n=[n,r]:(n=null,o=v),null!==(n=null!==n?n:"")?(v=o,58===t.charCodeAt(o)?(r=":",o++):(r=null,l('":"')),null!==r&&null!==(i=he())?r=[r,i]:(r=null,o=v),null!==(r=null!==r?r:"")?(v=o,58===t.charCodeAt(o)?(i=":",o++):(i=null,l('":"')),null!==i&&null!==(s=he())?i=[i,s]:(i=null,o=v),null!==(i=null!==i?i:"")?(v=o,58===t.charCodeAt(o)?(s=":",o++):(s=null,l('":"')),null!==s&&null!==(a=he())?s=[s,a]:(s=null,o=v),null!==(s=null!==s?s:"")?(v=o,58===t.charCodeAt(o)?(a=":",o++):(a=null,l('":"')),null!==a&&null!==(u=he())?a=[a,u]:(a=null,o=v),null!==(a=null!==a?a:"")?("::"===t.substr(o,2)?(u="::",o+=2):(u=null,l('"::"')),null!==u&&null!==(c=he())?e=[e,n,r,i,s,a,u,c]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null===e&&(_=o,null!==(e=he())?(v=o,58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=he())?n=[n,r]:(n=null,o=v),null!==(n=null!==n?n:"")?(v=o,58===t.charCodeAt(o)?(r=":",o++):(r=null,l('":"')),null!==r&&null!==(i=he())?r=[r,i]:(r=null,o=v),null!==(r=null!==r?r:"")?(v=o,58===t.charCodeAt(o)?(i=":",o++):(i=null,l('":"')),null!==i&&null!==(s=he())?i=[i,s]:(i=null,o=v),null!==(i=null!==i?i:"")?(v=o,58===t.charCodeAt(o)?(s=":",o++):(s=null,l('":"')),null!==s&&null!==(a=he())?s=[s,a]:(s=null,o=v),null!==(s=null!==s?s:"")?(v=o,58===t.charCodeAt(o)?(a=":",o++):(a=null,l('":"')),null!==a&&null!==(u=he())?a=[a,u]:(a=null,o=v),null!==(a=null!==a?a:"")?(v=o,58===t.charCodeAt(o)?(u=":",o++):(u=null,l('":"')),null!==u&&null!==(c=he())?u=[u,c]:(u=null,o=v),null!==(u=null!==u?u:"")?("::"===t.substr(o,2)?(c="::",o+=2):(c=null,l('"::"')),null!==c?e=[e,n,r,i,s,a,u,c]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_))))))))))))))),null!==e&&(e=function(e){return qn.host_type="IPv6",t.substring(o,e)}(m)),null===e&&(o=m),e}function he(){var e,t,n,r,i;return i=o,null!==(e=h())&&null!==(t=null!==(t=h())?t:"")&&null!==(n=null!==(n=h())?n:"")&&null!==(r=null!==(r=h())?r:"")?e=[e,t,n,r]:(e=null,o=i),e}function fe(){var e,n,r,i;return i=o,null!==(e=he())?(58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n&&null!==(r=he())?e=[e,n,r]:(e=null,o=i)):(e=null,o=i),null===e&&(e=pe()),e}function pe(){var e,n,r,i,s,a,u,c,d;return c=o,d=o,null!==(e=ge())?(46===t.charCodeAt(o)?(n=".",o++):(n=null,l('"."')),null!==n&&null!==(r=ge())?(46===t.charCodeAt(o)?(i=".",o++):(i=null,l('"."')),null!==i&&null!==(s=ge())?(46===t.charCodeAt(o)?(a=".",o++):(a=null,l('"."')),null!==a&&null!==(u=ge())?e=[e,n,r,i,s,a,u]:(e=null,o=d)):(e=null,o=d)):(e=null,o=d)):(e=null,o=d),null!==e&&(e=function(e){return qn.host_type="IPv4",t.substring(o,e)}(c)),null===e&&(o=c),e}function ge(){var e,n,r,i;return i=o,"25"===t.substr(o,2)?(e="25",o+=2):(e=null,l('"25"')),null!==e?(/^[0-5]/.test(t.charAt(o))?(n=t.charAt(o),o++):(n=null,l("[0-5]")),null!==n?e=[e,n]:(e=null,o=i)):(e=null,o=i),null===e&&(i=o,50===t.charCodeAt(o)?(e="2",o++):(e=null,l('"2"')),null!==e?(/^[0-4]/.test(t.charAt(o))?(n=t.charAt(o),o++):(n=null,l("[0-4]")),null!==n&&null!==(r=c())?e=[e,n,r]:(e=null,o=i)):(e=null,o=i),null===e&&(i=o,49===t.charCodeAt(o)?(e="1",o++):(e=null,l('"1"')),null!==e&&null!==(n=c())&&null!==(r=c())?e=[e,n,r]:(e=null,o=i),null===e&&(i=o,/^[1-9]/.test(t.charAt(o))?(e=t.charAt(o),o++):(e=null,l("[1-9]")),null!==e&&null!==(n=c())?e=[e,n]:(e=null,o=i),null===e&&(e=c())))),e}function me(){var e,t,n,r,i,s,a,l;return s=o,a=o,null!==(e=null!==(e=c())?e:"")&&null!==(t=null!==(t=c())?t:"")&&null!==(n=null!==(n=c())?n:"")&&null!==(r=null!==(r=c())?r:"")&&null!==(i=null!==(i=c())?i:"")?e=[e,t,n,r,i]:(e=null,o=a),null!==e&&(l=e,l=parseInt(l.join("")),qn.port=l,e=l),null===e&&(o=s),e}function _e(){var e,n,r,i;for(e=[],i=o,59===t.charCodeAt(o)?(n=";",o++):(n=null,l('";"')),null!==n&&null!==(r=ve())?n=[n,r]:(n=null,o=i);null!==n;)e.push(n),i=o,59===t.charCodeAt(o)?(n=";",o++):(n=null,l('";"')),null!==n&&null!==(r=ve())?n=[n,r]:(n=null,o=i);return e}function ve(){var e;return null===(e=ye())&&null===(e=be())&&null===(e=Ce())&&null===(e=Te())&&null===(e=we())&&null===(e=Se())&&(e=Ae()),e}function ye(){var e,n,r,i,s;return r=o,i=o,"transport="===t.substr(o,10).toLowerCase()?(e=t.substr(o,10),o+=10):(e=null,l('"transport="')),null!==e?("udp"===t.substr(o,3).toLowerCase()?(n=t.substr(o,3),o+=3):(n=null,l('"udp"')),null===n&&("tcp"===t.substr(o,3).toLowerCase()?(n=t.substr(o,3),o+=3):(n=null,l('"tcp"')),null===n&&("sctp"===t.substr(o,4).toLowerCase()?(n=t.substr(o,4),o+=4):(n=null,l('"sctp"')),null===n&&("tls"===t.substr(o,3).toLowerCase()?(n=t.substr(o,3),o+=3):(n=null,l('"tls"')),null===n&&(n=x())))),null!==n?e=[e,n]:(e=null,o=i)):(e=null,o=i),null!==e&&(s=e[1],qn.uri_params||(qn.uri_params={}),e=void(qn.uri_params.transport=s.toLowerCase())),null===e&&(o=r),e}function be(){var e,n,r,i,s;return r=o,i=o,"user="===t.substr(o,5).toLowerCase()?(e=t.substr(o,5),o+=5):(e=null,l('"user="')),null!==e?("phone"===t.substr(o,5).toLowerCase()?(n=t.substr(o,5),o+=5):(n=null,l('"phone"')),null===n&&("ip"===t.substr(o,2).toLowerCase()?(n=t.substr(o,2),o+=2):(n=null,l('"ip"')),null===n&&(n=x())),null!==n?e=[e,n]:(e=null,o=i)):(e=null,o=i),null!==e&&(s=e[1],qn.uri_params||(qn.uri_params={}),e=void(qn.uri_params.user=s.toLowerCase())),null===e&&(o=r),e}function Ce(){var e,n,r,i,s;return r=o,i=o,"method="===t.substr(o,7).toLowerCase()?(e=t.substr(o,7),o+=7):(e=null,l('"method="')),null!==e&&null!==(n=ut())?e=[e,n]:(e=null,o=i),null!==e&&(s=e[1],qn.uri_params||(qn.uri_params={}),e=void(qn.uri_params.method=s)),null===e&&(o=r),e}function Te(){var e,n,r,i,s;return r=o,i=o,"ttl="===t.substr(o,4).toLowerCase()?(e=t.substr(o,4),o+=4):(e=null,l('"ttl="')),null!==e&&null!==(n=Sn())?e=[e,n]:(e=null,o=i),null!==e&&(s=e[1],qn.params||(qn.params={}),e=void(qn.params.ttl=s)),null===e&&(o=r),e}function we(){var e,n,r,i,s;return r=o,i=o,"maddr="===t.substr(o,6).toLowerCase()?(e=t.substr(o,6),o+=6):(e=null,l('"maddr="')),null!==e&&null!==(n=se())?e=[e,n]:(e=null,o=i),null!==e&&(s=e[1],qn.uri_params||(qn.uri_params={}),e=void(qn.uri_params.maddr=s)),null===e&&(o=r),e}function Se(){var e,n,r,i,s,a;return i=o,s=o,"lr"===t.substr(o,2).toLowerCase()?(e=t.substr(o,2),o+=2):(e=null,l('"lr"')),null!==e?(a=o,61===t.charCodeAt(o)?(n="=",o++):(n=null,l('"="')),null!==n&&null!==(r=x())?n=[n,r]:(n=null,o=a),null!==(n=null!==n?n:"")?e=[e,n]:(e=null,o=s)):(e=null,o=s),null!==e&&(qn.uri_params||(qn.uri_params={}),e=void(qn.uri_params.lr=void 0)),null===e&&(o=i),e}function Ae(){var e,n,r,i,s,a;return i=o,s=o,null!==(e=Ee())?(a=o,61===t.charCodeAt(o)?(n="=",o++):(n=null,l('"="')),null!==n&&null!==(r=Ie())?n=[n,r]:(n=null,o=a),null!==(n=null!==n?n:"")?e=[e,n]:(e=null,o=s)):(e=null,o=s),null!==e&&(e=function(e,t,n){qn.uri_params||(qn.uri_params={}),n=void 0===n?void 0:n[1],qn.uri_params[t.toLowerCase()]=n}(0,e[0],e[1])),null===e&&(o=i),e}function Ee(){var e,t,n;if(n=o,null!==(t=Re()))for(e=[];null!==t;)e.push(t),t=Re();else e=null;return null!==e&&(e=e.join("")),null===e&&(o=n),e}function Ie(){var e,t,n;if(n=o,null!==(t=Re()))for(e=[];null!==t;)e.push(t),t=Re();else e=null;return null!==e&&(e=e.join("")),null===e&&(o=n),e}function Re(){var e;return null===(e=ke())&&null===(e=b())&&(e=T()),e}function ke(){var e;return 91===t.charCodeAt(o)?(e="[",o++):(e=null,l('"["')),null===e&&(93===t.charCodeAt(o)?(e="]",o++):(e=null,l('"]"')),null===e&&(47===t.charCodeAt(o)?(e="/",o++):(e=null,l('"/"')),null===e&&(58===t.charCodeAt(o)?(e=":",o++):(e=null,l('":"')),null===e&&(38===t.charCodeAt(o)?(e="&",o++):(e=null,l('"&"')),null===e&&(43===t.charCodeAt(o)?(e="+",o++):(e=null,l('"+"')),null===e&&(36===t.charCodeAt(o)?(e="$",o++):(e=null,l('"$"')))))))),e}function xe(){var e,n,r,i,s,a,u;if(a=o,63===t.charCodeAt(o)?(e="?",o++):(e=null,l('"?"')),null!==e)if(null!==(n=Me())){for(r=[],u=o,38===t.charCodeAt(o)?(i="&",o++):(i=null,l('"&"')),null!==i&&null!==(s=Me())?i=[i,s]:(i=null,o=u);null!==i;)r.push(i),u=o,38===t.charCodeAt(o)?(i="&",o++):(i=null,l('"&"')),null!==i&&null!==(s=Me())?i=[i,s]:(i=null,o=u);null!==r?e=[e,n,r]:(e=null,o=a)}else e=null,o=a;else e=null,o=a;return e}function Me(){var e,n,r,i,s,a,u;return i=o,s=o,null!==(e=De())?(61===t.charCodeAt(o)?(n="=",o++):(n=null,l('"="')),null!==n&&null!==(r=Oe())?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(a=e[0],u=e[2],a=a.join("").toLowerCase(),u=u.join(""),qn.uri_headers||(qn.uri_headers={}),e=void(qn.uri_headers[a]?qn.uri_headers[a].push(u):qn.uri_headers[a]=[u])),null===e&&(o=i),e}function De(){var e,t;if(null===(t=Le())&&null===(t=b())&&(t=T()),null!==t)for(e=[];null!==t;)e.push(t),null===(t=Le())&&null===(t=b())&&(t=T());else e=null;return e}function Oe(){var e,t;for(e=[],null===(t=Le())&&null===(t=b())&&(t=T());null!==t;)e.push(t),null===(t=Le())&&null===(t=b())&&(t=T());return e}function Le(){var e;return 91===t.charCodeAt(o)?(e="[",o++):(e=null,l('"["')),null===e&&(93===t.charCodeAt(o)?(e="]",o++):(e=null,l('"]"')),null===e&&(47===t.charCodeAt(o)?(e="/",o++):(e=null,l('"/"')),null===e&&(63===t.charCodeAt(o)?(e="?",o++):(e=null,l('"?"')),null===e&&(58===t.charCodeAt(o)?(e=":",o++):(e=null,l('":"')),null===e&&(43===t.charCodeAt(o)?(e="+",o++):(e=null,l('"+"')),null===e&&(36===t.charCodeAt(o)?(e="$",o++):(e=null,l('"$"')))))))),e}function Pe(){var e,t,n,r,i,s;return s=o,null!==(e=ut())&&null!==(t=m())&&null!==(n=Ne())&&null!==(r=m())&&null!==(i=Xe())?e=[e,t,n,r,i]:(e=null,o=s),e}function Ne(){var e;return null===(e=$())&&(e=je()),e}function je(){var e,n,r,i;return i=o,null!==(e=Ke())?(58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null!==n?(null===(r=Ue())&&(r=He()),null!==r?e=[e,n,r]:(e=null,o=i)):(e=null,o=i)):(e=null,o=i),e}function Ue(){var e,n,r,i,s;return i=o,null===(e=Fe())&&(e=qe()),null!==e?(s=o,63===t.charCodeAt(o)?(n="?",o++):(n=null,l('"?"')),null!==n&&null!==(r=Ze())?n=[n,r]:(n=null,o=s),null!==(n=null!==n?n:"")?e=[e,n]:(e=null,o=i)):(e=null,o=i),e}function Fe(){var e,n,r,i;return i=o,"//"===t.substr(o,2)?(e="//",o+=2):(e=null,l('"//"')),null!==e&&null!==(n=Je())&&null!==(r=null!==(r=qe())?r:"")?e=[e,n,r]:(e=null,o=i),e}function qe(){var e,n,r;return r=o,47===t.charCodeAt(o)?(e="/",o++):(e=null,l('"/"')),null!==e&&null!==(n=Ve())?e=[e,n]:(e=null,o=r),e}function He(){var e,t,n,r;if(r=o,null!==(e=Ge())){for(t=[],n=ze();null!==n;)t.push(n),n=ze();null!==t?e=[e,t]:(e=null,o=r)}else e=null,o=r;return e}function ze(){var e;return null===(e=y())&&null===(e=b())&&(e=T()),e}function Ge(){var e;return null===(e=b())&&null===(e=T())&&(59===t.charCodeAt(o)?(e=";",o++):(e=null,l('";"')),null===e&&(63===t.charCodeAt(o)?(e="?",o++):(e=null,l('"?"')),null===e&&(58===t.charCodeAt(o)?(e=":",o++):(e=null,l('":"')),null===e&&(64===t.charCodeAt(o)?(e="@",o++):(e=null,l('"@"')),null===e&&(38===t.charCodeAt(o)?(e="&",o++):(e=null,l('"&"')),null===e&&(61===t.charCodeAt(o)?(e="=",o++):(e=null,l('"="')),null===e&&(43===t.charCodeAt(o)?(e="+",o++):(e=null,l('"+"')),null===e&&(36===t.charCodeAt(o)?(e="$",o++):(e=null,l('"$"')),null===e&&(44===t.charCodeAt(o)?(e=",",o++):(e=null,l('","'))))))))))),e}function Ve(){var e,n,r,i,s,a;if(s=o,null!==(e=Be())){for(n=[],a=o,47===t.charCodeAt(o)?(r="/",o++):(r=null,l('"/"')),null!==r&&null!==(i=Be())?r=[r,i]:(r=null,o=a);null!==r;)n.push(r),a=o,47===t.charCodeAt(o)?(r="/",o++):(r=null,l('"/"')),null!==r&&null!==(i=Be())?r=[r,i]:(r=null,o=a);null!==n?e=[e,n]:(e=null,o=s)}else e=null,o=s;return e}function Be(){var e,n,r,i,s,a;for(s=o,e=[],n=Ye();null!==n;)e.push(n),n=Ye();if(null!==e){for(n=[],a=o,59===t.charCodeAt(o)?(r=";",o++):(r=null,l('";"')),null!==r&&null!==(i=We())?r=[r,i]:(r=null,o=a);null!==r;)n.push(r),a=o,59===t.charCodeAt(o)?(r=";",o++):(r=null,l('";"')),null!==r&&null!==(i=We())?r=[r,i]:(r=null,o=a);null!==n?e=[e,n]:(e=null,o=s)}else e=null,o=s;return e}function We(){var e,t;for(e=[],t=Ye();null!==t;)e.push(t),t=Ye();return e}function Ye(){var e;return null===(e=b())&&null===(e=T())&&(58===t.charCodeAt(o)?(e=":",o++):(e=null,l('":"')),null===e&&(64===t.charCodeAt(o)?(e="@",o++):(e=null,l('"@"')),null===e&&(38===t.charCodeAt(o)?(e="&",o++):(e=null,l('"&"')),null===e&&(61===t.charCodeAt(o)?(e="=",o++):(e=null,l('"="')),null===e&&(43===t.charCodeAt(o)?(e="+",o++):(e=null,l('"+"')),null===e&&(36===t.charCodeAt(o)?(e="$",o++):(e=null,l('"$"')),null===e&&(44===t.charCodeAt(o)?(e=",",o++):(e=null,l('","'))))))))),e}function Ke(){var e,n,r,i,s;if(i=o,s=o,null!==(e=d())){for(n=[],null===(r=d())&&null===(r=c())&&(43===t.charCodeAt(o)?(r="+",o++):(r=null,l('"+"')),null===r&&(45===t.charCodeAt(o)?(r="-",o++):(r=null,l('"-"')),null===r&&(46===t.charCodeAt(o)?(r=".",o++):(r=null,l('"."')))));null!==r;)n.push(r),null===(r=d())&&null===(r=c())&&(43===t.charCodeAt(o)?(r="+",o++):(r=null,l('"+"')),null===r&&(45===t.charCodeAt(o)?(r="-",o++):(r=null,l('"-"')),null===r&&(46===t.charCodeAt(o)?(r=".",o++):(r=null,l('"."')))));null!==n?e=[e,n]:(e=null,o=s)}else e=null,o=s;return null!==e&&(e=function(e){qn.scheme=t.substring(o,e)}(i)),null===e&&(o=i),e}function Je(){var e;return null===(e=Qe())&&(e=$e()),e}function Qe(){var e,n,r,i;return r=o,i=o,null!==(e=te())?(64===t.charCodeAt(o)?(n="@",o++):(n=null,l('"@"')),null!==n?e=[e,n]:(e=null,o=i)):(e=null,o=i),null!==(e=null!==e?e:"")&&null!==(n=oe())?e=[e,n]:(e=null,o=r),e=null!==e?e:""}function $e(){var e,n;if(null===(n=b())&&null===(n=T())&&(36===t.charCodeAt(o)?(n="$",o++):(n=null,l('"$"')),null===n&&(44===t.charCodeAt(o)?(n=",",o++):(n=null,l('","')),null===n&&(59===t.charCodeAt(o)?(n=";",o++):(n=null,l('";"')),null===n&&(58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null===n&&(64===t.charCodeAt(o)?(n="@",o++):(n=null,l('"@"')),null===n&&(38===t.charCodeAt(o)?(n="&",o++):(n=null,l('"&"')),null===n&&(61===t.charCodeAt(o)?(n="=",o++):(n=null,l('"="')),null===n&&(43===t.charCodeAt(o)?(n="+",o++):(n=null,l('"+"')))))))))),null!==n)for(e=[];null!==n;)e.push(n),null===(n=b())&&null===(n=T())&&(36===t.charCodeAt(o)?(n="$",o++):(n=null,l('"$"')),null===n&&(44===t.charCodeAt(o)?(n=",",o++):(n=null,l('","')),null===n&&(59===t.charCodeAt(o)?(n=";",o++):(n=null,l('";"')),null===n&&(58===t.charCodeAt(o)?(n=":",o++):(n=null,l('":"')),null===n&&(64===t.charCodeAt(o)?(n="@",o++):(n=null,l('"@"')),null===n&&(38===t.charCodeAt(o)?(n="&",o++):(n=null,l('"&"')),null===n&&(61===t.charCodeAt(o)?(n="=",o++):(n=null,l('"="')),null===n&&(43===t.charCodeAt(o)?(n="+",o++):(n=null,l('"+"'))))))))));else e=null;return e}function Ze(){var e,t;for(e=[],t=ze();null!==t;)e.push(t),t=ze();return e}function Xe(){var e,n,r,i,s,a,u,d;if(u=o,d=o,"sip"===t.substr(o,3).toLowerCase()?(e=t.substr(o,3),o+=3):(e=null,l('"SIP"')),null!==e)if(47===t.charCodeAt(o)?(n="/",o++):(n=null,l('"/"')),null!==n){if(null!==(i=c()))for(r=[];null!==i;)r.push(i),i=c();else r=null;if(null!==r)if(46===t.charCodeAt(o)?(i=".",o++):(i=null,l('"."')),null!==i){if(null!==(a=c()))for(s=[];null!==a;)s.push(a),a=c();else s=null;null!==s?e=[e,n,r,i,s]:(e=null,o=d)}else e=null,o=d;else e=null,o=d}else e=null,o=d;else e=null,o=d;return null!==e&&(e=function(e){qn.sip_version=t.substring(o,e)}(u)),null===e&&(o=u),e}function et(){var e;return"INVITE"===t.substr(o,6)?(e="INVITE",o+=6):(e=null,l('"INVITE"')),e}function tt(){var e;return"ACK"===t.substr(o,3)?(e="ACK",o+=3):(e=null,l('"ACK"')),e}function nt(){var e;return"OPTIONS"===t.substr(o,7)?(e="OPTIONS",o+=7):(e=null,l('"OPTIONS"')),e}function rt(){var e;return"BYE"===t.substr(o,3)?(e="BYE",o+=3):(e=null,l('"BYE"')),e}function it(){var e;return"CANCEL"===t.substr(o,6)?(e="CANCEL",o+=6):(e=null,l('"CANCEL"')),e}function ot(){var e;return"REGISTER"===t.substr(o,8)?(e="REGISTER",o+=8):(e=null,l('"REGISTER"')),e}function st(){var e;return"SUBSCRIBE"===t.substr(o,9)?(e="SUBSCRIBE",o+=9):(e=null,l('"SUBSCRIBE"')),e}function at(){var e;return"NOTIFY"===t.substr(o,6)?(e="NOTIFY",o+=6):(e=null,l('"NOTIFY"')),e}function lt(){var e;return"REFER"===t.substr(o,5)?(e="REFER",o+=5):(e=null,l('"REFER"')),e}function ut(){var e,n;return n=o,null===(e=et())&&null===(e=tt())&&null===(e=nt())&&null===(e=rt())&&null===(e=it())&&null===(e=ot())&&null===(e=st())&&null===(e=at())&&null===(e=lt())&&(e=x()),null!==e&&(e=function(e){return qn.method=t.substring(o,e),qn.method}(n)),null===e&&(o=n),e}function ct(){var e,t,n,r,i,s;return s=o,null!==(e=Xe())&&null!==(t=m())&&null!==(n=dt())&&null!==(r=m())&&null!==(i=ft())?e=[e,t,n,r,i]:(e=null,o=s),e}function dt(){var e,t,n;return t=o,null!==(e=ht())&&(n=e,e=void(qn.status_code=parseInt(n.join("")))),null===e&&(o=t),e}function ht(){var e,t,n,r;return r=o,null!==(e=c())&&null!==(t=c())&&null!==(n=c())?e=[e,t,n]:(e=null,o=r),e}function ft(){var e,n,r;for(r=o,e=[],null===(n=y())&&null===(n=b())&&null===(n=T())&&null===(n=R())&&null===(n=k())&&null===(n=m())&&(n=_());null!==n;)e.push(n),null===(n=y())&&null===(n=b())&&null===(n=T())&&null===(n=R())&&null===(n=k())&&null===(n=m())&&(n=_());return null!==e&&(e=function(e){qn.reason_phrase=t.substring(o,e)}(r)),null===e&&(o=r),e}function pt(){var e,t,n,r,i,s,a;if(i=o,s=o,null===(e=Q())&&(e=gt()),null!==e){for(t=[],a=o,null!==(n=H())&&null!==(r=_t())?n=[n,r]:(n=null,o=a);null!==n;)t.push(n),a=o,null!==(n=H())&&null!==(r=_t())?n=[n,r]:(n=null,o=a);null!==t?e=[e,t]:(e=null,o=s)}else e=null,o=s;return null!==e&&(e=function(e){var t;qn.multi_header||(qn.multi_header=[]);try{t=new Fn(qn.uri,qn.display_name,qn.params),delete qn.uri,delete qn.display_name,delete qn.params}catch(e){t=null}qn.multi_header.push({possition:o,offset:e,parsed:t})}(i)),null===e&&(o=i),e}function gt(){var e,t,n,r,i;return i=o,null!==(e=null!==(e=mt())?e:"")&&null!==(t=F())&&null!==(n=$())&&null!==(r=U())?e=[e,t,n,r]:(e=null,o=i),e}function mt(){var e,t,n,r,i,s,a,l;if(i=o,s=o,null!==(e=x())){for(t=[],a=o,null!==(n=w())&&null!==(r=x())?n=[n,r]:(n=null,o=a);null!==n;)t.push(n),a=o,null!==(n=w())&&null!==(r=x())?n=[n,r]:(n=null,o=a);null!==t?e=[e,t]:(e=null,o=s)}else e=null,o=s;return null===e&&(e=Y()),null!==e&&(l=e,e=void(qn.display_name="string"==typeof l?l:l[1].reduce((function(e,t){return e+t[0]+t[1]}),l[0]))),null===e&&(o=i),e}function _t(){var e;return null===(e=vt())&&null===(e=yt())&&(e=Tt()),e}function vt(){var e,n,r,i,s,a;return i=o,s=o,"q"===t.substr(o,1).toLowerCase()?(e=t.substr(o,1),o++):(e=null,l('"q"')),null!==e&&null!==(n=P())&&null!==(r=Ct())?e=[e,n,r]:(e=null,o=s),null!==e&&(a=e[2],qn.params||(qn.params={}),e=void(qn.params.q=a)),null===e&&(o=i),e}function yt(){var e,n,r,i,s,a;return i=o,s=o,"expires"===t.substr(o,7).toLowerCase()?(e=t.substr(o,7),o+=7):(e=null,l('"expires"')),null!==e&&null!==(n=P())&&null!==(r=bt())?e=[e,n,r]:(e=null,o=s),null!==e&&(a=e[2],qn.params||(qn.params={}),e=void(qn.params.expires=a)),null===e&&(o=i),e}function bt(){var e,t,n;if(n=o,null!==(t=c()))for(e=[];null!==t;)e.push(t),t=c();else e=null;return null!==e&&(e=parseInt(e.join(""))),null===e&&(o=n),e}function Ct(){var e,n,r,i,s,a,u,d;return a=o,u=o,48===t.charCodeAt(o)?(e="0",o++):(e=null,l('"0"')),null!==e?(d=o,46===t.charCodeAt(o)?(n=".",o++):(n=null,l('"."')),null!==n&&null!==(r=null!==(r=c())?r:"")&&null!==(i=null!==(i=c())?i:"")&&null!==(s=null!==(s=c())?s:"")?n=[n,r,i,s]:(n=null,o=d),null!==(n=null!==n?n:"")?e=[e,n]:(e=null,o=u)):(e=null,o=u),null!==e&&(e=function(e){return parseFloat(t.substring(o,e))}(a)),null===e&&(o=a),e}function Tt(){var e,t,n,r,i,s;return r=o,i=o,null!==(e=x())?(s=o,null!==(t=P())&&null!==(n=wt())?t=[t,n]:(t=null,o=s),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=i)):(e=null,o=i),null!==e&&(e=function(e,t,n){qn.params||(qn.params={}),n=void 0===n?void 0:n[1],qn.params[t.toLowerCase()]=n}(0,e[0],e[1])),null===e&&(o=r),e}function wt(){var e;return null===(e=x())&&null===(e=se())&&(e=W()),e}function St(){var e;return"render"===t.substr(o,6).toLowerCase()?(e=t.substr(o,6),o+=6):(e=null,l('"render"')),null===e&&("session"===t.substr(o,7).toLowerCase()?(e=t.substr(o,7),o+=7):(e=null,l('"session"')),null===e&&("icon"===t.substr(o,4).toLowerCase()?(e=t.substr(o,4),o+=4):(e=null,l('"icon"')),null===e&&("alert"===t.substr(o,5).toLowerCase()?(e=t.substr(o,5),o+=5):(e=null,l('"alert"')),null===e&&(e=x())))),e}function At(){var e;return null===(e=Et())&&(e=Tt()),e}function Et(){var e,n,r,i;return i=o,"handling"===t.substr(o,8).toLowerCase()?(e=t.substr(o,8),o+=8):(e=null,l('"handling"')),null!==e&&null!==(n=P())?("optional"===t.substr(o,8).toLowerCase()?(r=t.substr(o,8),o+=8):(r=null,l('"optional"')),null===r&&("required"===t.substr(o,8).toLowerCase()?(r=t.substr(o,8),o+=8):(r=null,l('"required"')),null===r&&(r=x())),null!==r?e=[e,n,r]:(e=null,o=i)):(e=null,o=i),e}function It(){var e,t,n,r,i,s,a,l;if(a=o,null!==(e=Rt()))if(null!==(t=L()))if(null!==(n=Ot())){for(r=[],l=o,null!==(i=H())&&null!==(s=Lt())?i=[i,s]:(i=null,o=l);null!==i;)r.push(i),l=o,null!==(i=H())&&null!==(s=Lt())?i=[i,s]:(i=null,o=l);null!==r?e=[e,t,n,r]:(e=null,o=a)}else e=null,o=a;else e=null,o=a;else e=null,o=a;return e}function Rt(){var e;return null===(e=kt())&&(e=xt()),e}function kt(){var e;return"text"===t.substr(o,4).toLowerCase()?(e=t.substr(o,4),o+=4):(e=null,l('"text"')),null===e&&("image"===t.substr(o,5).toLowerCase()?(e=t.substr(o,5),o+=5):(e=null,l('"image"')),null===e&&("audio"===t.substr(o,5).toLowerCase()?(e=t.substr(o,5),o+=5):(e=null,l('"audio"')),null===e&&("video"===t.substr(o,5).toLowerCase()?(e=t.substr(o,5),o+=5):(e=null,l('"video"')),null===e&&("application"===t.substr(o,11).toLowerCase()?(e=t.substr(o,11),o+=11):(e=null,l('"application"')),null===e&&(e=Mt()))))),e}function xt(){var e;return"message"===t.substr(o,7).toLowerCase()?(e=t.substr(o,7),o+=7):(e=null,l('"message"')),null===e&&("multipart"===t.substr(o,9).toLowerCase()?(e=t.substr(o,9),o+=9):(e=null,l('"multipart"')),null===e&&(e=Mt())),e}function Mt(){var e;return null===(e=x())&&(e=Dt()),e}function Dt(){var e,n,r;return r=o,"x-"===t.substr(o,2).toLowerCase()?(e=t.substr(o,2),o+=2):(e=null,l('"x-"')),null!==e&&null!==(n=x())?e=[e,n]:(e=null,o=r),e}function Ot(){var e;return null===(e=Mt())&&(e=x()),e}function Lt(){var e,t,n,r;return r=o,null!==(e=x())&&null!==(t=P())&&null!==(n=Pt())?e=[e,t,n]:(e=null,o=r),e}function Pt(){var e;return null===(e=x())&&(e=W()),e}function Nt(){var e,t,n,r;if(n=o,null!==(t=c()))for(e=[];null!==t;)e.push(t),t=c();else e=null;return null!==e&&(r=e,e=void(qn.value=parseInt(r.join("")))),null===e&&(o=n),e}function jt(){var e,n,r,i,s,a;if(s=o,null!==(e=M())){for(n=[],a=o,46===t.charCodeAt(o)?(r=".",o++):(r=null,l('"."')),null!==r&&null!==(i=M())?r=[r,i]:(r=null,o=a);null!==r;)n.push(r),a=o,46===t.charCodeAt(o)?(r=".",o++):(r=null,l('"."')),null!==r&&null!==(i=M())?r=[r,i]:(r=null,o=a);null!==n?e=[e,n]:(e=null,o=s)}else e=null,o=s;return e}function Ut(){var e;return null===(e=Ft())&&(e=Tt()),e}function Ft(){var e,n,r,i,s,a;return i=o,s=o,"tag"===t.substr(o,3).toLowerCase()?(e=t.substr(o,3),o+=3):(e=null,l('"tag"')),null!==e&&null!==(n=P())&&null!==(r=x())?e=[e,n,r]:(e=null,o=s),null!==e&&(a=e[2],e=void(qn.tag=a)),null===e&&(o=i),e}function qt(){var e,n,r,i,s,a,u,c;if(u=o,"digest"===t.substr(o,6).toLowerCase()?(e=t.substr(o,6),o+=6):(e=null,l('"Digest"')),null!==e)if(null!==(n=w()))if(null!==(r=Gt())){for(i=[],c=o,null!==(s=q())&&null!==(a=Gt())?s=[s,a]:(s=null,o=c);null!==s;)i.push(s),c=o,null!==(s=q())&&null!==(a=Gt())?s=[s,a]:(s=null,o=c);null!==i?e=[e,n,r,i]:(e=null,o=u)}else e=null,o=u;else e=null,o=u;else e=null,o=u;return null===e&&(e=Ht()),e}function Ht(){var e,t,n,r,i,s,a,l;if(a=o,null!==(e=x()))if(null!==(t=w()))if(null!==(n=zt())){for(r=[],l=o,null!==(i=q())&&null!==(s=zt())?i=[i,s]:(i=null,o=l);null!==i;)r.push(i),l=o,null!==(i=q())&&null!==(s=zt())?i=[i,s]:(i=null,o=l);null!==r?e=[e,t,n,r]:(e=null,o=a)}else e=null,o=a;else e=null,o=a;else e=null,o=a;return e}function zt(){var e,t,n,r;return r=o,null!==(e=x())&&null!==(t=P())?(null===(n=x())&&(n=W()),null!==n?e=[e,t,n]:(e=null,o=r)):(e=null,o=r),e}function Gt(){var e;return null===(e=Vt())&&null===(e=Wt())&&null===(e=Kt())&&null===(e=Qt())&&null===(e=$t())&&null===(e=Zt())&&null===(e=Xt())&&(e=zt()),e}function Vt(){var e,n,r,i;return i=o,"realm"===t.substr(o,5).toLowerCase()?(e=t.substr(o,5),o+=5):(e=null,l('"realm"')),null!==e&&null!==(n=P())&&null!==(r=Bt())?e=[e,n,r]:(e=null,o=i),e}function Bt(){var e,t,n;return t=o,null!==(e=Y())&&(n=e,e=void(qn.realm=n)),null===e&&(o=t),e}function Wt(){var e,n,r,i,s,a,u,c,d;if(c=o,"domain"===t.substr(o,6).toLowerCase()?(e=t.substr(o,6),o+=6):(e=null,l('"domain"')),null!==e)if(null!==(n=P()))if(null!==(r=G()))if(null!==(i=Yt())){if(s=[],d=o,null!==(u=m()))for(a=[];null!==u;)a.push(u),u=m();else a=null;for(null!==a&&null!==(u=Yt())?a=[a,u]:(a=null,o=d);null!==a;){if(s.push(a),d=o,null!==(u=m()))for(a=[];null!==u;)a.push(u),u=m();else a=null;null!==a&&null!==(u=Yt())?a=[a,u]:(a=null,o=d)}null!==s&&null!==(a=V())?e=[e,n,r,i,s,a]:(e=null,o=c)}else e=null,o=c;else e=null,o=c;else e=null,o=c;else e=null,o=c;return e}function Yt(){var e;return null===(e=je())&&(e=qe()),e}function Kt(){var e,n,r,i;return i=o,"nonce"===t.substr(o,5).toLowerCase()?(e=t.substr(o,5),o+=5):(e=null,l('"nonce"')),null!==e&&null!==(n=P())&&null!==(r=Jt())?e=[e,n,r]:(e=null,o=i),e}function Jt(){var e,t,n;return t=o,null!==(e=Y())&&(n=e,e=void(qn.nonce=n)),null===e&&(o=t),e}function Qt(){var e,n,r,i,s,a;return i=o,s=o,"opaque"===t.substr(o,6).toLowerCase()?(e=t.substr(o,6),o+=6):(e=null,l('"opaque"')),null!==e&&null!==(n=P())&&null!==(r=Y())?e=[e,n,r]:(e=null,o=s),null!==e&&(a=e[2],e=void(qn.opaque=a)),null===e&&(o=i),e}function $t(){var e,n,r,i,s;return i=o,"stale"===t.substr(o,5).toLowerCase()?(e=t.substr(o,5),o+=5):(e=null,l('"stale"')),null!==e&&null!==(n=P())?(s=o,"true"===t.substr(o,4).toLowerCase()?(r=t.substr(o,4),o+=4):(r=null,l('"true"')),null!==r&&(r=void(qn.stale=!0)),null===r&&(o=s),null===r&&(s=o,"false"===t.substr(o,5).toLowerCase()?(r=t.substr(o,5),o+=5):(r=null,l('"false"')),null!==r&&(r=void(qn.stale=!1)),null===r&&(o=s)),null!==r?e=[e,n,r]:(e=null,o=i)):(e=null,o=i),e}function Zt(){var e,n,r,i,s,a;return i=o,s=o,"algorithm"===t.substr(o,9).toLowerCase()?(e=t.substr(o,9),o+=9):(e=null,l('"algorithm"')),null!==e&&null!==(n=P())?("md5"===t.substr(o,3).toLowerCase()?(r=t.substr(o,3),o+=3):(r=null,l('"MD5"')),null===r&&("md5-sess"===t.substr(o,8).toLowerCase()?(r=t.substr(o,8),o+=8):(r=null,l('"MD5-sess"')),null===r&&(r=x())),null!==r?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(a=e[2],e=void(qn.algorithm=a.toUpperCase())),null===e&&(o=i),e}function Xt(){var e,n,r,i,s,a,u,c,d,h;if(c=o,"qop"===t.substr(o,3).toLowerCase()?(e=t.substr(o,3),o+=3):(e=null,l('"qop"')),null!==e)if(null!==(n=P()))if(null!==(r=G())){if(d=o,null!==(i=en())){for(s=[],h=o,44===t.charCodeAt(o)?(a=",",o++):(a=null,l('","')),null!==a&&null!==(u=en())?a=[a,u]:(a=null,o=h);null!==a;)s.push(a),h=o,44===t.charCodeAt(o)?(a=",",o++):(a=null,l('","')),null!==a&&null!==(u=en())?a=[a,u]:(a=null,o=h);null!==s?i=[i,s]:(i=null,o=d)}else i=null,o=d;null!==i&&null!==(s=V())?e=[e,n,r,i,s]:(e=null,o=c)}else e=null,o=c;else e=null,o=c;else e=null,o=c;return e}function en(){var e,n,r;return n=o,"auth-int"===t.substr(o,8).toLowerCase()?(e=t.substr(o,8),o+=8):(e=null,l('"auth-int"')),null===e&&("auth"===t.substr(o,4).toLowerCase()?(e=t.substr(o,4),o+=4):(e=null,l('"auth"')),null===e&&(e=x())),null!==e&&(r=e,qn.qop||(qn.qop=[]),e=void qn.qop.push(r.toLowerCase())),null===e&&(o=n),e}function tn(){var e,t,n,r,i,s,a;if(i=o,s=o,null!==(e=gt())){for(t=[],a=o,null!==(n=H())&&null!==(r=Tt())?n=[n,r]:(n=null,o=a);null!==n;)t.push(n),a=o,null!==(n=H())&&null!==(r=Tt())?n=[n,r]:(n=null,o=a);null!==t?e=[e,t]:(e=null,o=s)}else e=null,o=s;return null!==e&&(e=function(e){var t;qn.multi_header||(qn.multi_header=[]);try{t=new Fn(qn.uri,qn.display_name,qn.params),delete qn.uri,delete qn.display_name,delete qn.params}catch(e){t=null}qn.multi_header.push({possition:o,offset:e,parsed:t})}(i)),null===e&&(o=i),e}function nn(){var e;return null===(e=rn())&&(e=Tt()),e}function rn(){var e,n,r,i,s,a,u;if(s=o,a=o,"cause"===t.substr(o,5).toLowerCase()?(e=t.substr(o,5),o+=5):(e=null,l('"cause"')),null!==e)if(null!==(n=P())){if(null!==(i=c()))for(r=[];null!==i;)r.push(i),i=c();else r=null;null!==r?e=[e,n,r]:(e=null,o=a)}else e=null,o=a;else e=null,o=a;return null!==e&&(u=e[2],e=void(qn.cause=parseInt(u.join("")))),null===e&&(o=s),e}function on(){var e,t,n,r,i,s;if(i=o,null!==(e=gt())){for(t=[],s=o,null!==(n=H())&&null!==(r=Tt())?n=[n,r]:(n=null,o=s);null!==n;)t.push(n),s=o,null!==(n=H())&&null!==(r=Tt())?n=[n,r]:(n=null,o=s);null!==t?e=[e,t]:(e=null,o=i)}else e=null,o=i;return e}function sn(){var e,n;return n=o,"active"===t.substr(o,6).toLowerCase()?(e=t.substr(o,6),o+=6):(e=null,l('"active"')),null===e&&("pending"===t.substr(o,7).toLowerCase()?(e=t.substr(o,7),o+=7):(e=null,l('"pending"')),null===e&&("terminated"===t.substr(o,10).toLowerCase()?(e=t.substr(o,10),o+=10):(e=null,l('"terminated"')),null===e&&(e=x()))),null!==e&&(e=function(e){qn.state=t.substring(o,e)}(n)),null===e&&(o=n),e}function an(){var e,n,r,i,s,a,u,c;return i=o,s=o,"reason"===t.substr(o,6).toLowerCase()?(e=t.substr(o,6),o+=6):(e=null,l('"reason"')),null!==e&&null!==(n=P())&&null!==(r=ln())?e=[e,n,r]:(e=null,o=s),null!==e&&(e=void(void 0!==(a=e[2])&&(qn.reason=a))),null===e&&(o=i),null===e&&(i=o,s=o,"expires"===t.substr(o,7).toLowerCase()?(e=t.substr(o,7),o+=7):(e=null,l('"expires"')),null!==e&&null!==(n=P())&&null!==(r=bt())?e=[e,n,r]:(e=null,o=s),null!==e&&(e=void(void 0!==(c=e[2])&&(qn.expires=c))),null===e&&(o=i),null===e&&(i=o,s=o,"retry_after"===t.substr(o,11).toLowerCase()?(e=t.substr(o,11),o+=11):(e=null,l('"retry_after"')),null!==e&&null!==(n=P())&&null!==(r=bt())?e=[e,n,r]:(e=null,o=s),null!==e&&(e=void(void 0!==(u=e[2])&&(qn.retry_after=u))),null===e&&(o=i),null===e&&(e=Tt()))),e}function ln(){var e;return"deactivated"===t.substr(o,11).toLowerCase()?(e=t.substr(o,11),o+=11):(e=null,l('"deactivated"')),null===e&&("probation"===t.substr(o,9).toLowerCase()?(e=t.substr(o,9),o+=9):(e=null,l('"probation"')),null===e&&("rejected"===t.substr(o,8).toLowerCase()?(e=t.substr(o,8),o+=8):(e=null,l('"rejected"')),null===e&&("timeout"===t.substr(o,7).toLowerCase()?(e=t.substr(o,7),o+=7):(e=null,l('"timeout"')),null===e&&("giveup"===t.substr(o,6).toLowerCase()?(e=t.substr(o,6),o+=6):(e=null,l('"giveup"')),null===e&&("noresource"===t.substr(o,10).toLowerCase()?(e=t.substr(o,10),o+=10):(e=null,l('"noresource"')),null===e&&("invariant"===t.substr(o,9).toLowerCase()?(e=t.substr(o,9),o+=9):(e=null,l('"invariant"')),null===e&&(e=x()))))))),e}function un(){var e;return null===(e=Ft())&&(e=Tt()),e}function cn(){var e,t,n,r,i,s,a,l;if(a=o,null!==(e=vn()))if(null!==(t=w()))if(null!==(n=Cn())){for(r=[],l=o,null!==(i=H())&&null!==(s=dn())?i=[i,s]:(i=null,o=l);null!==i;)r.push(i),l=o,null!==(i=H())&&null!==(s=dn())?i=[i,s]:(i=null,o=l);null!==r?e=[e,t,n,r]:(e=null,o=a)}else e=null,o=a;else e=null,o=a;else e=null,o=a;return e}function dn(){var e;return null===(e=hn())&&null===(e=fn())&&null===(e=pn())&&null===(e=gn())&&null===(e=mn())&&(e=Tt()),e}function hn(){var e,n,r,i,s,a;return i=o,s=o,"ttl"===t.substr(o,3).toLowerCase()?(e=t.substr(o,3),o+=3):(e=null,l('"ttl"')),null!==e&&null!==(n=P())&&null!==(r=Sn())?e=[e,n,r]:(e=null,o=s),null!==e&&(a=e[2],e=void(qn.ttl=a)),null===e&&(o=i),e}function fn(){var e,n,r,i,s,a;return i=o,s=o,"maddr"===t.substr(o,5).toLowerCase()?(e=t.substr(o,5),o+=5):(e=null,l('"maddr"')),null!==e&&null!==(n=P())&&null!==(r=se())?e=[e,n,r]:(e=null,o=s),null!==e&&(a=e[2],e=void(qn.maddr=a)),null===e&&(o=i),e}function pn(){var e,n,r,i,s,a;return i=o,s=o,"received"===t.substr(o,8).toLowerCase()?(e=t.substr(o,8),o+=8):(e=null,l('"received"')),null!==e&&null!==(n=P())?(null===(r=pe())&&(r=de()),null!==r?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(a=e[2],e=void(qn.received=a)),null===e&&(o=i),e}function gn(){var e,n,r,i,s,a;return i=o,s=o,"branch"===t.substr(o,6).toLowerCase()?(e=t.substr(o,6),o+=6):(e=null,l('"branch"')),null!==e&&null!==(n=P())&&null!==(r=x())?e=[e,n,r]:(e=null,o=s),null!==e&&(a=e[2],e=void(qn.branch=a)),null===e&&(o=i),e}function mn(){var e,n,r,i,s;return i=o,"rport"===t.substr(o,5).toLowerCase()?(e=t.substr(o,5),o+=5):(e=null,l('"rport"')),null!==e?(s=o,null!==(n=P())&&null!==(r=_n())?n=[n,r]:(n=null,o=s),null!==(n=null!==n?n:"")?e=[e,n]:(e=null,o=i)):(e=null,o=i),e}function _n(){var e,t,n,r,i,s,a,l;return s=o,a=o,null!==(e=null!==(e=c())?e:"")&&null!==(t=null!==(t=c())?t:"")&&null!==(n=null!==(n=c())?n:"")&&null!==(r=null!==(r=c())?r:"")&&null!==(i=null!==(i=c())?i:"")?e=[e,t,n,r,i]:(e=null,o=a),null!==e&&(l=e,e=void(qn.rport=parseInt(l.join("")))),null===e&&(o=s),e}function vn(){var e,t,n,r,i,s;return s=o,null!==(e=yn())&&null!==(t=L())&&null!==(n=x())&&null!==(r=L())&&null!==(i=bn())?e=[e,t,n,r,i]:(e=null,o=s),e}function yn(){var e,n,r;return n=o,"sip"===t.substr(o,3).toLowerCase()?(e=t.substr(o,3),o+=3):(e=null,l('"SIP"')),null===e&&(e=x()),null!==e&&(r=e,e=void(qn.protocol=r)),null===e&&(o=n),e}function bn(){var e,n,r;return n=o,"udp"===t.substr(o,3).toLowerCase()?(e=t.substr(o,3),o+=3):(e=null,l('"UDP"')),null===e&&("tcp"===t.substr(o,3).toLowerCase()?(e=t.substr(o,3),o+=3):(e=null,l('"TCP"')),null===e&&("tls"===t.substr(o,3).toLowerCase()?(e=t.substr(o,3),o+=3):(e=null,l('"TLS"')),null===e&&("sctp"===t.substr(o,4).toLowerCase()?(e=t.substr(o,4),o+=4):(e=null,l('"SCTP"')),null===e&&(e=x())))),null!==e&&(r=e,e=void(qn.transport=r)),null===e&&(o=n),e}function Cn(){var e,t,n,r,i;return r=o,null!==(e=Tn())?(i=o,null!==(t=z())&&null!==(n=wn())?t=[t,n]:(t=null,o=i),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=r)):(e=null,o=r),e}function Tn(){var e,n;return n=o,null===(e=pe())&&null===(e=ce())&&(e=ae()),null!==e&&(e=function(e){qn.host=t.substring(o,e)}(n)),null===e&&(o=n),e}function wn(){var e,t,n,r,i,s,a,l;return s=o,a=o,null!==(e=null!==(e=c())?e:"")&&null!==(t=null!==(t=c())?t:"")&&null!==(n=null!==(n=c())?n:"")&&null!==(r=null!==(r=c())?r:"")&&null!==(i=null!==(i=c())?i:"")?e=[e,t,n,r,i]:(e=null,o=a),null!==e&&(l=e,e=void(qn.port=parseInt(l.join("")))),null===e&&(o=s),e}function Sn(){var e,t,n,r,i;return r=o,i=o,null!==(e=c())&&null!==(t=null!==(t=c())?t:"")&&null!==(n=null!==(n=c())?n:"")?e=[e,t,n]:(e=null,o=i),null!==e&&(e=parseInt(e.join(""))),null===e&&(o=r),e}function An(){var e,t,n;return t=o,null!==(e=bt())&&(n=e,e=void(qn.expires=n)),null===e&&(o=t),e}function En(){var e;return null===(e=In())&&(e=Tt()),e}function In(){var e,n,r,i,s,a;return i=o,s=o,"refresher"===t.substr(o,9).toLowerCase()?(e=t.substr(o,9),o+=9):(e=null,l('"refresher"')),null!==e&&null!==(n=P())?("uac"===t.substr(o,3).toLowerCase()?(r=t.substr(o,3),o+=3):(r=null,l('"uac"')),null===r&&("uas"===t.substr(o,3).toLowerCase()?(r=t.substr(o,3),o+=3):(r=null,l('"uas"'))),null!==r?e=[e,n,r]:(e=null,o=s)):(e=null,o=s),null!==e&&(a=e[2],e=void(qn.refresher=a.toLowerCase())),null===e&&(o=i),e}function Rn(){var e,t;for(e=[],null===(t=I())&&null===(t=k())&&(t=w());null!==t;)e.push(t),null===(t=I())&&null===(t=k())&&(t=w());return e}function kn(){var e,n,r,i,s,a,u,c,d,h,f;return h=o,f=o,null!==(e=Mn())?(45===t.charCodeAt(o)?(n="-",o++):(n=null,l('"-"')),null!==n&&null!==(r=xn())?(45===t.charCodeAt(o)?(i="-",o++):(i=null,l('"-"')),null!==i&&null!==(s=xn())?(45===t.charCodeAt(o)?(a="-",o++):(a=null,l('"-"')),null!==a&&null!==(u=xn())?(45===t.charCodeAt(o)?(c="-",o++):(c=null,l('"-"')),null!==c&&null!==(d=Dn())?e=[e,n,r,i,s,a,u,c,d]:(e=null,o=f)):(e=null,o=f)):(e=null,o=f)):(e=null,o=f)):(e=null,o=f),null!==e&&(e=function(e,n){qn=t.substring(o+5,e)}(h,e[0])),null===e&&(o=h),e}function xn(){var e,t,n,r,i;return i=o,null!==(e=h())&&null!==(t=h())&&null!==(n=h())&&null!==(r=h())?e=[e,t,n,r]:(e=null,o=i),e}function Mn(){var e,t,n;return n=o,null!==(e=xn())&&null!==(t=xn())?e=[e,t]:(e=null,o=n),e}function Dn(){var e,t,n,r;return r=o,null!==(e=xn())&&null!==(t=xn())&&null!==(n=xn())?e=[e,t,n]:(e=null,o=r),e}function On(){var e,n,r,i,s,a;return i=o,s=o,null!==(e=D())?(a=o,64===t.charCodeAt(o)?(n="@",o++):(n=null,l('"@"')),null!==n&&null!==(r=D())?n=[n,r]:(n=null,o=a),null!==(n=null!==n?n:"")?e=[e,n]:(e=null,o=s)):(e=null,o=s),null!==e&&(e=function(e){qn.call_id=t.substring(o,e)}(i)),null===e&&(o=i),e}function Ln(){var e;return null===(e=Pn())&&null===(e=Nn())&&null===(e=jn())&&(e=Tt()),e}function Pn(){var e,n,r,i,s,a;return i=o,s=o,"to-tag"===t.substr(o,6)?(e="to-tag",o+=6):(e=null,l('"to-tag"')),null!==e&&null!==(n=P())&&null!==(r=x())?e=[e,n,r]:(e=null,o=s),null!==e&&(a=e[2],e=void(qn.to_tag=a)),null===e&&(o=i),e}function Nn(){var e,n,r,i,s,a;return i=o,s=o,"from-tag"===t.substr(o,8)?(e="from-tag",o+=8):(e=null,l('"from-tag"')),null!==e&&null!==(n=P())&&null!==(r=x())?e=[e,n,r]:(e=null,o=s),null!==e&&(a=e[2],e=void(qn.from_tag=a)),null===e&&(o=i),e}function jn(){var e,n;return n=o,"early-only"===t.substr(o,10)?(e="early-only",o+=10):(e=null,l('"early-only"')),null!==e&&(e=void(qn.early_only=!0)),null===e&&(o=n),e}var Un=n(7),Fn=n(14),qn={};if(null===i[r]()||o!==t.length){var Hn=Math.max(o,s),zn=Hn=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw o}}}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n")),this.setHeader("via",""),this.setHeader("max-forwards",m.MAX_FORWARDS);var a=i.to_uri||n,l=i.to_tag?{tag:i.to_tag}:null,u=void 0!==i.to_display_name?i.to_display_name:null;this.to=new v(a,u,l),this.setHeader("to",this.to.toString());var c,h=i.from_uri||r.configuration.uri,f={tag:i.from_tag||_.newTag()};c=void 0!==i.from_display_name?i.from_display_name:r.configuration.display_name?r.configuration.display_name:null,this.from=new v(h,c,f),this.setHeader("from",this.from.toString());var p=i.call_id||r.configuration.jssip_id+_.createRandomToken(15);this.call_id=p,this.setHeader("call-id",p);var g=i.cseq||Math.floor(1e4*Math.random());this.cseq=g,this.setHeader("cseq","".concat(g," ").concat(t))}return f(e,[{key:"setHeader",value:function(e,t){for(var n=new RegExp("^\\s*".concat(e,"\\s*:"),"i"),r=0;r1&&void 0!==arguments[1]?arguments[1]:0;if(e=_.headerize(e),this.headers[e]){if(!(t>=this.headers[e].length)){var n=this.headers[e][t],r=n.raw;if(n.parsed)return n.parsed;var i=y.parse(r,e.replace(/-/g,"_"));return-1===i?(this.headers[e].splice(t,1),void b.debug('error parsing "'.concat(e,'" header field with value "').concat(r,'"'))):(n.parsed=i,i)}b.debug('not so many "'.concat(e,'" headers present'))}else b.debug('header "'.concat(e,'" not present'))}},{key:"s",value:function(e,t){return this.parseHeader(e,t)}},{key:"setHeader",value:function(e,t){var n={raw:t};this.headers[_.headerize(e)]=[n]}},{key:"parseSDP",value:function(e){return!e&&this.sdp||(this.sdp=p.parse(this.body||"")),this.sdp}},{key:"toString",value:function(){return this.data}}]),e}(),S=function(e){i(n,e);var t=s(n);function n(e){var r;return d(this,n),(r=t.call(this)).ua=e,r.headers={},r.ruri=null,r.transport=null,r.server_transaction=null,r}return f(n,[{key:"reply",value:function(e,t,n,r,i,o){var s=[],a=this.getHeader("To");if(t=t||null,!(e=e||null)||e<100||e>699)throw new TypeError("Invalid status_code: ".concat(e));if(t&&"string"!=typeof t&&!(t instanceof String))throw new TypeError("Invalid reason_phrase: ".concat(t));t=t||m.REASON_PHRASE[e]||"",n=_.cloneArray(n);var l="SIP/2.0 ".concat(e," ").concat(t,"\r\n");if(this.method===m.INVITE&&e>100&&e<=200){var c,d=u(this.getHeaders("record-route"));try{for(d.s();!(c=d.n()).done;){var h=c.value;l+="Record-Route: ".concat(h,"\r\n")}}catch(e){d.e(e)}finally{d.f()}}var f,p=u(this.getHeaders("via"));try{for(p.s();!(f=p.n()).done;){var g=f.value;l+="Via: ".concat(g,"\r\n")}}catch(e){p.e(e)}finally{p.f()}!this.to_tag&&e>100?a+=";tag=".concat(_.newTag()):this.to_tag&&!this.s("to").hasParam("tag")&&(a+=";tag=".concat(this.to_tag)),l+="To: ".concat(a,"\r\n"),l+="From: ".concat(this.getHeader("From"),"\r\n"),l+="Call-ID: ".concat(this.call_id,"\r\n"),l+="CSeq: ".concat(this.cseq," ").concat(this.method,"\r\n");var v,y=u(n);try{for(y.s();!(v=y.n()).done;){var b=v.value;l+="".concat(b.trim(),"\r\n")}}catch(e){y.e(e)}finally{y.f()}switch(this.method){case m.INVITE:this.ua.configuration.session_timers&&s.push("timer"),(this.ua.contact.pub_gruu||this.ua.contact.temp_gruu)&&s.push("gruu"),s.push("ice","replaces");break;case m.UPDATE:this.ua.configuration.session_timers&&s.push("timer"),r&&s.push("ice"),s.push("replaces")}if(s.push("outbound"),this.method===m.OPTIONS?(l+="Allow: ".concat(m.ALLOWED_METHODS,"\r\n"),l+="Accept: ".concat(m.ACCEPTED_BODY_TYPES,"\r\n")):405===e?l+="Allow: ".concat(m.ALLOWED_METHODS,"\r\n"):415===e&&(l+="Accept: ".concat(m.ACCEPTED_BODY_TYPES,"\r\n")),l+="Supported: ".concat(s,"\r\n"),r){var C=_.str_utf8_length(r);l+="Content-Type: application/sdp\r\n",l+="Content-Length: ".concat(C,"\r\n\r\n"),l+=r}else l+="Content-Length: ".concat(0,"\r\n\r\n");this.server_transaction.receiveResponse(e,l,i,o)}},{key:"reply_sl",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=this.getHeaders("via");if(!e||e<100||e>699)throw new TypeError("Invalid status_code: ".concat(e));if(t&&"string"!=typeof t&&!(t instanceof String))throw new TypeError("Invalid reason_phrase: ".concat(t));t=t||m.REASON_PHRASE[e]||"";var r,i="SIP/2.0 ".concat(e," ").concat(t,"\r\n"),o=u(n);try{for(o.s();!(r=o.n()).done;){var s=r.value;i+="Via: ".concat(s,"\r\n")}}catch(e){o.e(e)}finally{o.f()}var a=this.getHeader("To");!this.to_tag&&e>100?a+=";tag=".concat(_.newTag()):this.to_tag&&!this.s("to").hasParam("tag")&&(a+=";tag=".concat(this.to_tag)),i+="To: ".concat(a,"\r\n"),i+="From: ".concat(this.getHeader("From"),"\r\n"),i+="Call-ID: ".concat(this.call_id,"\r\n"),i+="CSeq: ".concat(this.cseq," ").concat(this.method,"\r\n"),i+="Content-Length: ".concat(0,"\r\n\r\n"),this.transport.send(i)}}]),n}(w),A=function(e){i(n,e);var t=s(n);function n(){var e;return d(this,n),(e=t.call(this)).headers={},e.status_code=null,e.reason_phrase=null,e}return n}(w);e.exports={OutgoingRequest:C,InitialOutgoingInviteRequest:T,IncomingRequest:S,IncomingResponse:A}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&d(e,t)}function s(e){var t=c();return function(){var n,r=h(e);if(t){var i=h(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return a(this,n)}}function a(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function l(e){var t="function"==typeof Map?new Map:void 0;return(l=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return u(e,arguments,h(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),d(r,e)})(e)}function u(e,t,n){return(u=c()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&d(i,n.prototype),i}).apply(null,arguments)}function c(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function d(e,t){return(d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var f=function(e){o(n,e);var t=s(n);function n(e,r){var o;return i(this,n),(o=t.call(this)).code=1,o.name="CONFIGURATION_ERROR",o.parameter=e,o.value=r,o.message=o.value?"Invalid value ".concat(JSON.stringify(o.value),' for parameter "').concat(o.parameter,'"'):"Missing parameter: ".concat(o.parameter),o}return n}(l(Error)),p=function(e){o(n,e);var t=s(n);function n(e){var r;return i(this,n),(r=t.call(this)).code=2,r.name="INVALID_STATE_ERROR",r.status=e,r.message="Invalid status: ".concat(e),r}return n}(l(Error)),g=function(e){o(n,e);var t=s(n);function n(e){var r;return i(this,n),(r=t.call(this)).code=3,r.name="NOT_SUPPORTED_ERROR",r.message=e,r}return n}(l(Error)),m=function(e){o(n,e);var t=s(n);function n(e){var r;return i(this,n),(r=t.call(this)).code=4,r.name="NOT_READY_ERROR",r.message=e,r}return n}(l(Error));e.exports={ConfigurationError:f,InvalidStateError:p,NotSupportedError:g,NotReadyError:m}},function(e,t,n){"use strict";var r,i="object"==typeof Reflect?Reflect:null,o=i&&"function"==typeof i.apply?i.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};r=i&&"function"==typeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function a(){a.init.call(this)}e.exports=a,e.exports.once=function(e,t){return new Promise((function(n,r){function i(n){e.removeListener(t,o),r(n)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",i),n([].slice.call(arguments))}_(e,t,o,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&_(e,"error",t,n)}(e,i,{once:!0})}))},a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var l=10;function u(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function c(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function d(e,t,n,r){var i,o,s,a;if(u(n),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),s=o[t]),void 0===s)s=o[t]=n,++e._eventsCount;else if("function"==typeof s?s=o[t]=r?[n,s]:[s,n]:r?s.unshift(n):s.push(n),(i=c(e))>0&&s.length>i&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=s.length,a=l,console&&console.warn&&console.warn(a)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=h.bind(r);return i.listener=n,r.wrapFn=i,i}function p(e,t,n){var r=e._events;if(void 0===r)return[];var i=r[t];return void 0===i?[]:"function"==typeof i?n?[i.listener||i]:[i]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(s=t[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)o(l,this,t);else{var u=l.length,c=m(l,u);for(n=0;n=0;o--)if(n[o]===t||n[o].listener===t){s=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},a.prototype.listeners=function(e){return p(this,e,!0)},a.prototype.rawListeners=function(e){return p(this,e,!1)},a.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},a.prototype.listenerCount=g,a.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){"use strict";function r(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,a=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,s=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw s}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(o(this,e),!r)throw new TypeError('missing or invalid "host" parameter');for(var u in this._parameters={},this._headers={},this._scheme=t||l.SIP,this._user=n,this._host=r,this._port=i,s)Object.prototype.hasOwnProperty.call(s,u)&&this.setParam(u,s[u]);for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&this.setHeader(c,a[c])}return a(e,null,[{key:"parse",value:function(e){return-1!==(e=c.parse(e,"SIP_URI"))?e:void 0}}]),a(e,[{key:"setParam",value:function(e,t){e&&(this._parameters[e.toLowerCase()]=null==t?null:t.toString())}},{key:"getParam",value:function(e){if(e)return this._parameters[e.toLowerCase()]}},{key:"hasParam",value:function(e){if(e)return!!this._parameters.hasOwnProperty(e.toLowerCase())}},{key:"deleteParam",value:function(e){if(e=e.toLowerCase(),this._parameters.hasOwnProperty(e)){var t=this._parameters[e];return delete this._parameters[e],t}}},{key:"clearParams",value:function(){this._parameters={}}},{key:"setHeader",value:function(e,t){this._headers[u.headerize(e)]=Array.isArray(t)?t:[t]}},{key:"getHeader",value:function(e){if(e)return this._headers[u.headerize(e)]}},{key:"hasHeader",value:function(e){if(e)return!!this._headers.hasOwnProperty(u.headerize(e))}},{key:"deleteHeader",value:function(e){if(e=u.headerize(e),this._headers.hasOwnProperty(e)){var t=this._headers[e];return delete this._headers[e],t}}},{key:"clearHeaders",value:function(){this._headers={}}},{key:"clone",value:function(){return new e(this._scheme,this._user,this._host,this._port,JSON.parse(JSON.stringify(this._parameters)),JSON.parse(JSON.stringify(this._headers)))}},{key:"toString",value:function(){var e=[],t="".concat(this._scheme,":");for(var n in this._user&&(t+="".concat(u.escapeUser(this._user),"@")),t+=this._host,(this._port||0===this._port)&&(t+=":".concat(this._port)),this._parameters)Object.prototype.hasOwnProperty.call(this._parameters,n)&&(t+=";".concat(n),null!==this._parameters[n]&&(t+="=".concat(this._parameters[n])));for(var i in this._headers)if(Object.prototype.hasOwnProperty.call(this._headers,i)){var o,s=r(this._headers[i]);try{for(s.s();!(o=s.n()).done;){var a=o.value;e.push("".concat(i,"=").concat(a))}}catch(e){s.e(e)}finally{s.f()}}return e.length>0&&(t+="?".concat(e.join("&"))),t}},{key:"toAor",value:function(e){var t="".concat(this._scheme,":");return this._user&&(t+="".concat(u.escapeUser(this._user),"@")),t+=this._host,e&&(this._port||0===this._port)&&(t+=":".concat(this._port)),t}},{key:"scheme",get:function(){return this._scheme},set:function(e){this._scheme=e.toLowerCase()}},{key:"user",get:function(){return this._user},set:function(e){this._user=e}},{key:"host",get:function(){return this._host},set:function(e){this._host=e.toLowerCase()}},{key:"port",get:function(){return this._port},set:function(e){this._port=0===e?e:parseInt(e,10)||null}}]),e}()},function(e,t,n){"use strict";var r={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};r.localCName=r.generateIdentifier(),r.splitLines=function(e){return e.trim().split("\n").map((function(e){return e.trim()}))},r.splitSections=function(e){return e.split("\nm=").map((function(e,t){return(t>0?"m="+e:e).trim()+"\r\n"}))},r.getDescription=function(e){var t=r.splitSections(e);return t&&t[0]},r.getMediaSections=function(e){var t=r.splitSections(e);return t.shift(),t},r.matchPrefix=function(e,t){return r.splitLines(e).filter((function(e){return 0===e.indexOf(t)}))},r.parseCandidate=function(e){for(var t,n={foundation:(t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" "))[0],component:parseInt(t[1],10),protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]},r=8;r0?t[0].split("/")[1]:"sendrecv",uri:t[1]}},r.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+"\r\n"},r.parseFmtp=function(e){for(var t,n={},r=e.substr(e.indexOf(" ")+1).split(";"),i=0;i-1?(n.attribute=e.substr(t+1,r-t-1),n.value=e.substr(r+1)):n.attribute=e.substr(t+1),n},r.parseSsrcGroup=function(e){var t=e.substr(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((function(e){return parseInt(e,10)}))}},r.getMid=function(e){var t=r.matchPrefix(e,"a=mid:")[0];if(t)return t.substr(6)},r.parseFingerprint=function(e){var t=e.substr(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1]}},r.getDtlsParameters=function(e,t){return{role:"auto",fingerprints:r.matchPrefix(e+t,"a=fingerprint:").map(r.parseFingerprint)}},r.writeDtlsParameters=function(e,t){var n="a=setup:"+t+"\r\n";return e.fingerprints.forEach((function(e){n+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),n},r.parseCryptoLine=function(e){var t=e.substr(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},r.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?r.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},r.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;var t=e.substr(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},r.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},r.getCryptoParameters=function(e,t){return r.matchPrefix(e+t,"a=crypto:").map(r.parseCryptoLine)},r.getIceParameters=function(e,t){var n=r.matchPrefix(e+t,"a=ice-ufrag:")[0],i=r.matchPrefix(e+t,"a=ice-pwd:")[0];return n&&i?{usernameFragment:n.substr(12),password:i.substr(10)}:null},r.writeIceParameters=function(e){return"a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n"},r.parseRtpParameters=function(e){for(var t={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},n=r.splitLines(e)[0].split(" "),i=3;i0?"9":"0",n+=" UDP/TLS/RTP/SAVPF ",n+=t.codecs.map((function(e){return void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType})).join(" ")+"\r\n",n+="c=IN IP4 0.0.0.0\r\n",n+="a=rtcp:9 IN IP4 0.0.0.0\r\n",t.codecs.forEach((function(e){n+=r.writeRtpMap(e),n+=r.writeFmtp(e),n+=r.writeRtcpFb(e)}));var i=0;return t.codecs.forEach((function(e){e.maxptime>i&&(i=e.maxptime)})),i>0&&(n+="a=maxptime:"+i+"\r\n"),n+="a=rtcp-mux\r\n",t.headerExtensions&&t.headerExtensions.forEach((function(e){n+=r.writeExtmap(e)})),n},r.parseRtpEncodingParameters=function(e){var t,n=[],i=r.parseRtpParameters(e),o=-1!==i.fecMechanisms.indexOf("RED"),s=-1!==i.fecMechanisms.indexOf("ULPFEC"),a=r.matchPrefix(e,"a=ssrc:").map((function(e){return r.parseSsrcMedia(e)})).filter((function(e){return"cname"===e.attribute})),l=a.length>0&&a[0].ssrc,u=r.matchPrefix(e,"a=ssrc-group:FID").map((function(e){return e.substr(17).split(" ").map((function(e){return parseInt(e,10)}))}));u.length>0&&u[0].length>1&&u[0][0]===l&&(t=u[0][1]),i.codecs.forEach((function(e){if("RTX"===e.name.toUpperCase()&&e.parameters.apt){var r={ssrc:l,codecPayloadType:parseInt(e.parameters.apt,10)};l&&t&&(r.rtx={ssrc:t}),n.push(r),o&&((r=JSON.parse(JSON.stringify(r))).fec={ssrc:l,mechanism:s?"red+ulpfec":"red"},n.push(r))}})),0===n.length&&l&&n.push({ssrc:l});var c=r.matchPrefix(e,"b=");return c.length&&(c=0===c[0].indexOf("b=TIAS:")?parseInt(c[0].substr(7),10):0===c[0].indexOf("b=AS:")?1e3*parseInt(c[0].substr(5),10)*.95-16e3:void 0,n.forEach((function(e){e.maxBitrate=c}))),n},r.parseRtcpParameters=function(e){var t={},n=r.matchPrefix(e,"a=ssrc:").map((function(e){return r.parseSsrcMedia(e)})).filter((function(e){return"cname"===e.attribute}))[0];n&&(t.cname=n.value,t.ssrc=n.ssrc);var i=r.matchPrefix(e,"a=rtcp-rsize");t.reducedSize=i.length>0,t.compound=0===i.length;var o=r.matchPrefix(e,"a=rtcp-mux");return t.mux=o.length>0,t},r.parseMsid=function(e){var t,n=r.matchPrefix(e,"a=msid:");if(1===n.length)return{stream:(t=n[0].substr(7).split(" "))[0],track:t[1]};var i=r.matchPrefix(e,"a=ssrc:").map((function(e){return r.parseSsrcMedia(e)})).filter((function(e){return"msid"===e.attribute}));return i.length>0?{stream:(t=i[0].value.split(" "))[0],track:t[1]}:void 0},r.parseSctpDescription=function(e){var t,n=r.parseMLine(e),i=r.matchPrefix(e,"a=max-message-size:");i.length>0&&(t=parseInt(i[0].substr(19),10)),isNaN(t)&&(t=65536);var o=r.matchPrefix(e,"a=sctp-port:");if(o.length>0)return{port:parseInt(o[0].substr(12),10),protocol:n.fmt,maxMessageSize:t};if(r.matchPrefix(e,"a=sctpmap:").length>0){var s=r.matchPrefix(e,"a=sctpmap:")[0].substr(10).split(" ");return{port:parseInt(s[0],10),protocol:s[1],maxMessageSize:t}}},r.writeSctpDescription=function(e,t){var n=[];return n="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&n.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),n.join("")},r.generateSessionId=function(){return Math.random().toString().substr(2,21)},r.writeSessionBoilerplate=function(e,t,n){var i=void 0!==t?t:2;return"v=0\r\no="+(n||"thisisadapterortc")+" "+(e||r.generateSessionId())+" "+i+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},r.writeMediaSection=function(e,t,n,i){var o=r.writeRtpDescription(e.kind,t);if(o+=r.writeIceParameters(e.iceGatherer.getLocalParameters()),o+=r.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),"offer"===n?"actpass":"active"),o+="a=mid:"+e.mid+"\r\n",e.direction?o+="a="+e.direction+"\r\n":e.rtpSender&&e.rtpReceiver?o+="a=sendrecv\r\n":e.rtpSender?o+="a=sendonly\r\n":e.rtpReceiver?o+="a=recvonly\r\n":o+="a=inactive\r\n",e.rtpSender){var s="msid:"+i.id+" "+e.rtpSender.track.id+"\r\n";o+="a="+s,o+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" "+s,e.sendEncodingParameters[0].rtx&&(o+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" "+s,o+="a=ssrc-group:FID "+e.sendEncodingParameters[0].ssrc+" "+e.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return o+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" cname:"+r.localCName+"\r\n",e.rtpSender&&e.sendEncodingParameters[0].rtx&&(o+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" cname:"+r.localCName+"\r\n"),o},r.getDirection=function(e,t){for(var n=r.splitLines(e),i=0;i=100&&n<=199)switch(this.state){case w.STATUS_CALLING:this.stateChanged(w.STATUS_PROCEEDING),this.eventHandlers.onReceiveResponse(e);break;case w.STATUS_PROCEEDING:this.eventHandlers.onReceiveResponse(e)}else if(n>=200&&n<=299)switch(this.state){case w.STATUS_CALLING:case w.STATUS_PROCEEDING:this.stateChanged(w.STATUS_ACCEPTED),this.M=setTimeout((function(){t.timer_M()}),_.TIMER_M),this.eventHandlers.onReceiveResponse(e);break;case w.STATUS_ACCEPTED:this.eventHandlers.onReceiveResponse(e)}else if(n>=300&&n<=699)switch(this.state){case w.STATUS_CALLING:case w.STATUS_PROCEEDING:this.stateChanged(w.STATUS_COMPLETED),this.sendACK(e),this.eventHandlers.onReceiveResponse(e);break;case w.STATUS_COMPLETED:this.sendACK(e)}}},{key:"C",get:function(){return w}}]),n}(f),E=function(e){a(n,e);var t=u(n);function n(e,r,o,s){var a;i(this,n),(a=t.call(this)).id="z9hG4bK".concat(Math.floor(1e7*Math.random())),a.transport=r,a.request=o,a.eventHandlers=s;var l="SIP/2.0/".concat(r.via_transport);return l+=" ".concat(e.configuration.via_host,";branch=").concat(a.id),a.request.setHeader("via",l),a}return s(n,[{key:"send",value:function(){this.transport.send(this.request)||this.onTransportError()}},{key:"onTransportError",value:function(){b.debug("transport error occurred for transaction ".concat(this.id)),this.eventHandlers.onTransportError()}},{key:"C",get:function(){return w}}]),n}(f),I=function(e){a(n,e);var t=u(n);function n(e,r,o){var s;return i(this,n),(s=t.call(this)).type=w.NON_INVITE_SERVER,s.id=o.via_branch,s.ua=e,s.transport=r,s.request=o,s.last_response="",o.server_transaction=d(s),s.state=w.STATUS_TRYING,e.newTransaction(d(s)),s}return s(n,[{key:"stateChanged",value:function(e){this.state=e,this.emit("stateChanged")}},{key:"timer_J",value:function(){C.debug("Timer J expired for transaction ".concat(this.id)),this.stateChanged(w.STATUS_TERMINATED),this.ua.destroyTransaction(this)}},{key:"onTransportError",value:function(){this.transportError||(this.transportError=!0,C.debug("transport error occurred, deleting transaction ".concat(this.id)),clearTimeout(this.J),this.stateChanged(w.STATUS_TERMINATED),this.ua.destroyTransaction(this))}},{key:"receiveResponse",value:function(e,t,n,r){var i=this;if(100===e)switch(this.state){case w.STATUS_TRYING:this.stateChanged(w.STATUS_PROCEEDING),this.transport.send(t)||this.onTransportError();break;case w.STATUS_PROCEEDING:this.last_response=t,this.transport.send(t)?n&&n():(this.onTransportError(),r&&r())}else if(e>=200&&e<=699)switch(this.state){case w.STATUS_TRYING:case w.STATUS_PROCEEDING:this.stateChanged(w.STATUS_COMPLETED),this.last_response=t,this.J=setTimeout((function(){i.timer_J()}),_.TIMER_J),this.transport.send(t)?n&&n():(this.onTransportError(),r&&r())}}},{key:"C",get:function(){return w}}]),n}(f),R=function(e){a(n,e);var t=u(n);function n(e,r,o){var s;return i(this,n),(s=t.call(this)).type=w.INVITE_SERVER,s.id=o.via_branch,s.ua=e,s.transport=r,s.request=o,s.last_response="",o.server_transaction=d(s),s.state=w.STATUS_PROCEEDING,e.newTransaction(d(s)),s.resendProvisionalTimer=null,o.reply(100),s}return s(n,[{key:"stateChanged",value:function(e){this.state=e,this.emit("stateChanged")}},{key:"timer_H",value:function(){T.debug("Timer H expired for transaction ".concat(this.id)),this.state===w.STATUS_COMPLETED&&T.debug("ACK not received, dialog will be terminated"),this.stateChanged(w.STATUS_TERMINATED),this.ua.destroyTransaction(this)}},{key:"timer_I",value:function(){this.stateChanged(w.STATUS_TERMINATED),this.ua.destroyTransaction(this)}},{key:"timer_L",value:function(){T.debug("Timer L expired for transaction ".concat(this.id)),this.state===w.STATUS_ACCEPTED&&(this.stateChanged(w.STATUS_TERMINATED),this.ua.destroyTransaction(this))}},{key:"onTransportError",value:function(){this.transportError||(this.transportError=!0,T.debug("transport error occurred, deleting transaction ".concat(this.id)),null!==this.resendProvisionalTimer&&(clearInterval(this.resendProvisionalTimer),this.resendProvisionalTimer=null),clearTimeout(this.L),clearTimeout(this.H),clearTimeout(this.I),this.stateChanged(w.STATUS_TERMINATED),this.ua.destroyTransaction(this))}},{key:"resend_provisional",value:function(){this.transport.send(this.last_response)||this.onTransportError()}},{key:"receiveResponse",value:function(e,t,n,r){var i=this;if(e>=100&&e<=199)switch(this.state){case w.STATUS_PROCEEDING:this.transport.send(t)||this.onTransportError(),this.last_response=t}if(e>100&&e<=199&&this.state===w.STATUS_PROCEEDING)null===this.resendProvisionalTimer&&(this.resendProvisionalTimer=setInterval((function(){i.resend_provisional()}),_.PROVISIONAL_RESPONSE_INTERVAL));else if(e>=200&&e<=299)switch(this.state){case w.STATUS_PROCEEDING:this.stateChanged(w.STATUS_ACCEPTED),this.last_response=t,this.L=setTimeout((function(){i.timer_L()}),_.TIMER_L),null!==this.resendProvisionalTimer&&(clearInterval(this.resendProvisionalTimer),this.resendProvisionalTimer=null);case w.STATUS_ACCEPTED:this.transport.send(t)?n&&n():(this.onTransportError(),r&&r())}else if(e>=300&&e<=699)switch(this.state){case w.STATUS_PROCEEDING:null!==this.resendProvisionalTimer&&(clearInterval(this.resendProvisionalTimer),this.resendProvisionalTimer=null),this.transport.send(t)?(this.stateChanged(w.STATUS_COMPLETED),this.H=setTimeout((function(){i.timer_H()}),_.TIMER_H),n&&n()):(this.onTransportError(),r&&r())}}},{key:"C",get:function(){return w}}]),n}(f);e.exports={C:w,NonInviteClientTransaction:S,InviteClientTransaction:A,AckClientTransaction:E,NonInviteServerTransaction:I,InviteServerTransaction:R,checkTransaction:function(e,t){var n,r=e._transactions;switch(t.method){case g.INVITE:if(n=r.ist[t.via_branch]){switch(n.state){case w.STATUS_PROCEEDING:n.transport.send(n.last_response)}return!0}break;case g.ACK:if(!(n=r.ist[t.via_branch]))return!1;if(n.state===w.STATUS_ACCEPTED)return!1;if(n.state===w.STATUS_COMPLETED)return n.state=w.STATUS_CONFIRMED,n.I=setTimeout((function(){n.timer_I()}),_.TIMER_I),!0;break;case g.CANCEL:return(n=r.ist[t.via_branch])?(t.reply_sl(200),n.state!==w.STATUS_PROCEEDING):(t.reply_sl(481),!0);default:if(n=r.nist[t.via_branch]){switch(n.state){case w.STATUS_TRYING:break;case w.STATUS_PROCEEDING:case w.STATUS_COMPLETED:n.transport.send(n.last_response)}return!0}}}}},function(e,t,n){"use strict";var r=n(17),i=n(0),o=n(5),s=n(2),a=n(33),l=n(7),u=n(14),c=n(3),d=n(52);n(15)("JsSIP")("version %s",r.version),e.exports={C:i,Exceptions:o,Utils:s,UA:a,URI:l,NameAddrHeader:u,WebSocketInterface:d,Grammar:c,debug:n(15),get name(){return r.title},get version(){return r.version}}},function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(e){r=s}}();var l,u=[],c=!1,d=-1;function h(){c&&l&&(c=!1,l.length?u=l.concat(u):d=-1,u.length&&f())}function f(){if(!c){var e=a(h);c=!0;for(var t=u.length;t;){for(l=u,u=[];++d1)for(var n=1;n"),this._parameters)Object.prototype.hasOwnProperty.call(this._parameters,t)&&(e+=";".concat(t),null!==this._parameters[t]&&(e+="=".concat(this._parameters[t])));return e}},{key:"uri",get:function(){return this._uri}},{key:"display_name",get:function(){return this._display_name},set:function(e){this._display_name=0===e?"0":e}}]),e}()},function(e,t,n){(function(r){t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;t.splice(1,0,n,"color: inherit");let r=0,i=0;t[0].replace(/%[a-zA-Z%]/g,e=>{"%%"!==e&&(r++,"%c"===e&&(i=r))}),t.splice(i,0,n)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}!e&&void 0!==r&&"env"in r&&(e=r.env.DEBUG);return e},t.useColors=function(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=n(34)(t);const{formatters:i}=e.exports;i.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}).call(this,n(12))},function(e,t,n){(function(e,r){var i; -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */(function(){var o="Expected a function",s="__lodash_placeholder__",a=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],l="[object Arguments]",u="[object Array]",c="[object Boolean]",d="[object Date]",h="[object Error]",f="[object Function]",p="[object GeneratorFunction]",g="[object Map]",m="[object Number]",_="[object Object]",v="[object RegExp]",y="[object Set]",b="[object String]",C="[object Symbol]",T="[object WeakMap]",w="[object ArrayBuffer]",S="[object DataView]",A="[object Float32Array]",E="[object Float64Array]",I="[object Int8Array]",R="[object Int16Array]",k="[object Int32Array]",x="[object Uint8Array]",M="[object Uint16Array]",D="[object Uint32Array]",O=/\b__p \+= '';/g,L=/\b(__p \+=) '' \+/g,P=/(__e\(.*?\)|\b__t\)) \+\n'';/g,N=/&(?:amp|lt|gt|quot|#39);/g,j=/[&<>"']/g,U=RegExp(N.source),F=RegExp(j.source),q=/<%-([\s\S]+?)%>/g,H=/<%([\s\S]+?)%>/g,z=/<%=([\s\S]+?)%>/g,G=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,V=/^\w*$/,B=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,W=/[\\^$.*+?()[\]{}|]/g,Y=RegExp(W.source),K=/^\s+|\s+$/g,J=/^\s+/,Q=/\s+$/,$=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Z=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,ee=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,te=/\\(\\)?/g,ne=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,re=/\w*$/,ie=/^[-+]0x[0-9a-f]+$/i,oe=/^0b[01]+$/i,se=/^\[object .+?Constructor\]$/,ae=/^0o[0-7]+$/i,le=/^(?:0|[1-9]\d*)$/,ue=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ce=/($^)/,de=/['\n\r\u2028\u2029\\]/g,he="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",fe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",pe="[\\ud800-\\udfff]",ge="["+fe+"]",me="["+he+"]",_e="\\d+",ve="[\\u2700-\\u27bf]",ye="[a-z\\xdf-\\xf6\\xf8-\\xff]",be="[^\\ud800-\\udfff"+fe+_e+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",Ce="\\ud83c[\\udffb-\\udfff]",Te="[^\\ud800-\\udfff]",we="(?:\\ud83c[\\udde6-\\uddff]){2}",Se="[\\ud800-\\udbff][\\udc00-\\udfff]",Ae="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Ee="(?:"+ye+"|"+be+")",Ie="(?:"+Ae+"|"+be+")",Re="(?:"+me+"|"+Ce+")"+"?",ke="[\\ufe0e\\ufe0f]?"+Re+("(?:\\u200d(?:"+[Te,we,Se].join("|")+")[\\ufe0e\\ufe0f]?"+Re+")*"),xe="(?:"+[ve,we,Se].join("|")+")"+ke,Me="(?:"+[Te+me+"?",me,we,Se,pe].join("|")+")",De=RegExp("['’]","g"),Oe=RegExp(me,"g"),Le=RegExp(Ce+"(?="+Ce+")|"+Me+ke,"g"),Pe=RegExp([Ae+"?"+ye+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[ge,Ae,"$"].join("|")+")",Ie+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[ge,Ae+Ee,"$"].join("|")+")",Ae+"?"+Ee+"+(?:['’](?:d|ll|m|re|s|t|ve))?",Ae+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",_e,xe].join("|"),"g"),Ne=RegExp("[\\u200d\\ud800-\\udfff"+he+"\\ufe0e\\ufe0f]"),je=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Ue=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Fe=-1,qe={};qe[A]=qe[E]=qe[I]=qe[R]=qe[k]=qe[x]=qe["[object Uint8ClampedArray]"]=qe[M]=qe[D]=!0,qe[l]=qe[u]=qe[w]=qe[c]=qe[S]=qe[d]=qe[h]=qe[f]=qe[g]=qe[m]=qe[_]=qe[v]=qe[y]=qe[b]=qe[T]=!1;var He={};He[l]=He[u]=He[w]=He[S]=He[c]=He[d]=He[A]=He[E]=He[I]=He[R]=He[k]=He[g]=He[m]=He[_]=He[v]=He[y]=He[b]=He[C]=He[x]=He["[object Uint8ClampedArray]"]=He[M]=He[D]=!0,He[h]=He[f]=He[T]=!1;var ze={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ge=parseFloat,Ve=parseInt,Be="object"==typeof e&&e&&e.Object===Object&&e,We="object"==typeof self&&self&&self.Object===Object&&self,Ye=Be||We||Function("return this")(),Ke=t&&!t.nodeType&&t,Je=Ke&&"object"==typeof r&&r&&!r.nodeType&&r,Qe=Je&&Je.exports===Ke,$e=Qe&&Be.process,Ze=function(){try{var e=Je&&Je.require&&Je.require("util").types;return e||$e&&$e.binding&&$e.binding("util")}catch(e){}}(),Xe=Ze&&Ze.isArrayBuffer,et=Ze&&Ze.isDate,tt=Ze&&Ze.isMap,nt=Ze&&Ze.isRegExp,rt=Ze&&Ze.isSet,it=Ze&&Ze.isTypedArray;function ot(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function st(e,t,n,r){for(var i=-1,o=null==e?0:e.length;++i-1}function ht(e,t,n){for(var r=-1,i=null==e?0:e.length;++r-1;);return n}function Lt(e,t){for(var n=e.length;n--&&Ct(t,e[n],0)>-1;);return n}function Pt(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}var Nt=Et({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),jt=Et({"&":"&","<":"<",">":">",'"':""","'":"'"});function Ut(e){return"\\"+ze[e]}function Ft(e){return Ne.test(e)}function qt(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}function Ht(e,t){return function(n){return e(t(n))}}function zt(e,t){for(var n=-1,r=e.length,i=0,o=[];++n",""":'"',"'":"'"});var Kt=function e(t){var n,r=(t=null==t?Ye:Kt.defaults(Ye.Object(),t,Kt.pick(Ye,Ue))).Array,i=t.Date,he=t.Error,fe=t.Function,pe=t.Math,ge=t.Object,me=t.RegExp,_e=t.String,ve=t.TypeError,ye=r.prototype,be=fe.prototype,Ce=ge.prototype,Te=t["__core-js_shared__"],we=be.toString,Se=Ce.hasOwnProperty,Ae=0,Ee=(n=/[^.]+$/.exec(Te&&Te.keys&&Te.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",Ie=Ce.toString,Re=we.call(ge),ke=Ye._,xe=me("^"+we.call(Se).replace(W,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Me=Qe?t.Buffer:void 0,Le=t.Symbol,Ne=t.Uint8Array,ze=Me?Me.allocUnsafe:void 0,Be=Ht(ge.getPrototypeOf,ge),We=ge.create,Ke=Ce.propertyIsEnumerable,Je=ye.splice,$e=Le?Le.isConcatSpreadable:void 0,Ze=Le?Le.iterator:void 0,vt=Le?Le.toStringTag:void 0,Et=function(){try{var e=Xi(ge,"defineProperty");return e({},"",{}),e}catch(e){}}(),Jt=t.clearTimeout!==Ye.clearTimeout&&t.clearTimeout,Qt=i&&i.now!==Ye.Date.now&&i.now,$t=t.setTimeout!==Ye.setTimeout&&t.setTimeout,Zt=pe.ceil,Xt=pe.floor,en=ge.getOwnPropertySymbols,tn=Me?Me.isBuffer:void 0,nn=t.isFinite,rn=ye.join,on=Ht(ge.keys,ge),sn=pe.max,an=pe.min,ln=i.now,un=t.parseInt,cn=pe.random,dn=ye.reverse,hn=Xi(t,"DataView"),fn=Xi(t,"Map"),pn=Xi(t,"Promise"),gn=Xi(t,"Set"),mn=Xi(t,"WeakMap"),_n=Xi(ge,"create"),vn=mn&&new mn,yn={},bn=Io(hn),Cn=Io(fn),Tn=Io(pn),wn=Io(gn),Sn=Io(mn),An=Le?Le.prototype:void 0,En=An?An.valueOf:void 0,In=An?An.toString:void 0;function Rn(e){if(Vs(e)&&!Os(e)&&!(e instanceof Dn)){if(e instanceof Mn)return e;if(Se.call(e,"__wrapped__"))return Ro(e)}return new Mn(e)}var kn=function(){function e(){}return function(t){if(!Gs(t))return{};if(We)return We(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function xn(){}function Mn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function Dn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function On(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function Qn(e,t,n,r,i,o){var s,a=1&t,u=2&t,h=4&t;if(n&&(s=i?n(e,r,i,o):n(e)),void 0!==s)return s;if(!Gs(e))return e;var T=Os(e);if(T){if(s=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&Se.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!a)return _i(e,s)}else{var O=no(e),L=O==f||O==p;if(js(e))return di(e,a);if(O==_||O==l||L&&!i){if(s=u||L?{}:io(e),!a)return u?function(e,t){return vi(e,to(e),t)}(e,function(e,t){return e&&vi(t,Ca(t),e)}(s,e)):function(e,t){return vi(e,eo(e),t)}(e,Wn(s,e))}else{if(!He[O])return i?e:{};s=function(e,t,n){var r=e.constructor;switch(t){case w:return hi(e);case c:case d:return new r(+e);case S:return function(e,t){var n=t?hi(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case A:case E:case I:case R:case k:case x:case"[object Uint8ClampedArray]":case M:case D:return fi(e,n);case g:return new r;case m:case b:return new r(e);case v:return function(e){var t=new e.constructor(e.source,re.exec(e));return t.lastIndex=e.lastIndex,t}(e);case y:return new r;case C:return i=e,En?ge(En.call(i)):{}}var i}(e,O,a)}}o||(o=new jn);var P=o.get(e);if(P)return P;o.set(e,s),Js(e)?e.forEach((function(r){s.add(Qn(r,t,n,r,e,o))})):Bs(e)&&e.forEach((function(r,i){s.set(i,Qn(r,t,n,i,e,o))}));var N=T?void 0:(h?u?Wi:Bi:u?Ca:ba)(e);return at(N||e,(function(r,i){N&&(r=e[i=r]),Gn(s,i,Qn(r,t,n,i,e,o))})),s}function $n(e,t,n){var r=n.length;if(null==e)return!r;for(e=ge(e);r--;){var i=n[r],o=t[i],s=e[i];if(void 0===s&&!(i in e)||!o(s))return!1}return!0}function Zn(e,t,n){if("function"!=typeof e)throw new ve(o);return bo((function(){e.apply(void 0,n)}),t)}function Xn(e,t,n,r){var i=-1,o=dt,s=!0,a=e.length,l=[],u=t.length;if(!a)return l;n&&(t=ft(t,xt(n))),r?(o=ht,s=!1):t.length>=200&&(o=Dt,s=!1,t=new Nn(t));e:for(;++i-1},Ln.prototype.set=function(e,t){var n=this.__data__,r=Vn(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Pn.prototype.clear=function(){this.size=0,this.__data__={hash:new On,map:new(fn||Ln),string:new On}},Pn.prototype.delete=function(e){var t=$i(this,e).delete(e);return this.size-=t?1:0,t},Pn.prototype.get=function(e){return $i(this,e).get(e)},Pn.prototype.has=function(e){return $i(this,e).has(e)},Pn.prototype.set=function(e,t){var n=$i(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Nn.prototype.add=Nn.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Nn.prototype.has=function(e){return this.__data__.has(e)},jn.prototype.clear=function(){this.__data__=new Ln,this.size=0},jn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},jn.prototype.get=function(e){return this.__data__.get(e)},jn.prototype.has=function(e){return this.__data__.has(e)},jn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Ln){var r=n.__data__;if(!fn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Pn(r)}return n.set(e,t),this.size=n.size,this};var er=Ci(lr),tr=Ci(ur,!0);function nr(e,t){var n=!0;return er(e,(function(e,r,i){return n=!!t(e,r,i)})),n}function rr(e,t,n){for(var r=-1,i=e.length;++r0&&n(a)?t>1?or(a,t-1,n,r,i):pt(i,a):r||(i[i.length]=a)}return i}var sr=Ti(),ar=Ti(!0);function lr(e,t){return e&&sr(e,t,ba)}function ur(e,t){return e&&ar(e,t,ba)}function cr(e,t){return ct(t,(function(t){return qs(e[t])}))}function dr(e,t){for(var n=0,r=(t=ai(t,e)).length;null!=e&&nt}function gr(e,t){return null!=e&&Se.call(e,t)}function mr(e,t){return null!=e&&t in ge(e)}function _r(e,t,n){for(var i=n?ht:dt,o=e[0].length,s=e.length,a=s,l=r(s),u=1/0,c=[];a--;){var d=e[a];a&&t&&(d=ft(d,xt(t))),u=an(d.length,u),l[a]=!n&&(t||o>=120&&d.length>=120)?new Nn(a&&d):void 0}d=e[0];var h=-1,f=l[0];e:for(;++h=a)return l;var u=n[r];return l*("desc"==u?-1:1)}}return e.index-t.index}(e,t,n)}))}function Or(e,t,n){for(var r=-1,i=t.length,o={};++r-1;)a!==e&&Je.call(a,l,1),Je.call(e,l,1);return e}function Pr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==o){var o=i;so(i)?Je.call(e,i,1):Xr(e,i)}}return e}function Nr(e,t){return e+Xt(cn()*(t-e+1))}function jr(e,t){var n="";if(!e||t<1||t>9007199254740991)return n;do{t%2&&(n+=e),(t=Xt(t/2))&&(e+=e)}while(t);return n}function Ur(e,t){return Co(go(e,t,Wa),e+"")}function Fr(e){return Fn(ka(e))}function qr(e,t){var n=ka(e);return So(n,Jn(t,0,n.length))}function Hr(e,t,n,r){if(!Gs(e))return e;for(var i=-1,o=(t=ai(t,e)).length,s=o-1,a=e;null!=a&&++io?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var s=r(o);++i>>1,s=e[o];null!==s&&!$s(s)&&(n?s<=t:s=200){var u=t?null:ji(e);if(u)return Gt(u);s=!1,i=Dt,l=new Nn}else l=t?[]:a;e:for(;++r=r?e:Br(e,t,n)}var ci=Jt||function(e){return Ye.clearTimeout(e)};function di(e,t){if(t)return e.slice();var n=e.length,r=ze?ze(n):new e.constructor(n);return e.copy(r),r}function hi(e){var t=new e.constructor(e.byteLength);return new Ne(t).set(new Ne(e)),t}function fi(e,t){var n=t?hi(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function pi(e,t){if(e!==t){var n=void 0!==e,r=null===e,i=e==e,o=$s(e),s=void 0!==t,a=null===t,l=t==t,u=$s(t);if(!a&&!u&&!o&&e>t||o&&s&&l&&!a&&!u||r&&s&&l||!n&&l||!i)return 1;if(!r&&!o&&!u&&e1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(o=e.length>3&&"function"==typeof o?(i--,o):void 0,s&&ao(n[0],n[1],s)&&(o=i<3?void 0:o,i=1),t=ge(t);++r-1?i[o?t[s]:s]:void 0}}function Ii(e){return Vi((function(t){var n=t.length,r=n,i=Mn.prototype.thru;for(e&&t.reverse();r--;){var s=t[r];if("function"!=typeof s)throw new ve(o);if(i&&!a&&"wrapper"==Ki(s))var a=new Mn([],!0)}for(r=a?r:n;++r1&&y.reverse(),d&&ua))return!1;var u=o.get(e),c=o.get(t);if(u&&c)return u==t&&c==e;var d=-1,h=!0,f=2&n?new Nn:void 0;for(o.set(e,t),o.set(t,e);++d-1&&e%1==0&&e1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace($,"{\n/* [wrapped with "+t+"] */\n")}(r,function(e,t){return at(a,(function(n){var r="_."+n[0];t&n[1]&&!dt(e,r)&&e.push(r)})),e.sort()}(function(e){var t=e.match(Z);return t?t[1].split(X):[]}(r),n)))}function wo(e){var t=0,n=0;return function(){var r=ln(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function So(e,t){var n=-1,r=e.length,i=r-1;for(t=void 0===t?r:t;++n1?e[t-1]:void 0;return n="function"==typeof n?(e.pop(),n):void 0,Ko(e,n)}));function ts(e){var t=Rn(e);return t.__chain__=!0,t}function ns(e,t){return t(e)}var rs=Vi((function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,i=function(t){return Kn(t,e)};return!(t>1||this.__actions__.length)&&r instanceof Dn&&so(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:ns,args:[i],thisArg:void 0}),new Mn(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(i)}));var is=yi((function(e,t,n){Se.call(e,n)?++e[n]:Yn(e,n,1)}));var os=Ei(Do),ss=Ei(Oo);function as(e,t){return(Os(e)?at:er)(e,Qi(t,3))}function ls(e,t){return(Os(e)?lt:tr)(e,Qi(t,3))}var us=yi((function(e,t,n){Se.call(e,n)?e[n].push(t):Yn(e,n,[t])}));var cs=Ur((function(e,t,n){var i=-1,o="function"==typeof t,s=Ps(e)?r(e.length):[];return er(e,(function(e){s[++i]=o?ot(t,e,n):vr(e,t,n)})),s})),ds=yi((function(e,t,n){Yn(e,n,t)}));function hs(e,t){return(Os(e)?ft:Ir)(e,Qi(t,3))}var fs=yi((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var ps=Ur((function(e,t){if(null==e)return[];var n=t.length;return n>1&&ao(e,t[0],t[1])?t=[]:n>2&&ao(t[0],t[1],t[2])&&(t=[t[0]]),Dr(e,or(t,1),[])})),gs=Qt||function(){return Ye.Date.now()};function ms(e,t,n){return t=n?void 0:t,Fi(e,128,void 0,void 0,void 0,void 0,t=e&&null==t?e.length:t)}function _s(e,t){var n;if("function"!=typeof t)throw new ve(o);return e=ra(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}}var vs=Ur((function(e,t,n){var r=1;if(n.length){var i=zt(n,Ji(vs));r|=32}return Fi(e,r,t,n,i)})),ys=Ur((function(e,t,n){var r=3;if(n.length){var i=zt(n,Ji(ys));r|=32}return Fi(t,r,e,n,i)}));function bs(e,t,n){var r,i,s,a,l,u,c=0,d=!1,h=!1,f=!0;if("function"!=typeof e)throw new ve(o);function p(t){var n=r,o=i;return r=i=void 0,c=t,a=e.apply(o,n)}function g(e){return c=e,l=bo(_,t),d?p(e):a}function m(e){var n=e-u;return void 0===u||n>=t||n<0||h&&e-c>=s}function _(){var e=gs();if(m(e))return v(e);l=bo(_,function(e){var n=t-(e-u);return h?an(n,s-(e-c)):n}(e))}function v(e){return l=void 0,f&&r?p(e):(r=i=void 0,a)}function y(){var e=gs(),n=m(e);if(r=arguments,i=this,u=e,n){if(void 0===l)return g(u);if(h)return ci(l),l=bo(_,t),p(u)}return void 0===l&&(l=bo(_,t)),a}return t=oa(t)||0,Gs(n)&&(d=!!n.leading,s=(h="maxWait"in n)?sn(oa(n.maxWait)||0,t):s,f="trailing"in n?!!n.trailing:f),y.cancel=function(){void 0!==l&&ci(l),c=0,r=u=i=l=void 0},y.flush=function(){return void 0===l?a:v(gs())},y}var Cs=Ur((function(e,t){return Zn(e,1,t)})),Ts=Ur((function(e,t,n){return Zn(e,oa(t)||0,n)}));function ws(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new ve(o);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=e.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(ws.Cache||Pn),n}function Ss(e){if("function"!=typeof e)throw new ve(o);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}ws.Cache=Pn;var As=li((function(e,t){var n=(t=1==t.length&&Os(t[0])?ft(t[0],xt(Qi())):ft(or(t,1),xt(Qi()))).length;return Ur((function(r){for(var i=-1,o=an(r.length,n);++i=t})),Ds=yr(function(){return arguments}())?yr:function(e){return Vs(e)&&Se.call(e,"callee")&&!Ke.call(e,"callee")},Os=r.isArray,Ls=Xe?xt(Xe):function(e){return Vs(e)&&fr(e)==w};function Ps(e){return null!=e&&zs(e.length)&&!qs(e)}function Ns(e){return Vs(e)&&Ps(e)}var js=tn||ol,Us=et?xt(et):function(e){return Vs(e)&&fr(e)==d};function Fs(e){if(!Vs(e))return!1;var t=fr(e);return t==h||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Ys(e)}function qs(e){if(!Gs(e))return!1;var t=fr(e);return t==f||t==p||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Hs(e){return"number"==typeof e&&e==ra(e)}function zs(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Gs(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Vs(e){return null!=e&&"object"==typeof e}var Bs=tt?xt(tt):function(e){return Vs(e)&&no(e)==g};function Ws(e){return"number"==typeof e||Vs(e)&&fr(e)==m}function Ys(e){if(!Vs(e)||fr(e)!=_)return!1;var t=Be(e);if(null===t)return!0;var n=Se.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&we.call(n)==Re}var Ks=nt?xt(nt):function(e){return Vs(e)&&fr(e)==v};var Js=rt?xt(rt):function(e){return Vs(e)&&no(e)==y};function Qs(e){return"string"==typeof e||!Os(e)&&Vs(e)&&fr(e)==b}function $s(e){return"symbol"==typeof e||Vs(e)&&fr(e)==C}var Zs=it?xt(it):function(e){return Vs(e)&&zs(e.length)&&!!qe[fr(e)]};var Xs=Li(Er),ea=Li((function(e,t){return e<=t}));function ta(e){if(!e)return[];if(Ps(e))return Qs(e)?Wt(e):_i(e);if(Ze&&e[Ze])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Ze]());var t=no(e);return(t==g?qt:t==y?Gt:ka)(e)}function na(e){return e?(e=oa(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function ra(e){var t=na(e),n=t%1;return t==t?n?t-n:t:0}function ia(e){return e?Jn(ra(e),0,4294967295):0}function oa(e){if("number"==typeof e)return e;if($s(e))return NaN;if(Gs(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Gs(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(K,"");var n=oe.test(e);return n||ae.test(e)?Ve(e.slice(2),n?2:8):ie.test(e)?NaN:+e}function sa(e){return vi(e,Ca(e))}function aa(e){return null==e?"":$r(e)}var la=bi((function(e,t){if(ho(t)||Ps(t))vi(t,ba(t),e);else for(var n in t)Se.call(t,n)&&Gn(e,n,t[n])})),ua=bi((function(e,t){vi(t,Ca(t),e)})),ca=bi((function(e,t,n,r){vi(t,Ca(t),e,r)})),da=bi((function(e,t,n,r){vi(t,ba(t),e,r)})),ha=Vi(Kn);var fa=Ur((function(e,t){e=ge(e);var n=-1,r=t.length,i=r>2?t[2]:void 0;for(i&&ao(t[0],t[1],i)&&(r=1);++n1),t})),vi(e,Wi(e),n),r&&(n=Qn(n,7,zi));for(var i=t.length;i--;)Xr(n,t[i]);return n}));var Aa=Vi((function(e,t){return null==e?{}:function(e,t){return Or(e,t,(function(t,n){return ma(e,n)}))}(e,t)}));function Ea(e,t){if(null==e)return{};var n=ft(Wi(e),(function(e){return[e]}));return t=Qi(t),Or(e,n,(function(e,n){return t(e,n[0])}))}var Ia=Ui(ba),Ra=Ui(Ca);function ka(e){return null==e?[]:Mt(e,ba(e))}var xa=Si((function(e,t,n){return t=t.toLowerCase(),e+(n?Ma(t):t)}));function Ma(e){return Fa(aa(e).toLowerCase())}function Da(e){return(e=aa(e))&&e.replace(ue,Nt).replace(Oe,"")}var Oa=Si((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),La=Si((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Pa=wi("toLowerCase");var Na=Si((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var ja=Si((function(e,t,n){return e+(n?" ":"")+Fa(t)}));var Ua=Si((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),Fa=wi("toUpperCase");function qa(e,t,n){return e=aa(e),void 0===(t=n?void 0:t)?function(e){return je.test(e)}(e)?function(e){return e.match(Pe)||[]}(e):function(e){return e.match(ee)||[]}(e):e.match(t)||[]}var Ha=Ur((function(e,t){try{return ot(e,void 0,t)}catch(e){return Fs(e)?e:new he(e)}})),za=Vi((function(e,t){return at(t,(function(t){t=Eo(t),Yn(e,t,vs(e[t],e))})),e}));function Ga(e){return function(){return e}}var Va=Ii(),Ba=Ii(!0);function Wa(e){return e}function Ya(e){return wr("function"==typeof e?e:Qn(e,1))}var Ka=Ur((function(e,t){return function(n){return vr(n,e,t)}})),Ja=Ur((function(e,t){return function(n){return vr(e,n,t)}}));function Qa(e,t,n){var r=ba(t),i=cr(t,r);null!=n||Gs(t)&&(i.length||!r.length)||(n=t,t=e,e=this,i=cr(t,ba(t)));var o=!(Gs(n)&&"chain"in n&&!n.chain),s=qs(e);return at(i,(function(n){var r=t[n];e[n]=r,s&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__),i=n.__actions__=_i(this.__actions__);return i.push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,pt([this.value()],arguments))})})),e}function $a(){}var Za=Mi(ft),Xa=Mi(ut),el=Mi(_t);function tl(e){return lo(e)?At(Eo(e)):function(e){return function(t){return dr(t,e)}}(e)}var nl=Oi(),rl=Oi(!0);function il(){return[]}function ol(){return!1}var sl=xi((function(e,t){return e+t}),0),al=Ni("ceil"),ll=xi((function(e,t){return e/t}),1),ul=Ni("floor");var cl,dl=xi((function(e,t){return e*t}),1),hl=Ni("round"),fl=xi((function(e,t){return e-t}),0);return Rn.after=function(e,t){if("function"!=typeof t)throw new ve(o);return e=ra(e),function(){if(--e<1)return t.apply(this,arguments)}},Rn.ary=ms,Rn.assign=la,Rn.assignIn=ua,Rn.assignInWith=ca,Rn.assignWith=da,Rn.at=ha,Rn.before=_s,Rn.bind=vs,Rn.bindAll=za,Rn.bindKey=ys,Rn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Os(e)?e:[e]},Rn.chain=ts,Rn.chunk=function(e,t,n){t=(n?ao(e,t,n):void 0===t)?1:sn(ra(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var o=0,s=0,a=r(Zt(i/t));oi?0:i+n),(r=void 0===r||r>i?i:ra(r))<0&&(r+=i),r=n>r?0:ia(r);n>>0)?(e=aa(e))&&("string"==typeof t||null!=t&&!Ks(t))&&!(t=$r(t))&&Ft(e)?ui(Wt(e),0,n):e.split(t,n):[]},Rn.spread=function(e,t){if("function"!=typeof e)throw new ve(o);return t=null==t?0:sn(ra(t),0),Ur((function(n){var r=n[t],i=ui(n,0,t);return r&&pt(i,r),ot(e,this,i)}))},Rn.tail=function(e){var t=null==e?0:e.length;return t?Br(e,1,t):[]},Rn.take=function(e,t,n){return e&&e.length?Br(e,0,(t=n||void 0===t?1:ra(t))<0?0:t):[]},Rn.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?Br(e,(t=r-(t=n||void 0===t?1:ra(t)))<0?0:t,r):[]},Rn.takeRightWhile=function(e,t){return e&&e.length?ti(e,Qi(t,3),!1,!0):[]},Rn.takeWhile=function(e,t){return e&&e.length?ti(e,Qi(t,3)):[]},Rn.tap=function(e,t){return t(e),e},Rn.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new ve(o);return Gs(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),bs(e,t,{leading:r,maxWait:t,trailing:i})},Rn.thru=ns,Rn.toArray=ta,Rn.toPairs=Ia,Rn.toPairsIn=Ra,Rn.toPath=function(e){return Os(e)?ft(e,Eo):$s(e)?[e]:_i(Ao(aa(e)))},Rn.toPlainObject=sa,Rn.transform=function(e,t,n){var r=Os(e),i=r||js(e)||Zs(e);if(t=Qi(t,4),null==n){var o=e&&e.constructor;n=i?r?new o:[]:Gs(e)&&qs(o)?kn(Be(e)):{}}return(i?at:lr)(e,(function(e,r,i){return t(n,e,r,i)})),n},Rn.unary=function(e){return ms(e,1)},Rn.union=Vo,Rn.unionBy=Bo,Rn.unionWith=Wo,Rn.uniq=function(e){return e&&e.length?Zr(e):[]},Rn.uniqBy=function(e,t){return e&&e.length?Zr(e,Qi(t,2)):[]},Rn.uniqWith=function(e,t){return t="function"==typeof t?t:void 0,e&&e.length?Zr(e,void 0,t):[]},Rn.unset=function(e,t){return null==e||Xr(e,t)},Rn.unzip=Yo,Rn.unzipWith=Ko,Rn.update=function(e,t,n){return null==e?e:ei(e,t,si(n))},Rn.updateWith=function(e,t,n,r){return r="function"==typeof r?r:void 0,null==e?e:ei(e,t,si(n),r)},Rn.values=ka,Rn.valuesIn=function(e){return null==e?[]:Mt(e,Ca(e))},Rn.without=Jo,Rn.words=qa,Rn.wrap=function(e,t){return Es(si(t),e)},Rn.xor=Qo,Rn.xorBy=$o,Rn.xorWith=Zo,Rn.zip=Xo,Rn.zipObject=function(e,t){return ii(e||[],t||[],Gn)},Rn.zipObjectDeep=function(e,t){return ii(e||[],t||[],Hr)},Rn.zipWith=es,Rn.entries=Ia,Rn.entriesIn=Ra,Rn.extend=ua,Rn.extendWith=ca,Qa(Rn,Rn),Rn.add=sl,Rn.attempt=Ha,Rn.camelCase=xa,Rn.capitalize=Ma,Rn.ceil=al,Rn.clamp=function(e,t,n){return void 0===n&&(n=t,t=void 0),void 0!==n&&(n=(n=oa(n))==n?n:0),void 0!==t&&(t=(t=oa(t))==t?t:0),Jn(oa(e),t,n)},Rn.clone=function(e){return Qn(e,4)},Rn.cloneDeep=function(e){return Qn(e,5)},Rn.cloneDeepWith=function(e,t){return Qn(e,5,t="function"==typeof t?t:void 0)},Rn.cloneWith=function(e,t){return Qn(e,4,t="function"==typeof t?t:void 0)},Rn.conformsTo=function(e,t){return null==t||$n(e,t,ba(t))},Rn.deburr=Da,Rn.defaultTo=function(e,t){return null==e||e!=e?t:e},Rn.divide=ll,Rn.endsWith=function(e,t,n){e=aa(e),t=$r(t);var r=e.length,i=n=void 0===n?r:Jn(ra(n),0,r);return(n-=t.length)>=0&&e.slice(n,i)==t},Rn.eq=ks,Rn.escape=function(e){return(e=aa(e))&&F.test(e)?e.replace(j,jt):e},Rn.escapeRegExp=function(e){return(e=aa(e))&&Y.test(e)?e.replace(W,"\\$&"):e},Rn.every=function(e,t,n){var r=Os(e)?ut:nr;return n&&ao(e,t,n)&&(t=void 0),r(e,Qi(t,3))},Rn.find=os,Rn.findIndex=Do,Rn.findKey=function(e,t){return yt(e,Qi(t,3),lr)},Rn.findLast=ss,Rn.findLastIndex=Oo,Rn.findLastKey=function(e,t){return yt(e,Qi(t,3),ur)},Rn.floor=ul,Rn.forEach=as,Rn.forEachRight=ls,Rn.forIn=function(e,t){return null==e?e:sr(e,Qi(t,3),Ca)},Rn.forInRight=function(e,t){return null==e?e:ar(e,Qi(t,3),Ca)},Rn.forOwn=function(e,t){return e&&lr(e,Qi(t,3))},Rn.forOwnRight=function(e,t){return e&&ur(e,Qi(t,3))},Rn.get=ga,Rn.gt=xs,Rn.gte=Ms,Rn.has=function(e,t){return null!=e&&ro(e,t,gr)},Rn.hasIn=ma,Rn.head=Po,Rn.identity=Wa,Rn.includes=function(e,t,n,r){e=Ps(e)?e:ka(e),n=n&&!r?ra(n):0;var i=e.length;return n<0&&(n=sn(i+n,0)),Qs(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&Ct(e,t,n)>-1},Rn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ra(n);return i<0&&(i=sn(r+i,0)),Ct(e,t,i)},Rn.inRange=function(e,t,n){return t=na(t),void 0===n?(n=t,t=0):n=na(n),function(e,t,n){return e>=an(t,n)&&e=-9007199254740991&&e<=9007199254740991},Rn.isSet=Js,Rn.isString=Qs,Rn.isSymbol=$s,Rn.isTypedArray=Zs,Rn.isUndefined=function(e){return void 0===e},Rn.isWeakMap=function(e){return Vs(e)&&no(e)==T},Rn.isWeakSet=function(e){return Vs(e)&&"[object WeakSet]"==fr(e)},Rn.join=function(e,t){return null==e?"":rn.call(e,t)},Rn.kebabCase=Oa,Rn.last=Fo,Rn.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return void 0!==n&&(i=(i=ra(n))<0?sn(r+i,0):an(i,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,i):bt(e,wt,i,!0)},Rn.lowerCase=La,Rn.lowerFirst=Pa,Rn.lt=Xs,Rn.lte=ea,Rn.max=function(e){return e&&e.length?rr(e,Wa,pr):void 0},Rn.maxBy=function(e,t){return e&&e.length?rr(e,Qi(t,2),pr):void 0},Rn.mean=function(e){return St(e,Wa)},Rn.meanBy=function(e,t){return St(e,Qi(t,2))},Rn.min=function(e){return e&&e.length?rr(e,Wa,Er):void 0},Rn.minBy=function(e,t){return e&&e.length?rr(e,Qi(t,2),Er):void 0},Rn.stubArray=il,Rn.stubFalse=ol,Rn.stubObject=function(){return{}},Rn.stubString=function(){return""},Rn.stubTrue=function(){return!0},Rn.multiply=dl,Rn.nth=function(e,t){return e&&e.length?Mr(e,ra(t)):void 0},Rn.noConflict=function(){return Ye._===this&&(Ye._=ke),this},Rn.noop=$a,Rn.now=gs,Rn.pad=function(e,t,n){e=aa(e);var r=(t=ra(t))?Bt(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return Di(Xt(i),n)+e+Di(Zt(i),n)},Rn.padEnd=function(e,t,n){e=aa(e);var r=(t=ra(t))?Bt(e):0;return t&&rt){var r=e;e=t,t=r}if(n||e%1||t%1){var i=cn();return an(e+i*(t-e+Ge("1e-"+((i+"").length-1))),t)}return Nr(e,t)},Rn.reduce=function(e,t,n){var r=Os(e)?gt:It,i=arguments.length<3;return r(e,Qi(t,4),n,i,er)},Rn.reduceRight=function(e,t,n){var r=Os(e)?mt:It,i=arguments.length<3;return r(e,Qi(t,4),n,i,tr)},Rn.repeat=function(e,t,n){return t=(n?ao(e,t,n):void 0===t)?1:ra(t),jr(aa(e),t)},Rn.replace=function(){var e=arguments,t=aa(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Rn.result=function(e,t,n){var r=-1,i=(t=ai(t,e)).length;for(i||(i=1,e=void 0);++r9007199254740991)return[];var n=4294967295,r=an(e,4294967295);e-=4294967295;for(var i=kt(r,t=Qi(t));++n=o)return e;var a=n-Bt(r);if(a<1)return r;var l=s?ui(s,0,a).join(""):e.slice(0,a);if(void 0===i)return l+r;if(s&&(a+=l.length-a),Ks(i)){if(e.slice(a).search(i)){var u,c=l;for(i.global||(i=me(i.source,aa(re.exec(i))+"g")),i.lastIndex=0;u=i.exec(c);)var d=u.index;l=l.slice(0,void 0===d?a:d)}}else if(e.indexOf($r(i),a)!=a){var h=l.lastIndexOf(i);h>-1&&(l=l.slice(0,h))}return l+r},Rn.unescape=function(e){return(e=aa(e))&&U.test(e)?e.replace(N,Yt):e},Rn.uniqueId=function(e){var t=++Ae;return aa(e)+t},Rn.upperCase=Ua,Rn.upperFirst=Fa,Rn.each=as,Rn.eachRight=ls,Rn.first=Po,Qa(Rn,(cl={},lr(Rn,(function(e,t){Se.call(Rn.prototype,t)||(cl[t]=e)})),cl),{chain:!1}),Rn.VERSION="4.17.19",at(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){Rn[e].placeholder=Rn})),at(["drop","take"],(function(e,t){Dn.prototype[e]=function(n){n=void 0===n?1:sn(ra(n),0);var r=this.__filtered__&&!t?new Dn(this):this.clone();return r.__filtered__?r.__takeCount__=an(n,r.__takeCount__):r.__views__.push({size:an(n,4294967295),type:e+(r.__dir__<0?"Right":"")}),r},Dn.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),at(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=1==n||3==n;Dn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Qi(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),at(["head","last"],(function(e,t){var n="take"+(t?"Right":"");Dn.prototype[e]=function(){return this[n](1).value()[0]}})),at(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");Dn.prototype[e]=function(){return this.__filtered__?new Dn(this):this[n](1)}})),Dn.prototype.compact=function(){return this.filter(Wa)},Dn.prototype.find=function(e){return this.filter(e).head()},Dn.prototype.findLast=function(e){return this.reverse().find(e)},Dn.prototype.invokeMap=Ur((function(e,t){return"function"==typeof e?new Dn(this):this.map((function(n){return vr(n,e,t)}))})),Dn.prototype.reject=function(e){return this.filter(Ss(Qi(e)))},Dn.prototype.slice=function(e,t){e=ra(e);var n=this;return n.__filtered__&&(e>0||t<0)?new Dn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),void 0!==t&&(n=(t=ra(t))<0?n.dropRight(-t):n.take(t-e)),n)},Dn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Dn.prototype.toArray=function(){return this.take(4294967295)},lr(Dn.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=Rn[r?"take"+("last"==t?"Right":""):t],o=r||/^find/.test(t);i&&(Rn.prototype[t]=function(){var t=this.__wrapped__,s=r?[1]:arguments,a=t instanceof Dn,l=s[0],u=a||Os(t),c=function(e){var t=i.apply(Rn,pt([e],s));return r&&d?t[0]:t};u&&n&&"function"==typeof l&&1!=l.length&&(a=u=!1);var d=this.__chain__,h=!!this.__actions__.length,f=o&&!d,p=a&&!h;if(!o&&u){t=p?t:new Dn(this);var g=e.apply(t,s);return g.__actions__.push({func:ns,args:[c],thisArg:void 0}),new Mn(g,d)}return f&&p?e.apply(this,s):(g=this.thru(c),f?r?g.value()[0]:g.value():g)})})),at(["pop","push","shift","sort","splice","unshift"],(function(e){var t=ye[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);Rn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(Os(i)?i:[],e)}return this[n]((function(n){return t.apply(Os(n)?n:[],e)}))}})),lr(Dn.prototype,(function(e,t){var n=Rn[t];if(n){var r=n.name+"";Se.call(yn,r)||(yn[r]=[]),yn[r].push({name:t,func:n})}})),yn[Ri(void 0,2).name]=[{name:"wrapper",func:void 0}],Dn.prototype.clone=function(){var e=new Dn(this.__wrapped__);return e.__actions__=_i(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=_i(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=_i(this.__views__),e},Dn.prototype.reverse=function(){if(this.__filtered__){var e=new Dn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Dn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Os(e),r=t<0,i=n?e.length:0,o=function(e,t,n){var r=-1,i=n.length;for(;++r=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},Rn.prototype.plant=function(e){for(var t,n=this;n instanceof xn;){var r=Ro(n);r.__index__=0,r.__values__=void 0,t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t},Rn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Dn){var t=e;return this.__actions__.length&&(t=new Dn(this)),(t=t.reverse()).__actions__.push({func:ns,args:[Go],thisArg:void 0}),new Mn(t,this.__chain__)}return this.thru(Go)},Rn.prototype.toJSON=Rn.prototype.valueOf=Rn.prototype.value=function(){return ni(this.__wrapped__,this.__actions__)},Rn.prototype.first=Rn.prototype.head,Ze&&(Rn.prototype[Ze]=function(){return this}),Rn}();Ye._=Kt,void 0===(i=function(){return Kt}.call(t,n,t,r))||(r.exports=i)}).call(this)}).call(this,n(13),n(32)(e))},function(e){e.exports=JSON.parse('{"_from":"jssip@^3.7.1","_id":"jssip@3.8.0","_inBundle":false,"_integrity":"sha512-6p2/CcjZxp0H/lE/oZKdFl3WebiNGd8Tkt8gYDnQOyONbnSyShkokK/FiZGGJNjq85CiGmgYq/M63Vq3tcOruw==","_location":"/jssip","_phantomChildren":{"ms":"2.1.2"},"_requested":{"type":"range","registry":true,"raw":"jssip@^3.7.1","name":"jssip","escapedName":"jssip","rawSpec":"^3.7.1","saveSpec":null,"fetchSpec":"^3.7.1"},"_requiredBy":["/"],"_resolved":"https://registry.npmjs.org/jssip/-/jssip-3.8.0.tgz","_shasum":"b06778cf14a9f0fe6c5b69a3200682cd1e8c527c","_spec":"jssip@^3.7.1","_where":"G:\\\\Development\\\\libwebphone","bugs":{"url":"https://github.com/versatica/JsSIP/issues"},"bundleDependencies":false,"contributors":[{"name":"José Luis Millán","email":"jmillan@aliax.net","url":"https://github.com/jmillan"},{"name":"Iñaki Baz Castillo","email":"ibc@aliax.net","url":"https://inakibaz.me"}],"dependencies":{"@types/debug":"^4.1.5","@types/node":"^14.14.34","debug":"^4.3.1","events":"^3.3.0","sdp-transform":"^2.14.1"},"deprecated":false,"description":"the Javascript SIP library","devDependencies":{"@babel/core":"^7.13.10","@babel/preset-env":"^7.13.10","ansi-colors":"^3.2.4","browserify":"^16.5.1","eslint":"^5.16.0","fancy-log":"^1.3.3","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-eslint":"^5.0.0","gulp-expect-file":"^1.0.2","gulp-header":"^2.0.9","gulp-nodeunit-runner":"^0.2.2","gulp-plumber":"^1.2.1","gulp-rename":"^1.4.0","gulp-uglify-es":"^1.0.4","pegjs":"^0.7.0","vinyl-buffer":"^1.0.1","vinyl-source-stream":"^2.0.0"},"homepage":"https://jssip.net","keywords":["sip","websocket","webrtc","node","browser","library"],"license":"MIT","main":"lib-es5/JsSIP.js","name":"jssip","repository":{"type":"git","url":"git+https://github.com/versatica/JsSIP.git"},"scripts":{"lint":"gulp lint","prepublishOnly":"gulp babel","test":"gulp test"},"title":"JsSIP","types":"lib/JsSIP.d.ts","version":"3.8.0"}')},function(e,t,n){var r=n(37),i=n(38);t.write=i,t.parse=r.parse,t.parseParams=r.parseParams,t.parseFmtpConfig=r.parseFmtpConfig,t.parsePayloads=r.parsePayloads,t.parseRemoteCandidates=r.parseRemoteCandidates,t.parseImageAttributes=r.parseImageAttributes,t.parseSimulcastStreamList=r.parseSimulcastStreamList},function(e,t){var n=e.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return null!=e.address?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),t+=null!=e["network-id"]?" network-id %d":"%v",t+=null!=e["network-cost"]?" network-cost %d":"%v"}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return null!=e.maxMessageSize?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(null!=e.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var t="mediaclk:";return t+=null!=e.id?"id=%s %s":"%v%s",t+=null!=e.mediaClockValue?"=%s":"",t+=null!=e.rateNumerator?" rate=%s":"",t+=null!=e.rateDenominator?"/%s":""}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(n).forEach((function(e){n[e].forEach((function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")}))}))},function(e,t,n){"use strict";var r=500;e.exports={T1:r,T2:4e3,T4:5e3,TIMER_B:32e3,TIMER_D:0,TIMER_F:32e3,TIMER_H:32e3,TIMER_I:0,TIMER_J:0,TIMER_K:0,TIMER_L:32e3,TIMER_M:32e3,PROVISIONAL_RESPONSE_INTERVAL:6e4}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,a=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,s=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw s}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;R.debug("connect()");var r=e,i=v.cloneObject(t.eventHandlers),o=v.cloneArray(t.extraHeaders),s=v.cloneObject(t.mediaConstraints,{audio:!0,video:!0}),a=t.mediaStream||null,l=v.cloneObject(t.pcConfig,{iceServers:[]}),u=t.rtcConstraints||null,c=t.rtcOfferConstraints||null;if(this._rtcOfferConstraints=c,this._rtcAnswerConstraints=t.rtcAnswerConstraints||null,this._data=t.data||this._data,void 0===e)throw new TypeError("Not enough arguments");if(this._status!==k.STATUS_NULL)throw new m.InvalidStateError(this._status);if(!window.RTCPeerConnection)throw new m.NotSupportedError("WebRTC not supported");if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(r));for(var d in this._sessionTimers.enabled&&v.isDecimal(t.sessionTimersExpires)&&(t.sessionTimersExpires>=g.MIN_SESSION_EXPIRES?this._sessionTimers.defaultExpires=t.sessionTimersExpires:this._sessionTimers.defaultExpires=g.SESSION_EXPIRES),i)Object.prototype.hasOwnProperty.call(i,d)&&this.on(d,i[d]);this._from_tag=v.newTag();var h=t.anonymous||!1,f={from_tag:this._from_tag};this._contact=this._ua.contact.toString({anonymous:h,outbound:!0}),h?(f.from_display_name="Anonymous",f.from_uri=new I("sip","anonymous","anonymous.invalid"),o.push("P-Preferred-Identity: ".concat(this._ua.configuration.uri.toString())),o.push("Privacy: id")):t.fromUserName&&(f.from_uri=new I("sip",t.fromUserName,this._ua.configuration.uri.host),o.push("P-Preferred-Identity: ".concat(this._ua.configuration.uri.toString()))),t.fromDisplayName&&(f.from_display_name=t.fromDisplayName),o.push("Contact: ".concat(this._contact)),o.push("Content-Type: application/sdp"),this._sessionTimers.enabled&&o.push("Session-Expires: ".concat(this._sessionTimers.defaultExpires).concat(this._ua.configuration.session_timers_force_refresher?";refresher=uac":"")),this._request=new b.InitialOutgoingInviteRequest(e,this._ua,f,o),this._id=this._request.call_id+this._from_tag,this._createRTCConnection(l,u),this._direction="outgoing",this._local_identity=this._request.from,this._remote_identity=this._request.to,n&&n(this),this._newRTCSession("local",this._request),this._sendInitialRequest(s,c,a)}},{key:"init_incoming",value:function(e,t){var n,r=this;R.debug("init_incoming()");var i=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0;e.body&&"application/sdp"!==i?e.reply(415):(this._status=k.STATUS_INVITE_RECEIVED,this._from_tag=e.from_tag,this._id=e.call_id+this._from_tag,this._request=e,this._contact=this._ua.contact.toString(),e.hasHeader("expires")&&(n=1e3*e.getHeader("expires")),e.to_tag=v.newTag(),this._createDialog(e,"UAS",!0)?(e.body?this._late_sdp=!1:this._late_sdp=!0,this._status=k.STATUS_WAITING_FOR_ANSWER,this._timers.userNoAnswerTimer=setTimeout((function(){e.reply(408),r._failed("local",null,g.causes.NO_ANSWER)}),this._ua.configuration.no_answer_timeout),n&&(this._timers.expiresTimer=setTimeout((function(){r._status===k.STATUS_WAITING_FOR_ANSWER&&(e.reply(487),r._failed("system",null,g.causes.EXPIRES))}),n)),this._direction="incoming",this._local_identity=e.to,this._remote_identity=e.from,t&&t(this),this._newRTCSession("remote",e),this._status!==k.STATUS_TERMINATED&&(e.reply(180,null,["Contact: ".concat(this._contact)]),this._progress("local",null))):e.reply(500,"Missing Contact header field"))}},{key:"answer",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};R.debug("answer()");var n=this._request,r=v.cloneArray(t.extraHeaders),o=v.cloneObject(t.mediaConstraints),s=t.mediaStream||null,a=v.cloneObject(t.pcConfig,{iceServers:[]}),l=t.rtcConstraints||null,u=t.rtcAnswerConstraints||null,c=v.cloneObject(t.rtcOfferConstraints),d=!1,h=!1,f=!1,p=!1;if(this._rtcAnswerConstraints=u,this._rtcOfferConstraints=t.rtcOfferConstraints||null,this._data=t.data||this._data,"incoming"!==this._direction)throw new m.NotSupportedError('"answer" not supported for outgoing RTCSession');if(this._status!==k.STATUS_WAITING_FOR_ANSWER)throw new m.InvalidStateError(this._status);if(this._sessionTimers.enabled&&v.isDecimal(t.sessionTimersExpires)&&(t.sessionTimersExpires>=g.MIN_SESSION_EXPIRES?this._sessionTimers.defaultExpires=t.sessionTimersExpires:this._sessionTimers.defaultExpires=g.SESSION_EXPIRES),this._status=k.STATUS_ANSWERED,this._createDialog(n,"UAS")){clearTimeout(this._timers.userNoAnswerTimer),r.unshift("Contact: ".concat(this._contact));var _=n.parseSDP();Array.isArray(_.media)||(_.media=[_.media]);var y,b=i(_.media);try{for(b.s();!(y=b.n()).done;){var C=y.value;"audio"===C.type&&(d=!0,C.direction&&"sendrecv"!==C.direction||(f=!0)),"video"===C.type&&(h=!0,C.direction&&"sendrecv"!==C.direction||(p=!0))}}catch(e){b.e(e)}finally{b.f()}if(s&&!1===o.audio){var T,w=i(s.getAudioTracks());try{for(w.s();!(T=w.n()).done;){var S=T.value;s.removeTrack(S)}}catch(e){w.e(e)}finally{w.f()}}if(s&&!1===o.video){var A,E=i(s.getVideoTracks());try{for(E.s();!(A=E.n()).done;){var I=A.value;s.removeTrack(I)}}catch(e){E.e(e)}finally{E.f()}}s||void 0!==o.audio||(o.audio=f),s||void 0!==o.video||(o.video=p),s||d||c.offerToReceiveAudio||(o.audio=!1),s||h||c.offerToReceiveVideo||(o.video=!1),this._createRTCConnection(a,l),Promise.resolve().then((function(){return s||(o.audio||o.video?(e._localMediaStreamLocallyGenerated=!0,navigator.mediaDevices.getUserMedia(o).catch((function(t){if(e._status===k.STATUS_TERMINATED)throw new Error("terminated");throw n.reply(480),e._failed("local",null,g.causes.USER_DENIED_MEDIA_ACCESS),R.warn('emit "getusermediafailed" [error:%o]',t),e.emit("getusermediafailed",t),new Error("getUserMedia() failed")}))):void 0)})).then((function(t){if(e._status===k.STATUS_TERMINATED)throw new Error("terminated");e._localMediaStream=t,t&&t.getTracks().forEach((function(n){e._connection.addTrack(n,t)}))})).then((function(){if(!e._late_sdp){var t={originator:"remote",type:"offer",sdp:n.body};R.debug('emit "sdp"'),e.emit("sdp",t);var r=new RTCSessionDescription({type:"offer",sdp:t.sdp});return e._connectionPromiseQueue=e._connectionPromiseQueue.then((function(){return e._connection.setRemoteDescription(r)})).catch((function(t){throw n.reply(488),e._failed("system",null,g.causes.WEBRTC_ERROR),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',t),e.emit("peerconnection:setremotedescriptionfailed",t),new Error("peerconnection.setRemoteDescription() failed")})),e._connectionPromiseQueue}})).then((function(){if(e._status===k.STATUS_TERMINATED)throw new Error("terminated");return e._connecting(n),e._late_sdp?e._createLocalDescription("offer",e._rtcOfferConstraints).catch((function(){throw n.reply(500),new Error("_createLocalDescription() failed")})):e._createLocalDescription("answer",u).catch((function(){throw n.reply(500),new Error("_createLocalDescription() failed")}))})).then((function(t){if(e._status===k.STATUS_TERMINATED)throw new Error("terminated");e._handleSessionTimersInIncomingRequest(n,r),n.reply(200,null,r,t,(function(){e._status=k.STATUS_WAITING_FOR_ACK,e._setInvite2xxTimer(n,t),e._setACKTimer(),e._accepted("local")}),(function(){e._failed("system",null,g.causes.CONNECTION_ERROR)}))})).catch((function(t){e._status!==k.STATUS_TERMINATED&&R.warn(t)}))}else n.reply(500,"Error creating dialog")}},{key:"terminate",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};R.debug("terminate()");var n,r=t.cause||g.causes.BYE,i=v.cloneArray(t.extraHeaders),o=t.body,s=t.status_code,a=t.reason_phrase;if(this._status===k.STATUS_TERMINATED)throw new m.InvalidStateError(this._status);switch(this._status){case k.STATUS_NULL:case k.STATUS_INVITE_SENT:case k.STATUS_1XX_RECEIVED:if(R.debug("canceling session"),s&&(s<200||s>=700))throw new TypeError("Invalid status_code: ".concat(s));s&&(a=a||g.REASON_PHRASE[s]||"",n="SIP ;cause=".concat(s,' ;text="').concat(a,'"')),this._status===k.STATUS_NULL||this._status===k.STATUS_INVITE_SENT?(this._is_canceled=!0,this._cancel_reason=n):this._status===k.STATUS_1XX_RECEIVED&&this._request.cancel(n),this._status=k.STATUS_CANCELED,this._failed("local",null,g.causes.CANCELED);break;case k.STATUS_WAITING_FOR_ANSWER:case k.STATUS_ANSWERED:if(R.debug("rejecting session"),(s=s||480)<300||s>=700)throw new TypeError("Invalid status_code: ".concat(s));this._request.reply(s,a,i,o),this._failed("local",null,g.causes.REJECTED);break;case k.STATUS_WAITING_FOR_ACK:case k.STATUS_CONFIRMED:if(R.debug("terminating session"),a=t.reason_phrase||g.REASON_PHRASE[s]||"",s&&(s<200||s>=700))throw new TypeError("Invalid status_code: ".concat(s));if(s&&i.push("Reason: SIP ;cause=".concat(s,'; text="').concat(a,'"')),this._status===k.STATUS_WAITING_FOR_ACK&&"incoming"===this._direction&&this._request.server_transaction.state!==_.C.STATUS_TERMINATED){var l=this._dialog;this.receiveRequest=function(t){t.method===g.ACK&&(e.sendRequest(g.BYE,{extraHeaders:i,body:o}),l.terminate())},this._request.server_transaction.on("stateChanged",(function(){e._request.server_transaction.state===_.C.STATUS_TERMINATED&&(e.sendRequest(g.BYE,{extraHeaders:i,body:o}),l.terminate())})),this._ended("local",null,r),this._dialog=l,this._ua.newDialog(l)}else this.sendRequest(g.BYE,{extraHeaders:i,body:o}),this._ended("local",null,r)}}},{key:"sendDTMF",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};R.debug("sendDTMF() | tones: %s",e);var n=0,r=t.duration||null,i=t.interToneGap||null,o=t.transportType||g.DTMF_TRANSPORT.INFO;if(void 0===e)throw new TypeError("Not enough arguments");if(this._status!==k.STATUS_CONFIRMED&&this._status!==k.STATUS_WAITING_FOR_ACK&&this._status!==k.STATUS_1XX_RECEIVED)throw new m.InvalidStateError(this._status);if(o!==g.DTMF_TRANSPORT.INFO&&o!==g.DTMF_TRANSPORT.RFC2833)throw new TypeError("invalid transportType: ".concat(o));if("number"==typeof e&&(e=e.toString()),!e||"string"!=typeof e||!e.match(/^[0-9A-DR#*,]+$/i))throw new TypeError("Invalid tones: ".concat(e));if(r&&!v.isDecimal(r))throw new TypeError("Invalid tone duration: ".concat(r));if(r?rw.C.MAX_DURATION?(R.debug('"duration" value is greater than the maximum allowed, setting it to '.concat(w.C.MAX_DURATION," milliseconds")),r=w.C.MAX_DURATION):r=Math.abs(r):r=w.C.DEFAULT_DURATION,t.duration=r,i&&!v.isDecimal(i))throw new TypeError("Invalid interToneGap: ".concat(i));if(i?i=this._tones.length)this._tones=null;else{var s=this._tones[n];if(n+=1,","===s)e=2e3;else{var l=new w(this);t.eventHandlers={onFailed:function(){o._tones=null}},l.send(s,t),e=r+i}setTimeout(a.bind(this),e)}}}},{key:"sendInfo",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(R.debug("sendInfo()"),this._status!==k.STATUS_CONFIRMED&&this._status!==k.STATUS_WAITING_FOR_ACK&&this._status!==k.STATUS_1XX_RECEIVED)throw new m.InvalidStateError(this._status);var r=new S(this);r.send(e,t,n)}},{key:"mute",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{audio:!0,video:!1};R.debug("mute()");var t=!1,n=!1;!1===this._audioMuted&&e.audio&&(t=!0,this._audioMuted=!0,this._toggleMuteAudio(!0)),!1===this._videoMuted&&e.video&&(n=!0,this._videoMuted=!0,this._toggleMuteVideo(!0)),!0!==t&&!0!==n||this._onmute({audio:t,video:n})}},{key:"unmute",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{audio:!0,video:!0};R.debug("unmute()");var t=!1,n=!1;!0===this._audioMuted&&e.audio&&(t=!0,this._audioMuted=!1,!1===this._localHold&&this._toggleMuteAudio(!1)),!0===this._videoMuted&&e.video&&(n=!0,this._videoMuted=!1,!1===this._localHold&&this._toggleMuteVideo(!1)),!0!==t&&!0!==n||this._onunmute({audio:t,video:n})}},{key:"hold",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(R.debug("hold()"),this._status!==k.STATUS_WAITING_FOR_ACK&&this._status!==k.STATUS_CONFIRMED)return!1;if(!0===this._localHold)return!1;if(!this._isReadyToReOffer())return!1;this._localHold=!0,this._onhold("local");var r={succeeded:function(){n&&n()},failed:function(){e.terminate({cause:g.causes.WEBRTC_ERROR,status_code:500,reason_phrase:"Hold Failed"})}};return t.useUpdate?this._sendUpdate({sdpOffer:!0,eventHandlers:r,extraHeaders:t.extraHeaders}):this._sendReinvite({eventHandlers:r,extraHeaders:t.extraHeaders}),!0}},{key:"unhold",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(R.debug("unhold()"),this._status!==k.STATUS_WAITING_FOR_ACK&&this._status!==k.STATUS_CONFIRMED)return!1;if(!1===this._localHold)return!1;if(!this._isReadyToReOffer())return!1;this._localHold=!1,this._onunhold("local");var r={succeeded:function(){n&&n()},failed:function(){e.terminate({cause:g.causes.WEBRTC_ERROR,status_code:500,reason_phrase:"Unhold Failed"})}};return t.useUpdate?this._sendUpdate({sdpOffer:!0,eventHandlers:r,extraHeaders:t.extraHeaders}):this._sendReinvite({eventHandlers:r,extraHeaders:t.extraHeaders}),!0}},{key:"renegotiate",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;R.debug("renegotiate()");var r=t.rtcOfferConstraints||null;if(this._status!==k.STATUS_WAITING_FOR_ACK&&this._status!==k.STATUS_CONFIRMED)return!1;if(!this._isReadyToReOffer())return!1;var i={succeeded:function(){n&&n()},failed:function(){e.terminate({cause:g.causes.WEBRTC_ERROR,status_code:500,reason_phrase:"Media Renegotiation Failed"})}};return this._setLocalMediaStatus(),t.useUpdate?this._sendUpdate({sdpOffer:!0,eventHandlers:i,rtcOfferConstraints:r,extraHeaders:t.extraHeaders}):this._sendReinvite({eventHandlers:i,rtcOfferConstraints:r,extraHeaders:t.extraHeaders}),!0}},{key:"refer",value:function(e,t){var n=this;R.debug("refer()");var r=e;if(this._status!==k.STATUS_WAITING_FOR_ACK&&this._status!==k.STATUS_CONFIRMED)return!1;if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(r));var i=new E(this);i.sendRefer(e,t);var o=i.id;return this._referSubscribers[o]=i,i.on("requestFailed",(function(){delete n._referSubscribers[o]})),i.on("accepted",(function(){delete n._referSubscribers[o]})),i.on("failed",(function(){delete n._referSubscribers[o]})),i}},{key:"sendRequest",value:function(e,t){return R.debug("sendRequest()"),this._dialog.sendRequest(e,t)}},{key:"receiveRequest",value:function(e){var t=this;if(R.debug("receiveRequest()"),e.method===g.CANCEL)this._status!==k.STATUS_WAITING_FOR_ANSWER&&this._status!==k.STATUS_ANSWERED||(this._status=k.STATUS_CANCELED,this._request.reply(487),this._failed("remote",e,g.causes.CANCELED));else switch(e.method){case g.ACK:if(this._status!==k.STATUS_WAITING_FOR_ACK)return;if(this._status=k.STATUS_CONFIRMED,clearTimeout(this._timers.ackTimer),clearTimeout(this._timers.invite2xxTimer),this._late_sdp){if(!e.body){this.terminate({cause:g.causes.MISSING_SDP,status_code:400});break}var n={originator:"remote",type:"answer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",n);var r=new RTCSessionDescription({type:"answer",sdp:n.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then((function(){return t._connection.setRemoteDescription(r)})).then((function(){t._is_confirmed||t._confirmed("remote",e)})).catch((function(e){t.terminate({cause:g.causes.BAD_MEDIA_DESCRIPTION,status_code:488}),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)}))}else this._is_confirmed||this._confirmed("remote",e);break;case g.BYE:this._status===k.STATUS_CONFIRMED||this._status===k.STATUS_WAITING_FOR_ACK?(e.reply(200),this._ended("remote",e,g.causes.BYE)):this._status===k.STATUS_INVITE_RECEIVED||this._status===k.STATUS_WAITING_FOR_ANSWER?(e.reply(200),this._request.reply(487,"BYE Received"),this._ended("remote",e,g.causes.BYE)):e.reply(403,"Wrong Status");break;case g.INVITE:this._status===k.STATUS_CONFIRMED?e.hasHeader("replaces")?this._receiveReplaces(e):this._receiveReinvite(e):e.reply(403,"Wrong Status");break;case g.INFO:if(this._status===k.STATUS_1XX_RECEIVED||this._status===k.STATUS_WAITING_FOR_ANSWER||this._status===k.STATUS_ANSWERED||this._status===k.STATUS_WAITING_FOR_ACK||this._status===k.STATUS_CONFIRMED){var i=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0;i&&i.match(/^application\/dtmf-relay/i)?new w(this).init_incoming(e):void 0!==i?new S(this).init_incoming(e):e.reply(415)}else e.reply(403,"Wrong Status");break;case g.UPDATE:this._status===k.STATUS_CONFIRMED?this._receiveUpdate(e):e.reply(403,"Wrong Status");break;case g.REFER:this._status===k.STATUS_CONFIRMED?this._receiveRefer(e):e.reply(403,"Wrong Status");break;case g.NOTIFY:this._status===k.STATUS_CONFIRMED?this._receiveNotify(e):e.reply(403,"Wrong Status");break;default:e.reply(501)}}},{key:"onTransportError",value:function(){R.warn("onTransportError()"),this._status!==k.STATUS_TERMINATED&&this.terminate({status_code:500,reason_phrase:g.causes.CONNECTION_ERROR,cause:g.causes.CONNECTION_ERROR})}},{key:"onRequestTimeout",value:function(){R.warn("onRequestTimeout()"),this._status!==k.STATUS_TERMINATED&&this.terminate({status_code:408,reason_phrase:g.causes.REQUEST_TIMEOUT,cause:g.causes.REQUEST_TIMEOUT})}},{key:"onDialogError",value:function(){R.warn("onDialogError()"),this._status!==k.STATUS_TERMINATED&&this.terminate({status_code:500,reason_phrase:g.causes.DIALOG_ERROR,cause:g.causes.DIALOG_ERROR})}},{key:"newDTMF",value:function(e){R.debug("newDTMF()"),this.emit("newDTMF",e)}},{key:"newInfo",value:function(e){R.debug("newInfo()"),this.emit("newInfo",e)}},{key:"_isReadyToReOffer",value:function(){return this._rtcReady?this._dialog?!0!==this._dialog.uac_pending_reply&&!0!==this._dialog.uas_pending_reply||(R.debug("_isReadyToReOffer() | there is another INVITE/UPDATE transaction in progress"),!1):(R.debug("_isReadyToReOffer() | session not established yet"),!1):(R.debug("_isReadyToReOffer() | internal WebRTC status not ready"),!1)}},{key:"_close",value:function(){if(R.debug("close()"),this._localMediaStream&&this._localMediaStreamLocallyGenerated&&(R.debug("close() | closing local MediaStream"),v.closeMediaStream(this._localMediaStream)),this._status!==k.STATUS_TERMINATED){if(this._status=k.STATUS_TERMINATED,this._connection)try{this._connection.close()}catch(e){R.warn("close() | error closing the RTCPeerConnection: %o",e)}for(var e in this._timers)Object.prototype.hasOwnProperty.call(this._timers,e)&&clearTimeout(this._timers[e]);for(var t in clearTimeout(this._sessionTimers.timer),this._dialog&&(this._dialog.terminate(),delete this._dialog),this._earlyDialogs)Object.prototype.hasOwnProperty.call(this._earlyDialogs,t)&&(this._earlyDialogs[t].terminate(),delete this._earlyDialogs[t]);for(var n in this._referSubscribers)Object.prototype.hasOwnProperty.call(this._referSubscribers,n)&&delete this._referSubscribers[n];this._ua.destroyRTCSession(this)}}},{key:"_setInvite2xxTimer",value:function(e,t){var n=y.T1;this._timers.invite2xxTimer=setTimeout(function r(){this._status===k.STATUS_WAITING_FOR_ACK&&(e.reply(200,null,["Contact: ".concat(this._contact)],t),ny.T2&&(n=y.T2),this._timers.invite2xxTimer=setTimeout(r.bind(this),n))}.bind(this),n)}},{key:"_setACKTimer",value:function(){var e=this;this._timers.ackTimer=setTimeout((function(){e._status===k.STATUS_WAITING_FOR_ACK&&(R.debug("no ACK received, terminating the session"),clearTimeout(e._timers.invite2xxTimer),e.sendRequest(g.BYE),e._ended("remote",null,g.causes.NO_ACK))}),y.TIMER_H)}},{key:"_createRTCConnection",value:function(e,t){var n=this;this._connection=new RTCPeerConnection(e,t),this._connection.addEventListener("iceconnectionstatechange",(function(){"failed"===n._connection.iceConnectionState&&n.terminate({cause:g.causes.RTP_TIMEOUT,status_code:408,reason_phrase:g.causes.RTP_TIMEOUT})})),R.debug('emit "peerconnection"'),this.emit("peerconnection",{peerconnection:this._connection})}},{key:"_createLocalDescription",value:function(e,t){var n=this;if(R.debug("createLocalDescription()"),"offer"!==e&&"answer"!==e)throw new Error('createLocalDescription() | invalid type "'.concat(e,'"'));var r=this._connection;return this._rtcReady=!1,Promise.resolve().then((function(){return"offer"===e?r.createOffer(t).catch((function(e){return R.warn('emit "peerconnection:createofferfailed" [error:%o]',e),n.emit("peerconnection:createofferfailed",e),Promise.reject(e)})):r.createAnswer(t).catch((function(e){return R.warn('emit "peerconnection:createanswerfailed" [error:%o]',e),n.emit("peerconnection:createanswerfailed",e),Promise.reject(e)}))})).then((function(e){return r.setLocalDescription(e).catch((function(e){return n._rtcReady=!0,R.warn('emit "peerconnection:setlocaldescriptionfailed" [error:%o]',e),n.emit("peerconnection:setlocaldescriptionfailed",e),Promise.reject(e)}))})).then((function(){if(!("complete"!==r.iceGatheringState||t&&t.iceRestart)){n._rtcReady=!0;var i={originator:"local",type:e,sdp:r.localDescription.sdp};return R.debug('emit "sdp"'),n.emit("sdp",i),Promise.resolve(i.sdp)}return new Promise((function(t){var i,o,s=!1,a=function(){r.removeEventListener("icecandidate",i),r.removeEventListener("icegatheringstatechange",o),s=!0,n._rtcReady=!0;var a={originator:"local",type:e,sdp:r.localDescription.sdp};R.debug('emit "sdp"'),n.emit("sdp",a),t(a.sdp)};r.addEventListener("icecandidate",i=function(e){var t=e.candidate;t?n.emit("icecandidate",{candidate:t,ready:a}):s||a()}),r.addEventListener("icegatheringstatechange",o=function(){"complete"!==r.iceGatheringState||s||a()})}))}))}},{key:"_createDialog",value:function(e,t,n){var r="UAS"===t?e.to_tag:e.from_tag,i="UAS"===t?e.from_tag:e.to_tag,o=e.call_id+r+i,s=this._earlyDialogs[o];if(n)return!!s||((s=new C(this,e,t,C.C.STATUS_EARLY)).error?(R.debug(s.error),this._failed("remote",e,g.causes.INTERNAL_ERROR),!1):(this._earlyDialogs[o]=s,!0));if(this._from_tag=e.from_tag,this._to_tag=e.to_tag,s)return s.update(e,t),this._dialog=s,delete this._earlyDialogs[o],!0;var a=new C(this,e,t);return a.error?(R.debug(a.error),this._failed("remote",e,g.causes.INTERNAL_ERROR),!1):(this._dialog=a,!0)}},{key:"_receiveReinvite",value:function(e){var t=this;R.debug("receiveReinvite()");var n=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0,r={request:e,callback:void 0,reject:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i=!0;var n=t.status_code||403,r=t.reason_phrase||"",o=v.cloneArray(t.extraHeaders);if(this._status!==k.STATUS_CONFIRMED)return!1;if(n<300||n>=700)throw new TypeError("Invalid status_code: ".concat(n));e.reply(n,r,o)}.bind(this)},i=!1;if(this.emit("reinvite",r),!i){if(this._late_sdp=!1,!e.body)return this._late_sdp=!0,this._remoteHold&&(this._remoteHold=!1,this._onunhold("remote")),void(this._connectionPromiseQueue=this._connectionPromiseQueue.then((function(){return t._createLocalDescription("offer",t._rtcOfferConstraints)})).then((function(e){o.call(t,e)})).catch((function(){e.reply(500)})));if("application/sdp"!==n)return R.debug("invalid Content-Type"),void e.reply(415);this._processInDialogSdpOffer(e).then((function(e){t._status!==k.STATUS_TERMINATED&&o.call(t,e)})).catch((function(e){R.warn(e)}))}function o(t){var n=this,i=["Contact: ".concat(this._contact)];this._handleSessionTimersInIncomingRequest(e,i),this._late_sdp&&(t=this._mangleOffer(t)),e.reply(200,null,i,t,(function(){n._status=k.STATUS_WAITING_FOR_ACK,n._setInvite2xxTimer(e,t),n._setACKTimer()})),"function"==typeof r.callback&&r.callback()}}},{key:"_receiveUpdate",value:function(e){var t=this;R.debug("receiveUpdate()");var n=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0,r={request:e,callback:void 0,reject:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i=!0;var n=t.status_code||403,r=t.reason_phrase||"",o=v.cloneArray(t.extraHeaders);if(this._status!==k.STATUS_CONFIRMED)return!1;if(n<300||n>=700)throw new TypeError("Invalid status_code: ".concat(n));e.reply(n,r,o)}.bind(this)},i=!1;if(this.emit("update",r),!i)if(e.body){if("application/sdp"!==n)return R.debug("invalid Content-Type"),void e.reply(415);this._processInDialogSdpOffer(e).then((function(e){t._status!==k.STATUS_TERMINATED&&o.call(t,e)})).catch((function(e){R.warn(e)}))}else o.call(this,null);function o(t){var n=["Contact: ".concat(this._contact)];this._handleSessionTimersInIncomingRequest(e,n),e.reply(200,null,n,t),"function"==typeof r.callback&&r.callback()}}},{key:"_processInDialogSdpOffer",value:function(e){var t=this;R.debug("_processInDialogSdpOffer()");var n,r=e.parseSDP(),o=!1,s=i(r.media);try{for(s.s();!(n=s.n()).done;){var a=n.value;if(-1!==x.indexOf(a.type)){var l=a.direction||r.direction||"sendrecv";if("sendonly"!==l&&"inactive"!==l){o=!1;break}o=!0}}}catch(e){s.e(e)}finally{s.f()}var u={originator:"remote",type:"offer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",u);var c=new RTCSessionDescription({type:"offer",sdp:u.sdp});return this._connectionPromiseQueue=this._connectionPromiseQueue.then((function(){if(t._status===k.STATUS_TERMINATED)throw new Error("terminated");return t._connection.setRemoteDescription(c).catch((function(n){throw e.reply(488),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',n),t.emit("peerconnection:setremotedescriptionfailed",n),n}))})).then((function(){if(t._status===k.STATUS_TERMINATED)throw new Error("terminated");!0===t._remoteHold&&!1===o?(t._remoteHold=!1,t._onunhold("remote")):!1===t._remoteHold&&!0===o&&(t._remoteHold=!0,t._onhold("remote"))})).then((function(){if(t._status===k.STATUS_TERMINATED)throw new Error("terminated");return t._createLocalDescription("answer",t._rtcAnswerConstraints).catch((function(t){throw e.reply(500),R.warn('emit "peerconnection:createtelocaldescriptionfailed" [error:%o]',t),t}))})).catch((function(e){R.warn("_processInDialogSdpOffer() failed [error: %o]",e)})),this._connectionPromiseQueue}},{key:"_receiveRefer",value:function(e){var t=this;if(R.debug("receiveRefer()"),!e.refer_to)return R.debug("no Refer-To header field present in REFER"),void e.reply(400);if(e.refer_to.uri.scheme!==g.SIP)return R.debug("Refer-To header field points to a non-SIP URI scheme"),void e.reply(416);e.reply(202);var r=new A(this,e.cseq);function i(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t="function"==typeof t?t:null,this._status!==k.STATUS_WAITING_FOR_ACK&&this._status!==k.STATUS_CONFIRMED)return!1;var o=new n(this._ua);if(o.on("progress",(function(e){var t=e.response;r.notify(t.status_code,t.reason_phrase)})),o.on("accepted",(function(e){var t=e.response;r.notify(t.status_code,t.reason_phrase)})),o.on("_failed",(function(e){var t=e.message,n=e.cause;t?r.notify(t.status_code,t.reason_phrase):r.notify(487,n)})),e.refer_to.uri.hasHeader("replaces")){var s=decodeURIComponent(e.refer_to.uri.getHeader("replaces"));i.extraHeaders=v.cloneArray(i.extraHeaders),i.extraHeaders.push("Replaces: ".concat(s))}o.connect(e.refer_to.uri.toAor(),i,t)}function o(){r.notify(603)}R.debug('emit "refer"'),this.emit("refer",{request:e,accept:function(e,n){i.call(t,e,n)},reject:function(){o.call(t)}})}},{key:"_receiveNotify",value:function(e){switch(R.debug("receiveNotify()"),e.event||e.reply(400),e.event.event){case"refer":var t,n;if(e.event.params&&e.event.params.id)t=e.event.params.id,n=this._referSubscribers[t];else{if(1!==Object.keys(this._referSubscribers).length)return void e.reply(400,"Missing event id parameter");n=this._referSubscribers[Object.keys(this._referSubscribers)[0]]}if(!n)return void e.reply(481,"Subscription does not exist");n.receiveNotify(e),e.reply(200);break;default:e.reply(489)}}},{key:"_receiveReplaces",value:function(e){var t=this;function r(t){var r=this;if(this._status!==k.STATUS_WAITING_FOR_ACK&&this._status!==k.STATUS_CONFIRMED)return!1;var i=new n(this._ua);i.on("confirmed",(function(){r.terminate()})),i.init_incoming(e,t)}function i(){R.debug("Replaced INVITE rejected by the user"),e.reply(486)}R.debug("receiveReplaces()"),this.emit("replaces",{request:e,accept:function(e){r.call(t,e)},reject:function(){i.call(t)}})}},{key:"_sendInitialRequest",value:function(e,t,n){var r=this,i=new T(this._ua,this._request,{onRequestTimeout:function(){r.onRequestTimeout()},onTransportError:function(){r.onTransportError()},onAuthenticated:function(e){r._request=e},onReceiveResponse:function(e){r._receiveInviteResponse(e)}});Promise.resolve().then((function(){return n||(e.audio||e.video?(r._localMediaStreamLocallyGenerated=!0,navigator.mediaDevices.getUserMedia(e).catch((function(e){if(r._status===k.STATUS_TERMINATED)throw new Error("terminated");throw r._failed("local",null,g.causes.USER_DENIED_MEDIA_ACCESS),R.warn('emit "getusermediafailed" [error:%o]',e),r.emit("getusermediafailed",e),e}))):void 0)})).then((function(e){if(r._status===k.STATUS_TERMINATED)throw new Error("terminated");return r._localMediaStream=e,e&&e.getTracks().forEach((function(t){r._connection.addTrack(t,e)})),r._connecting(r._request),r._createLocalDescription("offer",t).catch((function(e){throw r._failed("local",null,g.causes.WEBRTC_ERROR),e}))})).then((function(e){if(r._is_canceled||r._status===k.STATUS_TERMINATED)throw new Error("terminated");r._request.body=e,r._status=k.STATUS_INVITE_SENT,R.debug('emit "sending" [request:%o]',r._request),r.emit("sending",{request:r._request}),i.send()})).catch((function(e){r._status!==k.STATUS_TERMINATED&&R.warn(e)}))}},{key:"_getDTMFRTPSender",value:function(){var e=this._connection.getSenders().find((function(e){return e.track&&"audio"===e.track.kind}));if(e&&e.dtmf)return e.dtmf;R.warn("sendDTMF() | no local audio track to send DTMF with")}},{key:"_receiveInviteResponse",value:function(e){var t=this;if(R.debug("receiveInviteResponse()"),this._dialog&&e.status_code>=200&&e.status_code<=299){if(this._dialog.id.call_id===e.call_id&&this._dialog.id.local_tag===e.from_tag&&this._dialog.id.remote_tag===e.to_tag)return void this.sendRequest(g.ACK);var n=new C(this,e,"UAC");return void 0!==n.error?void R.debug(n.error):(this.sendRequest(g.ACK),void this.sendRequest(g.BYE))}if(this._is_canceled)e.status_code>=100&&e.status_code<200?this._request.cancel(this._cancel_reason):e.status_code>=200&&e.status_code<299&&this._acceptAndTerminate(e);else if(this._status===k.STATUS_INVITE_SENT||this._status===k.STATUS_1XX_RECEIVED)switch(!0){case/^100$/.test(e.status_code):this._status=k.STATUS_1XX_RECEIVED;break;case/^1[0-9]{2}$/.test(e.status_code):if(!e.to_tag){R.debug("1xx response received without to tag");break}if(e.hasHeader("contact")&&!this._createDialog(e,"UAC",!0))break;if(this._status=k.STATUS_1XX_RECEIVED,!e.body){this._progress("remote",e);break}var r={originator:"remote",type:"answer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",r);var i=new RTCSessionDescription({type:"answer",sdp:r.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then((function(){return t._connection.setRemoteDescription(i)})).then((function(){return t._progress("remote",e)})).catch((function(e){R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)}));break;case/^2[0-9]{2}$/.test(e.status_code):if(this._status=k.STATUS_CONFIRMED,!e.body){this._acceptAndTerminate(e,400,g.causes.MISSING_SDP),this._failed("remote",e,g.causes.BAD_MEDIA_DESCRIPTION);break}if(!this._createDialog(e,"UAC"))break;var o={originator:"remote",type:"answer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",o);var s=new RTCSessionDescription({type:"answer",sdp:o.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then((function(){if("stable"===t._connection.signalingState)return t._connection.createOffer(t._rtcOfferConstraints).then((function(e){return t._connection.setLocalDescription(e)})).catch((function(n){t._acceptAndTerminate(e,500,n.toString()),t._failed("local",e,g.causes.WEBRTC_ERROR)}))})).then((function(){t._connection.setRemoteDescription(s).then((function(){t._handleSessionTimersInIncomingResponse(e),t._accepted("remote",e),t.sendRequest(g.ACK),t._confirmed("local",null)})).catch((function(n){t._acceptAndTerminate(e,488,"Not Acceptable Here"),t._failed("remote",e,g.causes.BAD_MEDIA_DESCRIPTION),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',n),t.emit("peerconnection:setremotedescriptionfailed",n)}))}));break;default:var a=v.sipErrorCause(e.status_code);this._failed("remote",e,a)}}},{key:"_sendReinvite",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};R.debug("sendReinvite()");var n=v.cloneArray(t.extraHeaders),r=v.cloneObject(t.eventHandlers),i=t.rtcOfferConstraints||this._rtcOfferConstraints||null,o=!1;function s(e){var t=this;if(this._status!==k.STATUS_TERMINATED&&(this.sendRequest(g.ACK),!o))if(this._handleSessionTimersInIncomingResponse(e),e.body)if(e.hasHeader("Content-Type")&&"application/sdp"===e.getHeader("Content-Type").toLowerCase()){var n={originator:"remote",type:"answer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",n);var i=new RTCSessionDescription({type:"answer",sdp:n.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then((function(){return t._connection.setRemoteDescription(i)})).then((function(){r.succeeded&&r.succeeded(e)})).catch((function(e){a.call(t),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)}))}else a.call(this);else a.call(this)}function a(e){r.failed&&r.failed(e)}n.push("Contact: ".concat(this._contact)),n.push("Content-Type: application/sdp"),this._sessionTimers.running&&n.push("Session-Expires: ".concat(this._sessionTimers.currentExpires,";refresher=").concat(this._sessionTimers.refresher?"uac":"uas")),this._connectionPromiseQueue=this._connectionPromiseQueue.then((function(){return e._createLocalDescription("offer",i)})).then((function(t){var r={originator:"local",type:"offer",sdp:t=e._mangleOffer(t)};R.debug('emit "sdp"'),e.emit("sdp",r),e.sendRequest(g.INVITE,{extraHeaders:n,body:t,eventHandlers:{onSuccessResponse:function(t){s.call(e,t),o=!0},onErrorResponse:function(t){a.call(e,t)},onTransportError:function(){e.onTransportError()},onRequestTimeout:function(){e.onRequestTimeout()},onDialogError:function(){e.onDialogError()}}})})).catch((function(){a()}))}},{key:"_sendUpdate",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};R.debug("sendUpdate()");var n=v.cloneArray(t.extraHeaders),r=v.cloneObject(t.eventHandlers),i=t.rtcOfferConstraints||this._rtcOfferConstraints||null,o=t.sdpOffer||!1,s=!1;function a(e){var t=this;if(this._status!==k.STATUS_TERMINATED&&!s)if(this._handleSessionTimersInIncomingResponse(e),o){if(!e.body)return void l.call(this);if(!e.hasHeader("Content-Type")||"application/sdp"!==e.getHeader("Content-Type").toLowerCase())return void l.call(this);var n={originator:"remote",type:"answer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",n);var i=new RTCSessionDescription({type:"answer",sdp:n.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then((function(){return t._connection.setRemoteDescription(i)})).then((function(){r.succeeded&&r.succeeded(e)})).catch((function(e){l.call(t),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)}))}else r.succeeded&&r.succeeded(e)}function l(e){r.failed&&r.failed(e)}n.push("Contact: ".concat(this._contact)),this._sessionTimers.running&&n.push("Session-Expires: ".concat(this._sessionTimers.currentExpires,";refresher=").concat(this._sessionTimers.refresher?"uac":"uas")),o?(n.push("Content-Type: application/sdp"),this._connectionPromiseQueue=this._connectionPromiseQueue.then((function(){return e._createLocalDescription("offer",i)})).then((function(t){var r={originator:"local",type:"offer",sdp:t=e._mangleOffer(t)};R.debug('emit "sdp"'),e.emit("sdp",r),e.sendRequest(g.UPDATE,{extraHeaders:n,body:t,eventHandlers:{onSuccessResponse:function(t){a.call(e,t),s=!0},onErrorResponse:function(t){l.call(e,t)},onTransportError:function(){e.onTransportError()},onRequestTimeout:function(){e.onRequestTimeout()},onDialogError:function(){e.onDialogError()}}})})).catch((function(){l.call(e)}))):this.sendRequest(g.UPDATE,{extraHeaders:n,eventHandlers:{onSuccessResponse:function(t){a.call(e,t)},onErrorResponse:function(t){l.call(e,t)},onTransportError:function(){e.onTransportError()},onRequestTimeout:function(){e.onRequestTimeout()},onDialogError:function(){e.onDialogError()}}})}},{key:"_acceptAndTerminate",value:function(e,t,n){R.debug("acceptAndTerminate()");var r=[];t&&(n=n||g.REASON_PHRASE[t]||"",r.push("Reason: SIP ;cause=".concat(t,'; text="').concat(n,'"'))),(this._dialog||this._createDialog(e,"UAC"))&&(this.sendRequest(g.ACK),this.sendRequest(g.BYE,{extraHeaders:r})),this._status=k.STATUS_TERMINATED}},{key:"_mangleOffer",value:function(e){if(!this._localHold&&!this._remoteHold)return e;if(e=f.parse(e),this._localHold&&!this._remoteHold){R.debug("mangleOffer() | me on hold, mangling offer");var t,n=i(e.media);try{for(n.s();!(t=n.n()).done;){var r=t.value;-1!==x.indexOf(r.type)&&(r.direction?"sendrecv"===r.direction?r.direction="sendonly":"recvonly"===r.direction&&(r.direction="inactive"):r.direction="sendonly")}}catch(e){n.e(e)}finally{n.f()}}else if(this._localHold&&this._remoteHold){R.debug("mangleOffer() | both on hold, mangling offer");var o,s=i(e.media);try{for(s.s();!(o=s.n()).done;){var a=o.value;-1!==x.indexOf(a.type)&&(a.direction="inactive")}}catch(e){s.e(e)}finally{s.f()}}else if(this._remoteHold){R.debug("mangleOffer() | remote on hold, mangling offer");var l,u=i(e.media);try{for(u.s();!(l=u.n()).done;){var c=l.value;-1!==x.indexOf(c.type)&&(c.direction?"sendrecv"===c.direction?c.direction="recvonly":"recvonly"===c.direction&&(c.direction="inactive"):c.direction="recvonly")}}catch(e){u.e(e)}finally{u.f()}}return f.write(e)}},{key:"_setLocalMediaStatus",value:function(){var e=!0,t=!0;(this._localHold||this._remoteHold)&&(e=!1,t=!1),this._audioMuted&&(e=!1),this._videoMuted&&(t=!1),this._toggleMuteAudio(!e),this._toggleMuteVideo(!t)}},{key:"_handleSessionTimersInIncomingRequest",value:function(e,t){var n;this._sessionTimers.enabled&&(e.session_expires&&e.session_expires>=g.MIN_SESSION_EXPIRES?(this._sessionTimers.currentExpires=e.session_expires,n=e.session_expires_refresher||"uas"):(this._sessionTimers.currentExpires=this._sessionTimers.defaultExpires,n="uas"),t.push("Session-Expires: ".concat(this._sessionTimers.currentExpires,";refresher=").concat(n)),this._sessionTimers.refresher="uas"===n,this._runSessionTimer())}},{key:"_handleSessionTimersInIncomingResponse",value:function(e){var t;this._sessionTimers.enabled&&(e.session_expires&&e.session_expires>=g.MIN_SESSION_EXPIRES?(this._sessionTimers.currentExpires=e.session_expires,t=e.session_expires_refresher||"uac"):(this._sessionTimers.currentExpires=this._sessionTimers.defaultExpires,t="uac"),this._sessionTimers.refresher="uac"===t,this._runSessionTimer())}},{key:"_runSessionTimer",value:function(){var e=this,t=this._sessionTimers.currentExpires;this._sessionTimers.running=!0,clearTimeout(this._sessionTimers.timer),this._sessionTimers.refresher?this._sessionTimers.timer=setTimeout((function(){e._status!==k.STATUS_TERMINATED&&(R.debug("runSessionTimer() | sending session refresh request"),e._sessionTimers.refreshMethod===g.UPDATE?e._sendUpdate():e._sendReinvite())}),500*t):this._sessionTimers.timer=setTimeout((function(){e._status!==k.STATUS_TERMINATED&&(R.warn("runSessionTimer() | timer expired, terminating the session"),e.terminate({cause:g.causes.REQUEST_TIMEOUT,status_code:408,reason_phrase:"Session Timer Expired"}))}),1100*t)}},{key:"_toggleMuteAudio",value:function(e){var t,n=i(this._connection.getSenders().filter((function(e){return e.track&&"audio"===e.track.kind})));try{for(n.s();!(t=n.n()).done;){t.value.track.enabled=!e}}catch(e){n.e(e)}finally{n.f()}}},{key:"_toggleMuteVideo",value:function(e){var t,n=i(this._connection.getSenders().filter((function(e){return e.track&&"video"===e.track.kind})));try{for(n.s();!(t=n.n()).done;){t.value.track.enabled=!e}}catch(e){n.e(e)}finally{n.f()}}},{key:"_newRTCSession",value:function(e,t){R.debug("newRTCSession()"),this._ua.newRTCSession(this,{originator:e,session:this,request:t})}},{key:"_connecting",value:function(e){R.debug("session connecting"),R.debug('emit "connecting"'),this.emit("connecting",{request:e})}},{key:"_progress",value:function(e,t){R.debug("session progress"),R.debug('emit "progress"'),this.emit("progress",{originator:e,response:t||null})}},{key:"_accepted",value:function(e,t){R.debug("session accepted"),this._start_time=new Date,R.debug('emit "accepted"'),this.emit("accepted",{originator:e,response:t||null})}},{key:"_confirmed",value:function(e,t){R.debug("session confirmed"),this._is_confirmed=!0,R.debug('emit "confirmed"'),this.emit("confirmed",{originator:e,ack:t||null})}},{key:"_ended",value:function(e,t,n){R.debug("session ended"),this._end_time=new Date,this._close(),R.debug('emit "ended"'),this.emit("ended",{originator:e,message:t||null,cause:n})}},{key:"_failed",value:function(e,t,n){R.debug("session failed"),R.debug('emit "_failed"'),this.emit("_failed",{originator:e,message:t||null,cause:n}),this._close(),R.debug('emit "failed"'),this.emit("failed",{originator:e,message:t||null,cause:n})}},{key:"_onhold",value:function(e){R.debug("session onhold"),this._setLocalMediaStatus(),R.debug('emit "hold"'),this.emit("hold",{originator:e})}},{key:"_onunhold",value:function(e){R.debug("session onunhold"),this._setLocalMediaStatus(),R.debug('emit "unhold"'),this.emit("unhold",{originator:e})}},{key:"_onmute",value:function(e){var t=e.audio,n=e.video;R.debug("session onmute"),this._setLocalMediaStatus(),R.debug('emit "muted"'),this.emit("muted",{audio:t,video:n})}},{key:"_onunmute",value:function(e){var t=e.audio,n=e.video;R.debug("session onunmute"),this._setLocalMediaStatus(),R.debug('emit "unmuted"'),this.emit("unmuted",{audio:t,video:n})}},{key:"C",get:function(){return k}},{key:"causes",get:function(){return g.causes}},{key:"id",get:function(){return this._id}},{key:"connection",get:function(){return this._connection}},{key:"contact",get:function(){return this._contact}},{key:"direction",get:function(){return this._direction}},{key:"local_identity",get:function(){return this._local_identity}},{key:"remote_identity",get:function(){return this._remote_identity}},{key:"start_time",get:function(){return this._start_time}},{key:"end_time",get:function(){return this._end_time}},{key:"data",get:function(){return this._data},set:function(e){this._data=e}},{key:"status",get:function(){return this._status}}]),n}(h)},function(e,t,n){"use strict";var r=n(1),i=n(2),o=n(3),s=new r("Socket");t.isSocket=function(e){if(Array.isArray(e))return!1;if(void 0===e)return s.warn("undefined JsSIP.Socket instance"),!1;try{if(!i.isString(e.url))throw s.warn("missing or invalid JsSIP.Socket url property"),new Error("Missing or invalid JsSIP.Socket url property");if(!i.isString(e.via_transport))throw s.warn("missing or invalid JsSIP.Socket via_transport property"),new Error("Missing or invalid JsSIP.Socket via_transport property");if(-1===o.parse(e.sip_uri,"SIP_URI"))throw s.warn("missing or invalid JsSIP.Socket sip_uri property"),new Error("missing or invalid JsSIP.Socket sip_uri property")}catch(e){return!1}try{["connect","disconnect","send"].forEach((function(t){if(!i.isFunction(e[t]))throw s.warn("missing or invalid JsSIP.Socket method: ".concat(t)),new Error("Missing or invalid JsSIP.Socket method: ".concat(t))}))}catch(e){return!1}return!0}},function(e,t){function n(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(e.exports=n=function(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=n=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),n(t)}e.exports=n,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){(function(r,i){var o; -/*! - * EventEmitter2 - * https://github.com/hij1nx/EventEmitter2 - * - * Copyright (c) 2013 hij1nx - * Licensed under the MIT license. - */!function(s){var a=Object.hasOwnProperty,l=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},u="object"==typeof r&&"function"==typeof r.nextTick,c="function"==typeof Symbol,d="object"==typeof Reflect,h="function"==typeof i?i:setTimeout,f=c?d&&"function"==typeof Reflect.ownKeys?Reflect.ownKeys:function(e){var t=Object.getOwnPropertyNames(e);return t.push.apply(t,Object.getOwnPropertySymbols(e)),t}:Object.keys;function p(){this._events={},this._conf&&g.call(this,this._conf)}function g(e){e&&(this._conf=e,e.delimiter&&(this.delimiter=e.delimiter),void 0!==e.maxListeners&&(this._maxListeners=e.maxListeners),e.wildcard&&(this.wildcard=e.wildcard),e.newListener&&(this._newListener=e.newListener),e.removeListener&&(this._removeListener=e.removeListener),e.verboseMemoryLeak&&(this.verboseMemoryLeak=e.verboseMemoryLeak),e.ignoreErrors&&(this.ignoreErrors=e.ignoreErrors),this.wildcard&&(this.listenerTree={}))}function m(e,t){var n="(node) warning: possible EventEmitter memory leak detected. "+e+" listeners added. Use emitter.setMaxListeners() to increase limit.";if(this.verboseMemoryLeak&&(n+=" Event name: "+t+"."),void 0!==r&&r.emitWarning){var i=new Error(n);i.name="MaxListenersExceededWarning",i.emitter=this,i.count=e,r.emitWarning(i)}else console.error(n),console.trace&&console.trace()}var _=function(e,t,n){var r=arguments.length;switch(r){case 0:return[];case 1:return[e];case 2:return[e,t];case 3:return[e,t,n];default:for(var i=new Array(r);r--;)i[r]=arguments[r];return i}};function v(e,t){for(var n={},r=e.length,i=t?value.length:0,o=0;o0;)if(o===e[s])return r;i(t)}}Object.assign(y.prototype,{subscribe:function(e,t,n){var r=this,i=this._target,o=this._emitter,s=this._listeners,a=function(){var r=_.apply(null,arguments),s={data:r,name:t,original:e};if(n){var a=n.call(i,s);!1!==a&&o.emit.apply(o,[s.name].concat(r))}else o.emit.apply(o,[t].concat(r))};if(s[e])throw Error("Event '"+e+"' is already listening");this._listenersCount++,o._newListener&&o._removeListener&&!r._onNewListener?(this._onNewListener=function(n){n===t&&null===s[e]&&(s[e]=a,r._on.call(i,e,a))},o.on("newListener",this._onNewListener),this._onRemoveListener=function(n){n===t&&!o.hasListeners(n)&&s[e]&&(s[e]=null,r._off.call(i,e,a))},s[e]=null,o.on("removeListener",this._onRemoveListener)):(s[e]=a,r._on.call(i,e,a))},unsubscribe:function(e){var t,n,r,i=this,o=this._listeners,s=this._emitter,a=this._off,l=this._target;if(e&&"string"!=typeof e)throw TypeError("event must be a string");function u(){i._onNewListener&&(s.off("newListener",i._onNewListener),s.off("removeListener",i._onRemoveListener),i._onNewListener=null,i._onRemoveListener=null);var e=E.call(s,i);s._observers.splice(e,1)}if(e){if(!(t=o[e]))return;a.call(l,e,t),delete o[e],--this._listenersCount||u()}else{for(r=(n=f(o)).length;r-- >0;)e=n[r],a.call(l,e,o[e]);this._listeners={},this._listenersCount=0,u()}}});var w=T(["function"]),S=T(["object","function"]);function A(e,t,n){var r,i,o,s=0,a=new e((function(l,u,c){function d(){i&&(i=null),s&&(clearTimeout(s),s=0)}n=b(n,{timeout:0,overload:!1},{timeout:function(e,t){return("number"!=typeof(e*=1)||e<0||!Number.isFinite(e))&&t("timeout must be a positive number"),e}}),r=!n.overload&&"function"==typeof e.prototype.cancel&&"function"==typeof c;var h=function(e){d(),l(e)},f=function(e){d(),u(e)};r?t(h,f,c):(i=[function(e){f(e||Error("canceled"))}],t(h,f,(function(e){if(o)throw Error("Unable to subscribe on cancel event asynchronously");if("function"!=typeof e)throw TypeError("onCancel callback must be a function");i.push(e)})),o=!0),n.timeout>0&&(s=setTimeout((function(){var e=Error("timeout");s=0,a.cancel(e),u(e)}),n.timeout))}));return r||(a.cancel=function(e){if(i){for(var t=i.length,n=1;n0;)"_listeners"!==(h=v[a])&&(y=I(e,t,n[h],r+1,i))&&(b?b.push.apply(b,y):b=y);return b}if("**"===C){for((_=r+1===i||r+2===i&&"*"===T)&&n._listeners&&(b=I(e,t,n,i,i)),a=(v=f(n)).length;a-- >0;)"_listeners"!==(h=v[a])&&("*"===h||"**"===h?(n[h]._listeners&&!_&&(y=I(e,t,n[h],i,i))&&(b?b.push.apply(b,y):b=y),y=I(e,t,n[h],r,i)):y=I(e,t,n[h],h===T?r+2:r,i),y&&(b?b.push.apply(b,y):b=y));return b}if(n[C]&&(b=I(e,t,n[C],r+1,i)),(p=n["*"])&&I(e,t,p,r+1,i),g=n["**"])if(r0;)"_listeners"!==(h=v[a])&&(h===T?I(e,t,g[h],r+2,i):h===C?I(e,t,g[h],r+1,i):((m={})[h]=g[h],I(e,t,{"**":m},r+1,i)));else g._listeners?I(e,t,g,i,i):g["*"]&&g["*"]._listeners&&I(e,t,g["*"],i,i);return b}function R(e,t){var n,r,i=0,o=0,s=this.delimiter,a=s.length;if("string"==typeof e)if(-1!==(n=e.indexOf(s))){r=new Array(5);do{r[i++]=e.slice(o,n),o=n+a}while(-1!==(n=e.indexOf(s,o)));r[i++]=e.slice(o)}else r=[e],i=1;else r=e,i=e.length;if(i>1)for(n=0;n+10&&u._listeners.length>this._maxListeners&&(u._listeners.warned=!0,m.call(this,u._listeners.length,l))):u._listeners=t,!0;return!0}function k(e,t,n,r){for(var i,o,s,a,l=f(e),u=l.length,c=e._listeners;u-- >0;)i=e[o=l[u]],s="_listeners"===o?n:n?n.concat(o):[o],a=r||"symbol"==typeof o,c&&t.push(a?s:s.join(this.delimiter)),"object"==typeof i&&k.call(this,i,t,s,a);return t}function x(e){for(var t,n,r,i=f(e),o=i.length;o-- >0;)(t=e[n=i[o]])&&(r=!0,"_listeners"===n||x(t)||delete e[n]);return r}function M(e,t,n){this.emitter=e,this.event=t,this.listener=n}function D(e,t,n){if(!0===n)o=!0;else if(!1===n)i=!0;else{if(!n||"object"!=typeof n)throw TypeError("options should be an object or true");var i=n.async,o=n.promisify,s=n.nextTick,a=n.objectify}if(i||s||o){var l=t,c=t._origin||t;if(s&&!u)throw Error("process.nextTick is not supported");void 0===o&&(o="AsyncFunction"===t.constructor.name),(t=function(){var e=arguments,t=this,n=this.event;return o?s?Promise.resolve():new Promise((function(e){h(e)})).then((function(){return t.event=n,l.apply(t,e)})):(s?r.nextTick:h)((function(){t.event=n,l.apply(t,e)}))})._async=!0,t._origin=c}return[t,a?new M(this,e,t):this]}function O(e){this._events={},this._newListener=!1,this._removeListener=!1,this.verboseMemoryLeak=!1,g.call(this,e)}M.prototype.off=function(){return this.emitter.off(this.event,this.listener),this},O.EventEmitter2=O,O.prototype.listenTo=function(e,t,n){if("object"!=typeof e)throw TypeError("target musts be an object");var r=this;function i(t){if("object"!=typeof t)throw TypeError("events must be an object");var i,o=n.reducers,s=E.call(r,e);i=-1===s?new y(r,e,n):r._observers[s];for(var a,l=f(t),u=l.length,c="function"==typeof o,d=0;d0;)r=n[i],e&&r._target!==e||(r.unsubscribe(t),o=!0);return o},O.prototype.delimiter=".",O.prototype.setMaxListeners=function(e){void 0!==e&&(this._maxListeners=e,this._conf||(this._conf={}),this._conf.maxListeners=e)},O.prototype.getMaxListeners=function(){return this._maxListeners},O.prototype.event="",O.prototype.once=function(e,t,n){return this._once(e,t,!1,n)},O.prototype.prependOnceListener=function(e,t,n){return this._once(e,t,!0,n)},O.prototype._once=function(e,t,n,r){return this._many(e,1,t,n,r)},O.prototype.many=function(e,t,n,r){return this._many(e,t,n,!1,r)},O.prototype.prependMany=function(e,t,n,r){return this._many(e,t,n,!0,r)},O.prototype._many=function(e,t,n,r,i){var o=this;if("function"!=typeof n)throw new Error("many only accepts instances of Function");function s(){return 0==--t&&o.off(e,s),n.apply(this,arguments)}return s._origin=n,this._on(e,s,r,i)},O.prototype.emit=function(){if(!this._events&&!this._all)return!1;this._events||p.call(this);var e,t,n,r,i,o,s=arguments[0],a=this.wildcard;if("newListener"===s&&!this._newListener&&!this._events.newListener)return!1;if(a&&(e=s,"newListener"!==s&&"removeListener"!==s&&"object"==typeof s)){if(n=s.length,c)for(r=0;r3)for(t=new Array(u-1),i=1;i3)for(n=new Array(d-1),o=1;o0&&this._events[e].length>this._maxListeners&&(this._events[e].warned=!0,m.call(this,this._events[e].length,e))):this._events[e]=t,o)},O.prototype.off=function(e,t){if("function"!=typeof t)throw new Error("removeListener only takes instances of Function");var n,r=[];if(this.wildcard){var i="string"==typeof e?e.split(this.delimiter):e.slice();if(!(r=I.call(this,null,i,this.listenerTree,0)))return this}else{if(!this._events[e])return this;n=this._events[e],r.push({_listeners:n})}for(var o=0;o0){for(n=0,r=(t=this._all).length;n0;)"function"==typeof(n=s[t[i]])?r.push(n):r.push.apply(r,n);return r}if(this.wildcard){if(!(o=this.listenerTree))return[];var a=[],l="string"==typeof e?e.split(this.delimiter):e.slice();return I.call(this,a,l,o,0),a}return s&&(n=s[e])?"function"==typeof n?[n]:n:[]},O.prototype.eventNames=function(e){var t=this._events;return this.wildcard?k.call(this,this.listenerTree,[],null,e):t?f(t):[]},O.prototype.listenerCount=function(e){return this.listeners(e).length},O.prototype.hasListeners=function(e){if(this.wildcard){var t=[],n="string"==typeof e?e.split(this.delimiter):e.slice();return I.call(this,t,n,this.listenerTree,0),t.length>0}var r=this._events,i=this._all;return!!(i&&i.length||r&&(void 0===e?f(r).length:r[e]))},O.prototype.listenersAny=function(){return this._all?this._all:[]},O.prototype.waitFor=function(e,t){var n=this,r=typeof t;return"number"===r?t={timeout:t}:"function"===r&&(t={filter:t}),A((t=b(t,{timeout:0,filter:void 0,handleError:!1,Promise:Promise,overload:!1},{filter:w,Promise:C})).Promise,(function(r,i,o){function s(){var o=t.filter;if(!o||o.apply(n,arguments))if(n.off(e,s),t.handleError){var a=arguments[0];a?i(a):r(_.apply(null,arguments).slice(1))}else r(_.apply(null,arguments))}o((function(){n.off(e,s)})),n._on(e,s,!1)}),{timeout:t.timeout,overload:t.overload})};var L=O.prototype;Object.defineProperties(O,{defaultMaxListeners:{get:function(){return L._maxListeners},set:function(e){if("number"!=typeof e||e<0||Number.isNaN(e))throw TypeError("n must be a non-negative number");L._maxListeners=e},enumerable:!0},once:{value:function(e,t,n){return A((n=b(n,{Promise:Promise,timeout:0,overload:!1},{Promise:C})).Promise,(function(n,r,i){var o;if("function"==typeof e.addEventListener)return o=function(){n(_.apply(null,arguments))},i((function(){e.removeEventListener(t,o)})),void e.addEventListener(t,o,{once:!0});var s,a=function(){s&&e.removeListener("error",s),n(_.apply(null,arguments))};"error"!==t&&(s=function(n){e.removeListener(t,a),r(n)},e.once("error",s)),i((function(){s&&e.removeListener("error",s),e.removeListener(t,a)})),e.once(t,a)}),{timeout:n.timeout,overload:n.overload})},writable:!0,configurable:!0}}),Object.defineProperties(L,{_maxListeners:{value:10,writable:!0,configurable:!0},_observers:{value:null,writable:!0,configurable:!0}}),void 0===(o=function(){return O}.call(t,n,t,e))||(e.exports=o)}()}).call(this,n(12),n(30).setImmediate)},function(e,t,n){e.exports=function(){"use strict"; -/*! - * mustache.js - Logic-less {{mustache}} templates with JavaScript - * http://github.com/janl/mustache.js - */var e=Object.prototype.toString,t=Array.isArray||function(t){return"[object Array]"===e.call(t)};function n(e){return"function"==typeof e}function r(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function i(e,t){return null!=e&&"object"==typeof e&&t in e}var o=RegExp.prototype.test,s=/\S/;function a(e){return!function(e,t){return o.call(e,t)}(s,e)}var l={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="},u=/\s*/,c=/\s+/,d=/\s*=/,h=/\s*\}/,f=/#|\^|\/|>|\{|&|=|!/;function p(e){this.string=e,this.tail=e,this.pos=0}function g(e,t){this.view=e,this.cache={".":this.view},this.parent=t}function m(){this.cache={}}p.prototype.eos=function(){return""===this.tail},p.prototype.scan=function(e){var t=this.tail.match(e);if(!t||0!==t.index)return"";var n=t[0];return this.tail=this.tail.substring(n.length),this.pos+=n.length,n},p.prototype.scanUntil=function(e){var t,n=this.tail.search(e);switch(n){case-1:t=this.tail,this.tail="";break;case 0:t="";break;default:t=this.tail.substring(0,n),this.tail=this.tail.substring(n)}return this.pos+=t.length,t},g.prototype.push=function(e){return new g(e,this)},g.prototype.lookup=function(e){var t,r,o,s=this.cache;if(s.hasOwnProperty(e))t=s[e];else{for(var a,l,u,c=this,d=!1;c;){if(e.indexOf(".")>0)for(a=c.view,l=e.split("."),u=0;null!=a&&u0?i[i.length-1][4]:n;break;default:r.push(t)}return n}(function(e){for(var t,n,r=[],i=0,o=e.length;i"===s?a=this.renderPartial(o,t,n,i):"&"===s?a=this.unescapedValue(o,t):"name"===s?a=this.escapedValue(o,t):"text"===s&&(a=this.rawValue(o)),void 0!==a&&(l+=a);return l},m.prototype.renderSection=function(e,r,i,o){var s=this,a="",l=r.lookup(e[1]);if(l){if(t(l))for(var u=0,c=l.length;u0||!n)&&(i[o]=r+i[o]);return i.join("\n")},m.prototype.renderPartial=function(e,t,r,i){if(r){var o=n(r)?r(e[1]):r[e[1]];if(null!=o){var s=e[6],a=e[5],l=e[4],u=o;return 0==a&&l&&(u=this.indentPartial(o,l,s)),this.renderTokens(this.parse(u,i),t,r,u)}}},m.prototype.unescapedValue=function(e,t){var n=t.lookup(e[1]);if(null!=n)return n},m.prototype.escapedValue=function(e,t){var n=t.lookup(e[1]);if(null!=n)return _.escape(n)},m.prototype.rawValue=function(e){return e[1]};var _={name:"mustache.js",version:"3.2.1",tags:["{{","}}"],clearCache:void 0,escape:void 0,parse:void 0,render:void 0,to_html:void 0,Scanner:void 0,Context:void 0,Writer:void 0},v=new m;return _.clearCache=function(){return v.clearCache()},_.parse=function(e,t){return v.parse(e,t)},_.render=function(e,n,r,i){if("string"!=typeof e)throw new TypeError('Invalid template! Template should be a "string" but "'+(t(o=e)?"array":typeof o)+'" was given as the first argument for mustache#render(template, view, partials)');var o;return v.render(e,n,r,i)},_.to_html=function(e,t,r,i){var o=_.render(e,t,r);if(!n(i))return o;i(o)},_.escape=function(e){return String(e).replace(/[&<>"'`=\/]/g,(function(e){return l[e]}))},_.Scanner=p,_.Context=g,_.Writer=m,_}()},function(e,t,n){"use strict";const r=n(53);e.exports=(e,t={})=>{if(!Number.isFinite(e))throw new TypeError("Expected a finite number");t.colonNotation&&(t.compact=!1,t.formatSubMilliseconds=!1,t.separateMilliseconds=!1,t.verbose=!1),t.compact&&(t.secondsDecimalDigits=0,t.millisecondsDecimalDigits=0);const n=[],i=(e,r,i,o)=>{if(!(0!==n.length&&t.colonNotation||0!==e||t.colonNotation&&"m"===i))return;let s,a;if(o=(o||e||"0").toString(),t.colonNotation){s=n.length>0?":":"",a="";const e=o.includes(".")?o.split(".")[0].length:o.length,t=n.length>0?2:1;o="0".repeat(Math.max(0,t-e))+o}else s="",a=t.verbose?" "+(l=r,1===e?l:l+"s"):i;var l;n.push(s+o+a)},o=r(e);if(i(Math.trunc(o.days/365),"year","y"),i(o.days%365,"day","d"),i(o.hours,"hour","h"),i(o.minutes,"minute","m"),t.separateMilliseconds||t.formatSubMilliseconds||e<1e3)if(i(o.seconds,"second","s"),t.formatSubMilliseconds)i(o.milliseconds,"millisecond","ms"),i(o.microseconds,"microsecond","µs"),i(o.nanoseconds,"nanosecond","ns");else{const e=o.milliseconds+o.microseconds/1e3+o.nanoseconds/1e6,n="number"==typeof t.millisecondsDecimalDigits?t.millisecondsDecimalDigits:0,r=e>=1?Math.round(e):Math.ceil(e),s=n?e.toFixed(n):r;i(Number.parseFloat(s,10),"millisecond","ms",s)}else{const n=((e,t)=>{const n=Math.floor(e*10**t+1e-7);return(Math.round(n)/10**t).toFixed(t)})(e/1e3%60,"number"==typeof t.secondsDecimalDigits?t.secondsDecimalDigits:1),r=t.keepDecimalsOnWholeSeconds?n:n.replace(/\.0+$/,"");i(Number.parseFloat(r,10),"second","s",r)}if(0===n.length)return"0"+(t.verbose?" milliseconds":"ms");if(t.compact)return n[0];if("number"==typeof t.unitCount){const e=t.colonNotation?"":" ";return n.slice(0,Math.max(t.unitCount,1)).join(e)}return t.colonNotation?n.join(""):n.join(" ")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(54);t.Mutex=r.default},function(e,t,n){"use strict";var r=n(8);function i(e,t,n,i,o){var s=r.writeRtpDescription(e.kind,t);if(s+=r.writeIceParameters(e.iceGatherer.getLocalParameters()),s+=r.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),"offer"===n?"actpass":o||"active"),s+="a=mid:"+e.mid+"\r\n",e.rtpSender&&e.rtpReceiver?s+="a=sendrecv\r\n":e.rtpSender?s+="a=sendonly\r\n":e.rtpReceiver?s+="a=recvonly\r\n":s+="a=inactive\r\n",e.rtpSender){var a=e.rtpSender._initialTrackId||e.rtpSender.track.id;e.rtpSender._initialTrackId=a;var l="msid:"+(i?i.id:"-")+" "+a+"\r\n";s+="a="+l,s+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" "+l,e.sendEncodingParameters[0].rtx&&(s+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" "+l,s+="a=ssrc-group:FID "+e.sendEncodingParameters[0].ssrc+" "+e.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return s+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" cname:"+r.localCName+"\r\n",e.rtpSender&&e.sendEncodingParameters[0].rtx&&(s+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" cname:"+r.localCName+"\r\n"),s}function o(e,t){var n={codecs:[],headerExtensions:[],fecMechanisms:[]},r=function(e,t){e=parseInt(e,10);for(var n=0;n=14393&&-1===e.indexOf("?transport=udp")})),delete e.url,e.urls=i?r[0]:r,!!r.length}}))}(n.iceServers||[],t),this._iceGatherers=[],n.iceCandidatePoolSize)for(var s=n.iceCandidatePoolSize;s>0;s--)this._iceGatherers.push(new e.RTCIceGatherer({iceServers:n.iceServers,gatherPolicy:n.iceTransportPolicy}));else n.iceCandidatePoolSize=0;this._config=n,this.transceivers=[],this._sdpSessionId=r.generateSessionId(),this._sdpSessionVersion=0,this._dtlsRole=void 0,this._isClosed=!1};Object.defineProperty(c.prototype,"localDescription",{configurable:!0,get:function(){return this._localDescription}}),Object.defineProperty(c.prototype,"remoteDescription",{configurable:!0,get:function(){return this._remoteDescription}}),c.prototype.onicecandidate=null,c.prototype.onaddstream=null,c.prototype.ontrack=null,c.prototype.onremovestream=null,c.prototype.onsignalingstatechange=null,c.prototype.oniceconnectionstatechange=null,c.prototype.onconnectionstatechange=null,c.prototype.onicegatheringstatechange=null,c.prototype.onnegotiationneeded=null,c.prototype.ondatachannel=null,c.prototype._dispatchEvent=function(e,t){this._isClosed||(this.dispatchEvent(t),"function"==typeof this["on"+e]&&this["on"+e](t))},c.prototype._emitGatheringStateChange=function(){var e=new Event("icegatheringstatechange");this._dispatchEvent("icegatheringstatechange",e)},c.prototype.getConfiguration=function(){return this._config},c.prototype.getLocalStreams=function(){return this.localStreams},c.prototype.getRemoteStreams=function(){return this.remoteStreams},c.prototype._createTransceiver=function(e,t){var n=this.transceivers.length>0,r={track:null,iceGatherer:null,iceTransport:null,dtlsTransport:null,localCapabilities:null,remoteCapabilities:null,rtpSender:null,rtpReceiver:null,kind:e,mid:null,sendEncodingParameters:null,recvEncodingParameters:null,stream:null,associatedRemoteMediaStreams:[],wantReceive:!0};if(this.usingBundle&&n)r.iceTransport=this.transceivers[0].iceTransport,r.dtlsTransport=this.transceivers[0].dtlsTransport;else{var i=this._createIceAndDtlsTransports();r.iceTransport=i.iceTransport,r.dtlsTransport=i.dtlsTransport}return t||this.transceivers.push(r),r},c.prototype.addTrack=function(t,n){if(this._isClosed)throw l("InvalidStateError","Attempted to call addTrack on a closed peerconnection.");var r;if(this.transceivers.find((function(e){return e.track===t})))throw l("InvalidAccessError","Track already exists.");for(var i=0;i=15025)e.getTracks().forEach((function(t){n.addTrack(t,e)}));else{var r=e.clone();e.getTracks().forEach((function(e,t){var n=r.getTracks()[t];e.addEventListener("enabled",(function(e){n.enabled=e.enabled}))})),r.getTracks().forEach((function(e){n.addTrack(e,r)}))}},c.prototype.removeTrack=function(t){if(this._isClosed)throw l("InvalidStateError","Attempted to call removeTrack on a closed peerconnection.");if(!(t instanceof e.RTCRtpSender))throw new TypeError("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.");var n=this.transceivers.find((function(e){return e.rtpSender===t}));if(!n)throw l("InvalidAccessError","Sender was not created by this connection.");var r=n.stream;n.rtpSender.stop(),n.rtpSender=null,n.track=null,n.stream=null,-1===this.transceivers.map((function(e){return e.stream})).indexOf(r)&&this.localStreams.indexOf(r)>-1&&this.localStreams.splice(this.localStreams.indexOf(r),1),this._maybeFireNegotiationNeeded()},c.prototype.removeStream=function(e){var t=this;e.getTracks().forEach((function(e){var n=t.getSenders().find((function(t){return t.track===e}));n&&t.removeTrack(n)}))},c.prototype.getSenders=function(){return this.transceivers.filter((function(e){return!!e.rtpSender})).map((function(e){return e.rtpSender}))},c.prototype.getReceivers=function(){return this.transceivers.filter((function(e){return!!e.rtpReceiver})).map((function(e){return e.rtpReceiver}))},c.prototype._createIceGatherer=function(t,n){var r=this;if(n&&t>0)return this.transceivers[0].iceGatherer;if(this._iceGatherers.length)return this._iceGatherers.shift();var i=new e.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});return Object.defineProperty(i,"state",{value:"new",writable:!0}),this.transceivers[t].bufferedCandidateEvents=[],this.transceivers[t].bufferCandidates=function(e){var n=!e.candidate||0===Object.keys(e.candidate).length;i.state=n?"completed":"gathering",null!==r.transceivers[t].bufferedCandidateEvents&&r.transceivers[t].bufferedCandidateEvents.push(e)},i.addEventListener("localcandidate",this.transceivers[t].bufferCandidates),i},c.prototype._gather=function(t,n){var i=this,o=this.transceivers[n].iceGatherer;if(!o.onlocalcandidate){var s=this.transceivers[n].bufferedCandidateEvents;this.transceivers[n].bufferedCandidateEvents=null,o.removeEventListener("localcandidate",this.transceivers[n].bufferCandidates),o.onlocalcandidate=function(e){if(!(i.usingBundle&&n>0)){var s=new Event("icecandidate");s.candidate={sdpMid:t,sdpMLineIndex:n};var a=e.candidate,l=!a||0===Object.keys(a).length;if(l)"new"!==o.state&&"gathering"!==o.state||(o.state="completed");else{"new"===o.state&&(o.state="gathering"),a.component=1,a.ufrag=o.getLocalParameters().usernameFragment;var u=r.writeCandidate(a);s.candidate=Object.assign(s.candidate,r.parseCandidate(u)),s.candidate.candidate=u,s.candidate.toJSON=function(){return{candidate:s.candidate.candidate,sdpMid:s.candidate.sdpMid,sdpMLineIndex:s.candidate.sdpMLineIndex,usernameFragment:s.candidate.usernameFragment}}}var c=r.getMediaSections(i._localDescription.sdp);c[s.candidate.sdpMLineIndex]+=l?"a=end-of-candidates\r\n":"a="+s.candidate.candidate+"\r\n",i._localDescription.sdp=r.getDescription(i._localDescription.sdp)+c.join("");var d=i.transceivers.every((function(e){return e.iceGatherer&&"completed"===e.iceGatherer.state}));"gathering"!==i.iceGatheringState&&(i.iceGatheringState="gathering",i._emitGatheringStateChange()),l||i._dispatchEvent("icecandidate",s),d&&(i._dispatchEvent("icecandidate",new Event("icecandidate")),i.iceGatheringState="complete",i._emitGatheringStateChange())}},e.setTimeout((function(){s.forEach((function(e){o.onlocalcandidate(e)}))}),0)}},c.prototype._createIceAndDtlsTransports=function(){var t=this,n=new e.RTCIceTransport(null);n.onicestatechange=function(){t._updateIceConnectionState(),t._updateConnectionState()};var r=new e.RTCDtlsTransport(n);return r.ondtlsstatechange=function(){t._updateConnectionState()},r.onerror=function(){Object.defineProperty(r,"state",{value:"failed",writable:!0}),t._updateConnectionState()},{iceTransport:n,dtlsTransport:r}},c.prototype._disposeIceAndDtlsTransports=function(e){var t=this.transceivers[e].iceGatherer;t&&(delete t.onlocalcandidate,delete this.transceivers[e].iceGatherer);var n=this.transceivers[e].iceTransport;n&&(delete n.onicestatechange,delete this.transceivers[e].iceTransport);var r=this.transceivers[e].dtlsTransport;r&&(delete r.ondtlsstatechange,delete r.onerror,delete this.transceivers[e].dtlsTransport)},c.prototype._transceive=function(e,n,i){var s=o(e.localCapabilities,e.remoteCapabilities);n&&e.rtpSender&&(s.encodings=e.sendEncodingParameters,s.rtcp={cname:r.localCName,compound:e.rtcpParameters.compound},e.recvEncodingParameters.length&&(s.rtcp.ssrc=e.recvEncodingParameters[0].ssrc),e.rtpSender.send(s)),i&&e.rtpReceiver&&s.codecs.length>0&&("video"===e.kind&&e.recvEncodingParameters&&t<15019&&e.recvEncodingParameters.forEach((function(e){delete e.rtx})),e.recvEncodingParameters.length?s.encodings=e.recvEncodingParameters:s.encodings=[{}],s.rtcp={compound:e.rtcpParameters.compound},e.rtcpParameters.cname&&(s.rtcp.cname=e.rtcpParameters.cname),e.sendEncodingParameters.length&&(s.rtcp.ssrc=e.sendEncodingParameters[0].ssrc),e.rtpReceiver.receive(s))},c.prototype.setLocalDescription=function(e){var t,n,i=this;if(-1===["offer","answer"].indexOf(e.type))return Promise.reject(l("TypeError",'Unsupported type "'+e.type+'"'));if(!s("setLocalDescription",e.type,i.signalingState)||i._isClosed)return Promise.reject(l("InvalidStateError","Can not set local "+e.type+" in state "+i.signalingState));if("offer"===e.type)t=r.splitSections(e.sdp),n=t.shift(),t.forEach((function(e,t){var n=r.parseRtpParameters(e);i.transceivers[t].localCapabilities=n})),i.transceivers.forEach((function(e,t){i._gather(e.mid,t)}));else if("answer"===e.type){t=r.splitSections(i._remoteDescription.sdp),n=t.shift();var a=r.matchPrefix(n,"a=ice-lite").length>0;t.forEach((function(e,t){var s=i.transceivers[t],l=s.iceGatherer,u=s.iceTransport,c=s.dtlsTransport,d=s.localCapabilities,h=s.remoteCapabilities;if(!(r.isRejected(e)&&0===r.matchPrefix(e,"a=bundle-only").length)&&!s.rejected){var f=r.getIceParameters(e,n),p=r.getDtlsParameters(e,n);a&&(p.role="server"),i.usingBundle&&0!==t||(i._gather(s.mid,t),"new"===u.state&&u.start(l,f,a?"controlling":"controlled"),"new"===c.state&&c.start(p));var g=o(d,h);i._transceive(s,g.codecs.length>0,!1)}}))}return i._localDescription={type:e.type,sdp:e.sdp},"offer"===e.type?i._updateSignalingState("have-local-offer"):i._updateSignalingState("stable"),Promise.resolve()},c.prototype.setRemoteDescription=function(i){var c=this;if(-1===["offer","answer"].indexOf(i.type))return Promise.reject(l("TypeError",'Unsupported type "'+i.type+'"'));if(!s("setRemoteDescription",i.type,c.signalingState)||c._isClosed)return Promise.reject(l("InvalidStateError","Can not set remote "+i.type+" in state "+c.signalingState));var d={};c.remoteStreams.forEach((function(e){d[e.id]=e}));var h=[],f=r.splitSections(i.sdp),p=f.shift(),g=r.matchPrefix(p,"a=ice-lite").length>0,m=r.matchPrefix(p,"a=group:BUNDLE ").length>0;c.usingBundle=m;var _=r.matchPrefix(p,"a=ice-options:")[0];return c.canTrickleIceCandidates=!!_&&_.substr(14).split(" ").indexOf("trickle")>=0,f.forEach((function(s,l){var u=r.splitLines(s),f=r.getKind(s),_=r.isRejected(s)&&0===r.matchPrefix(s,"a=bundle-only").length,v=u[0].substr(2).split(" ")[2],y=r.getDirection(s,p),b=r.parseMsid(s),C=r.getMid(s)||r.generateIdentifier();if(_||"application"===f&&("DTLS/SCTP"===v||"UDP/DTLS/SCTP"===v))c.transceivers[l]={mid:C,kind:f,protocol:v,rejected:!0};else{var T,w,S,A,E,I,R,k,x;!_&&c.transceivers[l]&&c.transceivers[l].rejected&&(c.transceivers[l]=c._createTransceiver(f,!0));var M,D,O=r.parseRtpParameters(s);_||(M=r.getIceParameters(s,p),(D=r.getDtlsParameters(s,p)).role="client"),R=r.parseRtpEncodingParameters(s);var L=r.parseRtcpParameters(s),P=r.matchPrefix(s,"a=end-of-candidates",p).length>0,N=r.matchPrefix(s,"a=candidate:").map((function(e){return r.parseCandidate(e)})).filter((function(e){return 1===e.component}));if(("offer"===i.type||"answer"===i.type)&&!_&&m&&l>0&&c.transceivers[l]&&(c._disposeIceAndDtlsTransports(l),c.transceivers[l].iceGatherer=c.transceivers[0].iceGatherer,c.transceivers[l].iceTransport=c.transceivers[0].iceTransport,c.transceivers[l].dtlsTransport=c.transceivers[0].dtlsTransport,c.transceivers[l].rtpSender&&c.transceivers[l].rtpSender.setTransport(c.transceivers[0].dtlsTransport),c.transceivers[l].rtpReceiver&&c.transceivers[l].rtpReceiver.setTransport(c.transceivers[0].dtlsTransport)),"offer"!==i.type||_){if("answer"===i.type&&!_){w=(T=c.transceivers[l]).iceGatherer,S=T.iceTransport,A=T.dtlsTransport,E=T.rtpReceiver,I=T.sendEncodingParameters,k=T.localCapabilities,c.transceivers[l].recvEncodingParameters=R,c.transceivers[l].remoteCapabilities=O,c.transceivers[l].rtcpParameters=L,N.length&&"new"===S.state&&(!g&&!P||m&&0!==l?N.forEach((function(e){a(T.iceTransport,e)})):S.setRemoteCandidates(N)),m&&0!==l||("new"===S.state&&S.start(w,M,"controlling"),"new"===A.state&&A.start(D)),!o(T.localCapabilities,T.remoteCapabilities).codecs.filter((function(e){return"rtx"===e.name.toLowerCase()})).length&&T.sendEncodingParameters[0].rtx&&delete T.sendEncodingParameters[0].rtx,c._transceive(T,"sendrecv"===y||"recvonly"===y,"sendrecv"===y||"sendonly"===y),!E||"sendrecv"!==y&&"sendonly"!==y?delete T.rtpReceiver:(x=E.track,b?(d[b.stream]||(d[b.stream]=new e.MediaStream),n(x,d[b.stream]),h.push([x,E,d[b.stream]])):(d.default||(d.default=new e.MediaStream),n(x,d.default),h.push([x,E,d.default])))}}else{(T=c.transceivers[l]||c._createTransceiver(f)).mid=C,T.iceGatherer||(T.iceGatherer=c._createIceGatherer(l,m)),N.length&&"new"===T.iceTransport.state&&(!P||m&&0!==l?N.forEach((function(e){a(T.iceTransport,e)})):T.iceTransport.setRemoteCandidates(N)),k=e.RTCRtpReceiver.getCapabilities(f),t<15019&&(k.codecs=k.codecs.filter((function(e){return"rtx"!==e.name}))),I=T.sendEncodingParameters||[{ssrc:1001*(2*l+2)}];var j,U=!1;if("sendrecv"===y||"sendonly"===y){if(U=!T.rtpReceiver,E=T.rtpReceiver||new e.RTCRtpReceiver(T.dtlsTransport,f),U)x=E.track,b&&"-"===b.stream||(b?(d[b.stream]||(d[b.stream]=new e.MediaStream,Object.defineProperty(d[b.stream],"id",{get:function(){return b.stream}})),Object.defineProperty(x,"id",{get:function(){return b.track}}),j=d[b.stream]):(d.default||(d.default=new e.MediaStream),j=d.default)),j&&(n(x,j),T.associatedRemoteMediaStreams.push(j)),h.push([x,E,j])}else T.rtpReceiver&&T.rtpReceiver.track&&(T.associatedRemoteMediaStreams.forEach((function(t){var n=t.getTracks().find((function(e){return e.id===T.rtpReceiver.track.id}));n&&function(t,n){n.removeTrack(t),n.dispatchEvent(new e.MediaStreamTrackEvent("removetrack",{track:t}))}(n,t)})),T.associatedRemoteMediaStreams=[]);T.localCapabilities=k,T.remoteCapabilities=O,T.rtpReceiver=E,T.rtcpParameters=L,T.sendEncodingParameters=I,T.recvEncodingParameters=R,c._transceive(c.transceivers[l],!1,U)}}})),void 0===c._dtlsRole&&(c._dtlsRole="offer"===i.type?"active":"passive"),c._remoteDescription={type:i.type,sdp:i.sdp},"offer"===i.type?c._updateSignalingState("have-remote-offer"):c._updateSignalingState("stable"),Object.keys(d).forEach((function(t){var n=d[t];if(n.getTracks().length){if(-1===c.remoteStreams.indexOf(n)){c.remoteStreams.push(n);var r=new Event("addstream");r.stream=n,e.setTimeout((function(){c._dispatchEvent("addstream",r)}))}h.forEach((function(e){var t=e[0],r=e[1];n.id===e[2].id&&u(c,t,r,[n])}))}})),h.forEach((function(e){e[2]||u(c,e[0],e[1],[])})),e.setTimeout((function(){c&&c.transceivers&&c.transceivers.forEach((function(e){e.iceTransport&&"new"===e.iceTransport.state&&e.iceTransport.getRemoteCandidates().length>0&&(console.warn("Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification"),e.iceTransport.addRemoteCandidate({}))}))}),4e3),Promise.resolve()},c.prototype.close=function(){this.transceivers.forEach((function(e){e.iceTransport&&e.iceTransport.stop(),e.dtlsTransport&&e.dtlsTransport.stop(),e.rtpSender&&e.rtpSender.stop(),e.rtpReceiver&&e.rtpReceiver.stop()})),this._isClosed=!0,this._updateSignalingState("closed")},c.prototype._updateSignalingState=function(e){this.signalingState=e;var t=new Event("signalingstatechange");this._dispatchEvent("signalingstatechange",t)},c.prototype._maybeFireNegotiationNeeded=function(){var t=this;"stable"===this.signalingState&&!0!==this.needNegotiation&&(this.needNegotiation=!0,e.setTimeout((function(){if(t.needNegotiation){t.needNegotiation=!1;var e=new Event("negotiationneeded");t._dispatchEvent("negotiationneeded",e)}}),0))},c.prototype._updateIceConnectionState=function(){var e,t={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach((function(e){e.iceTransport&&!e.rejected&&t[e.iceTransport.state]++})),e="new",t.failed>0?e="failed":t.checking>0?e="checking":t.disconnected>0?e="disconnected":t.new>0?e="new":t.connected>0?e="connected":t.completed>0&&(e="completed"),e!==this.iceConnectionState){this.iceConnectionState=e;var n=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",n)}},c.prototype._updateConnectionState=function(){var e,t={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach((function(e){e.iceTransport&&e.dtlsTransport&&!e.rejected&&(t[e.iceTransport.state]++,t[e.dtlsTransport.state]++)})),t.connected+=t.completed,e="new",t.failed>0?e="failed":t.connecting>0?e="connecting":t.disconnected>0?e="disconnected":t.new>0?e="new":t.connected>0&&(e="connected"),e!==this.connectionState){this.connectionState=e;var n=new Event("connectionstatechange");this._dispatchEvent("connectionstatechange",n)}},c.prototype.createOffer=function(){var n=this;if(n._isClosed)return Promise.reject(l("InvalidStateError","Can not call createOffer after close"));var o=n.transceivers.filter((function(e){return"audio"===e.kind})).length,s=n.transceivers.filter((function(e){return"video"===e.kind})).length,a=arguments[0];if(a){if(a.mandatory||a.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");void 0!==a.offerToReceiveAudio&&(o=!0===a.offerToReceiveAudio?1:!1===a.offerToReceiveAudio?0:a.offerToReceiveAudio),void 0!==a.offerToReceiveVideo&&(s=!0===a.offerToReceiveVideo?1:!1===a.offerToReceiveVideo?0:a.offerToReceiveVideo)}for(n.transceivers.forEach((function(e){"audio"===e.kind?--o<0&&(e.wantReceive=!1):"video"===e.kind&&--s<0&&(e.wantReceive=!1)}));o>0||s>0;)o>0&&(n._createTransceiver("audio"),o--),s>0&&(n._createTransceiver("video"),s--);var u=r.writeSessionBoilerplate(n._sdpSessionId,n._sdpSessionVersion++);n.transceivers.forEach((function(i,o){var s=i.track,a=i.kind,l=i.mid||r.generateIdentifier();i.mid=l,i.iceGatherer||(i.iceGatherer=n._createIceGatherer(o,n.usingBundle));var u=e.RTCRtpSender.getCapabilities(a);t<15019&&(u.codecs=u.codecs.filter((function(e){return"rtx"!==e.name}))),u.codecs.forEach((function(e){"H264"===e.name&&void 0===e.parameters["level-asymmetry-allowed"]&&(e.parameters["level-asymmetry-allowed"]="1"),i.remoteCapabilities&&i.remoteCapabilities.codecs&&i.remoteCapabilities.codecs.forEach((function(t){e.name.toLowerCase()===t.name.toLowerCase()&&e.clockRate===t.clockRate&&(e.preferredPayloadType=t.payloadType)}))})),u.headerExtensions.forEach((function(e){(i.remoteCapabilities&&i.remoteCapabilities.headerExtensions||[]).forEach((function(t){e.uri===t.uri&&(e.id=t.id)}))}));var c=i.sendEncodingParameters||[{ssrc:1001*(2*o+1)}];s&&t>=15019&&"video"===a&&!c[0].rtx&&(c[0].rtx={ssrc:c[0].ssrc+1}),i.wantReceive&&(i.rtpReceiver=new e.RTCRtpReceiver(i.dtlsTransport,a)),i.localCapabilities=u,i.sendEncodingParameters=c})),"max-compat"!==n._config.bundlePolicy&&(u+="a=group:BUNDLE "+n.transceivers.map((function(e){return e.mid})).join(" ")+"\r\n"),u+="a=ice-options:trickle\r\n",n.transceivers.forEach((function(e,t){u+=i(e,e.localCapabilities,"offer",e.stream,n._dtlsRole),u+="a=rtcp-rsize\r\n",!e.iceGatherer||"new"===n.iceGatheringState||0!==t&&n.usingBundle||(e.iceGatherer.getLocalCandidates().forEach((function(e){e.component=1,u+="a="+r.writeCandidate(e)+"\r\n"})),"completed"===e.iceGatherer.state&&(u+="a=end-of-candidates\r\n"))}));var c=new e.RTCSessionDescription({type:"offer",sdp:u});return Promise.resolve(c)},c.prototype.createAnswer=function(){var n=this;if(n._isClosed)return Promise.reject(l("InvalidStateError","Can not call createAnswer after close"));if("have-remote-offer"!==n.signalingState&&"have-local-pranswer"!==n.signalingState)return Promise.reject(l("InvalidStateError","Can not call createAnswer in signalingState "+n.signalingState));var s=r.writeSessionBoilerplate(n._sdpSessionId,n._sdpSessionVersion++);n.usingBundle&&(s+="a=group:BUNDLE "+n.transceivers.map((function(e){return e.mid})).join(" ")+"\r\n"),s+="a=ice-options:trickle\r\n";var a=r.getMediaSections(n._remoteDescription.sdp).length;n.transceivers.forEach((function(e,r){if(!(r+1>a)){if(e.rejected)return"application"===e.kind?"DTLS/SCTP"===e.protocol?s+="m=application 0 DTLS/SCTP 5000\r\n":s+="m=application 0 "+e.protocol+" webrtc-datachannel\r\n":"audio"===e.kind?s+="m=audio 0 UDP/TLS/RTP/SAVPF 0\r\na=rtpmap:0 PCMU/8000\r\n":"video"===e.kind&&(s+="m=video 0 UDP/TLS/RTP/SAVPF 120\r\na=rtpmap:120 VP8/90000\r\n"),void(s+="c=IN IP4 0.0.0.0\r\na=inactive\r\na=mid:"+e.mid+"\r\n");var l;if(e.stream)"audio"===e.kind?l=e.stream.getAudioTracks()[0]:"video"===e.kind&&(l=e.stream.getVideoTracks()[0]),l&&t>=15019&&"video"===e.kind&&!e.sendEncodingParameters[0].rtx&&(e.sendEncodingParameters[0].rtx={ssrc:e.sendEncodingParameters[0].ssrc+1});var u=o(e.localCapabilities,e.remoteCapabilities);!u.codecs.filter((function(e){return"rtx"===e.name.toLowerCase()})).length&&e.sendEncodingParameters[0].rtx&&delete e.sendEncodingParameters[0].rtx,s+=i(e,u,"answer",e.stream,n._dtlsRole),e.rtcpParameters&&e.rtcpParameters.reducedSize&&(s+="a=rtcp-rsize\r\n")}}));var u=new e.RTCSessionDescription({type:"answer",sdp:s});return Promise.resolve(u)},c.prototype.addIceCandidate=function(e){var t,n=this;return e&&void 0===e.sdpMLineIndex&&!e.sdpMid?Promise.reject(new TypeError("sdpMLineIndex or sdpMid required")):new Promise((function(i,o){if(!n._remoteDescription)return o(l("InvalidStateError","Can not add ICE candidate without a remote description"));if(e&&""!==e.candidate){var s=e.sdpMLineIndex;if(e.sdpMid)for(var u=0;u0?r.parseCandidate(e.candidate):{};if("tcp"===d.protocol&&(0===d.port||9===d.port))return i();if(d.component&&1!==d.component)return i();if((0===s||s>0&&c.iceTransport!==n.transceivers[0].iceTransport)&&!a(c.iceTransport,d))return o(l("OperationError","Can not add ICE candidate"));var h=e.candidate.trim();0===h.indexOf("a=")&&(h=h.substr(2)),(t=r.getMediaSections(n._remoteDescription.sdp))[s]+="a="+(d.type?h:"end-of-candidates")+"\r\n",n._remoteDescription.sdp=r.getDescription(n._remoteDescription.sdp)+t.join("")}else for(var f=0;f=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(31),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(13))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,i,o,s,a,l=1,u={},c=!1,d=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){p(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((o=new MessageChannel).port1.onmessage=function(e){p(e.data)},r=function(e){o.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(i=d.documentElement,r=function(e){var t=d.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):r=function(e){setTimeout(p,0,e)}:(s="setImmediate$"+Math.random()+"$",a=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(s)&&p(+t.data.slice(s.length))},e.addEventListener?e.addEventListener("message",a,!1):e.attachEvent("onmessage",a),r=function(t){e.postMessage(s+t,"*")}),h.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=e.anonymous||null,n=e.outbound||null,r="<";return r+=t?this.temp_gruu||"sip:anonymous@anonymous.invalid;transport=ws":this.pub_gruu||this.uri.toString(),!n||(t?this.temp_gruu:this.pub_gruu)||(r+=";ob"),r+=">"}};var r=["authorization_user","password","realm","ha1","authorization_jwt","display_name","register"];for(var i in this._configuration)Object.prototype.hasOwnProperty.call(this._configuration,i)&&(-1!==r.indexOf(i)?Object.defineProperty(this._configuration,i,{writable:!0,configurable:!1}):Object.defineProperty(this._configuration,i,{writable:!1,configurable:!1}));for(var o in I.debug("configuration parameters after validation:"),this._configuration)if(Object.prototype.hasOwnProperty.call(E.settings,o))switch(o){case"uri":case"registrar_server":I.debug("- ".concat(o,": ").concat(this._configuration[o]));break;case"password":case"ha1":case"authorization_jwt":I.debug("- ".concat(o,": NOT SHOWN"));break;default:I.debug("- ".concat(o,": ").concat(JSON.stringify(this._configuration[o])))}}},{key:"C",get:function(){return R}},{key:"status",get:function(){return this._status}},{key:"contact",get:function(){return this._contact}},{key:"configuration",get:function(){return this._configuration}},{key:"transport",get:function(){return this._transport}}]),n}(d)},function(e,t,n){e.exports=function(e){function t(e){let n,i,o,s=null;function a(...e){if(!a.enabled)return;const r=a,i=Number(new Date),o=i-(n||i);r.diff=o,r.prev=n,r.curr=i,n=i,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let s=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,(n,i)=>{if("%%"===n)return"%";s++;const o=t.formatters[i];if("function"==typeof o){const t=e[s];n=o.call(r,t),e.splice(s,1),s--}return n}),t.formatArgs.call(r,e);(r.log||t.log).apply(r,e)}return a.namespace=e,a.useColors=t.useColors(),a.color=t.selectColor(e),a.extend=r,a.destroy=t.destroy,Object.defineProperty(a,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==s?s:(i!==t.namespaces&&(i=t.namespaces,o=t.enabled(e)),o),set:e=>{s=e}}),"function"==typeof t.init&&t.init(a),a}function r(e,n){const r=t(this.namespace+(void 0===n?":":n)+e);return r.log=this.log,r}function i(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){if(e instanceof Error)return e.stack||e.message;return e},t.disable=function(){const e=[...t.names.map(i),...t.skips.map(i).map(e=>"-"+e)].join(",");return t.enable(""),e},t.enable=function(e){let n;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const r=("string"==typeof e?e:"").split(/[\s,]+/),i=r.length;for(n=0;n{t[n]=e[n]}),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let n=0;for(let t=0;t=1.5*n;return Math.round(e/n)+" "+r+(i?"s":"")}e.exports=function(e,t){t=t||{};var a=typeof e;if("string"===a&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!t)return;var s=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*s;case"weeks":case"week":case"w":return 6048e5*s;case"days":case"day":case"d":return s*o;case"hours":case"hour":case"hrs":case"hr":case"h":return s*i;case"minutes":case"minute":case"mins":case"min":case"m":return s*r;case"seconds":case"second":case"secs":case"sec":case"s":return s*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}(e);if("number"===a&&isFinite(e))return t.long?function(e){var t=Math.abs(e);if(t>=o)return s(e,t,o,"day");if(t>=i)return s(e,t,i,"hour");if(t>=r)return s(e,t,r,"minute");if(t>=n)return s(e,t,n,"second");return e+" ms"}(e):function(e){var t=Math.abs(e);if(t>=o)return Math.round(e/o)+"d";if(t>=i)return Math.round(e/i)+"h";if(t>=r)return Math.round(e/r)+"m";if(t>=n)return Math.round(e/n)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t,n){"use strict";function r(e,t){for(var n=0;n"'),this._contact+=";reg-id=".concat(this._reg_id),this._contact+=";+sip.instance=".concat(this._sipInstance)}var t,n,i;return t=e,(n=[{key:"setExtraHeaders",value:function(e){Array.isArray(e)||(e=[]),this._extraHeaders=e.slice()}},{key:"setExtraContactParams",value:function(e){for(var t in e instanceof Object||(e={}),this._extraContactParams="",e)if(Object.prototype.hasOwnProperty.call(e,t)){var n=e[t];this._extraContactParams+=";".concat(t),n&&(this._extraContactParams+="=".concat(n))}}},{key:"register",value:function(){var e=this;if(this._registering)u.debug("Register request in progress...");else{var t=this._extraHeaders.slice();t.push("Contact: ".concat(this._contact,";expires=").concat(this._expires).concat(this._extraContactParams)),t.push("Expires: ".concat(this._expires));var n=new a.OutgoingRequest(s.REGISTER,this._registrar,this._ua,{to_uri:this._to_uri,call_id:this._call_id,cseq:this._cseq+=1},t),r=new l(this._ua,n,{onRequestTimeout:function(){e._registrationFailure(null,s.causes.REQUEST_TIMEOUT)},onTransportError:function(){e._registrationFailure(null,s.causes.CONNECTION_ERROR)},onAuthenticated:function(){e._cseq+=1},onReceiveResponse:function(t){if(t.cseq===e._cseq)switch(null!==e._registrationTimer&&(clearTimeout(e._registrationTimer),e._registrationTimer=null),!0){case/^1[0-9]{2}$/.test(t.status_code):break;case/^2[0-9]{2}$/.test(t.status_code):if(e._registering=!1,!t.hasHeader("Contact")){u.debug("no Contact header in response to REGISTER, response ignored");break}var n=t.headers.Contact.reduce((function(e,t){return e.concat(t.parsed)}),[]),r=n.find((function(t){return e._sipInstance===t.getParam("+sip.instance")&&e._reg_id===parseInt(t.getParam("reg-id"))}));if(r||(r=n.find((function(t){return t.uri.user===e._ua.contact.uri.user}))),!r){u.debug("no Contact header pointing to us, response ignored");break}var i=r.getParam("expires");!i&&t.hasHeader("expires")&&(i=t.getHeader("expires")),i||(i=e._expires),(i=Number(i))<10&&(i=10);var a=i>64?1e3*i/2+Math.floor(1e3*(i/2-32)*Math.random()):1e3*i-5e3;e._registrationTimer=setTimeout((function(){e._registrationTimer=null,0===e._ua.listeners("registrationExpiring").length?e.register():e._ua.emit("registrationExpiring")}),a),r.hasParam("temp-gruu")&&(e._ua.contact.temp_gruu=r.getParam("temp-gruu").replace(/"/g,"")),r.hasParam("pub-gruu")&&(e._ua.contact.pub_gruu=r.getParam("pub-gruu").replace(/"/g,"")),e._registered||(e._registered=!0,e._ua.registered({response:t}));break;case/^423$/.test(t.status_code):t.hasHeader("min-expires")?(e._expires=Number(t.getHeader("min-expires")),e._expires<10&&(e._expires=10),e.register()):(u.debug("423 response received for REGISTER without Min-Expires"),e._registrationFailure(t,s.causes.SIP_FAILURE_CODE));break;default:var l=o.sipErrorCause(t.status_code);e._registrationFailure(t,l)}}});this._registering=!0,r.send()}}},{key:"unregister",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this._registered){this._registered=!1,null!==this._registrationTimer&&(clearTimeout(this._registrationTimer),this._registrationTimer=null);var n=this._extraHeaders.slice();t.all?n.push("Contact: *".concat(this._extraContactParams)):n.push("Contact: ".concat(this._contact,";expires=0").concat(this._extraContactParams)),n.push("Expires: 0");var r=new a.OutgoingRequest(s.REGISTER,this._registrar,this._ua,{to_uri:this._to_uri,call_id:this._call_id,cseq:this._cseq+=1},n),i=new l(this._ua,r,{onRequestTimeout:function(){e._unregistered(null,s.causes.REQUEST_TIMEOUT)},onTransportError:function(){e._unregistered(null,s.causes.CONNECTION_ERROR)},onAuthenticated:function(){e._cseq+=1},onReceiveResponse:function(t){switch(!0){case/^1[0-9]{2}$/.test(t.status_code):break;case/^2[0-9]{2}$/.test(t.status_code):e._unregistered(t);break;default:var n=o.sipErrorCause(t.status_code);e._unregistered(t,n)}}});i.send()}else u.debug("already unregistered")}},{key:"close",value:function(){this._registered&&this.unregister()}},{key:"onTransportClosed",value:function(){this._registering=!1,null!==this._registrationTimer&&(clearTimeout(this._registrationTimer),this._registrationTimer=null),this._registered&&(this._registered=!1,this._ua.unregistered({}))}},{key:"_registrationFailure",value:function(e,t){this._registering=!1,this._ua.registrationFailed({response:e||null,cause:t}),this._registered&&(this._registered=!1,this._ua.unregistered({response:e||null,cause:t}))}},{key:"_unregistered",value:function(e,t){this._registering=!1,this._registered=!1,this._ua.unregistered({response:e||null,cause:t||null})}},{key:"registered",get:function(){return this._registered}}])&&r(t.prototype,n),i&&r(t,i),e}()},function(e,t,n){var r=function(e){return String(Number(e))===e?Number(e):e},i=function(e,t,n){var i=e.name&&e.names;e.push&&!t[e.push]?t[e.push]=[]:i&&!t[e.name]&&(t[e.name]={});var o=e.push?{}:i?t[e.name]:t;!function(e,t,n,i){if(i&&!n)t[i]=r(e[1]);else for(var o=0;o1&&(e[n[0]]=void 0),e};t.parseParams=function(e){return e.split(/;\s?/).reduce(a,{})},t.parseFmtpConfig=t.parseParams,t.parsePayloads=function(e){return e.toString().split(" ").map(Number)},t.parseRemoteCandidates=function(e){for(var t=[],n=e.split(" ").map(r),i=0;i=r)return e;var i=n[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}}))},s=function(e,t,n){var r=[e+"="+(t.format instanceof Function?t.format(t.push?n:n[t.name]):t.format)];if(t.names)for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:null;if(this._algorithm=t.algorithm,this._realm=t.realm,this._nonce=t.nonce,this._opaque=t.opaque,this._stale=t.stale,this._algorithm){if("MD5"!==this._algorithm)return s.warn('authenticate() | challenge with Digest algorithm different than "MD5", authentication aborted'),!1}else this._algorithm="MD5";if(!this._nonce)return s.warn("authenticate() | challenge without Digest nonce, authentication aborted"),!1;if(!this._realm)return s.warn("authenticate() | challenge without Digest realm, authentication aborted"),!1;if(!this._credentials.password){if(!this._credentials.ha1)return s.warn("authenticate() | no plain SIP password nor ha1 provided, authentication aborted"),!1;if(this._credentials.realm!==this._realm)return s.warn('authenticate() | no plain SIP password, and stored `realm` does not match the given `realm`, cannot authenticate [stored:"%s", given:"%s"]',this._credentials.realm,this._realm),!1}if(t.qop)if(t.qop.indexOf("auth-int")>-1)this._qop="auth-int";else{if(!(t.qop.indexOf("auth")>-1))return s.warn('authenticate() | challenge without Digest qop different than "auth" or "auth-int", authentication aborted'),!1;this._qop="auth"}else this._qop=null;this._method=n,this._uri=r,this._cnonce=a||o.createRandomToken(12),this._nc+=1;var l,u,c=Number(this._nc).toString(16);return this._ncHex="00000000".substr(0,8-c.length)+c,4294967296===this._nc&&(this._nc=1,this._ncHex="00000001"),this._credentials.password?this._ha1=o.calculateMD5("".concat(this._credentials.username,":").concat(this._realm,":").concat(this._credentials.password)):this._ha1=this._credentials.ha1,"auth"===this._qop?(l="".concat(this._method,":").concat(this._uri),u=o.calculateMD5(l),s.debug('authenticate() | using qop=auth [a2:"%s"]',l),this._response=o.calculateMD5("".concat(this._ha1,":").concat(this._nonce,":").concat(this._ncHex,":").concat(this._cnonce,":auth:").concat(u))):"auth-int"===this._qop?(l="".concat(this._method,":").concat(this._uri,":").concat(o.calculateMD5(i||"")),u=o.calculateMD5(l),s.debug('authenticate() | using qop=auth-int [a2:"%s"]',l),this._response=o.calculateMD5("".concat(this._ha1,":").concat(this._nonce,":").concat(this._ncHex,":").concat(this._cnonce,":auth-int:").concat(u))):null===this._qop&&(l="".concat(this._method,":").concat(this._uri),u=o.calculateMD5(l),s.debug('authenticate() | using qop=null [a2:"%s"]',l),this._response=o.calculateMD5("".concat(this._ha1,":").concat(this._nonce,":").concat(u))),s.debug("authenticate() | response generated"),!0}},{key:"toString",value:function(){var e=[];if(!this._response)throw new Error("response field does not exist, cannot generate Authorization header");return e.push("algorithm=".concat(this._algorithm)),e.push('username="'.concat(this._credentials.username,'"')),e.push('realm="'.concat(this._realm,'"')),e.push('nonce="'.concat(this._nonce,'"')),e.push('uri="'.concat(this._uri,'"')),e.push('response="'.concat(this._response,'"')),this._opaque&&e.push('opaque="'.concat(this._opaque,'"')),this._qop&&(e.push("qop=".concat(this._qop)),e.push('cnonce="'.concat(this._cnonce,'"')),e.push("nc=".concat(this._ncHex))),"Digest ".concat(e.join(", "))}}])&&r(t.prototype,n),i&&r(t,i),e}()},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:f.STATUS_CONFIRMED;if(r(this,e),this._owner=t,this._ua=t._ua,this._uac_pending_reply=!1,this._uas_pending_reply=!1,!n.hasHeader("contact"))return{error:"unable to create a Dialog without Contact header field"};n instanceof a.IncomingResponse&&(o=n.status_code<200?f.STATUS_EARLY:f.STATUS_CONFIRMED);var s=n.parseHeader("contact");"UAS"===i?(this._id={call_id:n.call_id,local_tag:n.to_tag,remote_tag:n.from_tag,toString:function(){return this.call_id+this.local_tag+this.remote_tag}},this._state=o,this._remote_seqnum=n.cseq,this._local_uri=n.parseHeader("to").uri,this._remote_uri=n.parseHeader("from").uri,this._remote_target=s.uri,this._route_set=n.getHeaders("record-route"),this._ack_seqnum=this._remote_seqnum):"UAC"===i&&(this._id={call_id:n.call_id,local_tag:n.from_tag,remote_tag:n.to_tag,toString:function(){return this.call_id+this.local_tag+this.remote_tag}},this._state=o,this._local_seqnum=n.cseq,this._local_uri=n.parseHeader("from").uri,this._remote_uri=n.parseHeader("to").uri,this._remote_target=s.uri,this._route_set=n.getHeaders("record-route").reverse(),this._ack_seqnum=null),this._ua.newDialog(this),h.debug("new ".concat(i," dialog created with status ").concat(this._state===f.STATUS_EARLY?"EARLY":"CONFIRMED"))}return o(e,null,[{key:"C",get:function(){return f}}]),o(e,[{key:"update",value:function(e,t){this._state=f.STATUS_CONFIRMED,h.debug("dialog ".concat(this._id.toString()," changed to CONFIRMED state")),"UAC"===t&&(this._route_set=e.getHeaders("record-route").reverse())}},{key:"terminate",value:function(){h.debug("dialog ".concat(this._id.toString()," deleted")),this._ua.destroyDialog(this)}},{key:"sendRequest",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=d.cloneArray(n.extraHeaders),i=d.cloneObject(n.eventHandlers),o=n.body||null,s=this._createRequest(e,r,o);i.onAuthenticated=function(){t._local_seqnum+=1};var a=new c(this,s,i);return a.send(),s}},{key:"receiveRequest",value:function(e){this._checkInDialogRequest(e)&&(e.method===l.ACK&&null!==this._ack_seqnum?this._ack_seqnum=null:e.method===l.INVITE&&(this._ack_seqnum=e.cseq),this._owner.receiveRequest(e))}},{key:"_createRequest",value:function(e,t,n){t=d.cloneArray(t),this._local_seqnum||(this._local_seqnum=Math.floor(1e4*Math.random()));var r=e===l.CANCEL||e===l.ACK?this._local_seqnum:this._local_seqnum+=1;return new a.OutgoingRequest(e,this._remote_target,this._ua,{cseq:r,call_id:this._id.call_id,from_uri:this._local_uri,from_tag:this._id.local_tag,to_uri:this._remote_uri,to_tag:this._id.remote_tag,route_set:this._route_set},t,n)}},{key:"_checkInDialogRequest",value:function(e){var t=this;if(this._remote_seqnum)if(e.cseqthis._remote_seqnum&&(this._remote_seqnum=e.cseq);else this._remote_seqnum=e.cseq;if(e.method===l.INVITE||e.method===l.UPDATE&&e.body){if(!0===this._uac_pending_reply)e.reply(491);else{if(!0===this._uas_pending_reply){var n=1+(10*Math.random()|0);return e.reply(500,null,["Retry-After:".concat(n)]),!1}this._uas_pending_reply=!0;e.server_transaction.on("stateChanged",(function n(){e.server_transaction.state!==u.C.STATUS_ACCEPTED&&e.server_transaction.state!==u.C.STATUS_COMPLETED&&e.server_transaction.state!==u.C.STATUS_TERMINATED||(e.server_transaction.removeListener("stateChanged",n),t._uas_pending_reply=!1)}))}e.hasHeader("contact")&&e.server_transaction.on("stateChanged",(function(){e.server_transaction.state===u.C.STATUS_ACCEPTED&&(t._remote_target=e.parseHeader("contact").uri)}))}else e.method===l.NOTIFY&&e.hasHeader("contact")&&e.server_transaction.on("stateChanged",(function(){e.server_transaction.state===u.C.STATUS_COMPLETED&&(t._remote_target=e.parseHeader("contact").uri)}));return!0}},{key:"id",get:function(){return this._id}},{key:"local_seqnum",get:function(){return this._local_seqnum},set:function(e){this._local_seqnum=e}},{key:"owner",get:function(){return this._owner}},{key:"uac_pending_reply",get:function(){return this._uac_pending_reply},set:function(e){this._uac_pending_reply=e}},{key:"uas_pending_reply",get:function(){return this._uas_pending_reply}}]),e}()},function(e,t,n){"use strict";function r(e,t){for(var n=0;n=200&&e.status_code<300?this._eventHandlers.onSuccessResponse(e):e.status_code>=300&&this._eventHandlers.onErrorResponse(e):(this._request.cseq=this._dialog.local_seqnum+=1,this._reattemptTimer=setTimeout((function(){t._dialog.owner.status!==s.C.STATUS_TERMINATED&&(t._reattempt=!0,t._request_sender.send())}),1e3)):e.status_code>=200&&e.status_code<300?this._eventHandlers.onSuccessResponse(e):e.status_code>=300&&this._eventHandlers.onErrorResponse(e)}},{key:"request",get:function(){return this._request}}])&&r(t.prototype,n),u&&r(t,u),e}()},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};if(void 0===e)throw new TypeError("Not enough arguments");if(this._direction="outgoing",this._session.status!==this._session.C.STATUS_CONFIRMED&&this._session.status!==this._session.C.STATUS_WAITING_FOR_ACK)throw new h.InvalidStateError(this._session.status);var r=f.cloneArray(n.extraHeaders);if(this.eventHandlers=f.cloneObject(n.eventHandlers),"string"==typeof e)e=e.toUpperCase();else{if("number"!=typeof e)throw new TypeError("Invalid tone: ".concat(e));e=e.toString()}if(!e.match(/^[0-9A-DR#*]$/))throw new TypeError("Invalid tone: ".concat(e));this._tone=e,this._duration=n.duration,r.push("Content-Type: application/dtmf-relay");var i="Signal=".concat(this._tone,"\r\n");i+="Duration=".concat(this._duration),this._session.newDTMF({originator:"local",dtmf:this,request:this._request}),this._session.sendRequest(d.INFO,{extraHeaders:r,eventHandlers:{onSuccessResponse:function(e){t.emit("succeeded",{originator:"remote",response:e})},onErrorResponse:function(e){t.eventHandlers.onFailed&&t.eventHandlers.onFailed(),t.emit("failed",{originator:"remote",response:e})},onRequestTimeout:function(){t._session.onRequestTimeout()},onTransportError:function(){t._session.onTransportError()},onDialogError:function(){t._session.onDialogError()}},body:i})}},{key:"init_incoming",value:function(e){var t=/^(Signal\s*?=\s*?)([0-9A-D#*]{1})(\s)?.*/,n=/^(Duration\s?=\s?)([0-9]{1,4})(\s)?.*/;if(this._direction="incoming",this._request=e,e.reply(200),e.body){var r=e.body.split("\n");r.length>=1&&t.test(r[0])&&(this._tone=r[0].replace(t,"$2")),r.length>=2&&n.test(r[1])&&(this._duration=parseInt(r[1].replace(n,"$2"),10))}this._duration||(this._duration=g.DEFAULT_DURATION),this._tone?this._session.newDTMF({originator:"remote",dtmf:this,request:e}):p.debug("invalid INFO DTMF received, discarded")}},{key:"tone",get:function(){return this._tone}},{key:"duration",get:function(){return this._duration}}])&&i(t.prototype,n),r&&i(t,r),l}(u),e.exports.C=g},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};if(this._direction="outgoing",void 0===e)throw new TypeError("Not enough arguments");if(this._session.status!==this._session.C.STATUS_CONFIRMED&&this._session.status!==this._session.C.STATUS_WAITING_FOR_ACK)throw new d.InvalidStateError(this._session.status);this._contentType=e,this._body=t;var i=h.cloneArray(r.extraHeaders);i.push("Content-Type: ".concat(e)),this._session.newInfo({originator:"local",info:this,request:this.request}),this._session.sendRequest(c.INFO,{extraHeaders:i,eventHandlers:{onSuccessResponse:function(e){n.emit("succeeded",{originator:"remote",response:e})},onErrorResponse:function(e){n.emit("failed",{originator:"remote",response:e})},onTransportError:function(){n._session.onTransportError()},onRequestTimeout:function(){n._session.onRequestTimeout()},onDialogError:function(){n._session.onDialogError()}},body:t})}},{key:"init_incoming",value:function(e){this._direction="incoming",this.request=e,e.reply(200),this._contentType=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0,this._body=e.body,this._session.newInfo({originator:"remote",info:this,request:e})}},{key:"contentType",get:function(){return this._contentType}},{key:"body",get:function(){return this._body}}])&&i(t.prototype,n),r&&i(t,r),l}(u)},function(e,t,n){"use strict";function r(e,t){for(var n=0;n=200?"terminated;reason=noresource":"active;expires=".concat(this._expires),this._session.sendRequest(o.NOTIFY,{extraHeaders:["Event: ".concat(a,";id=").concat(this._id),"Subscription-State: ".concat(n),"Content-Type: ".concat(l)],body:"SIP/2.0 ".concat(e," ").concat(t),eventHandlers:{onErrorResponse:function(){this._active=!1}}}))}}])&&r(t.prototype,n),i&&r(t,i),e}()},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};p.debug("sendRefer()");var r=f.cloneArray(n.extraHeaders),i=f.cloneObject(n.eventHandlers);for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&this.on(o,i[o]);var s=null;n.replaces&&(s=n.replaces._request.call_id,s+=";to-tag=".concat(n.replaces._to_tag),s+=";from-tag=".concat(n.replaces._from_tag),s=encodeURIComponent(s));var a="Refer-To: <".concat(e).concat(s?"?Replaces=".concat(s):"",">");if(r.push(a),!r.some((function(e){return e.toLowerCase().startsWith("referred-by:")}))){var l="Referred-By: <".concat(this._session._ua._configuration.uri._scheme,":").concat(this._session._ua._configuration.uri._user,"@").concat(this._session._ua._configuration.uri._host,">");r.push(l)}r.push("Contact: ".concat(this._session.contact));var u=this._session.sendRequest(d.REFER,{extraHeaders:r,eventHandlers:{onSuccessResponse:function(e){t._requestSucceeded(e)},onErrorResponse:function(e){t._requestFailed(e,d.causes.REJECTED)},onTransportError:function(){t._requestFailed(null,d.causes.CONNECTION_ERROR)},onRequestTimeout:function(){t._requestFailed(null,d.causes.REQUEST_TIMEOUT)},onDialogError:function(){t._requestFailed(null,d.causes.DIALOG_ERROR)}}});this._id=u.cseq}},{key:"receiveNotify",value:function(e){if(p.debug("receiveNotify()"),e.body){var t=h.parse(e.body.trim(),"Status_Line");if(-1!==t)switch(!0){case/^100$/.test(t.status_code):this.emit("trying",{request:e,status_line:t});break;case/^1[0-9]{2}$/.test(t.status_code):this.emit("progress",{request:e,status_line:t});break;case/^2[0-9]{2}$/.test(t.status_code):this.emit("accepted",{request:e,status_line:t});break;default:this.emit("failed",{request:e,status_line:t})}else p.debug('receiveNotify() | error parsing NOTIFY body: "'.concat(e.body,'"'))}}},{key:"_requestSucceeded",value:function(e){p.debug("REFER succeeded"),p.debug('emit "requestSucceeded"'),this.emit("requestSucceeded",{response:e})}},{key:"_requestFailed",value:function(e,t){p.debug("REFER failed"),p.debug('emit "requestFailed"'),this.emit("requestFailed",{response:e||null,cause:t})}},{key:"id",get:function(){return this._id}}])&&i(t.prototype,n),r&&i(t,r),l}(u)},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=e;if(void 0===e||void 0===t)throw new TypeError("Not enough arguments");if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(i));var o=f.cloneArray(r.extraHeaders),s=f.cloneObject(r.eventHandlers),a=r.contentType||"text/plain";for(var l in s)Object.prototype.hasOwnProperty.call(s,l)&&this.on(l,s[l]);o.push("Content-Type: ".concat(a)),this._request=new h.OutgoingRequest(d.MESSAGE,e,this._ua,null,o),t&&(this._request.body=t);var u=new p(this._ua,this._request,{onRequestTimeout:function(){n._onRequestTimeout()},onTransportError:function(){n._onTransportError()},onReceiveResponse:function(e){n._receiveResponse(e)}});this._newMessage("local",this._request),u.send()}},{key:"init_incoming",value:function(e){this._request=e,this._newMessage("remote",e),this._is_replied||(this._is_replied=!0,e.reply(200)),this._close()}},{key:"accept",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=f.cloneArray(e.extraHeaders),n=e.body;if("incoming"!==this._direction)throw new g.NotSupportedError('"accept" not supported for outgoing Message');if(this._is_replied)throw new Error("incoming Message already replied");this._is_replied=!0,this._request.reply(200,null,t,n)}},{key:"reject",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.status_code||480,n=e.reason_phrase,r=f.cloneArray(e.extraHeaders),i=e.body;if("incoming"!==this._direction)throw new g.NotSupportedError('"reject" not supported for outgoing Message');if(this._is_replied)throw new Error("incoming Message already replied");if(t<300||t>=700)throw new TypeError("Invalid status_code: ".concat(t));this._is_replied=!0,this._request.reply(t,n,r,i)}},{key:"_receiveResponse",value:function(e){if(!this._closed)switch(!0){case/^1[0-9]{2}$/.test(e.status_code):break;case/^2[0-9]{2}$/.test(e.status_code):this._succeeded("remote",e);break;default:var t=f.sipErrorCause(e.status_code);this._failed("remote",e,t)}}},{key:"_onRequestTimeout",value:function(){this._closed||this._failed("system",null,d.causes.REQUEST_TIMEOUT)}},{key:"_onTransportError",value:function(){this._closed||this._failed("system",null,d.causes.CONNECTION_ERROR)}},{key:"_close",value:function(){this._closed=!0,this._ua.destroyMessage(this)}},{key:"_newMessage",value:function(e,t){"remote"===e?(this._direction="incoming",this._local_identity=t.to,this._remote_identity=t.from):"local"===e&&(this._direction="outgoing",this._local_identity=t.from,this._remote_identity=t.to),this._ua.newMessage(this,{originator:e,message:this,request:t})}},{key:"_failed",value:function(e,t,n){m.debug("MESSAGE failed"),this._close(),m.debug('emit "failed"'),this.emit("failed",{originator:e,response:t||null,cause:n})}},{key:"_succeeded",value:function(e,t){m.debug("MESSAGE succeeded"),this._close(),m.debug('emit "succeeded"'),this.emit("succeeded",{originator:e,response:t})}},{key:"direction",get:function(){return this._direction}},{key:"local_identity",get:function(){return this._local_identity}},{key:"remote_identity",get:function(){return this._remote_identity}}])&&i(t.prototype,n),r&&i(t,r),l}(u)},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=e;if(void 0===e)throw new TypeError("A target is required for OPTIONS");if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(i));var o=f.cloneArray(r.extraHeaders),s=f.cloneObject(r.eventHandlers),a=r.contentType||"application/sdp";for(var l in s)Object.prototype.hasOwnProperty.call(s,l)&&this.on(l,s[l]);o.push("Content-Type: ".concat(a)),this._request=new h.OutgoingRequest(d.OPTIONS,e,this._ua,null,o),t&&(this._request.body=t);var u=new p(this._ua,this._request,{onRequestTimeout:function(){n._onRequestTimeout()},onTransportError:function(){n._onTransportError()},onReceiveResponse:function(e){n._receiveResponse(e)}});this._newOptions("local",this._request),u.send()}},{key:"init_incoming",value:function(e){this._request=e,this._newOptions("remote",e),this._is_replied||(this._is_replied=!0,e.reply(200)),this._close()}},{key:"accept",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=f.cloneArray(e.extraHeaders),n=e.body;if("incoming"!==this._direction)throw new g.NotSupportedError('"accept" not supported for outgoing Options');if(this._is_replied)throw new Error("incoming Options already replied");this._is_replied=!0,this._request.reply(200,null,t,n)}},{key:"reject",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.status_code||480,n=e.reason_phrase,r=f.cloneArray(e.extraHeaders),i=e.body;if("incoming"!==this._direction)throw new g.NotSupportedError('"reject" not supported for outgoing Options');if(this._is_replied)throw new Error("incoming Options already replied");if(t<300||t>=700)throw new TypeError("Invalid status_code: ".concat(t));this._is_replied=!0,this._request.reply(t,n,r,i)}},{key:"_receiveResponse",value:function(e){if(!this._closed)switch(!0){case/^1[0-9]{2}$/.test(e.status_code):break;case/^2[0-9]{2}$/.test(e.status_code):this._succeeded("remote",e);break;default:var t=f.sipErrorCause(e.status_code);this._failed("remote",e,t)}}},{key:"_onRequestTimeout",value:function(){this._closed||this._failed("system",null,d.causes.REQUEST_TIMEOUT)}},{key:"_onTransportError",value:function(){this._closed||this._failed("system",null,d.causes.CONNECTION_ERROR)}},{key:"_close",value:function(){this._closed=!0,this._ua.destroyMessage(this)}},{key:"_newOptions",value:function(e,t){"remote"===e?(this._direction="incoming",this._local_identity=t.to,this._remote_identity=t.from):"local"===e&&(this._direction="outgoing",this._local_identity=t.from,this._remote_identity=t.to),this._ua.newOptions(this,{originator:e,message:this,request:t})}},{key:"_failed",value:function(e,t,n){m.debug("OPTIONS failed"),this._close(),m.debug('emit "failed"'),this.emit("failed",{originator:e,response:t||null,cause:n})}},{key:"_succeeded",value:function(e,t){m.debug("OPTIONS succeeded"),this._close(),m.debug('emit "succeeded"'),this.emit("succeeded",{originator:e,response:t})}},{key:"direction",get:function(){return this._direction}},{key:"local_identity",get:function(){return this._local_identity}},{key:"remote_identity",get:function(){return this._remote_identity}}])&&i(t.prototype,n),r&&i(t,r),l}(u)},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:u.recovery_options;r(this,e),l.debug("new()"),this.status=u.STATUS_DISCONNECTED,this.socket=null,this.sockets=[],this.recovery_options=n,this.recover_attempts=0,this.recovery_timer=null,this.close_requested=!1;try{this.textDecoder=new TextDecoder("utf8")}catch(e){l.warn("cannot use TextDecoder: ".concat(e))}if(void 0===t)throw new TypeError("Invalid argument. undefined 'sockets' argument");t instanceof Array||(t=[t]),t.forEach((function(e){if(!s.isSocket(e.socket))throw new TypeError("Invalid argument. invalid 'JsSIP.Socket' instance");if(e.weight&&!Number(e.weight))throw new TypeError("Invalid argument. 'weight' attribute is not a number");this.sockets.push({socket:e.socket,weight:e.weight||0,status:u.SOCKET_STATUS_READY})}),this),this._getSocket()}var t,n,o;return t=e,(n=[{key:"connect",value:function(){l.debug("connect()"),this.isConnected()?l.debug("Transport is already connected"):this.isConnecting()?l.debug("Transport is connecting"):(this.close_requested=!1,this.status=u.STATUS_CONNECTING,this.onconnecting({socket:this.socket,attempts:this.recover_attempts}),this.close_requested||(this.socket.onconnect=this._onConnect.bind(this),this.socket.ondisconnect=this._onDisconnect.bind(this),this.socket.ondata=this._onData.bind(this),this.socket.connect()))}},{key:"disconnect",value:function(){l.debug("close()"),this.close_requested=!0,this.recover_attempts=0,this.status=u.STATUS_DISCONNECTED,null!==this.recovery_timer&&(clearTimeout(this.recovery_timer),this.recovery_timer=null),this.socket.onconnect=function(){},this.socket.ondisconnect=function(){},this.socket.ondata=function(){},this.socket.disconnect(),this.ondisconnect({socket:this.socket,error:!1})}},{key:"send",value:function(e){if(l.debug("send()"),!this.isConnected())return l.warn("unable to send message, transport is not connected"),!1;var t=e.toString();return l.debug("sending message:\n\n".concat(t,"\n")),this.socket.send(t)}},{key:"isConnected",value:function(){return this.status===u.STATUS_CONNECTED}},{key:"isConnecting",value:function(){return this.status===u.STATUS_CONNECTING}},{key:"_reconnect",value:function(){var e=this;this.recover_attempts+=1;var t=Math.floor(Math.random()*Math.pow(2,this.recover_attempts)+1);tthis.recovery_options.max_interval&&(t=this.recovery_options.max_interval),l.debug("reconnection attempt: ".concat(this.recover_attempts,". next connection attempt in ").concat(t," seconds")),this.recovery_timer=setTimeout((function(){e.close_requested||e.isConnected()||e.isConnecting()||(e._getSocket(),e.connect())}),1e3*t)}},{key:"_getSocket",value:function(){var e=[];if(this.sockets.forEach((function(t){t.status!==u.SOCKET_STATUS_ERROR&&(0===e.length?e.push(t):t.weight>e[0].weight?e=[t]:t.weight===e[0].weight&&e.push(t))})),0===e.length)return this.sockets.forEach((function(e){e.status=u.SOCKET_STATUS_READY})),void this._getSocket();var t=Math.floor(Math.random()*e.length);this.socket=e[t].socket}},{key:"_onConnect",value:function(){this.recover_attempts=0,this.status=u.STATUS_CONNECTED,null!==this.recovery_timer&&(clearTimeout(this.recovery_timer),this.recovery_timer=null),this.onconnect({socket:this})}},{key:"_onDisconnect",value:function(e,t,n){this.status=u.STATUS_DISCONNECTED,this.ondisconnect({socket:this.socket,error:e,code:t,reason:n}),this.close_requested||(this.sockets.forEach((function(e){this.socket===e.socket&&(e.status=u.SOCKET_STATUS_ERROR)}),this),this._reconnect(e))}},{key:"_onData",value:function(e){if("\r\n"!==e){if("string"!=typeof e){try{e=this.textDecoder?this.textDecoder.decode(e):String.fromCharCode.apply(null,new Uint8Array(e))}catch(e){return void l.debug("received binary message failed to be converted into string, message discarded")}l.debug("received binary message:\n\n".concat(e,"\n"))}else l.debug("received text message:\n\n".concat(e,"\n"));this.ondata({transport:this,message:e})}else l.debug("received message with CRLF Keep Alive response")}},{key:"via_transport",get:function(){return this.socket.via_transport}},{key:"url",get:function(){return this.socket.url}},{key:"sip_uri",get:function(){return this.socket.sip_uri}}])&&i(t.prototype,n),o&&i(t,o),e}()},function(e,t,n){"use strict";function r(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,a=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,s=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw s}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,a=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,s=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw s}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1)return h.debug("more than one Via header field present in the response, dropping the response"),!1},function(){var e=d.str_utf8_length(o.body),t=o.getHeader("content-length");if(e=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,a=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,s=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw s}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0)return t}},connection_recovery_min_interval:function(e){if(o.isDecimal(e)){var t=Number(e);if(t>0)return t}},contact_uri:function(e){if("string"==typeof e){var t=a.parse(e,"SIP_URI");if(-1!==t)return t}},display_name:function(e){return e},instance_id:function(e){return/^uuid:/i.test(e)&&(e=e.substr(5)),-1===a.parse(e,"uuid")?void 0:e},no_answer_timeout:function(e){if(o.isDecimal(e)){var t=Number(e);if(t>0)return t}},session_timers:function(e){if("boolean"==typeof e)return e},session_timers_refresh_method:function(e){if("string"==typeof e&&((e=e.toUpperCase())===s.INVITE||e===s.UPDATE))return e},session_timers_force_refresher:function(e){if("boolean"==typeof e)return e},password:function(e){return String(e)},realm:function(e){return String(e)},ha1:function(e){return String(e)},register:function(e){if("boolean"==typeof e)return e},register_expires:function(e){if(o.isDecimal(e)){var t=Number(e);if(t>0)return t}},registrar_server:function(e){/^sip:/i.test(e)||(e="".concat(s.SIP,":").concat(e));var t=l.parse(e);return t?t.user?void 0:t:void 0},use_preloaded_route:function(e){if("boolean"==typeof e)return e}}};t.load=function(e,t){for(var n in d.mandatory){if(!t.hasOwnProperty(n))throw new c.ConfigurationError(n);var r=t[n],i=d.mandatory[n](r);if(void 0===i)throw new c.ConfigurationError(n,r);e[n]=i}for(var s in d.optional)if(t.hasOwnProperty(s)){var a=t[s];if(o.isEmpty(a))continue;var l=d.optional[s](a);if(void 0===l)throw new c.ConfigurationError(s,a);e[s]=l}}},function(e,t,n){"use strict";function r(e,t){for(var n=0;n{if("number"!=typeof e)throw new TypeError("Expected a number");const t=e>0?Math.floor:Math.ceil;return{days:t(e/864e5),hours:t(e/36e5)%24,minutes:t(e/6e4)%60,seconds:t(e/1e3)%60,milliseconds:t(e)%1e3,microseconds:t(1e3*e)%1e3,nanoseconds:t(1e6*e)%1e3}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(){this._queue=[],this._pending=!1}return e.prototype.isLocked=function(){return this._pending},e.prototype.acquire=function(){var e=this,t=new Promise((function(t){return e._queue.push(t)}));return this._pending||this._dispatchNext(),t},e.prototype.runExclusive=function(e){return this.acquire().then((function(t){var n;try{n=e()}catch(e){throw t(),e}return Promise.resolve(n).then((function(e){return t(),e}),(function(e){throw t(),e}))}))},e.prototype._dispatchNext=function(){this._queue.length>0?(this._pending=!0,this._queue.shift()(this._dispatchNext.bind(this))):this._pending=!1},e}();t.default=r},function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"shimGetUserMedia",(function(){return Ie})),n.d(r,"shimGetDisplayMedia",(function(){return Re})),n.d(r,"shimMediaStream",(function(){return ke})),n.d(r,"shimOnTrack",(function(){return xe})),n.d(r,"shimGetSendersWithDtmf",(function(){return Me})),n.d(r,"shimGetStats",(function(){return De})),n.d(r,"shimSenderReceiverGetStats",(function(){return Oe})),n.d(r,"shimAddTrackRemoveTrackWithNative",(function(){return Le})),n.d(r,"shimAddTrackRemoveTrack",(function(){return Pe})),n.d(r,"shimPeerConnection",(function(){return Ne})),n.d(r,"fixNegotiationNeeded",(function(){return je}));var i={};n.r(i),n.d(i,"shimGetUserMedia",(function(){return qe})),n.d(i,"shimGetDisplayMedia",(function(){return He})),n.d(i,"shimPeerConnection",(function(){return ze})),n.d(i,"shimReplaceTrack",(function(){return Ge}));var o={};n.r(o),n.d(o,"shimGetUserMedia",(function(){return Ve})),n.d(o,"shimGetDisplayMedia",(function(){return Be})),n.d(o,"shimOnTrack",(function(){return We})),n.d(o,"shimPeerConnection",(function(){return Ye})),n.d(o,"shimSenderGetStats",(function(){return Ke})),n.d(o,"shimReceiverGetStats",(function(){return Je})),n.d(o,"shimRemoveStream",(function(){return Qe})),n.d(o,"shimRTCDataChannel",(function(){return $e})),n.d(o,"shimAddTransceiver",(function(){return Ze})),n.d(o,"shimGetParameters",(function(){return Xe})),n.d(o,"shimCreateOffer",(function(){return et})),n.d(o,"shimCreateAnswer",(function(){return tt}));var s={};n.r(s),n.d(s,"shimLocalStreamsAPI",(function(){return nt})),n.d(s,"shimRemoteStreamsAPI",(function(){return rt})),n.d(s,"shimCallbacksAPI",(function(){return it})),n.d(s,"shimGetUserMedia",(function(){return ot})),n.d(s,"shimConstraints",(function(){return st})),n.d(s,"shimRTCIceServerUrls",(function(){return at})),n.d(s,"shimTrackEventTransceiver",(function(){return lt})),n.d(s,"shimCreateOfferLegacy",(function(){return ut})),n.d(s,"shimAudioContext",(function(){return ct}));var a={};function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};d(this,e),this.init(t,n)}return f(e,[{key:"init",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.prefix=t.prefix||"i18next:",this.logger=e||C,this.options=t,this.debug=t.debug}},{key:"setDebug",value:function(e){this.debug=e}},{key:"log",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n1?t-1:0),r=1;r-1?e.replace(/###/g,"."):e}function i(){return!e||"string"==typeof e}for(var o="string"!=typeof t?[].concat(t):t.split(".");o.length>1;){if(i())return{};var s=r(o.shift());!e[s]&&n&&(e[s]=new n),e=Object.prototype.hasOwnProperty.call(e,s)?e[s]:{}}return i()?{}:{obj:e,k:r(o.shift())}}function R(e,t,n){var r=I(e,t,Object);r.obj[r.k]=n}function k(e,t){var n=I(e,t),r=n.obj,i=n.k;if(r)return r[i]}function x(e,t,n){var r=k(e,n);return void 0!==r?r:k(t,n)}function M(e,t,n){for(var r in t)"__proto__"!==r&&"constructor"!==r&&(r in e?"string"==typeof e[r]||e[r]instanceof String||"string"==typeof t[r]||t[r]instanceof String?n&&(e[r]=t[r]):M(e[r],t[r],n):e[r]=t[r]);return e}function D(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var O={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function L(e){return"string"==typeof e?e.replace(/[&<>"'\/]/g,(function(e){return O[e]})):e}var P="undefined"!=typeof window&&window.navigator&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1,N=function(e){function t(e){var n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ns:["translation"],defaultNS:"translation"};return d(this,t),n=_(this,v(t).call(this)),P&&w.call(m(n)),n.data=e||{},n.options=r,void 0===n.options.keySeparator&&(n.options.keySeparator="."),n}return b(t,e),f(t,[{key:"addNamespaces",value:function(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}},{key:"removeNamespaces",value:function(e){var t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}},{key:"getResource",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=void 0!==r.keySeparator?r.keySeparator:this.options.keySeparator,o=[e,t];return n&&"string"!=typeof n&&(o=o.concat(n)),n&&"string"==typeof n&&(o=o.concat(i?n.split(i):n)),e.indexOf(".")>-1&&(o=e.split(".")),k(this.data,o)}},{key:"addResource",value:function(e,t,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{silent:!1},o=this.options.keySeparator;void 0===o&&(o=".");var s=[e,t];n&&(s=s.concat(o?n.split(o):n)),e.indexOf(".")>-1&&(r=t,t=(s=e.split("."))[1]),this.addNamespaces(t),R(this.data,s,r),i.silent||this.emit("added",e,t,n,r)}},{key:"addResources",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{silent:!1};for(var i in n)"string"!=typeof n[i]&&"[object Array]"!==Object.prototype.toString.apply(n[i])||this.addResource(e,t,i,n[i],{silent:!0});r.silent||this.emit("added",e,t,n)}},{key:"addResourceBundle",value:function(e,t,n,r,i){var o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{silent:!1},s=[e,t];e.indexOf(".")>-1&&(r=n,n=t,t=(s=e.split("."))[1]),this.addNamespaces(t);var a=k(this.data,s)||{};r?M(a,n,i):a=c({},a,n),R(this.data,s,a),o.silent||this.emit("added",e,t,n)}},{key:"removeResourceBundle",value:function(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit("removed",e,t)}},{key:"hasResourceBundle",value:function(e,t){return void 0!==this.getResource(e,t)}},{key:"getResourceBundle",value:function(e,t){return t||(t=this.options.defaultNS),"v1"===this.options.compatibilityAPI?c({},{},this.getResource(e,t)):this.getResource(e,t)}},{key:"getDataByLanguage",value:function(e){return this.data[e]}},{key:"toJSON",value:function(){return this.data}}]),t}(w),j={processors:{},addPostProcessor:function(e){this.processors[e.name]=e},handle:function(e,t,n,r,i){var o=this;return e.forEach((function(e){o.processors[e]&&(t=o.processors[e].process(t,n,r,i))})),t}},U={},F=function(e){function t(e){var n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return d(this,t),n=_(this,v(t).call(this)),P&&w.call(m(n)),E(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],e,m(n)),n.options=r,void 0===n.options.keySeparator&&(n.options.keySeparator="."),n.logger=T.create("translator"),n}return b(t,e),f(t,[{key:"changeLanguage",value:function(e){e&&(this.language=e)}},{key:"exists",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}},n=this.resolve(e,t);return n&&void 0!==n.res}},{key:"extractFromKey",value:function(e,t){var n=void 0!==t.nsSeparator?t.nsSeparator:this.options.nsSeparator;void 0===n&&(n=":");var r=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator,i=t.ns||this.options.defaultNS;if(n&&e.indexOf(n)>-1){var o=e.match(this.interpolator.nestingRegexp);if(o&&o.length>0)return{key:e,namespaces:i};var s=e.split(n);(n!==r||n===r&&this.options.ns.indexOf(s[0])>-1)&&(i=s.shift()),e=s.join(r)}return"string"==typeof i&&(i=[i]),{key:e,namespaces:i}}},{key:"translate",value:function(e,n,r){var i=this;if("object"!==l(n)&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),n||(n={}),null==e)return"";Array.isArray(e)||(e=[String(e)]);var o=void 0!==n.keySeparator?n.keySeparator:this.options.keySeparator,s=this.extractFromKey(e[e.length-1],n),a=s.key,u=s.namespaces,d=u[u.length-1],h=n.lng||this.language,f=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(h&&"cimode"===h.toLowerCase()){if(f){var p=n.nsSeparator||this.options.nsSeparator;return d+p+a}return a}var g=this.resolve(e,n),m=g&&g.res,_=g&&g.usedKey||a,v=g&&g.exactUsedKey||a,y=Object.prototype.toString.apply(m),b=["[object Number]","[object Function]","[object RegExp]"],C=void 0!==n.joinArrays?n.joinArrays:this.options.joinArrays,T=!this.i18nFormat||this.i18nFormat.handleAsObject,w="string"!=typeof m&&"boolean"!=typeof m&&"number"!=typeof m;if(T&&m&&w&&b.indexOf(y)<0&&("string"!=typeof C||"[object Array]"!==y)){if(!n.returnObjects&&!this.options.returnObjects)return this.logger.warn("accessing an object - but returnObjects options is not enabled!"),this.options.returnedObjectHandler?this.options.returnedObjectHandler(_,m,n):"key '".concat(a," (").concat(this.language,")' returned an object instead of string.");if(o){var S="[object Array]"===y,A=S?[]:{},E=S?v:_;for(var I in m)if(Object.prototype.hasOwnProperty.call(m,I)){var R="".concat(E).concat(o).concat(I);A[I]=this.translate(R,c({},n,{joinArrays:!1,ns:u})),A[I]===R&&(A[I]=m[I])}m=A}}else if(T&&"string"==typeof C&&"[object Array]"===y)(m=m.join(C))&&(m=this.extendTranslation(m,e,n,r));else{var k=!1,x=!1,M=void 0!==n.count&&"string"!=typeof n.count,D=t.hasDefaultValue(n),O=M?this.pluralResolver.getSuffix(h,n.count):"",L=n["defaultValue".concat(O)]||n.defaultValue;!this.isValidLookup(m)&&D&&(k=!0,m=L),this.isValidLookup(m)||(x=!0,m=a);var P=D&&L!==m&&this.options.updateMissing;if(x||k||P){if(this.logger.log(P?"updateKey":"missingKey",h,d,a,P?L:m),o){var N=this.resolve(a,c({},n,{keySeparator:!1}));N&&N.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}var j=[],U=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if("fallback"===this.options.saveMissingTo&&U&&U[0])for(var F=0;F1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof e&&(e=[e]),e.forEach((function(e){if(!s.isValidLookup(t)){var l=s.extractFromKey(e,a),u=l.key;n=u;var c=l.namespaces;s.options.fallbackNS&&(c=c.concat(s.options.fallbackNS));var d=void 0!==a.count&&"string"!=typeof a.count,h=void 0!==a.context&&"string"==typeof a.context&&""!==a.context,f=a.lngs?a.lngs:s.languageUtils.toResolveHierarchy(a.lng||s.language,a.fallbackLng);c.forEach((function(e){s.isValidLookup(t)||(o=e,!U["".concat(f[0],"-").concat(e)]&&s.utils&&s.utils.hasLoadedNamespace&&!s.utils.hasLoadedNamespace(o)&&(U["".concat(f[0],"-").concat(e)]=!0,s.logger.warn('key "'.concat(n,'" for languages "').concat(f.join(", "),'" won\'t get resolved as namespace "').concat(o,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),f.forEach((function(n){if(!s.isValidLookup(t)){i=n;var o,l,c=u,f=[c];if(s.i18nFormat&&s.i18nFormat.addLookupKeys)s.i18nFormat.addLookupKeys(f,u,n,e,a);else d&&(o=s.pluralResolver.getSuffix(n,a.count)),d&&h&&f.push(c+o),h&&f.push(c+="".concat(s.options.contextSeparator).concat(a.context)),d&&f.push(c+=o);for(;l=f.pop();)s.isValidLookup(t)||(r=l,t=s.getResource(n,e,l,a))}})))}))}})),{res:t,usedKey:n,exactUsedKey:r,usedLng:i,usedNS:o}}},{key:"isValidLookup",value:function(e){return!(void 0===e||!this.options.returnNull&&null===e||!this.options.returnEmptyString&&""===e)}},{key:"getResource",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,t,n,r):this.resourceStore.getResource(e,t,n,r)}}],[{key:"hasDefaultValue",value:function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&"defaultValue"===t.substring(0,"defaultValue".length)&&void 0!==e[t])return!0;return!1}}]),t}(w);function q(e){return e.charAt(0).toUpperCase()+e.slice(1)}var H=function(){function e(t){d(this,e),this.options=t,this.whitelist=this.options.supportedLngs||!1,this.supportedLngs=this.options.supportedLngs||!1,this.logger=T.create("languageUtils")}return f(e,[{key:"getScriptPartFromCode",value:function(e){if(!e||e.indexOf("-")<0)return null;var t=e.split("-");return 2===t.length?null:(t.pop(),"x"===t[t.length-1].toLowerCase()?null:this.formatLanguageCode(t.join("-")))}},{key:"getLanguagePartFromCode",value:function(e){if(!e||e.indexOf("-")<0)return e;var t=e.split("-");return this.formatLanguageCode(t[0])}},{key:"formatLanguageCode",value:function(e){if("string"==typeof e&&e.indexOf("-")>-1){var t=["hans","hant","latn","cyrl","cans","mong","arab"],n=e.split("-");return this.options.lowerCaseLng?n=n.map((function(e){return e.toLowerCase()})):2===n.length?(n[0]=n[0].toLowerCase(),n[1]=n[1].toUpperCase(),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=q(n[1].toLowerCase()))):3===n.length&&(n[0]=n[0].toLowerCase(),2===n[1].length&&(n[1]=n[1].toUpperCase()),"sgn"!==n[0]&&2===n[2].length&&(n[2]=n[2].toUpperCase()),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=q(n[1].toLowerCase())),t.indexOf(n[2].toLowerCase())>-1&&(n[2]=q(n[2].toLowerCase()))),n.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}},{key:"isWhitelisted",value:function(e){return this.logger.deprecate("languageUtils.isWhitelisted",'function "isWhitelisted" will be renamed to "isSupportedCode" in the next major - please make sure to rename it\'s usage asap.'),this.isSupportedCode(e)}},{key:"isSupportedCode",value:function(e){return("languageOnly"===this.options.load||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}},{key:"getBestMatchFromCodes",value:function(e){var t,n=this;return e?(e.forEach((function(e){if(!t){var r=n.formatLanguageCode(e);n.options.supportedLngs&&!n.isSupportedCode(r)||(t=r)}})),!t&&this.options.supportedLngs&&e.forEach((function(e){if(!t){var r=n.getLanguagePartFromCode(e);if(n.isSupportedCode(r))return t=r;t=n.options.supportedLngs.find((function(e){if(0===e.indexOf(r))return e}))}})),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t):null}},{key:"getFallbackCodes",value:function(e,t){if(!e)return[];if("function"==typeof e&&(e=e(t)),"string"==typeof e&&(e=[e]),"[object Array]"===Object.prototype.toString.apply(e))return e;if(!t)return e.default||[];var n=e[t];return n||(n=e[this.getScriptPartFromCode(t)]),n||(n=e[this.formatLanguageCode(t)]),n||(n=e[this.getLanguagePartFromCode(t)]),n||(n=e.default),n||[]}},{key:"toResolveHierarchy",value:function(e,t){var n=this,r=this.getFallbackCodes(t||this.options.fallbackLng||[],e),i=[],o=function(e){e&&(n.isSupportedCode(e)?i.push(e):n.logger.warn("rejecting language code not found in supportedLngs: ".concat(e)))};return"string"==typeof e&&e.indexOf("-")>-1?("languageOnly"!==this.options.load&&o(this.formatLanguageCode(e)),"languageOnly"!==this.options.load&&"currentOnly"!==this.options.load&&o(this.getScriptPartFromCode(e)),"currentOnly"!==this.options.load&&o(this.getLanguagePartFromCode(e))):"string"==typeof e&&o(this.formatLanguageCode(e)),r.forEach((function(e){i.indexOf(e)<0&&o(n.formatLanguageCode(e))})),i}}]),e}(),z=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","kk","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],G={1:function(e){return Number(e>1)},2:function(e){return Number(1!=e)},3:function(e){return 0},4:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},5:function(e){return Number(0==e?0:1==e?1:2==e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5)},6:function(e){return Number(1==e?0:e>=2&&e<=4?1:2)},7:function(e){return Number(1==e?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},8:function(e){return Number(1==e?0:2==e?1:8!=e&&11!=e?2:3)},9:function(e){return Number(e>=2)},10:function(e){return Number(1==e?0:2==e?1:e<7?2:e<11?3:4)},11:function(e){return Number(1==e||11==e?0:2==e||12==e?1:e>2&&e<20?2:3)},12:function(e){return Number(e%10!=1||e%100==11)},13:function(e){return Number(0!==e)},14:function(e){return Number(1==e?0:2==e?1:3==e?2:3)},15:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2)},16:function(e){return Number(e%10==1&&e%100!=11?0:0!==e?1:2)},17:function(e){return Number(1==e||e%10==1&&e%100!=11?0:1)},18:function(e){return Number(0==e?0:1==e?1:2)},19:function(e){return Number(1==e?0:0==e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3)},20:function(e){return Number(1==e?0:0==e||e%100>0&&e%100<20?1:2)},21:function(e){return Number(e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0)},22:function(e){return Number(1==e?0:2==e?1:(e<0||e>10)&&e%10==0?2:3)}};function V(){var e={};return z.forEach((function(t){t.lngs.forEach((function(n){e[n]={numbers:t.nr,plurals:G[t.fc]}}))})),e}var B=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};d(this,e),this.languageUtils=t,this.options=n,this.logger=T.create("pluralResolver"),this.rules=V()}return f(e,[{key:"addRule",value:function(e,t){this.rules[e]=t}},{key:"getRule",value:function(e){return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}},{key:"needsPlural",value:function(e){var t=this.getRule(e);return t&&t.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(e,t){return this.getSuffixes(e).map((function(e){return t+e}))}},{key:"getSuffixes",value:function(e){var t=this,n=this.getRule(e);return n?n.numbers.map((function(n){return t.getSuffix(e,n)})):[]}},{key:"getSuffix",value:function(e,t){var n=this,r=this.getRule(e);if(r){var i=r.noAbs?r.plurals(t):r.plurals(Math.abs(t)),o=r.numbers[i];this.options.simplifyPluralSuffix&&2===r.numbers.length&&1===r.numbers[0]&&(2===o?o="plural":1===o&&(o=""));var s=function(){return n.options.prepend&&o.toString()?n.options.prepend+o.toString():o.toString()};return"v1"===this.options.compatibilityJSON?1===o?"":"number"==typeof o?"_plural_".concat(o.toString()):s():"v2"===this.options.compatibilityJSON||this.options.simplifyPluralSuffix&&2===r.numbers.length&&1===r.numbers[0]?s():this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString()}return this.logger.warn("no plural rule found for: ".concat(e)),""}}]),e}(),W=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};d(this,e),this.logger=T.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||function(e){return e},this.init(t)}return f(e,[{key:"init",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});var t=e.interpolation;this.escape=void 0!==t.escape?t.escape:L,this.escapeValue=void 0===t.escapeValue||t.escapeValue,this.useRawValueToEscape=void 0!==t.useRawValueToEscape&&t.useRawValueToEscape,this.prefix=t.prefix?D(t.prefix):t.prefixEscaped||"{{",this.suffix=t.suffix?D(t.suffix):t.suffixEscaped||"}}",this.formatSeparator=t.formatSeparator?t.formatSeparator:t.formatSeparator||",",this.unescapePrefix=t.unescapeSuffix?"":t.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":t.unescapeSuffix||"",this.nestingPrefix=t.nestingPrefix?D(t.nestingPrefix):t.nestingPrefixEscaped||D("$t("),this.nestingSuffix=t.nestingSuffix?D(t.nestingSuffix):t.nestingSuffixEscaped||D(")"),this.nestingOptionsSeparator=t.nestingOptionsSeparator?t.nestingOptionsSeparator:t.nestingOptionsSeparator||",",this.maxReplaces=t.maxReplaces?t.maxReplaces:1e3,this.alwaysFormat=void 0!==t.alwaysFormat&&t.alwaysFormat,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var e="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(e,"g");var t="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(t,"g");var n="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(n,"g")}},{key:"interpolate",value:function(e,t,n,r){var i,o,s,a=this,l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function u(e){return e.replace(/\$/g,"$$$$")}var c=function(e){if(e.indexOf(a.formatSeparator)<0){var i=x(t,l,e);return a.alwaysFormat?a.format(i,void 0,n):i}var o=e.split(a.formatSeparator),s=o.shift().trim(),u=o.join(a.formatSeparator).trim();return a.format(x(t,l,s),u,n,r)};this.resetRegExp();var d=r&&r.missingInterpolationHandler||this.options.missingInterpolationHandler,h=r&&r.interpolation&&r.interpolation.skipOnVariables||this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:function(e){return u(e)}},{regex:this.regexp,safeValue:function(e){return a.escapeValue?u(a.escape(e)):u(e)}}].forEach((function(t){for(s=0;i=t.regex.exec(e);){if(void 0===(o=c(i[1].trim())))if("function"==typeof d){var n=d(e,i,r);o="string"==typeof n?n:""}else{if(h){o=i[0];continue}a.logger.warn("missed to pass in variable ".concat(i[1]," for interpolating ").concat(e)),o=""}else"string"==typeof o||a.useRawValueToEscape||(o=A(o));if(e=e.replace(i[0],t.safeValue(o)),t.regex.lastIndex=0,++s>=a.maxReplaces)break}})),e}},{key:"nest",value:function(e,t){var n,r,i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=c({},o);function a(e,t){var n=this.nestingOptionsSeparator;if(e.indexOf(n)<0)return e;var r=e.split(new RegExp("".concat(n,"[ ]*{"))),i="{".concat(r[1]);e=r[0],i=(i=this.interpolate(i,s)).replace(/'/g,'"');try{s=JSON.parse(i),t&&(s=c({},t,s))}catch(t){return this.logger.warn("failed parsing options string in nesting for key ".concat(e),t),"".concat(e).concat(n).concat(i)}return delete s.defaultValue,e}for(s.applyPostProcessor=!1,delete s.defaultValue;n=this.nestingRegexp.exec(e);){var l=[],u=!1;if(n[0].includes(this.formatSeparator)&&!/{.*}/.test(n[1])){var d=n[1].split(this.formatSeparator).map((function(e){return e.trim()}));n[1]=d.shift(),l=d,u=!0}if((r=t(a.call(this,n[1].trim(),s),s))&&n[0]===e&&"string"!=typeof r)return r;"string"!=typeof r&&(r=A(r)),r||(this.logger.warn("missed to resolve ".concat(n[1]," for nesting ").concat(e)),r=""),u&&(r=l.reduce((function(e,t){return i.format(e,t,o.lng,o)}),r.trim())),e=e.replace(n[0],r),this.regexp.lastIndex=0}return e}}]),e}();var Y=function(e){function t(e,n,r){var i,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return d(this,t),i=_(this,v(t).call(this)),P&&w.call(m(i)),i.backend=e,i.store=n,i.services=r,i.languageUtils=r.languageUtils,i.options=o,i.logger=T.create("backendConnector"),i.state={},i.queue=[],i.backend&&i.backend.init&&i.backend.init(r,o.backend,o),i}return b(t,e),f(t,[{key:"queueLoad",value:function(e,t,n,r){var i=this,o=[],s=[],a=[],l=[];return e.forEach((function(e){var r=!0;t.forEach((function(t){var a="".concat(e,"|").concat(t);!n.reload&&i.store.hasResourceBundle(e,t)?i.state[a]=2:i.state[a]<0||(1===i.state[a]?s.indexOf(a)<0&&s.push(a):(i.state[a]=1,r=!1,s.indexOf(a)<0&&s.push(a),o.indexOf(a)<0&&o.push(a),l.indexOf(t)<0&&l.push(t)))})),r||a.push(e)})),(o.length||s.length)&&this.queue.push({pending:s,loaded:{},errors:[],callback:r}),{toLoad:o,pending:s,toLoadLanguages:a,toLoadNamespaces:l}}},{key:"loaded",value:function(e,t,n){var r=e.split("|"),i=r[0],o=r[1];t&&this.emit("failedLoading",i,o,t),n&&this.store.addResourceBundle(i,o,n),this.state[e]=t?-1:2;var s={};this.queue.forEach((function(n){var r,a,l,u,c,d;r=n.loaded,a=o,u=I(r,[i],Object),c=u.obj,d=u.k,c[d]=c[d]||[],l&&(c[d]=c[d].concat(a)),l||c[d].push(a),function(e,t){for(var n=e.indexOf(t);-1!==n;)e.splice(n,1),n=e.indexOf(t)}(n.pending,e),t&&n.errors.push(t),0!==n.pending.length||n.done||(Object.keys(n.loaded).forEach((function(e){s[e]||(s[e]=[]),n.loaded[e].length&&n.loaded[e].forEach((function(t){s[e].indexOf(t)<0&&s[e].push(t)}))})),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())})),this.emit("loaded",s),this.queue=this.queue.filter((function(e){return!e.done}))}},{key:"read",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:350,s=arguments.length>5?arguments[5]:void 0;return e.length?this.backend[n](e,t,(function(a,l){a&&l&&i<5?setTimeout((function(){r.read.call(r,e,t,n,i+1,2*o,s)}),o):s(a,l)})):s(null,{})}},{key:"prepareLoading",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();"string"==typeof e&&(e=this.languageUtils.toResolveHierarchy(e)),"string"==typeof t&&(t=[t]);var o=this.queueLoad(e,t,r,i);if(!o.toLoad.length)return o.pending.length||i(),null;o.toLoad.forEach((function(e){n.loadOne(e)}))}},{key:"load",value:function(e,t,n){this.prepareLoading(e,t,{},n)}},{key:"reload",value:function(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}},{key:"loadOne",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=e.split("|"),i=r[0],o=r[1];this.read(i,o,"read",void 0,void 0,(function(r,s){r&&t.logger.warn("".concat(n,"loading namespace ").concat(o," for language ").concat(i," failed"),r),!r&&s&&t.logger.log("".concat(n,"loaded namespace ").concat(o," for language ").concat(i),s),t.loaded(e,r,s)}))}},{key:"saveMissing",value:function(e,t,n,r,i){var o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(t)?this.logger.warn('did not save key "'.concat(n,'" as the namespace "').concat(t,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!"):null!=n&&""!==n&&(this.backend&&this.backend.create&&this.backend.create(e,t,n,r,null,c({},o,{isUpdate:i})),e&&e[0]&&this.store.addResource(e[0],t,n,r))}}]),t}(w);function K(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,whitelist:!1,nonExplicitWhitelist:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(e){var t={};if("object"===l(e[1])&&(t=e[1]),"string"==typeof e[1]&&(t.defaultValue=e[1]),"string"==typeof e[2]&&(t.tDescription=e[2]),"object"===l(e[2])||"object"===l(e[3])){var n=e[3]||e[2];Object.keys(n).forEach((function(e){t[e]=n[e]}))}return t},interpolation:{escapeValue:!0,format:function(e,t,n,r){return e},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!1}}}function J(e){return"string"==typeof e.ns&&(e.ns=[e.ns]),"string"==typeof e.fallbackLng&&(e.fallbackLng=[e.fallbackLng]),"string"==typeof e.fallbackNS&&(e.fallbackNS=[e.fallbackNS]),e.whitelist&&(e.whitelist&&e.whitelist.indexOf("cimode")<0&&(e.whitelist=e.whitelist.concat(["cimode"])),e.supportedLngs=e.whitelist),e.nonExplicitWhitelist&&(e.nonExplicitSupportedLngs=e.nonExplicitWhitelist),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function Q(){}var $=new(function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;if(d(this,t),e=_(this,v(t).call(this)),P&&w.call(m(e)),e.options=J(n),e.services={},e.logger=T,e.modules={external:[]},r&&!e.isInitialized&&!n.isClone){if(!e.options.initImmediate)return e.init(n,r),_(e,m(e));setTimeout((function(){e.init(n,r)}),0)}return e}return b(t,e),f(t,[{key:"init",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;function r(e){return e?"function"==typeof e?new e:e:null}if("function"==typeof t&&(n=t,t={}),t.whitelist&&!t.supportedLngs&&this.logger.deprecate("whitelist",'option "whitelist" will be renamed to "supportedLngs" in the next major - please make sure to rename this option asap.'),t.nonExplicitWhitelist&&!t.nonExplicitSupportedLngs&&this.logger.deprecate("whitelist",'options "nonExplicitWhitelist" will be renamed to "nonExplicitSupportedLngs" in the next major - please make sure to rename this option asap.'),this.options=c({},K(),this.options,J(t)),this.format=this.options.interpolation.format,n||(n=Q),!this.options.isClone){this.modules.logger?T.init(r(this.modules.logger),this.options):T.init(null,this.options);var i=new H(this.options);this.store=new N(this.options.resources,this.options);var o=this.services;o.logger=T,o.resourceStore=this.store,o.languageUtils=i,o.pluralResolver=new B(i,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),o.interpolator=new W(this.options),o.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},o.backendConnector=new Y(r(this.modules.backend),o.resourceStore,o,this.options),o.backendConnector.on("*",(function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i1?n-1:0),i=1;i0&&"dev"!==s[0]&&(this.options.lng=s[0])}this.services.languageDetector||this.options.lng||this.logger.warn("init: no languageDetector is used and no lng is defined");var a=["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"];a.forEach((function(t){e[t]=function(){var n;return(n=e.store)[t].apply(n,arguments)}}));var l=["addResource","addResources","addResourceBundle","removeResourceBundle"];l.forEach((function(t){e[t]=function(){var n;return(n=e.store)[t].apply(n,arguments),e}}));var u=S(),d=function(){var t=function(t,r){e.isInitialized&&e.logger.warn("init: i18next is already initialized. You should call init just once!"),e.isInitialized=!0,e.options.isClone||e.logger.log("initialized",e.options),e.emit("initialized",e.options),u.resolve(r),n(t,r)};if(e.languages&&"v1"!==e.options.compatibilityAPI&&!e.isInitialized)return t(null,e.t.bind(e));e.changeLanguage(e.options.lng,t)};return this.options.resources||!this.options.initImmediate?d():setTimeout(d,0),u}},{key:"loadResources",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Q,r=n,i="string"==typeof e?e:this.language;if("function"==typeof e&&(r=e),!this.options.resources||this.options.partialBundledLanguages){if(i&&"cimode"===i.toLowerCase())return r();var o=[],s=function(e){e&&t.services.languageUtils.toResolveHierarchy(e).forEach((function(e){o.indexOf(e)<0&&o.push(e)}))};if(i)s(i);else{var a=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);a.forEach((function(e){return s(e)}))}this.options.preload&&this.options.preload.forEach((function(e){return s(e)})),this.services.backendConnector.load(o,this.options.ns,r)}else r(null)}},{key:"reloadResources",value:function(e,t,n){var r=S();return e||(e=this.languages),t||(t=this.options.ns),n||(n=Q),this.services.backendConnector.reload(e,t,(function(e){r.resolve(),n(e)})),r}},{key:"use",value:function(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return"backend"===e.type&&(this.modules.backend=e),("logger"===e.type||e.log&&e.warn&&e.error)&&(this.modules.logger=e),"languageDetector"===e.type&&(this.modules.languageDetector=e),"i18nFormat"===e.type&&(this.modules.i18nFormat=e),"postProcessor"===e.type&&j.addPostProcessor(e),"3rdParty"===e.type&&this.modules.external.push(e),this}},{key:"changeLanguage",value:function(e,t){var n=this;this.isLanguageChangingTo=e;var r=S();this.emit("languageChanging",e);var i=function(e){var i="string"==typeof e?e:n.services.languageUtils.getBestMatchFromCodes(e);i&&(n.language||(n.language=i,n.languages=n.services.languageUtils.toResolveHierarchy(i)),n.translator.language||n.translator.changeLanguage(i),n.services.languageDetector&&n.services.languageDetector.cacheUserLanguage(i)),n.loadResources(i,(function(e){!function(e,i){i?(n.language=i,n.languages=n.services.languageUtils.toResolveHierarchy(i),n.translator.changeLanguage(i),n.isLanguageChangingTo=void 0,n.emit("languageChanged",i),n.logger.log("languageChanged",i)):n.isLanguageChangingTo=void 0,r.resolve((function(){return n.t.apply(n,arguments)})),t&&t(e,(function(){return n.t.apply(n,arguments)}))}(e,i)}))};return e||!this.services.languageDetector||this.services.languageDetector.async?!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect(i):i(e):i(this.services.languageDetector.detect()),r}},{key:"getFixedT",value:function(e,t){var n=this,r=function e(t,r){var i;if("object"!==l(r)){for(var o=arguments.length,s=new Array(o>2?o-2:0),a=2;a1&&void 0!==arguments[1]?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;var r=this.languages[0],i=!!this.options&&this.options.fallbackLng,o=this.languages[this.languages.length-1];if("cimode"===r.toLowerCase())return!0;var s=function(e,n){var r=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===r||2===r};if(n.precheck){var a=n.precheck(this,s);if(void 0!==a)return a}return!!this.hasResourceBundle(r,e)||(!this.services.backendConnector.backend||!(!s(r,e)||i&&!s(o,e)))}},{key:"loadNamespaces",value:function(e,t){var n=this,r=S();return this.options.ns?("string"==typeof e&&(e=[e]),e.forEach((function(e){n.options.ns.indexOf(e)<0&&n.options.ns.push(e)})),this.loadResources((function(e){r.resolve(),t&&t(e)})),r):(t&&t(),Promise.resolve())}},{key:"loadLanguages",value:function(e,t){var n=S();"string"==typeof e&&(e=[e]);var r=this.options.preload||[],i=e.filter((function(e){return r.indexOf(e)<0}));return i.length?(this.options.preload=r.concat(i),this.loadResources((function(e){n.resolve(),t&&t(e)})),n):(t&&t(),Promise.resolve())}},{key:"dir",value:function(e){if(e||(e=this.languages&&this.languages.length>0?this.languages[0]:this.language),!e)return"rtl";return["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam"].indexOf(this.services.languageUtils.getLanguagePartFromCode(e))>=0?"rtl":"ltr"}},{key:"createInstance",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;return new t(e,n)}},{key:"cloneInstance",value:function(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Q,i=c({},this.options,n,{isClone:!0}),o=new t(i),s=["store","services","language"];return s.forEach((function(t){o[t]=e[t]})),o.services=c({},this.services),o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},o.translator=new F(o.services,o.options),o.translator.on("*",(function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{}),{trackKind:t.kind,selected:"live"==t.readyState,deviceKind:this.trackKindtoDeviceKind(t.kind),settings:t.getSettings(),constraints:t.getConstraints(),capabilities:t.getCapabilities(),track:t,mediaStream:e}}static trackKindtoDeviceKind(e){switch(e){case"audio":return"audioinput";case"video":return"videoinput"}}static trackKinds(){return["audio","video"]}static isChrome(){const e=window.chrome,t=window.navigator,n=t.vendor,r=void 0!==window.opr,i=t.userAgent.indexOf("Edge")>-1;return t.userAgent.match("CriOS")||null!=e&&"Google Inc."===n&&!1===r&&!1===i}},ne=n(11),re=n(25),ie=n.n(re),oe=class{constructor(e){this._renders=[],this._windowLoaded=!1,this._i18nReady=!1,this._renderReady=!1,e.on("language.changed",()=>{this._i18nReady=!0,this._windowLoaded&&this._i18nReady&&(this._renderReady=!0,this.render(),this._emit("render.ready",this))}),window.addEventListener("load",()=>{this._windowLoaded=!0,this._windowLoaded&&this._i18nReady&&(this._renderReady=!0,this.render(),this._emit("render.ready",this))})}renderAddTarget(e){"string"==typeof e&&(e={root:{elementId:e}});const t=te.merge(this._renderDefaultConfig(),{data:e.data||{},i18n:e.i18n||{},template:e.template,root:e.root||{},by_id:e.by_id||{},by_name:e.by_name||{},enabled:!0});t.by_id&&Object.keys(t.by_id).forEach(e=>{const n=t.by_id[e];n.elementId||(n.elementId=te.randomElementId())}),t.by_name&&Object.keys(t.by_name).forEach(e=>{const n=t.by_name[e];n.elementName||(n.elementName=te.randomElementId())}),this._emit("render.new",this,t),this._renderReady&&this._render(t),this._renders.push(t)}render(e=(e=>e),t=(e=>e)){const n=this._renders.map(n=>this._render(e(n)).then(e=>t(e)));return Promise.all(n).then(e=>(this._emit("render.rendered",this,e),e))}_render(e){return new Promise(t=>{if(this._renderReady){const n={data:e.data,by_id:e.by_id,by_name:e.by_name,i18n:this._i18nTranslate(e.i18n)};e.html=ie.a.render(e.template,n),!e.root.element&&e.root.elementId&&(e.root.element=document.getElementById(e.root.elementId)),e.root.element&&e.enabled&&(e.root.element.innerHTML=e.html),e.by_id&&Object.keys(e.by_id).forEach(t=>{const n=e.by_id[t];n.elementId&&(n.element=document.getElementById(n.elementId)),n.element&&n.events&&Object.keys(n.events).forEach(t=>{n.element[t]=(...r)=>{r.push(e),n.events[t].apply(this,r)}})}),e.by_name&&Object.keys(e.by_name).forEach(t=>{const n=e.by_name[t];n.elementName&&(n.elements=document.getElementsByName(n.elementName)),n.elements&&n.events&&n.elements.forEach(t=>{Object.keys(n.events).forEach(r=>{t[r]=(...t)=>{t.push(e),n.events[r].apply(this,t)}})})}),t(e)}else t(e)})}_i18nTranslate(e){const t=this._libwebphone.i18nTranslator(),n={};for(const[r,i]of Object.entries(e))n[r]=t(i);return n}},se=n(26),ae=n.n(se),le=class{constructor(e,t=null){this._libwebphone=e,this._id=t&&t.data.lwpStreamId||te.uuid(),this._emit=this._libwebphone._callEvent,this._session=t,this._initProperties(),this._initEventBindings();this._libwebphone.getCallList()||this._setPrimary(),this._emit("created",this),t&&this._timeUpdate()}getId(){return this._id}hasSession(){return null!=this._session}hasPeerConnection(){const e=this._getSession();return e&&e.connection}getPeerConnection(){if(this.hasPeerConnection())return this._getSession().connection}isPrimary(){return this._primary}getRemoteAudio(){return this._streams.remote.elements.audio}getRemoteVideo(){return this._streams.remote.elements.video}getLocalAudio(){return this._streams.local.elements.audio}getLocalVideo(){return this._streams.local.elements.video}isInProgress(){return!!this.hasSession()&&this._getSession().isInProgress()}isEstablished(){return!!this.hasSession()&&this._getSession().isEstablished()}isEnded(){return!!this.hasSession()&&this._getSession().isEnded()}isRinging(){return"terminating"==this.getDirection()&&!this.isEstablished()}isInTransfer(){return this._inTransfer}getDirection(){return this.hasSession()&&"incoming"==this._getSession().direction?"terminating":"originating"}localIdentity(e=!1){const t=this._getSession();if(t){if(e)return t.local_identity;const n=t.local_identity.display_name,r=t.local_identity.uri.user;return n&&n!=r?n+" ("+r+")":r}}remoteIdentity(e=!1){const t=this._getSession();if(t){if(e)return t.remote_identity;const n=t.remote_identity.display_name,r=t.remote_identity.uri.user;return n&&n!=r?n+" ("+r+")":r}}terminate(){this.hasSession()&&(this.isEstablished()?this.hangup():this.cancel())}cancel(){this.hasSession()&&this._getSession().terminate()}hangup(){this.hasSession()&&this._getSession().terminate()}hold(){this.hasSession()&&this._getSession().hold()}isOnHold(e=!1){let t={local:!1,remote:!1};return this.hasSession()&&(t=this._getSession().isOnHold()),e?t:t.local||t.remote}unhold(){this.hasSession()&&(this._getSession().unhold(),this._updateStreams())}mute(e={audio:!0,video:!0}){this.hasSession()&&this._getSession().mute(e)}unmute(e={audio:!0,video:!0}){this.hasSession()&&this._getSession().unmute(e)}isMuted(e=!1){let t={audio:!1,video:!1};return this.hasSession()&&(t=this._getSession().isMuted()),e?t:t.audio||t.video}transfer(e=null,t=!0){if(this.hasSession())if(this.isInTransfer()||e){const n=this._libwebphone.getDialpad();this._inTransfer=!1,!e&&n&&(e=n.getTarget(!0)),e?(this._getSession().refer(e),this._emit("transfer.started",this,e)):(t&&this.unhold(),this._emit("transfer.failed",this,e)),this._emit("transfer.complete",this,e)}else this._inTransfer=!0,t&&this.hold(),this._emit("transfer.collecting",this)}answer(){if(this.hasSession()){const e=this._libwebphone.getMediaDevices();e?e.startStreams(this.getId()).then(e=>{const t={mediaStream:e};this._getSession().answer(t),this._emit("answered",this)}):(this._getSession().answer({}),this._emit("answered",this))}}reject(){this.hasSession()&&(this._getSession().terminate(),this._emit("rejected",this))}renegotiate(){this.hasSession()&&!this.isOnHold()&&(this._getSession().renegotiate(),this._updateStreams(),this._emit("renegotiated",this))}sendDTMF(e){this.hasSession()&&(this._getSession().sendDTMF(e),this._emit("send.dtmf",this,e))}changeVolume(e=null,t=null){if(null===e&&this._libwebphone.getAudioContext()&&(e=this._libwebphone.getAudioContext().getVolume("remote",{scale:!1,relativeToMaster:!0})),e||0===e)if(e<0&&(e=0),e>1&&(e=1),t){const n=this._streams.remote.elements[t];n&&(n.volume=e)}else Object.keys(this._streams.remote.elements).forEach(t=>{const n=this._streams.remote.elements[t];n&&(n.volume=e)})}replaceSenderTrack(e){const t=this.getPeerConnection();if(!t)return;if("closed"==t.signalingState||"closed"==t.connectionState)return;const n=t.getSenders().find(t=>{const n=t.track;if(n)return n.kind==e.kind});n?n.replaceTrack(e).then(()=>{this.renegotiate()}):(t.addTrack(e),this.renegotiate())}removeSenderTrack(e){const t=this.getPeerConnection();if(!t)return;if("closed"==t.signalingState||"closed"==t.connectionState)return;const n=t.getSenders().find(t=>{const n=t.track;if(n)return n.kind==e});n&&(t.removeTrack(n),this.renegotiate())}summary(){const e=this.getDirection(),{audio:t,video:n}=this.isMuted(!0);return{callId:this.getId(),hasSession:this.hasSession(),progress:this.isInProgress(),established:this.isEstablished(),ended:this.isEnded(),held:this.isOnHold(),isAudioMuted:t,isVideoMuted:n,primary:this.isPrimary(),inTransfer:this.isInTransfer(),direction:e,terminating:"terminating"==e,originating:"originating"==e,localIdentity:this.localIdentity(),remoteIdentity:this.remoteIdentity()}}_initProperties(){this._primary=!1,this._inTransfer=!1,this._muteHint=!1,this._config=this._libwebphone._config.call,this._streams={remote:{mediaStream:new MediaStream,kinds:{audio:!1,video:!1},elements:{audio:document.createElement("audio"),video:document.createElement("video")}},local:{mediaStream:new MediaStream,kinds:{audio:!1,video:!1},elements:{audio:document.createElement("audio"),video:document.createElement("video")}}},Object.keys(this._streams).forEach(e=>{Object.keys(this._streams[e].elements).forEach(t=>{const n=this._streams[e].elements[t];te.mediaElementEvents().forEach(r=>{n.addEventListener(r,i=>{this._emit(e+"."+t+"."+r,this,n,i)})}),this._config.useAudioContext?n.muted=!0:n.muted=!("remote"==e&&"audio"==t),n.preload="none",this._emit(e+"."+t+".element",this,n)})}),this.isRinging()&&this._emit("ringing.started",this)}_initEventBindings(){if(this._libwebphone.on("mediaDevices.audio.input.changed",(e,t,n)=>{this.hasSession()&&(n?this.replaceSenderTrack(n.track):this.removeSenderTrack("audio"))}),this._libwebphone.on("mediaDevices.video.input.changed",(e,t,n)=>{this.hasSession()&&n&&this.replaceSenderTrack(n.track)}),this._libwebphone.on("mediaDevices.audio.output.changed",(e,t,n)=>{Object.keys(this._streams.remote.elements).forEach(e=>{const t=this._streams.remote.elements[e];t&&t.setSinkId(n.id)})}),this._libwebphone.on("audioContext.channel.master.volume",()=>{this.changeVolume()}),this._libwebphone.on("audioContext.channel.remote.volume",()=>{this.changeVolume()}),this.hasPeerConnection()){const e=this.getPeerConnection();this._emit("peerconnection",this,e),e.addEventListener("track",(...e)=>{this._emit("peerconnection.add.track",this,...e),this._updateStreams()}),e.addEventListener("removestream",(...e)=>{this._emit("peerconnection.remove.track",this,...e),this._updateStreams()})}this.hasSession()&&(this._getSession().on("progress",(...e)=>{this._emit("progress",this,...e)}),this._getSession().on("connecting",()=>{this._getSession().mute({audio:this._config.startWithAudioMuted,video:this._config.startWithVideoMuted})}),this._getSession().on("confirmed",(...e)=>{this._answerTime=new Date,this._emit("ringing.stopped",this),this._emit("established",this,...e)}),this._getSession().on("newDTMF",(...e)=>{this._emit("receive.dtmf",this,...e)}),this._getSession().on("newInfo",(...e)=>{this._emit("receive.info",this,...e)}),this._getSession().on("hold",(...e)=>{this._emit("hold",this,...e)}),this._getSession().on("unhold",(...e)=>{this._emit("unhold",this,...e)}),this._getSession().on("muted",(...e)=>{this._emit("muted",this,...e)}),this._getSession().on("unmuted",(...e)=>{this._emit("unmuted",this,...e)}),this._getSession().on("ended",(...e)=>{this._destroyCall(),this._emit("ended",this,...e)}),this._getSession().on("failed",(...e)=>{this._destroyCall(),this._emit("failed",this,...e)}),this._getSession().on("peerconnection",(...e)=>{const t=e[0].peerconnection;this._emit("peerconnection",this,t),t.addEventListener("track",(...e)=>{this._emit("peerconnection.add.track",this,...e),this._updateStreams()}),t.addEventListener("remotestream",(...e)=>{this._emit("peerconnection.remove.track",this,...e),this._updateStreams()})}),this._config.globalKeyShortcuts&&(document.addEventListener("keydown",e=>{if(e.target==document.body&&!e.repeat&&this.isPrimary())switch(e.key){case" ":this._config.keys.spacebar.enabled&&this._config.keys.spacebar.action(e,this)}}),document.addEventListener("keyup",e=>{if(e.target==document.body&&!e.repeat&&this.isPrimary())switch(e.key){case" ":this._config.keys.spacebar.enabled&&this._config.keys.spacebar.action(e,this)}})))}_timeUpdate(){if(this._answerTime){const e=new Date-this._answerTime,t={secondsDecimalDigits:0};this._emit("timeupdate",this,this._answerTime,e,ae()(1e3*Math.ceil(e/1e3),t))}this.hasSession()&&setTimeout(()=>{this._timeUpdate()},100)}_destroyCall(){this._emit("terminated",this),this.isPrimary()&&this._clearPrimary(!1),this._destroyStreams(),this._session=null}_getSession(){return this._session}_setPrimary(e=!0){this.isPrimary()||(e&&this.isEstablished()&&this.isOnHold()&&this.unhold(),this._emit("promoted",this),this._primary=!0,this._connectStreams())}_clearPrimary(e=!0){this.isPrimary()&&(this.isInTransfer()&&(this._inTransfer=!1,this._emit("transfer.failed",this)),this._primary=!1,e&&this.isEstablished()&&!this.isOnHold()&&this.hold(),this._disconnectStreams(),this._emit("demoted",this))}_updateStreams(){Object.keys(this._streams).forEach(e=>{const t=this.getPeerConnection(),n=this._streams[e].mediaStream;if(t){const r=[];switch(e){case"remote":t.getReceivers().forEach(e=>{e.track&&r.push(e.track)});break;case"local":t.getSenders().forEach(e=>{e.track&&r.push(e.track)})}this._syncTracks(n,r,e)}Object.keys(this._streams[e].elements).forEach(t=>{const r=this._streams[e].elements[t];if(r){n.getTracks().find(e=>e.kind==t)?(this._streams[e].kinds[t]=!0,r.srcObject&&r.srcObject.id==n.id||(r.srcObject=n)):(this._streams[e].kinds[t]=!1,r.srcObject=null)}})})}_syncTracks(e,t,n){const r=t.map(e=>e.id),i=e.getTracks().map(e=>e.id),o=r.filter(e=>!i.includes(e)),s=i.filter(e=>!r.includes(e));e.getTracks().forEach(t=>{s.includes(t.id)&&(e.removeTrack(t),this._emit(n+"."+t.kind+".removed",this,te.trackParameters(e,t)))}),t.forEach(t=>{o.includes(t.id)&&(e.addTrack(t),this._emit(n+"."+t.kind+".added",this,te.trackParameters(e,t)))})}_connectStreams(){if(Object.keys(this._streams).forEach(e=>{const t=this._streams[e].mediaStream;this._emit(e+".mediaStream.connect",this,t)}),!this.hasSession())return;const e=this.getPeerConnection();e&&e.getSenders().forEach(e=>{e.track&&(e.track.enabled=!0)}),Object.keys(this._streams).forEach(e=>{Object.keys(this._streams[e].elements).forEach(t=>{const n=this._streams[e].elements[t];n&&n.paused&&n.play().catch(()=>{}),this._emit(e+"."+t+".connect",this,n)})})}_disconnectStreams(){if(Object.keys(this._streams).forEach(e=>{const t=this._streams[e].mediaStream;this._emit(e+".mediaStream.disconnect",this,t)}),!this.hasSession())return;const e=this.getPeerConnection();e&&e.getSenders().forEach(e=>{e.track&&(e.track.enabled=!1)}),Object.keys(this._streams).forEach(e=>{Object.keys(this._streams[e].elements).forEach(t=>{const n=this._streams[e].elements[t];n&&!n.paused&&n.pause(),this._emit(e+"."+t+".disconnect",this,n)})})}_destroyStreams(){this._emit("ringing.stopped",this);const e=this.getPeerConnection();e&&e.getSenders().forEach(e=>{e.track&&e.track.stop()})}},ue=class extends oe{constructor(e,t={}){return super(e),this._libwebphone=e,this._emit=this._libwebphone._userAgentEvent,this._initProperties(t),this._initInternationalization(t.i18n||{}),this._initSockets(),this._initEventBindings(),this._initRenderTargets(),this._emit("created",this),this.initAgent=this._initAgent.bind(this),this}start(e=null,t=null,n=null){if(!this.isStarted()){e&&(this._config.authentication.username=e),t&&(this._config.authentication.password=t),n&&(this._config.authentication.realm=n);try{const e={sockets:this._sockets,uri:"webphone@"+this._config.authentication.realm,connection_recovery_max_interval:this._config.transport.recovery_max_interval,connection_recovery_min_interval:this._config.transport.recovery_min_interval,contact_uri:this._config.user_agent.contact_uri,display_name:this._config.user_agent.display_name,instance_id:this._config.user_agent.instance_id,no_answer_timeout:this._config.user_agent.no_answer_timeout,realm:this._config.authentication.realm,register:this._config.user_agent.register,register_expires:this._config.user_agent.register_expires,user_agent:this._config.user_agent.user_agent,session_timers:!1};return this._config.authentication.jwt&&(e.authorization_jwt=this._config.authentication.jwt),this._config.authentication.username&&(e.authorization_user=this._config.authentication.username,e.uri=this._config.authentication.username+"@"+this._config.authentication.realm,this._config.authentication.password&&(e.password=this._config.authentication.password)),this.initAgent(e),this._userAgent.start(),this._userAgent.on("connected",(...e)=>{this.updateRenders(),this._emit("connected",this,...e)}),this._userAgent.on("disconnected",(...e)=>{this.updateRenders(),this._emit("disconnected",this,...e)}),this._userAgent.on("registered",(...e)=>{this.updateRenders(),this._emit("registration.registered",this,...e)}),this._userAgent.on("unregistered",(...e)=>{this.updateRenders(),this._emit("registration.unregistered",this,...e)}),this._userAgent.on("registrationFailed",(...e)=>{this.updateRenders(),this._emit("registration.failed",this,...e)}),this._userAgent.on("registrationExpiring",(...e)=>{this._emit("registration.expiring",this,...e),this._userAgent.register()}),this._userAgent.on("newRTCSession",(...e)=>{const t=e[0].session;new le(this._libwebphone,t)}),this._userAgent.on("newMessage",(...e)=>{this._emit("recieved.message",this,...e)}),this._userAgent.on("sipEvent",(...e)=>{this._emit("recieved.notify",this,...e)}),this._emit("started",this),this._userAgent}catch(e){this._emit("configuration.error",this,e)}}}stop(){this.isStarted()&&(this.hangupAll(),this.unregister(),this._userAgent.stop(),this._userAgent=null,this._emit("stopped",this))}isStarted(){return null!=this._userAgent}isConnected(){return!!this.isStarted()&&this._userAgent.isConnected()}startDebug(){this._debug=!0,ne.debug.enable("JsSIP:*"),this._emit("debug.start",this)}stopDebug(){this._debug=!1,ne.debug.enable(""),this._emit("debug.stop",this)}toggleDebug(){return this.isDebugging()?this.stopDebug():this.startDebug()}isDebugging(){return this._debug}register(){this.isStarted()&&this._userAgent.register()}unregister(){this.isStarted()&&this._userAgent.unregister({all:!0})}toggleRegistration(){this.isRegistered()?this.unregister():this.register()}isRegistered(){return!!this.isStarted()&&this._userAgent.isRegistered()}redial(){const e=this.getRedial();return this._emit("redial.started",this,e),this.call(e)}getRedial(){return this._redialTarget}setRedial(e){this._redialTarget!=e&&(this._redialTarget=e,this._emit("redial.update",this,this._redialTarget))}call(e=null,t=[],n=!1){let r={data:{lwpStreamId:te.uuid()},extraHeaders:[...t,...this._config.custom_headers.establish_call],anonymous:n};const i=this._libwebphone.getMediaDevices(),o=this._libwebphone.getCallList();e?this.setRedial(e):e=this.getRedial(),o||this.hangupAll(),i?i.startStreams(r.data.lwpStreamId).then(t=>{r=te.merge(r,{mediaStream:t}),this._call(e,r)}).catch(e=>{this._emit("call.failed",this,e)}):this._call(e,r)}hangupAll(){this.isStarted()&&this._userAgent.terminateSessions()}isReady(){return this.isStarted()&&this.isConnected()&&this.isRegistered()}updateRenders(){this.render(e=>(e.data=this._renderData(e.data),e))}_initInternationalization(e){const t=te.merge({en:{agentstart:"Start",agentstop:"Stop",debug:"Debug",debugstart:"Start",debugstop:"Stop",username:"Username",password:"Password",realm:"Realm",registrar:"Registrar",register:"Register",unregister:"Unregister"}},e.resourceBundles||{});this._libwebphone.i18nAddResourceBundles("userAgent",t)}_initProperties(e){this._config=te.merge({transport:{sockets:[],recovery_max_interval:30,recovery_min_interval:2},authentication:{username:"",password:"",realm:""},user_agent:{no_answer_timeout:60,register:!0,register_expires:300,user_agent:"2600Hz libwebphone 2.x",redial:"*97"},custom_headers:{establish_call:[]},debug:!1},e),this._sockets=[],this._userAgent=null,this.setRedial(this._config.user_agent.redial),this._config.debug?this.startDebug():this.stopDebug()}_initSockets(){this._config.transport.sockets.forEach(e=>{this._sockets.push(new ne.WebSocketInterface(e))})}_initAgent(e){this._userAgent=new ne.UA(e),this._userAgent.receiveRequest=e=>{const t=this._userAgent._configuration.uri.user,n=e.ruri.user;return t.toLowerCase()==n.toLowerCase()&&(e.ruri.user=t),this._userAgent.__proto__.receiveRequest.call(this._userAgent,e)},this._config.custom_headers.register&&(this._userAgent.registrator().setExtraHeaders(this._config.custom_headers.register),console.log(this._userAgent))}_initEventBindings(){this._libwebphone.on("userAgent.debug.start",()=>{this.updateRenders()}),this._libwebphone.on("userAgent.debug.stop",()=>{this.updateRenders()}),this._libwebphone.on("userAgent.call.failed",()=>{this.updateRenders()}),this._libwebphone.onAny((e,...t)=>{this.isDebugging()&&console.log(e,t)})}_initRenderTargets(){this._config.renderTargets.map(e=>this.renderAddTarget(e))}_renderDefaultConfig(){return{template:this._renderDefaultTemplate(),i18n:{agentstart:"libwebphone:userAgent.agentstart",agentstop:"libwebphone:userAgent.agentstop",debug:"libwebphone:userAgent.debug",debugstart:"libwebphone:userAgent.debugstart",debugstop:"libwebphone:userAgent.debugstop",registrar:"libwebphone:userAgent.registrar",register:"libwebphone:userAgent.register",unregister:"libwebphone:userAgent.unregister",username:"libwebphone:userAgent.username",password:"libwebphone:userAgent.password",realm:"libwebphone:userAgent.realm"},data:te.merge({},this._config,this._renderData()),by_id:{debug:{events:{onclick:e=>{e.srcElement.disabled=!0,this.toggleDebug()}}},registrar:{events:{onclick:e=>{e.srcElement.disabled=!0,this.toggleRegistration()}}},username:{events:{onchange:e=>{const t=e.srcElement;this._config.authentication.username=t.value}}},password:{events:{onchange:e=>{const t=e.srcElement;this._config.authentication.password=t.value}}},realm:{events:{onchange:e=>{const t=e.srcElement;this._config.authentication.realm=t.value}}},agentstart:{events:{onclick:e=>{e.srcElement.disabled=!0,this.start()}}},agentstop:{events:{onclick:e=>{e.srcElement.disabled=!0,this.stop()}}}}}}_renderDefaultTemplate(){return'\n
\n
\n \n \n
\n\n {{^data.isStarted}}\n
\n \n \n
\n\n
\n \n \n
\n \n
\n \n \n
\n\n
\n \n \n
\n {{/data.isStarted}}\n\n {{#data.isStarted}}\n
\n \n \n
\n\n \n \n {{/data.isStarted}}\n
\n '}_renderData(e={}){return e.isStarted=this.isStarted(),e.isConnected=this.isConnected(),e.isRegistered=this.isRegistered(),e.isReady=this.isReady(),e.isDebugging=this.isDebugging(),e}_call(e,t){try{if(!this.isReady())throw new Error("Webphone client not ready yet!");this._userAgent.call(e,t),this._emit("call.started",this,e)}catch(e){this._emit("call.failed",this,e)}}},ce=class extends oe{constructor(e,t={}){return super(e),this._libwebphone=e,this._emit=this._libwebphone._callListEvent,this._initProperties(t),this._initInternationalization(t.i18n||{}),this._initEventBindings(),this._initRenderTargets(),this._emit("created",this),this}getCalls(){return this._calls}getCall(e=null){return this._calls.find(t=>e?t.getId()==e:t.isPrimary()&&t.hasSession())}addCall(e){const t=this.getCall();t&&!t.isOnHold()?(this._calls.push(e),this._emit("calls.added",this,e)):(this._calls.map(e=>{e.isPrimary&&e._clearPrimary()}),this._calls.push(e),this._emit("calls.added",this,e),e._setPrimary(),this._emit("calls.changed",this,e,t))}switchCall(e){const t=this.getCall(),n=this.getCall(e);this._calls.map(e=>{e.isPrimary&&e._clearPrimary()}),n&&(n._setPrimary(),n.hasSession()?this._emit("calls.changed",this,n,t):this._emit("calls.changed",this,null,t))}removeCall(e){const t=e.getId();if(this._calls=this._calls.filter(e=>e.getId()!=t),this._emit("calls.removed",this,e),e.isPrimary()){const t=this._calls.find(e=>e.hasSession());t?(t._setPrimary(!1),this._emit("calls.changed",this,t,e)):this._calls.length>0&&(this._calls[0]._setPrimary(),this._emit("calls.changed",this,null,e)),e._clearPrimary(!1)}}updateRenders(){this.render(e=>(e.data=this._renderData(e.data),e))}_initInternationalization(e){const t=te.merge({en:{new:"New Call"}},e.resourceBundles||{});this._libwebphone.i18nAddResourceBundles("callList",t)}_initProperties(e){this._config=te.merge({renderTargets:[]},e);const t=new le(this._libwebphone);t._setPrimary(),this._calls=[t]}_initEventBindings(){this._libwebphone.on("call.created",(e,t)=>{this.addCall(t)}),this._libwebphone.on("call.terminated",(e,t)=>{this.removeCall(t)}),this._libwebphone.on("calllist.calls.added",()=>{this.updateRenders()}),this._libwebphone.on("callList.calls.changed",()=>{this.updateRenders()}),this._libwebphone.on("call.promoted",()=>{this.updateRenders()}),this._libwebphone.on("call.progress",()=>{this.updateRenders()}),this._libwebphone.on("call.established",()=>{this.updateRenders()}),this._libwebphone.on("call.hold",()=>{this.updateRenders()}),this._libwebphone.on("call.unhold",()=>{this.updateRenders()}),this._libwebphone.on("call.muted",()=>{this.updateRenders()}),this._libwebphone.on("call.unmuted",()=>{this.updateRenders()}),this._libwebphone.on("call.transfer.collecting",()=>{this.updateRenders()}),this._libwebphone.on("call.transfer.completed",()=>{this.updateRenders()}),this._libwebphone.on("call.ended",()=>{this.updateRenders()}),this._libwebphone.on("call.failed",()=>{this.updateRenders()})}_initRenderTargets(){this._config.renderTargets.map(e=>this.renderAddTarget(e))}_renderDefaultConfig(){return{template:this._renderDefaultTemplate(),i18n:{new:"libwebphone:callList.new"},data:te.merge({},this._config,this._renderData()),by_name:{calls:{events:{onclick:e=>{const t=e.srcElement.value;this.switchCall(t)}}}}}}_renderDefaultTemplate(){return'\n {{#data.calls}}\n\n {{^hasSession}}\n {{#primary}}\n \n \n {{/primary}}\n\n {{^primary}}\n \n \n {{/primary}}\n {{/hasSession}}\n\n {{#hasSession}}\n {{#primary}}\n \n {{/primary}}\n\n {{^primary}}\n \n {{/primary}}\n\n \n {{/hasSession}}\n {{/data.calls}}\n\n\n '}_renderData(e={}){return e.calls=this.getCalls().map(e=>e.summary()),e.primary=this.getCall(),e}},de=class extends oe{constructor(e,t={}){return super(e),this._libwebphone=e,this._emit=this._libwebphone._callControlEvent,this._initProperties(t),this._initInternationalization(t.i18n||{}),this._initEventBindings(),this._initRenderTargets(),this._emit("created",this),this}redial(){const e=this._libwebphone.getUserAgent();e&&e.redial()}cancel(){const e=this._getCall();e&&e.cancel()}hangup(){const e=this._getCall();e&&e.hangup()}hold(){const e=this._getCall();e&&e.hold()}unhold(){const e=this._getCall();e&&e.unhold()}mute(){const e=this._getCall();e&&e.mute({audio:!0})}unmute(){const e=this._getCall();e&&e.unmute({audio:!0})}muteVideo(){const e=this._getCall();e&&e.mute({video:!0})}unmuteVideo(){const e=this._getCall();e&&e.unmute({video:!0})}transfer(){const e=this._getCall();e&&e.transfer()}answer(){const e=this._getCall();e&&e.answer()}updateRenders(e=null){let t=null;const n=this._libwebphone.getCallList();this._call=!e&&n?n.getCall():e,this._call&&(t=this._call.summary()),this.render(e=>(e.data=this._renderData(e.data,t),e))}_initInternationalization(e){const t=te.merge({en:{answer:"Anwser",redial:"Redial",cancel:"Cancel",hangup:"Hang Up",hold:"Hold",unhold:"Resume",mute:"Mute Audio",unmute:"Unmute Audio",muteVideo:"Mute Video",unmuteVideo:"Unmute Video",transferblind:"Blind Transfer",transferattended:"Attended Transfer",transfercomplete:"Transfer (complete)"}},e.resourceBundles||{});this._libwebphone.i18nAddResourceBundles("callControl",t)}_initProperties(e){this._config=te.merge({renderTargets:[]},e)}_initEventBindings(){this._libwebphone.on("call.promoted",(e,t)=>{this.updateRenders(t)}),this._libwebphone.on("call.primary.progress",(e,t)=>{this.updateRenders(t)}),this._libwebphone.on("call.primary.established",(e,t)=>{this.updateRenders(t)}),this._libwebphone.on("call.primary.hold",(e,t)=>{this.updateRenders(t)}),this._libwebphone.on("call.primary.unhold",(e,t)=>{this.updateRenders(t)}),this._libwebphone.on("call.primary.muted",(e,t)=>{this.updateRenders(t)}),this._libwebphone.on("call.primary.unmuted",(e,t)=>{this.updateRenders(t)}),this._libwebphone.on("call.primary.transfer.collecting",(e,t)=>{this.updateRenders(t)}),this._libwebphone.on("call.primary.transfer.completed",(e,t)=>{this.updateRenders(t)}),this._libwebphone.on("call.primary.terminated",()=>{this.updateRenders()}),this._libwebphone.on("userAgent.call.failed",()=>{this.updateRenders()})}_initRenderTargets(){this._config.renderTargets.map(e=>this.renderAddTarget(e))}_renderDefaultConfig(){return{template:this._renderDefaultTemplate(),i18n:{answer:"libwebphone:callControl.answer",redial:"libwebphone:callControl.redial",cancel:"libwebphone:callControl.cancel",hangup:"libwebphone:callControl.hangup",hold:"libwebphone:callControl.hold",unhold:"libwebphone:callControl.unhold",mute:"libwebphone:callControl.mute",unmute:"libwebphone:callControl.unmute",muteVideo:"libwebphone:callControl.muteVideo",unmuteVideo:"libwebphone:callControl.unmuteVideo",transfercomplete:"libwebphone:callControl.transfercomplete",transferblind:"libwebphone:callControl.transferblind",transferattended:"libwebphone:callControl.transferattended"},data:te.merge({},this._config,this._renderData()),by_id:{redial:{events:{onclick:e=>{e.srcElement.disabled=!0,this.redial()}}},cancel:{events:{onclick:e=>{e.srcElement.disabled=!0,this.cancel()}}},hangup:{events:{onclick:e=>{e.srcElement.disabled=!0,this.hangup()}}},hold:{events:{onclick:e=>{e.srcElement.disabled=!0,this.hold()}}},unhold:{events:{onclick:e=>{e.srcElement.disabled=!0,this.unhold()}}},mute:{events:{onclick:e=>{e.srcElement.disabled=!0,this.mute()}}},unmute:{events:{onclick:e=>{e.srcElement.disabled=!0,this.unmute()}}},muteVideo:{events:{onclick:e=>{e.srcElement.disabled=!0,this.muteVideo()}}},unmuteVideo:{events:{onclick:e=>{e.srcElement.disabled=!0,this.unmuteVideo()}}},transfer:{events:{onclick:()=>{this.transfer()}}},answer:{events:{onclick:e=>{e.srcElement.disabled=!0,this.answer()}}}}}}_renderDefaultTemplate(){return'\n
\n {{^data.call.hasSession}}\n {{#data.redial}}\n \n {{/data.redial}}\n {{/data.call.hasSession}}\n\n {{#data.call.hasSession}}\n {{#data.call.progress}}\n \n {{/data.call.progress}} \n\n {{#data.call.established}}\n \n\n {{^data.call.held}}\n \n {{/data.call.held}}\n\n {{#data.call.held}}\n \n {{/data.call.held}}\n\n {{^data.call.isAudioMuted}}\n \n {{/data.call.isAudioMuted}}\n\n {{#data.call.isAudioMuted}}\n \n {{/data.call.isAudioMuted}}\n\n {{^data.call.isVideoMuted}}\n \n {{/data.call.isVideoMuted}}\n \n {{#data.call.isVideoMuted}}\n \n {{/data.call.isVideoMuted}}\n\n \n {{/data.call.established}}\n\n {{#data.call.terminating}}\n {{#data.call.progress}}\n \n {{/data.call.progress}}\n {{/data.call.terminating}}\n {{/data.call.hasSession}}\n
\n '}_renderData(e={},t=null){const n=this._libwebphone.getUserAgent();return e.redial=n?n.getRedial():null,e.call=t,e}_getCall(){return this._call}},he=class extends oe{constructor(e,t={}){return super(e),this._libwebphone=e,this._emit=this._libwebphone._dialpadEvent,this._initProperties(t),this._initInternationalization(t.i18n||{}),this._initEventBindings(),this._initRenderTargets(),this._emit("created",this),this}dial(e,t=!0){const n=this._getCall();"string"==typeof e||e instanceof String||(e=e.toString()),!0===t&&(t=this._charToTone(e)),!1!==t&&this._emit("tones.play",this,t),n&&!n.isInTransfer()?n.sendDTMF(e):this._target.push(e),this._emit("target.updated",this,this.getTarget(),e)}backspace(){this._target.pop(),this._emit("target.backspace",this,this.getTarget())}clear(){this._target=[],this._emit("target.clear",this,this.getTarget())}enableFilter(){this._config.dialed.filter.enabled||(this._config.dialed.filter.enabled=!0,this._emit("filter.enabled",this))}disableFilter(){this._config.dialed.filter.enabled&&(this._config.dialed.filter.enabled=!1,this._emit("filter.disabled",this))}toggleFilter(){this._config.dialed.filter.enabled?this.disableFilter():this.enableFilter()}enableConvertion(){this._config.dialed.convert.enabled||(this._config.dialed.convert.enabled=!0,this._emit("convert.enabled",this))}disableConvertion(){this._config.dialed.convert.enabled&&(this._config.dialed.convert.enabled=!1,this._emit("convert.disabled",this))}toggleConvertion(){this._config.dialed.convert.enabled?this.disableConvertion():this.enableConvertion()}getTarget(e=!1,t=!0){let n=this._target;const r=this._config.dialed;return r.convert.enabled&&(n=n.map(e=>{switch(e=e.toLowerCase(),!0){case/[abc]/.test(e):return"1";case/[def]/.test(e):return"2";case/[ghi]/.test(e):return"4";case/[jkl]/.test(e):return"5";case/[mno]/.test(e):return"6";case/[pqrs]/.test(e):return"7";case/[tuv]/.test(e):return"8";case/[wxyz]/.test(e):return"9";default:return e}})),r.filter.enabled&&(n=n.filter(e=>/[0-9*#]/.test(e))),e&&this.clear(),t&&(n=n.join("")),n}hasTarget(){return this.getTarget(!1,!1).length>0}answer(){const e=this._getCall();e&&e.answer()}call(e=!0){let t=this.getTarget(!0,!1);const n=this._libwebphone.getUserAgent();n&&(t=e&&!t.length?n.getRedial():t.join(""),n.call(t),this._emit("call",this,t))}redial(){const e=this._libwebphone.getUserAgent();e&&(e.call(),this._emit("redial",this))}transfer(){const e=this._getCall();e&&(e.transfer(this.getTarget()),this.clear())}terminate(){const e=this._getCall();e&&e.terminate()}autoAction(e){switch(e=te.merge({answer:!0,redial:!0,call:!0,transfer:!0,terminate:!0},e),this.getAutoAction()){case"answer":e.answer&&this.answer();break;case"redial":e.redial&&this.redial();break;case"call":e.call&&this.call();break;case"transfer":e.transfer&&this.transfer();break;case"terminate":e.terminate&&this.terminate()}}getAutoAction(){const e=this._getCall();return e?e.isInTransfer()?"transfer":"terminating"!=e.getDirection()||e.isEstablished()?"terminate":"answer":this.hasTarget()?"call":"redial"}updateRenders(e=(e=>e)){this.render(e=>(e.data=this._renderData(e.data),e),e)}_initInternationalization(e){const t=te.merge({en:{one:"1",two:"2",three:"3",four:"4",five:"5",six:"6",seven:"7",eight:"8",nine:"9",astrisk:"*",zero:"0",pound:"#",clear:"clear",backspace:"<-",call:"Call",transfer:"Transfer",enableconvert:"A -> #",disableconvert:"A -> A",enablefilter:"# Only",disablefilter:"Any"}},e.resourceBundles||{});this._libwebphone.i18nAddResourceBundles("dialpad",t)}_initProperties(e){const t={renderTargets:[],dialed:{show:!0,backspace:{show:!0},clear:{show:!0},filter:{show:!0,enabled:!0},convert:{show:!0,enabled:!1}},controls:{show:!0,call:{show:!0},transfer:{show:!0}},dialpad:{show:!0},tones:{one:[1209,697],two:[1336,697],three:[1477,697],four:[1209,770],five:[1336,770],six:[1477,697],seven:[1209,852],eight:[1336,852],nine:[1477,852],astrisk:[1209,941],zero:[1336,941],pound:[1477,941]},globalKeyShortcuts:!0,keys:{enter:{enabled:!0,action:()=>{this._libwebphone.getUserAgent()&&!this._libwebphone.getUserAgent().isStarted()?this._libwebphone.getUserAgent().start():this.autoAction({terminate:!1})}},escape:{enabled:!0,action:()=>{this._getCall()?this.terminate():this.clear()}},backspace:{enabled:!0,action:()=>{this.backspace()}},dtmf:{enabled:!0,action:e=>{this._getCall()&&!/^[0-9#*]$/.test(e.key)||this.dial(e.key)}}}};this._config=te.merge(t,e),this._target=[]}_initEventBindings(){this._libwebphone.on("call.primary.transfer.collecting",()=>{this.clear()}),this._libwebphone.on("call.primary.transfer.complete",()=>{this.clear()}),this._libwebphone.on("callList.calls.changed",()=>{this.updateRenders()}),this._libwebphone.on("dialpad.target.updated",()=>{this.updateRenders()}),this._libwebphone.on("dialpad.target.backspace",()=>{this.updateRenders()}),this._libwebphone.on("dialpad.target.clear",()=>{this.updateRenders()}),this._libwebphone.on("dialpad.convert.enabled",()=>{this.updateRenders()}),this._libwebphone.on("dialpad.convert.disabled",()=>{this.updateRenders()}),this._libwebphone.on("dialpad.filter.enabled",()=>{this.updateRenders()}),this._libwebphone.on("dialpad.filter.disabled",()=>{this.updateRenders()}),this._config.globalKeyShortcuts&&document.addEventListener("keydown",e=>{const t=e.key;if(e.target==document.body)switch(t){case"Enter":this._config.keys.enter.enabled&&this._config.keys.enter.action(e,this);break;case"Escape":this._config.keys.escape.enabled&&this._config.keys.escape.action(e,this);break;case"Backspace":this._config.keys.backspace.enabled&&this._config.keys.backspace.action(e,this);break;default:1==t.length&&this._config.keys.dtmf.enabled&&this._config.keys.dtmf.action(e,this)}})}_initRenderTargets(){this._config.renderTargets.map(e=>this.renderAddTarget(e))}_renderDefaultConfig(){return{template:this._renderDefaultTemplate(),i18n:{one:"libwebphone:dialpad.one",two:"libwebphone:dialpad.two",three:"libwebphone:dialpad.three",four:"libwebphone:dialpad.four",five:"libwebphone:dialpad.five",six:"libwebphone:dialpad.six",seven:"libwebphone:dialpad.seven",eight:"libwebphone:dialpad.eight",nine:"libwebphone:dialpad.nine",astrisk:"libwebphone:dialpad.astrisk",zero:"libwebphone:dialpad.zero",pound:"libwebphone:dialpad.pound",clear:"libwebphone:dialpad.clear",backspace:"libwebphone:dialpad.backspace",call:"libwebphone:dialpad.call",transfer:"libwebphone:dialpad.transfer",enableconvert:"libwebphone:dialpad.enableconvert",disableconvert:"libwebphone:dialpad.disableconvert",enablefilter:"libwebphone:dialpad.enablefilter",disablefilter:"libwebphone:dialpad.disablefilter"},data:te.merge({},this._config,this._renderData()),by_id:{dialed:{events:{oninput:e=>{this._syncElementValue(e)},onkeypress:e=>{13==e.keyCode&&this.autoAction({terminate:!1})}}},one:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},two:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},three:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},four:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},five:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},six:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},seven:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},eight:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},nine:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},astrisk:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},zero:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},pound:{events:{onclick:e=>{const t=e.srcElement.dataset.value;this.dial(this._valueToChar(t),this._valueToTone(t))}}},clear:{events:{onclick:()=>{this.clear()}}},convert:{events:{onclick:()=>{this.toggleConvertion()}}},filter:{events:{onclick:()=>{this.toggleFilter()}}},backspace:{events:{onclick:()=>{this.backspace()}}},call:{events:{onclick:e=>{e.srcElement.disabled=!0,this.call()}}},transfer:{events:{onclick:e=>{e.srcElement.disabled=!0,this.transfer()}}}}}}_renderDefaultTemplate(){return'\n
\n {{#data.dialed.show}}\n
\n \n\n {{#data.dialed.backspace.show}}\n \n {{/data.dialed.backspace.show}}\n\n {{#data.dialed.clear.show}}\n \n {{/data.dialed.clear.show}}\n\n {{#data.dialed.convert.show}}\n \n {{/data.dialed.convert.show}}\n\n {{#data.dialed.filter.show}}\n \n {{/data.dialed.filter.show}}\n\n
\n {{/data.dialed.show}}\n\n {{#data.dialpad.show}}\n
\n \n \n \n
\n\n
\n \n \n \n
\n\n
\n \n \n \n
\n\n
\n \n \n \n
\n {{/data.dialpad.show}}\n\n {{#data.controls.show}}\n\n {{#data.controls.call.show}}\n {{^data.call}}\n
\n \n
\n {{/data.call}}\n {{/data.controls.call.show}}\n\n {{#data.controls.transfer.show}}\n {{#data.call.inTransfer}}\n
\n \n
\n {{/data.call.inTransfer}}\n {{/data.controls.transfer.show}}\n\n {{/data.controls.show}}\n\t
\n '}_renderData(e={}){const t=this._getCall();return t&&(e.call=t.summary()),e.target=this.getTarget(),e.convert=this._config.dialed.convert.enabled,e.filter=this._config.dialed.filter.enabled,e}_valueToChar(e){return this._charDictionary()[e]}_valueToTone(e){return this._config.tones[e]}_charToValue(e){const t=this._charDictionary();return Object.keys(t).reduce((e,n)=>(e[t[n]]=n,e),{})[e]}_charToTone(e){return this._valueToTone(this._charToValue(e))}_charDictionary(){return{one:"1",two:"2",three:"3",four:"4",five:"5",six:"6",seven:"7",eight:"8",nine:"9",astrisk:"*",zero:"0",pound:"#"}}_syncElementValue(e){const t=e.srcElement,n=this._charToTone(e.data),r=this._getCall();n&&this._emit("tones.play",this,n),r&&!r.isInTransfer()?r.sendDTMF(e.data):this._target=t.value.split(""),this.updateRenders(e=>{if(e.data=this._renderData(e.data),t.id==e.by_id.dialed.elementId){const n=t.selectionStart;e.by_id.dialed.element.focus(),e.by_id.dialed.element.setSelectionRange(n,n)}}),this._emit("target.updated",this,this.getTarget(),e.data)}_getCall(){const e=this._libwebphone.getCallList();if(e)return e.getCall()}},fe=n(27);let pe=!0,ge=!0;function me(e,t,n){const r=e.match(t);return r&&r.length>=n&&parseInt(r[n],10)}function _e(e,t,n){if(!e.RTCPeerConnection)return;const r=e.RTCPeerConnection.prototype,i=r.addEventListener;r.addEventListener=function(e,r){if(e!==t)return i.apply(this,arguments);const o=e=>{const t=n(e);t&&(r.handleEvent?r.handleEvent(t):r(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(r,o),i.apply(this,[e,o])};const o=r.removeEventListener;r.removeEventListener=function(e,n){if(e!==t||!this._eventMap||!this._eventMap[t])return o.apply(this,arguments);if(!this._eventMap[t].has(n))return o.apply(this,arguments);const r=this._eventMap[t].get(n);return this._eventMap[t].delete(n),0===this._eventMap[t].size&&delete this._eventMap[t],0===Object.keys(this._eventMap).length&&delete this._eventMap,o.apply(this,[e,r])},Object.defineProperty(r,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function ve(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(pe=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function ye(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(ge=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function be(){if("object"==typeof window){if(pe)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}}function Ce(e,t){ge&&console.warn(e+" is deprecated, please use "+t+" instead.")}function Te(e){const t={browser:null,version:null};if(void 0===e||!e.navigator)return t.browser="Not a browser.",t;const{navigator:n}=e;if(n.mozGetUserMedia)t.browser="firefox",t.version=me(n.userAgent,/Firefox\/(\d+)\./,1);else if(n.webkitGetUserMedia||!1===e.isSecureContext&&e.webkitRTCPeerConnection&&!e.RTCIceGatherer)t.browser="chrome",t.version=me(n.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(n.mediaDevices&&n.userAgent.match(/Edge\/(\d+).(\d+)$/))t.browser="edge",t.version=me(n.userAgent,/Edge\/(\d+).(\d+)$/,2);else{if(!e.RTCPeerConnection||!n.userAgent.match(/AppleWebKit\/(\d+)\./))return t.browser="Not a supported browser.",t;t.browser="safari",t.version=me(n.userAgent,/AppleWebKit\/(\d+)\./,1),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&"currentDirection"in e.RTCRtpTransceiver.prototype}return t}function we(e){return"[object Object]"===Object.prototype.toString.call(e)}function Se(e){return we(e)?Object.keys(e).reduce((function(t,n){const r=we(e[n]),i=r?Se(e[n]):e[n],o=r&&!Object.keys(i).length;return void 0===i||o?t:Object.assign(t,{[n]:i})}),{}):e}function Ae(e,t,n){const r=n?"outbound-rtp":"inbound-rtp",i=new Map;if(null===t)return i;const o=[];return e.forEach(e=>{"track"===e.type&&e.trackIdentifier===t.id&&o.push(e)}),o.forEach(t=>{e.forEach(n=>{n.type===r&&n.trackId===t.id&&function e(t,n,r){n&&!r.has(n.id)&&(r.set(n.id,n),Object.keys(n).forEach(i=>{i.endsWith("Id")?e(t,t.get(n[i]),r):i.endsWith("Ids")&&n[i].forEach(n=>{e(t,t.get(n),r)})}))}(e,n,i)})}),i}const Ee=be;function Ie(e){const t=e&&e.navigator;if(!t.mediaDevices)return;const n=Te(e),r=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;const t={};return Object.keys(e).forEach(n=>{if("require"===n||"advanced"===n||"mediaSource"===n)return;const r="object"==typeof e[n]?e[n]:{ideal:e[n]};void 0!==r.exact&&"number"==typeof r.exact&&(r.min=r.max=r.exact);const i=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==r.ideal){t.optional=t.optional||[];let e={};"number"==typeof r.ideal?(e[i("min",n)]=r.ideal,t.optional.push(e),e={},e[i("max",n)]=r.ideal,t.optional.push(e)):(e[i("",n)]=r.ideal,t.optional.push(e))}void 0!==r.exact&&"number"!=typeof r.exact?(t.mandatory=t.mandatory||{},t.mandatory[i("",n)]=r.exact):["min","max"].forEach(e=>{void 0!==r[e]&&(t.mandatory=t.mandatory||{},t.mandatory[i(e,n)]=r[e])})}),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},i=function(e,i){if(n.version>=61)return i(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){const t=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=r(e.audio)}if(e&&"object"==typeof e.video){let o=e.video.facingMode;o=o&&("object"==typeof o?o:{ideal:o});const s=n.version<66;if(o&&("user"===o.exact||"environment"===o.exact||"user"===o.ideal||"environment"===o.ideal)&&(!t.mediaDevices.getSupportedConstraints||!t.mediaDevices.getSupportedConstraints().facingMode||s)){let n;if(delete e.video.facingMode,"environment"===o.exact||"environment"===o.ideal?n=["back","rear"]:"user"!==o.exact&&"user"!==o.ideal||(n=["front"]),n)return t.mediaDevices.enumerateDevices().then(t=>{let s=(t=t.filter(e=>"videoinput"===e.kind)).find(e=>n.some(t=>e.label.toLowerCase().includes(t)));return!s&&t.length&&n.includes("back")&&(s=t[t.length-1]),s&&(e.video.deviceId=o.exact?{exact:s.deviceId}:{ideal:s.deviceId}),e.video=r(e.video),Ee("chrome: "+JSON.stringify(e)),i(e)})}e.video=r(e.video)}return Ee("chrome: "+JSON.stringify(e)),i(e)},o=function(e){return n.version>=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(t.getUserMedia=function(e,n,r){i(e,e=>{t.webkitGetUserMedia(e,n,e=>{r&&r(o(e))})})}.bind(t),t.mediaDevices.getUserMedia){const e=t.mediaDevices.getUserMedia.bind(t.mediaDevices);t.mediaDevices.getUserMedia=function(t){return i(t,t=>e(t).then(e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach(e=>{e.stop()}),new DOMException("","NotFoundError");return e},e=>Promise.reject(o(e))))}}}function Re(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&("function"==typeof t?e.navigator.mediaDevices.getDisplayMedia=function(n){return t(n).then(t=>{const r=n.video&&n.video.width,i=n.video&&n.video.height,o=n.video&&n.video.frameRate;return n.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:t,maxFrameRate:o||3}},r&&(n.video.mandatory.maxWidth=r),i&&(n.video.mandatory.maxHeight=i),e.navigator.mediaDevices.getUserMedia(n)})}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}function ke(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function xe(e){if("object"==typeof e&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",n=>{let r;r=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.track.id):{track:n.track};const i=new Event("track");i.track=n.track,i.receiver=r,i.transceiver={receiver:r},i.streams=[t.stream],this.dispatchEvent(i)}),t.stream.getTracks().forEach(n=>{let r;r=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.id):{track:n};const i=new Event("track");i.track=n,i.receiver=r,i.transceiver={receiver:r},i.streams=[t.stream],this.dispatchEvent(i)})},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else _e(e,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e))}function Me(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){const t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&("audio"===t.kind?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const n=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,r){let i=n.apply(this,arguments);return i||(i=t(this,e),this._senders.push(i)),i};const r=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){r.apply(this,arguments);const t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],n.apply(this,[e]),e.getTracks().forEach(e=>{this._senders.push(t(this,e))})};const r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],r.apply(this,[e]),e.getTracks().forEach(e=>{const t=this._senders.find(t=>t.track===e);t&&this._senders.splice(this._senders.indexOf(t),1)})}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function De(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,n,r]=arguments;if(arguments.length>0&&"function"==typeof e)return t.apply(this,arguments);if(0===t.length&&(0===arguments.length||"function"!=typeof e))return t.apply(this,[]);const i=function(e){const t={};return e.result().forEach(e=>{const n={id:e.id,timestamp:e.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[e.type]||e.type};e.names().forEach(t=>{n[t]=e.stat(t)}),t[n.id]=n}),t},o=function(e){return new Map(Object.keys(e).map(t=>[t,e[t]]))};if(arguments.length>=2){const r=function(e){n(o(i(e)))};return t.apply(this,[r,e])}return new Promise((e,n)=>{t.apply(this,[function(t){e(o(i(t)))},n])}).then(n,r)}}function Oe(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){const e=this;return this._pc.getStats().then(t=>Ae(t,e.track,!0))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),_e(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){const e=this;return this._pc.getStats().then(t=>Ae(t,e.track,!1))}}if(!("getStats"in e.RTCRtpSender.prototype)||!("getStats"in e.RTCRtpReceiver.prototype))return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){const e=arguments[0];let t,n,r;return this.getSenders().forEach(n=>{n.track===e&&(t?r=!0:t=n)}),this.getReceivers().forEach(t=>(t.track===e&&(n?r=!0:n=t),t.track===e)),r||t&&n?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):t?t.getStats():n?n.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function Le(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(e=>this._shimmedLocalStreams[e][0])};const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){if(!n)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const r=t.apply(this,arguments);return this._shimmedLocalStreams[n.id]?-1===this._shimmedLocalStreams[n.id].indexOf(r)&&this._shimmedLocalStreams[n.id].push(r):this._shimmedLocalStreams[n.id]=[n,r],r};const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException("Track already exists.","InvalidAccessError")});const t=this.getSenders();n.apply(this,arguments);const r=this.getSenders().filter(e=>-1===t.indexOf(e));this._shimmedLocalStreams[e.id]=[e].concat(r)};const r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],r.apply(this,arguments)};const i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach(t=>{const n=this._shimmedLocalStreams[t].indexOf(e);-1!==n&&this._shimmedLocalStreams[t].splice(n,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]}),i.apply(this,arguments)}}function Pe(e){if(!e.RTCPeerConnection)return;const t=Te(e);if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return Le(e);const n=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){const e=n.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map(e=>this._reverseStreams[e.id])};const r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[t.id]){const n=new e.MediaStream(t.getTracks());this._streams[t.id]=n,this._reverseStreams[n.id]=t,t=n}r.apply(this,[t])};const i=e.RTCPeerConnection.prototype.removeStream;function o(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{const r=e._reverseStreams[t],i=e._streams[r.id];n=n.replace(new RegExp(i.id,"g"),r.id)}),new RTCSessionDescription({type:t.type,sdp:n})}function s(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{const r=e._reverseStreams[t],i=e._streams[r.id];n=n.replace(new RegExp(r.id,"g"),i.id)}),new RTCSessionDescription({type:t.type,sdp:n})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},i.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,n){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const r=[].slice.call(arguments,1);if(1!==r.length||!r[0].getTracks().find(e=>e===t))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");const i=this.getSenders().find(e=>e.track===t);if(i)throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const o=this._streams[n.id];if(o)o.addTrack(t),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const r=new e.MediaStream([t]);this._streams[n.id]=r,this._reverseStreams[r.id]=n,this.addStream(r)}return this.getSenders().find(e=>e.track===t)},["createOffer","createAnswer"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],r={[t](){const e=arguments;return arguments.length&&"function"==typeof arguments[0]?n.apply(this,[t=>{const n=o(this,t);e[0].apply(null,[n])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):n.apply(this,arguments).then(e=>o(this,e))}};e.RTCPeerConnection.prototype[t]=r[t]}));const a=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=s(this,arguments[0]),a.apply(this,arguments)):a.apply(this,arguments)};const l=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){const e=l.get.apply(this);return""===e.type?e:o(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(e._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach(n=>{this._streams[n].getTracks().find(t=>e.track===t)&&(t=this._streams[n])}),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function Ne(e){const t=Te(e);if(!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),!e.RTCPeerConnection)return;const n=0===e.RTCPeerConnection.prototype.addIceCandidate.length;t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],r={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=r[t]}));const r=e.RTCPeerConnection.prototype.addIceCandidate;e.RTCPeerConnection.prototype.addIceCandidate=function(){return n||arguments[0]?t.version<78&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():r.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())}}function je(e){const t=Te(e);_e(e,"negotiationneeded",e=>{const n=e.target;if(!(t.version<72||n.getConfiguration&&"plan-b"===n.getConfiguration().sdpSemantics)||"stable"===n.signalingState)return e})}var Ue=n(28),Fe=n.n(Ue);function qe(e){const t=e&&e.navigator,n=t.mediaDevices.getUserMedia.bind(t.mediaDevices);t.mediaDevices.getUserMedia=function(e){return n(e).catch(e=>Promise.reject(function(e){return{name:{PermissionDeniedError:"NotAllowedError"}[e.name]||e.name,message:e.message,constraint:e.constraint,toString(){return this.name}}}(e)))}}function He(e){"getDisplayMedia"in e.navigator&&e.navigator.mediaDevices&&(e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||(e.navigator.mediaDevices.getDisplayMedia=e.navigator.getDisplayMedia.bind(e.navigator)))}function ze(e){const t=Te(e);if(e.RTCIceGatherer&&(e.RTCIceCandidate||(e.RTCIceCandidate=function(e){return e}),e.RTCSessionDescription||(e.RTCSessionDescription=function(e){return e}),t.version<15025)){const t=Object.getOwnPropertyDescriptor(e.MediaStreamTrack.prototype,"enabled");Object.defineProperty(e.MediaStreamTrack.prototype,"enabled",{set(e){t.set.call(this,e);const n=new Event("enabled");n.enabled=e,this.dispatchEvent(n)}})}e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)&&Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=new e.RTCDtmfSender(this):"video"===this.track.kind&&(this._dtmf=null)),this._dtmf}}),e.RTCDtmfSender&&!e.RTCDTMFSender&&(e.RTCDTMFSender=e.RTCDtmfSender);const n=Fe()(e,t.version);e.RTCPeerConnection=function(e){return e&&e.iceServers&&(e.iceServers=function(e,t){let n=!1;return(e=JSON.parse(JSON.stringify(e))).filter(e=>{if(e&&(e.urls||e.url)){let t=e.urls||e.url;e.url&&!e.urls&&Ce("RTCIceServer.url","RTCIceServer.urls");const r="string"==typeof t;return r&&(t=[t]),t=t.filter(e=>{if(0===e.indexOf("stun:"))return!1;const t=e.startsWith("turn")&&!e.startsWith("turn:[")&&e.includes("transport=udp");return t&&!n?(n=!0,!0):t&&!n}),delete e.url,e.urls=r?t[0]:t,!!t.length}})}(e.iceServers,t.version),be("ICE servers after filtering:",e.iceServers)),new n(e)},e.RTCPeerConnection.prototype=n.prototype}function Ge(e){e.RTCRtpSender&&!("replaceTrack"in e.RTCRtpSender.prototype)&&(e.RTCRtpSender.prototype.replaceTrack=e.RTCRtpSender.prototype.setTrack)}function Ve(e){const t=Te(e),n=e&&e.navigator,r=e&&e.MediaStreamTrack;if(n.getUserMedia=function(e,t,r){Ce("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),n.mediaDevices.getUserMedia(e).then(t,r)},!(t.version>55&&"autoGainControl"in n.mediaDevices.getSupportedConstraints())){const e=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])},t=n.mediaDevices.getUserMedia.bind(n.mediaDevices);if(n.mediaDevices.getUserMedia=function(n){return"object"==typeof n&&"object"==typeof n.audio&&(n=JSON.parse(JSON.stringify(n)),e(n.audio,"autoGainControl","mozAutoGainControl"),e(n.audio,"noiseSuppression","mozNoiseSuppression")),t(n)},r&&r.prototype.getSettings){const t=r.prototype.getSettings;r.prototype.getSettings=function(){const n=t.apply(this,arguments);return e(n,"mozAutoGainControl","autoGainControl"),e(n,"mozNoiseSuppression","noiseSuppression"),n}}if(r&&r.prototype.applyConstraints){const t=r.prototype.applyConstraints;r.prototype.applyConstraints=function(n){return"audio"===this.kind&&"object"==typeof n&&(n=JSON.parse(JSON.stringify(n)),e(n,"autoGainControl","mozAutoGainControl"),e(n,"noiseSuppression","mozNoiseSuppression")),t.apply(this,[n])}}}}function Be(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(n){if(!n||!n.video){const e=new DOMException("getDisplayMedia without video constraints is undefined");return e.name="NotFoundError",e.code=8,Promise.reject(e)}return!0===n.video?n.video={mediaSource:t}:n.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(n)})}function We(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Ye(e){const t=Te(e);if("object"!=typeof e||!e.RTCPeerConnection&&!e.mozRTCPeerConnection)return;if(!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t],r={[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[t]=r[t]})),t.version<68){const t=e.RTCPeerConnection.prototype.addIceCandidate;e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?arguments[0]&&""===arguments[0].candidate?Promise.resolve():t.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())}}const n={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},r=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){const[e,i,o]=arguments;return r.apply(this,[e||null]).then(e=>{if(t.version<53&&!i)try{e.forEach(e=>{e.type=n[e.type]||e.type})}catch(t){if("TypeError"!==t.name)throw t;e.forEach((t,r)=>{e.set(r,Object.assign({},t,{type:n[t.type]||t.type}))})}return e}).then(i,o)}}function Ke(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function Je(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),_e(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function Qe(e){e.RTCPeerConnection&&!("removeStream"in e.RTCPeerConnection.prototype)&&(e.RTCPeerConnection.prototype.removeStream=function(e){Ce("removeStream","removeTrack"),this.getSenders().forEach(t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)})})}function $e(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function Ze(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];const e=arguments[1],n=e&&"sendEncodings"in e;n&&e.sendEncodings.forEach(e=>{if("rid"in e){if(!/^[a-z0-9]{0,16}$/i.test(e.rid))throw new TypeError("Invalid RID value provided.")}if("scaleResolutionDownBy"in e&&!(parseFloat(e.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in e&&!(parseFloat(e.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const r=t.apply(this,arguments);if(n){const{sender:t}=r,n=t.getParameters();(!("encodings"in n)||1===n.encodings.length&&0===Object.keys(n.encodings[0]).length)&&(n.encodings=e.sendEncodings,t.sendEncodings=e.sendEncodings,this.setParametersPromises.push(t.setParameters(n).then(()=>{delete t.sendEncodings}).catch(()=>{delete t.sendEncodings})))}return r})}function Xe(e){if("object"!=typeof e||!e.RTCRtpSender)return;const t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){const e=t.apply(this,arguments);return"encodings"in e||(e.encodings=[].concat(this.sendEncodings||[{}])),e})}function et(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>t.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):t.apply(this,arguments)}}function tt(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.createAnswer;e.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>t.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):t.apply(this,arguments)}}function nt(e){if("object"==typeof e&&e.RTCPeerConnection){if("getLocalStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in e.RTCPeerConnection.prototype)){const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||(this._localStreams=[]),this._localStreams.includes(e)||this._localStreams.push(e),e.getAudioTracks().forEach(n=>t.call(this,n,e)),e.getVideoTracks().forEach(n=>t.call(this,n,e))},e.RTCPeerConnection.prototype.addTrack=function(e,...n){return n&&n.forEach(e=>{this._localStreams?this._localStreams.includes(e)||this._localStreams.push(e):this._localStreams=[e]}),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const t=this._localStreams.indexOf(e);if(-1===t)return;this._localStreams.splice(t,1);const n=e.getTracks();this.getSenders().forEach(e=>{n.includes(e.track)&&this.removeTrack(e)})})}}function rt(e){if("object"==typeof e&&e.RTCPeerConnection&&("getRemoteStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=e),this.addEventListener("track",this._onaddstreampoly=e=>{e.streams.forEach(e=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(e))return;this._remoteStreams.push(e);const t=new Event("addstream");t.stream=e,this.dispatchEvent(t)})})}});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){const e=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(t){t.streams.forEach(t=>{if(e._remoteStreams||(e._remoteStreams=[]),e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);const n=new Event("addstream");n.stream=t,e.dispatchEvent(n)})}),t.apply(e,arguments)}}}function it(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype,n=t.createOffer,r=t.createAnswer,i=t.setLocalDescription,o=t.setRemoteDescription,s=t.addIceCandidate;t.createOffer=function(e,t){const r=arguments.length>=2?arguments[2]:arguments[0],i=n.apply(this,[r]);return t?(i.then(e,t),Promise.resolve()):i},t.createAnswer=function(e,t){const n=arguments.length>=2?arguments[2]:arguments[0],i=r.apply(this,[n]);return t?(i.then(e,t),Promise.resolve()):i};let a=function(e,t,n){const r=i.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r};t.setLocalDescription=a,a=function(e,t,n){const r=o.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r},t.setRemoteDescription=a,a=function(e,t,n){const r=s.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r},t.addIceCandidate=a}function ot(e){const t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){const e=t.mediaDevices,n=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>n(st(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(e,n,r){t.mediaDevices.getUserMedia(e).then(n,r)}.bind(t))}function st(e){return e&&void 0!==e.video?Object.assign({},e,{video:Se(e.video)}):e}function at(e){if(!e.RTCPeerConnection)return;const t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,n){if(e&&e.iceServers){const t=[];for(let n=0;nt.generateCertificate})}function lt(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function ut(e){const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(e){if(e){void 0!==e.offerToReceiveAudio&&(e.offerToReceiveAudio=!!e.offerToReceiveAudio);const t=this.getTransceivers().find(e=>"audio"===e.receiver.track.kind);!1===e.offerToReceiveAudio&&t?"sendrecv"===t.direction?t.setDirection?t.setDirection("sendonly"):t.direction="sendonly":"recvonly"===t.direction&&(t.setDirection?t.setDirection("inactive"):t.direction="inactive"):!0!==e.offerToReceiveAudio||t||this.addTransceiver("audio"),void 0!==e.offerToReceiveVideo&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);const n=this.getTransceivers().find(e=>"video"===e.receiver.track.kind);!1===e.offerToReceiveVideo&&n?"sendrecv"===n.direction?n.setDirection?n.setDirection("sendonly"):n.direction="sendonly":"recvonly"===n.direction&&(n.setDirection?n.setDirection("inactive"):n.direction="inactive"):!0!==e.offerToReceiveVideo||n||this.addTransceiver("video")}return t.apply(this,arguments)}}function ct(e){"object"!=typeof e||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}var dt=n(8),ht=n.n(dt);function ft(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&"foundation"in e.RTCIceCandidate.prototype)return;const t=e.RTCIceCandidate;e.RTCIceCandidate=function(e){if("object"==typeof e&&e.candidate&&0===e.candidate.indexOf("a=")&&((e=JSON.parse(JSON.stringify(e))).candidate=e.candidate.substr(2)),e.candidate&&e.candidate.length){const n=new t(e),r=ht.a.parseCandidate(e.candidate),i=Object.assign(n,r);return i.toJSON=function(){return{candidate:i.candidate,sdpMid:i.sdpMid,sdpMLineIndex:i.sdpMLineIndex,usernameFragment:i.usernameFragment}},i}return new t(e)},e.RTCIceCandidate.prototype=t.prototype,_e(e,"icecandidate",t=>(t.candidate&&Object.defineProperty(t,"candidate",{value:new e.RTCIceCandidate(t.candidate),writable:"false"}),t))}function pt(e){if(!e.RTCPeerConnection)return;const t=Te(e);"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});const n=function(e){if(!e||!e.sdp)return!1;const t=ht.a.splitSections(e.sdp);return t.shift(),t.some(e=>{const t=ht.a.parseMLine(e);return t&&"application"===t.kind&&-1!==t.protocol.indexOf("SCTP")})},r=function(e){const t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===t||t.length<2)return-1;const n=parseInt(t[1],10);return n!=n?-1:n},i=function(e){let n=65536;return"firefox"===t.browser&&(n=t.version<57?-1===e?16384:2147483637:t.version<60?57===t.version?65535:65536:2147483637),n},o=function(e,n){let r=65536;"firefox"===t.browser&&57===t.version&&(r=65535);const i=ht.a.matchPrefix(e.sdp,"a=max-message-size:");return i.length>0?r=parseInt(i[0].substr(19),10):"firefox"===t.browser&&-1!==n&&(r=2147483637),r},s=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===t.browser&&t.version>=76){const{sdpSemantics:e}=this.getConfiguration();"plan-b"===e&&Object.defineProperty(this,"sctp",{get(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(n(arguments[0])){const e=r(arguments[0]),t=i(e),n=o(arguments[0],e);let s;s=0===t&&0===n?Number.POSITIVE_INFINITY:0===t||0===n?Math.max(t,n):Math.min(t,n);const a={};Object.defineProperty(a,"maxMessageSize",{get:()=>s}),this._sctp=a}return s.apply(this,arguments)}}function gt(e){if(!e.RTCPeerConnection||!("createDataChannel"in e.RTCPeerConnection.prototype))return;function t(e,t){const n=e.send;e.send=function(){const r=arguments[0],i=r.length||r.size||r.byteLength;if("open"===e.readyState&&t.sctp&&i>t.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+t.sctp.maxMessageSize+" bytes)");return n.apply(e,arguments)}}const n=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){const e=n.apply(this,arguments);return t(e,this),e},_e(e,"datachannel",e=>(t(e.channel,e.target),e))}function mt(e){if(!e.RTCPeerConnection||"connectionState"in e.RTCPeerConnection.prototype)return;const t=e.RTCPeerConnection.prototype;Object.defineProperty(t,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(e=>{const n=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{const t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;const n=new Event("connectionstatechange",e);t.dispatchEvent(n)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),n.apply(this,arguments)}})}function _t(e){if(!e.RTCPeerConnection)return;const t=Te(e);if("chrome"===t.browser&&t.version>=71)return;if("safari"===t.browser&&t.version>=605)return;const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(e){return e&&e.sdp&&-1!==e.sdp.indexOf("\na=extmap-allow-mixed")&&(e.sdp=e.sdp.split("\n").filter(e=>"a=extmap-allow-mixed"!==e.trim()).join("\n")),n.apply(this,arguments)}}!function({window:e}={},t={shimChrome:!0,shimFirefox:!0,shimEdge:!0,shimSafari:!0}){const n=be,l=Te(e),u={browserDetails:l,commonShim:a,extractVersion:me,disableLog:ve,disableWarnings:ye};switch(l.browser){case"chrome":if(!r||!Ne||!t.shimChrome)return n("Chrome shim is not included in this adapter release."),u;if(null===l.version)return n("Chrome shim can not determine version, not shimming."),u;n("adapter.js shimming chrome."),u.browserShim=r,Ie(e),ke(e),Ne(e),xe(e),Pe(e),Me(e),De(e),Oe(e),je(e),ft(e),mt(e),pt(e),gt(e),_t(e);break;case"firefox":if(!o||!Ye||!t.shimFirefox)return n("Firefox shim is not included in this adapter release."),u;n("adapter.js shimming firefox."),u.browserShim=o,Ve(e),Ye(e),We(e),Qe(e),Ke(e),Je(e),$e(e),Ze(e),Xe(e),et(e),tt(e),ft(e),mt(e),pt(e),gt(e);break;case"edge":if(!i||!ze||!t.shimEdge)return n("MS edge shim is not included in this adapter release."),u;n("adapter.js shimming edge."),u.browserShim=i,qe(e),He(e),ze(e),Ge(e),pt(e),gt(e);break;case"safari":if(!s||!t.shimSafari)return n("Safari shim is not included in this adapter release."),u;n("adapter.js shimming safari."),u.browserShim=s,at(e),ut(e),it(e),nt(e),rt(e),lt(e),ot(e),ct(e),ft(e),pt(e),gt(e),_t(e);break;default:n("Unsupported browser!")}}({window:"undefined"==typeof window?void 0:window});var vt=class extends oe{constructor(e,t={}){return super(e),this._libwebphone=e,this._emit=this._libwebphone._mediaDevicesEvent,this._initProperties(t),this._initInternationalization(t.i18n||{}),this._initInputStreams(),this._initAvailableDevices(),this._initEventBindings(),this._initRenderTargets(),this._emit("created",this),this}startStreams(e=null){return this._startMediaElements(),this._inputActive?this._mediaStreamPromise.then(t=>this._createCallStream(t,e)):this._startInputStreams().then(t=>(this._inputActive=!0,this._emit("streams.started",this,t),this._createCallStream(t,e)))}stopStreams(e=null){e||(e=null);const t=this._startedStreams.findIndex(t=>t.id==e);-1!=t&&this._startedStreams.splice(t,1).forEach(e=>{e.mediaStream&&e.mediaStream.getTracks().forEach(e=>{e.enabled=!1,e.stop()})}),0==this._startedStreams.length&&this.stopAllStreams()}stopAllStreams(){return this._startedStreams.forEach(e=>{e.mediaStream&&e.mediaStream.getTracks().forEach(e=>{e.enabled=!1,e.stop()})}),this._startedStreams=[],this._mediaStreamPromise.then(e=>{e.getTracks().forEach(t=>{this._removeTrack(e,t,!1)}),this._inputActive=!1,this._emit("streams.stopped",this)})}mute(e=null){switch(e){case"audiooutput":return this._muteOutput(e);default:return this._muteInput(e)}}unmute(e=null){switch(e){case"audiooutput":return this._unmuteOutput(e);default:return this._unmuteInput(e)}}toggleMute(e=null){switch(e){case"audiooutput":return this._toggleMuteOutput(e);default:return this._toggleMuteInput(e)}}async startScreenCapture(e={},t=!0){try{this._captureStream=t?await navigator.mediaDevices.getDisplayMedia(e):await navigator.mediaDevices.getUserMedia(e),this._emit("screenCapture.started",this,this._captureStream)}catch(e){this._emit("screenCapture.error",this,e)}if(this._captureStream){const e=this._captureStream.getVideoTracks()[0];e.addEventListener("ended",()=>{const e=this._availableDevices.videoinput.find(e=>!0===e.selected);this.stopScreenCapture(),this.changeDevice("videoinput",e.id)}),this._mediaStreamPromise.then(t=>{this._emit("video.input.changed",this,te.trackParameters(t,e))})}}stopScreenCapture(){const e=this._captureStream.getTracks();e.length>0&&e.forEach(e=>e.stop()),this._captureStream=null,this._emit("screenCapture.stopped",this)}getMediaElement(e){if(this._config[e]&&this._config[e].mediaElement.element)return this._config[e].mediaElement.element}getPreferedDevice(e){return this._availableDevices[e].find(e=>e.selected)}async changeDevice(e,t){const n=this._findAvailableDevice(e,t);if(!n||!n.connected)return Promise.reject();const r=await this._changeStreamMutex.acquire();switch(this._preferDevice(n),e){case"audiooutput":return this._changeOutputDevice(n).then(()=>{r()});default:return this._changeInputDevice(n).then(()=>{r()})}}async refreshAvailableDevices(){return this._shimEnumerateDevices().then(async e=>{const t=await this._changeStreamMutex.acquire(),n=[];return this._forEachAvailableDevice(e=>{"none"!=e.id&&(e.connected=!1)}),this._importInputDevices(e),Object.keys(this._availableDevices).forEach(e=>{const t=this._availableDevices[e].find(e=>e.selected),r=this._availableDevices[e].find(e=>e.connected&&"none"!=e.id),i=t&&r&&t.preference{const r=this._createConstraints(),i={};return e.getTracks().forEach(t=>{const r=te.trackParameters(e,t),i=te.trackKindtoDeviceKind(t.kind),o=this._availableDevices[i].find(e=>e.selected);if(o){const i=o.id!=r.settings.deviceId,s=o.label!=t.label;(i||s)&&(n.push(t.kind),this._removeTrack(e,t))}else"live"!=t.readyState&&(n.push(t.kind),this._removeTrack(e,t))}),n.forEach(e=>{r[e]&&(i[e]=r[e])}),t(),this._startInputStreams(i)})}).then(()=>{this._sortAvailableDevices(),this.updateRenders()})}updateRenders(){this.render(e=>(e.data=this._renderData(e.data),e))}_initInternationalization(e){const t=te.merge({en:{none:"None",screenCapture:"Screen Capture",audiooutput:"Speaker",audioinput:"Microphone",videoinput:"Camera",loading:"Finding media devices..."}},e.resourceBundles||{});this._libwebphone.i18nAddResourceBundles("mediaDevices",t)}_initProperties(e){const t={audiooutput:{enabled:"sinkId"in HTMLMediaElement.prototype,show:!0,preferedDeviceIds:[],mediaElement:{create:!0,elementId:null,element:null,initParameters:{muted:!1}}},audioinput:{enabled:!0,show:!0,constraints:{},preferedDeviceIds:[],mediaElement:{create:!1,elementId:null,element:null,initParameters:{muted:!0}}},videoinput:{enabled:!0,show:!0,constraints:{},preferedDeviceIds:[],screenCapture:!1,mediaElement:{create:!1,elementId:null,element:null,initParameters:{muted:!0}}},renderTargets:[],detectDeviceChanges:!0,manageMediaElements:!0};this._config=te.merge(t,e),this._loaded=!1,this._changeStreamMutex=new fe.Mutex,this._inputActive=!1,this._startedStreams=[],this._availableDevices={},this._captureStream=null,this._deviceKinds().forEach(e=>{!this._config[e].mediaElement.element&&this._config[e].mediaElement.elementId&&(this._config[e].mediaElement.element=document.getElementById(this._config[e].mediaElement.elementId)),!this._config[e].mediaElement.element&&this._config[e].mediaElement.create&&this._config[e].enabled&&(this._config[e].mediaElement.element=document.createElement(this._deviceKindtoTrackKind(e))),this._config[e].mediaElement.element&&(te.mediaElementEvents().forEach(t=>{this._config[e].mediaElement.element.addEventListener(t,n=>{this._emit(this._deviceKindtoEventKind(e)+"."+t,this,this._config[e].mediaElement.element,n)})}),this._config[e].mediaElement.element.preload="none",this._config.manageMediaElements&&Object.keys(this._config[e].mediaElement.initParameters).forEach(t=>{this._config[e].mediaElement.element[t]=this._config[e].mediaElement.initParameters[t]})),this._config[e].mediaElement.element&&this._emit(this._deviceKindtoEventKind(e)+".element",this,this._config[e].mediaElement.element),this._availableDevices[e]=[],this._config[e].show=this._config[e].enabled&&this._config[e].show}),this._availableDevices.videoinput=[this._deviceParameters({deviceId:"none",label:"libwebphone:mediaDevices.none",kind:"videoinput",displayOrder:0}),...this._config.videoinput.screenCapture?[this._deviceParameters({deviceId:"screenCapture",label:"libwebphone:mediaDevices.screenCapture",kind:"videoinput",displayOrder:1})]:[]]}_initInputStreams(){const e={audio:this._config.audioinput.enabled,video:this._config.videoinput.enabled};return e.audio&&this._config.audioinput.preferedDeviceIds.length>0&&(e.audio={},e.audio.deviceId=this._config.audioinput.preferedDeviceIds),e.video&&this._config.audioinput.preferedDeviceIds.length>0&&(e.video={},e.video.deviceId=this._config.videoinput.preferedDeviceIds),this._mediaStreamPromise=this._shimGetUserMedia(e).then(e=>(this._updateMediaElements(e),e)).catch(t=>{if(this._emit("getUserMedia.error",this,t),e.video&&e.audio)return delete e.video,this._shimGetUserMedia(e).then(e=>(this._updateMediaElements(e),e))}),this._mediaStreamPromise}_initAvailableDevices(){this._mediaStreamPromise.then(e=>{this._shimEnumerateDevices().then(t=>{this._importInputDevices(t),e.getTracks().forEach(t=>{this._addTrack(e,t),this._removeTrack(e,t,!1)}),this._sortAvailableDevices(),Object.keys(this._availableDevices).forEach(e=>{if(!this._availableDevices[e].find(e=>e.selected)){const t=this._availableDevices[e][0];t&&(t.selected=!0)}}),this._loaded=!0,this.updateRenders()})})}_initEventBindings(){this._libwebphone.on("call.terminated",(e,t)=>{this.stopStreams(t.getId())}),this._config.detectDeviceChanges&&(navigator.mediaDevices.ondevicechange=()=>{this.refreshAvailableDevices()}),this._libwebphone.on("audioContext.preview.loopback.started",()=>{this.startStreams("loopbackPreview")}),this._libwebphone.on("audioContext.preview.loopback.stopped",()=>{this.stopStreams("loopbackPreview")}),this._libwebphone.on("audioContext.started",()=>{this._startMediaElements()}),this._libwebphone.on("mediaDevices.streams.started",()=>{this.updateRenders()}),this._libwebphone.on("mediaDevices.streams.stop",()=>{this.updateRenders()}),this._libwebphone.on("mediaDevices.audio.output.changed",()=>{this.updateRenders()}),this._libwebphone.on("mediaDevices.audio.input.changed",()=>{this.updateRenders()}),this._libwebphone.on("mediaDevices.video.input.changed",()=>{this.updateRenders()}),this._libwebphone.on("mediaDevices.getUserMedia.error",()=>{this.updateRenders()})}_initRenderTargets(){this._config.renderTargets.map(e=>this.renderAddTarget(e))}_renderDefaultConfig(){return{template:this._renderDefaultTemplate(),i18n:{none:"libwebphone:mediaDevices.none",screenCapture:"libwebphone:mediaDevices.screenCapture",audiooutput:"libwebphone:mediaDevices.audiooutput",audioinput:"libwebphone:mediaDevices.audioinput",videoinput:"libwebphone:mediaDevices.videoinput",loading:"libwebphone:mediaDevices.loading"},by_id:{audiooutput:{events:{onchange:e=>{const t=e.srcElement;if(t.options){const e=t.options[t.selectedIndex].value;this.changeDevice("audiooutput",e)}}}},audioinput:{events:{onchange:e=>{const t=e.srcElement;if(t.options){const e=t.options[t.selectedIndex].value;this.changeDevice("audioinput",e)}}}},videoinput:{events:{onchange:e=>{const t=e.srcElement;if(t.options){const e=t.options[t.selectedIndex].value;this.changeDevice("videoinput",e)}}}}},data:te.merge({},this._config,this._renderData())}}_renderDefaultTemplate(){return'\n
\n {{#data.loaded}}\n {{#data.audiooutput.show}}\n
\n \n \n
\n {{/data.audiooutput.show}}\n\n {{#data.audioinput.show}}\n
\n \n \n
\n {{/data.audioinput.show}}\n\n {{#data.videoinput.show}} \n
\n \n \n
\n {{/data.videoinput.show}}\n {{/data.loaded}}\n\n {{^data.loaded}}\n
\n
\n
\n
\n
\n
\n
{{i18n.loading}}
\n
\n {{/data.loaded}}\n
\n '}_renderData(e={}){return e.loaded=this._loaded,Object.keys(this._availableDevices).forEach(t=>{const n=this._availableDevices[t].slice(0);n.sort((e,t)=>(e.displayOrder||0)-(t.displayOrder||0)),e[t]||(e[t]={}),e[t].devices=n}),e}async _changeOutputDevice(e){return this._config.audiooutput.mediaElement.element?this._config.audiooutput.mediaElement.element.setSinkId(e.id).then(()=>{this._availableDevices[e.deviceKind].forEach(t=>{t.id==e.id?t.selected=!0:t.selected=!1}),this._config.audiooutput.enabled&&this._emit("audio.output.changed",this,e)}):(this._availableDevices[e.deviceKind].forEach(t=>{t.id==e.id?t.selected=!0:t.selected=!1}),this._config.audiooutput.enabled&&this._emit("audio.output.changed",this,e),Promise.resolve())}_muteInput(e=null){return this._mediaStreamPromise.then(t=>{const n=this._deviceKindtoTrackKind(e);return t.getTracks().forEach(e=>{if(!n||e.kind==n){const n=te.trackParameters(t,e);e.enabled=!1,this._emit(e.kind+".input.muted",this,n)}}),t})}_unmuteInput(e=null){return this._mediaStreamPromise.then(t=>{const n=this._deviceKindtoTrackKind(e);return t.getTracks().forEach(e=>{if(!n||e.kind==n){const n=te.trackParameters(t,e);e.enabled=!0,this._emit(e.kind+".input.unmuted",this,n)}}),t})}_toggleMuteInput(e=null){return this._mediaStreamPromise.then(t=>{const n=this._deviceKindtoTrackKind(e);return t.getTracks().forEach(e=>{if(!n||e.kind==n){const n=te.trackParameters(t,e);e.enabled=!e.enabled,e.enabled?this._emit(e.kind+".input.unmuted",this,n):this._emit(e.kind+".input.muted",this,n)}}),t})}_changeInputDevice(e){return this._mediaStreamPromise.then(t=>{let n=[];const r=e.trackKind,i=this._createConstraints(e)[r],o=t.getTracks().find(t=>t.kind==e.trackKind),s=te.trackParameters(t,o);if("video"===r&&"screenCapture"===e.id)return this.startScreenCapture();if(this._captureStream&&this.stopScreenCapture(),o&&(n=o.enabled?[]:[o.kind],this._removeTrack(t,o)),"video"===r&&"none"===e.id)return this._startedStreams.forEach(e=>{e.mediaStream&&e.mediaStream.getVideoTracks().forEach(e=>{e.enabled=!1})}),this._availableDevices[e.deviceKind].forEach(e=>{"none"===e.id?e.selected=!0:e.selected=!1}),void this._emit(r+".input.changed",this,null,s);if(i){const e={};return e[r]=i,this._startInputStreams(e,n).then(()=>{const e=t.getTracks().find(e=>e.kind==r&&"live"==e.readyState);0==this._startedStreams.length&&this.stopAllStreams(),e&&this._emit(r+".input.changed",this,te.trackParameters(t,e),s)})}})}_startInputStreams(e=null){return e||(e=this._createConstraints()),this._mediaStreamPromise.then(t=>(t.getTracks().forEach(n=>{"live"==n.readyState?delete e[n.kind]:this._removeTrack(t,n)}),0==Object.keys(e).length?Promise.resolve(t):this._shimGetUserMedia(e).then(e=>(e.getTracks().forEach(e=>{this._addTrack(t,e)}),t)).then(e=>(this._updateMediaElements(e),e)).catch(e=>{this._emit("getUserMedia.error",this,e)})))}_updateMediaElements(e){te.trackKinds().forEach(t=>{const n=te.trackKindtoDeviceKind(t),r=this._config[n].mediaElement.element;e.getTracks().find(e=>e.kind==t)?(!r||r.srcObject&&r.srcObject.id==e.id||(r.srcObject=e),this._config.manageMediaElements&&r&&r.paused&&r.play().catch(()=>{})):(this._config.manageMediaElements&&r&&!r.paused&&r.pause(),r&&(r.srcObject=null))})}_createConstraints(...e){let t=this._availableDevices.audioinput.find(e=>e.selected&&e.connected),n=this._availableDevices.videoinput.find(e=>e.selected&&e.connected);const r={audio:this._config.audioinput.constraints||{},video:this._config.videoinput.constraints||{}};if(e.forEach(e=>{switch(e.deviceKind){case"audioinput":t=e;break;case"videoinput":n=e}}),t){const e=t.constraints||{};e.deviceId={},e.deviceId.exact=t.id,r.audio=te.merge(r.audio,e)}if(n){const e=n.constraints||{};e.deviceId={},e.deviceId.exact=n.id,r.video=te.merge(r.video,e)}return(!this._config.audioinput.enabled||r.audio&&r.audio.deviceId&&"none"==r.audio.deviceId.exact)&&delete r.audio,(!this._config.videoinput.enabled||r.video&&r.video.deviceId&&"none"==r.video.deviceId.exact)&&delete r.video,r}_preferDevice(e,t={sort:!0,updateConfig:!0}){const n=this._availableDevices[e.deviceKind].reduce((t,n)=>(n.preference||0)>t&&n.id!=e.id?n.preference:t,0);if(e.preference=n+1,t.sort&&this._sortAvailableDevices(),t.updateConfig&&"none"!=e.id){const t=e.deviceKind,n=this._config[t].preferedDeviceIds.findIndex(n=>{const r=this._findAvailableDevice(t,n);return n!=e.id&&r&&r.connected}),r=this._config[t].preferedDeviceIds.indexOf(e.id);r>-1&&this._config[t].preferedDeviceIds.splice(r,1),-1==n?this._config[t].preferedDeviceIds.push(e.id):this._config[t].preferedDeviceIds.splice(n,0,e.id)}}_startMediaElements(){this._config.manageMediaElements&&this._deviceKinds().forEach(e=>{this._config[e].mediaElement.element&&this._config[e].mediaElement.element.paused&&this._config[e].mediaElement.element.play()})}_createCallStream(e,t){const n=new MediaStream;return e.getTracks().forEach(e=>{n.addTrack(e.clone())}),t?this._startedStreams.find(e=>e.id==t)||this._startedStreams.push({id:t,mediaStream:n}):this._startedStreams.push({id:null,mediaStream:n}),n}_addTrack(e,t){const n=te.trackParameters(e,t);e.addTrack(t),this._availableDevices[n.deviceKind].forEach(e=>{e.id==n.settings.deviceId?Object.assign(e,n,{selected:!0}):e.selected=!1}),this._emit(t.kind+".input.started",this,n),t.enabled?this._emit(t.kind+".input.unmuted",this,n):this._emit(t.kind+".input.muted",this,n)}_removeTrack(e,t,n=!0){const r=te.trackParameters(e,t);t.enabled=!1,t.stop(),e.removeTrack(t),n&&this._availableDevices[r.deviceKind].forEach(e=>{e.id==r.settings.deviceId?Object.assign(e,r,{selected:!1}):"none"==e.id?e.selected=!0:e.selected=!1}),this._emit(t.kind+".input.stopped",this,r)}_findAvailableDevice(e,t){return this._availableDevices[e].find(e=>e.id==t)}_forEachAvailableDevice(e){Object.keys(this._availableDevices).forEach(t=>{this._availableDevices[t].forEach(e)})}_sortAvailableDevices(){Object.keys(this._availableDevices).forEach(e=>{this._availableDevices[e].sort((e,t)=>(t.preference||0)-(e.preference||0))})}_importInputDevices(e){e.forEach(e=>{if(!e.deviceId||0===e.deviceId.length)return;const t=this._deviceParameters(e),n=this._findAvailableDevice(e.kind,e.deviceId);n?Object.assign(n,t):(this._availableDevices[e.kind]||(this._availableDevices[e.kind]=[]),t.displayOrder=this._availableDevices[e.kind].length,t.preference=(this._config[e.kind].preferedDeviceIds||[]).indexOf(t.id)+1,this._availableDevices[e.kind].push(t))})}_deviceParameters(e){return{id:e.deviceId,label:e.label,deviceKind:e.kind,name:this._getDeviceName(e),trackKind:this._deviceKindtoTrackKind(e.kind),connected:!0}}_getDeviceName(e){const t=e.kind,n="libwebphone:mediaDevices."+t;return e.label||n+" "+(this._availableDevices[t].length+1)}_deviceKindtoTrackKind(e){switch(e){case"audiooutput":case"audioinput":return"audio";case"videoinput":return"video"}}_deviceKindtoEventKind(e){switch(e){case"audiooutput":return"audio.output";case"audioinput":return"audio.input";case"videoinput":return"video.input"}}_deviceKinds(){return["audiooutput","audioinput","videoinput"]}_shimEnumerateDevices(){return navigator.mediaDevices.enumerateDevices()}_shimGetUserMedia(e){return navigator.mediaDevices.getUserMedia(e)}},yt=class extends oe{constructor(e,t={}){return super(e),this._libwebphone=e,this._emit=this._libwebphone._videoCanvasEvent,this._initProperties(t),this._initInternationalization(t.i18n||{}),this._initEventBindings(),this._initRenderTargets(),this._emit("created",this),this}enableImage(e){const t=this._configGetImage(e),n=this._canvasGetImage(this._canvasRender,e);return t&&(t.enabled=!0),n&&(n.enabled=!0),n}disableImage(e){const t=this._configGetImage(e),n=this._canvasGetImage(this._canvasRender,e);return t&&(t.enabled=!1),n&&(n.enabled=!1),n}toggleImage(e){return this.isImageEnabled(e)?this.disableImage(e):this.enableImage(e)}isImageEnabled(e){const t=this._configGetImage(e);return t&&t.enabled||!1}rescaleImage(e,t=null){if(t){const n=this._configGetImage(e);n&&(n.rescale=t)}const n=this._canvasGetImage(this._canvasRender,e);return this._rescaleCanvasImage(this._canvasRender,n,t)}positionImage(e,t=null,n=null,r=null){const i=this._configGetImage(e),o=this._canvasGetImage(this._canvasRender,e),s=this._positionCanvasImage(this._canvasRender,o,t,n,r);return i&&(s?i.position=s.position:(i.position||(i.position={mode:"center"}),t&&(i.position.mode=t),n&&(i.position.x=n),r&&(i.position.y=r))),s}changeFramesPerSecond(e){this._config.canvasLoop.framesPerSecond=e;const t=this._canvasRender;t&&(t.timer&&(clearTimeout(t.timer),t.timer=null),t.framesPerSecond=this._config.canvasLoop.framesPerSecond,t.timer=setInterval(()=>{this._renderCanvas(t)},1e3/t.framesPerSecond))}updateRenders(){this.render(e=>(e.data=this._renderData(e.data),e))}_initInternationalization(e){const t=te.merge({en:{piprescale:"Preview Rescale",pip:"Preview PIP",framespersecond:"Canvas Frames per Second",pipenable:"Enable",pipdisable:"Disable",fullscreen:"Full Screen",startfullscreen:"Start",stopfullscreen:"Exit",screenshare:"Screen Share",startscreenshare:"Start",stopscreenshare:"Stop"}},e.resourceBundles||{});this._libwebphone.i18nAddResourceBundles("videoCanvas",t)}_initProperties(e){"string"==typeof e.canvas&&(e.canvas={root:{elementId:e.canvas}});const t={renderTargets:[],canvas:{root:{elementId:null,element:null,defaultWidth:640,defaultHeight:480}},fullscreen:{show:!1,supported:!!(document.fullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled||document.webkitSupportsFullscreen||document.webkitFullscreenEnabled)},localVideo:{name:"localVideo",enabled:!0,show:!0,rescale:.25,averageRGB:{threshold:1},position:{mode:"bottom-right"}},remoteVideo:{name:"remoteVideo",enabled:!0,show:!0,rescale:1,averageRGB:{threshold:1},position:{mode:"center"}},canvasLoop:{show:!0,framesPerSecond:15},strings:[{name:"dialpadTarget"},{name:"remoteIdentity"},{name:"callTimer"}],images:[{name:"disconnected",enabled:!0,rescale:.5,position:{mode:"center"},source:"data:image/svg+xml;base64,PHN2ZyBpZD0idGVzdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNzAuNTQ2N21tIiBoZWlnaHQ9IjcwLjU0NjdtbSIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgo8cGF0aCBpZD0iU2VsZWN0aW9uIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNIDEwNC4wMCwxMjUuMDAmIzEwOyAgICAgICAgICAgQyAxMDQuMDAsMTI1LjAwIDExMS40Miw4NS4wMCAxMTEuNDIsODUuMDAmIzEwOyAgICAgICAgICAgICAxMTMuMjQsNzYuNzkgMTE5LjM5LDUzLjkzIDExOC45MCw0Ny4wMCYjMTA7ICAgICAgICAgICAgIDExNy40OSwyNi44MiA5MC45OCwyNS4wNyA4My4yMywzOC4wMiYjMTA7ICAgICAgICAgICAgIDc5LjUzLDQ0LjE5IDgxLjA1LDU0LjI2IDgyLjQwLDYxLjAwJiMxMDsgICAgICAgICAgICAgODIuNDAsNjEuMDAgOTIuMjUsMTA2LjAwIDkyLjI1LDEwNi4wMCYjMTA7ICAgICAgICAgICAgIDkyLjgwLDEwOS4xOSA5NC41OCwxMjIuNDEgOTYuNTksMTIzLjk4JiMxMDsgICAgICAgICAgICAgOTguMjIsMTI1LjI0IDEwMS45OCwxMjQuOTkgMTA0LjAwLDEyNS4wMCBaJiMxMDsgICAgICAgICAgIE0gNzQuMDAsNTEuMDAmIzEwOyAgICAgICAgICAgQyA3NC4wMCw0MS4wMSA3My40Nyw0Mi43NCA3Ni4wMCwzMy4wMCYjMTA7ICAgICAgICAgICAgIDU3LjY3LDMzLjQwIDMyLjQ0LDQ2LjUyIDE4LjAwLDU3LjM3JiMxMDsgICAgICAgICAgICAgMTQuNzksNTkuNzkgNS4yMiw2Ni41MyA2LjM0LDcxLjAwJiMxMDsgICAgICAgICAgICAgNi44MSw3Mi44OCA5LjYxLDc1LjYzIDExLjAwLDc2Ljk4JiMxMDsgICAgICAgICAgICAgMTIuMjQsNzguMTggMTQuMzEsODAuMjQgMTYuMDAsODAuNjYmIzEwOyAgICAgICAgICAgICAxOS40Myw4MS41MyAyOS43MSw3MS43OSAzMy4wMCw2OS40MyYjMTA7ICAgICAgICAgICAgIDQ1LjIxLDYwLjY3IDU5LjIxLDUzLjk4IDc0LjAwLDUxLjAwIFomIzEwOyAgICAgICAgICAgTSAxMjQuMDAsMzMuMDAmIzEwOyAgICAgICAgICAgQyAxMjUuMzIsNDIuMzkgMTI2LjgyLDQwLjg0IDEyNS4wMCw1MS4wMCYjMTA7ICAgICAgICAgICAgIDEzOS43MCw1Ni41MCAxNDcuMDUsNTcuOTEgMTYxLjAwLDY3LjA4JiMxMDsgICAgICAgICAgICAgMTY0LjgzLDY5LjYwIDE2OS40OCw3My4zMCAxNzMuMDAsNzYuMjgmIzEwOyAgICAgICAgICAgICAxNzQuNDcsNzcuNTMgMTc3LjE5LDgwLjIyIDE3OS4wMCw4MC42NiYjMTA7ICAgICAgICAgICAgIDE4Mi41Miw4MS41MyAxODkuNzUsNzQuMDYgMTkwLjgzLDcxLjAxJiMxMDsgICAgICAgICAgICAgMTkyLjQzLDY2LjUxIDE4MS4zNCw1OC44MyAxNzguMDAsNTYuNDMmIzEwOyAgICAgICAgICAgICAxNjIuODIsNDUuNTEgMTQyLjY3LDM1LjYzIDEyNC4wMCwzMy4wMCBaJiMxMDsgICAgICAgICAgIE0gMzIuMDAsOTguMDAmIzEwOyAgICAgICAgICAgQyAzMi4wMCw5OC4wMCA0NC4wMCwxMDkuMDAgNDQuMDAsMTA5LjAwJiMxMDsgICAgICAgICAgICAgNTIuOTIsMTAyLjY0IDU1Ljk5LDk4LjM5IDY3LjAwLDkzLjMxJiMxMDsgICAgICAgICAgICAgNjkuNjksOTIuMDcgNzkuODMsODguOTYgODAuOTcsODcuMzAmIzEwOyAgICAgICAgICAgICA4Mi4wNCw4NS43MyA4MC44OCw3MS40NCA3NC45NCw3MS42MSYjMTA7ICAgICAgICAgICAgIDY2LjQwLDcxLjg1IDQ3LjgyLDgyLjM4IDQxLjAwLDg3LjY2JiMxMDsgICAgICAgICAgICAgMzYuODcsOTAuODYgMzMuNTcsOTIuOTAgMzIuMDAsOTguMDAgWiYjMTA7ICAgICAgICAgICBNIDEyMS4wMCw3MS4wMCYjMTA7ICAgICAgICAgICBDIDEyMS4wMCw3MS4wMCAxMTcuMDAsODkuMDAgMTE3LjAwLDg5LjAwJiMxMDsgICAgICAgICAgICAgMTI2LjUzLDkwLjk0IDEzNC4wNSw5NC44NiAxNDIuMDAsMTAwLjM1JiMxMDsgICAgICAgICAgICAgMTQ0LjQ4LDEwMi4wNiAxNTAuNTcsMTA3LjgxIDE1My4wMCwxMDcuODAmIzEwOyAgICAgICAgICAgICAxNTYuMjMsMTA3LjgwIDE2My41NSw5OS40NSAxNjYuMDAsOTcuMDAmIzEwOyAgICAgICAgICAgICAxNTcuMTQsODQuODkgMTM1LjU4LDc0LjMyIDEyMS4wMCw3MS4wMCBaJiMxMDsgICAgICAgICAgIE0gNTguMDAsMTI0LjAwJiMxMDsgICAgICAgICAgIEMgNjAuODMsMTI2LjAyIDY3Ljk0LDEzMy4xNCA3MC4wMCwxMzMuNjYmIzEwOyAgICAgICAgICAgICA3Mi44NSwxMzQuMzkgNzUuNzYsMTMxLjM4IDc4LjAwLDEyOS45MSYjMTA7ICAgICAgICAgICAgIDgyLjA3LDEyNy4yNCA4NS4yMywxMjUuODcgOTAuMDAsMTI1LjAwJiMxMDsgICAgICAgICAgICAgOTAuMDAsMTI1LjAwIDg3LjAwLDEwNy4wMCA4Ny4wMCwxMDcuMDAmIzEwOyAgICAgICAgICAgICA3Ny40NywxMDguOTIgNjIuNTAsMTE0Ljk0IDU4LjAwLDEyNC4wMCBaJiMxMDsgICAgICAgICAgIE0gMTEyLjAwLDEwOC4wMCYjMTA7ICAgICAgICAgICBDIDExMi4wMCwxMDguMDAgMTA5LjAwLDEyNS4wMCAxMDkuMDAsMTI1LjAwJiMxMDsgICAgICAgICAgICAgMTEzLjU2LDEyNi41OSAxMTUuOTEsMTI3LjQ5IDEyMC4wMCwxMzAuMjImIzEwOyAgICAgICAgICAgICAxMjEuODUsMTMxLjQ1IDEyNC43MCwxMzMuOTUgMTI3LjAwLDEzMy44NCYjMTA7ICAgICAgICAgICAgIDEyOS45NywxMzMuNzEgMTM2Ljk1LDEyNi44MSAxMzcuNjYsMTI0LjAwJiMxMDsgICAgICAgICAgICAgMTM4LjA2LDEyMi40MiAxMzcuNTYsMTIxLjQyIDEzNi42MywxMjAuMTcmIzEwOyAgICAgICAgICAgICAxMzIuMzYsMTE0LjQ0IDExOS4xMiwxMDguNjUgMTEyLjAwLDEwOC4wMCBaJiMxMDsgICAgICAgICAgIE0gOTYuMDAsMTM1LjQ3JiMxMDsgICAgICAgICAgIEMgOTIuMDQsMTM2LjQ0IDg5LjMyLDEzNy4zNSA4Ni4zMywxNDAuMzMmIzEwOyAgICAgICAgICAgICA3My4zMiwxNTMuMjYgODUuMjMsMTc0Ljc0IDEwMy4wMCwxNzEuNTMmIzEwOyAgICAgICAgICAgICAxMTYuMTYsMTY5LjE1IDEyMy4yOSwxNTQuMjIgMTE1LjM1LDE0My4wMiYjMTA7ICAgICAgICAgICAgIDExMC42NiwxMzYuNDAgMTAzLjY5LDEzNC40MSA5Ni4wMCwxMzUuNDcgWiIvPgo8L3N2Zz4",predicate:()=>this._libwebphone.getUserAgent()&&!this._libwebphone.getUserAgent().isReady()},{name:"idle",enabled:!0,rescale:.9,position:{mode:"center"},source:"data:image/svg+xml;base64,PHN2ZyBpZD0idGVzdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHg9IjAiIHk9IjAiIHdpZHRoPSIxNzUiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCAxNzUgNDkiIGNsYXNzPSJsb2dvIj4KPHBhdGggY2xhc3M9ImxvZ29fX3N5bWJvbCIgc3R5bGU9ImZpbGw6ICNmZjU5MzM7IiBkPSJNNDIuMSAwLjZjLTAuOC0wLjgtMi0wLjgtMi43IDAgLTAuOCAwLjgtMC44IDIgMCAyLjggMC44IDAuOCAyIDAuOCAyLjcgMEM0Mi45IDIuNiA0Mi45IDEuMyA0Mi4xIDAuNnpNMTEuNyAzMy45bDIyLTIyLjFjLTAuNC0wLjUtMC44LTEtMS4zLTEuNSAtMC41LTAuNS0wLjktMC45LTEuNC0xLjNMOSAzMS4yYy0wLjggMC44LTAuOCAyIDAgMi44QzkuOCAzNC43IDExIDM0LjcgMTEuNyAzMy45ek0zOCA3LjVjMC44LTAuOCAwLjgtMiAwLTIuOCAtMC44LTAuOC0yLTAuOC0yLjcgMGwtMiAyQzI2IDAuNyAxNS4yIDEuMiA4LjQgOGMtNS4xIDUuMS02LjYgMTIuNC00LjYgMTguOGwtMy4zIDMuM2MtMC44IDAuOC0wLjggMiAwIDIuOCAwLjggMC44IDIgMC44IDIuNyAwbDE1LjktMTZjMC44LTAuOCAwLjgtMiAwLTIuOCAtMC44LTAuOC0yLTAuOC0yLjcgMEw4IDIyLjdjLTAuOS00LjggMC41LTkuOSA0LjItMTMuNSA1LjktNiAxNS41LTYgMjEuNSAwIDUuOSA2IDUuOSAxNS42IDAgMjEuNiAtMy4xIDMuMS03LjIgNC42LTExLjMgNC41TDE4IDM5LjZjNS45IDEuMiAxMi4yLTAuNSAxNi44LTUuMSA2LjgtNi44IDcuMi0xNy43IDEuMy0yNUwzOCA3LjV6TTIzLjQgMjguOWMtMC44LTAuOC0yLTAuOC0yLjcgMEwxMCAzOS42Yy0wLjggMC44LTAuOCAyIDAgMi44IDAuOCAwLjggMiAwLjggMi43IDBsMTAuNy0xMC43QzI0LjIgMzAuOSAyNC4yIDI5LjcgMjMuNCAyOC45ek0yNC44IDI0LjhjLTAuOCAwLjgtMC44IDIgMCAyLjggMC44IDAuOCAyIDAuOCAyLjcgMCAwLjgtMC44IDAuOC0yIDAtMi44QzI2LjggMjQgMjUuNiAyNCAyNC44IDI0Ljh6TTIzLjMgMTIuN2MwLjgtMC44IDAuOC0yIDAtMi44IC0wLjgtMC44LTItMC44LTIuNyAwIC0wLjggMC44LTAuOCAyIDAgMi44QzIxLjMgMTMuNSAyMi41IDEzLjUgMjMuMyAxMi43eiIvPgo8cGF0aCBjbGFzcz0ibG9nb19fd29yZG1hcmsiIHN0eWxlPSJmaWxsOiAjRkZGRkZGOyIgZD0iTTc5LjQgMTYuNmwzLjktMy45YzAuOC0wLjggMC44LTIgMC0yLjcgLTAuNC0wLjQtMC45LTAuNi0xLjQtMC42IC0wLjMgMC0wLjcgMC4xLTEgMC4zbC0wLjEgMC4xYy0wLjEgMC0wLjEgMC4xLTAuMiAwLjFMNzkuNSAxMWwtMC4xIDAuMUw3MS40IDE5Yy0wLjggMC45LTEuMyAxLjctMS43IDIuNiAtMC40IDAuOS0wLjcgMi0wLjcgMy4xIDAgMC4xIDAgMC4yIDAgMC4zIDAgMC4xIDAgMC4yIDAgMC4zIDAgNC45IDMuOSA4LjkgOC44IDguOSA0LjkgMCA4LjgtNCA4LjgtOC45Qzg2LjcgMjAuOSA4My41IDE3LjMgNzkuNCAxNi42ek03Ny45IDMwLjNjLTIuNyAwLTUtMi4yLTUtNSAwLTIuNyAyLjItNSA1LTUgMi43IDAgNSAyLjIgNSA1QzgyLjggMjggODAuNiAzMC4zIDc3LjkgMzAuM3pNOTkuNyA5LjNDOTIuOSA5LjMgODggMTQuOSA4OCAyMS43YzAgNi44IDQuOSAxMi40IDExLjcgMTIuNCA2LjggMCAxMS43LTUuNSAxMS43LTEyLjRTMTA2LjUgOS4zIDk5LjcgOS4zek05OS43IDMwLjJjLTQuNyAwLTcuOS0zLjgtNy45LTguNSAwLTQuNyAzLjItOC41IDcuOS04LjUgNC43IDAgNy45IDMuOCA3LjkgOC41QzEwNy42IDI2LjQgMTA0LjQgMzAuMiA5OS43IDMwLjJ6TTEyNC40IDkuM2MtNi44IDAtMTEuNyA1LjYtMTEuNyAxMi40IDAgNi44IDQuOSAxMi40IDExLjcgMTIuNCA2LjggMCAxMS43LTUuNSAxMS43LTEyLjRTMTMxLjIgOS4zIDEyNC40IDkuM3pNMTI0LjQgMzAuMmMtNC43IDAtNy45LTMuOC03LjktOC41IDAtNC43IDMuMi04LjUgNy45LTguNSA0LjcgMCA3LjkgMy44IDcuOSA4LjVDMTMyLjMgMjYuNCAxMjkuMSAzMC4yIDEyNC40IDMwLjJ6TTUzLjEgMzIuN2MwLjIgMC42IDAuOCAxLjQgMS45IDEuNCAwIDAgMTEuMSAwIDExLjEgMCAxLjEgMCAxLjktMC45IDEuOS0xLjkgMC0xLjEtMC45LTItMS45LTIgMCAwLTkuOCAwLTkuOCAwIC0wLjQtMy41IDIuMi01LjUgNC40LTUuN2wwLjktMC4xYzMuNy0wLjUgNi40LTMuNyA2LjQtNy41IDAtNC4yLTMuNC03LjYtNy42LTcuNiAtMy41IDAtNi40IDIuNC03LjMgNS42bDAgMGMwIDAuMS0wLjEgMC4zLTAuMSAwLjUgMCAxLjEgMC45IDEuOSAxLjkgMS45IDAuOSAwIDEuNy0wLjYgMS45LTEuNWwwLTAuMWMwLjUtMS41IDEuOS0yLjYgMy41LTIuNiAyIDAgMy43IDEuNyAzLjcgMy43IDAgMS45LTEuMyAzLjQtMy4xIDMuNmwtMC4zIDBjLTQuNyAwLjMtOC4zIDQuMy04LjMgOC42QzUyLjYgMjkuMiA1Mi41IDMwLjkgNTMuMSAzMi43eiIvPgo8cGF0aCBjbGFzcz0ibG9nb19fd29yZG1hcmsiIHN0eWxlPSJmaWxsOiAjRkZGRkZGOyIgZD0iTTE1My42IDkuM2MtMS4xIDAtMS45IDAuOS0xLjkgMS45djUuNWgtOS45di01LjVjMC0xLjEtMC45LTEuOS0xLjktMS45IC0xLjEgMC0xLjkgMC45LTEuOSAxLjl2MjAuOWMwIDEuMSAwLjkgMS45IDEuOSAxLjkgMS4xIDAgMS45LTAuOSAxLjktMS45VjIwLjZoOS45djExLjVjMCAxLjEgMC45IDEuOSAxLjkgMS45czEuOS0wLjkgMS45LTEuOVYxMS4zQzE1NS41IDEwLjIgMTU0LjYgOS4zIDE1My42IDkuM3pNMTczLjEgMzAuMmgtOUwxNzQuMiAyMGMwLjgtMC44IDAuOC0yIDAtMi43IC0wLjQtMC40LTAuOS0wLjYtMS40LTAuNiAwIDAgMCAwIDAgMGgtMTMuNWMtMS4xIDAtMS45IDAuOS0xLjkgMiAwIDEuMSAwLjkgMS45IDEuOSAxLjloOC45TDE1OCAzMC44Yy0wLjggMC44LTAuOCAyIDAgMi43IDAuMyAwLjMgMC43IDAuNSAxLjEgMC41IDAuMSAwIDAuMSAwIDAuMiAwIDAgMCAwIDAgMCAwaDEzLjdjMS4xIDAgMS45LTAuOSAxLjktMS45QzE3NSAzMS4xIDE3NC4xIDMwLjIgMTczLjEgMzAuMnoiLz4KPC9zdmc+",predicate:()=>!this._call||!this._call.hasSession()},{name:"ringing",enabled:!0,rescale:.5,position:{mode:"center"},source:"data:image/svg+xml;base64,PHN2ZyBpZD0ic3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBkPSJNMTEuNSA2TDE2IDEuNSAxNC41IDAgMTAgNC41VjFIOHY3aDdWNnoiLz48cGF0aCBkPSJNMTIuOSAxMi40Yy0uMS0uMS0uMy0uMi0uMy0uMmwtMi45LTEtMS44IDEuMWMtLjEuMS0xLjUtLjItMi42LTEuNGwtLjMtLjNDMy43IDkuNCAzLjQgOC4yIDMuNSA4bDEuMy0xLjctMS0yLjlzLS4xLS4zLS4yLS4zYy0uMS0uMS0xLjUtLjMtMi4yLjRDLS41IDUuNC0xIDcuNCAzLjYgMTIuMWwuMy4zYzQuNyA0LjYgNi43IDQuMSA4LjYgMi4yLjctLjcuNS0yLjEuNC0yLjJ6Ii8+PC9zdmc+",predicate:()=>this._call&&this._call.isRinging()},{name:"muted",enabled:!0,rescale:.5,position:{mode:"center"},source:"data:image/svg+xml;base64,PHN2ZyBpZD0ic3ZnIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyLDZsNC0ydjhsLTQtMnYyYzAsMC42LTAuNCwxLTEsMUg0bC0zLDNsLTEtMUwxNSwwbDEsMWwtNCw0VjZ6IE0xMCwzSDFDMC40LDMsMCwzLjUsMCw0djgmIzEwOyYjOTtjMCwwLjMsMC4xLDAuNSwwLjMsMC43TDEwLDN6Ii8+Cjwvc3ZnPg==",predicate:()=>this._call&&this._call.isMuted()},{name:"held",enabled:!0,rescale:.5,position:{mode:"center"},source:"data:image/svg+xml;base64,PHN2ZyBpZD0ic3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBkPSJNNSA1aDJ2Nkg1VjV6bTQgMGgydjZIOVY1eiIvPjxwYXRoIGQ9Ik04IDE2YzQuNCAwIDgtMy42IDgtOHMtMy42LTgtOC04LTggMy42LTggOCAzLjYgOCA4IDh6TTggMmMzLjMgMCA2IDIuNyA2IDZzLTIuNyA2LTYgNi02LTIuNy02LTYgMi43LTYgNi02eiIvPjwvc3ZnPg==",predicate:()=>this._call&&this._call.isOnHold()},{name:"defaultAvatar",enabled:!0,rescale:.1,position:{mode:"center"},source:"data:image/svg+xml;base64,PHN2ZyBpZD0ic3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBkPSJNMTIuNiA3Yy0xIDEuNS0yLjcgMi41LTQuNiAyLjVTNC40IDguNSAzLjQgN0MyLjkgNy4xIDAgOCAwIDEzYzAgMi43IDQgMyA4IDNzOC0uMyA4LTNjMC01LTIuOS01LjktMy40LTZ6Ii8+PGNpcmNsZSBjeD0iOCIgY3k9IjQiIHI9IjQiLz48L3N2Zz4=",predicate:()=>this._call&&this._call.hasSession(),arc:!0}]};this._config=te.merge(t,e),this._canvasRender=null}_initEventBindings(){this._libwebphone.on("videoCanvas.render.ready",()=>{this._createCanvasRender(this._config.canvas)}),this._libwebphone.on("call.promoted",(e,t)=>{this._callPromoted(t)}),this._libwebphone.on("call.primary.timeupdate",(e,t,n,r,i)=>{this._callTimeupdate(t,i)}),this._libwebphone.on("call.primary.remote.video.playing",(e,t,n)=>{this._setRemoteElement(n)}),this._libwebphone.on("call.primary.remote.video.timeupdate",(e,t,n)=>{this._setRemoteElement(n)}),this._libwebphone.on("call.primary.local.video.playing",(e,t,n)=>{this._setLocalElement(n)}),this._libwebphone.on("call.primary.local.video.timeupdate",(e,t,n)=>{this._setLocalElement(n)}),this._libwebphone.on("videoCanvas.localVideo.enabled.changed",()=>{this.updateRenders()}),this._libwebphone.on("videoCanvas.localVideo.rescale.changed",()=>{this.updateRenders()}),this._libwebphone.on("videoCanvas.localVideo.position.changed",()=>{this.updateRenders()}),this._libwebphone.on("videoCanvas.framesPerSecond.changed",()=>{this.updateRenders()}),this._libwebphone.on("videoCanvas.fullscreen.start",()=>{this.updateRenders()}),this._libwebphone.on("videoCanvas.fullscreen.stop",()=>{this.updateRenders()})}_initRenderTargets(){this._config.renderTargets.map(e=>this.renderAddTarget(e))}_renderDefaultConfig(){return{template:this._renderDefaultTemplate(),i18n:{localVideo:"libwebphone:videoCanvas.localVideo",remoteVideo:"libwebphone:videoCanvas.remoteVideo",video:"libwebphone:videoCanvas.video",show:"libwebphone:videoCanvas.show",hide:"libwebphone:videoCanvas.hide",rescale:"libwebphone:videoCanvas.rescale",position:"libwebphone:videoCanvas.position",x:"libwebphone:videoCanvas.x",y:"libwebphone:videoCanvas.y",center:"libwebphone:videoCanvas.center",topleft:"libwebphone:videoCanvas.topleft",topright:"libwebphone:videoCanvas.topright",bottomleft:"libwebphone:videoCanvas.bottomleft",bottomright:"libwebphone:videoCanvas.bottomright",absolute:"libwebphone:videoCanvas.absolute",relative:"libwebphone:videoCanvas.relative",framespersecond:"libwebphone:videoCanvas.framespersecond",fullscreen:"libwebphone:videoCanvas.fullscreen",startfullscreen:"libwebphone:videoCanvas.startfullscreen",stopfullscreen:"libwebphone:videoCanvas.stopfullscreen"},data:te.merge({},this._config,this._renderData()),by_id:{localVideoEnabled:{events:{onclick:()=>{this.toggleImage(this._config.localVideo.name)}}},localVideoRescale:{events:{onchange:e=>{const t=e.srcElement;this.rescaleImage(this._config.localVideo.name,t.value/100)}}},localVideoPosition:{events:{onchange:e=>{const t=e.srcElement;this.positionImage(this._config.localVideo.name,t.value)}}},localVideoRelativeX:{events:{onchange:e=>{const t=e.srcElement;this.positionImage(this._config.localVideo.name,"relative",t.value/100)}}},localVideoRelativeY:{events:{onchange:e=>{const t=e.srcElement;this.positionImage(this._config.localVideo.name,"relative",null,t.value/100)}}},localVideoAbsoluteX:{events:{onchange:e=>{const t=e.srcElement;this.positionImage(this._config.localVideo.name,"absolute",t.value)}}},localVideoAbsoluteY:{events:{onchange:e=>{const t=e.srcElement;this.positionImage(this._config.localVideo.name,"absolute",null,t.value/100)}}},canvasframesPerSecond:{events:{onchange:e=>{const t=e.srcElement;this.changeFramesPerSecond(t.value)}}}}}}_renderDefaultTemplate(){return'\n {{#data.localVideo.show}} \n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n {{#data.localVideo.position.relative}}\n
\n \n \n
\n\n
\n \n \n
\n {{/data.localVideo.position.relative}}\n\n\n {{#data.localVideo.position.absolute}}\n
\n \n \n
\n\n
\n \n \n
\n {{/data.localVideo.position.absolute}}\n\n {{/data.localVideo.show}}\n\n {{#data.canvasLoop.show}}\n
\n \n \n
\n {{/data.canvasLoop.show}}\n\n {{#data.fullscreen.supported}}\n {{#data.fullscreen.show}}\n
\n \n \n
\n {{/data.fullscreen.show}}\n {{/data.fullscreen.supported}}\n '}_renderData(e={localVideo:{},remoteVideo:{},canvasLoop:{}}){let t=this._canvasGetImage(this._canvasRender,this._config.localVideo.name);return t||(t={}),t.position||(t.position=this._config.localVideo.position),e.localVideo.position={mode:t.position.mode,center:"center"==t.position.mode,topleft:"top-left"==t.position.mode,topright:"top-right"==t.position.mode,bottomleft:"bottom-left"==t.position.mode,bottomright:"bottom-right"==t.position.mode,relative:"relative"==t.position.mode,absolute:"absolute"==t.position.mode,maximumX:0,maximumY:0},e.localVideo.position.relative?(e.localVideo.position.relativeX=100*(t.position.x||0),e.localVideo.position.relativeY=100*(t.position.y||0),e.localVideo.position.maximumX=100,e.localVideo.position.maximumY=100):e.localVideo.position.absolute&&(e.localVideo.position.absoluteX=t.position.x||0,e.localVideo.position.absoluteY=t.position.y||0,this._canvasRender.element&&(e.localVideo.position.maximumX=this._canvasRender.element.width,e.localVideo.position.maximumY=this._canvasRender.element.height)),e.localVideo.rescale=100*this._config.localVideo.rescale,e.canvasLoop.framesPerSecond=this._config.canvasLoop.framesPerSecond,e}_configGetImage(e){switch(e){case this._config.localVideo.name:return this._config.localVideo;case this._config.remoteVideo.name:return this._config.remoteVideo;default:return this._config.images.find(t=>t.name==e)}}_callPromoted(e=null){if(this._call=e,this._setCanvasImage(this._canvasRender,this._config.localVideo.name),this._setCanvasImage(this._canvasRender,this._config.remoteVideo.name),e._statusLines||(e._statusLines=[]),e&&e.hasSession()){const t=e._statusLines.find(e=>"remoteIdentity"==e.type);if(t)t.text=e.remoteIdentity();else{const t=this._canvasRender;if(!t)return;e._statusLines.push(this._createStatusLine(t,{text:e.remoteIdentity(),type:"remoteIdentity"}))}}this.updateRenders()}_callTimeupdate(e,t){e._statusLines||(e._statusLines=[]);const n=e._statusLines.find(e=>"duration"==e.type);if(n)n.text=t;else{const n=this._canvasRender;if(!n)return;e._statusLines.push(this._createStatusLine(n,{text:t,type:"duration"}))}}_setRemoteElement(e=null){const t=this._config.remoteVideo.name;this._setElement(t,e,this._config.remoteVideo)}_setLocalElement(e=null){const t=this._config.localVideo.name;this._setElement(t,e,this._config.localVideo)}_setElement(e,t=null,n={}){const r=this._canvasRender;t?this._checkCanvasImage(r,e,t,n):this._setCanvasImage(r,e)}_setCanvasImage(e,t,n=null,r={}){if(!e)return;const i=e.data.images.findIndex(e=>e.name==t);if(-1!=i&&e.data.images.splice(i,1),!n)return;const o=e.root.element.width,s=e.root.element.height,a=r.sourceWidth||n.videoWidth||n.width||o,l=r.sourceHeight||n.videoHeight||n.height||s,u=Math.min(o/a,s/l),c=a*u,d=l*u,h={enabled:!0,source:{stream:n,x:0,y:0,width:a,height:l},position:{mode:"center",x:null,y:null},destination:{original:{scale:u,x:o/2-c/2,y:s/2-d/2,width:c,height:d}}};return h.name=t,h.destination.current=te.merge({},h.destination.original),r.rescale&&this._rescaleCanvasImage(e,h,r.rescale),r.position&&this._positionCanvasImage(e,h,r.position.mode,r.position.x,r.position.y),r.averageRGB&&this._averageCanvasImageRGB(e,h,r.averageRGB),r.predicate?h.predicate=r.predicate:h.predicate=()=>!1,r.arc&&(h.arc=!0),e.data.images.push(h),this.updateRenders(),h}_checkCanvasImage(e,t,n=null,r={}){if(!e)return;const i=this._canvasGetImage(e,t);if(!i)return this._setCanvasImage(e,t,n,r);let o=!1;const s=e.root.element.width,a=e.root.element.height,l=r.sourceWidth||n.videoWidth||n.width||s,u=r.sourceHeight||n.videoHeight||n.height||a,c=Math.min(s/l,a/u);return i.source.width!=l&&(i.source.width=l,o=!0),i.source.height!=u&&(i.source.height=u,o=!0),(o||i.destination.original.scale!=c)&&(i.destination.original.scale=c,i.destination.original.x=s/2-i.source.width/2*c,i.destination.original.width=i.source.width*c,i.destination.original.y=a/2-i.source.height/2*c,i.destination.original.height=i.source.height*c,o=!0),o&&this._rescaleCanvasImage(e,i),i.averageRGB&&this._averageCanvasImageRGB(e,i),i}_rescaleCanvasImage(e,t,n=null){if(e&&t)return n&&(t.destination.current.scale=n),t.destination.current.width=t.destination.original.width*t.destination.current.scale,t.destination.current.height=t.destination.original.height*t.destination.current.scale,this._positionCanvasImage(e,t)}_positionCanvasImage(e,t,n=null,r=null,i=null){if(!e||!t)return;const o=e.root.element.width,s=e.root.element.height;switch(t.position||(t.position={}),n&&(t.position.mode=n),t.position.mode){case"delta":t.position.x=t.destination.current.x,t.position.y=t.destination.current.y,null!==r&&(t.position.x+=r),null!==i&&(t.position.y+=i),t.position.mode="absolute";break;case"absolute":t.position.x=t.destination.current.x,t.position.y=t.destination.current.y,null!==r&&(t.position.x=r),null!==i&&(t.position.y=i);break;case"relative":t.position.x=(t.destination.current.x+t.destination.current.width/2)/o,t.position.y=(t.destination.current.y+t.destination.current.height/2)/s,null!==r&&(t.position.x=r),null!==i&&(t.position.y=i)}switch(t.position.mode){case"absolute":t.destination.current.x=t.position.x,t.destination.current.y=t.position.y;break;case"relative":t.destination.current.x=o*t.position.x-t.destination.current.width/2,t.destination.current.y=s*t.position.y-t.destination.current.height/2;break;case"top-left":t.destination.current.x=0,t.destination.current.y=0;break;case"top-right":t.destination.current.x=o-t.destination.current.width,t.destination.current.y=0;break;case"bottom-left":t.destination.current.x=0,t.destination.current.y=s-t.destination.current.height;break;case"bottom-right":t.destination.current.x=o-t.destination.current.width,t.destination.current.y=s-t.destination.current.height;break;case"center":default:t.position.mode="center",t.destination.current.x=o/2-t.destination.current.width/2,t.destination.current.y=s/2-t.destination.current.height/2}return this._constrainCanvasImage(e,t)}_constrainCanvasImage(e,t){if(!e||!t)return;const n=t.destination.current.x,r=t.destination.current.x+t.destination.current.width,i=t.destination.current.y,o=t.destination.current.y+t.destination.current.height,s=e.root.element.width,a=e.root.element.height;return n<0?t.destination.current.x=0:r>s&&(t.destination.current.x=s-t.destination.current.width),i<0?t.destination.current.y=0:o>a&&(t.destination.current.y=a-t.destination.current.height),this.updateRenders(),t}_averageCanvasImageRGB(e,t,n={}){if(!t)return;t.averageRGB||(t.averageRGB={canvas:document.createElement("canvas"),red:0,green:0,blue:0,distance:0,threshold:0}),t.averageRGB.context||(t.averageRGB.context=t.averageRGB.canvas.getContext("2d")),t.averageRGB.context.drawImage(t.source.stream,0,0);const r=t.averageRGB.context.getImageData(0,0,t.averageRGB.canvas.width,t.averageRGB.canvas.height);t.averageRGB.red=0,t.averageRGB.green=0,t.averageRGB.blue=0;for(let e=0;e{const n=document.createElement("img");n.onload=()=>{this._setCanvasImage(t,e.name,n,e)},e.source&&(n.src=e.source)}),this._dialpadStatusLine=this._createStatusLine(t,{text:"",type:"dialpadTarget"}),t.framesPerSecond=this._config.canvasLoop.framesPerSecond,t.timer=setInterval(()=>{this._renderCanvas(t)},1e3/t.framesPerSecond),this._canvasRender=t}_renderCanvas(e){let t=0,n=0;const r=e.root.element.width,i=e.root.element.height;if(e.context.fillStyle=e.data.fills.background,e.context.fillRect(0,0,r,i),e.debug&&(e.context.beginPath(),e.context.moveTo(r/2,0),e.context.lineTo(r/2,i),e.context.strokeStyle=e.data.strokes.debug,e.context.stroke(),e.context.beginPath(),e.context.moveTo(0,i/2),e.context.lineTo(r,i/2),e.context.strokeStyle=e.data.strokes.debug,e.context.stroke()),this._config.remoteVideo.enabled&&this._canvasHasImage(e,this._config.remoteVideo.name,{checkShouldShow:!0}))return this._renderCanvasImage(e,this._canvasGetImage(e,this._config.remoteVideo.name)),void(this._config.localVideo.enabled&&this._renderCanvasImage(e,this._canvasGetImage(e,this._config.localVideo.name,{checkShouldShow:!0})));const o=this._canvasRender.data.images.find(e=>e.predicate()&&e.enabled&&e.source.stream);if(o)if(o.arc){const r=Math.hypot(o.destination.current.width,o.destination.current.height);t+=r,n=i/2-t/2,e.context.beginPath(),e.context.fillStyle=e.data.fills.avatar,e.context.arc(o.destination.current.x+o.destination.current.width/2,n+o.destination.current.height/2,r/2,0,2*Math.PI),e.context.fill(),this._renderCanvasImage(e,o,n),n+=r}else t+=o.destination.current.height,n=i/2-t/2,n+=this._renderCanvasImage(e,o,n);[].forEach(t=>{n+=15,this._renderStatusLine(e,t,n),n+=t.expectedHeight})}_canvasGetImage(e,t,n={checkShouldShow:!1}){if(!e)return;const r=e.data.images.find(e=>e.name==t);return!r||n.checkShouldShow&&(!r.enabled||!r.source||r.averageRGB&&r.averageRGB.distance<=r.averageRGB.threshold)?void 0:r}_canvasHasImage(e,t,n={}){return!!this._canvasGetImage(e,t,n)}_renderCanvasImage(e,t,n=null,r=null){return e&&t?(r&&(t.destination.current.x=r),n&&(t.destination.current.y=n),e.context.drawImage(t.source.stream,t.source.x,t.source.y,t.source.width,t.source.height,t.destination.current.x,t.destination.current.y,t.destination.current.width,t.destination.current.height),e.debug&&(e.context.beginPath(),e.context.strokeStyle=e.data.strokes.debug,e.context.strokeRect(t.destination.current.x,t.destination.current.y,t.destination.current.width,t.destination.current.height),e.context.stroke()),t.destination.current.height):0}_renderStatusLine(e,t,n=null,r=null){e&&t&&(r||(r=t.x),n||(n=t.y),t.measurements=e.context.measureText(t.text),e.context.font=t.font,e.context.fillStyle=t.fillStyle,e.context.textAlign=t.textAlign,e.context.textBaseline=t.textBaseline,e.context.fillText(t.text,r-t.measurements.width/2,n))}},bt=class extends oe{constructor(e,t={}){return super(e),this._libwebphone=e,this._emit=this._libwebphone._audioContextEvent,this._initProperties(t),this._initInternationalization(t.i18n||{}),this._initOutputAudio(),this._initRingAudio(),this._initTonesAudio(),this._initPreviewAudio(),this._initRemoteAudio(),this._initEventBindings(),this._initRenderTargets(),this._emit("created",this),this}startAudioContext(){this._started||(this._audioContext.resume(),this._ringerAudio.carrierNode.start(),this._ringerAudio.modulatorNode.start(),this._previewAudio.oscillatorNode.start(),this._started=!0,this._emit("started",this))}startPreviewTone(){this.isPreviewToneActive()||(this.startAudioContext(),this._previewAudio.toneActive=!0,this._previewAudio.oscillatorNode.connect(this._getOutputGainNode("preview")),this._emit("preview.tone.started",this))}stopPreviewTone(){this.isPreviewToneActive()&&(this._previewAudio.toneActive=!1,this._previewAudio.oscillatorNode.disconnect(),this._emit("preview.tone.stopped",this))}togglePreviewTone(){this.isPreviewToneActive()?this.stopPreviewTone():this.startPreviewTone()}isPreviewToneActive(){return this._previewAudio.toneActive}startPreviewLoopback(){this.isPreviewLoopbackActive()||(this.startAudioContext(),this._previewAudio.loopbackActive=!0,this._previewAudio.loopbackDelayNode.connect(this._getOutputGainNode("preview")),this._emit("preview.loopback.started",this))}stopPreviewLoopback(){this.isPreviewLoopbackActive()&&(this._previewAudio.loopbackActive=!1,this._previewAudio.loopbackDelayNode.disconnect(),this._emit("preview.loopback.stopped",this))}togglePreviewLoopback(){this.isPreviewLoopbackActive()?this.stopPreviewLoopback():this.startPreviewLoopback()}isPreviewLoopbackActive(){return this._previewAudio.loopbackActive}stopPreviews(){this.stopPreviewTone(),this.stopPreviewLoopback()}getVolume(e,t={scale:!0,relativeToMaster:!1}){let n=0;return this._config.channels[e]&&(n=this._config.channels[e].volume),t.relativeToMaster&&(n*=this._config.channels.master.volume),t.scale&&(n*=this._config.volumeMax),n}changeVolume(e,t,n={}){const r=this._getOutputGainNode(e);this.startAudioContext(),Object.prototype.hasOwnProperty.call(n,"scale")||(n.scale=t>1),n.scale&&(t/=this._config.volumeMax),t<0&&(t=0),t>1&&(t=1),this._config.channels[e]&&(this._config.channels[e].volume=t,this._emit("channel."+e+".volume",this,t)),r&&(r.gain.value=t)}playTones(...e){if(!e.length)return;this.startAudioContext();const t=this._config.channels.tones.duration,n=this._tonesAudio.context.sampleRate,r=this._shimCreateBuffer(this._tonesAudio.context,e.length,n,n);for(let i=0;i{i.disconnect(),i.stop()},1e3*(t+.5))}startRinging(e=null){this.startAudioContext(),e?this._ringerAudio.calls.includes(e)||this._ringerAudio.calls.push(e):this._ringerAudio.calls.push(null),this._ringerAudio.ringerConnected||(this._ringerAudio.ringerConnected=!0,this._ringerAudio.ringerGain.connect(this._getOutputGainNode("ringer"))),this._ringingTimer||this._ringTimer()}stopRinging(e=null){e||(e=null);const t=this._ringerAudio.calls.indexOf(e);-1!=t&&this._ringerAudio.calls.splice(t,1),0==this._ringerAudio.calls.length&&this.stopAllRinging()}stopAllRinging(){this._ringerAudio.ringerConnected&&(this._ringerAudio.ringerConnected=!1,this._ringerAudio.ringerGain.disconnect()),this._ringerAudio.calls=[],this._ringerMute()}getDestinationStream(){return this._outputAudio.destinationStream.stream}updateRenders(){this.render(e=>(e.data=this._renderData(e.data),e))}_initInternationalization(e){const t=te.merge({en:{mastervolume:"Master Volume",ringervolume:"Ringer Volume",tonesvolume:"Tones Volume",previewvolume:"Preview Volume",remotevolume:"Call Volume"}},e.resourceBundles||{});this._libwebphone.i18nAddResourceBundles("audioContext",t)}_initProperties(e){const t={channels:{master:{show:!0,volume:1},ringer:{onTime:1.5,offTime:1,carrier:{frequency:440},modulator:{frequency:10,amplitude:.75},show:!0,volume:1,connectToMaster:!0},tones:{duration:.15,show:!0,volume:.15,connectToMaster:!0},remote:{show:!0,volume:1,connectToMaster:!1},preview:{loopback:{delay:.5},tone:{frequency:440,duration:1.5,type:"sine"},show:!0,volume:1,connectToMaster:!0}},globalKeyShortcuts:!0,keys:{arrowup:{enabled:!0,action:()=>{this.changeVolume("master",this._config.channels.master.volume+.05,{scale:!1})}},arrowdown:{enabled:!0,action:()=>{this.changeVolume("master",this._config.channels.master.volume-.05,{scale:!1})}}},renderTargets:[],volumeMax:100,volumeMin:0};this._config=te.merge(t,e),this._audioContext=this._shimAudioContext(),this._ringingTimer=null}_initOutputAudio(){const e=this._libwebphone.getMediaDevices();if(this._outputAudio={},this._outputAudio.context=this._audioContext,this._outputAudio.masterGain=this._shimCreateGain(this._outputAudio.context),this._outputAudio.masterGain.gain.value=this._config.channels.master.volume,this._outputAudio.ringerGain=this._shimCreateGain(this._outputAudio.context),this._outputAudio.ringerGain.gain.value=this._config.channels.ringer.volume,this._config.channels.ringer.connectToMaster&&this._outputAudio.ringerGain.connect(this._outputAudio.masterGain),this._outputAudio.tonesGain=this._shimCreateGain(this._outputAudio.context),this._outputAudio.tonesGain.gain.value=this._config.channels.tones.volume,this._config.channels.tones.connectToMaster&&this._outputAudio.tonesGain.connect(this._outputAudio.masterGain),this._outputAudio.remoteGain=this._shimCreateGain(this._outputAudio.context),this._outputAudio.remoteGain.gain.value=this._config.channels.remote.volume,this._config.channels.remote.connectToMaster&&this._libwebphone._config.call.useAudioContext&&this._outputAudio.remoteGain.connect(this._outputAudio.masterGain),this._outputAudio.previewGain=this._shimCreateGain(this._outputAudio.context),this._outputAudio.previewGain.gain.value=this._config.channels.preview.volume,this._config.channels.preview.connectToMaster&&this._outputAudio.previewGain.connect(this._outputAudio.masterGain),this._outputAudio.destinationStream=this._shimCreateMediaStreamDestination(this._outputAudio.context),this._outputAudio.masterGain.connect(this._outputAudio.destinationStream),e&&e.getMediaElement("audiooutput")){e.getMediaElement("audiooutput").srcObject=this._outputAudio.destinationStream.stream,this._outputAudio.usingAudioElement=!0}else this._outputAudio.masterGain.connect(this._outputAudio.context.destination),this._outputAudio.usingAudioElement=!1}_initRingAudio(){this._ringerAudio={},this._ringerAudio.context=this._audioContext,this._ringerAudio.calls=[],this._ringerAudio.ringerConnected=!1,this._ringerAudio.carrierGain=this._shimCreateGain(this._ringerAudio.context),this._ringerAudio.carrierNode=this._shimCreateOscillator(this._ringerAudio.context),this._ringerAudio.carrierNode.frequency.value=this._config.channels.ringer.carrier.frequency,this._ringerAudio.carrierNode.connect(this._ringerAudio.carrierGain),this._ringerAudio.modulatorNode=this._shimCreateOscillator(this._ringerAudio.context),this._ringerAudio.modulatorNode.frequency.value=this._config.channels.ringer.modulator.frequency,this._ringerAudio.modulatorNode.connect(this._ringerAudio.carrierGain.gain),this._ringerAudio.ringerGain=this._shimCreateGain(this._ringerAudio.context),this._ringerAudio.carrierGain.connect(this._ringerAudio.ringerGain)}_initTonesAudio(){this._tonesAudio={},this._tonesAudio.context=this._audioContext}_initRemoteAudio(){this._remoteAudio={},this._remoteAudio.context=this._audioContext,this._remoteAudio.sourceStream=null}_initPreviewAudio(){this._previewAudio={},this._previewAudio.context=this._audioContext,this._previewAudio.sourceStream=null,this._previewAudio.toneActive=!1,this._previewAudio.oscillatorNode=this._shimCreateOscillator(this._previewAudio.context),this._previewAudio.oscillatorNode.frequency.value=this._config.channels.preview.tone.frequency,this._previewAudio.oscillatorNode.type=this._config.channels.preview.tone.type,this._previewAudio.loopbackActive=!1,this._previewAudio.loopbackDelayNode=this._shimCreateDelay(this._previewAudio.context,this._config.channels.preview.loopback.delay+1.5),this._previewAudio.loopbackDelayNode.delayTime.value=this._config.channels.preview.loopback.delay}_initEventBindings(){this._libwebphone.on("call.ringing.started",(e,t)=>{this.startRinging(t.getId())}),this._libwebphone.on("call.ringing.stopped",(e,t)=>{this.stopRinging(t.getId())}),this._libwebphone.on("call.primary.remote.audio.added",(e,t,n)=>{this._createRemoteSourceStream(n.mediaStream)}),this._libwebphone.on("call.primary.remote.mediaStream.connect",(e,t,n)=>{this._createRemoteSourceStream(n)}),this._libwebphone.on("dialpad.tones.play",(e,t,n)=>{this.playTones.apply(this,n)}),this._libwebphone.on("mediaDevices.streams.started",(e,t,n)=>{this._createLocalSourceStream(n)}),this._libwebphone.on("mediaDevices.streams.stopped",()=>{this._connectLocalSourceStream()}),this._libwebphone.on("mediaDevices.audio.input.changed",(e,t,n)=>{this._createLocalSourceStream(n.mediaStream)}),this._config.globalKeyShortcuts&&document.addEventListener("keydown",e=>{if(e.target==document.body)switch(e.key){case"ArrowUp":this._config.keys.arrowup.enabled&&this._config.keys.arrowup.action(e,this);break;case"ArrowDown":this._config.keys.arrowdown.enabled&&this._config.keys.arrowdown.action(e,this)}}),this._libwebphone.on("audioContext.channel.master.volume",()=>{this.updateRenders()}),this._libwebphone.on("audioContext.channel.ringer.volume",()=>{this.updateRenders()}),this._libwebphone.on("audioContext.channel.tones.volume",()=>{this.updateRenders()}),this._libwebphone.on("audioContext.channel.preview.volume",()=>{this.updateRenders()}),this._libwebphone.on("audioContext.channel.remote.volume",()=>{this.updateRenders()})}_initRenderTargets(){this._config.renderTargets.map(e=>this.renderAddTarget(e))}_renderDefaultConfig(){return{template:this._renderDefaultTemplate(),i18n:{mastervolume:"libwebphone:audioContext.mastervolume",ringervolume:"libwebphone:audioContext.ringervolume",tonesvolume:"libwebphone:audioContext.tonesvolume",previewvolume:"libwebphone:audioContext.previewvolume",remotevolume:"libwebphone:audioContext.remotevolume"},by_id:{mastervolume:{events:{onchange:e=>{const t=e.srcElement;this.changeVolume("master",t.value)}}},ringervolume:{events:{onchange:e=>{const t=e.srcElement;this.changeVolume("ringer",t.value)}}},tonesvolume:{events:{onchange:e=>{const t=e.srcElement;this.changeVolume("tones",t.value)}}},previewvolume:{events:{onchange:e=>{const t=e.srcElement;this.changeVolume("preview",t.value)}}},remotevolume:{events:{onchange:e=>{const t=e.srcElement;this.changeVolume("remote",t.value)}}}},data:te.merge({},this._config,this._renderData())}}_renderDefaultTemplate(){return'\n
\n {{#data.channels.master.show}}\n
\n \n \n
\n {{/data.channels.master.show}}\n\n {{#data.channels.ringer.show}}\n
\n \n \n
\n {{/data.channels.ringer.show}}\n\n {{#data.channels.tones.show}}\n
\n \n \n
\n {{/data.channels.tones.show}}\n\n {{#data.channels.preview.show}}\n
\n \n \n
\n {{/data.channels.preview.show}} \n\n {{#data.channels.remote.show}}\n
\n \n \n
\n {{/data.channels.remote.show}}\n\n
\n '}_renderData(e={volumes:{},volume:{}}){return Object.keys(this._config.channels).forEach(t=>{e.volumes[t]=this._config.channels[t].volume*this._config.volumeMax}),e.volume.max=this._config.volumeMax,e.volume.min=this._config.volumeMin,e}_ringTimer(){this._ringerAudio.calls.length>0?this._ringerAudio.ringerGain.gain.value<.5?(this._ringerUnmute(),this._ringingTimer=setTimeout(()=>{this._ringTimer()},1e3*this._config.channels.ringer.onTime)):(this._ringerMute(),this._ringingTimer=setTimeout(()=>{this._ringTimer()},1e3*this._config.channels.ringer.offTime)):(this._ringingTimer&&(clearTimeout(this._ringingTimer),this._ringingTimer=null),this._ringerAudio.ringerConnected&&(this._ringerAudio.ringerConnected=!1,this._ringerAudio.ringerGain.disconnect()))}_ringerMute(){const e=this._ringerAudio.context.currentTime+.2*this._config.channels.ringer.onTime;this._ringerAudio.ringerGain.gain.cancelScheduledValues(0),this._ringerAudio.ringerGain.gain.exponentialRampToValueAtTime(1e-5,e)}_ringerUnmute(){const e=this._ringerAudio.context.currentTime+.2*this._config.channels.ringer.offTime;this._ringerAudio.ringerGain.gain.cancelScheduledValues(0),this._ringerAudio.ringerGain.gain.exponentialRampToValueAtTime(.5,e)}_createLocalMediaStreamSource(e){return this._shimCreateMediaStreamSource(this._previewAudio.context,e)}_createRemoteMediaStreamSource(e){return this._shimCreateMediaStreamSource(this._remoteAudio.context,e)}_connectLocalSourceStream(e=null){const t=this._previewAudio.sourceStream;t&&(t.disconnect(),this._previewAudio.sourceStream=null),e&&(this.startAudioContext(),this._previewAudio.sourceStream=e,this._previewAudio.sourceStream.connect(this._previewAudio.loopbackDelayNode)),this._emit("stream.local.changed",this,e,t)}_createLocalSourceStream(e){if(!e.getTracks().find(e=>"audio"==e.kind))return this._connectLocalSourceStream();this._connectLocalSourceStream(this._createLocalMediaStreamSource(e))}_connectRemoteSourceStream(e=null){const t=this._remoteAudio.sourceStream;t&&(t.disconnect(),this._remoteAudio.sourceStream=null),e&&(this.startAudioContext(),this._remoteAudio.sourceStream=e,this._remoteAudio.sourceStream.connect(this._getOutputGainNode("remote"))),this._emit("stream.remote.changed",this,e,t)}_createRemoteSourceStream(e){if(!e.getTracks().find(e=>"audio"==e.kind))return this._connectRemoteSourceStream();this._connectRemoteSourceStream(this._createRemoteMediaStreamSource(e))}_getOutputGainNode(e){switch(e){case"master":return this._outputAudio.masterGain;case"ringer":return this._outputAudio.ringerGain;case"tones":return this._outputAudio.tonesGain;case"preview":return this._outputAudio.previewGain;case"remote":return this._outputAudio.remoteGain}}_shimCreateBuffer(e,...t){return(e.createBuffer||e.webkitCreateBuffer).apply(e,t)}_shimCreateBufferSource(e,...t){return(e.createBufferSource||e.webkitCreateBufferSource).apply(e,t)}_shimCreateDelay(e,...t){return(e.createDelay||e.webkitCreateDelay).apply(e,t)}_shimCreateGain(e,...t){return(e.createGain||e.webkitCreateGain).apply(e,t)}_shimCreateOscillator(e,...t){return(e.createOscillator||e.webkitCreateOscillator).apply(e,t)}_shimCreateMediaStreamDestination(e,...t){return(e.createMediaStreamDestination||e.webkitCreateMediaStreamDestination).apply(e,t)}_shimCreateMediaStreamSource(e,...t){return(e.createMediaStreamSource||e.webkitCreateMediaStreamSource).apply(e,t)}_shimAudioContext(){return te.isChrome()?new(window.AudioContext||window.webkitAudioContext)({latencyHint:"interactive",sampleRate:44100}):new(window.AudioContext||window.webkitAudioContext)({latencyHint:"interactive"})}};t.default=class extends X.a{constructor(e={}){super(),this._libwebphone=this,this._initProperties(e),this._initInternationalization(this._config.i18n),this._config.userAgent.enabled&&(this._userAgent=new ue(this,this._config.userAgent)),this._config.callList.enabled&&(this._callList=new ce(this,this._config.callList)),this._config.mediaDevices.enabled&&(this._mediaDevices=new vt(this,this._config.mediaDevices)),this._config.audioContext.enabled&&(this._audioContext=new bt(this,this._config.audioContext)),this._config.callControl.enabled&&(this._callControl=new de(this,this._config.callControl)),this._config.dialpad.enabled&&(this._dialpad=new he(this,this._config.dialpad)),this._config.videoCanvas.enabled&&(this._videoCanvas=new yt(this,this._config.videoCanvas)),this._libwebphone._emit("created",this._libwebphone)}getCallControl(){return this._callControl}getCallList(){return this._callList}getDialpad(){return this._dialpad}getUserAgent(){return this._userAgent}getMediaDevices(){return this._mediaDevices}getVideoCanvas(){return this._videoCanvas}getAudioContext(){return this._audioContext}getUtils(){return te}geti18n(){return $}i18nAddResourceBundles(e,t){for(const n in t)this.i18nAddResourceBundle(e,n,t[n])}i18nAddResourceBundle(e,t,n){const r={};r[e]=n,$.addResourceBundle(t,"libwebphone",r,!0),this._libwebphone._emit("language.bundle.added",this._libwebphone,t,r)}i18nTranslator(){return this._translator}_initProperties(e){this._config=te.merge({i18n:{fallbackLng:"en"},dialpad:{enabled:!0},callList:{enabled:!0},callControl:{enabled:!0},mediaDevices:{enabled:!0},mediaPreviews:{enabled:!1},audioContext:{enabled:!0},userAgent:{enabled:!0},videoCanvas:{enabled:!0},call:{useAudioContext:!1,globalKeyShortcuts:!0,startWithAudioMuted:!1,startWithVideoMuted:!1,keys:{spacebar:{enabled:!0,action:(e,t)=>{"keydown"==e.type?(t._muteHint=t.isMuted(),t._muteHint?t.unmute():t.mute()):t._muteHint?t.mute():t.unmute()}}}}},e),this._config.call.useAudioContext=this._config.call.useAudioContext&&this._config.audioContext.enabled}_initInternationalization(e){this._i18nPromise=$.init(e).then(e=>{this._translator=e,this._libwebphone._emit("language.changed",this._libwebphone,e)})}_callListEvent(e,t,...n){n.unshift(t),n.unshift(this._libwebphone),n.unshift("callList."+e),this._libwebphone._emit.apply(this._libwebphone,n)}_callControlEvent(e,t,...n){n.unshift(t),n.unshift(this._libwebphone),n.unshift("callControl."+e),this._libwebphone._emit.apply(this._libwebphone,n)}_dialpadEvent(e,t,...n){n.unshift(t),n.unshift(this._libwebphone),n.unshift("dialpad."+e),this._libwebphone._emit.apply(this._libwebphone,n)}_userAgentEvent(e,t,...n){n.unshift(t),n.unshift(this._libwebphone),n.unshift("userAgent."+e),this._libwebphone._emit.apply(this._libwebphone,n)}_mediaDevicesEvent(e,t,...n){n.unshift(t),n.unshift(this._libwebphone),n.unshift("mediaDevices."+e),this._libwebphone._emit.apply(this._libwebphone,n)}_audioContextEvent(e,t,...n){n.unshift(t),n.unshift(this._libwebphone),n.unshift("audioContext."+e),this._libwebphone._emit.apply(this._libwebphone,n)}_callEvent(e,t,...n){n.unshift(t),n.unshift(this._libwebphone),n.unshift("call."+e),this._libwebphone._emit.apply(this._libwebphone,n),t.isPrimary()&&(n.shift(),n.unshift("call.primary."+e),this._libwebphone._emit.apply(this._libwebphone,n),n.shift(),n.unshift("call.primary.update"),n.push(e),this._libwebphone._emit.apply(this._libwebphone,n))}_videoCanvasEvent(e,t,...n){n.unshift(t),n.unshift(this._libwebphone),n.unshift("videoCanvas."+e),this._libwebphone._emit.apply(this._libwebphone,n)}_emit(...e){this.emit(...e)}}}]); \ No newline at end of file diff --git a/src/assets/libs/swiper-bundle.min.css b/src/assets/libs/swiper-bundle.min.css deleted file mode 100644 index f92c1f9..0000000 --- a/src/assets/libs/swiper-bundle.min.css +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Swiper 7.0.8 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * https://swiperjs.com - * - * Copyright 2014-2021 Vladimir Kharlampidi - * - * Released under the MIT License - * - * Released on: October 4, 2021 - */ - - @font-face{font-family:swiper-icons;src:url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA');font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-pointer-events{touch-action:pan-y}.swiper-pointer-events.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-3d,.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d .swiper-slide,.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:rgba(0,0,0,.15)}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-horizontal.swiper-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-vertical.swiper-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-centered>.swiper-wrapper::before{content:'';flex-shrink:0;order:9999}.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center}.swiper-virtual.swiper-css-mode .swiper-wrapper::after{content:'';position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after{width:1px;height:var(--swiper-virtual-size)}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size)/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-rtl .swiper-button-prev:after{content:'next'}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));display:inline-block;border-radius:50%;background:var(--swiper-pagination-bullet-inactive-color,#000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-pagination-vertical.swiper-pagination-bullets,.swiper-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0px,-50%,0)}.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0;display:block}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-fade .swiper-slide-active,.swiper-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube{overflow:visible}.swiper-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-cube.swiper-rtl .swiper-slide{transform-origin:100% 0}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-next,.swiper-cube .swiper-slide-next+.swiper-slide,.swiper-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-cube .swiper-slide-shadow-bottom,.swiper-cube .swiper-slide-shadow-left,.swiper-cube .swiper-slide-shadow-right,.swiper-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;filter:blur(50px)}.swiper-flip{overflow:visible}.swiper-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-flip .swiper-slide-active,.swiper-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-flip .swiper-slide-shadow-bottom,.swiper-flip .swiper-slide-shadow-left,.swiper-flip .swiper-slide-shadow-right,.swiper-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-creative .swiper-slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper-cards{overflow:visible}.swiper-cards .swiper-slide{transform-origin:center bottom;-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden} \ No newline at end of file diff --git a/src/assets/libs/swiper-bundle.min.js b/src/assets/libs/swiper-bundle.min.js deleted file mode 100644 index a1e1bca..0000000 --- a/src/assets/libs/swiper-bundle.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Swiper 7.0.8 - * Most modern mobile touch slider and framework with hardware accelerated transitions - * https://swiperjs.com - * - * Copyright 2014-2021 Vladimir Kharlampidi - * - * Released under the MIT License - * - * Released on: October 4, 2021 - */ - - !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Swiper=t()}(this,(function(){"use strict";function e(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function t(s={},a={}){Object.keys(a).forEach((i=>{void 0===s[i]?s[i]=a[i]:e(a[i])&&e(s[i])&&Object.keys(a[i]).length>0&&t(s[i],a[i])}))}const s={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector:()=>null,querySelectorAll:()=>[],getElementById:()=>null,createEvent:()=>({initEvent(){}}),createElement:()=>({children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName:()=>[]}),createElementNS:()=>({}),importNode:()=>null,location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function a(){const e="undefined"!=typeof document?document:{};return t(e,s),e}const i={document:s,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle:()=>({getPropertyValue:()=>""}),Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia:()=>({}),requestAnimationFrame:e=>"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0),cancelAnimationFrame(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function r(){const e="undefined"!=typeof window?window:{};return t(e,i),e}class n extends Array{constructor(e){super(...e||[]),function(e){const t=e.__proto__;Object.defineProperty(e,"__proto__",{get:()=>t,set(e){t.__proto__=e}})}(this)}}function l(e=[]){const t=[];return e.forEach((e=>{Array.isArray(e)?t.push(...l(e)):t.push(e)})),t}function o(e,t){return Array.prototype.filter.call(e,t)}function d(e,t){const s=r(),i=a();let l=[];if(!t&&e instanceof n)return e;if(!e)return new n(l);if("string"==typeof e){const s=e.trim();if(s.indexOf("<")>=0&&s.indexOf(">")>=0){let e="div";0===s.indexOf("e.split(" "))));return this.forEach((e=>{e.classList.add(...t)})),this},removeClass:function(...e){const t=l(e.map((e=>e.split(" "))));return this.forEach((e=>{e.classList.remove(...t)})),this},hasClass:function(...e){const t=l(e.map((e=>e.split(" "))));return o(this,(e=>t.filter((t=>e.classList.contains(t))).length>0)).length>0},toggleClass:function(...e){const t=l(e.map((e=>e.split(" "))));this.forEach((e=>{t.forEach((t=>{e.classList.toggle(t)}))}))},attr:function(e,t){if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(let s=0;s=0;e-=1){const s=n[e];a&&s.listener===a||a&&s.listener&&s.listener.dom7proxy&&s.listener.dom7proxy===a?(r.removeEventListener(t,s.proxyListener,i),n.splice(e,1)):a||(r.removeEventListener(t,s.proxyListener,i),n.splice(e,1))}}}return this},trigger:function(...e){const t=r(),s=e[0].split(" "),a=e[1];for(let i=0;it>0)),i.dispatchEvent(s),i.dom7EventData=[],delete i.dom7EventData}}}return this},transitionEnd:function(e){const t=this;return e&&t.on("transitionend",(function s(a){a.target===this&&(e.call(this,a),t.off("transitionend",s))})),this},outerWidth:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetWidth+parseFloat(e.getPropertyValue("margin-right"))+parseFloat(e.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetHeight+parseFloat(e.getPropertyValue("margin-top"))+parseFloat(e.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},styles:function(){const e=r();return this[0]?e.getComputedStyle(this[0],null):{}},offset:function(){if(this.length>0){const e=r(),t=a(),s=this[0],i=s.getBoundingClientRect(),n=t.body,l=s.clientTop||n.clientTop||0,o=s.clientLeft||n.clientLeft||0,d=s===e?e.scrollY:s.scrollTop,c=s===e?e.scrollX:s.scrollLeft;return{top:i.top+d-l,left:i.left+c-o}}return null},css:function(e,t){const s=r();let a;if(1===arguments.length){if("string"!=typeof e){for(a=0;a{e.apply(t,[t,s])})),this):this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:null;for(let t=0;tt-1)return d([]);if(e<0){const s=t+e;return d(s<0?[]:[this[s]])}return d([this[e]])},append:function(...e){let t;const s=a();for(let a=0;a=0;i-=1)this[s].insertBefore(a.childNodes[i],this[s].childNodes[0])}else if(e instanceof n)for(i=0;i0?e?this[0].nextElementSibling&&d(this[0].nextElementSibling).is(e)?d([this[0].nextElementSibling]):d([]):this[0].nextElementSibling?d([this[0].nextElementSibling]):d([]):d([])},nextAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.nextElementSibling;){const a=s.nextElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},prev:function(e){if(this.length>0){const t=this[0];return e?t.previousElementSibling&&d(t.previousElementSibling).is(e)?d([t.previousElementSibling]):d([]):t.previousElementSibling?d([t.previousElementSibling]):d([])}return d([])},prevAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.previousElementSibling;){const a=s.previousElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},parent:function(e){const t=[];for(let s=0;s6&&(i=i.split(", ").map((e=>e.replace(",","."))).join(", ")),n=new s.WebKitCSSMatrix("none"===i?"":i)):(n=l.MozTransform||l.OTransform||l.MsTransform||l.msTransform||l.transform||l.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),a=n.toString().split(",")),"x"===t&&(i=s.WebKitCSSMatrix?n.m41:16===a.length?parseFloat(a[12]):parseFloat(a[4])),"y"===t&&(i=s.WebKitCSSMatrix?n.m42:16===a.length?parseFloat(a[13]):parseFloat(a[5])),i||0}function m(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function f(...e){const t=Object(e[0]),s=["__proto__","constructor","prototype"];for(let i=1;is.indexOf(e)<0));for(let s=0,a=e.length;si?"next":"prev",c=(e,t)=>"next"===d&&e>=t||"prev"===d&&e<=t,p=()=>{n=(new Date).getTime(),null===l&&(l=n);const r=Math.max(Math.min((n-l)/o,1),0),d=.5-Math.cos(r*Math.PI)/2;let u=i+d*(t-i);if(c(u,t)&&(u=t),e.wrapperEl.scrollTo({[s]:u}),c(u,t))return e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.scrollSnapType="",setTimeout((()=>{e.wrapperEl.style.overflow="",e.wrapperEl.scrollTo({[s]:u})})),void a.cancelAnimationFrame(e.cssModeFrameID);e.cssModeFrameID=a.requestAnimationFrame(p)};p()}let w,b,x;function y(){return w||(w=function(){const e=r(),t=a();return{smoothScroll:t.documentElement&&"scrollBehavior"in t.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch),passiveListener:function(){let t=!1;try{const s=Object.defineProperty({},"passive",{get(){t=!0}});e.addEventListener("testPassiveListener",null,s)}catch(e){}return t}(),gestures:"ongesturestart"in e}}()),w}function E(e={}){return b||(b=function({userAgent:e}={}){const t=y(),s=r(),a=s.navigator.platform,i=e||s.navigator.userAgent,n={ios:!1,android:!1},l=s.screen.width,o=s.screen.height,d=i.match(/(Android);?[\s\/]+([\d.]+)?/);let c=i.match(/(iPad).*OS\s([\d_]+)/);const p=i.match(/(iPod)(.*OS\s([\d_]+))?/),u=!c&&i.match(/(iPhone\sOS|iOS)\s([\d_]+)/),h="Win32"===a;let m="MacIntel"===a;return!c&&m&&t.touch&&["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(`${l}x${o}`)>=0&&(c=i.match(/(Version)\/([\d.]+)/),c||(c=[0,1,"13_0_0"]),m=!1),d&&!h&&(n.os="android",n.android=!0),(c||u||p)&&(n.os="ios",n.ios=!0),n}(e)),b}function T(){return x||(x=function(){const e=r();return{isSafari:function(){const t=e.navigator.userAgent.toLowerCase();return t.indexOf("safari")>=0&&t.indexOf("chrome")<0&&t.indexOf("android")<0}(),isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent)}}()),x}Object.keys(c).forEach((e=>{Object.defineProperty(d.fn,e,{value:c[e],writable:!0})}));var C={on(e,t,s){const a=this;if("function"!=typeof t)return a;const i=s?"unshift":"push";return e.split(" ").forEach((e=>{a.eventsListeners[e]||(a.eventsListeners[e]=[]),a.eventsListeners[e][i](t)})),a},once(e,t,s){const a=this;if("function"!=typeof t)return a;function i(...s){a.off(e,i),i.__emitterProxy&&delete i.__emitterProxy,t.apply(a,s)}return i.__emitterProxy=t,a.on(e,i,s)},onAny(e,t){const s=this;if("function"!=typeof e)return s;const a=t?"unshift":"push";return s.eventsAnyListeners.indexOf(e)<0&&s.eventsAnyListeners[a](e),s},offAny(e){const t=this;if(!t.eventsAnyListeners)return t;const s=t.eventsAnyListeners.indexOf(e);return s>=0&&t.eventsAnyListeners.splice(s,1),t},off(e,t){const s=this;return s.eventsListeners?(e.split(" ").forEach((e=>{void 0===t?s.eventsListeners[e]=[]:s.eventsListeners[e]&&s.eventsListeners[e].forEach(((a,i)=>{(a===t||a.__emitterProxy&&a.__emitterProxy===t)&&s.eventsListeners[e].splice(i,1)}))})),s):s},emit(...e){const t=this;if(!t.eventsListeners)return t;let s,a,i;"string"==typeof e[0]||Array.isArray(e[0])?(s=e[0],a=e.slice(1,e.length),i=t):(s=e[0].events,a=e[0].data,i=e[0].context||t),a.unshift(i);return(Array.isArray(s)?s:s.split(" ")).forEach((e=>{t.eventsAnyListeners&&t.eventsAnyListeners.length&&t.eventsAnyListeners.forEach((t=>{t.apply(i,[e,...a])})),t.eventsListeners&&t.eventsListeners[e]&&t.eventsListeners[e].forEach((e=>{e.apply(i,a)}))})),t}};function $({swiper:e,runCallbacks:t,direction:s,step:a}){const{activeIndex:i,previousIndex:r}=e;let n=s;if(n||(n=i>r?"next":i0)return;if(n.isTouched&&n.isMoved)return;!!l.noSwipingClass&&""!==l.noSwipingClass&&p.target&&p.target.shadowRoot&&e.path&&e.path[0]&&(h=d(e.path[0]));const m=l.noSwipingSelector?l.noSwipingSelector:`.${l.noSwipingClass}`,f=!(!p.target||!p.target.shadowRoot);if(l.noSwiping&&(f?function(e,t=this){return function t(s){return s&&s!==a()&&s!==r()?(s.assignedSlot&&(s=s.assignedSlot),s.closest(e)||t(s.getRootNode().host)):null}(t)}(m,p.target):h.closest(m)[0]))return void(t.allowClick=!0);if(l.swipeHandler&&!h.closest(l.swipeHandler)[0])return;o.currentX="touchstart"===p.type?p.targetTouches[0].pageX:p.pageX,o.currentY="touchstart"===p.type?p.targetTouches[0].pageY:p.pageY;const g=o.currentX,v=o.currentY,w=l.edgeSwipeDetection||l.iOSEdgeSwipeDetection,b=l.edgeSwipeThreshold||l.iOSEdgeSwipeThreshold;if(w&&(g<=b||g>=i.innerWidth-b)){if("prevent"!==w)return;e.preventDefault()}if(Object.assign(n,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),o.startX=g,o.startY=v,n.touchStartTime=u(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,l.threshold>0&&(n.allowThresholdMove=!1),"touchstart"!==p.type){let e=!0;h.is(n.focusableElements)&&(e=!1),s.activeElement&&d(s.activeElement).is(n.focusableElements)&&s.activeElement!==h[0]&&s.activeElement.blur();const a=e&&t.allowTouchMove&&l.touchStartPreventDefault;!l.touchStartForcePreventDefault&&!a||h[0].isContentEditable||p.preventDefault()}t.emit("touchStart",p)}function M(e){const t=a(),s=this,i=s.touchEventsData,{params:r,touches:n,rtlTranslate:l,enabled:o}=s;if(!o)return;let c=e;if(c.originalEvent&&(c=c.originalEvent),!i.isTouched)return void(i.startMoving&&i.isScrolling&&s.emit("touchMoveOpposite",c));if(i.isTouchEvent&&"touchmove"!==c.type)return;const p="touchmove"===c.type&&c.targetTouches&&(c.targetTouches[0]||c.changedTouches[0]),h="touchmove"===c.type?p.pageX:c.pageX,m="touchmove"===c.type?p.pageY:c.pageY;if(c.preventedByNestedSwiper)return n.startX=h,void(n.startY=m);if(!s.allowTouchMove)return s.allowClick=!1,void(i.isTouched&&(Object.assign(n,{startX:h,startY:m,currentX:h,currentY:m}),i.touchStartTime=u()));if(i.isTouchEvent&&r.touchReleaseOnEdges&&!r.loop)if(s.isVertical()){if(mn.startY&&s.translate>=s.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(hn.startX&&s.translate>=s.minTranslate())return;if(i.isTouchEvent&&t.activeElement&&c.target===t.activeElement&&d(c.target).is(i.focusableElements))return i.isMoved=!0,void(s.allowClick=!1);if(i.allowTouchCallbacks&&s.emit("touchMove",c),c.targetTouches&&c.targetTouches.length>1)return;n.currentX=h,n.currentY=m;const f=n.currentX-n.startX,g=n.currentY-n.startY;if(s.params.threshold&&Math.sqrt(f**2+g**2)=25&&(e=180*Math.atan2(Math.abs(g),Math.abs(f))/Math.PI,i.isScrolling=s.isHorizontal()?e>r.touchAngle:90-e>r.touchAngle)}if(i.isScrolling&&s.emit("touchMoveOpposite",c),void 0===i.startMoving&&(n.currentX===n.startX&&n.currentY===n.startY||(i.startMoving=!0)),i.isScrolling)return void(i.isTouched=!1);if(!i.startMoving)return;s.allowClick=!1,!r.cssMode&&c.cancelable&&c.preventDefault(),r.touchMoveStopPropagation&&!r.nested&&c.stopPropagation(),i.isMoved||(r.loop&&!r.cssMode&&s.loopFix(),i.startTranslate=s.getTranslate(),s.setTransition(0),s.animating&&s.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!r.grabCursor||!0!==s.allowSlideNext&&!0!==s.allowSlidePrev||s.setGrabCursor(!0),s.emit("sliderFirstMove",c)),s.emit("sliderMove",c),i.isMoved=!0;let v=s.isHorizontal()?f:g;n.diff=v,v*=r.touchRatio,l&&(v=-v),s.swipeDirection=v>0?"prev":"next",i.currentTranslate=v+i.startTranslate;let w=!0,b=r.resistanceRatio;if(r.touchReleaseOnEdges&&(b=0),v>0&&i.currentTranslate>s.minTranslate()?(w=!1,r.resistance&&(i.currentTranslate=s.minTranslate()-1+(-s.minTranslate()+i.startTranslate+v)**b)):v<0&&i.currentTranslatei.startTranslate&&(i.currentTranslate=i.startTranslate),s.allowSlidePrev||s.allowSlideNext||(i.currentTranslate=i.startTranslate),r.threshold>0){if(!(Math.abs(v)>r.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);if(!i.allowThresholdMove)return i.allowThresholdMove=!0,n.startX=n.currentX,n.startY=n.currentY,i.currentTranslate=i.startTranslate,void(n.diff=s.isHorizontal()?n.currentX-n.startX:n.currentY-n.startY)}r.followFinger&&!r.cssMode&&((r.freeMode&&r.freeMode.enabled&&s.freeMode||r.watchSlidesProgress)&&(s.updateActiveIndex(),s.updateSlidesClasses()),s.params.freeMode&&r.freeMode.enabled&&s.freeMode&&s.freeMode.onTouchMove(),s.updateProgress(i.currentTranslate),s.setTranslate(i.currentTranslate))}function P(e){const t=this,s=t.touchEventsData,{params:a,touches:i,rtlTranslate:r,slidesGrid:n,enabled:l}=t;if(!l)return;let o=e;if(o.originalEvent&&(o=o.originalEvent),s.allowTouchCallbacks&&t.emit("touchEnd",o),s.allowTouchCallbacks=!1,!s.isTouched)return s.isMoved&&a.grabCursor&&t.setGrabCursor(!1),s.isMoved=!1,void(s.startMoving=!1);a.grabCursor&&s.isMoved&&s.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);const d=u(),c=d-s.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(o),t.emit("tap click",o),c<300&&d-s.lastClickTime<300&&t.emit("doubleTap doubleClick",o)),s.lastClickTime=u(),p((()=>{t.destroyed||(t.allowClick=!0)})),!s.isTouched||!s.isMoved||!t.swipeDirection||0===i.diff||s.currentTranslate===s.startTranslate)return s.isTouched=!1,s.isMoved=!1,void(s.startMoving=!1);let h;if(s.isTouched=!1,s.isMoved=!1,s.startMoving=!1,h=a.followFinger?r?t.translate:-t.translate:-s.currentTranslate,a.cssMode)return;if(t.params.freeMode&&a.freeMode.enabled)return void t.freeMode.onTouchEnd({currentPos:h});let m=0,f=t.slidesSizesGrid[0];for(let e=0;e=n[e]&&h=n[e]&&(m=e,f=n[n.length-1]-n[n.length-2])}const g=(h-n[m])/f,v=ma.longSwipesMs){if(!a.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(g>=a.longSwipesRatio?t.slideTo(m+v):t.slideTo(m)),"prev"===t.swipeDirection&&(g>1-a.longSwipesRatio?t.slideTo(m+v):t.slideTo(m))}else{if(!a.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(o.target===t.navigation.nextEl||o.target===t.navigation.prevEl)?o.target===t.navigation.nextEl?t.slideTo(m+v):t.slideTo(m):("next"===t.swipeDirection&&t.slideTo(m+v),"prev"===t.swipeDirection&&t.slideTo(m))}}function k(){const e=this,{params:t,el:s}=e;if(s&&0===s.offsetWidth)return;t.breakpoints&&e.setBreakpoint();const{allowSlideNext:a,allowSlidePrev:i,snapGrid:r}=e;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.run(),e.allowSlidePrev=i,e.allowSlideNext=a,e.params.watchOverflow&&r!==e.snapGrid&&e.checkOverflow()}function z(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function O(){const e=this,{wrapperEl:t,rtlTranslate:s,enabled:a}=e;if(!a)return;let i;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=-t.scrollLeft:e.translate=-t.scrollTop,-0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();const r=e.maxTranslate()-e.minTranslate();i=0===r?0:(e.translate-e.minTranslate())/r,i!==e.progress&&e.updateProgress(s?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}let I=!1;function L(){}const A=(e,t)=>{const s=a(),{params:i,touchEvents:r,el:n,wrapperEl:l,device:o,support:d}=e,c=!!i.nested,p="on"===t?"addEventListener":"removeEventListener",u=t;if(d.touch){const t=!("touchstart"!==r.start||!d.passiveListener||!i.passiveListeners)&&{passive:!0,capture:!1};n[p](r.start,e.onTouchStart,t),n[p](r.move,e.onTouchMove,d.passiveListener?{passive:!1,capture:c}:c),n[p](r.end,e.onTouchEnd,t),r.cancel&&n[p](r.cancel,e.onTouchEnd,t)}else n[p](r.start,e.onTouchStart,!1),s[p](r.move,e.onTouchMove,c),s[p](r.end,e.onTouchEnd,!1);(i.preventClicks||i.preventClicksPropagation)&&n[p]("click",e.onClick,!0),i.cssMode&&l[p]("scroll",e.onScroll),i.updateOnWindowResize?e[u](o.ios||o.android?"resize orientationchange observerUpdate":"resize observerUpdate",k,!0):e[u]("observerUpdate",k,!0)};const D=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;var G={init:!0,direction:"horizontal",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,loopPreventsSlide:!0,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0,_emitClasses:!1};function N(e,t){return function(s={}){const a=Object.keys(s)[0],i=s[a];"object"==typeof i&&null!==i?(["navigation","pagination","scrollbar"].indexOf(a)>=0&&!0===e[a]&&(e[a]={auto:!0}),a in e&&"enabled"in i?(!0===e[a]&&(e[a]={enabled:!0}),"object"!=typeof e[a]||"enabled"in e[a]||(e[a].enabled=!0),e[a]||(e[a]={enabled:!1}),f(t,s)):f(t,s)):f(t,s)}}const B={eventsEmitter:C,update:{updateSize:function(){const e=this;let t,s;const a=e.$el;t=void 0!==e.params.width&&null!==e.params.width?e.params.width:a[0].clientWidth,s=void 0!==e.params.height&&null!==e.params.height?e.params.height:a[0].clientHeight,0===t&&e.isHorizontal()||0===s&&e.isVertical()||(t=t-parseInt(a.css("padding-left")||0,10)-parseInt(a.css("padding-right")||0,10),s=s-parseInt(a.css("padding-top")||0,10)-parseInt(a.css("padding-bottom")||0,10),Number.isNaN(t)&&(t=0),Number.isNaN(s)&&(s=0),Object.assign(e,{width:t,height:s,size:e.isHorizontal()?t:s}))},updateSlides:function(){const e=this;function t(t){return e.isHorizontal()?t:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[t]}function s(e,s){return parseFloat(e.getPropertyValue(t(s))||0)}const a=e.params,{$wrapperEl:i,size:r,rtlTranslate:n,wrongRTL:l}=e,o=e.virtual&&a.virtual.enabled,d=o?e.virtual.slides.length:e.slides.length,c=i.children(`.${e.params.slideClass}`),p=o?e.virtual.slides.length:c.length;let u=[];const h=[],m=[];let f=a.slidesOffsetBefore;"function"==typeof f&&(f=a.slidesOffsetBefore.call(e));let v=a.slidesOffsetAfter;"function"==typeof v&&(v=a.slidesOffsetAfter.call(e));const w=e.snapGrid.length,b=e.slidesGrid.length;let x=a.spaceBetween,y=-f,E=0,T=0;if(void 0===r)return;"string"==typeof x&&x.indexOf("%")>=0&&(x=parseFloat(x.replace("%",""))/100*r),e.virtualSize=-x,n?c.css({marginLeft:"",marginBottom:"",marginTop:""}):c.css({marginRight:"",marginBottom:"",marginTop:""}),a.centeredSlides&&a.cssMode&&(g(e.wrapperEl,"--swiper-centered-offset-before",""),g(e.wrapperEl,"--swiper-centered-offset-after",""));const C=a.grid&&a.grid.rows>1&&e.grid;let $;C&&e.grid.initSlides(p);const S="auto"===a.slidesPerView&&a.breakpoints&&Object.keys(a.breakpoints).filter((e=>void 0!==a.breakpoints[e].slidesPerView)).length>0;for(let i=0;i1&&u.push(e.virtualSize-r)}if(0===u.length&&(u=[0]),0!==a.spaceBetween){const s=e.isHorizontal()&&n?"marginLeft":t("marginRight");c.filter(((e,t)=>!a.cssMode||t!==c.length-1)).css({[s]:`${x}px`})}if(a.centeredSlides&&a.centeredSlidesBounds){let e=0;m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween;const t=e-r;u=u.map((e=>e<0?-f:e>t?t+v:e))}if(a.centerInsufficientSlides){let e=0;if(m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween,e{u[s]=e-t})),h.forEach(((e,s)=>{h[s]=e+t}))}}if(Object.assign(e,{slides:c,snapGrid:u,slidesGrid:h,slidesSizesGrid:m}),a.centeredSlides&&a.cssMode&&!a.centeredSlidesBounds){g(e.wrapperEl,"--swiper-centered-offset-before",-u[0]+"px"),g(e.wrapperEl,"--swiper-centered-offset-after",e.size/2-m[m.length-1]/2+"px");const t=-e.snapGrid[0],s=-e.slidesGrid[0];e.snapGrid=e.snapGrid.map((e=>e+t)),e.slidesGrid=e.slidesGrid.map((e=>e+s))}p!==d&&e.emit("slidesLengthChange"),u.length!==w&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),h.length!==b&&e.emit("slidesGridLengthChange"),a.watchSlidesProgress&&e.updateSlidesOffset()},updateAutoHeight:function(e){const t=this,s=[],a=t.virtual&&t.params.virtual.enabled;let i,r=0;"number"==typeof e?t.setTransition(e):!0===e&&t.setTransition(t.params.speed);const n=e=>a?t.slides.filter((t=>parseInt(t.getAttribute("data-swiper-slide-index"),10)===e))[0]:t.slides.eq(e)[0];if("auto"!==t.params.slidesPerView&&t.params.slidesPerView>1)if(t.params.centeredSlides)t.visibleSlides.each((e=>{s.push(e)}));else for(i=0;it.slides.length&&!a)break;s.push(n(e))}else s.push(n(t.activeIndex));for(i=0;ir?e:r}r&&t.$wrapperEl.css("height",`${r}px`)},updateSlidesOffset:function(){const e=this,t=e.slides;for(let s=0;s=0&&d1&&c<=t.size||d<=0&&c>=t.size)&&(t.visibleSlides.push(n),t.visibleSlidesIndexes.push(e),a.eq(e).addClass(s.slideVisibleClass)),n.progress=i?-o:o}t.visibleSlides=d(t.visibleSlides)},updateProgress:function(e){const t=this;if(void 0===e){const s=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*s||0}const s=t.params,a=t.maxTranslate()-t.minTranslate();let{progress:i,isBeginning:r,isEnd:n}=t;const l=r,o=n;0===a?(i=0,r=!0,n=!0):(i=(e-t.minTranslate())/a,r=i<=0,n=i>=1),Object.assign(t,{progress:i,isBeginning:r,isEnd:n}),(s.watchSlidesProgress||s.centeredSlides&&s.autoHeight)&&t.updateSlidesProgress(e),r&&!l&&t.emit("reachBeginning toEdge"),n&&!o&&t.emit("reachEnd toEdge"),(l&&!r||o&&!n)&&t.emit("fromEdge"),t.emit("progress",i)},updateSlidesClasses:function(){const e=this,{slides:t,params:s,$wrapperEl:a,activeIndex:i,realIndex:r}=e,n=e.virtual&&s.virtual.enabled;let l;t.removeClass(`${s.slideActiveClass} ${s.slideNextClass} ${s.slidePrevClass} ${s.slideDuplicateActiveClass} ${s.slideDuplicateNextClass} ${s.slideDuplicatePrevClass}`),l=n?e.$wrapperEl.find(`.${s.slideClass}[data-swiper-slide-index="${i}"]`):t.eq(i),l.addClass(s.slideActiveClass),s.loop&&(l.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass));let o=l.nextAll(`.${s.slideClass}`).eq(0).addClass(s.slideNextClass);s.loop&&0===o.length&&(o=t.eq(0),o.addClass(s.slideNextClass));let d=l.prevAll(`.${s.slideClass}`).eq(0).addClass(s.slidePrevClass);s.loop&&0===d.length&&(d=t.eq(-1),d.addClass(s.slidePrevClass)),s.loop&&(o.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass),d.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass)),e.emitSlidesClasses()},updateActiveIndex:function(e){const t=this,s=t.rtlTranslate?t.translate:-t.translate,{slidesGrid:a,snapGrid:i,params:r,activeIndex:n,realIndex:l,snapIndex:o}=t;let d,c=e;if(void 0===c){for(let e=0;e=a[e]&&s=a[e]&&s=a[e]&&(c=e);r.normalizeSlideIndex&&(c<0||void 0===c)&&(c=0)}if(i.indexOf(s)>=0)d=i.indexOf(s);else{const e=Math.min(r.slidesPerGroupSkip,c);d=e+Math.floor((c-e)/r.slidesPerGroup)}if(d>=i.length&&(d=i.length-1),c===n)return void(d!==o&&(t.snapIndex=d,t.emit("snapIndexChange")));const p=parseInt(t.slides.eq(c).attr("data-swiper-slide-index")||c,10);Object.assign(t,{snapIndex:d,realIndex:p,previousIndex:n,activeIndex:c}),t.emit("activeIndexChange"),t.emit("snapIndexChange"),l!==p&&t.emit("realIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&t.emit("slideChange")},updateClickedSlide:function(e){const t=this,s=t.params,a=d(e.target).closest(`.${s.slideClass}`)[0];let i,r=!1;if(a)for(let e=0;eo?o:a&&e=o.length&&(g=o.length-1),(p||l.initialSlide||0)===(c||0)&&s&&r.emit("beforeSlideChangeStart");const w=-o[g];if(r.updateProgress(w),l.normalizeSlideIndex)for(let e=0;e=s&&t=s&&t=s&&(n=e)}if(r.initialized&&n!==p){if(!r.allowSlideNext&&wr.translate&&w>r.maxTranslate()&&(p||0)!==n)return!1}let b;if(b=n>p?"next":n{r.wrapperEl.style.scrollSnapType="",r._swiperImmediateVirtual=!1}))}else{if(!r.support.smoothScroll)return v({swiper:r,targetPosition:s,side:e?"left":"top"}),!0;h.scrollTo({[e?"left":"top"]:s,behavior:"smooth"})}return!0}return 0===t?(r.setTransition(0),r.setTranslate(w),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,a),r.transitionStart(s,b),r.transitionEnd(s,b)):(r.setTransition(t),r.setTranslate(w),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,a),r.transitionStart(s,b),r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$wrapperEl[0].removeEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(s,b))}),r.$wrapperEl[0].addEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd))),!0},slideToLoop:function(e=0,t=this.params.speed,s=!0,a){const i=this;let r=e;return i.params.loop&&(r+=i.loopedSlides),i.slideTo(r,t,s,a)},slideNext:function(e=this.params.speed,t=!0,s){const a=this,{animating:i,enabled:r,params:n}=a;if(!r)return a;let l=n.slidesPerGroup;"auto"===n.slidesPerView&&1===n.slidesPerGroup&&n.slidesPerGroupAuto&&(l=Math.max(a.slidesPerViewDynamic("current",!0),1));const o=a.activeIndexc(e)));let h=n[u.indexOf(p)-1];if(void 0===h&&i.cssMode){let e;n.forEach(((t,s)=>{p>=t&&(e=s)})),void 0!==e&&(h=n[e>0?e-1:e])}let m=0;return void 0!==h&&(m=l.indexOf(h),m<0&&(m=a.activeIndex-1),"auto"===i.slidesPerView&&1===i.slidesPerGroup&&i.slidesPerGroupAuto&&(m=m-a.slidesPerViewDynamic("previous",!0)+1,m=Math.max(m,0))),a.slideTo(m,e,t,s)},slideReset:function(e=this.params.speed,t=!0,s){return this.slideTo(this.activeIndex,e,t,s)},slideToClosest:function(e=this.params.speed,t=!0,s,a=.5){const i=this;let r=i.activeIndex;const n=Math.min(i.params.slidesPerGroupSkip,r),l=n+Math.floor((r-n)/i.params.slidesPerGroup),o=i.rtlTranslate?i.translate:-i.translate;if(o>=i.snapGrid[l]){const e=i.snapGrid[l];o-e>(i.snapGrid[l+1]-e)*a&&(r+=i.params.slidesPerGroup)}else{const e=i.snapGrid[l-1];o-e<=(i.snapGrid[l]-e)*a&&(r-=i.params.slidesPerGroup)}return r=Math.max(r,0),r=Math.min(r,i.slidesGrid.length-1),i.slideTo(r,e,t,s)},slideToClickedSlide:function(){const e=this,{params:t,$wrapperEl:s}=e,a="auto"===t.slidesPerView?e.slidesPerViewDynamic():t.slidesPerView;let i,r=e.clickedIndex;if(t.loop){if(e.animating)return;i=parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"),10),t.centeredSlides?re.slides.length-e.loopedSlides+a/2?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r):r>e.slides.length-a?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r)}else e.slideTo(r)}},loop:{loopCreate:function(){const e=this,t=a(),{params:s,$wrapperEl:i}=e;i.children(`.${s.slideClass}.${s.slideDuplicateClass}`).remove();let r=i.children(`.${s.slideClass}`);if(s.loopFillGroupWithBlank){const e=s.slidesPerGroup-r.length%s.slidesPerGroup;if(e!==s.slidesPerGroup){for(let a=0;ar.length&&(e.loopedSlides=r.length);const n=[],l=[];r.each(((t,s)=>{const a=d(t);s=r.length-e.loopedSlides&&n.push(t),a.attr("data-swiper-slide-index",s)}));for(let e=0;e=0;e-=1)i.prepend(d(n[e].cloneNode(!0)).addClass(s.slideDuplicateClass))},loopFix:function(){const e=this;e.emit("beforeLoopFix");const{activeIndex:t,slides:s,loopedSlides:a,allowSlidePrev:i,allowSlideNext:r,snapGrid:n,rtlTranslate:l}=e;let o;e.allowSlidePrev=!0,e.allowSlideNext=!0;const d=-n[t]-e.getTranslate();if(t=s.length-a){o=-s.length+t+a,o+=a;e.slideTo(o,0,!1,!0)&&0!==d&&e.setTranslate((l?-e.translate:e.translate)-d)}e.allowSlidePrev=i,e.allowSlideNext=r,e.emit("loopFix")},loopDestroy:function(){const{$wrapperEl:e,params:t,slides:s}=this;e.children(`.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.${t.slideBlankClass}`).remove(),s.removeAttr("data-swiper-slide-index")}},grabCursor:{setGrabCursor:function(e){const t=this;if(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)return;const s="container"===t.params.touchEventsTarget?t.el:t.wrapperEl;s.style.cursor="move",s.style.cursor=e?"-webkit-grabbing":"-webkit-grab",s.style.cursor=e?"-moz-grabbin":"-moz-grab",s.style.cursor=e?"grabbing":"grab"},unsetGrabCursor:function(){const e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e["container"===e.params.touchEventsTarget?"el":"wrapperEl"].style.cursor="")}},events:{attachEvents:function(){const e=this,t=a(),{params:s,support:i}=e;e.onTouchStart=S.bind(e),e.onTouchMove=M.bind(e),e.onTouchEnd=P.bind(e),s.cssMode&&(e.onScroll=O.bind(e)),e.onClick=z.bind(e),i.touch&&!I&&(t.addEventListener("touchstart",L),I=!0),A(e,"on")},detachEvents:function(){A(this,"off")}},breakpoints:{setBreakpoint:function(){const e=this,{activeIndex:t,initialized:s,loopedSlides:a=0,params:i,$el:r}=e,n=i.breakpoints;if(!n||n&&0===Object.keys(n).length)return;const l=e.getBreakpoint(n,e.params.breakpointsBase,e.el);if(!l||e.currentBreakpoint===l)return;const o=(l in n?n[l]:void 0)||e.originalParams,d=D(e,i),c=D(e,o),p=i.enabled;d&&!c?(r.removeClass(`${i.containerModifierClass}grid ${i.containerModifierClass}grid-column`),e.emitContainerClasses()):!d&&c&&(r.addClass(`${i.containerModifierClass}grid`),(o.grid.fill&&"column"===o.grid.fill||!o.grid.fill&&"column"===i.grid.fill)&&r.addClass(`${i.containerModifierClass}grid-column`),e.emitContainerClasses());const u=o.direction&&o.direction!==i.direction,h=i.loop&&(o.slidesPerView!==i.slidesPerView||u);u&&s&&e.changeDirection(),f(e.params,o);const m=e.params.enabled;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),p&&!m?e.disable():!p&&m&&e.enable(),e.currentBreakpoint=l,e.emit("_beforeBreakpoint",o),h&&s&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-a+e.loopedSlides,0,!1)),e.emit("breakpoint",o)},getBreakpoint:function(e,t="window",s){if(!e||"container"===t&&!s)return;let a=!1;const i=r(),n="window"===t?i.innerHeight:s.clientHeight,l=Object.keys(e).map((e=>{if("string"==typeof e&&0===e.indexOf("@")){const t=parseFloat(e.substr(1));return{value:n*t,point:e}}return{value:e,point:e}}));l.sort(((e,t)=>parseInt(e.value,10)-parseInt(t.value,10)));for(let e=0;es}else e.isLocked=1===e.snapGrid.length;!0===s.allowSlideNext&&(e.allowSlideNext=!e.isLocked),!0===s.allowSlidePrev&&(e.allowSlidePrev=!e.isLocked),t&&t!==e.isLocked&&(e.isEnd=!1),t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock")}},classes:{addClasses:function(){const e=this,{classNames:t,params:s,rtl:a,$el:i,device:r,support:n}=e,l=function(e,t){const s=[];return e.forEach((e=>{"object"==typeof e?Object.keys(e).forEach((a=>{e[a]&&s.push(t+a)})):"string"==typeof e&&s.push(t+e)})),s}(["initialized",s.direction,{"pointer-events":!n.touch},{"free-mode":e.params.freeMode&&s.freeMode.enabled},{autoheight:s.autoHeight},{rtl:a},{grid:s.grid&&s.grid.rows>1},{"grid-column":s.grid&&s.grid.rows>1&&"column"===s.grid.fill},{android:r.android},{ios:r.ios},{"css-mode":s.cssMode},{centered:s.cssMode&&s.centeredSlides}],s.containerModifierClass);t.push(...l),i.addClass([...t].join(" ")),e.emitContainerClasses()},removeClasses:function(){const{$el:e,classNames:t}=this;e.removeClass(t.join(" ")),this.emitContainerClasses()}},images:{loadImage:function(e,t,s,a,i,n){const l=r();let o;function c(){n&&n()}d(e).parent("picture")[0]||e.complete&&i?c():t?(o=new l.Image,o.onload=c,o.onerror=c,a&&(o.sizes=a),s&&(o.srcset=s),t&&(o.src=t)):c()},preloadImages:function(){const e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(let s=0;s1){const e=[];return d(s.el).each((t=>{const a=f({},s,{el:t});e.push(new H(a))})),e}const a=this;a.__swiper__=!0,a.support=y(),a.device=E({userAgent:s.userAgent}),a.browser=T(),a.eventsListeners={},a.eventsAnyListeners=[],a.modules=[...a.__modules__],s.modules&&Array.isArray(s.modules)&&a.modules.push(...s.modules);const i={};a.modules.forEach((e=>{e({swiper:a,extendParams:N(s,i),on:a.on.bind(a),once:a.once.bind(a),off:a.off.bind(a),emit:a.emit.bind(a)})}));const r=f({},G,i);return a.params=f({},r,X,s),a.originalParams=f({},a.params),a.passedParams=f({},s),a.params&&a.params.on&&Object.keys(a.params.on).forEach((e=>{a.on(e,a.params.on[e])})),a.params&&a.params.onAny&&a.onAny(a.params.onAny),a.$=d,Object.assign(a,{enabled:a.params.enabled,el:t,classNames:[],slides:d(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:()=>"horizontal"===a.params.direction,isVertical:()=>"vertical"===a.params.direction,activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:a.params.allowSlideNext,allowSlidePrev:a.params.allowSlidePrev,touchEvents:function(){const e=["touchstart","touchmove","touchend","touchcancel"],t=["pointerdown","pointermove","pointerup"];return a.touchEventsTouch={start:e[0],move:e[1],end:e[2],cancel:e[3]},a.touchEventsDesktop={start:t[0],move:t[1],end:t[2]},a.support.touch||!a.params.simulateTouch?a.touchEventsTouch:a.touchEventsDesktop}(),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:a.params.focusableElements,lastClickTime:u(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:a.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),a.emit("_swiper"),a.params.init&&a.init(),a}enable(){const e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){const e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,t){const s=this;e=Math.min(Math.max(e,0),1);const a=s.minTranslate(),i=(s.maxTranslate()-a)*e+a;s.translateTo(i,void 0===t?0:t),s.updateActiveIndex(),s.updateSlidesClasses()}emitContainerClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=e.el.className.split(" ").filter((t=>0===t.indexOf("swiper")||0===t.indexOf(e.params.containerModifierClass)));e.emit("_containerClasses",t.join(" "))}getSlideClasses(e){const t=this;return e.className.split(" ").filter((e=>0===e.indexOf("swiper-slide")||0===e.indexOf(t.params.slideClass))).join(" ")}emitSlidesClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=[];e.slides.each((s=>{const a=e.getSlideClasses(s);t.push({slideEl:s,classNames:a}),e.emit("_slideClass",s,a)})),e.emit("_slideClasses",t)}slidesPerViewDynamic(e="current",t=!1){const{params:s,slides:a,slidesGrid:i,slidesSizesGrid:r,size:n,activeIndex:l}=this;let o=1;if(s.centeredSlides){let e,t=a[l].swiperSlideSize;for(let s=l+1;sn&&(e=!0));for(let s=l-1;s>=0;s-=1)a[s]&&!e&&(t+=a[s].swiperSlideSize,o+=1,t>n&&(e=!0))}else if("current"===e)for(let e=l+1;e=0;e-=1){i[l]-i[e]1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),i||a()),s.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,t=!0){const s=this,a=s.params.direction;return e||(e="horizontal"===a?"vertical":"horizontal"),e===a||"horizontal"!==e&&"vertical"!==e||(s.$el.removeClass(`${s.params.containerModifierClass}${a}`).addClass(`${s.params.containerModifierClass}${e}`),s.emitContainerClasses(),s.params.direction=e,s.slides.each((t=>{"vertical"===e?t.style.width="":t.style.height=""})),s.emit("changeDirection"),t&&s.update()),s}mount(e){const t=this;if(t.mounted)return!0;const s=d(e||t.params.el);if(!(e=s[0]))return!1;e.swiper=t;const i=()=>`.${(t.params.wrapperClass||"").trim().split(" ").join(".")}`;let r=(()=>{if(e&&e.shadowRoot&&e.shadowRoot.querySelector){const t=d(e.shadowRoot.querySelector(i()));return t.children=e=>s.children(e),t}return s.children(i())})();if(0===r.length&&t.params.createElements){const e=a().createElement("div");r=d(e),e.className=t.params.wrapperClass,s.append(e),s.children(`.${t.params.slideClass}`).each((e=>{r.append(e)}))}return Object.assign(t,{$el:s,el:e,$wrapperEl:r,wrapperEl:r[0],mounted:!0,rtl:"rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction"),rtlTranslate:"horizontal"===t.params.direction&&("rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction")),wrongRTL:"-webkit-box"===r.css("display")}),!0}init(e){const t=this;if(t.initialized)return t;return!1===t.mount(e)||(t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.params.loop&&t.loopCreate(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.preloadImages&&t.preloadImages(),t.params.loop?t.slideTo(t.params.initialSlide+t.loopedSlides,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.attachEvents(),t.initialized=!0,t.emit("init"),t.emit("afterInit")),t}destroy(e=!0,t=!0){const s=this,{params:a,$el:i,$wrapperEl:r,slides:n}=s;return void 0===s.params||s.destroyed||(s.emit("beforeDestroy"),s.initialized=!1,s.detachEvents(),a.loop&&s.loopDestroy(),t&&(s.removeClasses(),i.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([a.slideVisibleClass,a.slideActiveClass,a.slideNextClass,a.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),s.emit("destroy"),Object.keys(s.eventsListeners).forEach((e=>{s.off(e)})),!1!==e&&(s.$el[0].swiper=null,function(e){const t=e;Object.keys(t).forEach((e=>{try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}}))}(s)),s.destroyed=!0),null}static extendDefaults(e){f(X,e)}static get extendedDefaults(){return X}static get defaults(){return G}static installModule(e){H.prototype.__modules__||(H.prototype.__modules__=[]);const t=H.prototype.__modules__;"function"==typeof e&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach((e=>H.installModule(e))),H):(H.installModule(e),H)}}function Y(e,t,s,i){const r=a();return e.params.createElements&&Object.keys(i).forEach((a=>{if(!s[a]&&!0===s.auto){let n=e.$el.children(`.${i[a]}`)[0];n||(n=r.createElement("div"),n.className=i[a],e.$el.append(n)),s[a]=n,t[a]=n}})),s}function W(e=""){return`.${e.trim().replace(/([\.:!\/])/g,"\\$1").replace(/ /g,".")}`}function R(e){const t=this,{$wrapperEl:s,params:a}=t;if(a.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(let t=0;t=l)return void s.appendSlide(t);let o=n>e?n+1:n;const d=[];for(let t=l-1;t>=e;t-=1){const e=s.slides.eq(t);e.remove(),d.unshift(e)}if("object"==typeof t&&"length"in t){for(let e=0;ee?n+t.length:n}else a.append(t);for(let e=0;e{if(s.params.effect!==t)return;s.classNames.push(`${s.params.containerModifierClass}${t}`),l&&l()&&s.classNames.push(`${s.params.containerModifierClass}3d`);const e=n?n():{};Object.assign(s.params,e),Object.assign(s.originalParams,e)})),a("setTranslate",(()=>{s.params.effect===t&&i()})),a("setTransition",((e,a)=>{s.params.effect===t&&r(a)}))}function U(e,t){return e.transformEl?t.find(e.transformEl).css({"backface-visibility":"hidden","-webkit-backface-visibility":"hidden"}):t}function K({swiper:e,duration:t,transformEl:s,allSlides:a}){const{slides:i,activeIndex:r,$wrapperEl:n}=e;if(e.params.virtualTranslate&&0!==t){let t,l=!1;t=a?s?i.find(s):i:s?i.eq(r).find(s):i.eq(r),t.transitionEnd((()=>{if(l)return;if(!e||e.destroyed)return;l=!0,e.animating=!1;const t=["webkitTransitionEnd","transitionend"];for(let e=0;e`),i.append(r)),r}Object.keys(B).forEach((e=>{Object.keys(B[e]).forEach((t=>{H.prototype[t]=B[e][t]}))})),H.use([function({swiper:e,on:t,emit:s}){const a=r();let i=null;const n=()=>{e&&!e.destroyed&&e.initialized&&(s("beforeResize"),s("resize"))},l=()=>{e&&!e.destroyed&&e.initialized&&s("orientationchange")};t("init",(()=>{e.params.resizeObserver&&void 0!==a.ResizeObserver?e&&!e.destroyed&&e.initialized&&(i=new ResizeObserver((t=>{const{width:s,height:a}=e;let i=s,r=a;t.forEach((({contentBoxSize:t,contentRect:s,target:a})=>{a&&a!==e.el||(i=s?s.width:(t[0]||t).inlineSize,r=s?s.height:(t[0]||t).blockSize)})),i===s&&r===a||n()})),i.observe(e.el)):(a.addEventListener("resize",n),a.addEventListener("orientationchange",l))})),t("destroy",(()=>{i&&i.unobserve&&e.el&&(i.unobserve(e.el),i=null),a.removeEventListener("resize",n),a.removeEventListener("orientationchange",l)}))},function({swiper:e,extendParams:t,on:s,emit:a}){const i=[],n=r(),l=(e,t={})=>{const s=new(n.MutationObserver||n.WebkitMutationObserver)((e=>{if(1===e.length)return void a("observerUpdate",e[0]);const t=function(){a("observerUpdate",e[0])};n.requestAnimationFrame?n.requestAnimationFrame(t):n.setTimeout(t,0)}));s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),i.push(s)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),s("init",(()=>{if(e.params.observer){if(e.params.observeParents){const t=e.$el.parents();for(let e=0;e{i.forEach((e=>{e.disconnect()})),i.splice(0,i.length)}))}]);const J=[function({swiper:e,extendParams:t,on:s}){let a;function i(t,s){const a=e.params.virtual;if(a.cache&&e.virtual.cache[s])return e.virtual.cache[s];const i=a.renderSlide?d(a.renderSlide.call(e,t,s)):d(`
${t}
`);return i.attr("data-swiper-slide-index")||i.attr("data-swiper-slide-index",s),a.cache&&(e.virtual.cache[s]=i),i}function r(t){const{slidesPerView:s,slidesPerGroup:a,centeredSlides:r}=e.params,{addSlidesBefore:n,addSlidesAfter:l}=e.params.virtual,{from:o,to:d,slides:c,slidesGrid:p,offset:u}=e.virtual;e.params.cssMode||e.updateActiveIndex();const h=e.activeIndex||0;let m,f,g;m=e.rtlTranslate?"right":e.isHorizontal()?"left":"top",r?(f=Math.floor(s/2)+a+l,g=Math.floor(s/2)+a+n):(f=s+(a-1)+l,g=a+n);const v=Math.max((h||0)-g,0),w=Math.min((h||0)+f,c.length-1),b=(e.slidesGrid[v]||0)-(e.slidesGrid[0]||0);function x(){e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.lazy&&e.params.lazy.enabled&&e.lazy.load()}if(Object.assign(e.virtual,{from:v,to:w,offset:b,slidesGrid:e.slidesGrid}),o===v&&d===w&&!t)return e.slidesGrid!==p&&b!==u&&e.slides.css(m,`${b}px`),void e.updateProgress();if(e.params.virtual.renderExternal)return e.params.virtual.renderExternal.call(e,{offset:b,from:v,to:w,slides:function(){const e=[];for(let t=v;t<=w;t+=1)e.push(c[t]);return e}()}),void(e.params.virtual.renderExternalUpdate&&x());const y=[],E=[];if(t)e.$wrapperEl.find(`.${e.params.slideClass}`).remove();else for(let t=o;t<=d;t+=1)(tw)&&e.$wrapperEl.find(`.${e.params.slideClass}[data-swiper-slide-index="${t}"]`).remove();for(let e=0;e=v&&e<=w&&(void 0===d||t?E.push(e):(e>d&&E.push(e),e{e.$wrapperEl.append(i(c[t],t))})),y.sort(((e,t)=>t-e)).forEach((t=>{e.$wrapperEl.prepend(i(c[t],t))})),e.$wrapperEl.children(".swiper-slide").css(m,`${b}px`),x()}t({virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,renderExternalUpdate:!0,addSlidesBefore:0,addSlidesAfter:0}}),e.virtual={cache:{},from:void 0,to:void 0,slides:[],offset:0,slidesGrid:[]},s("beforeInit",(()=>{e.params.virtual.enabled&&(e.virtual.slides=e.params.virtual.slides,e.classNames.push(`${e.params.containerModifierClass}virtual`),e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0,e.params.initialSlide||r())})),s("setTranslate",(()=>{e.params.virtual.enabled&&(e.params.cssMode&&!e._immediateVirtual?(clearTimeout(a),a=setTimeout((()=>{r()}),100)):r())})),s("init update resize",(()=>{e.params.virtual.enabled&&e.params.cssMode&&g(e.wrapperEl,"--swiper-virtual-size",`${e.virtualSize}px`)})),Object.assign(e.virtual,{appendSlide:function(t){if("object"==typeof t&&"length"in t)for(let s=0;s{const a=t[e],r=a.attr("data-swiper-slide-index");r&&a.attr("data-swiper-slide-index",parseInt(r,10)+i),s[parseInt(e,10)+i]=a})),e.virtual.cache=s}r(!0),e.slideTo(a,0)},removeSlide:function(t){if(null==t)return;let s=e.activeIndex;if(Array.isArray(t))for(let a=t.length-1;a>=0;a-=1)e.virtual.slides.splice(t[a],1),e.params.virtual.cache&&delete e.virtual.cache[t[a]],t[a]0&&0===e.$el.parents(`.${e.params.slideActiveClass}`).length)return;const a=e.$el,i=a[0].clientWidth,r=a[0].clientHeight,n=l.innerWidth,o=l.innerHeight,d=e.$el.offset();s&&(d.left-=e.$el[0].scrollLeft);const c=[[d.left,d.top],[d.left+i,d.top],[d.left,d.top+r],[d.left+i,d.top+r]];for(let e=0;e=0&&s[0]<=n&&s[1]>=0&&s[1]<=o){if(0===s[0]&&0===s[1])continue;t=!0}}if(!t)return}e.isHorizontal()?((d||c||p||u)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),((c||u)&&!s||(d||p)&&s)&&e.slideNext(),((d||p)&&!s||(c||u)&&s)&&e.slidePrev()):((d||c||h||m)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),(c||m)&&e.slideNext(),(d||h)&&e.slidePrev()),i("keyPress",r)}}function c(){e.keyboard.enabled||(d(n).on("keydown",o),e.keyboard.enabled=!0)}function p(){e.keyboard.enabled&&(d(n).off("keydown",o),e.keyboard.enabled=!1)}e.keyboard={enabled:!1},t({keyboard:{enabled:!1,onlyInViewport:!0,pageUpDown:!0}}),s("init",(()=>{e.params.keyboard.enabled&&c()})),s("destroy",(()=>{e.keyboard.enabled&&p()})),Object.assign(e.keyboard,{enable:c,disable:p})},function({swiper:e,extendParams:t,on:s,emit:a}){const i=r();let n;t({mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarget:"container",thresholdDelta:null,thresholdTime:null}}),e.mousewheel={enabled:!1};let l,o=u();const c=[];function h(){e.enabled&&(e.mouseEntered=!0)}function m(){e.enabled&&(e.mouseEntered=!1)}function f(t){return!(e.params.mousewheel.thresholdDelta&&t.delta=6&&u()-o<60||(t.direction<0?e.isEnd&&!e.params.loop||e.animating||(e.slideNext(),a("scroll",t.raw)):e.isBeginning&&!e.params.loop||e.animating||(e.slidePrev(),a("scroll",t.raw)),o=(new i.Date).getTime(),!1)))}function g(t){let s=t,i=!0;if(!e.enabled)return;const r=e.params.mousewheel;e.params.cssMode&&s.preventDefault();let o=e.$el;if("container"!==e.params.mousewheel.eventsTarget&&(o=d(e.params.mousewheel.eventsTarget)),!e.mouseEntered&&!o[0].contains(s.target)&&!r.releaseOnEdges)return!0;s.originalEvent&&(s=s.originalEvent);let h=0;const m=e.rtlTranslate?-1:1,g=function(e){let t=0,s=0,a=0,i=0;return"detail"in e&&(s=e.detail),"wheelDelta"in e&&(s=-e.wheelDelta/120),"wheelDeltaY"in e&&(s=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=s,s=0),a=10*t,i=10*s,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(a=e.deltaX),e.shiftKey&&!a&&(a=i,i=0),(a||i)&&e.deltaMode&&(1===e.deltaMode?(a*=40,i*=40):(a*=800,i*=800)),a&&!t&&(t=a<1?-1:1),i&&!s&&(s=i<1?-1:1),{spinX:t,spinY:s,pixelX:a,pixelY:i}}(s);if(r.forceToAxis)if(e.isHorizontal()){if(!(Math.abs(g.pixelX)>Math.abs(g.pixelY)))return!0;h=-g.pixelX*m}else{if(!(Math.abs(g.pixelY)>Math.abs(g.pixelX)))return!0;h=-g.pixelY}else h=Math.abs(g.pixelX)>Math.abs(g.pixelY)?-g.pixelX*m:-g.pixelY;if(0===h)return!0;r.invert&&(h=-h);let v=e.getTranslate()+h*r.sensitivity;if(v>=e.minTranslate()&&(v=e.minTranslate()),v<=e.maxTranslate()&&(v=e.maxTranslate()),i=!!e.params.loop||!(v===e.minTranslate()||v===e.maxTranslate()),i&&e.params.nested&&s.stopPropagation(),e.params.freeMode&&e.params.freeMode.enabled){const t={time:u(),delta:Math.abs(h),direction:Math.sign(h)},i=l&&t.time=e.minTranslate()&&(o=e.minTranslate()),o<=e.maxTranslate()&&(o=e.maxTranslate()),e.setTransition(0),e.setTranslate(o),e.updateProgress(),e.updateActiveIndex(),e.updateSlidesClasses(),(!d&&e.isBeginning||!u&&e.isEnd)&&e.updateSlidesClasses(),e.params.freeMode.sticky){clearTimeout(n),n=void 0,c.length>=15&&c.shift();const s=c.length?c[c.length-1]:void 0,a=c[0];if(c.push(t),s&&(t.delta>s.delta||t.direction!==s.direction))c.splice(0);else if(c.length>=15&&t.time-a.time<500&&a.delta-t.delta>=1&&t.delta<=6){const s=h>0?.8:.2;l=t,c.splice(0),n=p((()=>{e.slideToClosest(e.params.speed,!0,void 0,s)}),0)}n||(n=p((()=>{l=t,c.splice(0),e.slideToClosest(e.params.speed,!0,void 0,.5)}),500))}if(i||a("scroll",s),e.params.autoplay&&e.params.autoplayDisableOnInteraction&&e.autoplay.stop(),o===e.minTranslate()||o===e.maxTranslate())return!0}}else{const s={time:u(),delta:Math.abs(h),direction:Math.sign(h),raw:t};c.length>=2&&c.shift();const a=c.length?c[c.length-1]:void 0;if(c.push(s),a?(s.direction!==a.direction||s.delta>a.delta||s.time>a.time+150)&&f(s):f(s),function(t){const s=e.params.mousewheel;if(t.direction<0){if(e.isEnd&&!e.params.loop&&s.releaseOnEdges)return!0}else if(e.isBeginning&&!e.params.loop&&s.releaseOnEdges)return!0;return!1}(s))return!0}return s.preventDefault?s.preventDefault():s.returnValue=!1,!1}function v(t){let s=e.$el;"container"!==e.params.mousewheel.eventsTarget&&(s=d(e.params.mousewheel.eventsTarget)),s[t]("mouseenter",h),s[t]("mouseleave",m),s[t]("wheel",g)}function w(){return e.params.cssMode?(e.wrapperEl.removeEventListener("wheel",g),!0):!e.mousewheel.enabled&&(v("on"),e.mousewheel.enabled=!0,!0)}function b(){return e.params.cssMode?(e.wrapperEl.addEventListener(event,g),!0):!!e.mousewheel.enabled&&(v("off"),e.mousewheel.enabled=!1,!0)}s("init",(()=>{!e.params.mousewheel.enabled&&e.params.cssMode&&b(),e.params.mousewheel.enabled&&w()})),s("destroy",(()=>{e.params.cssMode&&w(),e.mousewheel.enabled&&b()})),Object.assign(e.mousewheel,{enable:w,disable:b})},function({swiper:e,extendParams:t,on:s,emit:a}){function i(t){let s;return t&&(s=d(t),e.params.uniqueNavElements&&"string"==typeof t&&s.length>1&&1===e.$el.find(t).length&&(s=e.$el.find(t))),s}function r(t,s){const a=e.params.navigation;t&&t.length>0&&(t[s?"addClass":"removeClass"](a.disabledClass),t[0]&&"BUTTON"===t[0].tagName&&(t[0].disabled=s),e.params.watchOverflow&&e.enabled&&t[e.isLocked?"addClass":"removeClass"](a.lockClass))}function n(){if(e.params.loop)return;const{$nextEl:t,$prevEl:s}=e.navigation;r(s,e.isBeginning),r(t,e.isEnd)}function l(t){t.preventDefault(),e.isBeginning&&!e.params.loop||e.slidePrev()}function o(t){t.preventDefault(),e.isEnd&&!e.params.loop||e.slideNext()}function c(){const t=e.params.navigation;if(e.params.navigation=Y(e,e.originalParams.navigation,e.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!t.nextEl&&!t.prevEl)return;const s=i(t.nextEl),a=i(t.prevEl);s&&s.length>0&&s.on("click",o),a&&a.length>0&&a.on("click",l),Object.assign(e.navigation,{$nextEl:s,nextEl:s&&s[0],$prevEl:a,prevEl:a&&a[0]}),e.enabled||(s&&s.addClass(t.lockClass),a&&a.addClass(t.lockClass))}function p(){const{$nextEl:t,$prevEl:s}=e.navigation;t&&t.length&&(t.off("click",o),t.removeClass(e.params.navigation.disabledClass)),s&&s.length&&(s.off("click",l),s.removeClass(e.params.navigation.disabledClass))}t({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}}),e.navigation={nextEl:null,$nextEl:null,prevEl:null,$prevEl:null},s("init",(()=>{c(),n()})),s("toEdge fromEdge lock unlock",(()=>{n()})),s("destroy",(()=>{p()})),s("enable disable",(()=>{const{$nextEl:t,$prevEl:s}=e.navigation;t&&t[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass),s&&s[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass)})),s("click",((t,s)=>{const{$nextEl:i,$prevEl:r}=e.navigation,n=s.target;if(e.params.navigation.hideOnClick&&!d(n).is(r)&&!d(n).is(i)){if(e.pagination&&e.params.pagination&&e.params.pagination.clickable&&(e.pagination.el===n||e.pagination.el.contains(n)))return;let t;i?t=i.hasClass(e.params.navigation.hiddenClass):r&&(t=r.hasClass(e.params.navigation.hiddenClass)),a(!0===t?"navigationShow":"navigationHide"),i&&i.toggleClass(e.params.navigation.hiddenClass),r&&r.toggleClass(e.params.navigation.hiddenClass)}})),Object.assign(e.navigation,{update:n,init:c,destroy:p})},function({swiper:e,extendParams:t,on:s,emit:a}){const i="swiper-pagination";let r;t({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${i}-bullet`,bulletActiveClass:`${i}-bullet-active`,modifierClass:`${i}-`,currentClass:`${i}-current`,totalClass:`${i}-total`,hiddenClass:`${i}-hidden`,progressbarFillClass:`${i}-progressbar-fill`,progressbarOppositeClass:`${i}-progressbar-opposite`,clickableClass:`${i}-clickable`,lockClass:`${i}-lock`,horizontalClass:`${i}-horizontal`,verticalClass:`${i}-vertical`}}),e.pagination={el:null,$el:null,bullets:[]};let n=0;function l(){return!e.params.pagination.el||!e.pagination.el||!e.pagination.$el||0===e.pagination.$el.length}function o(t,s){const{bulletActiveClass:a}=e.params.pagination;t[s]().addClass(`${a}-${s}`)[s]().addClass(`${a}-${s}-${s}`)}function c(){const t=e.rtl,s=e.params.pagination;if(l())return;const i=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,c=e.pagination.$el;let p;const u=e.params.loop?Math.ceil((i-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;if(e.params.loop?(p=Math.ceil((e.activeIndex-e.loopedSlides)/e.params.slidesPerGroup),p>i-1-2*e.loopedSlides&&(p-=i-2*e.loopedSlides),p>u-1&&(p-=u),p<0&&"bullets"!==e.params.paginationType&&(p=u+p)):p=void 0!==e.snapIndex?e.snapIndex:e.activeIndex||0,"bullets"===s.type&&e.pagination.bullets&&e.pagination.bullets.length>0){const a=e.pagination.bullets;let i,l,u;if(s.dynamicBullets&&(r=a.eq(0)[e.isHorizontal()?"outerWidth":"outerHeight"](!0),c.css(e.isHorizontal()?"width":"height",r*(s.dynamicMainBullets+4)+"px"),s.dynamicMainBullets>1&&void 0!==e.previousIndex&&(n+=p-e.previousIndex,n>s.dynamicMainBullets-1?n=s.dynamicMainBullets-1:n<0&&(n=0)),i=p-n,l=i+(Math.min(a.length,s.dynamicMainBullets)-1),u=(l+i)/2),a.removeClass(["","-next","-next-next","-prev","-prev-prev","-main"].map((e=>`${s.bulletActiveClass}${e}`)).join(" ")),c.length>1)a.each((e=>{const t=d(e),a=t.index();a===p&&t.addClass(s.bulletActiveClass),s.dynamicBullets&&(a>=i&&a<=l&&t.addClass(`${s.bulletActiveClass}-main`),a===i&&o(t,"prev"),a===l&&o(t,"next"))}));else{const t=a.eq(p),r=t.index();if(t.addClass(s.bulletActiveClass),s.dynamicBullets){const t=a.eq(i),n=a.eq(l);for(let e=i;e<=l;e+=1)a.eq(e).addClass(`${s.bulletActiveClass}-main`);if(e.params.loop)if(r>=a.length-s.dynamicMainBullets){for(let e=s.dynamicMainBullets;e>=0;e-=1)a.eq(a.length-e).addClass(`${s.bulletActiveClass}-main`);a.eq(a.length-s.dynamicMainBullets-1).addClass(`${s.bulletActiveClass}-prev`)}else o(t,"prev"),o(n,"next");else o(t,"prev"),o(n,"next")}}if(s.dynamicBullets){const i=Math.min(a.length,s.dynamicMainBullets+4),n=(r*i-r)/2-u*r,l=t?"right":"left";a.css(e.isHorizontal()?l:"top",`${n}px`)}}if("fraction"===s.type&&(c.find(W(s.currentClass)).text(s.formatFractionCurrent(p+1)),c.find(W(s.totalClass)).text(s.formatFractionTotal(u))),"progressbar"===s.type){let t;t=s.progressbarOpposite?e.isHorizontal()?"vertical":"horizontal":e.isHorizontal()?"horizontal":"vertical";const a=(p+1)/u;let i=1,r=1;"horizontal"===t?i=a:r=a,c.find(W(s.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${i}) scaleY(${r})`).transition(e.params.speed)}"custom"===s.type&&s.renderCustom?(c.html(s.renderCustom(e,p+1,u)),a("paginationRender",c[0])):a("paginationUpdate",c[0]),e.params.watchOverflow&&e.enabled&&c[e.isLocked?"addClass":"removeClass"](s.lockClass)}function p(){const t=e.params.pagination;if(l())return;const s=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,i=e.pagination.$el;let r="";if("bullets"===t.type){let a=e.params.loop?Math.ceil((s-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;e.params.freeMode&&e.params.freeMode.enabled&&!e.params.loop&&a>s&&(a=s);for(let s=0;s`;i.html(r),e.pagination.bullets=i.find(W(t.bulletClass))}"fraction"===t.type&&(r=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):` / `,i.html(r)),"progressbar"===t.type&&(r=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):``,i.html(r)),"custom"!==t.type&&a("paginationRender",e.pagination.$el[0])}function u(){e.params.pagination=Y(e,e.originalParams.pagination,e.params.pagination,{el:"swiper-pagination"});const t=e.params.pagination;if(!t.el)return;let s=d(t.el);0!==s.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&s.length>1&&(s=e.$el.find(t.el),s.length>1&&(s=s.filter((t=>d(t).parents(".swiper")[0]===e.el)))),"bullets"===t.type&&t.clickable&&s.addClass(t.clickableClass),s.addClass(t.modifierClass+t.type),s.addClass(t.modifierClass+e.params.direction),"bullets"===t.type&&t.dynamicBullets&&(s.addClass(`${t.modifierClass}${t.type}-dynamic`),n=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&s.addClass(t.progressbarOppositeClass),t.clickable&&s.on("click",W(t.bulletClass),(function(t){t.preventDefault();let s=d(this).index()*e.params.slidesPerGroup;e.params.loop&&(s+=e.loopedSlides),e.slideTo(s)})),Object.assign(e.pagination,{$el:s,el:s[0]}),e.enabled||s.addClass(t.lockClass))}function h(){const t=e.params.pagination;if(l())return;const s=e.pagination.$el;s.removeClass(t.hiddenClass),s.removeClass(t.modifierClass+t.type),s.removeClass(t.modifierClass+e.params.direction),e.pagination.bullets&&e.pagination.bullets.removeClass&&e.pagination.bullets.removeClass(t.bulletActiveClass),t.clickable&&s.off("click",W(t.bulletClass))}s("init",(()=>{u(),p(),c()})),s("activeIndexChange",(()=>{(e.params.loop||void 0===e.snapIndex)&&c()})),s("snapIndexChange",(()=>{e.params.loop||c()})),s("slidesLengthChange",(()=>{e.params.loop&&(p(),c())})),s("snapGridLengthChange",(()=>{e.params.loop||(p(),c())})),s("destroy",(()=>{h()})),s("enable disable",(()=>{const{$el:t}=e.pagination;t&&t[e.enabled?"removeClass":"addClass"](e.params.pagination.lockClass)})),s("lock unlock",(()=>{c()})),s("click",((t,s)=>{const i=s.target,{$el:r}=e.pagination;if(e.params.pagination.el&&e.params.pagination.hideOnClick&&r.length>0&&!d(i).hasClass(e.params.pagination.bulletClass)){if(e.navigation&&(e.navigation.nextEl&&i===e.navigation.nextEl||e.navigation.prevEl&&i===e.navigation.prevEl))return;const t=r.hasClass(e.params.pagination.hiddenClass);a(!0===t?"paginationShow":"paginationHide"),r.toggleClass(e.params.pagination.hiddenClass)}})),Object.assign(e.pagination,{render:p,update:c,init:u,destroy:h})},function({swiper:e,extendParams:t,on:s,emit:i}){const r=a();let n,l,o,c,u=!1,h=null,m=null;function f(){if(!e.params.scrollbar.el||!e.scrollbar.el)return;const{scrollbar:t,rtlTranslate:s,progress:a}=e,{$dragEl:i,$el:r}=t,n=e.params.scrollbar;let d=l,c=(o-l)*a;s?(c=-c,c>0?(d=l-c,c=0):-c+l>o&&(d=o+c)):c<0?(d=l+c,c=0):c+l>o&&(d=o-c),e.isHorizontal()?(i.transform(`translate3d(${c}px, 0, 0)`),i[0].style.width=`${d}px`):(i.transform(`translate3d(0px, ${c}px, 0)`),i[0].style.height=`${d}px`),n.hide&&(clearTimeout(h),r[0].style.opacity=1,h=setTimeout((()=>{r[0].style.opacity=0,r.transition(400)}),1e3))}function g(){if(!e.params.scrollbar.el||!e.scrollbar.el)return;const{scrollbar:t}=e,{$dragEl:s,$el:a}=t;s[0].style.width="",s[0].style.height="",o=e.isHorizontal()?a[0].offsetWidth:a[0].offsetHeight,c=e.size/(e.virtualSize+e.params.slidesOffsetBefore-(e.params.centeredSlides?e.snapGrid[0]:0)),l="auto"===e.params.scrollbar.dragSize?o*c:parseInt(e.params.scrollbar.dragSize,10),e.isHorizontal()?s[0].style.width=`${l}px`:s[0].style.height=`${l}px`,a[0].style.display=c>=1?"none":"",e.params.scrollbar.hide&&(a[0].style.opacity=0),e.params.watchOverflow&&e.enabled&&t.$el[e.isLocked?"addClass":"removeClass"](e.params.scrollbar.lockClass)}function v(t){return e.isHorizontal()?"touchstart"===t.type||"touchmove"===t.type?t.targetTouches[0].clientX:t.clientX:"touchstart"===t.type||"touchmove"===t.type?t.targetTouches[0].clientY:t.clientY}function w(t){const{scrollbar:s,rtlTranslate:a}=e,{$el:i}=s;let r;r=(v(t)-i.offset()[e.isHorizontal()?"left":"top"]-(null!==n?n:l/2))/(o-l),r=Math.max(Math.min(r,1),0),a&&(r=1-r);const d=e.minTranslate()+(e.maxTranslate()-e.minTranslate())*r;e.updateProgress(d),e.setTranslate(d),e.updateActiveIndex(),e.updateSlidesClasses()}function b(t){const s=e.params.scrollbar,{scrollbar:a,$wrapperEl:r}=e,{$el:l,$dragEl:o}=a;u=!0,n=t.target===o[0]||t.target===o?v(t)-t.target.getBoundingClientRect()[e.isHorizontal()?"left":"top"]:null,t.preventDefault(),t.stopPropagation(),r.transition(100),o.transition(100),w(t),clearTimeout(m),l.transition(0),s.hide&&l.css("opacity",1),e.params.cssMode&&e.$wrapperEl.css("scroll-snap-type","none"),i("scrollbarDragStart",t)}function x(t){const{scrollbar:s,$wrapperEl:a}=e,{$el:r,$dragEl:n}=s;u&&(t.preventDefault?t.preventDefault():t.returnValue=!1,w(t),a.transition(0),r.transition(0),n.transition(0),i("scrollbarDragMove",t))}function y(t){const s=e.params.scrollbar,{scrollbar:a,$wrapperEl:r}=e,{$el:n}=a;u&&(u=!1,e.params.cssMode&&(e.$wrapperEl.css("scroll-snap-type",""),r.transition("")),s.hide&&(clearTimeout(m),m=p((()=>{n.css("opacity",0),n.transition(400)}),1e3)),i("scrollbarDragEnd",t),s.snapOnRelease&&e.slideToClosest())}function E(t){const{scrollbar:s,touchEventsTouch:a,touchEventsDesktop:i,params:n,support:l}=e,o=s.$el[0],d=!(!l.passiveListener||!n.passiveListeners)&&{passive:!1,capture:!1},c=!(!l.passiveListener||!n.passiveListeners)&&{passive:!0,capture:!1};if(!o)return;const p="on"===t?"addEventListener":"removeEventListener";l.touch?(o[p](a.start,b,d),o[p](a.move,x,d),o[p](a.end,y,c)):(o[p](i.start,b,d),r[p](i.move,x,d),r[p](i.end,y,c))}function T(){const{scrollbar:t,$el:s}=e;e.params.scrollbar=Y(e,e.originalParams.scrollbar,e.params.scrollbar,{el:"swiper-scrollbar"});const a=e.params.scrollbar;if(!a.el)return;let i=d(a.el);e.params.uniqueNavElements&&"string"==typeof a.el&&i.length>1&&1===s.find(a.el).length&&(i=s.find(a.el));let r=i.find(`.${e.params.scrollbar.dragClass}`);0===r.length&&(r=d(`
`),i.append(r)),Object.assign(t,{$el:i,el:i[0],$dragEl:r,dragEl:r[0]}),a.draggable&&e.params.scrollbar.el&&E("on"),i&&i[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)}function C(){e.params.scrollbar.el&&E("off")}t({scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}}),e.scrollbar={el:null,dragEl:null,$el:null,$dragEl:null},s("init",(()=>{T(),g(),f()})),s("update resize observerUpdate lock unlock",(()=>{g()})),s("setTranslate",(()=>{f()})),s("setTransition",((t,s)=>{!function(t){e.params.scrollbar.el&&e.scrollbar.el&&e.scrollbar.$dragEl.transition(t)}(s)})),s("enable disable",(()=>{const{$el:t}=e.scrollbar;t&&t[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)})),s("destroy",(()=>{C()})),Object.assign(e.scrollbar,{updateSize:g,setTranslate:f,init:T,destroy:C})},function({swiper:e,extendParams:t,on:s}){t({parallax:{enabled:!1}});const a=(t,s)=>{const{rtl:a}=e,i=d(t),r=a?-1:1,n=i.attr("data-swiper-parallax")||"0";let l=i.attr("data-swiper-parallax-x"),o=i.attr("data-swiper-parallax-y");const c=i.attr("data-swiper-parallax-scale"),p=i.attr("data-swiper-parallax-opacity");if(l||o?(l=l||"0",o=o||"0"):e.isHorizontal()?(l=n,o="0"):(o=n,l="0"),l=l.indexOf("%")>=0?parseInt(l,10)*s*r+"%":l*s*r+"px",o=o.indexOf("%")>=0?parseInt(o,10)*s+"%":o*s+"px",null!=p){const e=p-(p-1)*(1-Math.abs(s));i[0].style.opacity=e}if(null==c)i.transform(`translate3d(${l}, ${o}, 0px)`);else{const e=c-(c-1)*(1-Math.abs(s));i.transform(`translate3d(${l}, ${o}, 0px) scale(${e})`)}},i=()=>{const{$el:t,slides:s,progress:i,snapGrid:r}=e;t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{a(e,i)})),s.each(((t,s)=>{let n=t.progress;e.params.slidesPerGroup>1&&"auto"!==e.params.slidesPerView&&(n+=Math.ceil(s/2)-i*(r.length-1)),n=Math.min(Math.max(n,-1),1),d(t).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{a(e,n)}))}))};s("beforeInit",(()=>{e.params.parallax.enabled&&(e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0)})),s("init",(()=>{e.params.parallax.enabled&&i()})),s("setTranslate",(()=>{e.params.parallax.enabled&&i()})),s("setTransition",((t,s)=>{e.params.parallax.enabled&&((t=e.params.speed)=>{const{$el:s}=e;s.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{const s=d(e);let a=parseInt(s.attr("data-swiper-parallax-duration"),10)||t;0===t&&(a=0),s.transition(a)}))})(s)}))},function({swiper:e,extendParams:t,on:s,emit:a}){const i=r();t({zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}}),e.zoom={enabled:!1};let n,l,o,c=1,p=!1;const u={$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},m={isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},f={x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0};let g=1;function v(e){if(e.targetTouches.length<2)return 1;const t=e.targetTouches[0].pageX,s=e.targetTouches[0].pageY,a=e.targetTouches[1].pageX,i=e.targetTouches[1].pageY;return Math.sqrt((a-t)**2+(i-s)**2)}function w(t){const s=e.support,a=e.params.zoom;if(l=!1,o=!1,!s.gestures){if("touchstart"!==t.type||"touchstart"===t.type&&t.targetTouches.length<2)return;l=!0,u.scaleStart=v(t)}u.$slideEl&&u.$slideEl.length||(u.$slideEl=d(t.target).closest(`.${e.params.slideClass}`),0===u.$slideEl.length&&(u.$slideEl=e.slides.eq(e.activeIndex)),u.$imageEl=u.$slideEl.find(`.${a.containerClass}`).eq(0).find("img, svg, canvas, picture, .swiper-zoom-target"),u.$imageWrapEl=u.$imageEl.parent(`.${a.containerClass}`),u.maxRatio=u.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,0!==u.$imageWrapEl.length)?(u.$imageEl&&u.$imageEl.transition(0),p=!0):u.$imageEl=void 0}function b(t){const s=e.support,a=e.params.zoom,i=e.zoom;if(!s.gestures){if("touchmove"!==t.type||"touchmove"===t.type&&t.targetTouches.length<2)return;o=!0,u.scaleMove=v(t)}u.$imageEl&&0!==u.$imageEl.length?(s.gestures?i.scale=t.scale*c:i.scale=u.scaleMove/u.scaleStart*c,i.scale>u.maxRatio&&(i.scale=u.maxRatio-1+(i.scale-u.maxRatio+1)**.5),i.scalem.touchesStart.x))return void(m.isTouched=!1);if(!e.isHorizontal()&&(Math.floor(m.minY)===Math.floor(m.startY)&&m.touchesCurrent.ym.touchesStart.y))return void(m.isTouched=!1)}t.cancelable&&t.preventDefault(),t.stopPropagation(),m.isMoved=!0,m.currentX=m.touchesCurrent.x-m.touchesStart.x+m.startX,m.currentY=m.touchesCurrent.y-m.touchesStart.y+m.startY,m.currentXm.maxX&&(m.currentX=m.maxX-1+(m.currentX-m.maxX+1)**.8),m.currentYm.maxY&&(m.currentY=m.maxY-1+(m.currentY-m.maxY+1)**.8),f.prevPositionX||(f.prevPositionX=m.touchesCurrent.x),f.prevPositionY||(f.prevPositionY=m.touchesCurrent.y),f.prevTime||(f.prevTime=Date.now()),f.x=(m.touchesCurrent.x-f.prevPositionX)/(Date.now()-f.prevTime)/2,f.y=(m.touchesCurrent.y-f.prevPositionY)/(Date.now()-f.prevTime)/2,Math.abs(m.touchesCurrent.x-f.prevPositionX)<2&&(f.x=0),Math.abs(m.touchesCurrent.y-f.prevPositionY)<2&&(f.y=0),f.prevPositionX=m.touchesCurrent.x,f.prevPositionY=m.touchesCurrent.y,f.prevTime=Date.now(),u.$imageWrapEl.transform(`translate3d(${m.currentX}px, ${m.currentY}px,0)`)}}function E(){const t=e.zoom;u.$slideEl&&e.previousIndex!==e.activeIndex&&(u.$imageEl&&u.$imageEl.transform("translate3d(0,0,0) scale(1)"),u.$imageWrapEl&&u.$imageWrapEl.transform("translate3d(0,0,0)"),t.scale=1,c=1,u.$slideEl=void 0,u.$imageEl=void 0,u.$imageWrapEl=void 0)}function T(t){const s=e.zoom,a=e.params.zoom;if(u.$slideEl||(t&&t.target&&(u.$slideEl=d(t.target).closest(`.${e.params.slideClass}`)),u.$slideEl||(e.params.virtual&&e.params.virtual.enabled&&e.virtual?u.$slideEl=e.$wrapperEl.children(`.${e.params.slideActiveClass}`):u.$slideEl=e.slides.eq(e.activeIndex)),u.$imageEl=u.$slideEl.find(`.${a.containerClass}`).eq(0).find("img, svg, canvas, picture, .swiper-zoom-target"),u.$imageWrapEl=u.$imageEl.parent(`.${a.containerClass}`)),!u.$imageEl||0===u.$imageEl.length||!u.$imageWrapEl||0===u.$imageWrapEl.length)return;let r,n,l,o,p,h,f,g,v,w,b,x,y,E,T,C,$,S;e.params.cssMode&&(e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.touchAction="none"),u.$slideEl.addClass(`${a.zoomedSlideClass}`),void 0===m.touchesStart.x&&t?(r="touchend"===t.type?t.changedTouches[0].pageX:t.pageX,n="touchend"===t.type?t.changedTouches[0].pageY:t.pageY):(r=m.touchesStart.x,n=m.touchesStart.y),s.scale=u.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,c=u.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,t?($=u.$slideEl[0].offsetWidth,S=u.$slideEl[0].offsetHeight,l=u.$slideEl.offset().left+i.scrollX,o=u.$slideEl.offset().top+i.scrollY,p=l+$/2-r,h=o+S/2-n,v=u.$imageEl[0].offsetWidth,w=u.$imageEl[0].offsetHeight,b=v*s.scale,x=w*s.scale,y=Math.min($/2-b/2,0),E=Math.min(S/2-x/2,0),T=-y,C=-E,f=p*s.scale,g=h*s.scale,fT&&(f=T),gC&&(g=C)):(f=0,g=0),u.$imageWrapEl.transition(300).transform(`translate3d(${f}px, ${g}px,0)`),u.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${s.scale})`)}function C(){const t=e.zoom,s=e.params.zoom;u.$slideEl||(e.params.virtual&&e.params.virtual.enabled&&e.virtual?u.$slideEl=e.$wrapperEl.children(`.${e.params.slideActiveClass}`):u.$slideEl=e.slides.eq(e.activeIndex),u.$imageEl=u.$slideEl.find(`.${s.containerClass}`).eq(0).find("img, svg, canvas, picture, .swiper-zoom-target"),u.$imageWrapEl=u.$imageEl.parent(`.${s.containerClass}`)),u.$imageEl&&0!==u.$imageEl.length&&u.$imageWrapEl&&0!==u.$imageWrapEl.length&&(e.params.cssMode&&(e.wrapperEl.style.overflow="",e.wrapperEl.style.touchAction=""),t.scale=1,c=1,u.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),u.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),u.$slideEl.removeClass(`${s.zoomedSlideClass}`),u.$slideEl=void 0)}function $(t){const s=e.zoom;s.scale&&1!==s.scale?C():T(t)}function S(){const t=e.support;return{passiveListener:!("touchstart"!==e.touchEvents.start||!t.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1},activeListenerWithCapture:!t.passiveListener||{passive:!1,capture:!0}}}function M(){return`.${e.params.slideClass}`}function P(t){const{passiveListener:s}=S(),a=M();e.$wrapperEl[t]("gesturestart",a,w,s),e.$wrapperEl[t]("gesturechange",a,b,s),e.$wrapperEl[t]("gestureend",a,x,s)}function k(){n||(n=!0,P("on"))}function z(){n&&(n=!1,P("off"))}function O(){const t=e.zoom;if(t.enabled)return;t.enabled=!0;const s=e.support,{passiveListener:a,activeListenerWithCapture:i}=S(),r=M();s.gestures?(e.$wrapperEl.on(e.touchEvents.start,k,a),e.$wrapperEl.on(e.touchEvents.end,z,a)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.on(e.touchEvents.start,r,w,a),e.$wrapperEl.on(e.touchEvents.move,r,b,i),e.$wrapperEl.on(e.touchEvents.end,r,x,a),e.touchEvents.cancel&&e.$wrapperEl.on(e.touchEvents.cancel,r,x,a)),e.$wrapperEl.on(e.touchEvents.move,`.${e.params.zoom.containerClass}`,y,i)}function I(){const t=e.zoom;if(!t.enabled)return;const s=e.support;t.enabled=!1;const{passiveListener:a,activeListenerWithCapture:i}=S(),r=M();s.gestures?(e.$wrapperEl.off(e.touchEvents.start,k,a),e.$wrapperEl.off(e.touchEvents.end,z,a)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.off(e.touchEvents.start,r,w,a),e.$wrapperEl.off(e.touchEvents.move,r,b,i),e.$wrapperEl.off(e.touchEvents.end,r,x,a),e.touchEvents.cancel&&e.$wrapperEl.off(e.touchEvents.cancel,r,x,a)),e.$wrapperEl.off(e.touchEvents.move,`.${e.params.zoom.containerClass}`,y,i)}Object.defineProperty(e.zoom,"scale",{get:()=>g,set(e){if(g!==e){const t=u.$imageEl?u.$imageEl[0]:void 0,s=u.$slideEl?u.$slideEl[0]:void 0;a("zoomChange",e,t,s)}g=e}}),s("init",(()=>{e.params.zoom.enabled&&O()})),s("destroy",(()=>{I()})),s("touchStart",((t,s)=>{e.zoom.enabled&&function(t){const s=e.device;u.$imageEl&&0!==u.$imageEl.length&&(m.isTouched||(s.android&&t.cancelable&&t.preventDefault(),m.isTouched=!0,m.touchesStart.x="touchstart"===t.type?t.targetTouches[0].pageX:t.pageX,m.touchesStart.y="touchstart"===t.type?t.targetTouches[0].pageY:t.pageY))}(s)})),s("touchEnd",((t,s)=>{e.zoom.enabled&&function(){const t=e.zoom;if(!u.$imageEl||0===u.$imageEl.length)return;if(!m.isTouched||!m.isMoved)return m.isTouched=!1,void(m.isMoved=!1);m.isTouched=!1,m.isMoved=!1;let s=300,a=300;const i=f.x*s,r=m.currentX+i,n=f.y*a,l=m.currentY+n;0!==f.x&&(s=Math.abs((r-m.currentX)/f.x)),0!==f.y&&(a=Math.abs((l-m.currentY)/f.y));const o=Math.max(s,a);m.currentX=r,m.currentY=l;const d=m.width*t.scale,c=m.height*t.scale;m.minX=Math.min(u.slideWidth/2-d/2,0),m.maxX=-m.minX,m.minY=Math.min(u.slideHeight/2-c/2,0),m.maxY=-m.minY,m.currentX=Math.max(Math.min(m.currentX,m.maxX),m.minX),m.currentY=Math.max(Math.min(m.currentY,m.maxY),m.minY),u.$imageWrapEl.transition(o).transform(`translate3d(${m.currentX}px, ${m.currentY}px,0)`)}()})),s("doubleTap",((t,s)=>{!e.animating&&e.params.zoom.enabled&&e.zoom.enabled&&e.params.zoom.toggle&&$(s)})),s("transitionEnd",(()=>{e.zoom.enabled&&e.params.zoom.enabled&&E()})),s("slideChange",(()=>{e.zoom.enabled&&e.params.zoom.enabled&&e.params.cssMode&&E()})),Object.assign(e.zoom,{enable:O,disable:I,in:T,out:C,toggle:$})},function({swiper:e,extendParams:t,on:s,emit:a}){t({lazy:{checkInView:!1,enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,scrollingElement:"",elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}}),e.lazy={};let i=!1,n=!1;function l(t,s=!0){const i=e.params.lazy;if(void 0===t)return;if(0===e.slides.length)return;const r=e.virtual&&e.params.virtual.enabled?e.$wrapperEl.children(`.${e.params.slideClass}[data-swiper-slide-index="${t}"]`):e.slides.eq(t),n=r.find(`.${i.elementClass}:not(.${i.loadedClass}):not(.${i.loadingClass})`);!r.hasClass(i.elementClass)||r.hasClass(i.loadedClass)||r.hasClass(i.loadingClass)||n.push(r[0]),0!==n.length&&n.each((t=>{const n=d(t);n.addClass(i.loadingClass);const o=n.attr("data-background"),c=n.attr("data-src"),p=n.attr("data-srcset"),u=n.attr("data-sizes"),h=n.parent("picture");e.loadImage(n[0],c||o,p,u,!1,(()=>{if(null!=e&&e&&(!e||e.params)&&!e.destroyed){if(o?(n.css("background-image",`url("${o}")`),n.removeAttr("data-background")):(p&&(n.attr("srcset",p),n.removeAttr("data-srcset")),u&&(n.attr("sizes",u),n.removeAttr("data-sizes")),h.length&&h.children("source").each((e=>{const t=d(e);t.attr("data-srcset")&&(t.attr("srcset",t.attr("data-srcset")),t.removeAttr("data-srcset"))})),c&&(n.attr("src",c),n.removeAttr("data-src"))),n.addClass(i.loadedClass).removeClass(i.loadingClass),r.find(`.${i.preloaderClass}`).remove(),e.params.loop&&s){const t=r.attr("data-swiper-slide-index");if(r.hasClass(e.params.slideDuplicateClass)){l(e.$wrapperEl.children(`[data-swiper-slide-index="${t}"]:not(.${e.params.slideDuplicateClass})`).index(),!1)}else{l(e.$wrapperEl.children(`.${e.params.slideDuplicateClass}[data-swiper-slide-index="${t}"]`).index(),!1)}}a("lazyImageReady",r[0],n[0]),e.params.autoHeight&&e.updateAutoHeight()}})),a("lazyImageLoad",r[0],n[0])}))}function o(){const{$wrapperEl:t,params:s,slides:a,activeIndex:i}=e,r=e.virtual&&s.virtual.enabled,o=s.lazy;let c=s.slidesPerView;function p(e){if(r){if(t.children(`.${s.slideClass}[data-swiper-slide-index="${e}"]`).length)return!0}else if(a[e])return!0;return!1}function u(e){return r?d(e).attr("data-swiper-slide-index"):d(e).index()}if("auto"===c&&(c=0),n||(n=!0),e.params.watchSlidesProgress)t.children(`.${s.slideVisibleClass}`).each((e=>{l(r?d(e).attr("data-swiper-slide-index"):d(e).index())}));else if(c>1)for(let e=i;e1||o.loadPrevNextAmount&&o.loadPrevNextAmount>1){const e=o.loadPrevNextAmount,t=c,s=Math.min(i+t+Math.max(e,t),a.length),r=Math.max(i-Math.max(t,e),0);for(let e=i+c;e0&&l(u(e));const a=t.children(`.${s.slidePrevClass}`);a.length>0&&l(u(a))}}function c(){const t=r();if(!e||e.destroyed)return;const s=e.params.lazy.scrollingElement?d(e.params.lazy.scrollingElement):d(t),a=s[0]===t,n=a?t.innerWidth:s[0].offsetWidth,l=a?t.innerHeight:s[0].offsetHeight,p=e.$el.offset(),{rtlTranslate:u}=e;let h=!1;u&&(p.left-=e.$el[0].scrollLeft);const m=[[p.left,p.top],[p.left+e.width,p.top],[p.left,p.top+e.height],[p.left+e.width,p.top+e.height]];for(let e=0;e=0&&t[0]<=n&&t[1]>=0&&t[1]<=l){if(0===t[0]&&0===t[1])continue;h=!0}}const f=!("touchstart"!==e.touchEvents.start||!e.support.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1};h?(o(),s.off("scroll",c,f)):i||(i=!0,s.on("scroll",c,f))}s("beforeInit",(()=>{e.params.lazy.enabled&&e.params.preloadImages&&(e.params.preloadImages=!1)})),s("init",(()=>{e.params.lazy.enabled&&(e.params.lazy.checkInView?c():o())})),s("scroll",(()=>{e.params.freeMode&&e.params.freeMode.enabled&&!e.params.freeMode.sticky&&o()})),s("scrollbarDragMove resize _freeModeNoMomentumRelease",(()=>{e.params.lazy.enabled&&(e.params.lazy.checkInView?c():o())})),s("transitionStart",(()=>{e.params.lazy.enabled&&(e.params.lazy.loadOnTransitionStart||!e.params.lazy.loadOnTransitionStart&&!n)&&(e.params.lazy.checkInView?c():o())})),s("transitionEnd",(()=>{e.params.lazy.enabled&&!e.params.lazy.loadOnTransitionStart&&(e.params.lazy.checkInView?c():o())})),s("slideChange",(()=>{const{lazy:t,cssMode:s,watchSlidesProgress:a,touchReleaseOnEdges:i,resistanceRatio:r}=e.params;t.enabled&&(s||a&&(i||0===r))&&o()})),Object.assign(e.lazy,{load:o,loadInSlide:l})},function({swiper:e,extendParams:t,on:s}){function a(e,t){const s=function(){let e,t,s;return(a,i)=>{for(t=-1,e=a.length;e-t>1;)s=e+t>>1,a[s]<=i?t=s:e=s;return e}}();let a,i;return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(i=s(this.x,e),a=i-1,(e-this.x[a])*(this.y[i]-this.y[a])/(this.x[i]-this.x[a])+this.y[a]):0},this}function i(){e.controller.control&&e.controller.spline&&(e.controller.spline=void 0,delete e.controller.spline)}t({controller:{control:void 0,inverse:!1,by:"slide"}}),e.controller={control:void 0},s("beforeInit",(()=>{e.controller.control=e.params.controller.control})),s("update",(()=>{i()})),s("resize",(()=>{i()})),s("observerUpdate",(()=>{i()})),s("setTranslate",((t,s,a)=>{e.controller.control&&e.controller.setTranslate(s,a)})),s("setTransition",((t,s,a)=>{e.controller.control&&e.controller.setTransition(s,a)})),Object.assign(e.controller,{setTranslate:function(t,s){const i=e.controller.control;let r,n;const l=e.constructor;function o(t){const s=e.rtlTranslate?-e.translate:e.translate;"slide"===e.params.controller.by&&(!function(t){e.controller.spline||(e.controller.spline=e.params.loop?new a(e.slidesGrid,t.slidesGrid):new a(e.snapGrid,t.snapGrid))}(t),n=-e.controller.spline.interpolate(-s)),n&&"container"!==e.params.controller.by||(r=(t.maxTranslate()-t.minTranslate())/(e.maxTranslate()-e.minTranslate()),n=(s-e.minTranslate())*r+t.minTranslate()),e.params.controller.inverse&&(n=t.maxTranslate()-n),t.updateProgress(n),t.setTranslate(n,e),t.updateActiveIndex(),t.updateSlidesClasses()}if(Array.isArray(i))for(let e=0;e{s.updateAutoHeight()})),s.$wrapperEl.transitionEnd((()=>{i&&(s.params.loop&&"slide"===e.params.controller.by&&s.loopFix(),s.transitionEnd())})))}if(Array.isArray(i))for(r=0;r0&&(e.isBeginning?(p(s),n(s)):(u(s),r(s))),t&&t.length>0&&(e.isEnd?(p(t),n(t)):(u(t),r(t)))}function f(){return e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length}const g=(e,t,s)=>{r(e),"BUTTON"!==e[0].tagName&&(l(e,"button"),e.on("keydown",h)),c(e,s),function(e,t){e.attr("aria-controls",t)}(e,t)};function v(){const t=e.params.a11y;e.$el.append(a);const s=e.$el;t.containerRoleDescriptionMessage&&o(s,t.containerRoleDescriptionMessage),t.containerMessage&&c(s,t.containerMessage);const i=e.$wrapperEl,r=i.attr("id")||`swiper-wrapper-${function(e=16){return"x".repeat(e).replace(/x/g,(()=>Math.round(16*Math.random()).toString(16)))}(16)}`,n=e.params.autoplay&&e.params.autoplay.enabled?"off":"polite";var p;p=r,i.attr("id",p),function(e,t){e.attr("aria-live",t)}(i,n),t.itemRoleDescriptionMessage&&o(d(e.slides),t.itemRoleDescriptionMessage),l(d(e.slides),t.slideRole);const u=e.params.loop?e.slides.filter((t=>!t.classList.contains(e.params.slideDuplicateClass))).length:e.slides.length;let m,v;e.slides.each(((s,a)=>{const i=d(s),r=e.params.loop?parseInt(i.attr("data-swiper-slide-index"),10):a;c(i,t.slideLabelMessage.replace(/\{\{index\}\}/,r+1).replace(/\{\{slidesLength\}\}/,u))})),e.navigation&&e.navigation.$nextEl&&(m=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(v=e.navigation.$prevEl),m&&m.length&&g(m,r,t.nextSlideMessage),v&&v.length&&g(v,r,t.prevSlideMessage),f()&&e.pagination.$el.on("keydown",W(e.params.pagination.bulletClass),h)}s("beforeInit",(()=>{a=d(``)})),s("afterInit",(()=>{e.params.a11y.enabled&&(v(),m())})),s("toEdge",(()=>{e.params.a11y.enabled&&m()})),s("fromEdge",(()=>{e.params.a11y.enabled&&m()})),s("paginationUpdate",(()=>{e.params.a11y.enabled&&function(){const t=e.params.a11y;f()&&e.pagination.bullets.each((s=>{const a=d(s);r(a),e.params.pagination.renderBullet||(l(a,"button"),c(a,t.paginationBulletMessage.replace(/\{\{index\}\}/,a.index()+1)))}))}()})),s("destroy",(()=>{e.params.a11y.enabled&&function(){let t,s;a&&a.length>0&&a.remove(),e.navigation&&e.navigation.$nextEl&&(t=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(s=e.navigation.$prevEl),t&&t.off("keydown",h),s&&s.off("keydown",h),f()&&e.pagination.$el.off("keydown",W(e.params.pagination.bulletClass),h)}()}))},function({swiper:e,extendParams:t,on:s}){t({history:{enabled:!1,root:"",replaceState:!1,key:"slides"}});let a=!1,i={};const n=e=>e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,""),l=e=>{const t=r();let s;s=e?new URL(e):t.location;const a=s.pathname.slice(1).split("/").filter((e=>""!==e)),i=a.length;return{key:a[i-2],value:a[i-1]}},o=(t,s)=>{const i=r();if(!a||!e.params.history.enabled)return;let l;l=e.params.url?new URL(e.params.url):i.location;const o=e.slides.eq(s);let d=n(o.attr("data-history"));if(e.params.history.root.length>0){let s=e.params.history.root;"/"===s[s.length-1]&&(s=s.slice(0,s.length-1)),d=`${s}/${t}/${d}`}else l.pathname.includes(t)||(d=`${t}/${d}`);const c=i.history.state;c&&c.value===d||(e.params.history.replaceState?i.history.replaceState({value:d},null,d):i.history.pushState({value:d},null,d))},d=(t,s,a)=>{if(s)for(let i=0,r=e.slides.length;i{i=l(e.params.url),d(e.params.speed,e.paths.value,!1)};s("init",(()=>{e.params.history.enabled&&(()=>{const t=r();if(e.params.history){if(!t.history||!t.history.pushState)return e.params.history.enabled=!1,void(e.params.hashNavigation.enabled=!0);a=!0,i=l(e.params.url),(i.key||i.value)&&(d(0,i.value,e.params.runCallbacksOnInit),e.params.history.replaceState||t.addEventListener("popstate",c))}})()})),s("destroy",(()=>{e.params.history.enabled&&(()=>{const t=r();e.params.history.replaceState||t.removeEventListener("popstate",c)})()})),s("transitionEnd _freeModeNoMomentumRelease",(()=>{a&&o(e.params.history.key,e.activeIndex)})),s("slideChange",(()=>{a&&e.params.cssMode&&o(e.params.history.key,e.activeIndex)}))},function({swiper:e,extendParams:t,emit:s,on:i}){let n=!1;const l=a(),o=r();t({hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}});const c=()=>{s("hashChange");const t=l.location.hash.replace("#","");if(t!==e.slides.eq(e.activeIndex).attr("data-hash")){const s=e.$wrapperEl.children(`.${e.params.slideClass}[data-hash="${t}"]`).index();if(void 0===s)return;e.slideTo(s)}},p=()=>{if(n&&e.params.hashNavigation.enabled)if(e.params.hashNavigation.replaceState&&o.history&&o.history.replaceState)o.history.replaceState(null,null,`#${e.slides.eq(e.activeIndex).attr("data-hash")}`||""),s("hashSet");else{const t=e.slides.eq(e.activeIndex),a=t.attr("data-hash")||t.attr("data-history");l.location.hash=a||"",s("hashSet")}};i("init",(()=>{e.params.hashNavigation.enabled&&(()=>{if(!e.params.hashNavigation.enabled||e.params.history&&e.params.history.enabled)return;n=!0;const t=l.location.hash.replace("#","");if(t){const s=0;for(let a=0,i=e.slides.length;a{e.params.hashNavigation.enabled&&e.params.hashNavigation.watchState&&d(o).off("hashchange",c)})),i("transitionEnd _freeModeNoMomentumRelease",(()=>{n&&p()})),i("slideChange",(()=>{n&&e.params.cssMode&&p()}))},function({swiper:e,extendParams:t,on:s,emit:i}){let r;function n(){const t=e.slides.eq(e.activeIndex);let s=e.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(s=t.attr("data-swiper-autoplay")||e.params.autoplay.delay),clearTimeout(r),r=p((()=>{let t;e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),t=e.slidePrev(e.params.speed,!0,!0),i("autoplay")):e.isBeginning?e.params.autoplay.stopOnLastSlide?o():(t=e.slideTo(e.slides.length-1,e.params.speed,!0,!0),i("autoplay")):(t=e.slidePrev(e.params.speed,!0,!0),i("autoplay")):e.params.loop?(e.loopFix(),t=e.slideNext(e.params.speed,!0,!0),i("autoplay")):e.isEnd?e.params.autoplay.stopOnLastSlide?o():(t=e.slideTo(0,e.params.speed,!0,!0),i("autoplay")):(t=e.slideNext(e.params.speed,!0,!0),i("autoplay")),(e.params.cssMode&&e.autoplay.running||!1===t)&&n()}),s)}function l(){return void 0===r&&(!e.autoplay.running&&(e.autoplay.running=!0,i("autoplayStart"),n(),!0))}function o(){return!!e.autoplay.running&&(void 0!==r&&(r&&(clearTimeout(r),r=void 0),e.autoplay.running=!1,i("autoplayStop"),!0))}function d(t){e.autoplay.running&&(e.autoplay.paused||(r&&clearTimeout(r),e.autoplay.paused=!0,0!==t&&e.params.autoplay.waitForTransition?["transitionend","webkitTransitionEnd"].forEach((t=>{e.$wrapperEl[0].addEventListener(t,u)})):(e.autoplay.paused=!1,n())))}function c(){const t=a();"hidden"===t.visibilityState&&e.autoplay.running&&d(),"visible"===t.visibilityState&&e.autoplay.paused&&(n(),e.autoplay.paused=!1)}function u(t){e&&!e.destroyed&&e.$wrapperEl&&t.target===e.$wrapperEl[0]&&(["transitionend","webkitTransitionEnd"].forEach((t=>{e.$wrapperEl[0].removeEventListener(t,u)})),e.autoplay.paused=!1,e.autoplay.running?n():o())}function h(){e.params.autoplay.disableOnInteraction?o():d(),["transitionend","webkitTransitionEnd"].forEach((t=>{e.$wrapperEl[0].removeEventListener(t,u)}))}function m(){e.params.autoplay.disableOnInteraction||(e.autoplay.paused=!1,n())}e.autoplay={running:!1,paused:!1},t({autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}}),s("init",(()=>{if(e.params.autoplay.enabled){l();a().addEventListener("visibilitychange",c),e.params.autoplay.pauseOnMouseEnter&&(e.$el.on("mouseenter",h),e.$el.on("mouseleave",m))}})),s("beforeTransitionStart",((t,s,a)=>{e.autoplay.running&&(a||!e.params.autoplay.disableOnInteraction?e.autoplay.pause(s):o())})),s("sliderFirstMove",(()=>{e.autoplay.running&&(e.params.autoplay.disableOnInteraction?o():d())})),s("touchEnd",(()=>{e.params.cssMode&&e.autoplay.paused&&!e.params.autoplay.disableOnInteraction&&n()})),s("destroy",(()=>{e.$el.off("mouseenter",h),e.$el.off("mouseleave",m),e.autoplay.running&&o();a().removeEventListener("visibilitychange",c)})),Object.assign(e.autoplay,{pause:d,run:n,start:l,stop:o})},function({swiper:e,extendParams:t,on:s}){t({thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-thumbs"}});let a=!1,i=!1;function r(){const t=e.thumbs.swiper;if(!t)return;const s=t.clickedIndex,a=t.clickedSlide;if(a&&d(a).hasClass(e.params.thumbs.slideThumbActiveClass))return;if(null==s)return;let i;if(i=t.params.loop?parseInt(d(t.clickedSlide).attr("data-swiper-slide-index"),10):s,e.params.loop){let t=e.activeIndex;e.slides.eq(t).hasClass(e.params.slideDuplicateClass)&&(e.loopFix(),e._clientLeft=e.$wrapperEl[0].clientLeft,t=e.activeIndex);const s=e.slides.eq(t).prevAll(`[data-swiper-slide-index="${i}"]`).eq(0).index(),a=e.slides.eq(t).nextAll(`[data-swiper-slide-index="${i}"]`).eq(0).index();i=void 0===s?a:void 0===a?s:a-t1?a:o:a-oe.previousIndex?"next":"prev"}else n=e.realIndex,l=n>e.previousIndex?"next":"prev";r&&(n+="next"===l?i:-1*i),s.visibleSlidesIndexes&&s.visibleSlidesIndexes.indexOf(n)<0&&(s.params.centeredSlides?n=n>o?n-Math.floor(a/2)+1:n+Math.floor(a/2)-1:n>o&&s.params.slidesPerGroup,s.slideTo(n,t?0:void 0))}let n=1;const l=e.params.thumbs.slideThumbActiveClass;if(e.params.slidesPerView>1&&!e.params.centeredSlides&&(n=e.params.slidesPerView),e.params.thumbs.multipleActiveThumbs||(n=1),n=Math.floor(n),s.slides.removeClass(l),s.params.loop||s.params.virtual&&s.params.virtual.enabled)for(let t=0;t{const{thumbs:t}=e.params;t&&t.swiper&&(n(),l(!0))})),s("slideChange update resize observerUpdate",(()=>{e.thumbs.swiper&&l()})),s("setTransition",((t,s)=>{const a=e.thumbs.swiper;a&&a.setTransition(s)})),s("beforeDestroy",(()=>{const t=e.thumbs.swiper;t&&i&&t&&t.destroy()})),Object.assign(e.thumbs,{init:n,update:l})},function({swiper:e,extendParams:t,emit:s,once:a}){t({freeMode:{enabled:!1,momentum:!0,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,momentumVelocityRatio:1,sticky:!1,minimumVelocity:.02}}),Object.assign(e,{freeMode:{onTouchMove:function(){const{touchEventsData:t,touches:s}=e;0===t.velocities.length&&t.velocities.push({position:s[e.isHorizontal()?"startX":"startY"],time:t.touchStartTime}),t.velocities.push({position:s[e.isHorizontal()?"currentX":"currentY"],time:u()})},onTouchEnd:function({currentPos:t}){const{params:i,$wrapperEl:r,rtlTranslate:n,snapGrid:l,touchEventsData:o}=e,d=u()-o.touchStartTime;if(t<-e.minTranslate())e.slideTo(e.activeIndex);else if(t>-e.maxTranslate())e.slides.length1){const t=o.velocities.pop(),s=o.velocities.pop(),a=t.position-s.position,r=t.time-s.time;e.velocity=a/r,e.velocity/=2,Math.abs(e.velocity)150||u()-t.time>300)&&(e.velocity=0)}else e.velocity=0;e.velocity*=i.freeMode.momentumVelocityRatio,o.velocities.length=0;let t=1e3*i.freeMode.momentumRatio;const d=e.velocity*t;let c=e.translate+d;n&&(c=-c);let p,h=!1;const m=20*Math.abs(e.velocity)*i.freeMode.momentumBounceRatio;let f;if(ce.minTranslate())i.freeMode.momentumBounce?(c-e.minTranslate()>m&&(c=e.minTranslate()+m),p=e.minTranslate(),h=!0,o.allowMomentumBounce=!0):c=e.minTranslate(),i.loop&&i.centeredSlides&&(f=!0);else if(i.freeMode.sticky){let t;for(let e=0;e-c){t=e;break}c=Math.abs(l[t]-c){e.loopFix()})),0!==e.velocity){if(t=n?Math.abs((-c-e.translate)/e.velocity):Math.abs((c-e.translate)/e.velocity),i.freeMode.sticky){const s=Math.abs((n?-c:c)-e.translate),a=e.slidesSizesGrid[e.activeIndex];t=s{e&&!e.destroyed&&o.allowMomentumBounce&&(s("momentumBounce"),e.setTransition(i.speed),setTimeout((()=>{e.setTranslate(p),r.transitionEnd((()=>{e&&!e.destroyed&&e.transitionEnd()}))}),0))}))):e.velocity?(s("_freeModeNoMomentumRelease"),e.updateProgress(c),e.setTransition(t),e.setTranslate(c),e.transitionStart(!0,e.swipeDirection),e.animating||(e.animating=!0,r.transitionEnd((()=>{e&&!e.destroyed&&e.transitionEnd()})))):e.updateProgress(c),e.updateActiveIndex(),e.updateSlidesClasses()}else{if(i.freeMode.sticky)return void e.slideToClosest();i.freeMode&&s("_freeModeNoMomentumRelease")}(!i.freeMode.momentum||d>=i.longSwipesMs)&&(e.updateProgress(),e.updateActiveIndex(),e.updateSlidesClasses())}}}})},function({swiper:e,extendParams:t}){let s,a,i;t({grid:{rows:1,fill:"column"}}),e.grid={initSlides:t=>{const{slidesPerView:r}=e.params,{rows:n,fill:l}=e.params.grid;a=s/n,i=Math.floor(t/n),s=Math.floor(t/n)===t/n?t:Math.ceil(t/n)*n,"auto"!==r&&"row"===l&&(s=Math.max(s,r*n))},updateSlide:(t,r,n,l)=>{const{slidesPerGroup:o,spaceBetween:d}=e.params,{rows:c,fill:p}=e.params.grid;let u,h,m;if("row"===p&&o>1){const e=Math.floor(t/(o*c)),a=t-c*o*e,i=0===e?o:Math.min(Math.ceil((n-e*c*o)/c),o);m=Math.floor(a/i),h=a-m*i+e*o,u=h+m*s/c,r.css({"-webkit-order":u,order:u})}else"column"===p?(h=Math.floor(t/c),m=t-h*c,(h>i||h===i&&m===c-1)&&(m+=1,m>=c&&(m=0,h+=1))):(m=Math.floor(t/a),h=t-m*a);r.css(l("margin-top"),0!==m?d&&`${d}px`:"")},updateWrapperSize:(t,a,i)=>{const{spaceBetween:r,centeredSlides:n,roundLengths:l}=e.params,{rows:o}=e.params.grid;if(e.virtualSize=(t+r)*s,e.virtualSize=Math.ceil(e.virtualSize/o)-r,e.$wrapperEl.css({[i("width")]:`${e.virtualSize+r}px`}),n){a.splice(0,a.length);const t=[];for(let s=0;s{const{slides:t}=e,s=e.params.fadeEffect;for(let a=0;a{const{transformEl:s}=e.params.fadeEffect;(s?e.slides.find(s):e.slides).transition(t),K({swiper:e,duration:t,transformEl:s,allSlides:!0})},overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!e.params.cssMode})})},function({swiper:e,extendParams:t,on:s}){t({cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}}),F({effect:"cube",swiper:e,on:s,setTranslate:()=>{const{$el:t,$wrapperEl:s,slides:a,width:i,height:r,rtlTranslate:n,size:l,browser:o}=e,c=e.params.cubeEffect,p=e.isHorizontal(),u=e.virtual&&e.params.virtual.enabled;let h,m=0;c.shadow&&(p?(h=s.find(".swiper-cube-shadow"),0===h.length&&(h=d('
'),s.append(h)),h.css({height:`${i}px`})):(h=t.find(".swiper-cube-shadow"),0===h.length&&(h=d('
'),t.append(h))));for(let e=0;e-1&&(m=90*s+90*o,n&&(m=90*-s-90*o)),t.transform(v),c.slideShadows){let e=p?t.find(".swiper-slide-shadow-left"):t.find(".swiper-slide-shadow-top"),s=p?t.find(".swiper-slide-shadow-right"):t.find(".swiper-slide-shadow-bottom");0===e.length&&(e=d(`
`),t.append(e)),0===s.length&&(s=d(`
`),t.append(s)),e.length&&(e[0].style.opacity=Math.max(-o,0)),s.length&&(s[0].style.opacity=Math.max(o,0))}}if(s.css({"-webkit-transform-origin":`50% 50% -${l/2}px`,"transform-origin":`50% 50% -${l/2}px`}),c.shadow)if(p)h.transform(`translate3d(0px, ${i/2+c.shadowOffset}px, ${-i/2}px) rotateX(90deg) rotateZ(0deg) scale(${c.shadowScale})`);else{const e=Math.abs(m)-90*Math.floor(Math.abs(m)/90),t=1.5-(Math.sin(2*e*Math.PI/360)/2+Math.cos(2*e*Math.PI/360)/2),s=c.shadowScale,a=c.shadowScale/t,i=c.shadowOffset;h.transform(`scale3d(${s}, 1, ${a}) translate3d(0px, ${r/2+i}px, ${-r/2/a}px) rotateX(-90deg)`)}const f=o.isSafari||o.isWebView?-l/2:0;s.transform(`translate3d(0px,0,${f}px) rotateX(${e.isHorizontal()?0:m}deg) rotateY(${e.isHorizontal()?-m:0}deg)`)},setTransition:t=>{const{$el:s,slides:a}=e;a.transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t),e.params.cubeEffect.shadow&&!e.isHorizontal()&&s.find(".swiper-cube-shadow").transition(t)},perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0})})},function({swiper:e,extendParams:t,on:s}){t({flipEffect:{slideShadows:!0,limitRotation:!0,transformEl:null}}),F({effect:"flip",swiper:e,on:s,setTranslate:()=>{const{slides:t,rtlTranslate:s}=e,a=e.params.flipEffect;for(let i=0;i{const{transformEl:s}=e.params.flipEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t),K({swiper:e,duration:t,transformEl:s})},perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!e.params.cssMode})})},function({swiper:e,extendParams:t,on:s}){t({coverflowEffect:{rotate:50,stretch:0,depth:100,scale:1,modifier:1,slideShadows:!0,transformEl:null}}),F({effect:"coverflow",swiper:e,on:s,setTranslate:()=>{const{width:t,height:s,slides:a,slidesSizesGrid:i}=e,r=e.params.coverflowEffect,n=e.isHorizontal(),l=e.translate,o=n?t/2-l:s/2-l,d=n?r.rotate:-r.rotate,c=r.depth;for(let e=0,t=a.length;e0?l:0),s.length&&(s[0].style.opacity=-l>0?-l:0)}}},setTransition:t=>{const{transformEl:s}=e.params.coverflowEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t)},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0})})},function({swiper:e,extendParams:t,on:s}){t({creativeEffect:{transformEl:null,limitProgress:1,shadowPerProgress:!1,progressMultiplier:1,perspective:!0,prev:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1},next:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1}}});const a=e=>"string"==typeof e?e:`${e}px`;F({effect:"creative",swiper:e,on:s,setTranslate:()=>{const{slides:t}=e,s=e.params.creativeEffect,{progressMultiplier:i}=s;for(let r=0;r0&&(h=s.prev,u=!0),c.forEach(((e,t)=>{c[t]=`calc(${e}px + (${a(h.translate[t])} * ${Math.abs(o*i)}))`})),p.forEach(((e,t)=>{p[t]=h.rotate[t]*Math.abs(o*i)})),n[0].style.zIndex=-Math.abs(Math.round(l))+t.length;const m=c.join(", "),f=`rotateX(${p[0]}deg) rotateY(${p[1]}deg) rotateZ(${p[2]}deg)`,g=o<0?`scale(${1+(1-h.scale)*o*i})`:`scale(${1-(1-h.scale)*o*i})`,v=o<0?1+(1-h.opacity)*o*i:1-(1-h.opacity)*o*i,w=`translate3d(${m}) ${f} ${g}`;if(u&&h.shadow||!u){let e=n.children(".swiper-slide-shadow");if(0===e.length&&h.shadow&&(e=Z(s,n)),e.length){const t=s.shadowPerProgress?o*(1/s.limitProgress):o;e[0].style.opacity=Math.min(Math.max(Math.abs(t),0),1)}}const b=U(s,n);b.transform(w).css({opacity:v}),h.origin&&b.css("transform-origin",h.origin)}},setTransition:t=>{const{transformEl:s}=e.params.creativeEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow").transition(t),K({swiper:e,duration:t,transformEl:s,allSlides:!0})},perspective:()=>e.params.creativeEffect.perspective,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!e.params.cssMode})})},function({swiper:e,extendParams:t,on:s}){t({cardsEffect:{slideShadows:!0,transformEl:null}}),F({effect:"cards",swiper:e,on:s,setTranslate:()=>{const{slides:t,activeIndex:s}=e,a=e.params.cardsEffect,{startTranslate:i,isTouched:r}=e.touchEventsData,n=e.translate;for(let l=0;l0&&c<1&&(r||e.params.cssMode)&&n-1&&(r||e.params.cssMode)&&n>i;if(w||b){const e=(1-Math.abs((Math.abs(c)-.5)/.5))**.5;g+=-28*c*e,f+=-.5*e,v+=96*e,h=-25*e*Math.abs(c)+"%"}if(u=c<0?`calc(${u}px + (${v*Math.abs(c)}%))`:c>0?`calc(${u}px + (-${v*Math.abs(c)}%))`:`${u}px`,!e.isHorizontal()){const e=h;h=u,u=e}const x=`\n translate3d(${u}, ${h}, ${m}px)\n rotateZ(${g}deg)\n scale(${c<0?""+(1+(1-f)*c):""+(1-(1-f)*c)})\n `;if(a.slideShadows){let e=o.find(".swiper-slide-shadow");0===e.length&&(e=Z(a,o)),e.length&&(e[0].style.opacity=Math.min(Math.max((Math.abs(c)-.5)/.5,0),1))}o[0].style.zIndex=-Math.abs(Math.round(d))+t.length;U(a,o).transform(x)}},setTransition:t=>{const{transformEl:s}=e.params.cardsEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow").transition(t),K({swiper:e,duration:t,transformEl:s})},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!e.params.cssMode})})}];return H.use(J),H})); - //# sourceMappingURL=swiper-bundle.min.js.map \ No newline at end of file diff --git a/src/assets/mapping/leaflet-beautify-marker-icon.css b/src/assets/mapping/leaflet-beautify-marker-icon.css deleted file mode 100644 index b497370..0000000 --- a/src/assets/mapping/leaflet-beautify-marker-icon.css +++ /dev/null @@ -1,38 +0,0 @@ -/* - Leaflet.BeautifyIcon, a plugin that adds colorful iconic markers for Leaflet by giving full control of style to end user, It has also ability to adjust font awesome - and glyphicon icons - (c) 2016-2017, Muhammad Arslan Sajid - http://leafletjs.com -*/ -.beautify-marker { - text-align: center; - font-weight: 700; - font-family: monospace; - position:absolute; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - - .beautify-marker.circle { - border-radius: 100%; - } - - .beautify-marker.circle-dot, .beautify-marker.doughnut { - border-radius: 100%; - } - - .beautify-marker.marker { - border-top-left-radius: 50%; - border-top-right-radius: 50% 100%; - border-bottom-left-radius: 100% 50%; - border-bottom-right-radius: 0%; - /* rotating 45deg clockwise to get the corner bottom center */ - transform: rotate(45deg); - - } - - .beautify-marker.marker > * { - /* rotating 45deg counterclock to adjust marker content back to normal */ - transform: rotate(-45deg); - } \ No newline at end of file diff --git a/src/assets/mapping/leaflet-beautify-marker-icon.js b/src/assets/mapping/leaflet-beautify-marker-icon.js deleted file mode 100644 index 5a3265e..0000000 --- a/src/assets/mapping/leaflet-beautify-marker-icon.js +++ /dev/null @@ -1,205 +0,0 @@ -/* - Leaflet.BeautifyIcon, a plugin that adds colorful iconic markers for Leaflet by giving full control of style to end user, It has also ability to adjust font awesome - and glyphicon icons - (c) 2016-2017, Muhammad Arslan Sajid - http://leafletjs.com -*/ - -/*global L of leaflet*/ - -(function (window, document, undefined) { - - 'use strict'; - - /* - * Leaflet.BeautifyIcon assumes that you have already included the Leaflet library. - */ - - /* - * Default settings for various style markers - */ - var defaults = { - - iconColor: '#1EB300', - - iconAnchor: { - 'marker': [14, 36] - , 'circle': [11, 10] - , 'circle-dot': [5, 5] - , 'rectangle-dot': [5, 6] - , 'doughnut': [8, 8] - }, - - popupAnchor: { - 'marker': [0, -25] - , 'circle': [-3, -76] - , 'circle-dot': [0, -2] - , 'rectangle-dot': [0, -2] - , 'doughnut': [0, -2] - }, - - innerIconAnchor: { - 'marker': [-2, 5] - , 'circle': [0, 2] - }, - - iconSize: { - 'marker': [28, 28] - , 'circle': [22, 22] - , 'circle-dot': [2, 2] - , 'rectangle-dot': [2, 2] - , 'doughnut': [15, 15] - } - }; - - L.BeautifyIcon = { - - Icon: L.Icon.extend({ - - options: { - icon: 'leaf' - , iconSize: defaults.iconSize.circle - , iconAnchor: defaults.iconAnchor.circle - , iconShape: 'circle' - , iconStyle: '' - , innerIconAnchor: [0, 3] // circle with fa or glyphicon or marker with text - , innerIconStyle: '' - , isAlphaNumericIcon: false - , text: 1 - , borderColor: defaults.iconColor - , borderWidth: 2 - , borderStyle: 'solid' - , backgroundColor: 'white' - , textColor: defaults.iconColor - , customClasses: '' - , spin: false - , prefix: 'fa' - , html: '' - }, - - initialize: function (options) { - - this.applyDefaults(options); - this.options = (!options || !options.html) ? L.Util.setOptions(this, options) : options; - }, - - applyDefaults: function (options) { - - if (options) { - if (!options.iconSize && options.iconShape) { - options.iconSize = defaults.iconSize[options.iconShape]; - } - - if (!options.iconAnchor && options.iconShape) { - options.iconAnchor = defaults.iconAnchor[options.iconShape]; - } - - if (!options.popupAnchor && options.iconShape) { - options.popupAnchor = defaults.popupAnchor[options.iconShape]; - } - - if (!options.innerIconAnchor) { - // if icon is type of circle or marker - if (options.iconShape === 'circle' || options.iconShape === 'marker') { - if (options.iconShape === 'circle' && options.isAlphaNumericIcon) { // if circle with text - options.innerIconAnchor = [0, -1]; - } - else if (options.iconShape === 'marker' && !options.isAlphaNumericIcon) {// marker with icon - options.innerIconAnchor = defaults.innerIconAnchor[options.iconShape]; - } - } - } - } - }, - - createIcon: function () { - - var iconDiv = document.createElement('div') - , options = this.options; - - iconDiv.innerHTML = !options.html ? this.createIconInnerHtml() : options.html; - this._setIconStyles(iconDiv); - - // having a marker requires an extra parent div for rotation correction - if (this.options.iconShape === 'marker') { - var wrapperDiv = document.createElement('div'); - wrapperDiv.appendChild(iconDiv); - return wrapperDiv; - } - - return iconDiv; - }, - - createIconInnerHtml: function () { - - var options = this.options; - - if (options.iconShape === 'circle-dot' || options.iconShape === 'rectangle-dot' || options.iconShape === 'doughnut') { - return ''; - } - - var innerIconStyle = this.getInnerIconStyle(options); - if (options.isAlphaNumericIcon) { - return '
' + options.text + '
'; - } - - var spinClass = ''; - if (options.spin) { - spinClass = ' fa-spin'; - } - - return ''; - }, - - getInnerIconStyle: function (options) { - - var innerAnchor = L.point(options.innerIconAnchor) - return 'color:' + options.textColor + ';margin-top:' + innerAnchor.y + 'px; margin-left:' + innerAnchor.x + 'px;' + options.innerIconStyle; - }, - - _setIconStyles: function (iconDiv) { - - var options = this.options - , size = L.point(options.iconSize) - , anchor = L.point(options.iconAnchor); - - iconDiv.className = 'beautify-marker '; - - if (options.iconShape) { - iconDiv.className += options.iconShape; - } - - if (options.customClasses) { - iconDiv.className += ' ' + options.customClasses; - } - - iconDiv.style.backgroundColor = options.backgroundColor; - iconDiv.style.color = options.textColor; - iconDiv.style.borderColor = options.borderColor; - iconDiv.style.borderWidth = options.borderWidth + 'px'; - iconDiv.style.borderStyle = options.borderStyle; - - if (size) { - iconDiv.style.width = size.x + 'px'; - iconDiv.style.height = size.y + 'px'; - } - - if (anchor) { - iconDiv.style.marginLeft = (-anchor.x) + 'px'; - iconDiv.style.marginTop = (-anchor.y) + 'px'; - } - - if (options.iconStyle) { - var cStyle = iconDiv.getAttribute('style'); - cStyle += options.iconStyle; - iconDiv.setAttribute('style', cStyle); - } - } - }) - }; - - L.BeautifyIcon.icon = function (options) { - return new L.BeautifyIcon.Icon(options); - } - - }(this, document)); \ No newline at end of file diff --git a/src/assets/mapping/leaflet.css b/src/assets/mapping/leaflet.css deleted file mode 100644 index 70802f3..0000000 --- a/src/assets/mapping/leaflet.css +++ /dev/null @@ -1,635 +0,0 @@ -/* required styles */ - -.leaflet-pane, -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-tile-container, -.leaflet-pane > svg, -.leaflet-pane > canvas, -.leaflet-zoom-box, -.leaflet-image-layer, -.leaflet-layer { - position: absolute; - left: 0; - top: 0; - } -.leaflet-container { - overflow: hidden; - } -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - -webkit-user-drag: none; - } -/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ -.leaflet-safari .leaflet-tile { - image-rendering: -webkit-optimize-contrast; - } -/* hack that prevents hw layers "stretching" when loading new tiles */ -.leaflet-safari .leaflet-tile-container { - width: 1600px; - height: 1600px; - -webkit-transform-origin: 0 0; - } -.leaflet-marker-icon, -.leaflet-marker-shadow { - display: block; - } -/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ -/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ -.leaflet-container .leaflet-overlay-pane svg, -.leaflet-container .leaflet-marker-pane img, -.leaflet-container .leaflet-shadow-pane img, -.leaflet-container .leaflet-tile-pane img, -.leaflet-container img.leaflet-image-layer, -.leaflet-container .leaflet-tile { - max-width: none !important; - max-height: none !important; - } - -.leaflet-container.leaflet-touch-zoom { - -ms-touch-action: pan-x pan-y; - touch-action: pan-x pan-y; - } -.leaflet-container.leaflet-touch-drag { - -ms-touch-action: pinch-zoom; - /* Fallback for FF which doesn't support pinch-zoom */ - touch-action: none; - touch-action: pinch-zoom; -} -.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { - -ms-touch-action: none; - touch-action: none; -} -.leaflet-container { - -webkit-tap-highlight-color: transparent; -} -.leaflet-container a { - -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); -} -.leaflet-tile { - filter: inherit; - visibility: hidden; - } -.leaflet-tile-loaded { - visibility: inherit; - } -.leaflet-zoom-box { - width: 0; - height: 0; - -moz-box-sizing: border-box; - box-sizing: border-box; - z-index: 800; - } -/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ -.leaflet-overlay-pane svg { - -moz-user-select: none; - } - -.leaflet-pane { z-index: 400; } - -.leaflet-tile-pane { z-index: 200; } -.leaflet-overlay-pane { z-index: 400; } -.leaflet-shadow-pane { z-index: 500; } -.leaflet-marker-pane { z-index: 600; } -.leaflet-tooltip-pane { z-index: 650; } -.leaflet-popup-pane { z-index: 700; } - -.leaflet-map-pane canvas { z-index: 100; } -.leaflet-map-pane svg { z-index: 200; } - -.leaflet-vml-shape { - width: 1px; - height: 1px; - } -.lvml { - behavior: url(#default#VML); - display: inline-block; - position: absolute; - } - - -/* control positioning */ - -.leaflet-control { - position: relative; - z-index: 800; - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } -.leaflet-top, -.leaflet-bottom { - position: absolute; - z-index: 1000; - pointer-events: none; - } -.leaflet-top { - top: 0; - } -.leaflet-right { - right: 0; - } -.leaflet-bottom { - bottom: 0; - } -.leaflet-left { - left: 0; - } -.leaflet-control { - float: left; - clear: both; - } -.leaflet-right .leaflet-control { - float: right; - } -.leaflet-top .leaflet-control { - margin-top: 10px; - } -.leaflet-bottom .leaflet-control { - margin-bottom: 10px; - } -.leaflet-left .leaflet-control { - margin-left: 10px; - } -.leaflet-right .leaflet-control { - margin-right: 10px; - } - - -/* zoom and fade animations */ - -.leaflet-fade-anim .leaflet-tile { - will-change: opacity; - } -.leaflet-fade-anim .leaflet-popup { - opacity: 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; - } -.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { - opacity: 1; - } -.leaflet-zoom-animated { - -webkit-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - will-change: transform; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); - -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); - transition: transform 0.25s cubic-bezier(0,0,0.25,1); - } -.leaflet-zoom-anim .leaflet-tile, -.leaflet-pan-anim .leaflet-tile { - -webkit-transition: none; - -moz-transition: none; - transition: none; - } - -.leaflet-zoom-anim .leaflet-zoom-hide { - visibility: hidden; - } - - -/* cursors */ - -.leaflet-interactive { - cursor: pointer; - } -.leaflet-grab { - cursor: -webkit-grab; - cursor: -moz-grab; - cursor: grab; - } -.leaflet-crosshair, -.leaflet-crosshair .leaflet-interactive { - cursor: crosshair; - } -.leaflet-popup-pane, -.leaflet-control { - cursor: auto; - } -.leaflet-dragging .leaflet-grab, -.leaflet-dragging .leaflet-grab .leaflet-interactive, -.leaflet-dragging .leaflet-marker-draggable { - cursor: move; - cursor: -webkit-grabbing; - cursor: -moz-grabbing; - cursor: grabbing; - } - -/* marker & overlays interactivity */ -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-image-layer, -.leaflet-pane > svg path, -.leaflet-tile-container { - pointer-events: none; - } - -.leaflet-marker-icon.leaflet-interactive, -.leaflet-image-layer.leaflet-interactive, -.leaflet-pane > svg path.leaflet-interactive { - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } - -/* visual tweaks */ - -.leaflet-container { - background: #ddd; - outline: 0; - } -.leaflet-container a { - color: #0078A8; - } -.leaflet-container a.leaflet-active { - outline: 2px solid orange; - } -.leaflet-zoom-box { - border: 2px dotted #38f; - background: rgba(255,255,255,0.5); - } - - -/* general typography */ -.leaflet-container { - font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; - } - - -/* general toolbar styles */ - -.leaflet-bar { - box-shadow: 0 1px 5px rgba(0,0,0,0.65); - border-radius: 4px; - } -.leaflet-bar a, -.leaflet-bar a:hover { - background-color: #fff; - border-bottom: 1px solid #ccc; - width: 26px; - height: 26px; - line-height: 26px; - display: block; - text-align: center; - text-decoration: none; - color: black; - } -.leaflet-bar a, -.leaflet-control-layers-toggle { - background-position: 50% 50%; - background-repeat: no-repeat; - display: block; - } -.leaflet-bar a:hover { - background-color: #f4f4f4; - } -.leaflet-bar a:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - } -.leaflet-bar a:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - border-bottom: none; - } -.leaflet-bar a.leaflet-disabled { - cursor: default; - background-color: #f4f4f4; - color: #bbb; - } - -.leaflet-touch .leaflet-bar a { - width: 30px; - height: 30px; - line-height: 30px; - } -.leaflet-touch .leaflet-bar a:first-child { - border-top-left-radius: 2px; - border-top-right-radius: 2px; - } -.leaflet-touch .leaflet-bar a:last-child { - border-bottom-left-radius: 2px; - border-bottom-right-radius: 2px; - } - -/* zoom control */ - -.leaflet-control-zoom-in, -.leaflet-control-zoom-out { - font: bold 18px 'Lucida Console', Monaco, monospace; - text-indent: 1px; - } - -.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { - font-size: 22px; - } - - -/* layers control */ - -.leaflet-control-layers { - box-shadow: 0 1px 5px rgba(0,0,0,0.4); - background: #fff; - border-radius: 5px; - } -.leaflet-control-layers-toggle { - background-image: url(images/layers.png); - width: 36px; - height: 36px; - } -.leaflet-retina .leaflet-control-layers-toggle { - background-image: url(images/layers-2x.png); - background-size: 26px 26px; - } -.leaflet-touch .leaflet-control-layers-toggle { - width: 44px; - height: 44px; - } -.leaflet-control-layers .leaflet-control-layers-list, -.leaflet-control-layers-expanded .leaflet-control-layers-toggle { - display: none; - } -.leaflet-control-layers-expanded .leaflet-control-layers-list { - display: block; - position: relative; - } -.leaflet-control-layers-expanded { - padding: 6px 10px 6px 6px; - color: #333; - background: #fff; - } -.leaflet-control-layers-scrollbar { - overflow-y: scroll; - overflow-x: hidden; - padding-right: 5px; - } -.leaflet-control-layers-selector { - margin-top: 2px; - position: relative; - top: 1px; - } -.leaflet-control-layers label { - display: block; - } -.leaflet-control-layers-separator { - height: 0; - border-top: 1px solid #ddd; - margin: 5px -10px 5px -6px; - } - -/* Default icon URLs */ -.leaflet-default-icon-path { - background-image: url(images/marker-icon.png); - } - - -/* attribution and scale controls */ - -.leaflet-container .leaflet-control-attribution { - background: #fff; - background: rgba(255, 255, 255, 0.7); - margin: 0; - } -.leaflet-control-attribution, -.leaflet-control-scale-line { - padding: 0 5px; - color: #333; - } -.leaflet-control-attribution a { - text-decoration: none; - } -.leaflet-control-attribution a:hover { - text-decoration: underline; - } -.leaflet-container .leaflet-control-attribution, -.leaflet-container .leaflet-control-scale { - font-size: 11px; - } -.leaflet-left .leaflet-control-scale { - margin-left: 5px; - } -.leaflet-bottom .leaflet-control-scale { - margin-bottom: 5px; - } -.leaflet-control-scale-line { - border: 2px solid #777; - border-top: none; - line-height: 1.1; - padding: 2px 5px 1px; - font-size: 11px; - white-space: nowrap; - overflow: hidden; - -moz-box-sizing: border-box; - box-sizing: border-box; - - background: #fff; - background: rgba(255, 255, 255, 0.5); - } -.leaflet-control-scale-line:not(:first-child) { - border-top: 2px solid #777; - border-bottom: none; - margin-top: -2px; - } -.leaflet-control-scale-line:not(:first-child):not(:last-child) { - border-bottom: 2px solid #777; - } - -.leaflet-touch .leaflet-control-attribution, -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - box-shadow: none; - } -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - border: 2px solid rgba(0,0,0,0.2); - background-clip: padding-box; - } - - -/* popup */ - -.leaflet-popup { - position: absolute; - text-align: center; - margin-bottom: 20px; - } -.leaflet-popup-content-wrapper { - padding: 1px; - text-align: left; - border-radius: 12px; - } -.leaflet-popup-content { - margin: 13px 19px; - line-height: 1.4; - } -.leaflet-popup-content p { - margin: 18px 0; - } -.leaflet-popup-tip-container { - width: 40px; - height: 20px; - position: absolute; - left: 50%; - margin-left: -20px; - overflow: hidden; - pointer-events: none; - } -.leaflet-popup-tip { - width: 17px; - height: 17px; - padding: 1px; - - margin: -10px auto 0; - - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); - } -.leaflet-popup-content-wrapper, -.leaflet-popup-tip { - background: white; - color: #333; - box-shadow: 0 3px 14px rgba(0,0,0,0.4); - } -.leaflet-container a.leaflet-popup-close-button { - position: absolute; - top: 0; - right: 0; - padding: 4px 4px 0 0; - border: none; - text-align: center; - width: 18px; - height: 14px; - font: 16px/14px Tahoma, Verdana, sans-serif; - color: #c3c3c3; - text-decoration: none; - font-weight: bold; - background: transparent; - } -.leaflet-container a.leaflet-popup-close-button:hover { - color: #999; - } -.leaflet-popup-scrolled { - overflow: auto; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - } - -.leaflet-oldie .leaflet-popup-content-wrapper { - zoom: 1; - } -.leaflet-oldie .leaflet-popup-tip { - width: 24px; - margin: 0 auto; - - -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; - filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); - } -.leaflet-oldie .leaflet-popup-tip-container { - margin-top: -1px; - } - -.leaflet-oldie .leaflet-control-zoom, -.leaflet-oldie .leaflet-control-layers, -.leaflet-oldie .leaflet-popup-content-wrapper, -.leaflet-oldie .leaflet-popup-tip { - border: 1px solid #999; - } - - -/* div icon */ - -.leaflet-div-icon { - background: #fff; - border: 1px solid #666; - } - - -/* Tooltip */ -/* Base styles for the element that has a tooltip */ -.leaflet-tooltip { - position: absolute; - padding: 6px; - background-color: #fff; - border: 1px solid #fff; - border-radius: 3px; - color: #222; - white-space: nowrap; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - pointer-events: none; - box-shadow: 0 1px 3px rgba(0,0,0,0.4); - } -.leaflet-tooltip.leaflet-clickable { - cursor: pointer; - pointer-events: auto; - } -.leaflet-tooltip-top:before, -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - position: absolute; - pointer-events: none; - border: 6px solid transparent; - background: transparent; - content: ""; - } - -/* Directions */ - -.leaflet-tooltip-bottom { - margin-top: 6px; -} -.leaflet-tooltip-top { - margin-top: -6px; -} -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-top:before { - left: 50%; - margin-left: -6px; - } -.leaflet-tooltip-top:before { - bottom: 0; - margin-bottom: -12px; - border-top-color: #fff; - } -.leaflet-tooltip-bottom:before { - top: 0; - margin-top: -12px; - margin-left: -6px; - border-bottom-color: #fff; - } -.leaflet-tooltip-left { - margin-left: -6px; -} -.leaflet-tooltip-right { - margin-left: 6px; -} -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - top: 50%; - margin-top: -6px; - } -.leaflet-tooltip-left:before { - right: 0; - margin-right: -12px; - border-left-color: #fff; - } -.leaflet-tooltip-right:before { - left: 0; - margin-left: -12px; - border-right-color: #fff; - } diff --git a/src/assets/mapping/mapbox-gl.css b/src/assets/mapping/mapbox-gl.css deleted file mode 100644 index 8851639..0000000 --- a/src/assets/mapping/mapbox-gl.css +++ /dev/null @@ -1 +0,0 @@ -.mapboxgl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mapboxgl-canvas{position:absolute;left:0;top:0}.mapboxgl-map:-webkit-full-screen{width:100%;height:100%}.mapboxgl-canary{background-color:salmon}.mapboxgl-canvas-container.mapboxgl-interactive,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass{cursor:grab;-webkit-user-select:none;user-select:none}.mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer{cursor:pointer}.mapboxgl-canvas-container.mapboxgl-interactive:active,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active{cursor:grabbing}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas{touch-action:pan-x pan-y}.mapboxgl-canvas-container.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:pinch-zoom}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:none}.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-bottom-right,.mapboxgl-ctrl-top-left,.mapboxgl-ctrl-top-right{position:absolute;pointer-events:none;z-index:2}.mapboxgl-ctrl-top-left{top:0;left:0}.mapboxgl-ctrl-top-right{top:0;right:0}.mapboxgl-ctrl-bottom-left{bottom:0;left:0}.mapboxgl-ctrl-bottom-right{right:0;bottom:0}.mapboxgl-ctrl{clear:both;pointer-events:auto;transform:translate(0)}.mapboxgl-ctrl-top-left .mapboxgl-ctrl{margin:10px 0 0 10px;float:left}.mapboxgl-ctrl-top-right .mapboxgl-ctrl{margin:10px 10px 0 0;float:right}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl{margin:0 0 10px 10px;float:left}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl{margin:0 10px 10px 0;float:right}.mapboxgl-ctrl-group{border-radius:4px;background:#fff}.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (-ms-high-contrast:active){.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.mapboxgl-ctrl-group button{width:29px;height:29px;display:block;padding:0;outline:none;border:0;box-sizing:border-box;background-color:transparent;cursor:pointer}.mapboxgl-ctrl-group button+button{border-top:1px solid #ddd}.mapboxgl-ctrl button .mapboxgl-ctrl-icon{display:block;width:100%;height:100%;background-repeat:no-repeat;background-position:50%}@media (-ms-high-contrast:active){.mapboxgl-ctrl-icon{background-color:transparent}.mapboxgl-ctrl-group button+button{border-top:1px solid ButtonText}}.mapboxgl-ctrl-attrib-button:focus,.mapboxgl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl button:disabled{cursor:not-allowed}.mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon{opacity:.25}.mapboxgl-ctrl button:not(:disabled):hover{background-color:rgba(0,0,0,.05)}.mapboxgl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.mapboxgl-ctrl-group button:focus:first-child{border-radius:4px 4px 0 0}.mapboxgl-ctrl-group button:focus:last-child{border-radius:0 0 4px 4px}.mapboxgl-ctrl-group button:focus:only-child{border-radius:inherit}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E %3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E %3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E %3C/svg%3E")}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E %3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E %3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E %3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E %3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E %3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E %3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E %3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E %3C/svg%3E")}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E %3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E %3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E %3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E %3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E %3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E %3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E %3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E %3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E %3C/svg%3E")}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E %3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E %3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23999'/%3E %3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E %3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E %3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E %3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='red'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting .mapboxgl-ctrl-icon{animation:mapboxgl-spin 2s linear infinite}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23999'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='red'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E %3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E %3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23666'%3E %3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E %3Ccircle id='dot' cx='10' cy='10' r='2'/%3E %3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='red'/%3E %3C/svg%3E")}}@keyframes mapboxgl-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}a.mapboxgl-ctrl-logo{width:88px;height:23px;margin:0 0 -4px -4px;display:block;background-repeat:no-repeat;cursor:pointer;overflow:hidden;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='88' height='23' viewBox='0 0 88 23' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd'%3E %3Cdefs%3E %3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E %3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E %3C/defs%3E %3Cmask id='clip'%3E %3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E %3Cuse xlink:href='%23logo'/%3E %3Cuse xlink:href='%23text'/%3E %3C/mask%3E %3Cg id='outline' opacity='0.3' stroke='%23000' stroke-width='3'%3E %3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E %3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E %3C/g%3E %3Cg id='fill' opacity='0.9' fill='%23fff'%3E %3Cuse xlink:href='%23logo'/%3E %3Cuse xlink:href='%23text'/%3E %3C/g%3E %3C/svg%3E")}a.mapboxgl-ctrl-logo.mapboxgl-compact{width:23px}@media (-ms-high-contrast:active){a.mapboxgl-ctrl-logo{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='88' height='23' viewBox='0 0 88 23' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd'%3E %3Cdefs%3E %3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E %3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E %3C/defs%3E %3Cmask id='clip'%3E %3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E %3Cuse xlink:href='%23logo'/%3E %3Cuse xlink:href='%23text'/%3E %3C/mask%3E %3Cg id='outline' opacity='1' stroke='%23000' stroke-width='3'%3E %3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E %3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E %3C/g%3E %3Cg id='fill' opacity='1' fill='%23fff'%3E %3Cuse xlink:href='%23logo'/%3E %3Cuse xlink:href='%23text'/%3E %3C/g%3E %3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){a.mapboxgl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='88' height='23' viewBox='0 0 88 23' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd'%3E %3Cdefs%3E %3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E %3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E %3C/defs%3E %3Cmask id='clip'%3E %3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E %3Cuse xlink:href='%23logo'/%3E %3Cuse xlink:href='%23text'/%3E %3C/mask%3E %3Cg id='outline' opacity='1' stroke='%23fff' stroke-width='3' fill='%23fff'%3E %3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E %3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E %3C/g%3E %3Cg id='fill' opacity='1' fill='%23000'%3E %3Cuse xlink:href='%23logo'/%3E %3Cuse xlink:href='%23text'/%3E %3C/g%3E %3C/svg%3E")}}.mapboxgl-ctrl.mapboxgl-ctrl-attrib{padding:0 5px;background-color:hsla(0,0%,100%,.5);margin:0}@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact{min-height:20px;padding:2px 24px 2px 0;margin:10px;position:relative;background-color:#fff;border-radius:12px}.mapboxgl-ctrl-attrib.mapboxgl-compact-show{padding:2px 28px 2px 8px;visibility:visible}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact-show,.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact-show{padding:2px 8px 2px 28px;border-radius:12px}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner{display:none}.mapboxgl-ctrl-attrib-button{display:none;cursor:pointer;position:absolute;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='24' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E %3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E %3C/svg%3E");background-color:hsla(0,0%,100%,.5);width:24px;height:24px;box-sizing:border-box;border-radius:12px;outline:none;top:0;right:0;border:0}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-attrib-button,.mapboxgl-ctrl-top-left .mapboxgl-ctrl-attrib-button{left:0}.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-inner,.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-button{display:block}.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-button{background-color:rgba(0,0,0,.05)}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;right:0}.mapboxgl-ctrl-top-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;right:0}.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;left:0}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;left:0}}@media screen and (-ms-high-contrast:active){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='24' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' fill='%23fff'%3E %3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E %3C/svg%3E")}}@media screen and (-ms-high-contrast:black-on-white){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='24' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E %3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E %3C/svg%3E")}}.mapboxgl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.mapboxgl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.mapboxgl-ctrl-attrib .mapbox-improve-map{font-weight:700;margin-left:2px}.mapboxgl-attrib-empty{display:none}.mapboxgl-ctrl-scale{background-color:hsla(0,0%,100%,.75);font-size:10px;border:2px solid #333;border-top:#333;padding:0 5px;color:#333;box-sizing:border-box}.mapboxgl-popup{position:absolute;top:0;left:0;display:flex;will-change:transform;pointer-events:none}.mapboxgl-popup-anchor-top,.mapboxgl-popup-anchor-top-left,.mapboxgl-popup-anchor-top-right{flex-direction:column}.mapboxgl-popup-anchor-bottom,.mapboxgl-popup-anchor-bottom-left,.mapboxgl-popup-anchor-bottom-right{flex-direction:column-reverse}.mapboxgl-popup-anchor-left{flex-direction:row}.mapboxgl-popup-anchor-right{flex-direction:row-reverse}.mapboxgl-popup-tip{width:0;height:0;border:10px solid transparent;z-index:1}.mapboxgl-popup-anchor-top .mapboxgl-popup-tip{align-self:center;border-top:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip{align-self:flex-start;border-top:none;border-left:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip{align-self:flex-end;border-top:none;border-right:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.mapboxgl-popup-anchor-left .mapboxgl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.mapboxgl-popup-anchor-right .mapboxgl-popup-tip{align-self:center;border-right:none;border-left-color:#fff}.mapboxgl-popup-close-button{position:absolute;right:0;top:0;border:0;border-radius:0 3px 0 0;cursor:pointer;background-color:transparent}.mapboxgl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.mapboxgl-popup-content{position:relative;background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:10px 10px 15px;pointer-events:auto}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-content{border-top-left-radius:0}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-content{border-top-right-radius:0}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content{border-bottom-left-radius:0}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content{border-bottom-right-radius:0}.mapboxgl-popup-track-pointer{display:none}.mapboxgl-popup-track-pointer *{pointer-events:none;user-select:none}.mapboxgl-map:hover .mapboxgl-popup-track-pointer{display:flex}.mapboxgl-map:active .mapboxgl-popup-track-pointer{display:none}.mapboxgl-marker{position:absolute;top:0;left:0;will-change:transform;opacity:1;transition:opacity .2s}.mapboxgl-user-location-dot,.mapboxgl-user-location-dot:before{background-color:#1da1f2;width:15px;height:15px;border-radius:50%}.mapboxgl-user-location-dot:before{content:"";position:absolute;animation:mapboxgl-user-location-dot-pulse 2s infinite}.mapboxgl-user-location-dot:after{border-radius:50%;border:2px solid #fff;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px;box-sizing:border-box;box-shadow:0 0 3px rgba(0,0,0,.35)}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading{width:0;height:0}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after,.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before{content:"";border-bottom:7.5px solid #4aa1eb;position:absolute}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before{border-left:7.5px solid transparent;transform:translateY(-28px) skewY(-20deg)}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after{border-right:7.5px solid transparent;transform:translate(7.5px,-28px) skewY(20deg)}@keyframes mapboxgl-user-location-dot-pulse{0%{transform:scale(1);opacity:1}70%{transform:scale(3);opacity:0}to{transform:scale(1);opacity:0}}.mapboxgl-user-location-dot-stale{background-color:#aaa}.mapboxgl-user-location-dot-stale:after{display:none}.mapboxgl-user-location-accuracy-circle{background-color:rgba(29,161,242,.2);width:1px;height:1px;border-radius:100%}.mapboxgl-crosshair,.mapboxgl-crosshair .mapboxgl-interactive,.mapboxgl-crosshair .mapboxgl-interactive:active{cursor:crosshair}.mapboxgl-boxzoom{position:absolute;top:0;left:0;width:0;height:0;background:#fff;border:2px dotted #202020;opacity:.5}@media print{.mapbox-improve-map{display:none}} \ No newline at end of file diff --git a/src/assets/shapes.svg b/src/assets/shapes.svg deleted file mode 100644 index d370b4d..0000000 --- a/src/assets/shapes.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/components/calls/call-card.tsx b/src/components/calls/call-card.tsx new file mode 100644 index 0000000..f2332cd --- /dev/null +++ b/src/components/calls/call-card.tsx @@ -0,0 +1,146 @@ +import { AlertTriangle, MapPin, Phone } from 'lucide-react-native'; +import React from 'react'; +import { StyleSheet } from 'react-native'; +import WebView from 'react-native-webview'; + +import { Box } from '@/components/ui/box'; +import { HStack } from '@/components/ui/hstack'; +import { Icon } from '@/components/ui/icon'; +import { Text } from '@/components/ui/text'; +import { VStack } from '@/components/ui/vstack'; +import { getTimeAgoUtc, invertColor } from '@/lib/utils'; +import { type CallPriorityResultData } from '@/models/v4/callPriorities/callPriorityResultData'; +import type { CallResultData } from '@/models/v4/calls/callResultData'; + +function getColor(call: CallResultData, priority: CallPriorityResultData | undefined) { + if (!call) { + return '#808080'; + } else if (call.CallId === '0') { + return '#808080'; + } else if (priority && priority.Color) { + return priority.Color; + } + + return '#808080'; +} + +interface CallCardProps { + call: CallResultData; + priority: CallPriorityResultData | undefined; +} + +export const CallCard: React.FC = ({ call, priority }) => { + const textColor = invertColor(getColor(call, priority), true); + + return ( + + {/* Header with Call Number and Priority */} + + + + + #{call.Number} + + + + {getTimeAgoUtc(call.LoggedOnUtc)} + + + + {/* Call Details */} + + {/* Name */} + + + + {call.Name} + + + + {/* Address */} + + + + {call.Address} + + + + {/* Dispatched Time */} + {/* Disabling this for now, ideally a list of disptched items would be ideal here but there is a perf issue getting that data. -SJ + + + Dispatched: {format(new Date(call.DispatchedOn), 'PPp')} + */} + + + {/* Nature of Call */} + {call.Nature && ( + + + + + + + + ${call.Nature} + + `, + }} + androidLayerType="software" + /> + + )} + + ); +}; + +const styles = StyleSheet.create({ + container: { + width: '100%', + backgroundColor: 'transparent', + }, +}); diff --git a/src/components/calls/call-files-modal.tsx b/src/components/calls/call-files-modal.tsx new file mode 100644 index 0000000..d3c4685 --- /dev/null +++ b/src/components/calls/call-files-modal.tsx @@ -0,0 +1,269 @@ +import * as DocumentPicker from 'expo-document-picker'; +import * as FileSystem from 'expo-file-system'; +import * as Sharing from 'expo-sharing'; +import { FileIcon, PlusIcon, ShareIcon, X, XIcon } from 'lucide-react-native'; +import React, { useEffect, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { Alert, FlatList, Platform, TouchableOpacity, useWindowDimensions } from 'react-native'; + +import ZeroState from '@/components/common/zero-state'; +import { useAuthStore } from '@/lib'; +import { type CallFileResultData } from '@/models/v4/callFiles/callFileResultData'; +import { useCallDetailStore } from '@/stores/calls/detail-store'; + +import { Actionsheet, ActionsheetBackdrop, ActionsheetContent, ActionsheetDragIndicator, ActionsheetDragIndicatorWrapper } from '../ui/actionsheet'; +import { Box } from '../ui/box'; +import { Button, ButtonIcon, ButtonText } from '../ui/button'; +import { Heading } from '../ui/heading'; +import { HStack } from '../ui/hstack'; +import { Input, InputField } from '../ui/input'; +import { Loading } from '../common/loading'; +import { Text } from '../ui/text'; +import { VStack } from '../ui/vstack'; + +interface CallFilesModalProps { + isOpen: boolean; + onClose: () => void; + callId: string; +} + +const CallFilesModal: React.FC = ({ isOpen, onClose, callId }) => { + const { t } = useTranslation(); + const { height } = useWindowDimensions(); + const [isUploading, setIsUploading] = useState(false); + const [newFileName, setNewFileName] = useState(''); + const [isAddingFile, setIsAddingFile] = useState(false); + const [downloadProgress, setDownloadProgress] = useState>({}); + const [isDownloading, setIsDownloading] = useState>({}); + + // Get data from stores + const { profile } = useAuthStore(); + const { call, callFiles, isLoadingFiles, errorFiles, fetchCallFiles } = useCallDetailStore(); + + useEffect(() => { + if (isOpen && callId) { + fetchCallFiles(callId); + } + }, [isOpen, callId, fetchCallFiles]); + + const handleFileSelect = async () => { + try { + const result = await DocumentPicker.getDocumentAsync({ + type: '*/*', + copyToCacheDirectory: true, + }); + + if (result.canceled) { + return; + } + + const file = result.assets[0]; + setNewFileName(file.name); + // Here you would handle the file upload logic + } catch (error) { + console.error('Error selecting file:', error); + Alert.alert(t('common.error'), t('call_detail.files.select_error')); + } + }; + + const handleUploadFile = async () => { + if (!newFileName) { + Alert.alert(t('common.error'), t('call_detail.files.name_required')); + return; + } + + setIsUploading(true); + try { + // This will need to be replaced with the actual upload function + // await useCallDetailStore.getState().uploadCallFile( + // callId, + // profile?.sub || '', + // '', + // newFileName, + // null, + // null, + // fileData + // ); + + // Mock successful upload + setTimeout(() => { + setIsUploading(false); + setIsAddingFile(false); + setNewFileName(''); + fetchCallFiles(callId); + }, 1500); + } catch (error) { + console.error('Error uploading file:', error); + setIsUploading(false); + Alert.alert(t('common.error'), t('call_detail.files.upload_error')); + } + }; + + const handleOpenFile = async (file: CallFileResultData) => { + setIsDownloading({ ...isDownloading, [file.Id]: true }); + setDownloadProgress({ ...downloadProgress, [file.Id]: 0 }); + + try { + // Download the file + const fileUri = `${FileSystem.cacheDirectory}${file.FileName}`; + + // Check if file already exists + const fileInfo = await FileSystem.getInfoAsync(fileUri); + + if (!fileInfo.exists) { + // Download the file + await FileSystem.downloadAsync(file.Url, fileUri); + } + + // Open the file with the appropriate app + if (Platform.OS === 'ios') { + // On iOS, we'll use the share sheet which can also be used to open files + await Sharing.shareAsync(fileUri); + } else { + // For Android, we'll use the file system's URL + await Sharing.shareAsync(fileUri); + } + } catch (error) { + console.error('Error opening file:', error); + Alert.alert(t('common.error'), t('call_detail.files.open_error')); + } finally { + setIsDownloading({ ...isDownloading, [file.Id]: false }); + } + }; + + const handleShareFile = async (file: CallFileResultData) => { + setIsDownloading({ ...isDownloading, [file.Id]: true }); + setDownloadProgress({ ...downloadProgress, [file.Id]: 0 }); + + try { + // Download the file + const fileUri = `${FileSystem.cacheDirectory}${file.FileName}`; + + // Check if file already exists + const fileInfo = await FileSystem.getInfoAsync(fileUri); + + if (!fileInfo.exists) { + // Download the file + await FileSystem.downloadAsync(file.Url, fileUri); + } + + // Share the file + await Sharing.shareAsync(fileUri); + } catch (error) { + console.error('Error sharing file:', error); + Alert.alert(t('common.error'), t('call_detail.files.share_error')); + } finally { + setIsDownloading({ ...isDownloading, [file.Id]: false }); + } + }; + + const renderFileItem = ({ item }: { item: CallFileResultData }) => { + const isDownloadingFile = isDownloading[item.Id] || false; + const progress = downloadProgress[item.Id] || 0; + + return ( + + + + + + + {item.Name} + + {item.FileName} + + {(item.Size / 1024).toFixed(0)} KB • {new Date(item.Timestamp).toLocaleString()} + + + + + + {isDownloadingFile ? ( + + {progress}% + + ) : ( + <> + handleOpenFile(item)} className="size-8 items-center justify-center rounded-full bg-primary-500"> + + + handleShareFile(item)} className="size-8 items-center justify-center rounded-full bg-primary-500"> + + + + )} + + + + ); + }; + + const renderAddFileContent = () => ( + + + {t('call_detail.files.add_file')} + setIsAddingFile(false)}> + + + + + + + + + + + + + + + ); + + const renderFilesList = () => { + return ( + <> + + {t('call_detail.files.title')} + + {/* */} + + + + {isLoadingFiles ? ( + + ) : errorFiles ? ( + + ) : callFiles?.length === 0 ? ( + + ) : ( + item.Id} showsVerticalScrollIndicator={false} contentContainerStyle={{ paddingBottom: 20 }} /> + )} + + + ); + }; + + return ( + + + + + + + + {isAddingFile ? renderAddFileContent() : renderFilesList()} + + + ); +}; + +export default CallFilesModal; diff --git a/src/components/calls/call-images-modal.tsx b/src/components/calls/call-images-modal.tsx new file mode 100644 index 0000000..eaa1892 --- /dev/null +++ b/src/components/calls/call-images-modal.tsx @@ -0,0 +1,302 @@ +import * as FileSystem from 'expo-file-system'; +import * as ImagePicker from 'expo-image-picker'; +import { CameraIcon, ChevronLeftIcon, ChevronRightIcon, ImageIcon, PlusIcon, XIcon } from 'lucide-react-native'; +import React, { useEffect, useRef, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { Dimensions, FlatList, Image, Platform, TouchableOpacity, View } from 'react-native'; +import { KeyboardAwareScrollView } from 'react-native-keyboard-controller'; + +import { Loading } from '@/components/common/loading'; +import ZeroState from '@/components/common/zero-state'; +import { useAuthStore } from '@/lib'; +import { type CallFileResultData } from '@/models/v4/callFiles/callFileResultData'; +import { useCallDetailStore } from '@/stores/calls/detail-store'; + +import { Actionsheet, ActionsheetBackdrop, ActionsheetContent, ActionsheetDragIndicator, ActionsheetDragIndicatorWrapper, ActionsheetItem, ActionsheetItemText } from '../ui/actionsheet'; +import { Box } from '../ui/box'; +import { Button, ButtonIcon, ButtonText } from '../ui/button'; +import { HStack } from '../ui/hstack'; +import { Input, InputField } from '../ui/input'; +import { Text } from '../ui/text'; +import { VStack } from '../ui/vstack'; + +interface CallImagesModalProps { + isOpen: boolean; + onClose: () => void; + callId: string; +} + +const { width } = Dimensions.get('window'); + +const CallImagesModal: React.FC = ({ isOpen, onClose, callId }) => { + const { t } = useTranslation(); + const [activeIndex, setActiveIndex] = useState(0); + const [isUploading, setIsUploading] = useState(false); + const [newImageName, setNewImageName] = useState(''); + const [selectedImage, setSelectedImage] = useState(null); + const [isAddingImage, setIsAddingImage] = useState(false); + const flatListRef = useRef(null); + + const { callImages, isLoadingImages, errorImages, fetchCallImages, uploadCallImage } = useCallDetailStore(); + + useEffect(() => { + if (isOpen && callId) { + fetchCallImages(callId); + } + }, [isOpen, callId, fetchCallImages]); + + const handleImageSelect = async () => { + const permissionResult = await ImagePicker.requestMediaLibraryPermissionsAsync(); + if (permissionResult.granted === false) { + alert(t('common.permission_denied')); + return; + } + const result = await ImagePicker.launchImageLibraryAsync({ + mediaTypes: ImagePicker.MediaTypeOptions.Images, + allowsEditing: true, + quality: 0.8, + }); + if (!result.canceled) { + setSelectedImage(result.assets[0].uri); + } + }; + + const handleCameraCapture = async () => { + const permissionResult = await ImagePicker.requestCameraPermissionsAsync(); + if (permissionResult.granted === false) { + alert(t('common.permission_denied')); + return; + } + const result = await ImagePicker.launchCameraAsync({ + allowsEditing: true, + quality: 0.8, + }); + if (!result.canceled) { + setSelectedImage(result.assets[0].uri); + } + }; + + const handleUploadImage = async () => { + if (!selectedImage) return; + + setIsUploading(true); + try { + const base64Image = await FileSystem.readAsStringAsync(selectedImage, { + encoding: FileSystem.EncodingType.Base64, + }); + + await uploadCallImage( + callId, + useAuthStore.getState().userId!, + '', + newImageName || t('callImages.default_name'), + null, //lat + null, //lon + base64Image + ); + setSelectedImage(null); + setNewImageName(''); + setIsAddingImage(false); + } catch (error) { + console.error('Error uploading image:', error); + } finally { + setIsUploading(false); + } + }; + + const renderImageItem = ({ item }: { item: CallFileResultData; index: number }) => { + if (!item || !item.Url) return null; + + return ( + + + {item.Name || ''} + {item.Timestamp || ''} + + ); + }; + + const handleViewableItemsChanged = useRef(({ viewableItems }: any) => { + if (viewableItems.length > 0) { + setActiveIndex(viewableItems[0].index); + } + }).current; + + const renderPagination = () => { + if (!callImages || callImages.length <= 1) return null; + + return ( + + + flatListRef.current?.scrollToIndex({ + index: activeIndex - 1, + animated: true, + }) + } + disabled={activeIndex === 0} + className={`rounded-full bg-white/80 p-2 ${activeIndex === 0 ? 'opacity-50' : ''}`} + > + + + + + {callImages.map((_, index) => ( + + ))} + + + + flatListRef.current?.scrollToIndex({ + index: activeIndex + 1, + animated: true, + }) + } + disabled={activeIndex === callImages.length - 1} + className={`rounded-full bg-white/80 p-2 ${activeIndex === callImages.length - 1 ? 'opacity-50' : ''}`} + > + + + + ); + }; + + const renderAddImageContent = () => ( + + + + {t('callImages.add_new')} + { + setIsAddingImage(false); + setSelectedImage(null); + setNewImageName(''); + }} + > + + + + + {selectedImage ? ( + + + + + + + + ) : ( + + + + + {t('callImages.select_from_gallery')} + + + + + + {t('callImages.take_photo')} + + + + )} + + + ); + + const renderImageGallery = () => { + if (!callImages?.length) return null; + + return ( + + + item && item.Url)} + renderItem={renderImageItem} + keyExtractor={(item) => item?.Id || `image-${Math.random()}`} + horizontal + pagingEnabled + showsHorizontalScrollIndicator={false} + onViewableItemsChanged={handleViewableItemsChanged} + viewabilityConfig={{ itemVisiblePercentThreshold: 50 }} + snapToInterval={width} + decelerationRate="fast" + className="w-full" + contentContainerStyle={{ paddingHorizontal: 0 }} + getItemLayout={(_, index) => ({ + length: width, + offset: width * index, + index, + })} + initialNumToRender={1} + maxToRenderPerBatch={1} + windowSize={3} + removeClippedSubviews={true} + initialScrollIndex={0} + maintainVisibleContentPosition={{ + minIndexForVisible: 0, + autoscrollToTopThreshold: 10, + }} + ListEmptyComponent={() => ( + + {t('callImages.no_images')} + + )} + /> + + {renderPagination()} + + ); + }; + + const renderContent = () => { + if (isLoadingImages) { + return ; + } + + if (errorImages) { + return ; + } + + if (isAddingImage) { + return renderAddImageContent(); + } + + if (!callImages || callImages.length === 0) { + return ; + } + + return renderImageGallery(); + }; + + return ( + + + + + + + + + {t('callImages.title')} + {!isAddingImage && !isLoadingImages && ( + + )} + + + {renderContent()} + + + + ); +}; + +export default CallImagesModal; diff --git a/src/components/calls/call-notes-modal.tsx b/src/components/calls/call-notes-modal.tsx new file mode 100644 index 0000000..4cf81d4 --- /dev/null +++ b/src/components/calls/call-notes-modal.tsx @@ -0,0 +1,131 @@ +import { SearchIcon, X } from 'lucide-react-native'; +import React, { useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { Platform, ScrollView, useWindowDimensions } from 'react-native'; +import { KeyboardAwareScrollView } from 'react-native-keyboard-controller'; + +import { useAuthStore } from '@/lib/auth'; +import { useCallDetailStore } from '@/stores/calls/detail-store'; + +import { Loading } from '../common/loading'; +import ZeroState from '../common/zero-state'; +import { FocusAwareStatusBar } from '../ui'; +import { Actionsheet, ActionsheetBackdrop, ActionsheetContent, ActionsheetDragIndicator, ActionsheetDragIndicatorWrapper } from '../ui/actionsheet'; +import { Box } from '../ui/box'; +import { Button, ButtonText } from '../ui/button'; +import { Divider } from '../ui/divider'; +import { Heading } from '../ui/heading'; +import { HStack } from '../ui/hstack'; +import { Input } from '../ui/input'; +import { InputSlot } from '../ui/input'; +import { InputField } from '../ui/input'; +import { Text } from '../ui/text'; +import { Textarea } from '../ui/textarea'; +import { TextareaInput } from '../ui/textarea'; +import { VStack } from '../ui/vstack'; + +interface CallNotesModalProps { + isOpen: boolean; + onClose: () => void; + callId: string; +} + +const CallNotesModal = ({ isOpen, onClose, callId }: CallNotesModalProps) => { + const { t } = useTranslation(); + const [searchQuery, setSearchQuery] = useState(''); + const [newNote, setNewNote] = useState(''); + const { callNotes, addNote, searchNotes, isNotesLoading } = useCallDetailStore(); + const { profile } = useAuthStore(); + const { height, width } = useWindowDimensions(); + + const filteredNotes = React.useMemo(() => { + return searchNotes(searchQuery); + }, [searchQuery, searchNotes]); + + // Mock user for now - in a real app, this would come from authentication + const currentUser = profile?.sub || ''; + + const handleAddNote = async () => { + if (newNote.trim()) { + await addNote(callId, newNote, currentUser, null, null); + setNewNote(''); + } + }; + + return ( + + + ); +}; + +export default CallNotesModal; diff --git a/src/components/common/loading.tsx b/src/components/common/loading.tsx new file mode 100644 index 0000000..c7005f8 --- /dev/null +++ b/src/components/common/loading.tsx @@ -0,0 +1,193 @@ +import { Box, Loader2 } from 'lucide-react-native'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { View } from 'react-native'; + +import { HStack } from '../ui/hstack'; +import { Spinner } from '../ui/spinner'; +import { Text } from '../ui/text'; +import { VStack } from '../ui/vstack'; +interface LoadingProps { + /** + * Text to display below the spinner + * @default undefined + */ + text?: string; + + /** + * Whether to show a fullscreen overlay + * @default false + */ + fullscreen?: boolean; + + /** + * Size of the spinner + * @default "lg" + */ + size?: 'small' | 'large'; + + /** + * Type of loading indicator + * @default "spinner" + */ + type?: 'spinner' | 'dots' | 'icon'; + + /** + * Whether to show a transparent background + * @default false + */ + transparent?: boolean; +} + +export const Loading: React.FC = ({ text, fullscreen = false, size = 'large', type = 'spinner', transparent = false }) => { + const { t } = useTranslation(); + const loadingText = text || t('common:loading'); + + const containerClasses = `items-center justify-center ${fullscreen ? 'absolute inset-0 z-50' : ''} ${transparent ? 'bg-transparent' : 'bg-background/80'}`; + + const renderLoadingIndicator = () => { + switch (type) { + case 'dots': + return ( + + {[1, 2, 3].map((i) => ( + + ))} + + ); + case 'icon': + return ; + case 'spinner': + default: + return ; + } + }; + + return ( + + + {renderLoadingIndicator()} + {loadingText && {loadingText}} + + + ); +}; + +/** + * A skeleton loading placeholder component + */ +interface SkeletonProps { + /** + * Width of the skeleton + * @default "100%" + */ + width?: string | number; + + /** + * Height of the skeleton + * @default 20 + */ + height?: string | number; + + /** + * Border radius of the skeleton + * @default "md" + */ + borderRadius?: 'none' | 'sm' | 'md' | 'lg' | 'full'; + + /** + * Whether the skeleton is currently loading + * @default true + */ + isLoading?: boolean; + + /** + * Content to render when not loading + */ + children?: React.ReactNode; +} + +export const Skeleton: React.FC = ({ width = '100%', height = 20, borderRadius = 'md', isLoading = true, children }) => { + if (!isLoading) { + return <>{children}; + } + + const radiusMap = { + none: 'rounded-none', + sm: 'rounded-sm', + md: 'rounded-md', + lg: 'rounded-lg', + full: 'rounded-full', + }; + + return ; +}; + +/** + * A list skeleton loading component + */ +export const ListSkeleton: React.FC<{ + count?: number; + height?: number; + spacing?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'xs' | '3xl' | '4xl'; +}> = ({ count = 5, height = 60, spacing = 'sm' }) => { + return ( + + {Array.from({ length: count }).map((_, index) => ( + + ))} + + ); +}; + +/** + * A card skeleton loading component + */ +export const CardSkeleton: React.FC<{ + hasImage?: boolean; + hasFooter?: boolean; +}> = ({ hasImage = true, hasFooter = true }) => { + return ( + + {hasImage && } + + + + + + + {hasFooter && ( + + + + + )} + + ); +}; + +/** + * A profile skeleton loading component + */ +export const ProfileSkeleton: React.FC = () => { + return ( + + + + + + + + + + + + + ); +}; diff --git a/src/components/common/zero-state-example.tsx b/src/components/common/zero-state-example.tsx new file mode 100644 index 0000000..a21bb7d --- /dev/null +++ b/src/components/common/zero-state-example.tsx @@ -0,0 +1,56 @@ +import React from 'react'; +import { View } from 'react-native'; +import ZeroState from './zero-state'; +import { FileX, WifiOff, Search, AlertCircle } from 'lucide-react-native'; +import { Button, HStack } from '@gluestack/ui'; + +const ZeroStateExamples: React.FC = () => { + return ( + + {/* Basic empty state */} + + + {/* Error state */} + + + + + {/* Search results empty state */} + + + + + + + + {/* Generic error state with default icon */} + + + ); +}; + +export default ZeroStateExamples; diff --git a/src/components/common/zero-state.test.tsx b/src/components/common/zero-state.test.tsx new file mode 100644 index 0000000..882334a --- /dev/null +++ b/src/components/common/zero-state.test.tsx @@ -0,0 +1,47 @@ +import { Button } from '@gluestack/ui'; +import { render, screen } from '@testing-library/react-native'; +import { AlertCircle, FileX } from 'lucide-react-native'; +import React from 'react'; + +import ZeroState from './zero-state'; + +// Mock the translation hook +jest.mock('react-i18next', () => ({ + useTranslation: () => ({ + t: (key: string, fallback: string) => fallback, + }), +})); + +describe('ZeroState', () => { + it('renders with default props', () => { + render(); + + expect(screen.getByTestId('zero-state')).toBeTruthy(); + expect(screen.getByText('No data available')).toBeTruthy(); + expect(screen.getByText("There's nothing to display at the moment")).toBeTruthy(); + }); + + it('renders with custom props', () => { + render(); + + expect(screen.getByText('No files found')).toBeTruthy(); + expect(screen.getByText('Try uploading some files first')).toBeTruthy(); + }); + + it('renders in error state', () => { + render(); + + expect(screen.getByText('Connection failed')).toBeTruthy(); + expect(screen.getByText('Check your internet connection')).toBeTruthy(); + }); + + it('renders with children', () => { + render( + + + + ); + + expect(screen.getByText('Retry')).toBeTruthy(); + }); +}); diff --git a/src/components/common/zero-state.tsx b/src/components/common/zero-state.tsx new file mode 100644 index 0000000..1ec8677 --- /dev/null +++ b/src/components/common/zero-state.tsx @@ -0,0 +1,101 @@ +import { type LucideIcon } from 'lucide-react-native'; +import { FileQuestion } from 'lucide-react-native'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { Text, View } from 'react-native'; + +import { Box } from '../ui/box'; +import { Center } from '../ui/center'; +import { Heading } from '../ui/heading'; +import { VStack } from '../ui/vstack'; + +interface ZeroStateProps { + /** + * Icon to display (Lucide React Native icon) + * @default FileQuestion + */ + icon?: LucideIcon; + + /** + * Size of the icon + * @default 80 + */ + iconSize?: number; + + /** + * Color of the icon + * @default "#64748b" (slate-500) + */ + iconColor?: string; + + /** + * Heading text + * @default "No data available" + */ + heading?: string; + + /** + * Description text + * @default "There's nothing to display at the moment" + */ + description?: string; + + /** + * Additional content to render below the description + */ + children?: React.ReactNode; + + /** + * Whether this is an error state + * @default false + */ + isError?: boolean; + + /** + * Custom class name for additional styling + */ + className?: string; +} + +/** + * ZeroState component for displaying empty states or error messages + */ +const ZeroState: React.FC = ({ + icon: Icon = FileQuestion, + iconSize = 80, + iconColor = '#64748b', // slate-500 + heading, + description, + children, + isError = false, + className = '', +}) => { + const { t } = useTranslation(); + + // Default texts with translations + const defaultHeading = isError ? t('common.errorOccurred', 'An error occurred') : t('common.noDataAvailable', 'No data available'); + + const defaultDescription = isError ? t('common.tryAgainLater', 'Please try again later') : t('common.nothingToDisplay', "There's nothing to display at the moment"); + + return ( + +
+ + + + + + + {heading || defaultHeading} + + + {description || defaultDescription} + + {children} + +
+
+ ); +}; + +export default ZeroState; diff --git a/src/components/contacts/contact-card.tsx b/src/components/contacts/contact-card.tsx new file mode 100644 index 0000000..ad739db --- /dev/null +++ b/src/components/contacts/contact-card.tsx @@ -0,0 +1,56 @@ +import { BuildingIcon, MailIcon, PhoneIcon, StarIcon, UserIcon } from 'lucide-react-native'; +import React from 'react'; +import { Pressable, Text, View } from 'react-native'; + +import { Avatar, AvatarImage } from '@/components/ui/avatar'; +import { type ContactResultData, ContactType } from '@/models/v4/contacts/contactResultData'; + +interface ContactCardProps { + contact: ContactResultData; + onPress: (id: string) => void; +} + +export const ContactCard: React.FC = ({ contact, onPress }) => { + const getInitials = (name: string) => { + return name + .split(' ') + .map((n) => n[0]) + .join('') + .toUpperCase(); + }; + + return ( + onPress(contact.ContactId)}> + + + {contact.ImageUrl ? ( + + ) : ( + {contact.Type === ContactType.Person ? : } + )} + + + + + {contact.Name} + {contact.IsImportant ? : null} + + + {contact.Email ? ( + + + {contact.Email} + + ) : null} + + {contact.Phone ? ( + + + {contact.Phone} + + ) : null} + + + + ); +}; diff --git a/src/components/contacts/contact-details-sheet.tsx b/src/components/contacts/contact-details-sheet.tsx new file mode 100644 index 0000000..bbb0e1f --- /dev/null +++ b/src/components/contacts/contact-details-sheet.tsx @@ -0,0 +1,149 @@ +import { BuildingIcon, Edit2Icon, HomeIcon, MailIcon, MapPinIcon, PhoneIcon, SmartphoneIcon, StarIcon, TrashIcon, UserIcon, XIcon } from 'lucide-react-native'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { ScrollView, Text, TouchableOpacity, View } from 'react-native'; + +import { Avatar, AvatarImage } from '@/components/ui/avatar'; +import { BottomSheet, BottomSheetBackdrop, BottomSheetContent, BottomSheetDragIndicator, BottomSheetPortal } from '@/components/ui/bottomsheet'; +import { Button, ButtonText } from '@/components/ui/button'; +import { ContactType } from '@/models/v4/contacts/contactResultData'; +import { useContactsStore } from '@/stores/contacts/store'; + +export const ContactDetailsSheet: React.FC = () => { + const { t } = useTranslation(); + const { contacts, selectedContactId, isDetailsOpen, closeDetails, removeContact } = useContactsStore(); + + const selectedContact = React.useMemo(() => { + if (!selectedContactId) return null; + return contacts.find((contact) => contact.ContactId === selectedContactId); + }, [contacts, selectedContactId]); + + const handleDelete = async () => { + if (selectedContactId) { + await removeContact(selectedContactId); + closeDetails(); + } + }; + + if (!selectedContact) return null; + + return ( + {}}> + + + + + {t('contacts.details')} + + + + + + + + + {selectedContact.ImageUrl ? ( + + ) : ( + + {selectedContact.Type === ContactType.Person ? : } + + )} + + + + {selectedContact.Name} + {selectedContact.IsImportant ? : null} + + + {selectedContact.Type === ContactType.Person ? t('contacts.person') : t('contacts.company')} + + + + {selectedContact.Email ? ( + + + + + + {t('contacts.email')} + {selectedContact.Email} + + + ) : null} + + {selectedContact.Phone ? ( + + + + + + {t('contacts.phone')} + {selectedContact.Phone} + + + ) : null} + + {selectedContact.Mobile ? ( + + + + + + {t('contacts.mobile')} + {selectedContact.Mobile} + + + ) : null} + + {selectedContact.Address ? ( + + + + + + {t('contacts.address')} + {selectedContact.Address} + + + ) : null} + + {selectedContact.City && selectedContact.State ? ( + + + + + + {t('contacts.cityState')} + + {selectedContact.City}, {selectedContact.State} {selectedContact.Zip ? selectedContact.Zip : ''} + + + + ) : null} + + {selectedContact.Notes ? ( + + {t('contacts.notes')} + {selectedContact.Notes} + + ) : null} + + + + + + + + + + + + ); +}; diff --git a/src/components/livekit/index.tsx b/src/components/livekit/index.tsx new file mode 100644 index 0000000..1efe4e8 --- /dev/null +++ b/src/components/livekit/index.tsx @@ -0,0 +1 @@ +export { LiveKitBottomSheet } from './livekit-bottom-sheet'; diff --git a/src/components/livekit/livekit-bottom-sheet.tsx b/src/components/livekit/livekit-bottom-sheet.tsx new file mode 100644 index 0000000..273485e --- /dev/null +++ b/src/components/livekit/livekit-bottom-sheet.tsx @@ -0,0 +1,164 @@ +import { t } from 'i18next'; +import { Mic, MicOff, PhoneOff } from 'lucide-react-native'; +import { useColorScheme } from 'nativewind'; +import React, { useEffect, useState } from 'react'; +import { ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native'; + +import { type DepartmentVoiceChannelResultData } from '@/models/v4/voice/departmentVoiceResultData'; + +import { Card } from '../../components/ui/card'; +import { Text } from '../../components/ui/text'; +import { useLiveKitStore } from '../../stores/app/livekit-store'; +import { Actionsheet, ActionsheetBackdrop, ActionsheetContent, ActionsheetDragIndicator, ActionsheetDragIndicatorWrapper } from '../ui/actionsheet'; +import { HStack } from '../ui/hstack'; + +export enum BottomSheetView { + ROOM_SELECT = 'room_select', + CONNECTED = 'connected', +} + +export const LiveKitBottomSheet = () => { + const { isBottomSheetVisible, setIsBottomSheetVisible, availableRooms, fetchVoiceSettings, connectToRoom, disconnectFromRoom, currentRoomInfo, isConnected, isConnecting, isTalking } = useLiveKitStore(); + const { colorScheme } = useColorScheme(); + + const [currentView, setCurrentView] = useState(BottomSheetView.ROOM_SELECT); + const [isMuted, setIsMuted] = useState(false); + + useEffect(() => { + // If we're showing the sheet, make sure we have the latest rooms + if (isBottomSheetVisible && currentView === BottomSheetView.ROOM_SELECT) { + fetchVoiceSettings(); + } + }, [isBottomSheetVisible, currentView, fetchVoiceSettings]); + + useEffect(() => { + // If we're connected to a room, show the connected view + if (isConnected && currentRoomInfo) { + setCurrentView(BottomSheetView.CONNECTED); + } else { + setCurrentView(BottomSheetView.ROOM_SELECT); + } + }, [isConnected, currentRoomInfo]); + + const handleRoomSelect = (room: DepartmentVoiceChannelResultData) => { + connectToRoom(room, room.Token); + }; + + const handleMuteToggle = async () => { + const { currentRoom } = useLiveKitStore.getState(); + if (currentRoom) { + const newMuteState = !isMuted; + await currentRoom.localParticipant.setMicrophoneEnabled(!newMuteState); + setIsMuted(newMuteState); + } + }; + + const handleDisconnect = () => { + disconnectFromRoom(); + setCurrentView(BottomSheetView.ROOM_SELECT); + }; + + const renderRoomSelect = () => ( + + {availableRooms.length === 0 ? ( + + {t('livekit.no_rooms_available')} + + ) : ( + + {availableRooms.map((room) => ( + + {room.Name} + handleRoomSelect(room)} style={styles.joinButton}> + {t('livekit.join')} + + + ))} + + )} + + ); + + const renderConnectedView = () => ( + + {t('livekit.connected_to_room')} + + {currentRoomInfo?.Name} + {isTalking && {t('livekit.speaking')}} + + + + + {isMuted ? : } + {isMuted ? t('livekit.unmute') : t('livekit.mute')} + + + + + {t('livekit.disconnect')} + + + + ); + + return ( + setIsBottomSheetVisible(false)} snapPoints={[30]}> + + + + + + + + {t('livekit.title')} + + + + {isConnecting ? ( + + {t('livekit.connecting')} + + ) : currentView === BottomSheetView.ROOM_SELECT ? ( + renderRoomSelect() + ) : ( + renderConnectedView() + )} + + + + + ); +}; + +const styles = StyleSheet.create({ + content: { + flex: 1, + width: '100%', + paddingHorizontal: 16, + }, + roomList: { + flex: 1, + }, + roomItem: { + marginBottom: 8, + }, + controls: { + flexDirection: 'row', + justifyContent: 'space-around', + marginTop: 16, + }, + controlButton: { + alignItems: 'center', + padding: 12, + }, + joinButton: { + backgroundColor: '#007AFF', + paddingHorizontal: 12, + paddingVertical: 6, + borderRadius: 4, + }, + joinButtonText: { + color: 'white', + fontWeight: '600', + }, +}); diff --git a/src/components/maps/full-screen-location-picker.tsx b/src/components/maps/full-screen-location-picker.tsx new file mode 100644 index 0000000..ddde3c6 --- /dev/null +++ b/src/components/maps/full-screen-location-picker.tsx @@ -0,0 +1,222 @@ +import Mapbox from '@rnmapbox/maps'; +import * as Location from 'expo-location'; +import { MapPinIcon, XIcon } from 'lucide-react-native'; +import React, { useEffect, useRef, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { Dimensions, StyleSheet, TouchableOpacity } from 'react-native'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; + +import { Box } from '@/components/ui/box'; +import { Button, ButtonText } from '@/components/ui/button'; +import { Text } from '@/components/ui/text'; + +interface FullScreenLocationPickerProps { + initialLocation?: { + latitude: number; + longitude: number; + }; + onLocationSelected: (location: { latitude: number; longitude: number; address?: string }) => void; + onClose: () => void; +} + +const FullScreenLocationPicker: React.FC = ({ initialLocation, onLocationSelected, onClose }) => { + const { t } = useTranslation(); + const insets = useSafeAreaInsets(); + const mapRef = useRef(null); + const cameraRef = useRef(null); + const [currentLocation, setCurrentLocation] = useState<{ + latitude: number; + longitude: number; + } | null>(initialLocation || null); + const [isLoading, setIsLoading] = useState(false); + const [isReverseGeocoding, setIsReverseGeocoding] = useState(false); + const [address, setAddress] = useState(undefined); + + useEffect(() => { + if (initialLocation) { + setCurrentLocation(initialLocation); + reverseGeocode(initialLocation.latitude, initialLocation.longitude); + } else { + getUserLocation(); + } + }, [initialLocation]); + + const getUserLocation = async () => { + setIsLoading(true); + try { + const { status } = await Location.requestForegroundPermissionsAsync(); + if (status !== 'granted') { + console.error('Location permission not granted'); + setIsLoading(false); + return; + } + + const location = await Location.getCurrentPositionAsync({}); + const newLocation = { + latitude: location.coords.latitude, + longitude: location.coords.longitude, + }; + setCurrentLocation(newLocation); + reverseGeocode(newLocation.latitude, newLocation.longitude); + + // Move camera to user location + if (cameraRef.current) { + cameraRef.current.setCamera({ + centerCoordinate: [location.coords.longitude, location.coords.latitude], + zoomLevel: 15, + animationDuration: 1000, + }); + } + } catch (error) { + console.error('Error getting location:', error); + } finally { + setIsLoading(false); + } + }; + + const reverseGeocode = async (latitude: number, longitude: number) => { + setIsReverseGeocoding(true); + try { + const result = await Location.reverseGeocodeAsync({ + latitude, + longitude, + }); + + if (result && result.length > 0) { + const { street, name, city, region, country, postalCode } = result[0]; + let addressParts = []; + + if (street) addressParts.push(street); + if (name && name !== street) addressParts.push(name); + if (city) addressParts.push(city); + if (region) addressParts.push(region); + if (postalCode) addressParts.push(postalCode); + if (country) addressParts.push(country); + + setAddress(addressParts.join(', ')); + } else { + setAddress(undefined); + } + } catch (error) { + console.error('Error reverse geocoding:', error); + setAddress(undefined); + } finally { + setIsReverseGeocoding(false); + } + }; + + const handleMapPress = (event: any) => { + const { coordinates } = event.geometry; + const newLocation = { + latitude: coordinates[1], + longitude: coordinates[0], + }; + setCurrentLocation(newLocation); + reverseGeocode(newLocation.latitude, newLocation.longitude); + }; + + const handleConfirmLocation = () => { + if (currentLocation) { + onLocationSelected({ + ...currentLocation, + address, + }); + onClose(); + } + }; + + if (isLoading) { + return ( + + {t('common.loading')} + + ); + } + + return ( + + {currentLocation ? ( + + + {/* Marker for the selected location */} + + + + + + + ) : ( + + {t('common.no_location')} + + {t('common.get_my_location')} + + + )} + + {/* Close button */} + + + + + {/* Location info and confirm button */} + + {isReverseGeocoding ? ( + {t('common.loading_address')} + ) : address ? ( + {address} + ) : ( + {t('common.no_address_found')} + )} + + {currentLocation && ( + + {currentLocation.latitude.toFixed(6)}, {currentLocation.longitude.toFixed(6)} + + )} + + + + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + width: Dimensions.get('window').width, + height: Dimensions.get('window').height, + position: 'relative', + }, + map: { + flex: 1, + }, + closeButton: { + position: 'absolute', + left: 16, + width: 40, + height: 40, + borderRadius: 20, + backgroundColor: 'white', + justifyContent: 'center', + alignItems: 'center', + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.2, + shadowRadius: 4, + elevation: 4, + zIndex: 10, + }, + bottomPanel: { + position: 'absolute', + bottom: 0, + left: 0, + right: 0, + borderTopLeftRadius: 16, + borderTopRightRadius: 16, + }, +}); + +export default FullScreenLocationPicker; diff --git a/src/components/maps/location-picker.tsx b/src/components/maps/location-picker.tsx new file mode 100644 index 0000000..4bd1dab --- /dev/null +++ b/src/components/maps/location-picker.tsx @@ -0,0 +1,131 @@ +import Mapbox from '@rnmapbox/maps'; +import * as Location from 'expo-location'; +import React, { useEffect, useRef, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { StyleSheet, TouchableOpacity } from 'react-native'; + +import { Box } from '@/components/ui/box'; +import { Button, ButtonText } from '@/components/ui/button'; +import { Text } from '@/components/ui/text'; + +interface LocationPickerProps { + initialLocation?: { + latitude: number; + longitude: number; + }; + onLocationSelected: (location: { latitude: number; longitude: number; address?: string }) => void; + height?: number; +} + +const LocationPicker: React.FC = ({ initialLocation, onLocationSelected, height = 200 }) => { + const { t } = useTranslation(); + const mapRef = useRef(null); + const cameraRef = useRef(null); + const [currentLocation, setCurrentLocation] = useState<{ + latitude: number; + longitude: number; + } | null>(initialLocation || null); + const [isLoading, setIsLoading] = useState(false); + + useEffect(() => { + if (initialLocation) { + setCurrentLocation(initialLocation); + } else { + getUserLocation(); + } + }, [initialLocation]); + + const getUserLocation = async () => { + setIsLoading(true); + try { + const { status } = await Location.requestForegroundPermissionsAsync(); + if (status !== 'granted') { + console.error('Location permission not granted'); + setIsLoading(false); + return; + } + + const location = await Location.getCurrentPositionAsync({}); + setCurrentLocation({ + latitude: location.coords.latitude, + longitude: location.coords.longitude, + }); + + // Move camera to user location + if (cameraRef.current) { + cameraRef.current.setCamera({ + centerCoordinate: [location.coords.longitude, location.coords.latitude], + zoomLevel: 15, + animationDuration: 1000, + }); + } + } catch (error) { + console.error('Error getting location:', error); + } finally { + setIsLoading(false); + } + }; + + const handleMapPress = (event: any) => { + const { coordinates } = event.geometry; + setCurrentLocation({ + latitude: coordinates[1], + longitude: coordinates[0], + }); + }; + + const handleConfirmLocation = () => { + if (currentLocation) { + onLocationSelected(currentLocation); + } + }; + + if (isLoading) { + return ( + + {t('common.loading')} + + ); + } + + return ( + + {currentLocation ? ( + + + {/* Marker for the selected location */} + + + + + ) : ( + + {t('common.no_location')} + + {t('common.get_my_location')} + + + )} + + + + + + ); +}; + +const styles = StyleSheet.create({ + container: { + width: '100%', + position: 'relative', + overflow: 'hidden', + borderRadius: 8, + }, + map: { + flex: 1, + }, +}); + +export default LocationPicker; diff --git a/src/components/maps/map-pins.tsx b/src/components/maps/map-pins.tsx new file mode 100644 index 0000000..64fd252 --- /dev/null +++ b/src/components/maps/map-pins.tsx @@ -0,0 +1,28 @@ +import Mapbox from '@rnmapbox/maps'; +import React from 'react'; + +import { type MAP_ICONS } from '@/constants/map-icons'; +import { type MapMakerInfoData } from '@/models/v4/mapping/getMapDataAndMarkersData'; + +import PinMarker from './pin-marker'; + +type MapIconKey = keyof typeof MAP_ICONS; + +interface MapPinsProps { + pins: MapMakerInfoData[]; + onPinPress?: (pin: MapMakerInfoData) => void; +} + +const MapPins: React.FC = ({ pins, onPinPress }) => { + return ( + <> + {pins.map((pin) => ( + + onPinPress?.(pin)} /> + + ))} + + ); +}; + +export default MapPins; diff --git a/src/components/maps/pin-marker.tsx b/src/components/maps/pin-marker.tsx new file mode 100644 index 0000000..17a05b5 --- /dev/null +++ b/src/components/maps/pin-marker.tsx @@ -0,0 +1,51 @@ +import type Mapbox from '@rnmapbox/maps'; +import { useColorScheme } from 'nativewind'; +import React from 'react'; +import { Image, StyleSheet, Text, TouchableOpacity } from 'react-native'; + +import { MAP_ICONS } from '@/constants/map-icons'; + +type MapIconKey = keyof typeof MAP_ICONS; + +interface PinMarkerProps { + imagePath?: MapIconKey; + title: string; + size?: number; + markerRef?: Mapbox.PointAnnotation | null; + onPress?: () => void; +} + +const PinMarker: React.FC = ({ imagePath, title, size = 32, onPress }) => { + const { colorScheme } = useColorScheme(); + + const icon = imagePath ? MAP_ICONS[imagePath.toLowerCase() as MapIconKey] : MAP_ICONS['call']; + + return ( + + + + {title} + + + ); +}; + +const styles = StyleSheet.create({ + container: { + alignItems: 'center', + justifyContent: 'center', + }, + image: { + overflow: 'visible', + resizeMode: 'cover', + }, + title: { + marginTop: 2, + overflow: 'visible', + fontSize: 10, + fontWeight: '600', + textAlign: 'center', + }, +}); + +export default PinMarker; diff --git a/src/components/maps/static-map.tsx b/src/components/maps/static-map.tsx new file mode 100644 index 0000000..6e287cd --- /dev/null +++ b/src/components/maps/static-map.tsx @@ -0,0 +1,74 @@ +import Mapbox from '@rnmapbox/maps'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { StyleSheet } from 'react-native'; + +import { Box } from '@/components/ui/box'; +import { Text } from '@/components/ui/text'; + +interface StaticMapProps { + latitude: number; + longitude: number; + address?: string; + zoom?: number; + height?: number; + showUserLocation?: boolean; +} + +const StaticMap: React.FC = ({ latitude, longitude, address, zoom = 15, height = 200, showUserLocation = false }) => { + const { t } = useTranslation(); + if (!latitude || !longitude) { + return ( + + {t('call_detail.no_location')} + + ); + } + + return ( + + + + {/* Marker for the location */} + + + + + {/* Show user location if requested */} + {showUserLocation && } + + + {/* Address overlay */} + {address && ( + + {address} + + )} + + ); +}; + +const styles = StyleSheet.create({ + container: { + width: '100%', + position: 'relative', + overflow: 'hidden', + }, + map: { + flex: 1, + }, + addressContainer: { + position: 'absolute', + bottom: 0, + left: 0, + right: 0, + backgroundColor: 'rgba(0, 0, 0, 0.6)', + padding: 8, + }, + addressText: { + color: 'white', + fontSize: 12, + }, +}); + +export default StaticMap; diff --git a/src/components/notes/note-card.tsx b/src/components/notes/note-card.tsx new file mode 100644 index 0000000..5500877 --- /dev/null +++ b/src/components/notes/note-card.tsx @@ -0,0 +1,38 @@ +import React from 'react'; +import { Pressable } from 'react-native'; + +import { formatDateForDisplay, parseDateISOString, stripHtmlTags } from '@/lib/utils'; +import { type NoteResultData } from '@/models/v4/notes/noteResultData'; + +import { Badge } from '../ui/badge'; +import { Box } from '../ui/box'; +import { HStack } from '../ui/hstack'; +import { Text } from '../ui/text'; +import { VStack } from '../ui/vstack'; +interface NoteCardProps { + note: NoteResultData; + onPress: (id: string) => void; +} + +export const NoteCard: React.FC = ({ note, onPress }) => { + return ( + onPress(note.NoteId)}> + + + {note.Title} + + {stripHtmlTags(note.Body)} + + {note.Category && ( + + + {note.Category} + + + )} + {formatDateForDisplay(parseDateISOString(note.AddedOn), 'yyyy-MM-dd HH:mm Z')} + + + + ); +}; diff --git a/src/components/notes/note-details-sheet.tsx b/src/components/notes/note-details-sheet.tsx new file mode 100644 index 0000000..48a2fa8 --- /dev/null +++ b/src/components/notes/note-details-sheet.tsx @@ -0,0 +1,143 @@ +import { Calendar, Tag, X } from 'lucide-react-native'; +import { useColorScheme } from 'nativewind'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { StyleSheet } from 'react-native'; +import WebView from 'react-native-webview'; + +import { formatDateForDisplay, parseDateISOString } from '@/lib/utils'; +import { useNotesStore } from '@/stores/notes/store'; + +import { Actionsheet, ActionsheetBackdrop, ActionsheetContent, ActionsheetDragIndicator, ActionsheetDragIndicatorWrapper } from '../ui/actionsheet'; +import { Box } from '../ui/box'; +import { Button } from '../ui/button'; +import { Divider } from '../ui/divider'; +import { Heading } from '../ui/heading'; +import { HStack } from '../ui/hstack'; +import { Text } from '../ui/text'; +import { VStack } from '../ui/vstack'; + +export const NoteDetailsSheet: React.FC = () => { + const { t } = useTranslation(); + const { colorScheme } = useColorScheme(); + const { notes, selectedNoteId, isDetailsOpen, closeDetails, deleteNote } = useNotesStore(); + + const selectedNote = notes.find((note) => note.NoteId === selectedNoteId); + + if (!selectedNote) return null; + + const textColor = colorScheme === 'dark' ? '#E5E7EB' : '#1F2937'; // gray-200 : gray-800 + + return ( + + + + + + + + + + + {selectedNote.Title} + + + + + + {/* Note content in WebView */} + + + + + + + + ${selectedNote.Body} + + `, + }} + androidLayerType="software" + /> + + + + + {/* Category */} + {selectedNote.Category && ( + + + {selectedNote.Category} + + )} + + {/* Date information */} + + {selectedNote.AddedOn && ( + + + {formatDateForDisplay(parseDateISOString(selectedNote.AddedOn), 'yyyy-MM-dd HH:mm Z')} + + )} + + + {/* Action buttons + + + + + */} + + + + + ); +}; + +const styles = StyleSheet.create({ + container: { + width: '100%', + backgroundColor: 'transparent', + }, +}); diff --git a/src/components/notifications/NotificationButton.tsx b/src/components/notifications/NotificationButton.tsx new file mode 100644 index 0000000..3429366 --- /dev/null +++ b/src/components/notifications/NotificationButton.tsx @@ -0,0 +1,35 @@ +import { useCounts } from '@novu/react-native'; +import { BellIcon } from 'lucide-react-native'; +import React from 'react'; + +import { ActivityIndicator, Pressable, View } from '@/components/ui'; +import { Text } from '@/components/ui/text'; +interface NotificationButtonProps { + onPress: () => void; +} + +export const NotificationButton = ({ onPress }: NotificationButtonProps) => { + const { counts, isLoading } = useCounts({ + filters: [ + { + read: false, + }, + ], + }); + + if (isLoading) return ; + + return ( + + + + + {counts?.[0]?.count && counts?.[0]?.count > 0 ? ( + + {counts?.[0]?.count > 99 ? '99+' : counts?.[0]?.count} + + ) : null} + + + ); +}; diff --git a/src/components/notifications/NotificationDetail.tsx b/src/components/notifications/NotificationDetail.tsx new file mode 100644 index 0000000..d14d5d8 --- /dev/null +++ b/src/components/notifications/NotificationDetail.tsx @@ -0,0 +1,360 @@ +import { useNotifications } from '@novu/react-native'; +import { ArrowLeft, Calendar, ExternalLink, Trash2 } from 'lucide-react-native'; +import { colorScheme } from 'nativewind'; +import React, { useEffect } from 'react'; +import { Animated, Dimensions, Platform, Pressable, SafeAreaView, StatusBar, StyleSheet, Text, View } from 'react-native'; + +// Define the interface directly in this file +interface NotificationPayload { + id: string; + title?: string; + body: string; + createdAt: string; + read?: boolean; + type?: string; + referenceId?: string; + referenceType?: string; + metadata?: Record; +} + +interface NotificationDetailProps { + notification: NotificationPayload; + onClose: () => void; + onDelete: (id: string) => void; + onNavigateToReference: (referenceType: string, referenceId: string) => void; +} + +const { width } = Dimensions.get('window'); +const SIDEBAR_WIDTH = Math.min(width * 0.85, 400); +const STATUS_BAR_HEIGHT = Platform.OS === 'ios' ? 44 : StatusBar.currentHeight || 0; + +export const NotificationDetail = ({ notification, onClose, onDelete, onNavigateToReference }: NotificationDetailProps) => { + const { refetch } = useNotifications(); + const slideAnim = React.useRef(new Animated.Value(SIDEBAR_WIDTH)).current; + const fadeAnim = React.useRef(new Animated.Value(0)).current; + + useEffect(() => { + // Mark as read when opened - we'll just refetch to sync with server + if (!notification.read && notification.id) { + refetch(); + } + + // Animate in + Animated.parallel([ + Animated.timing(slideAnim, { + toValue: 0, + duration: 300, + useNativeDriver: true, + }), + Animated.timing(fadeAnim, { + toValue: 1, + duration: 300, + useNativeDriver: true, + }), + ]).start(); + }, [notification, refetch]); + + const handleClose = () => { + // Animate out + Animated.parallel([ + Animated.timing(slideAnim, { + toValue: SIDEBAR_WIDTH, + duration: 300, + useNativeDriver: true, + }), + Animated.timing(fadeAnim, { + toValue: 0, + duration: 300, + useNativeDriver: true, + }), + ]).start(() => { + onClose(); + }); + }; + + const handleDelete = () => { + onDelete(notification.id); + handleClose(); + }; + + const handleNavigateToReference = () => { + if (notification.referenceType && notification.referenceId) { + onNavigateToReference(notification.referenceType, notification.referenceId); + handleClose(); + } + }; + + // Format the date for display + const formattedDate = new Date(notification.createdAt).toLocaleDateString(undefined, { + weekday: 'long', + year: 'numeric', + month: 'long', + day: 'numeric', + }); + + const formattedTime = new Date(notification.createdAt).toLocaleTimeString(undefined, { + hour: '2-digit', + minute: '2-digit', + }); + + return ( + + + + + + + + + + + + Notification + + + + + + + + + + {formattedDate} + + {formattedTime} + + + {notification.type ? ( + + {notification.type} + + ) : null} + + {notification.title ? {notification.title} : null} + + + {notification.body} + + + {notification.metadata && Object.keys(notification.metadata).length > 0 ? ( + + Additional Information + {Object.entries(notification.metadata).map(([key, value]) => ( + + {formatKey(key)}: + {formatValue(value)} + + ))} + + ) : null} + + {notification.referenceType && notification.referenceId ? ( + + + View {notification.referenceType} + + ) : null} + + + + + ); +}; + +// Helper function to format metadata keys for display +const formatKey = (key: string): string => { + return key + .replace(/([A-Z])/g, ' $1') // Insert a space before all capital letters + .replace(/^./, (str) => str.toUpperCase()) // Capitalize the first letter + .trim(); +}; + +// Helper function to format metadata values for display +const formatValue = (value: any): string => { + if (value === null || value === undefined) return 'N/A'; + if (typeof value === 'object') return JSON.stringify(value); + return String(value); +}; + +// Helper function to get tag style based on notification type +const getTypeTagStyle = (type: string): any => { + const lowerType = type.toLowerCase(); + + if (lowerType.includes('alert') || lowerType.includes('emergency')) { + return styles.typeTagAlert; + } else if (lowerType.includes('warning')) { + return styles.typeTagWarning; + } else if (lowerType.includes('info')) { + return styles.typeTagInfo; + } else if (lowerType.includes('success')) { + return styles.typeTagSuccess; + } else { + return styles.typeTagDefault; + } +}; + +const styles = StyleSheet.create({ + backdrop: { + backgroundColor: 'rgba(0, 0, 0, 0.5)', + zIndex: 9999, + }, + backdropPressable: { + width: '100%', + height: '100%', + }, + sidebarContainer: { + position: 'absolute', + top: 0, + right: 0, + width: SIDEBAR_WIDTH, + height: '100%', + backgroundColor: colorScheme.get() === 'dark' ? '#171717' : '#fff', + shadowColor: colorScheme.get() === 'dark' ? '#262626' : '#e5e5e5', + shadowOffset: { + width: -2, + height: 0, + }, + shadowOpacity: 0.25, + shadowRadius: 3.84, + elevation: 5, + zIndex: 10000, + }, + safeArea: { + flex: 1, + }, + header: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + padding: 16, + paddingTop: Platform.OS === 'android' ? STATUS_BAR_HEIGHT + 16 : 16, + borderBottomWidth: 1, + borderBottomColor: colorScheme.get() === 'dark' ? '#333333' : '#e5e5e5', + }, + headerTitle: { + fontSize: 18, + fontWeight: 'bold', + flex: 1, + textAlign: 'center', + color: colorScheme.get() === 'dark' ? '#f3f4f6' : '#111827', + }, + backButton: { + padding: 8, + }, + deleteButton: { + padding: 8, + }, + content: { + padding: 20, + }, + metadataContainer: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: 16, + }, + dateContainer: { + flexDirection: 'row', + alignItems: 'center', + }, + dateText: { + fontSize: 14, + color: colorScheme.get() === 'dark' ? '#9ca3af' : '#6b7280', + marginLeft: 6, + }, + timeText: { + fontSize: 14, + color: colorScheme.get() === 'dark' ? '#9ca3af' : '#6b7280', + }, + typeTag: { + alignSelf: 'flex-start', + paddingHorizontal: 10, + paddingVertical: 4, + borderRadius: 16, + marginBottom: 16, + }, + typeTagText: { + fontSize: 12, + fontWeight: '500', + textTransform: 'uppercase', + }, + typeTagDefault: { + backgroundColor: colorScheme.get() === 'dark' ? '#374151' : '#e5e7eb', + }, + typeTagInfo: { + backgroundColor: colorScheme.get() === 'dark' ? '#1e40af' : '#dbeafe', + }, + typeTagSuccess: { + backgroundColor: colorScheme.get() === 'dark' ? '#065f46' : '#d1fae5', + }, + typeTagWarning: { + backgroundColor: colorScheme.get() === 'dark' ? '#92400e' : '#fef3c7', + }, + typeTagAlert: { + backgroundColor: colorScheme.get() === 'dark' ? '#991b1b' : '#fee2e2', + }, + title: { + fontSize: 20, + fontWeight: 'bold', + marginBottom: 12, + color: colorScheme.get() === 'dark' ? '#f3f4f6' : '#111827', + }, + bodyContainer: { + backgroundColor: colorScheme.get() === 'dark' ? '#262626' : '#f9fafb', + padding: 16, + borderRadius: 8, + marginBottom: 20, + }, + body: { + fontSize: 16, + lineHeight: 24, + color: colorScheme.get() === 'dark' ? '#e5e5e5' : '#374151', + }, + metadataDetailsContainer: { + marginTop: 10, + padding: 16, + backgroundColor: colorScheme.get() === 'dark' ? '#262626' : '#f9fafb', + borderRadius: 8, + }, + metadataTitle: { + fontSize: 16, + fontWeight: '600', + marginBottom: 10, + color: colorScheme.get() === 'dark' ? '#f3f4f6' : '#111827', + }, + metadataItem: { + flexDirection: 'row', + marginBottom: 6, + }, + metadataKey: { + fontSize: 14, + fontWeight: '500', + marginRight: 8, + color: colorScheme.get() === 'dark' ? '#9ca3af' : '#6b7280', + }, + metadataValue: { + fontSize: 14, + flex: 1, + color: colorScheme.get() === 'dark' ? '#e5e5e5' : '#111827', + }, + buttonText: { + fontSize: 16, + fontWeight: '500', + color: colorScheme.get() === 'dark' ? '#3b82f6' : '#2563eb', + }, + referenceButton: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + marginTop: 24, + backgroundColor: colorScheme.get() === 'dark' ? '#1e3a8a' : '#dbeafe', + padding: 12, + borderRadius: 8, + borderWidth: 1, + borderColor: colorScheme.get() === 'dark' ? '#3b82f6' : '#60a5fa', + }, + referenceButtonIcon: { + marginRight: 8, + color: colorScheme.get() === 'dark' ? '#3b82f6' : '#2563eb', + }, +}); diff --git a/src/components/notifications/NotificationInbox.tsx b/src/components/notifications/NotificationInbox.tsx new file mode 100644 index 0000000..41ba412 --- /dev/null +++ b/src/components/notifications/NotificationInbox.tsx @@ -0,0 +1,296 @@ +import { useNotifications } from '@novu/react-native'; +import { ChevronRight, ExternalLink, X } from 'lucide-react-native'; +import { colorScheme } from 'nativewind'; +import React, { useEffect, useRef, useState } from 'react'; +import { ActivityIndicator, Animated, Dimensions, FlatList, Platform, Pressable, RefreshControl, SafeAreaView, StatusBar, StyleSheet, View } from 'react-native'; + +import { NotificationDetail } from '@/components/notifications/NotificationDetail'; +import { Button } from '@/components/ui/button'; +import { Text } from '@/components/ui/text'; +import { useCoreStore } from '@/stores/app/core-store'; +import { useToastStore } from '@/stores/toast/store'; +import { type NotificationPayload } from '@/types/notification'; + +// Constants +const { width } = Dimensions.get('window'); +const SIDEBAR_WIDTH = Math.min(width * 0.85, 400); +const STATUS_BAR_HEIGHT = Platform.OS === 'ios' ? 44 : StatusBar.currentHeight || 0; + +interface NotificationInboxProps { + isOpen: boolean; + onClose: () => void; +} + +export const NotificationInbox = ({ isOpen, onClose }: NotificationInboxProps) => { + const activeUnitId = useCoreStore((state) => state.activeUnitId); + const config = useCoreStore((state: any) => state.config); + const { notifications, isLoading, fetchMore, hasMore, refetch } = useNotifications(); + const showToast = useToastStore((state) => state.showToast); + const [selectedNotification, setSelectedNotification] = useState(null); + + // Animation values + const slideAnim = useRef(new Animated.Value(SIDEBAR_WIDTH)).current; + const fadeAnim = useRef(new Animated.Value(0)).current; + + useEffect(() => { + if (isOpen) { + // Animate in + Animated.parallel([ + Animated.timing(slideAnim, { + toValue: 0, + duration: 300, + useNativeDriver: true, + }), + Animated.timing(fadeAnim, { + toValue: 1, + duration: 300, + useNativeDriver: true, + }), + ]).start(); + } else { + // Animate out + Animated.parallel([ + Animated.timing(slideAnim, { + toValue: SIDEBAR_WIDTH, + duration: 300, + useNativeDriver: true, + }), + Animated.timing(fadeAnim, { + toValue: 0, + duration: 300, + useNativeDriver: true, + }), + ]).start(); + } + }, [isOpen, slideAnim, fadeAnim]); + + const handleNotificationPress = (notification: NotificationPayload) => { + setSelectedNotification(notification); + }; + + const handleDeleteNotification = async (_id: string) => { + try { + // Since Novu doesn't provide a direct delete method, we'll just refetch to sync with server + showToast('success', 'Notification removed'); + refetch(); + } catch (error) { + showToast('error', 'Failed to remove notification'); + } + }; + + const handleNavigateToReference = (referenceType: string, referenceId: string) => { + // TODO: Implement navigation based on reference type + console.log('Navigate to:', referenceType, referenceId); + onClose(); + }; + + const renderItem = ({ item }: { item: any }) => { + const notification: NotificationPayload = { + id: item.id, + title: item.title, + body: item.body, + createdAt: item.createdAt, + read: item.read, + type: item.type, + referenceId: item.payload?.referenceId, + referenceType: item.payload?.referenceType, + metadata: item.payload?.metadata, + }; + + return ( + handleNotificationPress(notification)} style={[styles.notificationItem, !item.read ? styles.unreadNotificationItem : {}]}> + {!item.read ? : null} + + {notification.body} + + {new Date(notification.createdAt).toLocaleDateString()} {new Date(notification.createdAt).toLocaleTimeString()} + + + {notification.referenceType && notification.referenceId ? ( + + + + + ) : ( + + )} + + ); + }; + + const renderFooter = () => { + if (!hasMore) return null; + + return ( + + + + ); + }; + + const renderEmpty = () => ( + + No updates available + + ); + + if (!isOpen) { + return null; + } + + return ( + + {/* Backdrop for tapping outside to close */} + + + + + {/* Sidebar container */} + + + {selectedNotification ? ( + setSelectedNotification(null)} onDelete={handleDeleteNotification} onNavigateToReference={handleNavigateToReference} /> + ) : ( + <> + + Notifications + + + + + + {isLoading && !notifications ? ( + + + + ) : !activeUnitId || !config ? ( + + Unable to load notifications + + ) : ( + item.id} + contentContainerStyle={styles.listContainer} + onEndReached={fetchMore} + onEndReachedThreshold={0.5} + ListFooterComponent={renderFooter} + ListEmptyComponent={renderEmpty} + refreshControl={} + /> + )} + + )} + + + + ); +}; + +const styles = StyleSheet.create({ + backdrop: { + backgroundColor: 'rgba(0, 0, 0, 0.5)', + zIndex: 9999, + }, + backdropPressable: { + width: '100%', + height: '100%', + }, + sidebarContainer: { + position: 'absolute', + top: 0, + right: 0, + width: SIDEBAR_WIDTH, + height: '100%', + backgroundColor: colorScheme.get() === 'dark' ? '#171717' : '#fff', + shadowColor: colorScheme.get() === 'dark' ? '#262626' : '#e5e5e5', + shadowOffset: { + width: -2, + height: 0, + }, + shadowOpacity: 0.25, + shadowRadius: 3.84, + elevation: 5, + zIndex: 10000, + }, + safeArea: { + flex: 1, + }, + header: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + padding: 16, + paddingTop: Platform.OS === 'android' ? STATUS_BAR_HEIGHT + 16 : 16, + borderBottomWidth: 1, + borderBottomColor: '#eee', + }, + headerTitle: { + fontSize: 18, + fontWeight: 'bold', + }, + closeButton: { + padding: 8, + }, + notificationItem: { + flexDirection: 'row', + alignItems: 'center', + padding: 16, + borderBottomWidth: 1, + borderBottomColor: colorScheme.get() === 'dark' ? '#333333' : '#eee', + position: 'relative', + }, + unreadNotificationItem: { + backgroundColor: colorScheme.get() === 'dark' ? '#262626' : '#f0f7ff', + }, + unreadIndicator: { + position: 'absolute', + left: 0, + top: 0, + width: 4, + height: '100%', + backgroundColor: colorScheme.get() === 'dark' ? '#60a5fa' : '#3b82f6', + }, + notificationContent: { + flex: 1, + marginRight: 8, + }, + notificationBody: { + fontSize: 16, + marginBottom: 4, + color: colorScheme.get() === 'dark' ? '#e5e5e5' : '#333333', + }, + unreadNotificationText: { + fontWeight: '600', + color: colorScheme.get() === 'dark' ? '#ffffff' : '#000000', + }, + timestamp: { + fontSize: 12, + color: colorScheme.get() === 'dark' ? '#a3a3a3' : '#666', + }, + actionButtons: { + flexDirection: 'row', + alignItems: 'center', + }, + listContainer: { + flexGrow: 1, + }, + loadingContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + emptyContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + padding: 20, + }, + footerLoader: { + padding: 16, + alignItems: 'center', + }, +}); diff --git a/src/components/protocols/protocol-card.tsx b/src/components/protocols/protocol-card.tsx new file mode 100644 index 0000000..125df91 --- /dev/null +++ b/src/components/protocols/protocol-card.tsx @@ -0,0 +1,38 @@ +import { Pressable } from 'react-native'; + +import { formatDateForDisplay, parseDateISOString, stripHtmlTags } from '@/lib/utils'; +import { type CallProtocolsResultData } from '@/models/v4/callProtocols/callProtocolsResultData'; + +import { Badge } from '../ui/badge'; +import { Box } from '../ui/box'; +import { HStack } from '../ui/hstack'; +import { Text } from '../ui/text'; +import { VStack } from '../ui/vstack'; + +interface ProtocolCardProps { + protocol: CallProtocolsResultData; + onPress: (id: string) => void; +} + +export const ProtocolCard: React.FC = ({ protocol, onPress }) => { + return ( + onPress(protocol.Id)}> + + + {protocol.Name} + + {protocol.Description ? stripHtmlTags(protocol.Description) : ''} + + {protocol.Code && ( + + + {protocol.Code} + + + )} + {formatDateForDisplay(parseDateISOString(protocol.UpdatedOn || protocol.CreatedOn), 'yyyy-MM-dd HH:mm Z')} + + + + ); +}; diff --git a/src/components/protocols/protocol-details-sheet.tsx b/src/components/protocols/protocol-details-sheet.tsx new file mode 100644 index 0000000..77c0c31 --- /dev/null +++ b/src/components/protocols/protocol-details-sheet.tsx @@ -0,0 +1,119 @@ +import { Calendar, Tag, X } from 'lucide-react-native'; +import { useColorScheme } from 'nativewind'; +import React from 'react'; +import { StyleSheet } from 'react-native'; +import WebView from 'react-native-webview'; + +import { formatDateForDisplay, parseDateISOString, stripHtmlTags } from '@/lib/utils'; +import { useProtocolsStore } from '@/stores/protocols/store'; + +import { Actionsheet, ActionsheetBackdrop, ActionsheetContent, ActionsheetDragIndicator, ActionsheetDragIndicatorWrapper } from '../ui/actionsheet'; +import { Box } from '../ui/box'; +import { Button } from '../ui/button'; +import { Divider } from '../ui/divider'; +import { Heading } from '../ui/heading'; +import { HStack } from '../ui/hstack'; +import { Text } from '../ui/text'; +import { VStack } from '../ui/vstack'; + +export const ProtocolDetailsSheet: React.FC = () => { + const { colorScheme } = useColorScheme(); + const { protocols, selectedProtocolId, isDetailsOpen, closeDetails } = useProtocolsStore(); + + const selectedProtocol = protocols.find((protocol) => protocol.Id === selectedProtocolId); + + if (!selectedProtocol) return null; + + const textColor = colorScheme === 'dark' ? '#E5E7EB' : '#1F2937'; // gray-200 : gray-800 + + return ( + + + + + + + + + + + {selectedProtocol.Name} + + + + + + {/* Protocol code */} + {selectedProtocol.Code && ( + + + {selectedProtocol.Code} + + )} + + {/* Protocol description */} + {selectedProtocol.Description && ( + + {stripHtmlTags(selectedProtocol.Description)} + + )} + + {/* Protocol content in WebView */} + + + + + + + + ${selectedProtocol.ProtocolText} + + `, + }} + androidLayerType="software" + /> + + + + + {/* Date information */} + + + {formatDateForDisplay(parseDateISOString(selectedProtocol.UpdatedOn || selectedProtocol.CreatedOn), 'yyyy-MM-dd HH:mm Z')} + + + + + + ); +}; + +const styles = StyleSheet.create({ + container: { + width: '100%', + height: 380, // Larger height for 2/3 screen + backgroundColor: 'transparent', + }, +}); diff --git a/src/components/push-notification/push-notification-status.tsx b/src/components/push-notification/push-notification-status.tsx new file mode 100644 index 0000000..e049e1b --- /dev/null +++ b/src/components/push-notification/push-notification-status.tsx @@ -0,0 +1,39 @@ +import React from 'react'; + +import { Box } from '@/components/ui/box'; +import { Button } from '@/components/ui/button'; +import { Text } from '@/components/ui/text'; +import { usePushNotifications } from '@/services/push-notification'; +import { useCoreStore } from '@/stores/app/core-store'; + +export function PushNotificationStatus() { + const { pushToken, sendTestNotification } = usePushNotifications(); + const activeUnitId = useCoreStore((state) => state.activeUnitId); + const activeUnit = useCoreStore((state) => state.activeUnit); + + const handleTestNotification = () => { + sendTestNotification(); + }; + + return ( + + Push Notification Status + + + Active Unit: {activeUnit ? activeUnit.Name : 'None'} + Unit ID: {activeUnitId ? activeUnitId : 'None'} + + + + Push Token: {pushToken ? `${pushToken.substring(0, 20)}...` : 'Not registered'} + Status: {pushToken ? 'Registered' : 'Not Registered'} + + + + + + + ); +} diff --git a/src/components/roles/role-assignment-item.tsx b/src/components/roles/role-assignment-item.tsx new file mode 100644 index 0000000..8243800 --- /dev/null +++ b/src/components/roles/role-assignment-item.tsx @@ -0,0 +1,86 @@ +import * as React from 'react'; +import { Text } from '@/components/ui/text'; +import { + Select, + SelectTrigger, + SelectInput, + SelectIcon, + SelectPortal, + SelectBackdrop, + SelectContent, + SelectDragIndicatorWrapper, + SelectDragIndicator, + SelectItem, +} from '@/components/ui/select'; +import { HStack } from '../ui/hstack'; +import { VStack } from '../ui/vstack'; +import { useTranslation } from 'react-i18next'; +import { ChevronDownIcon } from 'lucide-react-native'; +import { UnitRoleResultData } from '@/models/v4/unitRoles/unitRoleResultData'; +import { PersonnelInfoResultData } from '@/models/v4/personnel/personnelInfoResultData'; + +type RoleAssignmentItemProps = { + role: UnitRoleResultData; + assignedUser?: PersonnelInfoResultData; + availableUsers: PersonnelInfoResultData[]; + onAssignUser: (userId?: string) => void; + currentAssignments: { roleId: string; userId: string }[]; +}; + +export const RoleAssignmentItem: React.FC = ({ + role, + assignedUser, + availableUsers, + onAssignUser, + currentAssignments, +}) => { + const { t } = useTranslation(); + + const filteredUsers = availableUsers.filter((user) => { + const isAssignedToOtherRole = currentAssignments.some( + (assignment) => + assignment.userId === user.UserId && + assignment.roleId !== role.UnitRoleId + ); + return !isAssignedToOtherRole; + }); + + return ( + + {role.Name} + + + ); +}; diff --git a/src/components/roles/roles-modal.tsx b/src/components/roles/roles-modal.tsx new file mode 100644 index 0000000..6a2573a --- /dev/null +++ b/src/components/roles/roles-modal.tsx @@ -0,0 +1,139 @@ +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { Spinner } from '@/components/ui/spinner'; +import { Text } from '@/components/ui/text'; +import { logger } from '@/lib/logging'; +import { useCoreStore } from '@/stores/app/core-store'; +import { useRolesStore } from '@/stores/roles/store'; +import { useToastStore } from '@/stores/toast/store'; + +import { Button, ButtonText } from '../ui/button'; +import { HStack } from '../ui/hstack'; +import { Modal, ModalBackdrop, ModalBody, ModalContent, ModalFooter, ModalHeader } from '../ui/modal'; +import { ScrollView } from '../ui/scroll-view'; +import { VStack } from '../ui/vstack'; +import { RoleAssignmentItem } from './role-assignment-item'; + +type RolesModalProps = { + isOpen: boolean; + onClose: () => void; +}; + +export const RolesModal: React.FC = ({ isOpen, onClose }) => { + const { t } = useTranslation(); + const activeUnit = useCoreStore((state) => state.activeUnit); + const { roles, unitRoleAssignments, users, isLoading, error } = useRolesStore(); + + // Add state to track pending changes + const [pendingAssignments, setPendingAssignments] = React.useState<{ roleId: string; userId?: string }[]>([]); + + React.useEffect(() => { + if (isOpen && activeUnit) { + useRolesStore.getState().fetchRolesForUnit(activeUnit.UnitId); + useRolesStore.getState().fetchUsers(); + // Reset pending assignments when modal opens + setPendingAssignments([]); + } + }, [isOpen, activeUnit]); + + // Replace handleAssignUser to update pending assignments instead of making API calls + const handleAssignUser = (roleId: string, userId?: string) => { + setPendingAssignments((current) => { + const filtered = current.filter((a) => a.roleId !== roleId); + return [...filtered, { roleId, userId }]; + }); + }; + + // Add handler for save button + const handleSave = async () => { + if (!activeUnit) return; + + try { + // Save all pending assignments + await useRolesStore.getState().assignRoles({ + UnitId: activeUnit.UnitId, + Roles: pendingAssignments.map((a) => ({ + RoleId: a.roleId, + UserId: a.userId ? a.userId : '', + Name: '', + })), + }); + + // Refresh role assignments after all updates + await useRolesStore.getState().fetchRolesForUnit(activeUnit.UnitId); + onClose(); + } catch (err) { + logger.error({ + message: 'Error saving role assignments', + context: { + error: err, + }, + }); + useToastStore.getState().showToast('error', 'Error saving role assignments'); + } + }; + + return ( + + + + + {t('roles.modal.title', 'Unit Role Assignments')} + + + {isLoading ? ( + + + {t('common.loading', 'Loading...')} + + ) : error ? ( + {error} + ) : ( + + + {roles + .filter((role) => role.UnitId === activeUnit?.UnitId) + .map((role) => { + const pendingAssignment = pendingAssignments.find((a) => a.roleId === role.UnitRoleId); + const assignment = unitRoleAssignments.find((a) => a.UnitRoleId === role.UnitRoleId && a.UnitId === activeUnit?.UnitId); + const assignedUser = users.find((u) => u.UserId === (pendingAssignment?.userId ?? assignment?.UserId)); + + return ( + handleAssignUser(role.UnitRoleId, userId)} + currentAssignments={[ + ...unitRoleAssignments.map((a) => ({ + roleId: a.UnitRoleId, + userId: a.UserId, + })), + ...pendingAssignments.map((a) => ({ + roleId: a.roleId, + userId: a.userId ?? '', + })), + ]} + /> + ); + })} + + + )} + + + + + + + + + + ); +}; diff --git a/src/components/settings/item.tsx b/src/components/settings/item.tsx new file mode 100644 index 0000000..508c1ab --- /dev/null +++ b/src/components/settings/item.tsx @@ -0,0 +1,37 @@ +import { ArrowRight } from 'lucide-react-native'; +import * as React from 'react'; + +import { Pressable, View } from '@/components/ui'; +import { Text } from '@/components/ui/text'; + +type ItemProps = { + text: string; + value?: string; + onPress?: () => void; + icon?: React.ReactNode; + textStyle?: string; +}; + +export const Item = ({ text, value, icon, onPress, textStyle }: ItemProps) => { + const isPressable = onPress !== undefined; + return ( + + + {icon && {icon}} + {text} + + + {value} + {isPressable && ( + + + + )} + + + ); +}; diff --git a/src/components/settings/items-container.tsx b/src/components/settings/items-container.tsx new file mode 100644 index 0000000..3193bcc --- /dev/null +++ b/src/components/settings/items-container.tsx @@ -0,0 +1,22 @@ +import React from 'react'; + +import { Text, View } from '@/components/ui'; +import type { TxKeyPath } from '@/lib'; + +type Props = { + children: React.ReactNode; + title?: TxKeyPath; +}; + +export const ItemsContainer = ({ children, title }: Props) => { + return ( + <> + {title && } + { + + {children} + + } + + ); +}; diff --git a/src/components/settings/language-item.tsx b/src/components/settings/language-item.tsx new file mode 100644 index 0000000..bd96f4f --- /dev/null +++ b/src/components/settings/language-item.tsx @@ -0,0 +1,79 @@ +import * as React from 'react'; + +import { useSelectedLanguage } from '@/lib'; +import { translate } from '@/lib'; +import type { Language } from '@/lib/i18n/resources'; +import { Text } from '../ui/text'; +import { View } from '../ui/view'; +import { + Select, + SelectBackdrop, + SelectContent, + SelectDragIndicator, + SelectDragIndicatorWrapper, + SelectIcon, + SelectInput, + SelectItem, + SelectPortal, + SelectTrigger, +} from '../ui/select'; +import { ChevronDownIcon } from 'lucide-react-native'; +import { useTranslation } from 'react-i18next'; + +export const LanguageItem = () => { + const { language, setLanguage } = useSelectedLanguage(); + const { t } = useTranslation(); + const onSelect = React.useCallback( + (option: string) => { + setLanguage(option as Language); + }, + [setLanguage] + ); + + const langs = React.useMemo( + () => [ + { label: translate('settings.english'), value: 'en' }, + { label: translate('settings.spanish'), value: 'es' }, + ], + [] + ); + + const selectedLanguage = React.useMemo( + () => langs.find((lang) => lang.value === language), + [language, langs] + ); + + return ( + + + {t('settings.language')} + + + + + + ); +}; diff --git a/src/components/settings/login-info-bottom-sheet.tsx b/src/components/settings/login-info-bottom-sheet.tsx new file mode 100644 index 0000000..ff6ed2d --- /dev/null +++ b/src/components/settings/login-info-bottom-sheet.tsx @@ -0,0 +1,98 @@ +import { useColorScheme } from 'nativewind'; +import React from 'react'; +import { Controller, useForm } from 'react-hook-form'; +import { useTranslation } from 'react-i18next'; + +import { Actionsheet, ActionsheetBackdrop, ActionsheetContent, ActionsheetDragIndicator, ActionsheetDragIndicatorWrapper } from '../ui/actionsheet'; +import { Button, ButtonSpinner, ButtonText } from '../ui/button'; +import { FormControl, FormControlLabel, FormControlLabelText } from '../ui/form-control'; +import { HStack } from '../ui/hstack'; +import { Input, InputField } from '../ui/input'; +import { VStack } from '../ui/vstack'; + +interface LoginInfoForm { + username: string; + password: string; +} + +interface LoginInfoBottomSheetProps { + isOpen: boolean; + onClose: () => void; + onSubmit: (data: LoginInfoForm) => Promise; +} + +export function LoginInfoBottomSheet({ isOpen, onClose, onSubmit }: LoginInfoBottomSheetProps) { + const { t } = useTranslation(); + const { colorScheme } = useColorScheme(); + const [isLoading, setIsLoading] = React.useState(false); + + const { + control, + handleSubmit, + formState: { errors }, + } = useForm(); + + const onFormSubmit = async (data: LoginInfoForm) => { + try { + setIsLoading(true); + await onSubmit(data); + onClose(); + } finally { + setIsLoading(false); + } + }; + + return ( + + + + + + + + + + + {t('settings.username')} + + ( + + + + )} + /> + + + + + {t('settings.password')} + + ( + + + + )} + /> + + + + + + + + + + ); +} diff --git a/src/components/settings/server-url-bottom-sheet.tsx b/src/components/settings/server-url-bottom-sheet.tsx new file mode 100644 index 0000000..54c4349 --- /dev/null +++ b/src/components/settings/server-url-bottom-sheet.tsx @@ -0,0 +1,120 @@ +import { useColorScheme } from 'nativewind'; +import React from 'react'; +import { Controller, useForm } from 'react-hook-form'; +import { useTranslation } from 'react-i18next'; + +import { Env } from '@/lib/env'; +import { logger } from '@/lib/logging'; +import { useServerUrlStore } from '@/stores/app/server-url-store'; + +import { Actionsheet, ActionsheetBackdrop, ActionsheetContent, ActionsheetDragIndicator, ActionsheetDragIndicatorWrapper } from '../ui/actionsheet'; +import { Button, ButtonSpinner, ButtonText } from '../ui/button'; +import { Center } from '../ui/center'; +import { FormControl, FormControlError, FormControlErrorText, FormControlHelperText, FormControlLabel, FormControlLabelText } from '../ui/form-control'; +import { HStack } from '../ui/hstack'; +import { Input, InputField } from '../ui/input'; +import { Text } from '../ui/text'; +import { VStack } from '../ui/vstack'; +interface ServerUrlForm { + url: string; +} + +interface ServerUrlBottomSheetProps { + isOpen: boolean; + onClose: () => void; +} + +const URL_PATTERN = /^https?:\/\/.+/; + +export function ServerUrlBottomSheet({ isOpen, onClose }: ServerUrlBottomSheetProps) { + const { t } = useTranslation(); + const { colorScheme } = useColorScheme(); + const [isLoading, setIsLoading] = React.useState(false); + const { setUrl, getUrl } = useServerUrlStore(); + + const { + control, + handleSubmit, + setValue, + formState: { errors }, + } = useForm(); + + React.useEffect(() => { + if (isOpen) { + getUrl().then((url) => setValue('url', url.replace(`/api/${Env.API_VERSION}`, ''))); + } + }, [isOpen, setValue, getUrl]); + + const onFormSubmit = async (data: ServerUrlForm) => { + try { + setIsLoading(true); + await setUrl(`${data.url}/api/${Env.API_VERSION}`); + logger.info({ + message: 'Server URL updated successfully', + context: { url: data.url }, + }); + onClose(); + } catch (error) { + logger.error({ + message: 'Failed to update server URL', + context: { error }, + }); + } finally { + setIsLoading(false); + } + }; + + return ( + + + + + + + + + + + {t('settings.server_url')} + + ( + + + + )} + /> + + + {errors.url?.message} + + + +
+ + {t('settings.server_url_note')} + +
+ + + + + +
+
+
+ ); +} diff --git a/src/components/settings/theme-item.tsx b/src/components/settings/theme-item.tsx new file mode 100644 index 0000000..0829658 --- /dev/null +++ b/src/components/settings/theme-item.tsx @@ -0,0 +1,59 @@ +import { ChevronDownIcon } from 'lucide-react-native'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import type { ColorSchemeType } from '@/lib'; +import { translate, useSelectedTheme } from '@/lib'; + +import { Select, SelectBackdrop, SelectContent, SelectDragIndicator, SelectDragIndicatorWrapper, SelectIcon, SelectInput, SelectItem, SelectPortal, SelectTrigger } from '../ui/select'; +import { Text } from '../ui/text'; +import { View } from '../ui/view'; +export const ThemeItem = () => { + const { selectedTheme, setSelectedTheme } = useSelectedTheme(); + const { t } = useTranslation(); + + const onSelect = React.useCallback( + (option: string) => { + setSelectedTheme(option as ColorSchemeType); + }, + [setSelectedTheme] + ); + + const themes = React.useMemo( + () => [ + { label: `${translate('settings.theme.dark')} 🌙`, value: 'dark' }, + { label: `${translate('settings.theme.light')} 🌞`, value: 'light' }, + { label: `${translate('settings.theme.system')} ⚙️`, value: 'system' }, + ], + [] + ); + + const theme = React.useMemo(() => themes.find((t) => t.value === selectedTheme), [selectedTheme, themes]); + + return ( + + + {t('settings.theme.title')} + + + + + + ); +}; diff --git a/src/components/settings/toggle-item.tsx b/src/components/settings/toggle-item.tsx new file mode 100644 index 0000000..fe2703f --- /dev/null +++ b/src/components/settings/toggle-item.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { Item } from './item'; +import { Switch } from '../ui/switch'; +import { View } from '../ui/view'; +import { Text } from '../ui/text'; +interface ToggleItemProps { + text: string; + value: boolean; + onValueChange: (value: boolean) => void; + disabled?: boolean; + icon?: React.ReactNode; + textStyle?: string; +} + +export const ToggleItem: React.FC = ({ + text, + value, + onValueChange, + disabled = false, + icon, + textStyle, +}) => { + return ( + + + {icon && {icon}} + {text} + + + + + + ); +}; \ No newline at end of file diff --git a/src/components/settings/unit-selection-bottom-sheet.tsx b/src/components/settings/unit-selection-bottom-sheet.tsx new file mode 100644 index 0000000..38ae304 --- /dev/null +++ b/src/components/settings/unit-selection-bottom-sheet.tsx @@ -0,0 +1,123 @@ +import { Check } from 'lucide-react-native'; +import { useColorScheme } from 'nativewind'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { logger } from '@/lib/logging'; +import { type UnitResultData } from '@/models/v4/units/unitResultData'; +import { useCoreStore } from '@/stores/app/core-store'; +import { useUnitsStore } from '@/stores/units/store'; + +import { Actionsheet, ActionsheetBackdrop, ActionsheetContent, ActionsheetDragIndicator, ActionsheetDragIndicatorWrapper } from '../ui/actionsheet'; +import { Button, ButtonText } from '../ui/button'; +import { Center } from '../ui/center'; +import { HStack } from '../ui/hstack'; +import { Pressable } from '../ui/pressable'; +import { ScrollView } from '../ui/scroll-view'; +import { Spinner } from '../ui/spinner'; +import { Text } from '../ui/text'; +import { VStack } from '../ui/vstack'; + +interface UnitSelectionBottomSheetProps { + isOpen: boolean; + onClose: () => void; +} + +export function UnitSelectionBottomSheet({ isOpen, onClose }: UnitSelectionBottomSheetProps) { + const { t } = useTranslation(); + const { colorScheme } = useColorScheme(); + const [isLoading, setIsLoading] = React.useState(false); + const { units, fetchUnits, isLoading: isLoadingUnits } = useUnitsStore(); + const { activeUnit, setActiveUnit } = useCoreStore(); + + React.useEffect(() => { + if (isOpen) { + fetchUnits().catch((error) => { + logger.error({ + message: 'Failed to fetch units', + context: { error }, + }); + }); + } + }, [isOpen, fetchUnits]); + + const handleUnitSelection = React.useCallback( + async (unit: UnitResultData) => { + try { + setIsLoading(true); + await setActiveUnit(unit.UnitId); + logger.info({ + message: 'Active unit updated successfully', + context: { unitId: unit.UnitId }, + }); + onClose(); + } catch (error) { + logger.error({ + message: 'Failed to update active unit', + context: { error }, + }); + } finally { + setIsLoading(false); + } + }, + [setActiveUnit, onClose] + ); + + return ( + + + + + + + + + + {t('settings.select_unit')} + + + {isLoadingUnits ? ( +
+ +
+ ) : units.length === 0 ? ( +
+ {t('settings.no_units_available')} +
+ ) : ( + + + {units.map((unit) => ( + handleUnitSelection(unit)} + disabled={isLoading} + className={`rounded-lg border p-4 ${colorScheme === 'dark' ? 'border-neutral-800 bg-neutral-800' : 'border-neutral-200 bg-neutral-50'} ${ + activeUnit?.UnitId === unit.UnitId ? (colorScheme === 'dark' ? 'bg-primary-900' : 'bg-primary-50') : '' + }`} + > + + + {unit.Name} + + {unit.Type} + + + {activeUnit?.UnitId === unit.UnitId && } + + + ))} + + + )} + + + + +
+
+
+ ); +} diff --git a/src/components/sidebar/call-sidebar.tsx b/src/components/sidebar/call-sidebar.tsx new file mode 100644 index 0000000..b49573c --- /dev/null +++ b/src/components/sidebar/call-sidebar.tsx @@ -0,0 +1,141 @@ +import { useQuery } from '@tanstack/react-query'; +import { router } from 'expo-router'; +import { Check, CircleX, Eye, MapPin } from 'lucide-react-native'; +import { useColorScheme } from 'nativewind'; +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import { Alert, Pressable, ScrollView } from 'react-native'; + +import { CustomBottomSheet } from '@/components/ui/bottom-sheet'; +import { Text } from '@/components/ui/text'; +import { VStack } from '@/components/ui/vstack'; +import { useCoreStore } from '@/stores/app/core-store'; +import { useCallsStore } from '@/stores/calls/store'; + +import { CallCard } from '../calls/call-card'; +import { Button, ButtonIcon } from '../ui/button'; +import { Card } from '../ui/card'; +import { HStack } from '../ui/hstack'; + +export const SidebarCallCard = () => { + const { colorScheme } = useColorScheme(); + const { activeCall, activePriority, setActiveCall } = useCoreStore((state) => ({ + activeCall: state.activeCall, + activePriority: state.activePriority, + setActiveCall: state.setActiveCall, + })); + + const [isBottomSheetOpen, setIsBottomSheetOpen] = React.useState(false); + const { t } = useTranslation(); + + // Fetch calls data when bottom sheet opens + const { data: openCallsData, isLoading } = useQuery({ + queryKey: ['calls', 'open'], + queryFn: async () => { + // Only fetch when bottom sheet is open + if (!isBottomSheetOpen) return []; + await useCallsStore.getState().fetchCalls(); + return useCallsStore.getState().calls; + }, + enabled: isBottomSheetOpen, // Only run query when bottom sheet is open + }); + + const handleDeselect = () => { + Alert.alert( + t('calls.confirm_deselect_title'), + t('calls.confirm_deselect_message'), + [ + { + text: t('common.cancel'), + style: 'cancel', + }, + { + text: t('common.confirm'), + onPress: () => setActiveCall(null), + style: 'destructive', + }, + ], + { cancelable: true } + ); + }; + + return ( + <> + setIsBottomSheetOpen(true)} className="w-full"> + {activeCall && activePriority ? ( + + ) : ( + + {t('calls.no_call_selected')} + {t('calls.no_call_selected_info')} + + )} + + + {activeCall && ( + + + + {activeCall?.Address && ( + + )} + + + + )} + + setIsBottomSheetOpen(false)} isLoading={isLoading} loadingText={t('common.loading')}> + + + {t('calls.select_active_call')} + {openCallsData?.map((call) => ( + { + await setActiveCall(call.CallId); + setIsBottomSheetOpen(false); + }} + className={`rounded-lg border p-4 ${colorScheme === 'dark' ? 'border-neutral-800 bg-neutral-800' : 'border-neutral-200 bg-neutral-50'} ${ + activeCall?.CallId === call.CallId ? (colorScheme === 'dark' ? 'bg-primary-900' : 'bg-primary-50') : '' + }`} + > + + + {call.Name} + + {call.Type} + + + {activeCall?.CallId === call.CallId && } + + + ))} + {!isLoading && openCallsData?.length === 0 && {t('calls.no_open_calls')}} + + + + + ); +}; diff --git a/src/components/sidebar/roles-sidebar.tsx b/src/components/sidebar/roles-sidebar.tsx new file mode 100644 index 0000000..b2d2db8 --- /dev/null +++ b/src/components/sidebar/roles-sidebar.tsx @@ -0,0 +1,54 @@ +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; +import { Pressable } from 'react-native'; + +import { Text } from '@/components/ui/text'; +import { useCoreStore } from '@/stores/app/core-store'; +import { useRolesStore } from '@/stores/roles/store'; + +import { RolesModal } from '../roles/roles-modal'; +import { Card } from '../ui/card'; + +export const SidebarRolesCard = () => { + const { t } = useTranslation(); + const [isModalOpen, setIsModalOpen] = React.useState(false); + const activeUnit = useCoreStore((state) => state.activeUnit); + const unitRoleAssignments = useRolesStore((state) => state.unitRoleAssignments); + + const handlePress = React.useCallback(() => { + setIsModalOpen(true); + }, []); + + const activeCount = React.useMemo(() => { + if (!activeUnit || unitRoleAssignments.length === 0) return 0; + return unitRoleAssignments.filter((assignment) => assignment.FullName && assignment.FullName !== '' && assignment.UnitId === activeUnit.UnitId).length; + }, [unitRoleAssignments, activeUnit]); + + const totalCount = React.useMemo(() => { + if (!activeUnit || unitRoleAssignments.length === 0) return 0; + return unitRoleAssignments.filter((assignment) => assignment.UnitId === activeUnit.UnitId).length; + }, [unitRoleAssignments, activeUnit]); + + const displayStatus = t('roles.status', { + active: activeCount, + total: totalCount, + }); + + return ( + <> + handlePress()}> + + {displayStatus} + + + + { + console.log('Modal closing'); + setIsModalOpen(false); + }} + /> + + ); +}; diff --git a/src/components/sidebar/sidebar.tsx b/src/components/sidebar/sidebar.tsx new file mode 100644 index 0000000..e0304b0 --- /dev/null +++ b/src/components/sidebar/sidebar.tsx @@ -0,0 +1,62 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { ScrollView } from 'react-native'; + +import { Button, ButtonText } from '@/components/ui/button'; +import { HStack } from '@/components/ui/hstack'; +import { VStack } from '@/components/ui/vstack'; +import { invertColor } from '@/lib/utils'; +import { useCoreStore } from '@/stores/app/core-store'; +import { useStatusBottomSheetStore } from '@/stores/status/store'; + +import { StatusBottomSheet } from '../status/status-bottom-sheet'; +import { SidebarCallCard } from './call-sidebar'; +import { SidebarRolesCard } from './roles-sidebar'; +import { SidebarStatusCard } from './status-sidebar'; +import { SidebarUnitCard } from './unit-sidebar'; + +const Sidebar = () => { + const { activeStatuses } = useCoreStore(); + const { setIsOpen } = useStatusBottomSheetStore(); + const { t } = useTranslation(); + + return ( + + + {/* First row - Two cards side by side */} + + + + + + + + + {/* Second row - Single card */} + + + {/* Third row - List of buttons */} + + {activeStatuses?.Statuses.map((status) => ( + + ))} + + + + + ); +}; + +export default Sidebar; diff --git a/src/components/sidebar/sidebar.web.tsx b/src/components/sidebar/sidebar.web.tsx new file mode 100644 index 0000000..dfc29da --- /dev/null +++ b/src/components/sidebar/sidebar.web.tsx @@ -0,0 +1,14 @@ +import React from 'react'; + +import { Box } from '@/components/ui/box'; +import Sidebar from './sidebar'; + +const WebSidebar = () => { + return ( + + {/* common sidebar contents for web and mobile */} + + + ); +}; +export default WebSidebar; diff --git a/src/components/sidebar/status-sidebar.tsx b/src/components/sidebar/status-sidebar.tsx new file mode 100644 index 0000000..0d3300d --- /dev/null +++ b/src/components/sidebar/status-sidebar.tsx @@ -0,0 +1,43 @@ +import * as React from 'react'; + +import { Text } from '@/components/ui/text'; +import { useCoreStore } from '@/stores/app/core-store'; + +import { Card } from '../ui/card'; + +type ItemProps = {}; + +export const SidebarStatusCard = ({}: ItemProps) => { + const activeUnitStatus = useCoreStore((state) => state.activeUnitStatus); + + // Derive the display values from activeUnit when available, otherwise use defaults + const displayStatus = activeUnitStatus?.State ?? 'Unknown'; + let displayColor = activeUnitStatus?.StateStyle ?? ''; + + // Fix up the color values to match the design system + if (displayColor === 'label-danger') { + displayColor = '#ED5565'; + } else if (displayColor === 'label-info') { + displayColor = '#23c6c8'; + } else if (displayColor === 'label-warning') { + displayColor = '#f8ac59'; + } else if (displayColor === 'label-success') { + displayColor = '#449d44'; + } else if (displayColor === 'label-onscene') { + displayColor = '#449d44'; + } else if (displayColor === 'label-primary') { + displayColor = '#228BCB'; + } else if (displayColor === 'label-returning') { + displayColor = ''; + } else if (displayColor === 'label-default') { + displayColor = '#262626'; + } else if (displayColor === 'label-enroute') { + displayColor = '#449d44'; + } + + return ( + + {displayStatus} + + ); +}; diff --git a/src/components/sidebar/unit-sidebar.tsx b/src/components/sidebar/unit-sidebar.tsx new file mode 100644 index 0000000..3417fa5 --- /dev/null +++ b/src/components/sidebar/unit-sidebar.tsx @@ -0,0 +1,89 @@ +import { Mic, Phone } from 'lucide-react-native'; +import * as React from 'react'; +import { StyleSheet, TouchableOpacity, View } from 'react-native'; + +import { Text } from '@/components/ui/text'; +import { useCoreStore } from '@/stores/app/core-store'; +import { useLiveKitStore } from '@/stores/app/livekit-store'; + +import { Card } from '../ui/card'; + +type ItemProps = { + unitName: string; + unitType: string; + unitGroup: string; + bgColor: string; +}; + +export const SidebarUnitCard = ({ unitName: defaultUnitName, unitType: defaultUnitType, unitGroup: defaultUnitGroup, bgColor }: ItemProps) => { + const activeUnit = useCoreStore((state) => state.activeUnit); + const { setIsBottomSheetVisible, currentRoomInfo, isConnected, isTalking } = useLiveKitStore(); + + // Derive the display values from activeUnit when available, otherwise use defaults + const displayName = activeUnit?.Name ?? defaultUnitName; + const displayType = activeUnit?.Type ?? defaultUnitType; + const displayGroup = activeUnit?.GroupName ?? defaultUnitGroup; + + const handleOpenLiveKit = () => { + setIsBottomSheetVisible(true); + }; + + return ( + + {displayType} + {displayName} + {displayGroup} + + {/* Call button and status */} + + {isConnected && currentRoomInfo ? ( + + + {currentRoomInfo.Name} + + {isTalking ? : null} + + ) : null} + + + + + + + ); +}; + +const styles = StyleSheet.create({ + callContainer: { + marginTop: 8, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + }, + callButton: { + backgroundColor: 'transparent', + borderWidth: 1, + borderColor: '#007AFF', + borderRadius: 20, + width: 36, + height: 36, + alignItems: 'center', + justifyContent: 'center', + }, + activeCall: { + backgroundColor: '#007AFF', + borderColor: '#007AFF', + }, + roomStatus: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + marginRight: 8, + }, + roomName: { + fontSize: 12, + color: '#6b7280', + marginRight: 4, + flex: 1, + }, +}); diff --git a/src/components/status/status-bottom-sheet.tsx b/src/components/status/status-bottom-sheet.tsx new file mode 100644 index 0000000..0100cfd --- /dev/null +++ b/src/components/status/status-bottom-sheet.tsx @@ -0,0 +1,181 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { + useStatusBottomSheetStore, + useStatusesStore, +} from '@/stores/status/store'; +import { invertColor } from '@/lib'; +import { Button, ButtonText } from '../ui/button'; +import { VStack } from '../ui/vstack'; +import { useCoreStore } from '@/stores/app/core-store'; +import { Text } from '../ui/text'; +import { Textarea, TextareaInput } from '../ui/textarea'; +import { + Actionsheet, + ActionsheetBackdrop, + ActionsheetContent, + ActionsheetDragIndicator, + ActionsheetDragIndicatorWrapper, +} from '../ui/actionsheet'; +import { Heading } from '../ui/heading'; +import { useCallsStore } from '@/stores/calls/store'; +import { + Radio, + RadioGroup, + RadioIcon, + RadioIndicator, + RadioLabel, +} from '../ui/radio'; +import { HStack } from '../ui/hstack'; +import { ScrollView } from 'react-native'; +import { CircleIcon } from 'lucide-react-native'; +import { SaveUnitStatusInput } from '@/models/v4/unitStatus/saveUnitStatusInput'; + +export const StatusBottomSheet = () => { + const { t } = useTranslation(); + const { + isOpen, + currentStep, + selectedCall, + selectedStatus, + note, + setIsOpen, + setCurrentStep, + setSelectedCall, + setNote, + reset, + } = useStatusBottomSheetStore(); + + const { activeCall } = useCoreStore(); + const { calls } = useCallsStore(); + + const handleClose = () => { + reset(); + }; + + const handleNext = () => { + if (currentStep === 'select-call') { + setCurrentStep('add-note'); + } + }; + + const handleSubmit = async () => { + await useStatusesStore + .getState() + .saveUnitStatus(selectedStatus?.Id.toString() || '', note); + + // TODO: Implement status update logic here + reset(); + }; + + const handleCallSelect = (callId: string) => { + const call = calls.find((c) => c.CallId === callId); + if (call) { + setSelectedCall(call); + } + }; + + React.useEffect(() => { + if (activeCall && currentStep === 'select-call' && !selectedCall) { + setSelectedCall(activeCall); + } + }, [activeCall, currentStep, selectedCall]); + + return ( + + + + + + + + + + {currentStep === 'select-call' + ? t('Set Status: {{status}}', { status: selectedStatus?.Text }) + : t('Add Note (Optional)')} + + + {currentStep === 'select-call' ? ( + + {t('Select a Call')} + + {calls && calls.length > 0 ? ( + + + + + + + + + + {t('calls.no_call_selected')} + + + + + {calls.map((call) => ( + + + + + + + + {call.Number} - {call.Name} + + + {call.Address} + + + + + ))} + + + ) : ( + + {t('No calls available')} + + )} + + + + ) : ( + + + {t('Selected Call')}: {selectedCall?.Number} -{' '} + {selectedCall?.Name} + + + + + + )} + + + + ); +}; diff --git a/src/components/toast/toast-container.tsx b/src/components/toast/toast-container.tsx new file mode 100644 index 0000000..e09d1e5 --- /dev/null +++ b/src/components/toast/toast-container.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { ToastMessage } from './toast'; +import { useToastStore } from '../../stores/toast/store'; +import { VStack } from '@/components/ui/vstack'; +export const ToastContainer: React.FC = () => { + const toasts = useToastStore((state) => state.toasts); + + return ( + + {toasts.map((toast) => ( + + ))} + + ); +}; diff --git a/src/components/toast/toast.tsx b/src/components/toast/toast.tsx new file mode 100644 index 0000000..1bf9f60 --- /dev/null +++ b/src/components/toast/toast.tsx @@ -0,0 +1,54 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { useToastStore, ToastType } from '../../stores/toast/store'; +import { VStack } from '@/components/ui/vstack'; +import { Toast, ToastTitle, ToastDescription } from '../ui/toast'; + +const toastStyles = { + info: { + bg: '$info700', + borderColor: '$info800', + }, + success: { + bg: '$success700', + borderColor: '$success800', + }, + warning: { + bg: '$warning700', + borderColor: '$warning800', + }, + error: { + bg: '$error700', + borderColor: '$error800', + }, + muted: { + bg: '$muted700', + borderColor: '$muted800', + }, +}; + +export const ToastMessage: React.FC<{ + id: string; + type: ToastType; + title?: string; + message: string; +}> = ({ id, type, title, message }) => { + const { removeToast } = useToastStore(); + const { t } = useTranslation(); + + return ( + removeToast(id)} + action={type} + > + + {title && ( + {t(title)} + )} + {t(message)} + + + ); +}; diff --git a/src/components/ui/ThemeToggle.tsx b/src/components/ui/ThemeToggle.tsx new file mode 100644 index 0000000..6f57d97 --- /dev/null +++ b/src/components/ui/ThemeToggle.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { View, Text, TouchableOpacity } from 'react-native'; +import { useTheme } from '../../theme/ThemeProvider'; + +export const ThemeToggle: React.FC = () => { + const { themeType, setThemeType, isDark } = useTheme(); + + return ( + + Theme: + + + setThemeType('light')} + className={`px-3 py-2 ${themeType === 'light' ? + (isDark ? 'bg-neutral-600' : 'bg-white') : 'bg-transparent'}`} + > + Light + + + setThemeType('dark')} + className={`px-3 py-2 ${themeType === 'dark' ? + (isDark ? 'bg-neutral-600' : 'bg-white') : 'bg-transparent'}`} + > + Dark + + + setThemeType('system')} + className={`px-3 py-2 ${themeType === 'system' ? + (isDark ? 'bg-neutral-600' : 'bg-white') : 'bg-transparent'}`} + > + System + + + + ); +}; \ No newline at end of file diff --git a/src/components/ui/accordion/index.tsx b/src/components/ui/accordion/index.tsx new file mode 100644 index 0000000..ca4711a --- /dev/null +++ b/src/components/ui/accordion/index.tsx @@ -0,0 +1,398 @@ +'use client'; +import React, { useMemo } from 'react'; +import { createAccordion } from '@gluestack-ui/accordion'; +import { Svg } from 'react-native-svg'; +import { View, Pressable, Text, Platform, TextProps } from 'react-native'; +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; +import { + withStyleContext, + useStyleContext, +} from '@gluestack-ui/nativewind-utils/withStyleContext'; +import { withStyleContextAndStates } from '@gluestack-ui/nativewind-utils/withStyleContextAndStates'; +import { H3 } from '@expo/html-elements'; +import { cssInterop } from 'nativewind'; + +const SCOPE = 'ACCORDION'; +/** Styles */ + +const accordionStyle = tva({ + base: 'w-full', + variants: { + variant: { + filled: 'bg-white shadow-hard-2', + unfilled: '', + }, + size: { + sm: '', + md: '', + lg: '', + }, + }, +}); +const accordionItemStyle = tva({ + parentVariants: { + variant: { + filled: 'bg-background-0', + unfilled: 'bg-transparent', + }, + }, +}); +const accordionTitleTextStyle = tva({ + base: 'text-typography-900 font-bold flex-1 text-left', + parentVariants: { + size: { + sm: 'text-sm', + md: 'text-base', + lg: 'text-lg', + }, + }, +}); +const accordionIconStyle = tva({ + base: 'text-typography-900 fill-none', + parentVariants: { + size: { + '2xs': 'h-3 w-3', + 'xs': 'h-3.5 w-3.5', + 'sm': 'h-4 w-4', + 'md': 'h-[18px] w-[18px]', + 'lg': 'h-5 w-5', + 'xl': 'h-6 w-6', + }, + }, +}); +const accordionContentTextStyle = tva({ + base: 'text-typography-700 font-normal', + parentVariants: { + size: { + sm: 'text-sm ', + md: 'text-base', + lg: 'text-lg', + }, + }, +}); +const accordionHeaderStyle = tva({ + base: 'mx-0 my-0', +}); +const accordionContentStyle = tva({ + base: 'px-5 mt-2 pb-5', +}); +const accordionTriggerStyle = tva({ + base: 'w-full py-5 px-5 flex-row justify-between items-center web:outline-none focus:outline-none data-[disabled=true]:opacity-40 data-[disabled=true]:cursor-not-allowed data-[focus-visible=true]:bg-background-50', +}); + +type IPrimitiveIcon = { + height?: number | string; + width?: number | string; + fill?: string; + color?: string; + size?: number | string; + stroke?: string; + as?: React.ElementType; + className?: string; +}; + +const PrimitiveIcon = React.forwardRef< + React.ElementRef, + IPrimitiveIcon & React.ComponentPropsWithoutRef +>( + ( + { + height, + width, + fill, + color, + size, + stroke = 'currentColor', + as: AsComp, + ...props + }, + ref + ) => { + const sizeProps = useMemo(() => { + if (size) return { size }; + if (height && width) return { height, width }; + if (height) return { height }; + if (width) return { width }; + return {}; + }, [size, height, width]); + + const colorProps = + stroke === 'currentColor' && color !== undefined ? color : stroke; + + if (AsComp) { + return ( + + ); + } + return ( + + ); + } +); + +const Root = + Platform.OS === 'web' + ? withStyleContext(View, SCOPE) + : withStyleContextAndStates(View, SCOPE); + +const Header = ( + Platform.OS === 'web' ? H3 : View +) as React.ComponentType; + +/** Creator */ +const UIAccordion = createAccordion({ + Root: Root, + Item: View, + Header: Header, + Trigger: Pressable, + Icon: PrimitiveIcon, + TitleText: Text, + ContentText: Text, + Content: View, +}); + +cssInterop(UIAccordion, { className: 'style' }); +cssInterop(UIAccordion.Item, { className: 'style' }); +cssInterop(UIAccordion.Header, { className: 'style' }); +cssInterop(UIAccordion.Trigger, { className: 'style' }); +cssInterop(UIAccordion.Icon, { className: 'style' }); +cssInterop(UIAccordion.TitleText, { className: 'style' }); +cssInterop(UIAccordion.Content, { className: 'style' }); +cssInterop(UIAccordion.ContentText, { className: 'style' }); +// @ts-ignore +cssInterop(UIAccordion.Icon, { + className: { + target: 'style', + nativeStyleToProp: { + height: true, + width: true, + // @ts-ignore + fill: true, + color: true, + stroke: true, + }, + }, +}); + +type IAccordionProps = React.ComponentPropsWithoutRef & + VariantProps; + +type IAccordionItemProps = React.ComponentPropsWithoutRef< + typeof UIAccordion.Item +> & + VariantProps; + +type IAccordionContentProps = React.ComponentPropsWithoutRef< + typeof UIAccordion.Content +> & + VariantProps; + +type IAccordionContentTextProps = React.ComponentPropsWithoutRef< + typeof UIAccordion.ContentText +> & + VariantProps; + +type IAccordionIconProps = VariantProps & + React.ComponentPropsWithoutRef & { + as?: React.ElementType; + }; + +type IAccordionHeaderProps = React.ComponentPropsWithoutRef< + typeof UIAccordion.Header +> & + VariantProps; + +type IAccordionTriggerProps = React.ComponentPropsWithoutRef< + typeof UIAccordion.Trigger +> & + VariantProps; + +type IAccordionTitleTextProps = React.ComponentPropsWithoutRef< + typeof UIAccordion.TitleText +> & + VariantProps; + +/** Components */ + +const Accordion = React.forwardRef< + React.ElementRef, + IAccordionProps +>(({ className, variant = 'filled', size = 'md', ...props }, ref) => { + return ( + + ); +}); + +const AccordionItem = React.forwardRef< + React.ElementRef, + IAccordionItemProps +>(({ className, ...props }, ref) => { + const { variant } = useStyleContext(SCOPE); + return ( + + ); +}); + +const AccordionContent = React.forwardRef< + React.ElementRef, + IAccordionContentProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const AccordionContentText = React.forwardRef< + React.ElementRef, + IAccordionContentTextProps +>(({ className, ...props }, ref) => { + const { size } = useStyleContext(SCOPE); + return ( + + ); +}); + +const AccordionIcon = React.forwardRef< + React.ElementRef, + IAccordionIconProps +>(({ size, className, ...props }, ref) => { + const { size: parentSize } = useStyleContext(SCOPE); + + if (typeof size === 'number') { + return ( + + ); + } else if ( + (props.height !== undefined || props.width !== undefined) && + size === undefined + ) { + return ( + + ); + } + return ( + + ); +}); + +const AccordionHeader = React.forwardRef< + React.ElementRef, + IAccordionHeaderProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const AccordionTrigger = React.forwardRef< + React.ElementRef, + IAccordionTriggerProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); +const AccordionTitleText = React.forwardRef< + React.ElementRef, + IAccordionTitleTextProps +>(({ className, ...props }, ref) => { + const { size } = useStyleContext(SCOPE); + return ( + + ); +}); + +Accordion.displayName = 'Accordion'; +AccordionItem.displayName = 'AccordionItem'; +AccordionHeader.displayName = 'AccordionHeader'; +AccordionTrigger.displayName = 'AccordionTrigger'; +AccordionTitleText.displayName = 'AccordionTitleText'; +AccordionContentText.displayName = 'AccordionContentText'; +AccordionIcon.displayName = 'AccordionIcon'; +AccordionContent.displayName = 'AccordionContent'; + +export { + Accordion, + AccordionItem, + AccordionHeader, + AccordionTrigger, + AccordionTitleText, + AccordionContentText, + AccordionIcon, + AccordionContent, +}; diff --git a/src/components/ui/actionsheet/index.tsx b/src/components/ui/actionsheet/index.tsx new file mode 100644 index 0000000..e80735b --- /dev/null +++ b/src/components/ui/actionsheet/index.tsx @@ -0,0 +1,624 @@ +'use client'; +import React, { useMemo } from 'react'; +import { H4 } from '@expo/html-elements'; +import { Svg } from 'react-native-svg'; +import { createActionsheet } from '@gluestack-ui/actionsheet'; +import { + Pressable, + View, + Text, + ScrollView, + VirtualizedList, + FlatList, + SectionList, + Platform, + PressableProps, +} from 'react-native'; + +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; +import { withStates } from '@gluestack-ui/nativewind-utils/withStates'; +import { cssInterop } from 'nativewind'; +import { + Motion, + AnimatePresence, + createMotionAnimatedComponent, +} from '@legendapp/motion'; + +type IPrimitiveIcon = { + height?: number | string; + width?: number | string; + fill?: string; + color?: string; + size?: number | string; + stroke?: string; + as?: React.ElementType; + className?: string; +}; +const PrimitiveIcon = React.forwardRef< + React.ElementRef, + IPrimitiveIcon & React.ComponentPropsWithoutRef +>( + ( + { + height, + width, + fill, + color, + size, + stroke = 'currentColor', + as: AsComp, + ...props + }, + ref + ) => { + const sizeProps = useMemo(() => { + if (size) return { size }; + if (height && width) return { height, width }; + if (height) return { height }; + if (width) return { width }; + return {}; + }, [size, height, width]); + + const colorProps = + stroke === 'currentColor' && color !== undefined ? color : stroke; + + if (AsComp) { + return ( + + ); + } + return ( + + ); + } +); + +const ItemWrapper = React.forwardRef< + React.ElementRef, + PressableProps +>(({ ...props }, ref) => { + return ; +}); + +const AnimatedPressable = createMotionAnimatedComponent(Pressable); + +export const UIActionsheet = createActionsheet({ + Root: View, + Content: Motion.View, + Item: Platform.OS === 'web' ? ItemWrapper : withStates(ItemWrapper), + ItemText: Text, + DragIndicator: View, + IndicatorWrapper: View, + Backdrop: AnimatedPressable, + ScrollView: ScrollView, + VirtualizedList: VirtualizedList, + FlatList: FlatList, + SectionList: SectionList, + SectionHeaderText: H4, + Icon: PrimitiveIcon, + AnimatePresence: AnimatePresence, +}); + +cssInterop(UIActionsheet, { className: 'style' }); +cssInterop(UIActionsheet.Content, { className: 'style' }); +cssInterop(ItemWrapper, { className: 'style' }); +cssInterop(UIActionsheet.ItemText, { className: 'style' }); +cssInterop(UIActionsheet.DragIndicator, { className: 'style' }); +cssInterop(UIActionsheet.DragIndicatorWrapper, { className: 'style' }); +cssInterop(UIActionsheet.Backdrop, { className: 'style' }); +cssInterop(UIActionsheet.ScrollView, { + className: 'style', + contentContainerClassName: 'contentContainerStyle', + indicatorClassName: 'indicatorStyle', +}); +cssInterop(UIActionsheet.VirtualizedList, { + className: 'style', + ListFooterComponentClassName: 'ListFooterComponentStyle', + ListHeaderComponentClassName: 'ListHeaderComponentStyle', + contentContainerClassName: 'contentContainerStyle', + indicatorClassName: 'indicatorStyle', +}); +cssInterop(UIActionsheet.FlatList, { + className: 'style', + ListFooterComponentClassName: 'ListFooterComponentStyle', + ListHeaderComponentClassName: 'ListHeaderComponentStyle', + columnWrapperClassName: 'columnWrapperStyle', + contentContainerClassName: 'contentContainerStyle', + indicatorClassName: 'indicatorStyle', +}); +cssInterop(UIActionsheet.SectionList, { className: 'style' }); +cssInterop(UIActionsheet.SectionHeaderText, { className: 'style' }); +cssInterop(UIActionsheet.Icon, { + className: { + target: 'style', + nativeStyleToProp: { + height: true, + width: true, + // @ts-ignore + fill: true, + color: true, + stroke: true, + }, + }, +}); + +const actionsheetStyle = tva({ base: 'w-full h-full web:pointer-events-none' }); + +const actionsheetContentStyle = tva({ + base: 'items-center rounded-tl-3xl rounded-tr-3xl p-5 pt-2 bg-background-0 web:pointer-events-auto web:select-none shadow-hard-5 border border-b-0 border-outline-100', +}); + +const actionsheetItemStyle = tva({ + base: 'w-full flex-row items-center p-3 rounded-sm data-[disabled=true]:opacity-40 data-[disabled=true]:web:pointer-events-auto data-[disabled=true]:web:cursor-not-allowed hover:bg-background-50 active:bg-background-100 data-[focus=true]:bg-background-100 web:data-[focus-visible=true]:bg-background-100 web:data-[focus-visible=true]:outline-indicator-primary gap-2', +}); + +const actionsheetItemTextStyle = tva({ + base: 'text-typography-700 font-normal font-body', + variants: { + isTruncated: { + true: '', + }, + bold: { + true: 'font-bold', + }, + underline: { + true: 'underline', + }, + strikeThrough: { + true: 'line-through', + }, + size: { + '2xs': 'text-2xs', + 'xs': 'text-xs', + 'sm': 'text-sm', + 'md': 'text-md', + 'lg': 'text-lg', + 'xl': 'text-xl', + '2xl': 'text-2xl', + '3xl': 'text-3xl', + '4xl': 'text-4xl', + '5xl': 'text-5xl', + '6xl': 'text-6xl', + }, + }, +}); + +const actionsheetDragIndicatorStyle = tva({ + base: 'w-16 h-1 bg-background-400 rounded-full', +}); + +const actionsheetDragIndicatorWrapperStyle = tva({ + base: 'w-full py-1 items-center', +}); + +const actionsheetBackdropStyle = tva({ + base: 'absolute left-0 top-0 right-0 bottom-0 bg-background-dark web:cursor-default web:pointer-events-auto', +}); + +const actionsheetScrollViewStyle = tva({ + base: 'w-full h-auto', +}); + +const actionsheetVirtualizedListStyle = tva({ + base: 'w-full h-auto', +}); + +const actionsheetFlatListStyle = tva({ + base: 'w-full h-auto', +}); + +const actionsheetSectionListStyle = tva({ + base: 'w-full h-auto', +}); + +const actionsheetSectionHeaderTextStyle = tva({ + base: 'leading-5 font-bold font-heading my-0 text-typography-500 p-3 uppercase', + variants: { + isTruncated: { + true: '', + }, + bold: { + true: 'font-bold', + }, + underline: { + true: 'underline', + }, + strikeThrough: { + true: 'line-through', + }, + size: { + '5xl': 'text-5xl', + '4xl': 'text-4xl', + '3xl': 'text-3xl', + '2xl': 'text-2xl', + 'xl': 'text-xl', + 'lg': 'text-lg', + 'md': 'text-md', + 'sm': 'text-sm', + 'xs': 'text-xs', + }, + + sub: { + true: 'text-xs', + }, + italic: { + true: 'italic', + }, + highlight: { + true: 'bg-yellow500', + }, + }, + defaultVariants: { + size: 'xs', + }, +}); + +const actionsheetIconStyle = tva({ + base: 'text-background-500 fill-none', + variants: { + size: { + '2xs': 'h-3 w-3', + 'xs': 'h-3.5 w-3.5', + 'sm': 'h-4 w-4', + 'md': 'w-[18px] h-[18px]', + 'lg': 'h-5 w-5', + 'xl': 'h-6 w-6', + }, + }, +}); + +type IActionsheetProps = VariantProps & + React.ComponentPropsWithoutRef; + +type IActionsheetContentProps = VariantProps & + React.ComponentPropsWithoutRef & { + className?: string; + }; + +type IActionsheetItemProps = VariantProps & + React.ComponentPropsWithoutRef; + +type IActionsheetItemTextProps = VariantProps & + React.ComponentPropsWithoutRef; + +type IActionsheetDragIndicatorProps = VariantProps< + typeof actionsheetDragIndicatorStyle +> & + React.ComponentPropsWithoutRef; + +type IActionsheetDragIndicatorWrapperProps = VariantProps< + typeof actionsheetDragIndicatorWrapperStyle +> & + React.ComponentPropsWithoutRef; + +type IActionsheetBackdropProps = VariantProps & + React.ComponentPropsWithoutRef & { + className?: string; + }; + +type IActionsheetScrollViewProps = VariantProps< + typeof actionsheetScrollViewStyle +> & + React.ComponentPropsWithoutRef; + +type IActionsheetVirtualizedListProps = VariantProps< + typeof actionsheetVirtualizedListStyle +> & + React.ComponentPropsWithoutRef; + +type IActionsheetFlatListProps = VariantProps & + React.ComponentPropsWithoutRef; + +type IActionsheetSectionListProps = VariantProps< + typeof actionsheetSectionListStyle +> & + React.ComponentPropsWithoutRef; + +type IActionsheetSectionHeaderTextProps = VariantProps< + typeof actionsheetSectionHeaderTextStyle +> & + React.ComponentPropsWithoutRef; + +type IActionsheetIconProps = VariantProps & + React.ComponentPropsWithoutRef & { + className?: string; + as?: React.ElementType; + }; + +const Actionsheet = React.forwardRef< + React.ElementRef, + IActionsheetProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const ActionsheetContent = React.forwardRef< + React.ElementRef, + IActionsheetContentProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const ActionsheetItem = React.forwardRef< + React.ElementRef, + IActionsheetItemProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const ActionsheetItemText = React.forwardRef< + React.ElementRef, + IActionsheetItemTextProps +>( + ( + { + isTruncated, + bold, + underline, + strikeThrough, + size = 'sm', + className, + ...props + }, + ref + ) => { + return ( + + ); + } +); + +const ActionsheetDragIndicator = React.forwardRef< + React.ElementRef, + IActionsheetDragIndicatorProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const ActionsheetDragIndicatorWrapper = React.forwardRef< + React.ElementRef, + IActionsheetDragIndicatorWrapperProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const ActionsheetBackdrop = React.forwardRef< + React.ElementRef, + IActionsheetBackdropProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const ActionsheetScrollView = React.forwardRef< + React.ElementRef, + IActionsheetScrollViewProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const ActionsheetVirtualizedList = React.forwardRef< + React.ElementRef, + IActionsheetVirtualizedListProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const ActionsheetFlatList = React.forwardRef< + React.ElementRef, + IActionsheetFlatListProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const ActionsheetSectionList = React.forwardRef< + React.ElementRef, + IActionsheetSectionListProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const ActionsheetSectionHeaderText = React.forwardRef< + React.ElementRef, + IActionsheetSectionHeaderTextProps +>( + ( + { + className, + isTruncated, + bold, + underline, + strikeThrough, + size, + sub, + italic, + highlight, + ...props + }, + ref + ) => { + return ( + + ); + } +); + +const ActionsheetIcon = React.forwardRef< + React.ElementRef, + IActionsheetIconProps +>(({ className, size = 'sm', ...props }, ref) => { + if (typeof size === 'number') { + return ( + + ); + } else if ( + (props.height !== undefined || props.width !== undefined) && + size === undefined + ) { + return ( + + ); + } + return ( + + ); +}); + +export { + Actionsheet, + ActionsheetContent, + ActionsheetItem, + ActionsheetItemText, + ActionsheetDragIndicator, + ActionsheetDragIndicatorWrapper, + ActionsheetBackdrop, + ActionsheetScrollView, + ActionsheetVirtualizedList, + ActionsheetFlatList, + ActionsheetSectionList, + ActionsheetSectionHeaderText, + ActionsheetIcon, +}; diff --git a/src/components/ui/alert-dialog/index.tsx b/src/components/ui/alert-dialog/index.tsx new file mode 100644 index 0000000..457db9c --- /dev/null +++ b/src/components/ui/alert-dialog/index.tsx @@ -0,0 +1,295 @@ +'use client'; +import React from 'react'; +import { createAlertDialog } from '@gluestack-ui/alert-dialog'; +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { + withStyleContext, + useStyleContext, +} from '@gluestack-ui/nativewind-utils/withStyleContext'; +import { withStyleContextAndStates } from '@gluestack-ui/nativewind-utils/withStyleContextAndStates'; +import { cssInterop } from 'nativewind'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; +import { + Motion, + AnimatePresence, + createMotionAnimatedComponent, +} from '@legendapp/motion'; +import { View, Pressable, ScrollView, Platform } from 'react-native'; + +const AnimatedPressable = createMotionAnimatedComponent(Pressable); + +const SCOPE = 'ALERT_DIALOG'; + +const UIAccessibleAlertDialog = createAlertDialog({ + Root: + Platform.OS === 'web' + ? withStyleContext(View, SCOPE) + : withStyleContextAndStates(View, SCOPE), + Body: ScrollView, + Content: Motion.View, + CloseButton: Pressable, + Header: View, + Footer: View, + Backdrop: AnimatedPressable, + AnimatePresence: AnimatePresence, +}); + +cssInterop(UIAccessibleAlertDialog, { className: 'style' }); +cssInterop(UIAccessibleAlertDialog.Content, { className: 'style' }); +cssInterop(UIAccessibleAlertDialog.CloseButton, { className: 'style' }); +cssInterop(UIAccessibleAlertDialog.Header, { className: 'style' }); +cssInterop(UIAccessibleAlertDialog.Footer, { className: 'style' }); +cssInterop(UIAccessibleAlertDialog.Body, { + className: 'style', + contentContainerClassName: 'contentContainerStyle', + indicatorClassName: 'indicatorStyle', +}); +cssInterop(UIAccessibleAlertDialog.Backdrop, { className: 'style' }); + +const alertDialogStyle = tva({ + base: 'group/modal w-full h-full justify-center items-center web:pointer-events-none', + parentVariants: { + size: { + xs: '', + sm: '', + md: '', + lg: '', + full: '', + }, + }, +}); + +const alertDialogContentStyle = tva({ + base: 'bg-background-0 rounded-lg overflow-hidden border border-outline-100 p-6', + parentVariants: { + size: { + xs: 'w-[60%] max-w-[360px]', + sm: 'w-[70%] max-w-[420px]', + md: 'w-[80%] max-w-[510px]', + lg: 'w-[90%] max-w-[640px]', + full: 'w-full', + }, + }, +}); + +const alertDialogCloseButtonStyle = tva({ + base: 'group/alert-dialog-close-button z-10 rounded-sm p-2 data-[focus-visible=true]:bg-background-100 web:cursor-pointer outline-0', +}); + +const alertDialogHeaderStyle = tva({ + base: 'justify-between items-center flex-row', +}); + +const alertDialogFooterStyle = tva({ + base: 'flex-row justify-end items-center gap-3', +}); + +const alertDialogBodyStyle = tva({ base: '' }); + +const alertDialogBackdropStyle = tva({ + base: 'absolute left-0 top-0 right-0 bottom-0 bg-background-dark web:cursor-default', +}); + +type IAlertDialogProps = React.ComponentPropsWithoutRef< + typeof UIAccessibleAlertDialog +> & + VariantProps; + +type IAlertDialogContentProps = React.ComponentPropsWithoutRef< + typeof UIAccessibleAlertDialog.Content +> & + VariantProps & { className?: string }; + +type IAlertDialogCloseButtonProps = React.ComponentPropsWithoutRef< + typeof UIAccessibleAlertDialog.CloseButton +> & + VariantProps; + +type IAlertDialogHeaderProps = React.ComponentPropsWithoutRef< + typeof UIAccessibleAlertDialog.Header +> & + VariantProps; + +type IAlertDialogFooterProps = React.ComponentPropsWithoutRef< + typeof UIAccessibleAlertDialog.Footer +> & + VariantProps; + +type IAlertDialogBodyProps = React.ComponentPropsWithoutRef< + typeof UIAccessibleAlertDialog.Body +> & + VariantProps; + +type IAlertDialogBackdropProps = React.ComponentPropsWithoutRef< + typeof UIAccessibleAlertDialog.Backdrop +> & + VariantProps & { className?: string }; + +const AlertDialog = React.forwardRef< + React.ElementRef, + IAlertDialogProps +>(({ className, size = 'md', ...props }, ref) => { + return ( + + ); +}); + +const AlertDialogContent = React.forwardRef< + React.ElementRef, + IAlertDialogContentProps +>(({ className, size, ...props }, ref) => { + const { size: parentSize } = useStyleContext(SCOPE); + + return ( + + ); +}); + +const AlertDialogCloseButton = React.forwardRef< + React.ElementRef, + IAlertDialogCloseButtonProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const AlertDialogHeader = React.forwardRef< + React.ElementRef, + IAlertDialogHeaderProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const AlertDialogFooter = React.forwardRef< + React.ElementRef, + IAlertDialogFooterProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const AlertDialogBody = React.forwardRef< + React.ElementRef, + IAlertDialogBodyProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const AlertDialogBackdrop = React.forwardRef< + React.ElementRef, + IAlertDialogBackdropProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +AlertDialog.displayName = 'AlertDialog'; +AlertDialogContent.displayName = 'AlertDialogContent'; +AlertDialogCloseButton.displayName = 'AlertDialogCloseButton'; +AlertDialogHeader.displayName = 'AlertDialogHeader'; +AlertDialogFooter.displayName = 'AlertDialogFooter'; +AlertDialogBody.displayName = 'AlertDialogBody'; +AlertDialogBackdrop.displayName = 'AlertDialogBackdrop'; + +export { + AlertDialog, + AlertDialogContent, + AlertDialogCloseButton, + AlertDialogHeader, + AlertDialogFooter, + AlertDialogBody, + AlertDialogBackdrop, +}; diff --git a/src/components/ui/alert/index.tsx b/src/components/ui/alert/index.tsx new file mode 100644 index 0000000..f98aceb --- /dev/null +++ b/src/components/ui/alert/index.tsx @@ -0,0 +1,293 @@ +'use client'; +import { createAlert } from '@gluestack-ui/alert'; +import { View, Text } from 'react-native'; +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { + withStyleContext, + useStyleContext, +} from '@gluestack-ui/nativewind-utils/withStyleContext'; +import React, { useMemo } from 'react'; +import { Svg } from 'react-native-svg'; +import { cssInterop } from 'nativewind'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; + +const SCOPE = 'ALERT'; + +const alertStyle = tva({ + base: 'items-center py-3 px-4 rounded-md flex-row gap-2 border-outline-100', + + variants: { + action: { + error: 'bg-background-error', + warning: 'bg-background-warning', + success: 'bg-background-success', + info: 'bg-background-info', + muted: 'bg-background-muted', + }, + + variant: { + solid: '', + outline: 'border bg-background-0', + }, + }, +}); + +const alertTextStyle = tva({ + base: 'flex-1 font-normal font-body', + + variants: { + isTruncated: { + true: 'web:truncate', + }, + bold: { + true: 'font-bold', + }, + underline: { + true: 'underline', + }, + strikeThrough: { + true: 'line-through', + }, + size: { + '2xs': 'text-2xs', + 'xs': 'text-xs', + 'sm': 'text-sm', + 'md': 'text-md', + 'lg': 'text-lg', + 'xl': 'text-xl', + '2xl': 'text-2xl', + '3xl': 'text-3xl', + '4xl': 'text-4xl', + '5xl': 'text-5xl', + '6xl': 'text-6xl', + }, + sub: { + true: 'text-xs', + }, + italic: { + true: 'italic', + }, + highlight: { + true: 'bg-yellow-500', + }, + }, + parentVariants: { + action: { + error: 'text-error-800', + warning: 'text-warning-800', + success: 'text-success-800', + info: 'text-info-800', + muted: 'text-background-800', + }, + }, +}); + +const alertIconStyle = tva({ + base: 'fill-none', + variants: { + size: { + '2xs': 'h-3 w-3', + 'xs': 'h-3.5 w-3.5', + 'sm': 'h-4 w-4', + 'md': 'h-[18px] w-[18px]', + 'lg': 'h-5 w-5', + 'xl': 'h-6 w-6', + }, + }, + parentVariants: { + action: { + error: 'text-error-800', + warning: 'text-warning-800', + success: 'text-success-800', + info: 'text-info-800', + muted: 'text-secondary-800', + }, + }, +}); + +type IPrimitiveIcon = React.ComponentPropsWithoutRef & { + height?: number | string; + width?: number | string; + fill?: string; + color?: string; + size?: number | string; + stroke?: string; + as?: React.ElementType; + className?: string; +}; + +const PrimitiveIcon = React.forwardRef< + React.ElementRef, + IPrimitiveIcon +>(({ height, width, fill, color, size, stroke, as: AsComp, ...props }, ref) => { + const sizeProps = useMemo(() => { + if (size) return { size }; + if (height && width) return { height, width }; + if (height) return { height }; + if (width) return { width }; + return {}; + }, [size, height, width]); + + let colorProps = {}; + if (color) { + colorProps = { ...colorProps, color: color }; + } + if (stroke) { + colorProps = { ...colorProps, stroke: stroke }; + } + if (fill) { + colorProps = { ...colorProps, fill: fill }; + } + if (AsComp) { + return ; + } + return ( + + ); +}); + +const IconWrapper = React.forwardRef< + React.ElementRef, + IPrimitiveIcon +>(({ ...props }, ref) => { + return ; +}); + +export const UIAlert = createAlert({ + Root: withStyleContext(View, SCOPE), + Text: Text, + Icon: IconWrapper, +}); + +cssInterop(UIAlert, { className: 'style' }); +//@ts-ignore +cssInterop(UIAlert.Text, { className: 'style' }); +cssInterop(IconWrapper, { + className: { + target: 'style', + nativeStyleToProp: { + height: true, + width: true, + // @ts-ignore + fill: true, + color: true, + stroke: true, + }, + }, +}); + +type IAlertProps = Omit< + React.ComponentPropsWithoutRef, + 'context' +> & + VariantProps; + +const Alert = React.forwardRef, IAlertProps>( + ({ className, variant = 'solid', action = 'muted', ...props }, ref) => { + return ( + + ); + } +); + +type IAlertTextProps = React.ComponentPropsWithoutRef & + VariantProps; + +const AlertText = React.forwardRef< + React.ElementRef, + IAlertTextProps +>( + ( + { + className, + isTruncated, + bold, + underline, + strikeThrough, + size = 'md', + sub, + italic, + highlight, + ...props + }, + ref + ) => { + const { action: parentAction } = useStyleContext(SCOPE); + return ( + + ); + } +); + +type IAlertIconProps = React.ComponentPropsWithoutRef & + VariantProps; + +const AlertIcon = React.forwardRef< + React.ElementRef, + IAlertIconProps +>(({ className, size = 'md', ...props }, ref) => { + const { action: parentAction } = useStyleContext(SCOPE); + + if (typeof size === 'number') { + return ( + + ); + } else if ( + (props.height !== undefined || props.width !== undefined) && + size === undefined + ) { + return ( + + ); + } + return ( + + ); +}); + +Alert.displayName = 'Alert'; +AlertText.displayName = 'AlertText'; +AlertIcon.displayName = 'AlertIcon'; + +export { Alert, AlertText, AlertIcon }; diff --git a/src/components/ui/avatar/index.tsx b/src/components/ui/avatar/index.tsx new file mode 100644 index 0000000..31fcbdd --- /dev/null +++ b/src/components/ui/avatar/index.tsx @@ -0,0 +1,190 @@ +'use client'; +import React from 'react'; +import { createAvatar } from '@gluestack-ui/avatar'; + +import { View, Text, Image, Platform } from 'react-native'; + +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { + withStyleContext, + useStyleContext, +} from '@gluestack-ui/nativewind-utils/withStyleContext'; +import { cssInterop } from 'nativewind'; +const SCOPE = 'AVATAR'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; + +const UIAvatar = createAvatar({ + Root: withStyleContext(View, SCOPE), + Badge: View, + Group: View, + Image: Image, + FallbackText: Text, +}); + +cssInterop(UIAvatar, { className: 'style' }); +cssInterop(UIAvatar.Badge, { className: 'style' }); +cssInterop(UIAvatar.Group, { className: 'style' }); +cssInterop(UIAvatar.Image, { className: 'style' }); +cssInterop(UIAvatar.FallbackText, { className: 'style' }); + +const avatarStyle = tva({ + base: 'rounded-full justify-center items-center relative bg-primary-600 group-[.avatar-group]/avatar-group:-ml-2.5', + variants: { + size: { + 'xs': 'w-6 h-6', + 'sm': 'w-8 h-8', + 'md': 'w-12 h-12', + 'lg': 'w-16 h-16', + 'xl': 'w-24 h-24', + '2xl': 'w-32 h-32', + }, + }, +}); + +const avatarFallbackTextStyle = tva({ + base: 'text-typography-0 font-semibold overflow-hidden text-transform:uppercase web:cursor-default', + + parentVariants: { + size: { + 'xs': 'text-2xs', + 'sm': 'text-xs', + 'md': 'text-base', + 'lg': 'text-xl', + 'xl': 'text-3xl', + '2xl': 'text-5xl', + }, + }, +}); + +const avatarGroupStyle = tva({ + base: 'group/avatar-group flex-row-reverse relative avatar-group', +}); + +const avatarBadgeStyle = tva({ + base: 'w-5 h-5 bg-success-500 rounded-full absolute right-0 bottom-0 border-background-0 border-2', + parentVariants: { + size: { + 'xs': 'w-2 h-2', + 'sm': 'w-2 h-2', + 'md': 'w-3 h-3', + 'lg': 'w-4 h-4', + 'xl': 'w-6 h-6', + '2xl': 'w-8 h-8', + }, + }, +}); + +const avatarImageStyle = tva({ + base: 'h-full w-full rounded-full absolute', +}); + +type IAvatarProps = Omit< + React.ComponentPropsWithoutRef, + 'context' +> & + VariantProps; + +export const Avatar = React.forwardRef< + React.ElementRef, + IAvatarProps +>(({ className, size = 'md', ...props }, ref) => { + return ( + + ); +}); + +type IAvatarBadgeProps = React.ComponentPropsWithoutRef & + VariantProps; + +export const AvatarBadge = React.forwardRef< + React.ElementRef, + IAvatarBadgeProps +>(({ className, size, ...props }, ref) => { + const { size: parentSize } = useStyleContext(SCOPE); + + return ( + + ); +}); + +type IAvatarFallbackTextProps = React.ComponentPropsWithoutRef< + typeof UIAvatar.FallbackText +> & + VariantProps; +export const AvatarFallbackText = React.forwardRef< + React.ElementRef, + IAvatarFallbackTextProps +>(({ className, size, ...props }, ref) => { + const { size: parentSize } = useStyleContext(SCOPE); + + return ( + + ); +}); + +type IAvatarImageProps = React.ComponentPropsWithoutRef & + VariantProps; + +export const AvatarImage = React.forwardRef< + React.ElementRef, + IAvatarImageProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +type IAvatarGroupProps = React.ComponentPropsWithoutRef & + VariantProps; + +export const AvatarGroup = React.forwardRef< + React.ElementRef, + IAvatarGroupProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); diff --git a/src/components/ui/badge/index.tsx b/src/components/ui/badge/index.tsx new file mode 100644 index 0000000..42bf601 --- /dev/null +++ b/src/components/ui/badge/index.tsx @@ -0,0 +1,254 @@ +'use client'; +import React, { useMemo } from 'react'; +import { Text, View } from 'react-native'; +import { Svg } from 'react-native-svg'; +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { + withStyleContext, + useStyleContext, +} from '@gluestack-ui/nativewind-utils/withStyleContext'; +import { cssInterop } from 'nativewind'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; +const SCOPE = 'BADGE'; + +const badgeStyle = tva({ + base: 'flex-row items-center rounded-sm data-[disabled=true]:opacity-50 px-2 py-1', + variants: { + action: { + error: 'bg-background-error border-error-300', + warning: 'bg-background-warning border-warning-300', + success: 'bg-background-success border-success-300', + info: 'bg-background-info border-info-300', + muted: 'bg-background-muted border-background-300', + }, + variant: { + solid: '', + outline: 'border', + }, + size: { + sm: '', + md: '', + lg: '', + }, + }, +}); + +const badgeTextStyle = tva({ + base: 'text-typography-700 font-body font-normal tracking-normal uppercase', + + parentVariants: { + action: { + error: 'text-error-600', + warning: 'text-warning-600', + success: 'text-success-600', + info: 'text-info-600', + muted: 'text-secondary-600', + }, + size: { + sm: 'text-2xs', + md: 'text-xs', + lg: 'text-sm', + }, + }, + variants: { + isTruncated: { + true: 'web:truncate', + }, + bold: { + true: 'font-bold', + }, + underline: { + true: 'underline', + }, + strikeThrough: { + true: 'line-through', + }, + sub: { + true: 'text-xs', + }, + italic: { + true: 'italic', + }, + highlight: { + true: 'bg-yellow-500', + }, + }, +}); + +const badgeIconStyle = tva({ + base: 'fill-none', + parentVariants: { + action: { + error: 'text-error-600', + warning: 'text-warning-600', + success: 'text-success-600', + info: 'text-info-600', + muted: 'text-secondary-600', + }, + size: { + sm: 'h-3 w-3', + md: 'h-3.5 w-3.5', + lg: 'h-4 w-4', + }, + }, +}); + +type IPrimitiveIcon = React.ComponentPropsWithoutRef & { + height?: number | string; + width?: number | string; + fill?: string; + color?: string; + size?: number | string; + stroke?: string; + as?: React.ElementType; + className?: string; +}; + +const PrimitiveIcon = React.forwardRef< + React.ElementRef, + IPrimitiveIcon +>(({ height, width, fill, color, size, stroke, as: AsComp, ...props }, ref) => { + const sizeProps = useMemo(() => { + if (size) return { size }; + if (height && width) return { height, width }; + if (height) return { height }; + if (width) return { width }; + return {}; + }, [size, height, width]); + + let colorProps = {}; + if (color) { + colorProps = { ...colorProps, color: color }; + } + if (stroke) { + colorProps = { ...colorProps, stroke: stroke }; + } + if (fill) { + colorProps = { ...colorProps, fill: fill }; + } + if (AsComp) { + return ; + } + return ( + + ); +}); + +const ContextView = withStyleContext(View, SCOPE); +cssInterop(ContextView, { className: 'style' }); +cssInterop(PrimitiveIcon, { + className: { + target: 'style', + nativeStyleToProp: { + height: true, + width: true, + // @ts-ignore + fill: true, + color: true, + stroke: true, + }, + }, +}); + +type IBadgeProps = React.ComponentPropsWithoutRef & + VariantProps; +const Badge = ({ + children, + action = 'info', + variant = 'solid', + size = 'md', + className, + ...props +}: { className?: string } & IBadgeProps) => { + return ( + + {children} + + ); +}; + +type IBadgeTextProps = React.ComponentPropsWithoutRef & + VariantProps; + +const BadgeText = React.forwardRef< + React.ElementRef, + IBadgeTextProps +>(({ children, className, size, ...props }, ref) => { + const { size: parentSize, action: parentAction } = useStyleContext(SCOPE); + return ( + + {children} + + ); +}); + +type IBadgeIconProps = React.ComponentPropsWithoutRef & + VariantProps; + +const BadgeIcon = React.forwardRef< + React.ElementRef, + IBadgeIconProps +>(({ className, size, ...props }, ref) => { + const { size: parentSize, action: parentAction } = useStyleContext(SCOPE); + + if (typeof size === 'number') { + return ( + + ); + } else if ( + (props.height !== undefined || props.width !== undefined) && + size === undefined + ) { + return ( + + ); + } + return ( + + ); +}); + +Badge.displayName = 'Badge'; +BadgeText.displayName = 'BadgeText'; +BadgeIcon.displayName = 'BadgeIcon'; + +export { Badge, BadgeIcon, BadgeText }; diff --git a/src/components/ui/bottom-sheet.tsx b/src/components/ui/bottom-sheet.tsx new file mode 100644 index 0000000..8385f91 --- /dev/null +++ b/src/components/ui/bottom-sheet.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { useColorScheme } from 'nativewind'; +import { VStack } from './vstack'; +import { + Actionsheet, + ActionsheetBackdrop, + ActionsheetContent, + ActionsheetDragIndicatorWrapper, + ActionsheetDragIndicator, +} from './actionsheet'; +import { Center } from './center'; +import { Spinner } from './spinner'; +import { Text } from './text'; +interface CustomBottomSheetProps { + children: React.ReactNode; + isOpen: boolean; + onClose: () => void; + isLoading?: boolean; + loadingText?: string; +} + +export function CustomBottomSheet({ + children, + isOpen, + onClose, + isLoading = false, + loadingText, +}: CustomBottomSheetProps) { + const { colorScheme } = useColorScheme(); + + return ( + + + + + + + + {isLoading ? ( +
+ + + {loadingText && ( + {loadingText} + )} + +
+ ) : ( + children + )} +
+
+ ); +} diff --git a/src/components/ui/bottomsheet/index.tsx b/src/components/ui/bottomsheet/index.tsx new file mode 100644 index 0000000..d627f0e --- /dev/null +++ b/src/components/ui/bottomsheet/index.tsx @@ -0,0 +1,294 @@ +import GorhomBottomSheet, { + BottomSheetBackdrop as GorhomBottomSheetBackdrop, + BottomSheetView as GorhomBottomSheetView, + BottomSheetHandle, + BottomSheetTextInput as GorhomBottomSheetInput, + BottomSheetScrollView as GorhomBottomSheetScrollView, + BottomSheetFlatList as GorhomBottomSheetFlatList, + BottomSheetSectionList as GorhomBottomSheetSectionList, +} from '@gorhom/bottom-sheet'; +import { Platform } from 'react-native'; +import type { PressableProps, TextProps } from 'react-native'; +import { FocusScope } from '@react-native-aria/focus'; +import React, { + createContext, + useCallback, + useContext, + useMemo, + useRef, + useState, +} from 'react'; +import { Pressable, Text } from 'react-native'; +import { cssInterop } from 'nativewind'; +import { tva } from '@gluestack-ui/nativewind-utils/tva'; + +const bottomSheetBackdropStyle = tva({ + base: 'absolute inset-0 flex-1 touch-none select-none bg-black opacity-0', +}); + +const bottomSheetContentStyle = tva({ + base: 'mt-2', +}); +const bottomSheetTriggerStyle = tva({ + base: '', +}); + +const bottomSheetIndicatorStyle = tva({ + base: 'py-1 w-full items-center rounded-t-lg ', +}); + +const bottomSheetItemStyle = tva({ + base: 'p-3 flex-row items-center rounded-sm w-full disabled:opacity-0.4 web:pointer-events-auto disabled:cursor-not-allowed hover:bg-background-50 active:bg-background-100 focus:bg-background-100 web:focus-visible:bg-background-100', +}); + +const BottomSheetContext = createContext<{ + visible: boolean; + bottomSheetRef: React.RefObject; + handleClose: () => void; + handleOpen: () => void; +}>({ + visible: false, + bottomSheetRef: { current: null }, + handleClose: () => {}, + handleOpen: () => {}, +}); + +type IBottomSheetProps = React.ComponentProps; +export const BottomSheet = ({ + snapToIndex = 1, + onOpen, + onClose, + ...props +}: { + snapToIndex?: number; + children?: React.ReactNode; + onOpen?: () => void; + onClose?: () => void; +}) => { + const bottomSheetRef = useRef(null); + + const [visible, setVisible] = useState(false); + + const handleOpen = useCallback(() => { + bottomSheetRef.current?.snapToIndex(snapToIndex); + setVisible(true); + onOpen && onOpen(); + }, [onOpen, snapToIndex]); + + const handleClose = useCallback(() => { + bottomSheetRef.current?.close(); + setVisible(false); + onClose && onClose(); + }, [onClose]); + + return ( + + {props.children} + + ); +}; + +export const BottomSheetPortal = ({ + snapPoints, + handleComponent: DragIndicator, + backdropComponent: BackDrop, + ...props +}: Partial & { + defaultIsOpen?: boolean; + snapToIndex?: number; + snapPoints: string[]; +}) => { + const { bottomSheetRef, handleClose } = useContext(BottomSheetContext); + + const handleSheetChanges = useCallback( + (index: number) => { + if (index === 0 || index === -1) { + handleClose(); + } + }, + [handleClose] + ); + + return ( + + {props.children} + + ); +}; + +export const BottomSheetTrigger = ({ + className, + ...props +}: PressableProps & { className?: string }) => { + const { handleOpen } = useContext(BottomSheetContext); + return ( + { + props.onPress && props.onPress(e); + handleOpen(); + }} + {...props} + className={bottomSheetTriggerStyle({ + className: className, + })} + > + {props.children} + + ); +}; +type IBottomSheetBackdrop = React.ComponentProps< + typeof GorhomBottomSheetBackdrop +>; + +export const BottomSheetBackdrop = ({ + disappearsOnIndex = -1, + appearsOnIndex = 1, + className, + ...props +}: Partial & { className?: string }) => { + return ( + + ); +}; + +cssInterop(GorhomBottomSheetBackdrop, { className: 'style' }); + +type IBottomSheetDragIndicator = React.ComponentProps; + +export const BottomSheetDragIndicator = ({ + children, + className, + ...props +}: Partial & { className?: string }) => { + return ( + + {children} + + ); +}; + +cssInterop(BottomSheetHandle, { className: 'style' }); + +type IBottomSheetContent = React.ComponentProps; + +export const BottomSheetContent = ({ ...props }: IBottomSheetContent) => { + const { handleClose, visible } = useContext(BottomSheetContext); + const keyDownHandlers = useMemo(() => { + return Platform.OS === 'web' + ? { + onKeyDown: (e: React.KeyboardEvent) => { + if (e.key === 'Escape') { + e.preventDefault(); + handleClose(); + return; + } + }, + } + : {}; + }, [handleClose]); + + if (Platform.OS === 'web') + return ( + + {visible && ( + + {props.children} + + )} + + ); + + return ( + + {props.children} + + ); +}; + +cssInterop(GorhomBottomSheetView, { className: 'style' }); + +export const BottomSheetItem = ({ + children, + className, + closeOnSelect = true, + ...props +}: PressableProps & { + closeOnSelect?: boolean; +}) => { + const { handleClose } = useContext(BottomSheetContext); + return ( + { + if (closeOnSelect) { + handleClose(); + } + props.onPress && props.onPress(e); + }} + role="button" + > + {children} + + ); +}; + +export const BottomSheetItemText = ({ ...props }: TextProps) => { + return ; +}; + +export const BottomSheetScrollView = GorhomBottomSheetScrollView; +export const BottomSheetFlatList = GorhomBottomSheetFlatList; +export const BottomSheetSectionList = GorhomBottomSheetSectionList; +export const BottomSheetTextInput = GorhomBottomSheetInput; + +cssInterop(GorhomBottomSheetInput, { className: 'style' }); +cssInterop(GorhomBottomSheetScrollView, { className: 'style' }); +cssInterop(GorhomBottomSheetFlatList, { className: 'style' }); +cssInterop(GorhomBottomSheetSectionList, { className: 'style' }); diff --git a/src/components/ui/box/index.tsx b/src/components/ui/box/index.tsx new file mode 100644 index 0000000..766266f --- /dev/null +++ b/src/components/ui/box/index.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { View, ViewProps } from 'react-native'; + +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; +import { boxStyle } from './styles'; + +type IBoxProps = ViewProps & + VariantProps & { className?: string }; + +const Box = React.forwardRef, IBoxProps>( + ({ className, ...props }, ref) => { + return ( + + ); + } +); + +Box.displayName = 'Box'; +export { Box }; diff --git a/src/components/ui/box/index.web.tsx b/src/components/ui/box/index.web.tsx new file mode 100644 index 0000000..51b375b --- /dev/null +++ b/src/components/ui/box/index.web.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { boxStyle } from './styles'; + +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; + +type IBoxProps = React.ComponentPropsWithoutRef<'div'> & + VariantProps & { className?: string }; + +const Box = React.forwardRef( + ({ className, ...props }, ref) => { + return ( +
+ ); + } +); + +Box.displayName = 'Box'; +export { Box }; diff --git a/src/components/ui/box/styles.tsx b/src/components/ui/box/styles.tsx new file mode 100644 index 0000000..760e8ff --- /dev/null +++ b/src/components/ui/box/styles.tsx @@ -0,0 +1,10 @@ +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { isWeb } from '@gluestack-ui/nativewind-utils/IsWeb'; + +const baseStyle = isWeb + ? 'flex flex-col relative z-0 box-border border-0 list-none min-w-0 min-h-0 bg-transparent items-stretch m-0 p-0 text-decoration-none' + : ''; + +export const boxStyle = tva({ + base: baseStyle, +}); diff --git a/src/components/ui/button/index.tsx b/src/components/ui/button/index.tsx new file mode 100644 index 0000000..ae3912b --- /dev/null +++ b/src/components/ui/button/index.tsx @@ -0,0 +1,410 @@ +'use client'; +import { createButton } from '@gluestack-ui/button'; +import { PrimitiveIcon, UIIcon } from '@gluestack-ui/icon'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { + useStyleContext, + withStyleContext, +} from '@gluestack-ui/nativewind-utils/withStyleContext'; +import { cssInterop } from 'nativewind'; +import React from 'react'; +import { ActivityIndicator, Pressable, Text, View } from 'react-native'; + +const SCOPE = 'BUTTON'; + +const Root = withStyleContext(Pressable, SCOPE); + +const UIButton = createButton({ + Root: Root, + Text, + Group: View, + Spinner: ActivityIndicator, + Icon: UIIcon, +}); + +cssInterop(PrimitiveIcon, { + className: { + target: 'style', + nativeStyleToProp: { + height: true, + width: true, + fill: true, + color: 'classNameColor', + stroke: true, + }, + }, +}); + +const buttonStyle = tva({ + base: 'group/button rounded bg-primary-500 flex-row items-center justify-center data-[focus-visible=true]:web:outline-none data-[focus-visible=true]:web:ring-2 data-[disabled=true]:opacity-40 gap-2', + variants: { + action: { + primary: + 'bg-primary-500 data-[hover=true]:bg-primary-600 data-[active=true]:bg-primary-700 border-primary-300 data-[hover=true]:border-primary-400 data-[active=true]:border-primary-500 data-[focus-visible=true]:web:ring-indicator-info', + secondary: + 'bg-secondary-500 border-secondary-300 data-[hover=true]:bg-secondary-600 data-[hover=true]:border-secondary-400 data-[active=true]:bg-secondary-700 data-[active=true]:border-secondary-500 data-[focus-visible=true]:web:ring-indicator-info', + positive: + 'bg-success-500 border-success-300 data-[hover=true]:bg-success-600 data-[hover=true]:border-success-400 data-[active=true]:bg-success-700 data-[active=true]:border-success-500 data-[focus-visible=true]:web:ring-indicator-info', + negative: + 'bg-error-500 border-error-300 data-[hover=true]:bg-error-600 data-[hover=true]:border-error-400 data-[active=true]:bg-error-700 data-[active=true]:border-error-500 data-[focus-visible=true]:web:ring-indicator-info', + default: + 'bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent', + }, + variant: { + link: 'px-0', + outline: + 'bg-transparent border data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent', + solid: '', + }, + + size: { + xs: 'px-3.5 h-8', + sm: 'px-4 h-9', + md: 'px-5 h-10', + lg: 'px-6 h-11', + xl: 'px-7 h-12', + }, + }, + compoundVariants: [ + { + action: 'primary', + variant: 'link', + class: + 'px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent', + }, + { + action: 'secondary', + variant: 'link', + class: + 'px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent', + }, + { + action: 'positive', + variant: 'link', + class: + 'px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent', + }, + { + action: 'negative', + variant: 'link', + class: + 'px-0 bg-transparent data-[hover=true]:bg-transparent data-[active=true]:bg-transparent', + }, + { + action: 'primary', + variant: 'outline', + class: + 'bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent', + }, + { + action: 'secondary', + variant: 'outline', + class: + 'bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent', + }, + { + action: 'positive', + variant: 'outline', + class: + 'bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent', + }, + { + action: 'negative', + variant: 'outline', + class: + 'bg-transparent data-[hover=true]:bg-background-50 data-[active=true]:bg-transparent', + }, + ], +}); + +const buttonTextStyle = tva({ + base: 'text-typography-0 font-semibold web:select-none', + parentVariants: { + action: { + primary: + 'text-primary-600 data-[hover=true]:text-primary-600 data-[active=true]:text-primary-700', + secondary: + 'text-secondary-600 data-[hover=true]:text-secondary-600 data-[active=true]:text-secondary-700', + positive: + 'text-success-600 data-[hover=true]:text-success-600 data-[active=true]:text-success-700', + negative: + 'text-error-600 data-[hover=true]:text-error-600 data-[active=true]:text-error-700', + }, + variant: { + link: 'data-[hover=true]:underline data-[active=true]:underline', + outline: '', + solid: + 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0', + }, + size: { + xs: 'text-xs', + sm: 'text-sm', + md: 'text-base', + lg: 'text-lg', + xl: 'text-xl', + }, + }, + parentCompoundVariants: [ + { + variant: 'solid', + action: 'primary', + class: + 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0', + }, + { + variant: 'solid', + action: 'secondary', + class: + 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0', + }, + { + variant: 'solid', + action: 'positive', + class: + 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0', + }, + { + variant: 'solid', + action: 'negative', + class: + 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0', + }, + { + variant: 'outline', + action: 'primary', + class: + 'text-primary-500 data-[hover=true]:text-primary-500 data-[active=true]:text-primary-500', + }, + { + variant: 'outline', + action: 'secondary', + class: + 'text-primary-500 data-[hover=true]:text-primary-500 data-[active=true]:text-primary-500', + }, + { + variant: 'outline', + action: 'positive', + class: + 'text-primary-500 data-[hover=true]:text-primary-500 data-[active=true]:text-primary-500', + }, + { + variant: 'outline', + action: 'negative', + class: + 'text-primary-500 data-[hover=true]:text-primary-500 data-[active=true]:text-primary-500', + }, + ], +}); + +const buttonIconStyle = tva({ + base: 'fill-none', + parentVariants: { + variant: { + link: 'data-[hover=true]:underline data-[active=true]:underline', + outline: '', + solid: + 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0', + }, + size: { + xs: 'h-3.5 w-3.5', + sm: 'h-4 w-4', + md: 'h-[18px] w-[18px]', + lg: 'h-[18px] w-[18px]', + xl: 'h-5 w-5', + }, + action: { + primary: + 'text-primary-600 data-[hover=true]:text-primary-600 data-[active=true]:text-primary-700', + secondary: + 'text-secondary-600 data-[hover=true]:text-secondary-600 data-[active=true]:text-secondary-700', + positive: + 'text-success-600 data-[hover=true]:text-success-600 data-[active=true]:text-success-700', + + negative: + 'text-error-600 data-[hover=true]:text-error-600 data-[active=true]:text-error-700', + }, + }, + parentCompoundVariants: [ + { + variant: 'solid', + action: 'primary', + class: + 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0', + }, + { + variant: 'solid', + action: 'secondary', + class: + 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0', + }, + { + variant: 'solid', + action: 'positive', + class: + 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0', + }, + { + variant: 'solid', + action: 'negative', + class: + 'text-typography-0 data-[hover=true]:text-typography-0 data-[active=true]:text-typography-0', + }, + ], +}); + +const buttonGroupStyle = tva({ + base: '', + variants: { + space: { + xs: 'gap-1', + sm: 'gap-2', + md: 'gap-3', + lg: 'gap-4', + xl: 'gap-5', + '2xl': 'gap-6', + '3xl': 'gap-7', + '4xl': 'gap-8', + }, + isAttached: { + true: 'gap-0', + }, + }, +}); + +type IButtonProps = Omit< + React.ComponentPropsWithoutRef, + 'context' +> & + VariantProps & { className?: string }; + +const Button = React.forwardRef< + React.ElementRef, + IButtonProps +>( + ( + { className, variant = 'solid', size = 'md', action = 'primary', ...props }, + ref + ) => { + return ( + + ); + } +); + +type IButtonTextProps = React.ComponentPropsWithoutRef & + VariantProps & { className?: string }; + +const ButtonText = React.forwardRef< + React.ElementRef, + IButtonTextProps +>(({ className, variant, size, action, ...props }, ref) => { + const { + variant: parentVariant, + size: parentSize, + action: parentAction, + } = useStyleContext(SCOPE); + + return ( + + ); +}); + +const ButtonSpinner = UIButton.Spinner; + +type IButtonIcon = React.ComponentPropsWithoutRef & + VariantProps & { + className?: string | undefined; + as?: React.ElementType; + }; + +const ButtonIcon = React.forwardRef< + React.ElementRef, + IButtonIcon +>(({ className, size, ...props }, ref) => { + const { + variant: parentVariant, + size: parentSize, + action: parentAction, + } = useStyleContext(SCOPE); + + if (typeof size === 'number') { + return ( + + ); + } else if ( + (props.height !== undefined || props.width !== undefined) && + size === undefined + ) { + return ( + + ); + } + return ( + + ); +}); + +type IButtonGroupProps = React.ComponentPropsWithoutRef & + VariantProps; + +const ButtonGroup = React.forwardRef< + React.ElementRef, + IButtonGroupProps +>(({ className, space = 'md', isAttached = false, ...props }, ref) => { + return ( + + ); +}); + +Button.displayName = 'Button'; +ButtonText.displayName = 'ButtonText'; +ButtonSpinner.displayName = 'ButtonSpinner'; +ButtonIcon.displayName = 'ButtonIcon'; +ButtonGroup.displayName = 'ButtonGroup'; + +export { Button, ButtonGroup, ButtonIcon, ButtonSpinner, ButtonText }; diff --git a/src/components/ui/card/index.tsx b/src/components/ui/card/index.tsx new file mode 100644 index 0000000..f8c068d --- /dev/null +++ b/src/components/ui/card/index.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; +import { View, ViewProps } from 'react-native'; +import { cardStyle } from './styles'; + +type ICardProps = ViewProps & + VariantProps & { className?: string }; + +const Card = React.forwardRef, ICardProps>( + ({ className, size = 'md', variant = 'elevated', ...props }, ref) => { + return ( + + ); + } +); + +Card.displayName = 'Card'; + +export { Card }; diff --git a/src/components/ui/card/index.web.tsx b/src/components/ui/card/index.web.tsx new file mode 100644 index 0000000..f521d08 --- /dev/null +++ b/src/components/ui/card/index.web.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import { cardStyle } from './styles'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; + +type ICardProps = React.ComponentPropsWithoutRef<'div'> & + VariantProps; + +const Card = React.forwardRef( + ({ className, size = 'md', variant = 'elevated', ...props }, ref) => { + return ( +
+ ); + } +); + +Card.displayName = 'Card'; + +export { Card }; diff --git a/src/components/ui/card/styles.tsx b/src/components/ui/card/styles.tsx new file mode 100644 index 0000000..59de8b7 --- /dev/null +++ b/src/components/ui/card/styles.tsx @@ -0,0 +1,20 @@ +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { isWeb } from '@gluestack-ui/nativewind-utils/IsWeb'; +const baseStyle = isWeb ? 'flex flex-col relative z-0' : ''; + +export const cardStyle = tva({ + base: baseStyle, + variants: { + size: { + sm: 'p-3 rounded', + md: 'p-4 rounded-md', + lg: 'p-6 rounded-xl', + }, + variant: { + elevated: 'bg-background-0', + outline: 'border border-outline-200 ', + ghost: 'rounded-none', + filled: 'bg-background-50', + }, + }, +}); diff --git a/src/components/ui/center/index.tsx b/src/components/ui/center/index.tsx new file mode 100644 index 0000000..e9092a5 --- /dev/null +++ b/src/components/ui/center/index.tsx @@ -0,0 +1,22 @@ +import { View, ViewProps } from 'react-native'; +import React from 'react'; +import { centerStyle } from './styles'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; + +type ICenterProps = ViewProps & VariantProps; + +const Center = React.forwardRef, ICenterProps>( + ({ className, ...props }, ref) => { + return ( + + ); + } +); + +Center.displayName = 'Center'; + +export { Center }; diff --git a/src/components/ui/center/index.web.tsx b/src/components/ui/center/index.web.tsx new file mode 100644 index 0000000..e9f3c16 --- /dev/null +++ b/src/components/ui/center/index.web.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { centerStyle } from './styles'; + +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; + +type ICenterProps = React.ComponentPropsWithoutRef<'div'> & + VariantProps; + +const Center = React.forwardRef( + ({ className, ...props }, ref) => { + return ( +
+ ); + } +); + +Center.displayName = 'Center'; + +export { Center }; diff --git a/src/components/ui/center/styles.tsx b/src/components/ui/center/styles.tsx new file mode 100644 index 0000000..8b744bc --- /dev/null +++ b/src/components/ui/center/styles.tsx @@ -0,0 +1,8 @@ +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { isWeb } from '@gluestack-ui/nativewind-utils/IsWeb'; + +const baseStyle = isWeb ? 'flex flex-col relative z-0' : ''; + +export const centerStyle = tva({ + base: `justify-center items-center ${baseStyle}`, +}); diff --git a/src/components/ui/checkbox/index.tsx b/src/components/ui/checkbox/index.tsx new file mode 100644 index 0000000..aaaa8f0 --- /dev/null +++ b/src/components/ui/checkbox/index.tsx @@ -0,0 +1,287 @@ +'use client'; +import React, { useMemo } from 'react'; +import { createCheckbox } from '@gluestack-ui/checkbox'; +import { View, Pressable, Text } from 'react-native'; +import type { TextProps, ViewProps } from 'react-native'; +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { Svg } from 'react-native-svg'; +import { + withStyleContext, + useStyleContext, +} from '@gluestack-ui/nativewind-utils/withStyleContext'; +import { withStyleContextAndStates } from '@gluestack-ui/nativewind-utils/withStyleContextAndStates'; +import { cssInterop } from 'nativewind'; +import { withStates } from '@gluestack-ui/nativewind-utils/withStates'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; +import { Platform } from 'react-native'; + +const IndicatorWrapper = React.forwardRef< + React.ElementRef, + ViewProps +>(({ ...props }, ref) => { + return ; +}); + +const LabelWrapper = React.forwardRef, TextProps>( + ({ ...props }, ref) => { + return ; + } +); + +type IPrimitiveIcon = React.ComponentPropsWithoutRef & { + height?: number | string; + width?: number | string; + fill?: string; + color?: string; + size?: number | string; + stroke?: string; + as?: React.ElementType; + className?: string; +}; + +const IconWrapper = React.forwardRef< + React.ElementRef, + IPrimitiveIcon +>(({ ...props }, ref) => { + return ; +}); + +const PrimitiveIcon = React.forwardRef< + React.ElementRef, + IPrimitiveIcon +>(({ height, width, fill, color, size, stroke, as: AsComp, ...props }, ref) => { + const sizeProps = useMemo(() => { + if (size) return { size }; + if (height && width) return { height, width }; + if (height) return { height }; + if (width) return { width }; + return {}; + }, [size, height, width]); + + let colorProps = {}; + if (color) { + colorProps = { ...colorProps, color: color }; + } + if (stroke) { + colorProps = { ...colorProps, stroke: stroke }; + } + if (fill) { + colorProps = { ...colorProps, fill: fill }; + } + if (AsComp) { + return ; + } + return ( + + ); +}); + +const SCOPE = 'CHECKBOX'; +const UICheckbox = createCheckbox({ + // @ts-ignore + Root: + Platform.OS === 'web' + ? withStyleContext(View, SCOPE) + : withStyleContextAndStates(Pressable, SCOPE), + Group: Platform.OS === 'web' ? View : withStates(View), + Icon: Platform.OS === 'web' ? IconWrapper : withStates(IconWrapper), + Label: Platform.OS === 'web' ? LabelWrapper : withStates(LabelWrapper), + Indicator: + Platform.OS === 'web' ? IndicatorWrapper : withStates(IndicatorWrapper), +}); + +cssInterop(UICheckbox, { className: 'style' }); +cssInterop(UICheckbox.Group, { className: 'style' }); +cssInterop(LabelWrapper, { className: 'style' }); +cssInterop(IndicatorWrapper, { className: 'style' }); +cssInterop(IconWrapper, { + className: { + target: 'style', + nativeStyleToProp: { + height: true, + width: true, + // @ts-ignore + fill: true, + color: true, + stroke: true, + }, + }, +}); + +const checkboxStyle = tva({ + base: 'group/checkbox flex-row items-center justify-start web:cursor-pointer data-[disabled=true]:cursor-not-allowed', + variants: { + size: { + lg: 'gap-2', + md: 'gap-2', + sm: 'gap-1.5', + }, + }, +}); + +const checkboxIndicatorStyle = tva({ + base: 'justify-center items-center border-outline-400 bg-transparent rounded web:data-[focus-visible=true]:outline-none web:data-[focus-visible=true]:ring-2 web:data-[focus-visible=true]:ring-indicator-primary data-[checked=true]:bg-primary-600 data-[checked=true]:border-primary-600 data-[hover=true]:data-[checked=false]:border-outline-500 data-[hover=true]:bg-transparent data-[hover=true]:data-[invalid=true]:border-error-700 data-[hover=true]:data-[checked=true]:bg-primary-700 data-[hover=true]:data-[checked=true]:border-primary-700 data-[hover=true]:data-[checked=true]:data-[disabled=true]:border-primary-600 data-[hover=true]:data-[checked=true]:data-[disabled=true]:bg-primary-600 data-[hover=true]:data-[checked=true]:data-[disabled=true]:opacity-40 data-[hover=true]:data-[checked=true]:data-[disabled=true]:data-[invalid=true]:border-error-700 data-[hover=true]:data-[disabled=true]:border-outline-400 data-[hover=true]:data-[disabled=true]:data-[invalid=true]:border-error-700 data-[active=true]:data-[checked=true]:bg-primary-800 data-[active=true]:data-[checked=true]:border-primary-800 data-[invalid=true]:border-error-700 data-[disabled=true]:opacity-40', + parentVariants: { + size: { + lg: 'w-6 h-6 border-[3px]', + md: 'w-5 h-5 border-2', + sm: 'w-4 h-4 border-2', + }, + }, +}); + +const checkboxLabelStyle = tva({ + base: 'text-typography-600 data-[checked=true]:text-typography-900 data-[hover=true]:text-typography-900 data-[hover=true]:data-[checked=true]:text-typography-900 data-[hover=true]:data-[checked=true]:data-[disabled=true]:text-typography-900 data-[hover=true]:data-[disabled=true]:text-typography-400 data-[active=true]:text-typography-900 data-[active=true]:data-[checked=true]:text-typography-900 data-[disabled=true]:opacity-40 web:select-none', + parentVariants: { + size: { + lg: 'text-lg', + md: 'text-base', + sm: 'text-sm', + }, + }, +}); + +const checkboxIconStyle = tva({ + base: 'text-typography-50 fill-none', + + parentVariants: { + size: { + sm: 'h-3 w-3', + md: 'h-4 w-4', + lg: 'h-5 w-5', + }, + }, +}); + +const CheckboxGroup = UICheckbox.Group; + +type ICheckboxProps = React.ComponentPropsWithoutRef & + VariantProps; + +const Checkbox = React.forwardRef< + React.ElementRef, + ICheckboxProps +>(({ className, size = 'md', ...props }, ref) => { + return ( + + ); +}); + +type ICheckboxIndicatorProps = React.ComponentPropsWithoutRef< + typeof UICheckbox.Indicator +> & + VariantProps; + +const CheckboxIndicator = React.forwardRef< + React.ElementRef, + ICheckboxIndicatorProps +>(({ className, ...props }, ref) => { + const { size: parentSize } = useStyleContext(SCOPE); + + return ( + + ); +}); + +type ICheckboxLabelProps = React.ComponentPropsWithoutRef< + typeof UICheckbox.Label +> & + VariantProps; +const CheckboxLabel = React.forwardRef< + React.ElementRef, + ICheckboxLabelProps +>(({ className, ...props }, ref) => { + const { size: parentSize } = useStyleContext(SCOPE); + return ( + + ); +}); + +type ICheckboxIconProps = React.ComponentPropsWithoutRef< + typeof UICheckbox.Icon +> & + VariantProps; + +const CheckboxIcon = React.forwardRef< + React.ElementRef, + ICheckboxIconProps +>(({ className, size, ...props }, ref) => { + const { size: parentSize } = useStyleContext(SCOPE); + + if (typeof size === 'number') { + return ( + + ); + } else if ( + (props.height !== undefined || props.width !== undefined) && + size === undefined + ) { + return ( + + ); + } + + return ( + + ); +}); + +Checkbox.displayName = 'Checkbox'; +CheckboxIndicator.displayName = 'CheckboxIndicator'; +CheckboxLabel.displayName = 'CheckboxLabel'; +CheckboxIcon.displayName = 'CheckboxIcon'; + +export { + Checkbox, + CheckboxIndicator, + CheckboxLabel, + CheckboxIcon, + CheckboxGroup, +}; diff --git a/src/components/ui/cover.tsx b/src/components/ui/cover.tsx new file mode 100644 index 0000000..6657da5 --- /dev/null +++ b/src/components/ui/cover.tsx @@ -0,0 +1,217 @@ +/* eslint-disable max-lines-per-function */ +import * as React from 'react'; +import type { SvgProps } from 'react-native-svg'; +import Svg, { Circle, Path, Polygon } from 'react-native-svg'; +// TODO: should be updated to simple images +export const Cover = (props: SvgProps) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); diff --git a/src/components/ui/divider/index.tsx b/src/components/ui/divider/index.tsx new file mode 100644 index 0000000..61404a4 --- /dev/null +++ b/src/components/ui/divider/index.tsx @@ -0,0 +1,44 @@ +'use client'; +import React from 'react'; +import { createDivider } from '@gluestack-ui/divider'; +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { View } from 'react-native'; +import { cssInterop } from 'nativewind'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; + +const dividerStyle = tva({ + base: 'bg-background-200', + variants: { + orientation: { + vertical: 'w-px h-full', + horizontal: 'h-px w-full', + }, + }, +}); + +const UIDivider = createDivider({ Root: View }); + +cssInterop(UIDivider, { className: 'style' }); + +type IUIDividerProps = React.ComponentPropsWithoutRef & + VariantProps; + +const Divider = React.forwardRef< + React.ElementRef, + IUIDividerProps +>(({ className, orientation = 'horizontal', ...props }, ref) => { + return ( + + ); +}); + +Divider.displayName = 'Divider'; + +export { Divider }; diff --git a/src/components/ui/drawer/index.tsx b/src/components/ui/drawer/index.tsx new file mode 100644 index 0000000..0a27280 --- /dev/null +++ b/src/components/ui/drawer/index.tsx @@ -0,0 +1,336 @@ +'use client'; +import { createModal as createDrawer } from '@gluestack-ui/modal'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { + useStyleContext, + withStyleContext, +} from '@gluestack-ui/nativewind-utils/withStyleContext'; +import { + AnimatePresence, + createMotionAnimatedComponent, + Motion, +} from '@legendapp/motion'; +import { cssInterop } from 'nativewind'; +import React from 'react'; +import { Dimensions, Pressable, ScrollView, View } from 'react-native'; + +const AnimatedPressable = createMotionAnimatedComponent(Pressable); +const SCOPE = 'MODAL'; +const screenWidth = Dimensions.get('window').width; +const screenHeight = Dimensions.get('window').height; +const sizes: { [key: string]: number } = { + sm: 0.25, + md: 0.5, + lg: 0.75, + full: 1, +}; + +const UIDrawer = createDrawer({ + Root: withStyleContext(View, SCOPE), + Backdrop: AnimatedPressable, + Content: Motion.View, + Body: ScrollView, + CloseButton: Pressable, + Footer: View, + Header: View, + AnimatePresence: AnimatePresence, +}); + +cssInterop(AnimatedPressable, { className: 'style' }); +cssInterop(Motion.View, { className: 'style' }); + +const drawerStyle = tva({ + base: 'w-full h-full web:pointer-events-none relative', + variants: { + size: { + sm: '', + md: '', + lg: '', + full: '', + }, + anchor: { + left: 'items-start', + right: 'items-end', + top: 'justify-start', + bottom: 'justify-end', + }, + }, +}); + +const drawerBackdropStyle = tva({ + base: 'absolute left-0 top-0 right-0 bottom-0 bg-background-dark web:cursor-default', +}); + +const drawerContentStyle = tva({ + base: 'bg-background-0 overflow-scroll border-outline-100 p-6 absolute', + parentVariants: { + size: { + sm: 'w-1/4', + md: 'w-1/2', + lg: 'w-3/4', + full: 'w-full', + }, + anchor: { + left: 'h-full border-r', + right: 'h-full border-l', + top: 'w-full border-b', + bottom: 'w-full border-t', + }, + }, + parentCompoundVariants: [ + { + anchor: 'top', + size: 'sm', + class: 'h-1/4', + }, + { + anchor: 'top', + size: 'md', + class: 'h-1/2', + }, + { + anchor: 'top', + size: 'lg', + class: 'h-3/4', + }, + { + anchor: 'top', + size: 'full', + class: 'h-full', + }, + { + anchor: 'bottom', + size: 'sm', + class: 'h-1/4', + }, + { + anchor: 'bottom', + size: 'md', + class: 'h-1/2', + }, + { + anchor: 'bottom', + size: 'lg', + class: 'h-3/4', + }, + { + anchor: 'bottom', + size: 'full', + class: 'h-full', + }, + ], +}); + +const drawerCloseButtonStyle = tva({ + base: 'z-10 rounded data-[focus-visible=true]:web:bg-background-100 web:outline-0 cursor-pointer', +}); + +const drawerHeaderStyle = tva({ + base: 'justify-between items-center flex-row', +}); + +const drawerBodyStyle = tva({ + base: 'mt-4 mb-6 shrink-0', +}); + +const drawerFooterStyle = tva({ + base: 'flex-row justify-end items-center', +}); + +type IDrawerProps = React.ComponentProps & + VariantProps & { className?: string }; + +type IDrawerBackdropProps = React.ComponentProps & + VariantProps & { className?: string }; + +type IDrawerContentProps = React.ComponentProps & + VariantProps & { className?: string }; + +type IDrawerHeaderProps = React.ComponentProps & + VariantProps & { className?: string }; + +type IDrawerBodyProps = React.ComponentProps & + VariantProps & { className?: string }; + +type IDrawerFooterProps = React.ComponentProps & + VariantProps & { className?: string }; + +type IDrawerCloseButtonProps = React.ComponentProps< + typeof UIDrawer.CloseButton +> & + VariantProps & { className?: string }; + +const Drawer = React.forwardRef< + React.ElementRef, + IDrawerProps +>(({ className, size = 'sm', anchor = 'left', ...props }, ref) => { + return ( + + ); +}); + +const DrawerBackdrop = React.forwardRef< + React.ElementRef, + IDrawerBackdropProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const DrawerContent = React.forwardRef< + React.ElementRef, + IDrawerContentProps +>(({ className, ...props }, ref) => { + const { size: parentSize, anchor: parentAnchor } = useStyleContext(SCOPE); + + const drawerHeight = screenHeight * (sizes[parentSize] || sizes.md); + const drawerWidth = screenWidth * (sizes[parentSize] || sizes.md); + + const isHorizontal = parentAnchor === 'left' || parentAnchor === 'right'; + + const initialObj = isHorizontal + ? { x: parentAnchor === 'left' ? -drawerWidth : drawerWidth } + : { y: parentAnchor === 'top' ? -drawerHeight : drawerHeight }; + + const animateObj = isHorizontal ? { x: 0 } : { y: 0 }; + + const exitObj = isHorizontal + ? { x: parentAnchor === 'left' ? -drawerWidth : drawerWidth } + : { y: parentAnchor === 'top' ? -drawerHeight : drawerHeight }; + + const customClass = isHorizontal + ? `top-0 ${parentAnchor === 'left' ? 'left-0' : 'right-0'}` + : `left-0 ${parentAnchor === 'top' ? 'top-0' : 'bottom-0'}`; + + return ( + + ); +}); + +const DrawerHeader = React.forwardRef< + React.ElementRef, + IDrawerHeaderProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const DrawerBody = React.forwardRef< + React.ElementRef, + IDrawerBodyProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const DrawerFooter = React.forwardRef< + React.ElementRef, + IDrawerFooterProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +const DrawerCloseButton = React.forwardRef< + React.ElementRef, + IDrawerCloseButtonProps +>(({ className, ...props }, ref) => { + return ( + + ); +}); + +Drawer.displayName = 'Drawer'; +DrawerBackdrop.displayName = 'DrawerBackdrop'; +DrawerContent.displayName = 'DrawerContent'; +DrawerHeader.displayName = 'DrawerHeader'; +DrawerBody.displayName = 'DrawerBody'; +DrawerFooter.displayName = 'DrawerFooter'; +DrawerCloseButton.displayName = 'DrawerCloseButton'; + +export { + Drawer, + DrawerBackdrop, + DrawerBody, + DrawerCloseButton, + DrawerContent, + DrawerFooter, + DrawerHeader, +}; diff --git a/src/components/ui/fab/index.tsx b/src/components/ui/fab/index.tsx new file mode 100644 index 0000000..f154482 --- /dev/null +++ b/src/components/ui/fab/index.tsx @@ -0,0 +1,268 @@ +'use client'; +import React, { useMemo } from 'react'; +import { createFab } from '@gluestack-ui/fab'; +import { Platform, Text } from 'react-native'; +import { Pressable } from 'react-native'; +import { Svg } from 'react-native-svg'; +import { tva } from '@gluestack-ui/nativewind-utils/tva'; +import { + withStyleContext, + useStyleContext, +} from '@gluestack-ui/nativewind-utils/withStyleContext'; +import { withStyleContextAndStates } from '@gluestack-ui/nativewind-utils/withStyleContextAndStates'; +import { cssInterop } from 'nativewind'; +import type { VariantProps } from '@gluestack-ui/nativewind-utils'; + +type IPrimitiveIcon = React.ComponentPropsWithoutRef & { + height?: number | string; + width?: number | string; + fill?: string; + color?: string; + size?: number | string; + stroke?: string; + as?: React.ElementType; + className?: string; +}; + +const PrimitiveIcon = React.forwardRef< + React.ElementRef, + IPrimitiveIcon +>(({ height, width, fill, color, size, stroke, as: AsComp, ...props }, ref) => { + const sizeProps = useMemo(() => { + if (size) return { size }; + if (height && width) return { height, width }; + if (height) return { height }; + if (width) return { width }; + return {}; + }, [size, height, width]); + + let colorProps = {}; + if (color) { + colorProps = { ...colorProps, color: color }; + } + if (stroke) { + colorProps = { ...colorProps, stroke: stroke }; + } + if (fill) { + colorProps = { ...colorProps, fill: fill }; + } + if (AsComp) { + return ; + } + return ( + + ); +}); + +const SCOPE = 'FAB'; +const UIFab = createFab({ + Root: + Platform.OS === 'web' + ? withStyleContext(Pressable, SCOPE) + : withStyleContextAndStates(Pressable, SCOPE), + Label: Text, + Icon: PrimitiveIcon, +}); + +cssInterop(UIFab, { className: 'style' }); +cssInterop(UIFab.Label, { className: 'style' }); +cssInterop(UIFab.Icon, { + className: { + target: 'style', + nativeStyleToProp: { + height: true, + width: true, + // @ts-ignore + fill: true, + color: true, + stroke: true, + }, + }, +}); + +const fabStyle = tva({ + base: 'group/fab bg-primary-500 rounded-full z-20 p-4 flex-row items-center justify-center absolute hover:bg-primary-600 active:bg-primary-700 disabled:opacity-40 disabled:pointer-events-all disabled:cursor-not-allowed data-[focus=true]:web:outline-none data-[focus-visible=true]:web:ring-2 data-[focus-visible=true]:web:ring-indicator-info shadow-hard-2', + variants: { + size: { + sm: 'px-2.5 py-2.5', + md: 'px-3 py-3', + lg: 'px-4 py-4', + }, + placement: { + 'top right': 'top-4 right-4', + 'top left': 'top-4 left-4', + 'bottom right': 'bottom-4 right-4', + 'bottom left': 'bottom-4 left-4', + 'top center': 'top-4 self-center', + 'bottom center': 'bottom-4 self-center', + }, + }, +}); + +const fabLabelStyle = tva({ + base: 'text-typography-50 font-normal font-body tracking-md text-left mx-2', + variants: { + isTruncated: { + true: '', + }, + bold: { + true: 'font-bold', + }, + underline: { + true: 'underline', + }, + strikeThrough: { + true: 'line-through', + }, + size: { + '2xs': 'text-2xs', + 'xs': 'text-xs', + 'sm': 'text-sm', + 'md': 'text-base', + 'lg': 'text-lg', + 'xl': 'text-xl', + '2xl': 'text-2xl', + '3xl': 'text-3xl', + '4xl': 'text-4xl', + '5xl': 'text-5xl', + '6xl': 'text-6xl', + }, + sub: { + true: 'text-xs', + }, + italic: { + true: 'italic', + }, + highlight: { + true: 'bg-yellow-500', + }, + }, + parentVariants: { + size: { + sm: 'text-sm', + md: 'text-base', + lg: 'text-lg', + }, + }, +}); + +const fabIconStyle = tva({ + base: 'text-typography-50 hover:text-typography-0 active:text-typography-0 fill-none', + variants: { + size: { + '2xs': 'h-3 w-3', + 'xs': 'h-3.5 w-3.5', + 'sm': 'h-4 w-4', + 'md': 'w-[18px] h-[18px]', + 'lg': 'h-5 w-5', + 'xl': 'h-6 w-6', + }, + }, +}); + +type IFabProps = Omit, 'context'> & + VariantProps; + +const Fab = React.forwardRef, IFabProps>( + ({ size = 'md', placement = 'bottom right', className, ...props }, ref) => { + return ( + + ); + } +); + +type IFabLabelProps = React.ComponentPropsWithoutRef & + VariantProps; + +const FabLabel = React.forwardRef< + React.ElementRef, + IFabLabelProps +>( + ( + { + size, + isTruncated = false, + bold = false, + underline = false, + strikeThrough = false, + className, + ...props + }, + ref + ) => { + const { size: parentSize } = useStyleContext(SCOPE); + return ( + + ); + } +); + +type IFabIconProps = React.ComponentPropsWithoutRef & + VariantProps; + +const FabIcon = React.forwardRef< + React.ElementRef, + IFabIconProps +>(({ size, className, ...props }, ref) => { + const { size: parentSize } = useStyleContext(SCOPE); + + if (typeof size === 'number') { + return ( + + ); + } else if ( + (props.height !== undefined || props.width !== undefined) && + size === undefined + ) { + return ( + + ); + } + return ( + + ); +}); + +Fab.displayName = 'Fab'; +FabLabel.displayName = 'FabLabel'; +FabIcon.displayName = 'FabIcon'; + +export { Fab, FabLabel, FabIcon }; diff --git a/src/components/ui/flat-list/index.tsx b/src/components/ui/flat-list/index.tsx new file mode 100644 index 0000000..4ccadcd --- /dev/null +++ b/src/components/ui/flat-list/index.tsx @@ -0,0 +1,2 @@ +'use client'; +export { FlatList } from 'react-native'; diff --git a/src/components/ui/focus-aware-status-bar.tsx b/src/components/ui/focus-aware-status-bar.tsx new file mode 100644 index 0000000..379656a --- /dev/null +++ b/src/components/ui/focus-aware-status-bar.tsx @@ -0,0 +1,34 @@ +import { useIsFocused } from '@react-navigation/native'; +import { useColorScheme } from 'nativewind'; +import * as React from 'react'; +import { Platform, StatusBar } from 'react-native'; +import { SystemBars } from 'react-native-edge-to-edge'; + +type Props = { hidden?: boolean }; +export const FocusAwareStatusBar = ({ hidden = false }: Props) => { + const isFocused = useIsFocused(); + const { colorScheme } = useColorScheme(); + + React.useEffect(() => { + if (Platform.OS === 'android') { + // Make both status bar and navigation bar transparent + StatusBar.setBackgroundColor('transparent'); + StatusBar.setTranslucent(true); + + // Set the system UI flags to hide navigation bar + if (hidden) { + StatusBar.setHidden(true, 'slide'); + // Set light status bar content for better visibility + StatusBar.setBarStyle('light-content'); + } else { + StatusBar.setHidden(false, 'slide'); + // Adapt status bar content based on theme + StatusBar.setBarStyle(colorScheme === 'dark' ? 'light-content' : 'dark-content'); + } + } + }, [hidden, colorScheme]); + + if (Platform.OS === 'web') return null; + + return isFocused ?