From bb990ad59824b84f02e79037381f1b348626de11 Mon Sep 17 00:00:00 2001 From: Marc Schweigert Date: Tue, 12 Aug 2025 11:51:02 -0400 Subject: [PATCH] init of sample --- .../.cursor/rules/powersdkcli.mdc | 6 + .../.github/copilot-instructions.md | 226 + .../DataverseFluentTeamsInspired/.gitignore | 24 + .../.power/appschemas/dataSourcesInfo.ts | 735 +++ .../schemas/dataverse/accounts.Schema.json | 1414 +++++ .../schemas/dataverse/contacts.Schema.json | 2041 +++++++ .../office365users/office365users.Schema.json | 2055 +++++++ .../DataverseFluentTeamsInspired/README.md | 71 + .../eslint.config.js | 23 + .../DataverseFluentTeamsInspired/index.html | 13 + .../package-lock.json | 5197 +++++++++++++++++ .../DataverseFluentTeamsInspired/package.json | 33 + .../power.config.json | 43 + .../public/vite.svg | 1 + .../DataverseFluentTeamsInspired/src/App.tsx | 219 + .../src/Models/CommonModels.ts | 17 + .../src/Models/Office365UsersModel.ts | 240 + .../src/Models/accountsModel.ts | 222 + .../src/Models/contactsModel.ts | 318 + .../src/PowerProvider.tsx | 43 + .../src/Services/Office365UsersService.ts | 336 ++ .../src/Services/accountsService.ts | 52 + .../src/Services/contactsService.ts | 52 + .../src/assets/react.svg | 1 + .../src/components/common/AboutCard.tsx | 40 + .../src/components/common/BasePage.tsx | 55 + .../src/components/common/CommonCard.tsx | 17 + .../src/components/common/ConfirmDialog.tsx | 106 + .../src/components/common/ErrorAlert.tsx | 25 + .../components/common/NavigationButton.tsx | 80 + .../src/components/common/ThemeToggleCard.tsx | 63 + .../src/components/common/UserProfile.tsx | 91 + .../src/components/common/index.ts | 8 + .../src/components/form/PhoneField.tsx | 43 + .../src/components/index.ts | 2 + .../src/components/layout/Sidebar.tsx | 69 + .../src/components/layout/TitleBar.tsx | 47 + .../src/components/layout/index.ts | 2 + .../src/constants/styles.ts | 85 + .../src/contexts/powerRuntimeContext.ts | 9 + .../src/hooks/index.ts | 5 + .../src/hooks/useDebouncedValue.ts | 10 + .../src/hooks/usePowerRuntime.ts | 8 + .../src/hooks/useStatusMessage.ts | 25 + .../src/hooks/useUserProfile.ts | 63 + .../src/index.css | 19 + .../DataverseFluentTeamsInspired/src/main.tsx | 13 + .../src/pages/AccountsPage.tsx | 597 ++ .../src/pages/ContactsPage.tsx | 559 ++ .../src/pages/SettingsPage.tsx | 49 + .../src/pages/StarterPage.tsx | 20 + .../src/utils/validation.ts | 102 + .../src/vite-env.d.ts | 1 + .../tsconfig.app.json | 27 + .../tsconfig.json | 7 + .../tsconfig.node.json | 25 + .../vite.config.ts | 33 + 57 files changed, 15687 insertions(+) create mode 100644 samples/DataverseFluentTeamsInspired/.cursor/rules/powersdkcli.mdc create mode 100644 samples/DataverseFluentTeamsInspired/.github/copilot-instructions.md create mode 100644 samples/DataverseFluentTeamsInspired/.gitignore create mode 100644 samples/DataverseFluentTeamsInspired/.power/appschemas/dataSourcesInfo.ts create mode 100644 samples/DataverseFluentTeamsInspired/.power/schemas/dataverse/accounts.Schema.json create mode 100644 samples/DataverseFluentTeamsInspired/.power/schemas/dataverse/contacts.Schema.json create mode 100644 samples/DataverseFluentTeamsInspired/.power/schemas/office365users/office365users.Schema.json create mode 100644 samples/DataverseFluentTeamsInspired/README.md create mode 100644 samples/DataverseFluentTeamsInspired/eslint.config.js create mode 100644 samples/DataverseFluentTeamsInspired/index.html create mode 100644 samples/DataverseFluentTeamsInspired/package-lock.json create mode 100644 samples/DataverseFluentTeamsInspired/package.json create mode 100644 samples/DataverseFluentTeamsInspired/power.config.json create mode 100644 samples/DataverseFluentTeamsInspired/public/vite.svg create mode 100644 samples/DataverseFluentTeamsInspired/src/App.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/Models/CommonModels.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/Models/Office365UsersModel.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/Models/accountsModel.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/Models/contactsModel.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/PowerProvider.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/Services/Office365UsersService.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/Services/accountsService.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/Services/contactsService.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/assets/react.svg create mode 100644 samples/DataverseFluentTeamsInspired/src/components/common/AboutCard.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/components/common/BasePage.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/components/common/CommonCard.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/components/common/ConfirmDialog.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/components/common/ErrorAlert.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/components/common/NavigationButton.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/components/common/ThemeToggleCard.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/components/common/UserProfile.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/components/common/index.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/components/form/PhoneField.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/components/index.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/components/layout/Sidebar.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/components/layout/TitleBar.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/components/layout/index.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/constants/styles.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/contexts/powerRuntimeContext.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/hooks/index.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/hooks/useDebouncedValue.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/hooks/usePowerRuntime.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/hooks/useStatusMessage.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/hooks/useUserProfile.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/index.css create mode 100644 samples/DataverseFluentTeamsInspired/src/main.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/pages/AccountsPage.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/pages/ContactsPage.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/pages/SettingsPage.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/pages/StarterPage.tsx create mode 100644 samples/DataverseFluentTeamsInspired/src/utils/validation.ts create mode 100644 samples/DataverseFluentTeamsInspired/src/vite-env.d.ts create mode 100644 samples/DataverseFluentTeamsInspired/tsconfig.app.json create mode 100644 samples/DataverseFluentTeamsInspired/tsconfig.json create mode 100644 samples/DataverseFluentTeamsInspired/tsconfig.node.json create mode 100644 samples/DataverseFluentTeamsInspired/vite.config.ts diff --git a/samples/DataverseFluentTeamsInspired/.cursor/rules/powersdkcli.mdc b/samples/DataverseFluentTeamsInspired/.cursor/rules/powersdkcli.mdc new file mode 100644 index 0000000..4dfffe5 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/.cursor/rules/powersdkcli.mdc @@ -0,0 +1,6 @@ +--- +description: +globs: +alwaysApply: true +--- +Always read the .github/copilot-instructions.md for the context. \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/.github/copilot-instructions.md b/samples/DataverseFluentTeamsInspired/.github/copilot-instructions.md new file mode 100644 index 0000000..6f9d496 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/.github/copilot-instructions.md @@ -0,0 +1,226 @@ +# Power Platform Code Apps Development Guide + +## 🚨 CRITICAL DEVELOPMENT RESTRICTIONS + +### **DO NOT RUN SPECIFIC DEVELOPMENT COMMANDS** +- **NEVER run `npm run dev`** - This command is prohibited +- **NEVER run `pac code run`** - This command is prohibited +- If debugging is needed, create debug pages and ask the user to paste console output +- The user will handle running these commands manually when needed + +**Note**: Other terminal commands (file operations, git, cleanup scripts, etc.) are allowed and encouraged when needed. + +## Architecture Overview + +This is a **Power Platform Code Apps** project using React + TypeScript + Vite that connects to Dataverse and Office 365 connectors. The architecture follows a strict code-generation pattern where data models and services are auto-generated from Power Platform schemas. + +### Key Components +- **React Frontend**: Standard Vite + React app with TypeScript +- **Power SDK Integration**: `@pa-client/power-code-sdk` handles all Power Platform communication +- **Auto-generated Layer**: Models and Services in `src/Models/` and `src/Services/` (DO NOT EDIT directly) +- **Configuration**: `power.config.json` defines environments, connections, and data sources + +## Critical Development Patterns + +### 🚨 Auto-generated Files - NEVER EDIT +**ABSOLUTELY NEVER edit files that are marked as generated or auto-generated** + +Files with this header are auto-generated and will be overwritten: +```typescript +/*! + * Copyright (C) Microsoft Corporation. All rights reserved. + * This file is autogenerated. Do not edit this file directly. + */ +``` + +**These files are COMPLETELY OFF-LIMITS for editing:** +- All files in `src/Models/` and `src/Services/` +- `.power/appschemas/dataSourcesInfo.ts` +- Any file with "autogenerated" or "generated" annotations in comments +- Files that contain copyright notices indicating they are auto-generated + +**If changes are needed to these files, they must be regenerated using Power Platform CLI commands, not edited directly.** + +## UI Design System + +### Fluent UI v9 Design Guidelines +This app MUST use Fluent UI v9 components and follow Microsoft Fluent Design principles: + +**Reference Documentation:** +- **Fluent Design System**: https://fluent2.microsoft.design/ +- **React Fluent UI v9**: https://react.fluentui.dev/ +- **Microsoft Fluent 2 Web Figma**: https://www.figma.com/community/file/836828295772957889 + +**Design Requirements:** +1. **Microsoft Teams Inspiration**: The app should look and feel like Microsoft Teams +2. **Layout Structure**: + - Left navigation panel (similar to Teams sidebar) + - Title bar at the top (similar to Teams header) + - Main content area +3. **Theme Support**: Must support both light and dark Fluent themes +4. **Component Library**: Use only Fluent UI v9 components (@fluentui/react-components) +5. **Design Tokens**: Use Fluent design tokens for colors, spacing, typography +6. **Accessibility**: Follow Fluent accessibility guidelines +7. **Custom Components**: When a Fluent UI v9 component is not available, create custom components that look and behave like Fluent UI v9 components using Fluent design principles, tokens, and styling patterns + +**Example Component Usage:** +```typescript +import { + FluentProvider, + webLightTheme, + webDarkTheme, + Button, + Avatar, + Text, + Card +} from '@fluentui/react-components'; + +// Always wrap app in FluentProvider with theme + + + +``` + +### Power Provider Pattern +The `PowerProvider` component MUST wrap your entire app to initialize the Power SDK: +```tsx +// main.tsx + + + +``` + +### Service Usage Pattern +Always use the generated service classes for data operations: +```typescript +import { contactsService } from '../Services/contactsService'; + +// Standard CRUD operations +const contact = await contactsService.get(id, { select: ['firstname', 'lastname'] }); +const contacts = await contactsService.getAll({ filter: "firstname eq 'John'" }); +await contactsService.create({ firstname: 'Jane', lastname: 'Doe' }); +await contactsService.update(id, { firstname: 'Updated' }); +await contactsService.delete(id); +``` + +### Generated Connector Service Pattern +All services in the `Services/` folder are generated by `pac code add-data-source` and follow consistent patterns: + +**Key Pattern Rules:** +1. **Static Methods**: Most connector services use static methods (e.g., `Office365UsersService.MyProfile_V2()`) +2. **Response Object**: Services return `{ success: boolean, data?: T, error?: string }` +3. **Always Check `success`**: Use `result.success` (NOT `result.isSuccess`) +4. **Error Handling**: Access errors via `result.error` + +```typescript +import { SomeConnectorService } from '../Services/SomeConnectorService'; + +// Generic pattern for any generated connector service +const result = await SomeConnectorService.SomeMethod(parameters); +if (result.success && result.data) { + console.log('Success:', result.data); +} else { + console.error('Failed:', result.error); +} +``` + +**Example with Office 365 Users Service:** +```typescript +import { Office365UsersService } from '../Services/Office365UsersService'; + +// Get current user profile +const profileResult = await Office365UsersService.MyProfile_V2('displayName,mail,givenName,surname,id'); +if (profileResult.success && profileResult.data) { + console.log('User data:', profileResult.data); +} else { + console.error('Profile request failed:', profileResult.error); +} +``` + +## Development Workflow + +### Initial Setup & Data Source Management +```bash +# Initialize app (only needed once) +pac code init -n "App Name" -env + +# Add Dataverse entities +pac code add-data-source -a "shared_dataverse" -c -t "contacts" -d "default.cds" + +# Add connectors (Office 365, SQL, etc.) +pac code add-data-source -a "shared_office365users" -c +``` + +### Development Loop +```bash +# Start dev server (runs both pac code run and vite) +npm run dev + +# Build and deploy +npm run build +pac code push +``` + +### Key Configuration Files +- `power.config.json`: Environment, connections, and data source mappings +- `vite.config.ts`: Dev server on port 3000, base path "./" for Power Platform hosting +- `package.json`: Special script `"dev": "start pac code run && vite"` runs Power Platform CLI alongside Vite + +## Data Layer Patterns + +### Query Options +Use `IGetOptions` and `IGetAllOptions` from `CommonModels.ts`: +```typescript +// Select specific fields +const contact = await contactsService.get(id, { select: ['firstname', 'lastname'] }); + +// Filter and pagination +const contacts = await contactsService.getAll({ + filter: "statecode eq 0", + orderBy: ['createdon desc'], + top: 50, + select: ['contactid', 'fullname'] +}); +``` + +### Error Handling +All service methods return `IOperationResult` - check for success: +```typescript +const result = await contactsService.get(id); +if (result.isSuccess) { + console.log(result.data); +} else { + console.error(result.error); +} +``` + +## Integration Points + +### Dataverse Connection +- Configured in `databaseReferences.default.cds` in `power.config.json` +- Entity metadata auto-generates TypeScript interfaces +- Primary keys and relationships preserved in generated models + +### Office 365 Connector +- Configured in `connectionReferences` in `power.config.json` +- API operations available in `.power/appschemas/dataSourcesInfo.ts` +- Use generated service methods for connector operations + +## Debugging & Troubleshooting + +### Common Issues +1. **Power SDK not initialized**: Ensure `PowerProvider` wraps your app +2. **Data source not found**: Check `power.config.json` data source names match service usage +3. **Build failures**: Auto-generated files may be corrupted - regenerate with `pac code add-data-source` + +### Useful Commands +```bash +# Check current Power Platform context +pac auth who + +# List available environments +pac env list + +# Validate configuration +pac code push --dry-run +``` \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/.gitignore b/samples/DataverseFluentTeamsInspired/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/samples/DataverseFluentTeamsInspired/.power/appschemas/dataSourcesInfo.ts b/samples/DataverseFluentTeamsInspired/.power/appschemas/dataSourcesInfo.ts new file mode 100644 index 0000000..b3851d8 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/.power/appschemas/dataSourcesInfo.ts @@ -0,0 +1,735 @@ +/*! + * Copyright (C) Microsoft Corporation. All rights reserved. + * This file is auto-generated. Do not modify it manually. + * Changes to this file may be overwritten. + */ + +export const dataSourcesInfo = { + "accounts": { + "tableId": "", + "version": "", + "primaryKey": "accountid", + "dataSourceType": "Dataverse", + "apis": {} + }, + "contacts": { + "tableId": "", + "version": "", + "primaryKey": "contactid", + "dataSourceType": "Dataverse", + "apis": {} + }, + "office365users": { + "tableId": "", + "version": "", + "primaryKey": "", + "dataSourceType": "Connector", + "apis": { + "UpdateMyProfile": { + "path": "/{connectionId}/codeless/v1.0/me", + "method": "PATCH", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": false, + "type": "object" + } + ], + "responseInfo": { + "default": { + "type": "void" + } + } + }, + "MyProfile_V2": { + "path": "/{connectionId}/codeless/v1.0/me", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "$select", + "in": "query", + "required": false, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + } + } + }, + "UpdateMyPhoto": { + "path": "/{connectionId}/codeless/v1.0/me/photo/$value", + "method": "PUT", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "type": "object" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string" + } + ], + "responseInfo": { + "default": { + "type": "void" + } + } + }, + "MyTrendingDocuments": { + "path": "/{connectionId}/codeless/beta/me/insights/trending", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "$filter", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "extractSensitivityLabel", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "fetchSensitivityLabelMetadata", + "in": "query", + "required": false, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + } + } + }, + "RelevantPeople": { + "path": "/{connectionId}/users/{userId}/relevantpeople", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "userId", + "in": "path", + "required": true, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + }, + "default": { + "type": "void" + } + } + }, + "MyProfile": { + "path": "/{connectionId}/users/me", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + }, + "202": { + "type": "void" + }, + "400": { + "type": "void" + }, + "401": { + "type": "void" + }, + "403": { + "type": "void" + }, + "500": { + "type": "void" + }, + "default": { + "type": "void" + } + } + }, + "UserProfile": { + "path": "/{connectionId}/users/{userId}", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "userId", + "in": "path", + "required": true, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + }, + "202": { + "type": "void" + }, + "400": { + "type": "void" + }, + "401": { + "type": "void" + }, + "403": { + "type": "void" + }, + "500": { + "type": "void" + }, + "default": { + "type": "void" + } + } + }, + "UserPhotoMetadata": { + "path": "/{connectionId}/users/photo", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "userId", + "in": "query", + "required": true, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + }, + "default": { + "type": "void" + } + } + }, + "UserPhoto": { + "path": "/{connectionId}/users/photo/value", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "userId", + "in": "query", + "required": true, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "string", + "format": "binary" + }, + "default": { + "type": "void" + } + } + }, + "Manager": { + "path": "/{connectionId}/users/{userId}/manager", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "userId", + "in": "path", + "required": true, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + }, + "202": { + "type": "void" + }, + "400": { + "type": "void" + }, + "401": { + "type": "void" + }, + "403": { + "type": "void" + }, + "500": { + "type": "void" + }, + "default": { + "type": "void" + } + } + }, + "DirectReports": { + "path": "/{connectionId}/users/{userId}/directReports", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "userId", + "in": "path", + "required": true, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "array" + }, + "202": { + "type": "void" + }, + "400": { + "type": "void" + }, + "401": { + "type": "void" + }, + "403": { + "type": "void" + }, + "500": { + "type": "void" + }, + "default": { + "type": "void" + } + } + }, + "SearchUser": { + "path": "/{connectionId}/users", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "searchTerm", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "top", + "in": "query", + "required": false, + "type": "integer" + } + ], + "responseInfo": { + "200": { + "type": "array" + }, + "202": { + "type": "void" + }, + "400": { + "type": "void" + }, + "401": { + "type": "void" + }, + "403": { + "type": "void" + }, + "500": { + "type": "void" + }, + "default": { + "type": "void" + } + } + }, + "SearchUserV2": { + "path": "/{connectionId}/v2/users", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "searchTerm", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "top", + "in": "query", + "required": false, + "type": "integer" + }, + { + "name": "isSearchTermRequired", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "skipToken", + "in": "query", + "required": false, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + }, + "202": { + "type": "void" + }, + "400": { + "type": "void" + }, + "401": { + "type": "void" + }, + "403": { + "type": "void" + }, + "500": { + "type": "void" + }, + "default": { + "type": "void" + } + } + }, + "TestConnection": { + "path": "/{connectionId}/testconnection", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "void" + }, + "default": { + "type": "void" + } + } + }, + "UserProfile_V2": { + "path": "/{connectionId}/codeless/v1.0/users/{id}", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "$select", + "in": "query", + "required": false, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + } + } + }, + "Manager_V2": { + "path": "/{connectionId}/codeless/v1.0/users/{id}/manager", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "$select", + "in": "query", + "required": false, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + } + } + }, + "DirectReports_V2": { + "path": "/{connectionId}/codeless/v1.0/users/{id}/directReports", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "$select", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "$top", + "in": "query", + "required": false, + "type": "integer" + } + ], + "responseInfo": { + "200": { + "type": "object" + } + } + }, + "UserPhoto_V2": { + "path": "/{connectionId}/codeless/v1.0/users/{id}/photo/$value", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "string", + "format": "binary" + } + } + }, + "TrendingDocuments": { + "path": "/{connectionId}/codeless/beta/users/{id}/insights/trending", + "method": "GET", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "$filter", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "extractSensitivityLabel", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "fetchSensitivityLabelMetadata", + "in": "query", + "required": false, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + } + } + }, + "HttpRequest": { + "path": "/{connectionId}/codeless/httprequest", + "method": "POST", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "Uri", + "in": "header", + "required": true, + "type": "string" + }, + { + "name": "Method", + "in": "header", + "required": true, + "type": "string" + }, + { + "name": "Body", + "in": "body", + "required": false, + "type": "object" + }, + { + "name": "ContentType", + "in": "header", + "required": false, + "type": "string" + }, + { + "name": "CustomHeader1", + "in": "header", + "required": false, + "type": "string" + }, + { + "name": "CustomHeader2", + "in": "header", + "required": false, + "type": "string" + }, + { + "name": "CustomHeader3", + "in": "header", + "required": false, + "type": "string" + }, + { + "name": "CustomHeader4", + "in": "header", + "required": false, + "type": "string" + }, + { + "name": "CustomHeader5", + "in": "header", + "required": false, + "type": "string" + } + ], + "responseInfo": { + "200": { + "type": "object" + }, + "default": { + "type": "void" + } + } + } + } + } +}; diff --git a/samples/DataverseFluentTeamsInspired/.power/schemas/dataverse/accounts.Schema.json b/samples/DataverseFluentTeamsInspired/.power/schemas/dataverse/accounts.Schema.json new file mode 100644 index 0000000..6344c3a --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/.power/schemas/dataverse/accounts.Schema.json @@ -0,0 +1,1414 @@ +{ + "name": "account", + "title": "Accounts", + "schema": { + "type": "array", + "items": { + "type": "object", + "x-ms-dataverse-entity": true, + "x-ms-dataverse-entityset": "accounts", + "x-ms-dataverse-primary-id": "accountid", + "x-ms-dataverse-primary-name": "name", + "properties": { + "accountcategorycode": { + "type": "string", + "title": "Category", + "x-ms-dataverse-attribute": "accountcategorycode", + "x-ms-dataverse-type": "PicklistType" + }, + "accountcategorycodename": { + "type": "string", + "title": "accountcategorycodename", + "x-ms-dataverse-attribute": "accountcategorycodename", + "x-ms-dataverse-type": "VirtualType" + }, + "accountclassificationcode": { + "type": "string", + "title": "Classification", + "x-ms-dataverse-attribute": "accountclassificationcode", + "x-ms-dataverse-type": "PicklistType" + }, + "accountclassificationcodename": { + "type": "string", + "title": "accountclassificationcodename", + "x-ms-dataverse-attribute": "accountclassificationcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "accountid": { + "type": "string", + "title": "Account", + "x-ms-dataverse-attribute": "accountid", + "x-ms-dataverse-type": "UniqueidentifierType", + "x-ms-dataverse-primary-id": true, + "required": true, + "x-ms-keyType": "primary" + }, + "accountnumber": { + "type": "string", + "title": "Account Number", + "x-ms-dataverse-attribute": "accountnumber", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "accountratingcode": { + "type": "string", + "title": "Account Rating", + "x-ms-dataverse-attribute": "accountratingcode", + "x-ms-dataverse-type": "PicklistType" + }, + "accountratingcodename": { + "type": "string", + "title": "accountratingcodename", + "x-ms-dataverse-attribute": "accountratingcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address1_addressid": { + "type": "string", + "title": "Address 1: ID", + "x-ms-dataverse-attribute": "address1_addressid", + "x-ms-dataverse-type": "UniqueidentifierType", + "x-ms-dataverse-primary-id": true + }, + "address1_addresstypecode": { + "type": "string", + "title": "Address 1: Address Type", + "x-ms-dataverse-attribute": "address1_addresstypecode", + "x-ms-dataverse-type": "PicklistType" + }, + "address1_addresstypecodename": { + "type": "string", + "title": "address1_addresstypecodename", + "x-ms-dataverse-attribute": "address1_addresstypecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address1_city": { + "type": "string", + "title": "Address 1: City", + "x-ms-dataverse-attribute": "address1_city", + "x-ms-dataverse-type": "StringType", + "maxLength": 80 + }, + "address1_composite": { + "type": "string", + "title": "Address 1", + "x-ms-dataverse-attribute": "address1_composite", + "x-ms-dataverse-type": "MemoType", + "maxLength": 1000 + }, + "address1_country": { + "type": "string", + "title": "Address 1: Country/Region", + "x-ms-dataverse-attribute": "address1_country", + "x-ms-dataverse-type": "StringType", + "maxLength": 80 + }, + "address1_county": { + "type": "string", + "title": "Address 1: County", + "x-ms-dataverse-attribute": "address1_county", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_fax": { + "type": "string", + "title": "Address 1: Fax", + "x-ms-dataverse-attribute": "address1_fax", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_freighttermscode": { + "type": "string", + "title": "Address 1: Freight Terms", + "x-ms-dataverse-attribute": "address1_freighttermscode", + "x-ms-dataverse-type": "PicklistType" + }, + "address1_freighttermscodename": { + "type": "string", + "title": "address1_freighttermscodename", + "x-ms-dataverse-attribute": "address1_freighttermscodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address1_latitude": { + "type": "string", + "title": "Address 1: Latitude", + "x-ms-dataverse-attribute": "address1_latitude", + "x-ms-dataverse-type": "DoubleType" + }, + "address1_line1": { + "type": "string", + "title": "Address 1: Street 1", + "x-ms-dataverse-attribute": "address1_line1", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address1_line2": { + "type": "string", + "title": "Address 1: Street 2", + "x-ms-dataverse-attribute": "address1_line2", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address1_line3": { + "type": "string", + "title": "Address 1: Street 3", + "x-ms-dataverse-attribute": "address1_line3", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address1_longitude": { + "type": "string", + "title": "Address 1: Longitude", + "x-ms-dataverse-attribute": "address1_longitude", + "x-ms-dataverse-type": "DoubleType" + }, + "address1_name": { + "type": "string", + "title": "Address 1: Name", + "x-ms-dataverse-attribute": "address1_name", + "x-ms-dataverse-type": "StringType", + "maxLength": 200 + }, + "address1_postalcode": { + "type": "string", + "title": "Address 1: ZIP/Postal Code", + "x-ms-dataverse-attribute": "address1_postalcode", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "address1_postofficebox": { + "type": "string", + "title": "Address 1: Post Office Box", + "x-ms-dataverse-attribute": "address1_postofficebox", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "address1_primarycontactname": { + "type": "string", + "title": "Address 1: Primary Contact Name", + "x-ms-dataverse-attribute": "address1_primarycontactname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "address1_shippingmethodcode": { + "type": "string", + "title": "Address 1: Shipping Method", + "x-ms-dataverse-attribute": "address1_shippingmethodcode", + "x-ms-dataverse-type": "PicklistType" + }, + "address1_shippingmethodcodename": { + "type": "string", + "title": "address1_shippingmethodcodename", + "x-ms-dataverse-attribute": "address1_shippingmethodcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address1_stateorprovince": { + "type": "string", + "title": "Address 1: State/Province", + "x-ms-dataverse-attribute": "address1_stateorprovince", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_telephone1": { + "type": "string", + "title": "Address Phone", + "x-ms-dataverse-attribute": "address1_telephone1", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_telephone2": { + "type": "string", + "title": "Address 1: Telephone 2", + "x-ms-dataverse-attribute": "address1_telephone2", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_telephone3": { + "type": "string", + "title": "Address 1: Telephone 3", + "x-ms-dataverse-attribute": "address1_telephone3", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_upszone": { + "type": "string", + "title": "Address 1: UPS Zone", + "x-ms-dataverse-attribute": "address1_upszone", + "x-ms-dataverse-type": "StringType", + "maxLength": 4 + }, + "address1_utcoffset": { + "type": "string", + "title": "Address 1: UTC Offset", + "x-ms-dataverse-attribute": "address1_utcoffset", + "x-ms-dataverse-type": "IntegerType" + }, + "address2_addressid": { + "type": "string", + "title": "Address 2: ID", + "x-ms-dataverse-attribute": "address2_addressid", + "x-ms-dataverse-type": "UniqueidentifierType", + "x-ms-dataverse-primary-id": true + }, + "address2_addresstypecode": { + "type": "string", + "title": "Address 2: Address Type", + "x-ms-dataverse-attribute": "address2_addresstypecode", + "x-ms-dataverse-type": "PicklistType" + }, + "address2_addresstypecodename": { + "type": "string", + "title": "address2_addresstypecodename", + "x-ms-dataverse-attribute": "address2_addresstypecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address2_city": { + "type": "string", + "title": "Address 2: City", + "x-ms-dataverse-attribute": "address2_city", + "x-ms-dataverse-type": "StringType", + "maxLength": 80 + }, + "address2_composite": { + "type": "string", + "title": "Address 2", + "x-ms-dataverse-attribute": "address2_composite", + "x-ms-dataverse-type": "MemoType", + "maxLength": 1000 + }, + "address2_country": { + "type": "string", + "title": "Address 2: Country/Region", + "x-ms-dataverse-attribute": "address2_country", + "x-ms-dataverse-type": "StringType", + "maxLength": 80 + }, + "address2_county": { + "type": "string", + "title": "Address 2: County", + "x-ms-dataverse-attribute": "address2_county", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_fax": { + "type": "string", + "title": "Address 2: Fax", + "x-ms-dataverse-attribute": "address2_fax", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_freighttermscode": { + "type": "string", + "title": "Address 2: Freight Terms", + "x-ms-dataverse-attribute": "address2_freighttermscode", + "x-ms-dataverse-type": "PicklistType" + }, + "address2_freighttermscodename": { + "type": "string", + "title": "address2_freighttermscodename", + "x-ms-dataverse-attribute": "address2_freighttermscodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address2_latitude": { + "type": "string", + "title": "Address 2: Latitude", + "x-ms-dataverse-attribute": "address2_latitude", + "x-ms-dataverse-type": "DoubleType" + }, + "address2_line1": { + "type": "string", + "title": "Address 2: Street 1", + "x-ms-dataverse-attribute": "address2_line1", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address2_line2": { + "type": "string", + "title": "Address 2: Street 2", + "x-ms-dataverse-attribute": "address2_line2", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address2_line3": { + "type": "string", + "title": "Address 2: Street 3", + "x-ms-dataverse-attribute": "address2_line3", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address2_longitude": { + "type": "string", + "title": "Address 2: Longitude", + "x-ms-dataverse-attribute": "address2_longitude", + "x-ms-dataverse-type": "DoubleType" + }, + "address2_name": { + "type": "string", + "title": "Address 2: Name", + "x-ms-dataverse-attribute": "address2_name", + "x-ms-dataverse-type": "StringType", + "maxLength": 200 + }, + "address2_postalcode": { + "type": "string", + "title": "Address 2: ZIP/Postal Code", + "x-ms-dataverse-attribute": "address2_postalcode", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "address2_postofficebox": { + "type": "string", + "title": "Address 2: Post Office Box", + "x-ms-dataverse-attribute": "address2_postofficebox", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "address2_primarycontactname": { + "type": "string", + "title": "Address 2: Primary Contact Name", + "x-ms-dataverse-attribute": "address2_primarycontactname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "address2_shippingmethodcode": { + "type": "string", + "title": "Address 2: Shipping Method", + "x-ms-dataverse-attribute": "address2_shippingmethodcode", + "x-ms-dataverse-type": "PicklistType" + }, + "address2_shippingmethodcodename": { + "type": "string", + "title": "address2_shippingmethodcodename", + "x-ms-dataverse-attribute": "address2_shippingmethodcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address2_stateorprovince": { + "type": "string", + "title": "Address 2: State/Province", + "x-ms-dataverse-attribute": "address2_stateorprovince", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_telephone1": { + "type": "string", + "title": "Address 2: Telephone 1", + "x-ms-dataverse-attribute": "address2_telephone1", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_telephone2": { + "type": "string", + "title": "Address 2: Telephone 2", + "x-ms-dataverse-attribute": "address2_telephone2", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_telephone3": { + "type": "string", + "title": "Address 2: Telephone 3", + "x-ms-dataverse-attribute": "address2_telephone3", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_upszone": { + "type": "string", + "title": "Address 2: UPS Zone", + "x-ms-dataverse-attribute": "address2_upszone", + "x-ms-dataverse-type": "StringType", + "maxLength": 4 + }, + "address2_utcoffset": { + "type": "string", + "title": "Address 2: UTC Offset", + "x-ms-dataverse-attribute": "address2_utcoffset", + "x-ms-dataverse-type": "IntegerType" + }, + "adx_createdbyipaddress": { + "type": "string", + "title": "Created By (IP Address)", + "x-ms-dataverse-attribute": "adx_createdbyipaddress", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "adx_createdbyusername": { + "type": "string", + "title": "Created By (User Name)", + "x-ms-dataverse-attribute": "adx_createdbyusername", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "adx_modifiedbyipaddress": { + "type": "string", + "title": "Modified By (IP Address)", + "x-ms-dataverse-attribute": "adx_modifiedbyipaddress", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "adx_modifiedbyusername": { + "type": "string", + "title": "Modified By (User Name)", + "x-ms-dataverse-attribute": "adx_modifiedbyusername", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "aging30": { + "type": "string", + "title": "Aging 30", + "x-ms-dataverse-attribute": "aging30", + "x-ms-dataverse-type": "MoneyType" + }, + "aging30_base": { + "type": "string", + "title": "Aging 30 (Base)", + "x-ms-dataverse-attribute": "aging30_base", + "x-ms-dataverse-type": "MoneyType" + }, + "aging60": { + "type": "string", + "title": "Aging 60", + "x-ms-dataverse-attribute": "aging60", + "x-ms-dataverse-type": "MoneyType" + }, + "aging60_base": { + "type": "string", + "title": "Aging 60 (Base)", + "x-ms-dataverse-attribute": "aging60_base", + "x-ms-dataverse-type": "MoneyType" + }, + "aging90": { + "type": "string", + "title": "Aging 90", + "x-ms-dataverse-attribute": "aging90", + "x-ms-dataverse-type": "MoneyType" + }, + "aging90_base": { + "type": "string", + "title": "Aging 90 (Base)", + "x-ms-dataverse-attribute": "aging90_base", + "x-ms-dataverse-type": "MoneyType" + }, + "businesstypecode": { + "type": "string", + "title": "Business Type", + "x-ms-dataverse-attribute": "businesstypecode", + "x-ms-dataverse-type": "PicklistType" + }, + "businesstypecodename": { + "type": "string", + "title": "businesstypecodename", + "x-ms-dataverse-attribute": "businesstypecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "createdby": { + "type": "string", + "title": "Created By", + "x-ms-dataverse-attribute": "createdby", + "x-ms-dataverse-type": "LookupType" + }, + "createdbyexternalparty": { + "type": "string", + "title": "Created By (External Party)", + "x-ms-dataverse-attribute": "createdbyexternalparty", + "x-ms-dataverse-type": "LookupType" + }, + "createdbyexternalpartyname": { + "type": "string", + "title": "createdbyexternalpartyname", + "x-ms-dataverse-attribute": "createdbyexternalpartyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "createdbyexternalpartyyominame": { + "type": "string", + "title": "createdbyexternalpartyyominame", + "x-ms-dataverse-attribute": "createdbyexternalpartyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "createdbyname": { + "type": "string", + "title": "createdbyname", + "x-ms-dataverse-attribute": "createdbyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "createdbyyominame": { + "type": "string", + "title": "createdbyyominame", + "x-ms-dataverse-attribute": "createdbyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "createdon": { + "type": "string", + "title": "Created On", + "x-ms-dataverse-attribute": "createdon", + "x-ms-dataverse-type": "DateTimeType" + }, + "createdonbehalfby": { + "type": "string", + "title": "Created By (Delegate)", + "x-ms-dataverse-attribute": "createdonbehalfby", + "x-ms-dataverse-type": "LookupType" + }, + "createdonbehalfbyname": { + "type": "string", + "title": "createdonbehalfbyname", + "x-ms-dataverse-attribute": "createdonbehalfbyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "createdonbehalfbyyominame": { + "type": "string", + "title": "createdonbehalfbyyominame", + "x-ms-dataverse-attribute": "createdonbehalfbyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "creditlimit": { + "type": "string", + "title": "Credit Limit", + "x-ms-dataverse-attribute": "creditlimit", + "x-ms-dataverse-type": "MoneyType" + }, + "creditlimit_base": { + "type": "string", + "title": "Credit Limit (Base)", + "x-ms-dataverse-attribute": "creditlimit_base", + "x-ms-dataverse-type": "MoneyType" + }, + "creditonhold": { + "type": "string", + "title": "Credit Hold", + "x-ms-dataverse-attribute": "creditonhold", + "x-ms-dataverse-type": "BooleanType" + }, + "creditonholdname": { + "type": "string", + "title": "creditonholdname", + "x-ms-dataverse-attribute": "creditonholdname", + "x-ms-dataverse-type": "VirtualType" + }, + "customersizecode": { + "type": "string", + "title": "Customer Size", + "x-ms-dataverse-attribute": "customersizecode", + "x-ms-dataverse-type": "PicklistType" + }, + "customersizecodename": { + "type": "string", + "title": "customersizecodename", + "x-ms-dataverse-attribute": "customersizecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "customertypecode": { + "type": "string", + "title": "Relationship Type", + "x-ms-dataverse-attribute": "customertypecode", + "x-ms-dataverse-type": "PicklistType" + }, + "customertypecodename": { + "type": "string", + "title": "customertypecodename", + "x-ms-dataverse-attribute": "customertypecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "description": { + "type": "string", + "title": "Description", + "x-ms-dataverse-attribute": "description", + "x-ms-dataverse-type": "MemoType", + "maxLength": 2000 + }, + "donotbulkemail": { + "type": "string", + "title": "Do not allow Bulk Emails", + "x-ms-dataverse-attribute": "donotbulkemail", + "x-ms-dataverse-type": "BooleanType" + }, + "donotbulkemailname": { + "type": "string", + "title": "donotbulkemailname", + "x-ms-dataverse-attribute": "donotbulkemailname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotbulkpostalmail": { + "type": "string", + "title": "Do not allow Bulk Mails", + "x-ms-dataverse-attribute": "donotbulkpostalmail", + "x-ms-dataverse-type": "BooleanType" + }, + "donotbulkpostalmailname": { + "type": "string", + "title": "donotbulkpostalmailname", + "x-ms-dataverse-attribute": "donotbulkpostalmailname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotemail": { + "type": "string", + "title": "Do not allow Emails", + "x-ms-dataverse-attribute": "donotemail", + "x-ms-dataverse-type": "BooleanType" + }, + "donotemailname": { + "type": "string", + "title": "donotemailname", + "x-ms-dataverse-attribute": "donotemailname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotfax": { + "type": "string", + "title": "Do not allow Faxes", + "x-ms-dataverse-attribute": "donotfax", + "x-ms-dataverse-type": "BooleanType" + }, + "donotfaxname": { + "type": "string", + "title": "donotfaxname", + "x-ms-dataverse-attribute": "donotfaxname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotphone": { + "type": "string", + "title": "Do not allow Phone Calls", + "x-ms-dataverse-attribute": "donotphone", + "x-ms-dataverse-type": "BooleanType" + }, + "donotphonename": { + "type": "string", + "title": "donotphonename", + "x-ms-dataverse-attribute": "donotphonename", + "x-ms-dataverse-type": "VirtualType" + }, + "donotpostalmail": { + "type": "string", + "title": "Do not allow Mails", + "x-ms-dataverse-attribute": "donotpostalmail", + "x-ms-dataverse-type": "BooleanType" + }, + "donotpostalmailname": { + "type": "string", + "title": "donotpostalmailname", + "x-ms-dataverse-attribute": "donotpostalmailname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotsendmarketingmaterialname": { + "type": "string", + "title": "donotsendmarketingmaterialname", + "x-ms-dataverse-attribute": "donotsendmarketingmaterialname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotsendmm": { + "type": "string", + "title": "Send Marketing Materials", + "x-ms-dataverse-attribute": "donotsendmm", + "x-ms-dataverse-type": "BooleanType" + }, + "emailaddress1": { + "type": "string", + "title": "Email", + "x-ms-dataverse-attribute": "emailaddress1", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "emailaddress2": { + "type": "string", + "title": "Email Address 2", + "x-ms-dataverse-attribute": "emailaddress2", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "emailaddress3": { + "type": "string", + "title": "Email Address 3", + "x-ms-dataverse-attribute": "emailaddress3", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "entityimage": { + "type": "string", + "title": "Default Image", + "x-ms-dataverse-attribute": "entityimage", + "x-ms-dataverse-type": "ImageType" + }, + "entityimage_timestamp": { + "type": "string", + "title": "entityimage_timestamp", + "x-ms-dataverse-attribute": "entityimage_timestamp", + "x-ms-dataverse-type": "BigIntType" + }, + "entityimage_url": { + "type": "string", + "title": "entityimage_url", + "x-ms-dataverse-attribute": "entityimage_url", + "x-ms-dataverse-type": "StringType", + "maxLength": 200 + }, + "entityimageid": { + "type": "string", + "title": "Entity Image Id", + "x-ms-dataverse-attribute": "entityimageid", + "x-ms-dataverse-type": "UniqueidentifierType" + }, + "exchangerate": { + "type": "string", + "title": "Exchange Rate", + "x-ms-dataverse-attribute": "exchangerate", + "x-ms-dataverse-type": "DecimalType" + }, + "fax": { + "type": "string", + "title": "Fax", + "x-ms-dataverse-attribute": "fax", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "followemail": { + "type": "string", + "title": "Follow Email Activity", + "x-ms-dataverse-attribute": "followemail", + "x-ms-dataverse-type": "BooleanType" + }, + "followemailname": { + "type": "string", + "title": "followemailname", + "x-ms-dataverse-attribute": "followemailname", + "x-ms-dataverse-type": "VirtualType" + }, + "ftpsiteurl": { + "type": "string", + "title": "FTP Site", + "x-ms-dataverse-attribute": "ftpsiteurl", + "x-ms-dataverse-type": "StringType", + "maxLength": 200 + }, + "importsequencenumber": { + "type": "string", + "title": "Import Sequence Number", + "x-ms-dataverse-attribute": "importsequencenumber", + "x-ms-dataverse-type": "IntegerType" + }, + "industrycode": { + "type": "string", + "title": "Industry", + "x-ms-dataverse-attribute": "industrycode", + "x-ms-dataverse-type": "PicklistType" + }, + "industrycodename": { + "type": "string", + "title": "industrycodename", + "x-ms-dataverse-attribute": "industrycodename", + "x-ms-dataverse-type": "VirtualType" + }, + "isprivate": { + "type": "string", + "title": "isprivate", + "x-ms-dataverse-attribute": "isprivate", + "x-ms-dataverse-type": "BooleanType" + }, + "isprivatename": { + "type": "string", + "title": "isprivatename", + "x-ms-dataverse-attribute": "isprivatename", + "x-ms-dataverse-type": "VirtualType" + }, + "lastonholdtime": { + "type": "string", + "title": "Last On Hold Time", + "x-ms-dataverse-attribute": "lastonholdtime", + "x-ms-dataverse-type": "DateTimeType" + }, + "lastusedincampaign": { + "type": "string", + "title": "Last Date Included in Campaign", + "x-ms-dataverse-attribute": "lastusedincampaign", + "x-ms-dataverse-type": "DateTimeType" + }, + "marketcap": { + "type": "string", + "title": "Market Capitalization", + "x-ms-dataverse-attribute": "marketcap", + "x-ms-dataverse-type": "MoneyType" + }, + "marketcap_base": { + "type": "string", + "title": "Market Capitalization (Base)", + "x-ms-dataverse-attribute": "marketcap_base", + "x-ms-dataverse-type": "MoneyType" + }, + "marketingonly": { + "type": "string", + "title": "Marketing Only", + "x-ms-dataverse-attribute": "marketingonly", + "x-ms-dataverse-type": "BooleanType" + }, + "marketingonlyname": { + "type": "string", + "title": "marketingonlyname", + "x-ms-dataverse-attribute": "marketingonlyname", + "x-ms-dataverse-type": "VirtualType" + }, + "masteraccountidname": { + "type": "string", + "title": "masteraccountidname", + "x-ms-dataverse-attribute": "masteraccountidname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "masteraccountidyominame": { + "type": "string", + "title": "masteraccountidyominame", + "x-ms-dataverse-attribute": "masteraccountidyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "masterid": { + "type": "string", + "title": "Master ID", + "x-ms-dataverse-attribute": "masterid", + "x-ms-dataverse-type": "LookupType" + }, + "merged": { + "type": "string", + "title": "Merged", + "x-ms-dataverse-attribute": "merged", + "x-ms-dataverse-type": "BooleanType" + }, + "mergedname": { + "type": "string", + "title": "mergedname", + "x-ms-dataverse-attribute": "mergedname", + "x-ms-dataverse-type": "VirtualType" + }, + "modifiedby": { + "type": "string", + "title": "Modified By", + "x-ms-dataverse-attribute": "modifiedby", + "x-ms-dataverse-type": "LookupType" + }, + "modifiedbyexternalparty": { + "type": "string", + "title": "Modified By (External Party)", + "x-ms-dataverse-attribute": "modifiedbyexternalparty", + "x-ms-dataverse-type": "LookupType" + }, + "modifiedbyexternalpartyname": { + "type": "string", + "title": "modifiedbyexternalpartyname", + "x-ms-dataverse-attribute": "modifiedbyexternalpartyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "modifiedbyexternalpartyyominame": { + "type": "string", + "title": "modifiedbyexternalpartyyominame", + "x-ms-dataverse-attribute": "modifiedbyexternalpartyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "modifiedbyname": { + "type": "string", + "title": "modifiedbyname", + "x-ms-dataverse-attribute": "modifiedbyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "modifiedbyyominame": { + "type": "string", + "title": "modifiedbyyominame", + "x-ms-dataverse-attribute": "modifiedbyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "modifiedon": { + "type": "string", + "title": "Modified On", + "x-ms-dataverse-attribute": "modifiedon", + "x-ms-dataverse-type": "DateTimeType" + }, + "modifiedonbehalfby": { + "type": "string", + "title": "Modified By (Delegate)", + "x-ms-dataverse-attribute": "modifiedonbehalfby", + "x-ms-dataverse-type": "LookupType" + }, + "modifiedonbehalfbyname": { + "type": "string", + "title": "modifiedonbehalfbyname", + "x-ms-dataverse-attribute": "modifiedonbehalfbyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "modifiedonbehalfbyyominame": { + "type": "string", + "title": "modifiedonbehalfbyyominame", + "x-ms-dataverse-attribute": "modifiedonbehalfbyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "msa_managingpartnerid": { + "type": "string", + "title": "Managing Partner", + "x-ms-dataverse-attribute": "msa_managingpartnerid", + "x-ms-dataverse-type": "LookupType" + }, + "msa_managingpartneridname": { + "type": "string", + "title": "msa_managingpartneridname", + "x-ms-dataverse-attribute": "msa_managingpartneridname", + "x-ms-dataverse-type": "StringType", + "maxLength": 160 + }, + "msa_managingpartneridyominame": { + "type": "string", + "title": "msa_managingpartneridyominame", + "x-ms-dataverse-attribute": "msa_managingpartneridyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 160 + }, + "name": { + "type": "string", + "title": "Account Name", + "x-ms-dataverse-attribute": "name", + "x-ms-dataverse-type": "StringType", + "x-ms-dataverse-primary-name": true, + "required": true, + "maxLength": 160 + }, + "numberofemployees": { + "type": "string", + "title": "Number of Employees", + "x-ms-dataverse-attribute": "numberofemployees", + "x-ms-dataverse-type": "IntegerType" + }, + "onholdtime": { + "type": "string", + "title": "On Hold Time (Minutes)", + "x-ms-dataverse-attribute": "onholdtime", + "x-ms-dataverse-type": "IntegerType" + }, + "overriddencreatedon": { + "type": "string", + "title": "Record Created On", + "x-ms-dataverse-attribute": "overriddencreatedon", + "x-ms-dataverse-type": "DateTimeType" + }, + "ownerid": { + "type": "string", + "title": "Owner", + "x-ms-dataverse-attribute": "ownerid", + "x-ms-dataverse-type": "OwnerType", + "required": true + }, + "owneridname": { + "type": "string", + "title": "owneridname", + "x-ms-dataverse-attribute": "owneridname", + "x-ms-dataverse-type": "StringType", + "required": true, + "maxLength": 100 + }, + "owneridtype": { + "type": "string", + "title": "owneridtype", + "x-ms-dataverse-attribute": "owneridtype", + "x-ms-dataverse-type": "EntityNameType", + "required": true + }, + "owneridyominame": { + "type": "string", + "title": "owneridyominame", + "x-ms-dataverse-attribute": "owneridyominame", + "x-ms-dataverse-type": "StringType", + "required": true, + "maxLength": 100 + }, + "ownershipcode": { + "type": "string", + "title": "Ownership", + "x-ms-dataverse-attribute": "ownershipcode", + "x-ms-dataverse-type": "PicklistType" + }, + "ownershipcodename": { + "type": "string", + "title": "ownershipcodename", + "x-ms-dataverse-attribute": "ownershipcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "owningbusinessunit": { + "type": "string", + "title": "Owning Business Unit", + "x-ms-dataverse-attribute": "owningbusinessunit", + "x-ms-dataverse-type": "LookupType" + }, + "owningbusinessunitname": { + "type": "string", + "title": "owningbusinessunitname", + "x-ms-dataverse-attribute": "owningbusinessunitname", + "x-ms-dataverse-type": "StringType", + "maxLength": 160 + }, + "owningteam": { + "type": "string", + "title": "Owning Team", + "x-ms-dataverse-attribute": "owningteam", + "x-ms-dataverse-type": "LookupType" + }, + "owninguser": { + "type": "string", + "title": "Owning User", + "x-ms-dataverse-attribute": "owninguser", + "x-ms-dataverse-type": "LookupType" + }, + "parentaccountid": { + "type": "string", + "title": "Parent Account", + "x-ms-dataverse-attribute": "parentaccountid", + "x-ms-dataverse-type": "LookupType" + }, + "parentaccountidname": { + "type": "string", + "title": "parentaccountidname", + "x-ms-dataverse-attribute": "parentaccountidname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "parentaccountidyominame": { + "type": "string", + "title": "parentaccountidyominame", + "x-ms-dataverse-attribute": "parentaccountidyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "participatesinworkflow": { + "type": "string", + "title": "Participates in Workflow", + "x-ms-dataverse-attribute": "participatesinworkflow", + "x-ms-dataverse-type": "BooleanType" + }, + "participatesinworkflowname": { + "type": "string", + "title": "participatesinworkflowname", + "x-ms-dataverse-attribute": "participatesinworkflowname", + "x-ms-dataverse-type": "VirtualType" + }, + "paymenttermscode": { + "type": "string", + "title": "Payment Terms", + "x-ms-dataverse-attribute": "paymenttermscode", + "x-ms-dataverse-type": "PicklistType" + }, + "paymenttermscodename": { + "type": "string", + "title": "paymenttermscodename", + "x-ms-dataverse-attribute": "paymenttermscodename", + "x-ms-dataverse-type": "VirtualType" + }, + "preferredappointmentdaycode": { + "type": "string", + "title": "Preferred Day", + "x-ms-dataverse-attribute": "preferredappointmentdaycode", + "x-ms-dataverse-type": "PicklistType" + }, + "preferredappointmentdaycodename": { + "type": "string", + "title": "preferredappointmentdaycodename", + "x-ms-dataverse-attribute": "preferredappointmentdaycodename", + "x-ms-dataverse-type": "VirtualType" + }, + "preferredappointmenttimecode": { + "type": "string", + "title": "Preferred Time", + "x-ms-dataverse-attribute": "preferredappointmenttimecode", + "x-ms-dataverse-type": "PicklistType" + }, + "preferredappointmenttimecodename": { + "type": "string", + "title": "preferredappointmenttimecodename", + "x-ms-dataverse-attribute": "preferredappointmenttimecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "preferredcontactmethodcode": { + "type": "string", + "title": "Preferred Method of Contact", + "x-ms-dataverse-attribute": "preferredcontactmethodcode", + "x-ms-dataverse-type": "PicklistType" + }, + "preferredcontactmethodcodename": { + "type": "string", + "title": "preferredcontactmethodcodename", + "x-ms-dataverse-attribute": "preferredcontactmethodcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "preferredsystemuserid": { + "type": "string", + "title": "Preferred User", + "x-ms-dataverse-attribute": "preferredsystemuserid", + "x-ms-dataverse-type": "LookupType" + }, + "preferredsystemuseridname": { + "type": "string", + "title": "preferredsystemuseridname", + "x-ms-dataverse-attribute": "preferredsystemuseridname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "preferredsystemuseridyominame": { + "type": "string", + "title": "preferredsystemuseridyominame", + "x-ms-dataverse-attribute": "preferredsystemuseridyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "primarycontactid": { + "type": "string", + "title": "Primary Contact", + "x-ms-dataverse-attribute": "primarycontactid", + "x-ms-dataverse-type": "LookupType" + }, + "primarycontactidname": { + "type": "string", + "title": "primarycontactidname", + "x-ms-dataverse-attribute": "primarycontactidname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "primarycontactidyominame": { + "type": "string", + "title": "primarycontactidyominame", + "x-ms-dataverse-attribute": "primarycontactidyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "primarysatoriid": { + "type": "string", + "title": "Primary Satori ID", + "x-ms-dataverse-attribute": "primarysatoriid", + "x-ms-dataverse-type": "StringType", + "maxLength": 200 + }, + "primarytwitterid": { + "type": "string", + "title": "Primary Twitter ID", + "x-ms-dataverse-attribute": "primarytwitterid", + "x-ms-dataverse-type": "StringType", + "maxLength": 128 + }, + "processid": { + "type": "string", + "title": "Process", + "x-ms-dataverse-attribute": "processid", + "x-ms-dataverse-type": "UniqueidentifierType" + }, + "revenue": { + "type": "string", + "title": "Annual Revenue", + "x-ms-dataverse-attribute": "revenue", + "x-ms-dataverse-type": "MoneyType" + }, + "revenue_base": { + "type": "string", + "title": "Annual Revenue (Base)", + "x-ms-dataverse-attribute": "revenue_base", + "x-ms-dataverse-type": "MoneyType" + }, + "sharesoutstanding": { + "type": "string", + "title": "Shares Outstanding", + "x-ms-dataverse-attribute": "sharesoutstanding", + "x-ms-dataverse-type": "IntegerType" + }, + "shippingmethodcode": { + "type": "string", + "title": "Shipping Method", + "x-ms-dataverse-attribute": "shippingmethodcode", + "x-ms-dataverse-type": "PicklistType" + }, + "shippingmethodcodename": { + "type": "string", + "title": "shippingmethodcodename", + "x-ms-dataverse-attribute": "shippingmethodcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "sic": { + "type": "string", + "title": "SIC Code", + "x-ms-dataverse-attribute": "sic", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "slaid": { + "type": "string", + "title": "SLA", + "x-ms-dataverse-attribute": "slaid", + "x-ms-dataverse-type": "LookupType" + }, + "slainvokedid": { + "type": "string", + "title": "Last SLA applied", + "x-ms-dataverse-attribute": "slainvokedid", + "x-ms-dataverse-type": "LookupType" + }, + "slainvokedidname": { + "type": "string", + "title": "slainvokedidname", + "x-ms-dataverse-attribute": "slainvokedidname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "slaname": { + "type": "string", + "title": "slaname", + "x-ms-dataverse-attribute": "slaname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "stageid": { + "type": "string", + "title": "(Deprecated) Process Stage", + "x-ms-dataverse-attribute": "stageid", + "x-ms-dataverse-type": "UniqueidentifierType" + }, + "statecode": { + "type": "string", + "title": "Status", + "x-ms-dataverse-attribute": "statecode", + "x-ms-dataverse-type": "StateType", + "required": true + }, + "statecodename": { + "type": "string", + "title": "statecodename", + "x-ms-dataverse-attribute": "statecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "statuscode": { + "type": "string", + "title": "Status Reason", + "x-ms-dataverse-attribute": "statuscode", + "x-ms-dataverse-type": "StatusType" + }, + "statuscodename": { + "type": "string", + "title": "statuscodename", + "x-ms-dataverse-attribute": "statuscodename", + "x-ms-dataverse-type": "VirtualType" + }, + "stockexchange": { + "type": "string", + "title": "Stock Exchange", + "x-ms-dataverse-attribute": "stockexchange", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "telephone1": { + "type": "string", + "title": "Main Phone", + "x-ms-dataverse-attribute": "telephone1", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "telephone2": { + "type": "string", + "title": "Other Phone", + "x-ms-dataverse-attribute": "telephone2", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "telephone3": { + "type": "string", + "title": "Telephone 3", + "x-ms-dataverse-attribute": "telephone3", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "territorycode": { + "type": "string", + "title": "Territory Code", + "x-ms-dataverse-attribute": "territorycode", + "x-ms-dataverse-type": "PicklistType" + }, + "territorycodename": { + "type": "string", + "title": "territorycodename", + "x-ms-dataverse-attribute": "territorycodename", + "x-ms-dataverse-type": "VirtualType" + }, + "tickersymbol": { + "type": "string", + "title": "Ticker Symbol", + "x-ms-dataverse-attribute": "tickersymbol", + "x-ms-dataverse-type": "StringType", + "maxLength": 10 + }, + "timespentbymeonemailandmeetings": { + "type": "string", + "title": "Time Spent by me", + "x-ms-dataverse-attribute": "timespentbymeonemailandmeetings", + "x-ms-dataverse-type": "StringType", + "maxLength": 1250 + }, + "timezoneruleversionnumber": { + "type": "string", + "title": "Time Zone Rule Version Number", + "x-ms-dataverse-attribute": "timezoneruleversionnumber", + "x-ms-dataverse-type": "IntegerType" + }, + "transactioncurrencyid": { + "type": "string", + "title": "Currency", + "x-ms-dataverse-attribute": "transactioncurrencyid", + "x-ms-dataverse-type": "LookupType" + }, + "transactioncurrencyidname": { + "type": "string", + "title": "transactioncurrencyidname", + "x-ms-dataverse-attribute": "transactioncurrencyidname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "traversedpath": { + "type": "string", + "title": "(Deprecated) Traversed Path", + "x-ms-dataverse-attribute": "traversedpath", + "x-ms-dataverse-type": "StringType", + "maxLength": 1250 + }, + "utcconversiontimezonecode": { + "type": "string", + "title": "UTC Conversion Time Zone Code", + "x-ms-dataverse-attribute": "utcconversiontimezonecode", + "x-ms-dataverse-type": "IntegerType" + }, + "versionnumber": { + "type": "string", + "title": "Version Number", + "x-ms-dataverse-attribute": "versionnumber", + "x-ms-dataverse-type": "BigIntType" + }, + "websiteurl": { + "type": "string", + "title": "Website", + "x-ms-dataverse-attribute": "websiteurl", + "x-ms-dataverse-type": "StringType", + "maxLength": 200 + }, + "yominame": { + "type": "string", + "title": "Yomi Account Name", + "x-ms-dataverse-attribute": "yominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 160 + } + }, + "required": [ + "accountid", + "name", + "ownerid", + "owneridname", + "owneridtype", + "owneridyominame", + "statecode" + ] + } + } +} \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/.power/schemas/dataverse/contacts.Schema.json b/samples/DataverseFluentTeamsInspired/.power/schemas/dataverse/contacts.Schema.json new file mode 100644 index 0000000..6303cb4 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/.power/schemas/dataverse/contacts.Schema.json @@ -0,0 +1,2041 @@ +{ + "name": "contact", + "title": "Contacts", + "schema": { + "type": "array", + "items": { + "type": "object", + "x-ms-dataverse-entity": true, + "x-ms-dataverse-entityset": "contacts", + "x-ms-dataverse-primary-id": "contactid", + "x-ms-dataverse-primary-name": "fullname", + "properties": { + "accountid": { + "type": "string", + "title": "Account", + "x-ms-dataverse-attribute": "accountid", + "x-ms-dataverse-type": "LookupType" + }, + "accountidname": { + "type": "string", + "title": "accountidname", + "x-ms-dataverse-attribute": "accountidname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "accountidyominame": { + "type": "string", + "title": "accountidyominame", + "x-ms-dataverse-attribute": "accountidyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "accountrolecode": { + "type": "string", + "title": "Role", + "x-ms-dataverse-attribute": "accountrolecode", + "x-ms-dataverse-type": "PicklistType" + }, + "accountrolecodename": { + "type": "string", + "title": "accountrolecodename", + "x-ms-dataverse-attribute": "accountrolecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address1_addressid": { + "type": "string", + "title": "Address 1: ID", + "x-ms-dataverse-attribute": "address1_addressid", + "x-ms-dataverse-type": "UniqueidentifierType", + "x-ms-dataverse-primary-id": true + }, + "address1_addresstypecode": { + "type": "string", + "title": "Address 1: Address Type", + "x-ms-dataverse-attribute": "address1_addresstypecode", + "x-ms-dataverse-type": "PicklistType" + }, + "address1_addresstypecodename": { + "type": "string", + "title": "address1_addresstypecodename", + "x-ms-dataverse-attribute": "address1_addresstypecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address1_city": { + "type": "string", + "title": "Address 1: City", + "x-ms-dataverse-attribute": "address1_city", + "x-ms-dataverse-type": "StringType", + "maxLength": 80 + }, + "address1_composite": { + "type": "string", + "title": "Address 1", + "x-ms-dataverse-attribute": "address1_composite", + "x-ms-dataverse-type": "MemoType", + "maxLength": 1000 + }, + "address1_country": { + "type": "string", + "title": "Address 1: Country/Region", + "x-ms-dataverse-attribute": "address1_country", + "x-ms-dataverse-type": "StringType", + "maxLength": 80 + }, + "address1_county": { + "type": "string", + "title": "Address 1: County", + "x-ms-dataverse-attribute": "address1_county", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_fax": { + "type": "string", + "title": "Address 1: Fax", + "x-ms-dataverse-attribute": "address1_fax", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_freighttermscode": { + "type": "string", + "title": "Address 1: Freight Terms", + "x-ms-dataverse-attribute": "address1_freighttermscode", + "x-ms-dataverse-type": "PicklistType" + }, + "address1_freighttermscodename": { + "type": "string", + "title": "address1_freighttermscodename", + "x-ms-dataverse-attribute": "address1_freighttermscodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address1_latitude": { + "type": "string", + "title": "Address 1: Latitude", + "x-ms-dataverse-attribute": "address1_latitude", + "x-ms-dataverse-type": "DoubleType" + }, + "address1_line1": { + "type": "string", + "title": "Address 1: Street 1", + "x-ms-dataverse-attribute": "address1_line1", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address1_line2": { + "type": "string", + "title": "Address 1: Street 2", + "x-ms-dataverse-attribute": "address1_line2", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address1_line3": { + "type": "string", + "title": "Address 1: Street 3", + "x-ms-dataverse-attribute": "address1_line3", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address1_longitude": { + "type": "string", + "title": "Address 1: Longitude", + "x-ms-dataverse-attribute": "address1_longitude", + "x-ms-dataverse-type": "DoubleType" + }, + "address1_name": { + "type": "string", + "title": "Address 1: Name", + "x-ms-dataverse-attribute": "address1_name", + "x-ms-dataverse-type": "StringType", + "maxLength": 200 + }, + "address1_postalcode": { + "type": "string", + "title": "Address 1: ZIP/Postal Code", + "x-ms-dataverse-attribute": "address1_postalcode", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "address1_postofficebox": { + "type": "string", + "title": "Address 1: Post Office Box", + "x-ms-dataverse-attribute": "address1_postofficebox", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "address1_primarycontactname": { + "type": "string", + "title": "Address 1: Primary Contact Name", + "x-ms-dataverse-attribute": "address1_primarycontactname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "address1_shippingmethodcode": { + "type": "string", + "title": "Address 1: Shipping Method", + "x-ms-dataverse-attribute": "address1_shippingmethodcode", + "x-ms-dataverse-type": "PicklistType" + }, + "address1_shippingmethodcodename": { + "type": "string", + "title": "address1_shippingmethodcodename", + "x-ms-dataverse-attribute": "address1_shippingmethodcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address1_stateorprovince": { + "type": "string", + "title": "Address 1: State/Province", + "x-ms-dataverse-attribute": "address1_stateorprovince", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_telephone1": { + "type": "string", + "title": "Address 1: Phone", + "x-ms-dataverse-attribute": "address1_telephone1", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_telephone2": { + "type": "string", + "title": "Address 1: Telephone 2", + "x-ms-dataverse-attribute": "address1_telephone2", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_telephone3": { + "type": "string", + "title": "Address 1: Telephone 3", + "x-ms-dataverse-attribute": "address1_telephone3", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address1_upszone": { + "type": "string", + "title": "Address 1: UPS Zone", + "x-ms-dataverse-attribute": "address1_upszone", + "x-ms-dataverse-type": "StringType", + "maxLength": 4 + }, + "address1_utcoffset": { + "type": "string", + "title": "Address 1: UTC Offset", + "x-ms-dataverse-attribute": "address1_utcoffset", + "x-ms-dataverse-type": "IntegerType" + }, + "address2_addressid": { + "type": "string", + "title": "Address 2: ID", + "x-ms-dataverse-attribute": "address2_addressid", + "x-ms-dataverse-type": "UniqueidentifierType", + "x-ms-dataverse-primary-id": true + }, + "address2_addresstypecode": { + "type": "string", + "title": "Address 2: Address Type", + "x-ms-dataverse-attribute": "address2_addresstypecode", + "x-ms-dataverse-type": "PicklistType" + }, + "address2_addresstypecodename": { + "type": "string", + "title": "address2_addresstypecodename", + "x-ms-dataverse-attribute": "address2_addresstypecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address2_city": { + "type": "string", + "title": "Address 2: City", + "x-ms-dataverse-attribute": "address2_city", + "x-ms-dataverse-type": "StringType", + "maxLength": 80 + }, + "address2_composite": { + "type": "string", + "title": "Address 2", + "x-ms-dataverse-attribute": "address2_composite", + "x-ms-dataverse-type": "MemoType", + "maxLength": 1000 + }, + "address2_country": { + "type": "string", + "title": "Address 2: Country/Region", + "x-ms-dataverse-attribute": "address2_country", + "x-ms-dataverse-type": "StringType", + "maxLength": 80 + }, + "address2_county": { + "type": "string", + "title": "Address 2: County", + "x-ms-dataverse-attribute": "address2_county", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_fax": { + "type": "string", + "title": "Address 2: Fax", + "x-ms-dataverse-attribute": "address2_fax", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_freighttermscode": { + "type": "string", + "title": "Address 2: Freight Terms", + "x-ms-dataverse-attribute": "address2_freighttermscode", + "x-ms-dataverse-type": "PicklistType" + }, + "address2_freighttermscodename": { + "type": "string", + "title": "address2_freighttermscodename", + "x-ms-dataverse-attribute": "address2_freighttermscodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address2_latitude": { + "type": "string", + "title": "Address 2: Latitude", + "x-ms-dataverse-attribute": "address2_latitude", + "x-ms-dataverse-type": "DoubleType" + }, + "address2_line1": { + "type": "string", + "title": "Address 2: Street 1", + "x-ms-dataverse-attribute": "address2_line1", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address2_line2": { + "type": "string", + "title": "Address 2: Street 2", + "x-ms-dataverse-attribute": "address2_line2", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address2_line3": { + "type": "string", + "title": "Address 2: Street 3", + "x-ms-dataverse-attribute": "address2_line3", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address2_longitude": { + "type": "string", + "title": "Address 2: Longitude", + "x-ms-dataverse-attribute": "address2_longitude", + "x-ms-dataverse-type": "DoubleType" + }, + "address2_name": { + "type": "string", + "title": "Address 2: Name", + "x-ms-dataverse-attribute": "address2_name", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "address2_postalcode": { + "type": "string", + "title": "Address 2: ZIP/Postal Code", + "x-ms-dataverse-attribute": "address2_postalcode", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "address2_postofficebox": { + "type": "string", + "title": "Address 2: Post Office Box", + "x-ms-dataverse-attribute": "address2_postofficebox", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "address2_primarycontactname": { + "type": "string", + "title": "Address 2: Primary Contact Name", + "x-ms-dataverse-attribute": "address2_primarycontactname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "address2_shippingmethodcode": { + "type": "string", + "title": "Address 2: Shipping Method", + "x-ms-dataverse-attribute": "address2_shippingmethodcode", + "x-ms-dataverse-type": "PicklistType" + }, + "address2_shippingmethodcodename": { + "type": "string", + "title": "address2_shippingmethodcodename", + "x-ms-dataverse-attribute": "address2_shippingmethodcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address2_stateorprovince": { + "type": "string", + "title": "Address 2: State/Province", + "x-ms-dataverse-attribute": "address2_stateorprovince", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_telephone1": { + "type": "string", + "title": "Address 2: Telephone 1", + "x-ms-dataverse-attribute": "address2_telephone1", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_telephone2": { + "type": "string", + "title": "Address 2: Telephone 2", + "x-ms-dataverse-attribute": "address2_telephone2", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_telephone3": { + "type": "string", + "title": "Address 2: Telephone 3", + "x-ms-dataverse-attribute": "address2_telephone3", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address2_upszone": { + "type": "string", + "title": "Address 2: UPS Zone", + "x-ms-dataverse-attribute": "address2_upszone", + "x-ms-dataverse-type": "StringType", + "maxLength": 4 + }, + "address2_utcoffset": { + "type": "string", + "title": "Address 2: UTC Offset", + "x-ms-dataverse-attribute": "address2_utcoffset", + "x-ms-dataverse-type": "IntegerType" + }, + "address3_addressid": { + "type": "string", + "title": "Address 3: ID", + "x-ms-dataverse-attribute": "address3_addressid", + "x-ms-dataverse-type": "UniqueidentifierType", + "x-ms-dataverse-primary-id": true + }, + "address3_addresstypecode": { + "type": "string", + "title": "Address 3: Address Type", + "x-ms-dataverse-attribute": "address3_addresstypecode", + "x-ms-dataverse-type": "PicklistType" + }, + "address3_addresstypecodename": { + "type": "string", + "title": "address3_addresstypecodename", + "x-ms-dataverse-attribute": "address3_addresstypecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address3_city": { + "type": "string", + "title": "Address 3: City", + "x-ms-dataverse-attribute": "address3_city", + "x-ms-dataverse-type": "StringType", + "maxLength": 80 + }, + "address3_composite": { + "type": "string", + "title": "Address 3", + "x-ms-dataverse-attribute": "address3_composite", + "x-ms-dataverse-type": "MemoType", + "maxLength": 1000 + }, + "address3_country": { + "type": "string", + "title": "Address3: Country/Region", + "x-ms-dataverse-attribute": "address3_country", + "x-ms-dataverse-type": "StringType", + "maxLength": 80 + }, + "address3_county": { + "type": "string", + "title": "Address 3: County", + "x-ms-dataverse-attribute": "address3_county", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address3_fax": { + "type": "string", + "title": "Address 3: Fax", + "x-ms-dataverse-attribute": "address3_fax", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address3_freighttermscode": { + "type": "string", + "title": "Address 3: Freight Terms", + "x-ms-dataverse-attribute": "address3_freighttermscode", + "x-ms-dataverse-type": "PicklistType" + }, + "address3_freighttermscodename": { + "type": "string", + "title": "address3_freighttermscodename", + "x-ms-dataverse-attribute": "address3_freighttermscodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address3_latitude": { + "type": "string", + "title": "Address 3: Latitude", + "x-ms-dataverse-attribute": "address3_latitude", + "x-ms-dataverse-type": "DoubleType" + }, + "address3_line1": { + "type": "string", + "title": "Address3: Street 1", + "x-ms-dataverse-attribute": "address3_line1", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address3_line2": { + "type": "string", + "title": "Address3: Street 2", + "x-ms-dataverse-attribute": "address3_line2", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address3_line3": { + "type": "string", + "title": "Address3: Street 3", + "x-ms-dataverse-attribute": "address3_line3", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "address3_longitude": { + "type": "string", + "title": "Address 3: Longitude", + "x-ms-dataverse-attribute": "address3_longitude", + "x-ms-dataverse-type": "DoubleType" + }, + "address3_name": { + "type": "string", + "title": "Address 3: Name", + "x-ms-dataverse-attribute": "address3_name", + "x-ms-dataverse-type": "StringType", + "maxLength": 200 + }, + "address3_postalcode": { + "type": "string", + "title": "Address3: ZIP/Postal Code", + "x-ms-dataverse-attribute": "address3_postalcode", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "address3_postofficebox": { + "type": "string", + "title": "Address 3: Post Office Box", + "x-ms-dataverse-attribute": "address3_postofficebox", + "x-ms-dataverse-type": "StringType", + "maxLength": 20 + }, + "address3_primarycontactname": { + "type": "string", + "title": "Address 3: Primary Contact Name", + "x-ms-dataverse-attribute": "address3_primarycontactname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "address3_shippingmethodcode": { + "type": "string", + "title": "Address 3: Shipping Method", + "x-ms-dataverse-attribute": "address3_shippingmethodcode", + "x-ms-dataverse-type": "PicklistType" + }, + "address3_shippingmethodcodename": { + "type": "string", + "title": "address3_shippingmethodcodename", + "x-ms-dataverse-attribute": "address3_shippingmethodcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "address3_stateorprovince": { + "type": "string", + "title": "Address3: State/Province", + "x-ms-dataverse-attribute": "address3_stateorprovince", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address3_telephone1": { + "type": "string", + "title": "Address 3: Telephone1", + "x-ms-dataverse-attribute": "address3_telephone1", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address3_telephone2": { + "type": "string", + "title": "Address 3: Telephone2", + "x-ms-dataverse-attribute": "address3_telephone2", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address3_telephone3": { + "type": "string", + "title": "Address 3: Telephone3", + "x-ms-dataverse-attribute": "address3_telephone3", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "address3_upszone": { + "type": "string", + "title": "Address 3: UPS Zone", + "x-ms-dataverse-attribute": "address3_upszone", + "x-ms-dataverse-type": "StringType", + "maxLength": 4 + }, + "address3_utcoffset": { + "type": "string", + "title": "Address 3: UTC Offset", + "x-ms-dataverse-attribute": "address3_utcoffset", + "x-ms-dataverse-type": "IntegerType" + }, + "adx_confirmremovepassword": { + "type": "string", + "title": "Confirm Remove Password", + "x-ms-dataverse-attribute": "adx_confirmremovepassword", + "x-ms-dataverse-type": "BooleanType" + }, + "adx_confirmremovepasswordname": { + "type": "string", + "title": "adx_confirmremovepasswordname", + "x-ms-dataverse-attribute": "adx_confirmremovepasswordname", + "x-ms-dataverse-type": "VirtualType" + }, + "adx_createdbyipaddress": { + "type": "string", + "title": "Created By IP Address", + "x-ms-dataverse-attribute": "adx_createdbyipaddress", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "adx_createdbyusername": { + "type": "string", + "title": "Created By Username", + "x-ms-dataverse-attribute": "adx_createdbyusername", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "adx_identity_accessfailedcount": { + "type": "string", + "title": "Access Failed Count", + "x-ms-dataverse-attribute": "adx_identity_accessfailedcount", + "x-ms-dataverse-type": "IntegerType" + }, + "adx_identity_emailaddress1confirmed": { + "type": "string", + "title": "Email Confirmed", + "x-ms-dataverse-attribute": "adx_identity_emailaddress1confirmed", + "x-ms-dataverse-type": "BooleanType" + }, + "adx_identity_emailaddress1confirmedname": { + "type": "string", + "title": "adx_identity_emailaddress1confirmedname", + "x-ms-dataverse-attribute": "adx_identity_emailaddress1confirmedname", + "x-ms-dataverse-type": "VirtualType" + }, + "adx_identity_lastsuccessfullogin": { + "type": "string", + "title": "Last Successful Login", + "x-ms-dataverse-attribute": "adx_identity_lastsuccessfullogin", + "x-ms-dataverse-type": "DateTimeType" + }, + "adx_identity_locallogindisabled": { + "type": "string", + "title": "Local Login Disabled", + "x-ms-dataverse-attribute": "adx_identity_locallogindisabled", + "x-ms-dataverse-type": "BooleanType" + }, + "adx_identity_locallogindisabledname": { + "type": "string", + "title": "adx_identity_locallogindisabledname", + "x-ms-dataverse-attribute": "adx_identity_locallogindisabledname", + "x-ms-dataverse-type": "VirtualType" + }, + "adx_identity_lockoutenabled": { + "type": "string", + "title": "Lockout Enabled", + "x-ms-dataverse-attribute": "adx_identity_lockoutenabled", + "x-ms-dataverse-type": "BooleanType" + }, + "adx_identity_lockoutenabledname": { + "type": "string", + "title": "adx_identity_lockoutenabledname", + "x-ms-dataverse-attribute": "adx_identity_lockoutenabledname", + "x-ms-dataverse-type": "VirtualType" + }, + "adx_identity_lockoutenddate": { + "type": "string", + "title": "Lockout End Date", + "x-ms-dataverse-attribute": "adx_identity_lockoutenddate", + "x-ms-dataverse-type": "DateTimeType" + }, + "adx_identity_logonenabled": { + "type": "string", + "title": "Login Enabled", + "x-ms-dataverse-attribute": "adx_identity_logonenabled", + "x-ms-dataverse-type": "BooleanType" + }, + "adx_identity_logonenabledname": { + "type": "string", + "title": "adx_identity_logonenabledname", + "x-ms-dataverse-attribute": "adx_identity_logonenabledname", + "x-ms-dataverse-type": "VirtualType" + }, + "adx_identity_mobilephoneconfirmed": { + "type": "string", + "title": "Mobile Phone Confirmed", + "x-ms-dataverse-attribute": "adx_identity_mobilephoneconfirmed", + "x-ms-dataverse-type": "BooleanType" + }, + "adx_identity_mobilephoneconfirmedname": { + "type": "string", + "title": "adx_identity_mobilephoneconfirmedname", + "x-ms-dataverse-attribute": "adx_identity_mobilephoneconfirmedname", + "x-ms-dataverse-type": "VirtualType" + }, + "adx_identity_newpassword": { + "type": "string", + "title": "New Password Input", + "x-ms-dataverse-attribute": "adx_identity_newpassword", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "adx_identity_passwordhash": { + "type": "string", + "title": "Password Hash", + "x-ms-dataverse-attribute": "adx_identity_passwordhash", + "x-ms-dataverse-type": "StringType", + "maxLength": 128 + }, + "adx_identity_securitystamp": { + "type": "string", + "title": "Security Stamp", + "x-ms-dataverse-attribute": "adx_identity_securitystamp", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "adx_identity_twofactorenabled": { + "type": "string", + "title": "Two Factor Enabled", + "x-ms-dataverse-attribute": "adx_identity_twofactorenabled", + "x-ms-dataverse-type": "BooleanType" + }, + "adx_identity_twofactorenabledname": { + "type": "string", + "title": "adx_identity_twofactorenabledname", + "x-ms-dataverse-attribute": "adx_identity_twofactorenabledname", + "x-ms-dataverse-type": "VirtualType" + }, + "adx_identity_username": { + "type": "string", + "title": "User Name", + "x-ms-dataverse-attribute": "adx_identity_username", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "adx_modifiedbyipaddress": { + "type": "string", + "title": "Modified By IP Address", + "x-ms-dataverse-attribute": "adx_modifiedbyipaddress", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "adx_modifiedbyusername": { + "type": "string", + "title": "Modified By Username", + "x-ms-dataverse-attribute": "adx_modifiedbyusername", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "adx_organizationname": { + "type": "string", + "title": "Organization Name", + "x-ms-dataverse-attribute": "adx_organizationname", + "x-ms-dataverse-type": "StringType", + "maxLength": 250 + }, + "adx_preferredlcid": { + "type": "string", + "title": "Preferred LCID (Deprecated)", + "x-ms-dataverse-attribute": "adx_preferredlcid", + "x-ms-dataverse-type": "IntegerType" + }, + "adx_profilealert": { + "type": "string", + "title": "Profile Alert", + "x-ms-dataverse-attribute": "adx_profilealert", + "x-ms-dataverse-type": "BooleanType" + }, + "adx_profilealertdate": { + "type": "string", + "title": "Profile Alert Date", + "x-ms-dataverse-attribute": "adx_profilealertdate", + "x-ms-dataverse-type": "DateTimeType" + }, + "adx_profilealertinstructions": { + "type": "string", + "title": "Profile Alert Instructions", + "x-ms-dataverse-attribute": "adx_profilealertinstructions", + "x-ms-dataverse-type": "MemoType", + "maxLength": 4096 + }, + "adx_profilealertname": { + "type": "string", + "title": "adx_profilealertname", + "x-ms-dataverse-attribute": "adx_profilealertname", + "x-ms-dataverse-type": "VirtualType" + }, + "adx_profileisanonymous": { + "type": "string", + "title": "Profile Is Anonymous", + "x-ms-dataverse-attribute": "adx_profileisanonymous", + "x-ms-dataverse-type": "BooleanType" + }, + "adx_profileisanonymousname": { + "type": "string", + "title": "adx_profileisanonymousname", + "x-ms-dataverse-attribute": "adx_profileisanonymousname", + "x-ms-dataverse-type": "VirtualType" + }, + "adx_profilelastactivity": { + "type": "string", + "title": "Profile Last Activity", + "x-ms-dataverse-attribute": "adx_profilelastactivity", + "x-ms-dataverse-type": "DateTimeType" + }, + "adx_profilemodifiedon": { + "type": "string", + "title": "Profile Modified On", + "x-ms-dataverse-attribute": "adx_profilemodifiedon", + "x-ms-dataverse-type": "DateTimeType" + }, + "adx_publicprofilecopy": { + "type": "string", + "title": "Public Profile Copy", + "x-ms-dataverse-attribute": "adx_publicprofilecopy", + "x-ms-dataverse-type": "MemoType", + "maxLength": 64000 + }, + "adx_timezone": { + "type": "string", + "title": "Time Zone", + "x-ms-dataverse-attribute": "adx_timezone", + "x-ms-dataverse-type": "IntegerType" + }, + "aging30": { + "type": "string", + "title": "Aging 30", + "x-ms-dataverse-attribute": "aging30", + "x-ms-dataverse-type": "MoneyType" + }, + "aging30_base": { + "type": "string", + "title": "Aging 30 (Base)", + "x-ms-dataverse-attribute": "aging30_base", + "x-ms-dataverse-type": "MoneyType" + }, + "aging60": { + "type": "string", + "title": "Aging 60", + "x-ms-dataverse-attribute": "aging60", + "x-ms-dataverse-type": "MoneyType" + }, + "aging60_base": { + "type": "string", + "title": "Aging 60 (Base)", + "x-ms-dataverse-attribute": "aging60_base", + "x-ms-dataverse-type": "MoneyType" + }, + "aging90": { + "type": "string", + "title": "Aging 90", + "x-ms-dataverse-attribute": "aging90", + "x-ms-dataverse-type": "MoneyType" + }, + "aging90_base": { + "type": "string", + "title": "Aging 90 (Base)", + "x-ms-dataverse-attribute": "aging90_base", + "x-ms-dataverse-type": "MoneyType" + }, + "anniversary": { + "type": "string", + "title": "Anniversary", + "x-ms-dataverse-attribute": "anniversary", + "x-ms-dataverse-type": "DateTimeType" + }, + "annualincome": { + "type": "string", + "title": "Annual Income", + "x-ms-dataverse-attribute": "annualincome", + "x-ms-dataverse-type": "MoneyType" + }, + "annualincome_base": { + "type": "string", + "title": "Annual Income (Base)", + "x-ms-dataverse-attribute": "annualincome_base", + "x-ms-dataverse-type": "MoneyType" + }, + "assistantname": { + "type": "string", + "title": "Assistant", + "x-ms-dataverse-attribute": "assistantname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "assistantphone": { + "type": "string", + "title": "Assistant Phone", + "x-ms-dataverse-attribute": "assistantphone", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "birthdate": { + "type": "string", + "title": "Birthday", + "x-ms-dataverse-attribute": "birthdate", + "x-ms-dataverse-type": "DateTimeType" + }, + "business2": { + "type": "string", + "title": "Business Phone 2", + "x-ms-dataverse-attribute": "business2", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "callback": { + "type": "string", + "title": "Callback Number", + "x-ms-dataverse-attribute": "callback", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "childrensnames": { + "type": "string", + "title": "Children's Names", + "x-ms-dataverse-attribute": "childrensnames", + "x-ms-dataverse-type": "StringType", + "maxLength": 255 + }, + "company": { + "type": "string", + "title": "Company Phone", + "x-ms-dataverse-attribute": "company", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "contactid": { + "type": "string", + "title": "Contact", + "x-ms-dataverse-attribute": "contactid", + "x-ms-dataverse-type": "UniqueidentifierType", + "x-ms-dataverse-primary-id": true, + "required": true, + "x-ms-keyType": "primary" + }, + "createdby": { + "type": "string", + "title": "Created By", + "x-ms-dataverse-attribute": "createdby", + "x-ms-dataverse-type": "LookupType" + }, + "createdbyexternalparty": { + "type": "string", + "title": "Created By (External Party)", + "x-ms-dataverse-attribute": "createdbyexternalparty", + "x-ms-dataverse-type": "LookupType" + }, + "createdbyexternalpartyname": { + "type": "string", + "title": "createdbyexternalpartyname", + "x-ms-dataverse-attribute": "createdbyexternalpartyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "createdbyexternalpartyyominame": { + "type": "string", + "title": "createdbyexternalpartyyominame", + "x-ms-dataverse-attribute": "createdbyexternalpartyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "createdbyname": { + "type": "string", + "title": "createdbyname", + "x-ms-dataverse-attribute": "createdbyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "createdbyyominame": { + "type": "string", + "title": "createdbyyominame", + "x-ms-dataverse-attribute": "createdbyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "createdon": { + "type": "string", + "title": "Created On", + "x-ms-dataverse-attribute": "createdon", + "x-ms-dataverse-type": "DateTimeType" + }, + "createdonbehalfby": { + "type": "string", + "title": "Created By (Delegate)", + "x-ms-dataverse-attribute": "createdonbehalfby", + "x-ms-dataverse-type": "LookupType" + }, + "createdonbehalfbyname": { + "type": "string", + "title": "createdonbehalfbyname", + "x-ms-dataverse-attribute": "createdonbehalfbyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "createdonbehalfbyyominame": { + "type": "string", + "title": "createdonbehalfbyyominame", + "x-ms-dataverse-attribute": "createdonbehalfbyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "creditlimit": { + "type": "string", + "title": "Credit Limit", + "x-ms-dataverse-attribute": "creditlimit", + "x-ms-dataverse-type": "MoneyType" + }, + "creditlimit_base": { + "type": "string", + "title": "Credit Limit (Base)", + "x-ms-dataverse-attribute": "creditlimit_base", + "x-ms-dataverse-type": "MoneyType" + }, + "creditonhold": { + "type": "string", + "title": "Credit Hold", + "x-ms-dataverse-attribute": "creditonhold", + "x-ms-dataverse-type": "BooleanType" + }, + "creditonholdname": { + "type": "string", + "title": "creditonholdname", + "x-ms-dataverse-attribute": "creditonholdname", + "x-ms-dataverse-type": "VirtualType" + }, + "customersizecode": { + "type": "string", + "title": "Customer Size", + "x-ms-dataverse-attribute": "customersizecode", + "x-ms-dataverse-type": "PicklistType" + }, + "customersizecodename": { + "type": "string", + "title": "customersizecodename", + "x-ms-dataverse-attribute": "customersizecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "customertypecode": { + "type": "string", + "title": "Relationship Type", + "x-ms-dataverse-attribute": "customertypecode", + "x-ms-dataverse-type": "PicklistType" + }, + "customertypecodename": { + "type": "string", + "title": "customertypecodename", + "x-ms-dataverse-attribute": "customertypecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "department": { + "type": "string", + "title": "Department", + "x-ms-dataverse-attribute": "department", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "description": { + "type": "string", + "title": "Description", + "x-ms-dataverse-attribute": "description", + "x-ms-dataverse-type": "MemoType", + "maxLength": 2000 + }, + "donotbulkemail": { + "type": "string", + "title": "Do not allow Bulk Emails", + "x-ms-dataverse-attribute": "donotbulkemail", + "x-ms-dataverse-type": "BooleanType" + }, + "donotbulkemailname": { + "type": "string", + "title": "donotbulkemailname", + "x-ms-dataverse-attribute": "donotbulkemailname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotbulkpostalmail": { + "type": "string", + "title": "Do not allow Bulk Mails", + "x-ms-dataverse-attribute": "donotbulkpostalmail", + "x-ms-dataverse-type": "BooleanType" + }, + "donotbulkpostalmailname": { + "type": "string", + "title": "donotbulkpostalmailname", + "x-ms-dataverse-attribute": "donotbulkpostalmailname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotemail": { + "type": "string", + "title": "Do not allow Emails", + "x-ms-dataverse-attribute": "donotemail", + "x-ms-dataverse-type": "BooleanType" + }, + "donotemailname": { + "type": "string", + "title": "donotemailname", + "x-ms-dataverse-attribute": "donotemailname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotfax": { + "type": "string", + "title": "Do not allow Faxes", + "x-ms-dataverse-attribute": "donotfax", + "x-ms-dataverse-type": "BooleanType" + }, + "donotfaxname": { + "type": "string", + "title": "donotfaxname", + "x-ms-dataverse-attribute": "donotfaxname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotphone": { + "type": "string", + "title": "Do not allow Phone Calls", + "x-ms-dataverse-attribute": "donotphone", + "x-ms-dataverse-type": "BooleanType" + }, + "donotphonename": { + "type": "string", + "title": "donotphonename", + "x-ms-dataverse-attribute": "donotphonename", + "x-ms-dataverse-type": "VirtualType" + }, + "donotpostalmail": { + "type": "string", + "title": "Do not allow Mails", + "x-ms-dataverse-attribute": "donotpostalmail", + "x-ms-dataverse-type": "BooleanType" + }, + "donotpostalmailname": { + "type": "string", + "title": "donotpostalmailname", + "x-ms-dataverse-attribute": "donotpostalmailname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotsendmarketingmaterialname": { + "type": "string", + "title": "donotsendmarketingmaterialname", + "x-ms-dataverse-attribute": "donotsendmarketingmaterialname", + "x-ms-dataverse-type": "VirtualType" + }, + "donotsendmm": { + "type": "string", + "title": "Send Marketing Materials", + "x-ms-dataverse-attribute": "donotsendmm", + "x-ms-dataverse-type": "BooleanType" + }, + "educationcode": { + "type": "string", + "title": "Education", + "x-ms-dataverse-attribute": "educationcode", + "x-ms-dataverse-type": "PicklistType" + }, + "educationcodename": { + "type": "string", + "title": "educationcodename", + "x-ms-dataverse-attribute": "educationcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "emailaddress1": { + "type": "string", + "title": "Email", + "x-ms-dataverse-attribute": "emailaddress1", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "emailaddress2": { + "type": "string", + "title": "Email Address 2", + "x-ms-dataverse-attribute": "emailaddress2", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "emailaddress3": { + "type": "string", + "title": "Email Address 3", + "x-ms-dataverse-attribute": "emailaddress3", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "employeeid": { + "type": "string", + "title": "Employee", + "x-ms-dataverse-attribute": "employeeid", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "entityimage": { + "type": "string", + "title": "Entity Image", + "x-ms-dataverse-attribute": "entityimage", + "x-ms-dataverse-type": "ImageType" + }, + "entityimage_timestamp": { + "type": "string", + "title": "entityimage_timestamp", + "x-ms-dataverse-attribute": "entityimage_timestamp", + "x-ms-dataverse-type": "BigIntType" + }, + "entityimage_url": { + "type": "string", + "title": "entityimage_url", + "x-ms-dataverse-attribute": "entityimage_url", + "x-ms-dataverse-type": "StringType", + "maxLength": 200 + }, + "entityimageid": { + "type": "string", + "title": "Entity Image Id", + "x-ms-dataverse-attribute": "entityimageid", + "x-ms-dataverse-type": "UniqueidentifierType" + }, + "exchangerate": { + "type": "string", + "title": "Exchange Rate", + "x-ms-dataverse-attribute": "exchangerate", + "x-ms-dataverse-type": "DecimalType" + }, + "externaluseridentifier": { + "type": "string", + "title": "External User Identifier", + "x-ms-dataverse-attribute": "externaluseridentifier", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "familystatuscode": { + "type": "string", + "title": "Marital Status", + "x-ms-dataverse-attribute": "familystatuscode", + "x-ms-dataverse-type": "PicklistType" + }, + "familystatuscodename": { + "type": "string", + "title": "familystatuscodename", + "x-ms-dataverse-attribute": "familystatuscodename", + "x-ms-dataverse-type": "VirtualType" + }, + "fax": { + "type": "string", + "title": "Fax", + "x-ms-dataverse-attribute": "fax", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "firstname": { + "type": "string", + "title": "First Name", + "x-ms-dataverse-attribute": "firstname", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "followemail": { + "type": "string", + "title": "Follow Email Activity", + "x-ms-dataverse-attribute": "followemail", + "x-ms-dataverse-type": "BooleanType" + }, + "followemailname": { + "type": "string", + "title": "followemailname", + "x-ms-dataverse-attribute": "followemailname", + "x-ms-dataverse-type": "VirtualType" + }, + "ftpsiteurl": { + "type": "string", + "title": "FTP Site", + "x-ms-dataverse-attribute": "ftpsiteurl", + "x-ms-dataverse-type": "StringType", + "maxLength": 200 + }, + "fullname": { + "type": "string", + "title": "Full Name", + "x-ms-dataverse-attribute": "fullname", + "x-ms-dataverse-type": "StringType", + "x-ms-dataverse-primary-name": true, + "maxLength": 160 + }, + "gendercode": { + "type": "string", + "title": "Gender", + "x-ms-dataverse-attribute": "gendercode", + "x-ms-dataverse-type": "PicklistType" + }, + "gendercodename": { + "type": "string", + "title": "gendercodename", + "x-ms-dataverse-attribute": "gendercodename", + "x-ms-dataverse-type": "VirtualType" + }, + "governmentid": { + "type": "string", + "title": "Government", + "x-ms-dataverse-attribute": "governmentid", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "haschildrencode": { + "type": "string", + "title": "Has Children", + "x-ms-dataverse-attribute": "haschildrencode", + "x-ms-dataverse-type": "PicklistType" + }, + "haschildrencodename": { + "type": "string", + "title": "haschildrencodename", + "x-ms-dataverse-attribute": "haschildrencodename", + "x-ms-dataverse-type": "VirtualType" + }, + "home2": { + "type": "string", + "title": "Home Phone 2", + "x-ms-dataverse-attribute": "home2", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "importsequencenumber": { + "type": "string", + "title": "Import Sequence Number", + "x-ms-dataverse-attribute": "importsequencenumber", + "x-ms-dataverse-type": "IntegerType" + }, + "isautocreate": { + "type": "string", + "title": "Auto-created", + "x-ms-dataverse-attribute": "isautocreate", + "x-ms-dataverse-type": "BooleanType" + }, + "isbackofficecustomer": { + "type": "string", + "title": "Back Office Customer", + "x-ms-dataverse-attribute": "isbackofficecustomer", + "x-ms-dataverse-type": "BooleanType" + }, + "isbackofficecustomername": { + "type": "string", + "title": "isbackofficecustomername", + "x-ms-dataverse-attribute": "isbackofficecustomername", + "x-ms-dataverse-type": "VirtualType" + }, + "isprivate": { + "type": "string", + "title": "isprivate", + "x-ms-dataverse-attribute": "isprivate", + "x-ms-dataverse-type": "BooleanType" + }, + "isprivatename": { + "type": "string", + "title": "isprivatename", + "x-ms-dataverse-attribute": "isprivatename", + "x-ms-dataverse-type": "VirtualType" + }, + "jobtitle": { + "type": "string", + "title": "Job Title", + "x-ms-dataverse-attribute": "jobtitle", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "lastname": { + "type": "string", + "title": "Last Name", + "x-ms-dataverse-attribute": "lastname", + "x-ms-dataverse-type": "StringType", + "required": true, + "maxLength": 50 + }, + "lastonholdtime": { + "type": "string", + "title": "Last On Hold Time", + "x-ms-dataverse-attribute": "lastonholdtime", + "x-ms-dataverse-type": "DateTimeType" + }, + "lastusedincampaign": { + "type": "string", + "title": "Last Date Included in Campaign", + "x-ms-dataverse-attribute": "lastusedincampaign", + "x-ms-dataverse-type": "DateTimeType" + }, + "leadsourcecode": { + "type": "string", + "title": "Lead Source", + "x-ms-dataverse-attribute": "leadsourcecode", + "x-ms-dataverse-type": "PicklistType" + }, + "leadsourcecodename": { + "type": "string", + "title": "leadsourcecodename", + "x-ms-dataverse-attribute": "leadsourcecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "managername": { + "type": "string", + "title": "Manager", + "x-ms-dataverse-attribute": "managername", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "managerphone": { + "type": "string", + "title": "Manager Phone", + "x-ms-dataverse-attribute": "managerphone", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "marketingonly": { + "type": "string", + "title": "Marketing Only", + "x-ms-dataverse-attribute": "marketingonly", + "x-ms-dataverse-type": "BooleanType" + }, + "marketingonlyname": { + "type": "string", + "title": "marketingonlyname", + "x-ms-dataverse-attribute": "marketingonlyname", + "x-ms-dataverse-type": "VirtualType" + }, + "mastercontactidname": { + "type": "string", + "title": "mastercontactidname", + "x-ms-dataverse-attribute": "mastercontactidname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "mastercontactidyominame": { + "type": "string", + "title": "mastercontactidyominame", + "x-ms-dataverse-attribute": "mastercontactidyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "masterid": { + "type": "string", + "title": "Master ID", + "x-ms-dataverse-attribute": "masterid", + "x-ms-dataverse-type": "LookupType" + }, + "merged": { + "type": "string", + "title": "Merged", + "x-ms-dataverse-attribute": "merged", + "x-ms-dataverse-type": "BooleanType" + }, + "mergedname": { + "type": "string", + "title": "mergedname", + "x-ms-dataverse-attribute": "mergedname", + "x-ms-dataverse-type": "VirtualType" + }, + "middlename": { + "type": "string", + "title": "Middle Name", + "x-ms-dataverse-attribute": "middlename", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "mobilephone": { + "type": "string", + "title": "Mobile Phone", + "x-ms-dataverse-attribute": "mobilephone", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "modifiedby": { + "type": "string", + "title": "Modified By", + "x-ms-dataverse-attribute": "modifiedby", + "x-ms-dataverse-type": "LookupType" + }, + "modifiedbyexternalparty": { + "type": "string", + "title": "Modified By (External Party)", + "x-ms-dataverse-attribute": "modifiedbyexternalparty", + "x-ms-dataverse-type": "LookupType" + }, + "modifiedbyexternalpartyname": { + "type": "string", + "title": "modifiedbyexternalpartyname", + "x-ms-dataverse-attribute": "modifiedbyexternalpartyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "modifiedbyexternalpartyyominame": { + "type": "string", + "title": "modifiedbyexternalpartyyominame", + "x-ms-dataverse-attribute": "modifiedbyexternalpartyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "modifiedbyname": { + "type": "string", + "title": "modifiedbyname", + "x-ms-dataverse-attribute": "modifiedbyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "modifiedbyyominame": { + "type": "string", + "title": "modifiedbyyominame", + "x-ms-dataverse-attribute": "modifiedbyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "modifiedon": { + "type": "string", + "title": "Modified On", + "x-ms-dataverse-attribute": "modifiedon", + "x-ms-dataverse-type": "DateTimeType" + }, + "modifiedonbehalfby": { + "type": "string", + "title": "Modified By (Delegate)", + "x-ms-dataverse-attribute": "modifiedonbehalfby", + "x-ms-dataverse-type": "LookupType" + }, + "modifiedonbehalfbyname": { + "type": "string", + "title": "modifiedonbehalfbyname", + "x-ms-dataverse-attribute": "modifiedonbehalfbyname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "modifiedonbehalfbyyominame": { + "type": "string", + "title": "modifiedonbehalfbyyominame", + "x-ms-dataverse-attribute": "modifiedonbehalfbyyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "msa_managingpartnerid": { + "type": "string", + "title": "Managing Partner", + "x-ms-dataverse-attribute": "msa_managingpartnerid", + "x-ms-dataverse-type": "LookupType" + }, + "msa_managingpartneridname": { + "type": "string", + "title": "msa_managingpartneridname", + "x-ms-dataverse-attribute": "msa_managingpartneridname", + "x-ms-dataverse-type": "StringType", + "maxLength": 160 + }, + "msa_managingpartneridyominame": { + "type": "string", + "title": "msa_managingpartneridyominame", + "x-ms-dataverse-attribute": "msa_managingpartneridyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 160 + }, + "msdyn_disablewebtracking": { + "type": "string", + "title": "Disable Web Tracking", + "x-ms-dataverse-attribute": "msdyn_disablewebtracking", + "x-ms-dataverse-type": "BooleanType" + }, + "msdyn_disablewebtrackingname": { + "type": "string", + "title": "msdyn_disablewebtrackingname", + "x-ms-dataverse-attribute": "msdyn_disablewebtrackingname", + "x-ms-dataverse-type": "VirtualType" + }, + "msdyn_isminor": { + "type": "string", + "title": "Is Minor", + "x-ms-dataverse-attribute": "msdyn_isminor", + "x-ms-dataverse-type": "BooleanType" + }, + "msdyn_isminorname": { + "type": "string", + "title": "msdyn_isminorname", + "x-ms-dataverse-attribute": "msdyn_isminorname", + "x-ms-dataverse-type": "VirtualType" + }, + "msdyn_isminorwithparentalconsent": { + "type": "string", + "title": "Is Minor with Parental Consent", + "x-ms-dataverse-attribute": "msdyn_isminorwithparentalconsent", + "x-ms-dataverse-type": "BooleanType" + }, + "msdyn_isminorwithparentalconsentname": { + "type": "string", + "title": "msdyn_isminorwithparentalconsentname", + "x-ms-dataverse-attribute": "msdyn_isminorwithparentalconsentname", + "x-ms-dataverse-type": "VirtualType" + }, + "msdyn_portaltermsagreementdate": { + "type": "string", + "title": "Portal Terms Agreement Date", + "x-ms-dataverse-attribute": "msdyn_portaltermsagreementdate", + "x-ms-dataverse-type": "DateTimeType" + }, + "mspp_userpreferredlcid": { + "type": "string", + "title": "Preferred Language", + "x-ms-dataverse-attribute": "mspp_userpreferredlcid", + "x-ms-dataverse-type": "PicklistType" + }, + "mspp_userpreferredlcidname": { + "type": "string", + "title": "mspp_userpreferredlcidname", + "x-ms-dataverse-attribute": "mspp_userpreferredlcidname", + "x-ms-dataverse-type": "VirtualType" + }, + "nickname": { + "type": "string", + "title": "Nickname", + "x-ms-dataverse-attribute": "nickname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "numberofchildren": { + "type": "string", + "title": "No. of Children", + "x-ms-dataverse-attribute": "numberofchildren", + "x-ms-dataverse-type": "IntegerType" + }, + "onholdtime": { + "type": "string", + "title": "On Hold Time (Minutes)", + "x-ms-dataverse-attribute": "onholdtime", + "x-ms-dataverse-type": "IntegerType" + }, + "overriddencreatedon": { + "type": "string", + "title": "Record Created On", + "x-ms-dataverse-attribute": "overriddencreatedon", + "x-ms-dataverse-type": "DateTimeType" + }, + "ownerid": { + "type": "string", + "title": "Owner", + "x-ms-dataverse-attribute": "ownerid", + "x-ms-dataverse-type": "OwnerType", + "required": true + }, + "owneridname": { + "type": "string", + "title": "owneridname", + "x-ms-dataverse-attribute": "owneridname", + "x-ms-dataverse-type": "StringType", + "required": true, + "maxLength": 100 + }, + "owneridtype": { + "type": "string", + "title": "owneridtype", + "x-ms-dataverse-attribute": "owneridtype", + "x-ms-dataverse-type": "EntityNameType", + "required": true + }, + "owneridyominame": { + "type": "string", + "title": "owneridyominame", + "x-ms-dataverse-attribute": "owneridyominame", + "x-ms-dataverse-type": "StringType", + "required": true, + "maxLength": 100 + }, + "owningbusinessunit": { + "type": "string", + "title": "Owning Business Unit", + "x-ms-dataverse-attribute": "owningbusinessunit", + "x-ms-dataverse-type": "LookupType" + }, + "owningbusinessunitname": { + "type": "string", + "title": "owningbusinessunitname", + "x-ms-dataverse-attribute": "owningbusinessunitname", + "x-ms-dataverse-type": "StringType", + "maxLength": 160 + }, + "owningteam": { + "type": "string", + "title": "Owning Team", + "x-ms-dataverse-attribute": "owningteam", + "x-ms-dataverse-type": "LookupType" + }, + "owninguser": { + "type": "string", + "title": "Owning User", + "x-ms-dataverse-attribute": "owninguser", + "x-ms-dataverse-type": "LookupType" + }, + "pager": { + "type": "string", + "title": "Pager", + "x-ms-dataverse-attribute": "pager", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "parentcontactid": { + "type": "string", + "title": "Parent Contact", + "x-ms-dataverse-attribute": "parentcontactid", + "x-ms-dataverse-type": "LookupType" + }, + "parentcontactidname": { + "type": "string", + "title": "parentcontactidname", + "x-ms-dataverse-attribute": "parentcontactidname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "parentcontactidyominame": { + "type": "string", + "title": "parentcontactidyominame", + "x-ms-dataverse-attribute": "parentcontactidyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "parentcustomerid": { + "type": "string", + "title": "Company Name", + "x-ms-dataverse-attribute": "parentcustomerid", + "x-ms-dataverse-type": "CustomerType" + }, + "parentcustomeridname": { + "type": "string", + "title": "parentcustomeridname", + "x-ms-dataverse-attribute": "parentcustomeridname", + "x-ms-dataverse-type": "StringType", + "required": true, + "maxLength": 160 + }, + "parentcustomeridtype": { + "type": "string", + "title": "Parent Customer Type", + "x-ms-dataverse-attribute": "parentcustomeridtype", + "x-ms-dataverse-type": "EntityNameType" + }, + "parentcustomeridyominame": { + "type": "string", + "title": "parentcustomeridyominame", + "x-ms-dataverse-attribute": "parentcustomeridyominame", + "x-ms-dataverse-type": "StringType", + "required": true, + "maxLength": 450 + }, + "participatesinworkflow": { + "type": "string", + "title": "Participates in Workflow", + "x-ms-dataverse-attribute": "participatesinworkflow", + "x-ms-dataverse-type": "BooleanType" + }, + "participatesinworkflowname": { + "type": "string", + "title": "participatesinworkflowname", + "x-ms-dataverse-attribute": "participatesinworkflowname", + "x-ms-dataverse-type": "VirtualType" + }, + "paymenttermscode": { + "type": "string", + "title": "Payment Terms", + "x-ms-dataverse-attribute": "paymenttermscode", + "x-ms-dataverse-type": "PicklistType" + }, + "paymenttermscodename": { + "type": "string", + "title": "paymenttermscodename", + "x-ms-dataverse-attribute": "paymenttermscodename", + "x-ms-dataverse-type": "VirtualType" + }, + "preferredappointmentdaycode": { + "type": "string", + "title": "Preferred Day", + "x-ms-dataverse-attribute": "preferredappointmentdaycode", + "x-ms-dataverse-type": "PicklistType" + }, + "preferredappointmentdaycodename": { + "type": "string", + "title": "preferredappointmentdaycodename", + "x-ms-dataverse-attribute": "preferredappointmentdaycodename", + "x-ms-dataverse-type": "VirtualType" + }, + "preferredappointmenttimecode": { + "type": "string", + "title": "Preferred Time", + "x-ms-dataverse-attribute": "preferredappointmenttimecode", + "x-ms-dataverse-type": "PicklistType" + }, + "preferredappointmenttimecodename": { + "type": "string", + "title": "preferredappointmenttimecodename", + "x-ms-dataverse-attribute": "preferredappointmenttimecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "preferredcontactmethodcode": { + "type": "string", + "title": "Preferred Method of Contact", + "x-ms-dataverse-attribute": "preferredcontactmethodcode", + "x-ms-dataverse-type": "PicklistType" + }, + "preferredcontactmethodcodename": { + "type": "string", + "title": "preferredcontactmethodcodename", + "x-ms-dataverse-attribute": "preferredcontactmethodcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "preferredsystemuserid": { + "type": "string", + "title": "Preferred User", + "x-ms-dataverse-attribute": "preferredsystemuserid", + "x-ms-dataverse-type": "LookupType" + }, + "preferredsystemuseridname": { + "type": "string", + "title": "preferredsystemuseridname", + "x-ms-dataverse-attribute": "preferredsystemuseridname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "preferredsystemuseridyominame": { + "type": "string", + "title": "preferredsystemuseridyominame", + "x-ms-dataverse-attribute": "preferredsystemuseridyominame", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "processid": { + "type": "string", + "title": "Process", + "x-ms-dataverse-attribute": "processid", + "x-ms-dataverse-type": "UniqueidentifierType" + }, + "salutation": { + "type": "string", + "title": "Salutation", + "x-ms-dataverse-attribute": "salutation", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "shippingmethodcode": { + "type": "string", + "title": "Shipping Method", + "x-ms-dataverse-attribute": "shippingmethodcode", + "x-ms-dataverse-type": "PicklistType" + }, + "shippingmethodcodename": { + "type": "string", + "title": "shippingmethodcodename", + "x-ms-dataverse-attribute": "shippingmethodcodename", + "x-ms-dataverse-type": "VirtualType" + }, + "slaid": { + "type": "string", + "title": "SLA", + "x-ms-dataverse-attribute": "slaid", + "x-ms-dataverse-type": "LookupType" + }, + "slainvokedid": { + "type": "string", + "title": "Last SLA applied", + "x-ms-dataverse-attribute": "slainvokedid", + "x-ms-dataverse-type": "LookupType" + }, + "slainvokedidname": { + "type": "string", + "title": "slainvokedidname", + "x-ms-dataverse-attribute": "slainvokedidname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "slaname": { + "type": "string", + "title": "slaname", + "x-ms-dataverse-attribute": "slaname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "spousesname": { + "type": "string", + "title": "Spouse/Partner Name", + "x-ms-dataverse-attribute": "spousesname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "stageid": { + "type": "string", + "title": "(Deprecated) Process Stage", + "x-ms-dataverse-attribute": "stageid", + "x-ms-dataverse-type": "UniqueidentifierType" + }, + "statecode": { + "type": "string", + "title": "Status", + "x-ms-dataverse-attribute": "statecode", + "x-ms-dataverse-type": "StateType", + "required": true + }, + "statecodename": { + "type": "string", + "title": "statecodename", + "x-ms-dataverse-attribute": "statecodename", + "x-ms-dataverse-type": "VirtualType" + }, + "statuscode": { + "type": "string", + "title": "Status Reason", + "x-ms-dataverse-attribute": "statuscode", + "x-ms-dataverse-type": "StatusType" + }, + "statuscodename": { + "type": "string", + "title": "statuscodename", + "x-ms-dataverse-attribute": "statuscodename", + "x-ms-dataverse-type": "VirtualType" + }, + "subscriptionid": { + "type": "string", + "title": "Subscription", + "x-ms-dataverse-attribute": "subscriptionid", + "x-ms-dataverse-type": "UniqueidentifierType" + }, + "suffix": { + "type": "string", + "title": "Suffix", + "x-ms-dataverse-attribute": "suffix", + "x-ms-dataverse-type": "StringType", + "maxLength": 10 + }, + "telephone1": { + "type": "string", + "title": "Business Phone", + "x-ms-dataverse-attribute": "telephone1", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "telephone2": { + "type": "string", + "title": "Home Phone", + "x-ms-dataverse-attribute": "telephone2", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "telephone3": { + "type": "string", + "title": "Telephone 3", + "x-ms-dataverse-attribute": "telephone3", + "x-ms-dataverse-type": "StringType", + "maxLength": 50 + }, + "territorycode": { + "type": "string", + "title": "Territory", + "x-ms-dataverse-attribute": "territorycode", + "x-ms-dataverse-type": "PicklistType" + }, + "territorycodename": { + "type": "string", + "title": "territorycodename", + "x-ms-dataverse-attribute": "territorycodename", + "x-ms-dataverse-type": "VirtualType" + }, + "timespentbymeonemailandmeetings": { + "type": "string", + "title": "Time Spent by me", + "x-ms-dataverse-attribute": "timespentbymeonemailandmeetings", + "x-ms-dataverse-type": "StringType", + "maxLength": 1250 + }, + "timezoneruleversionnumber": { + "type": "string", + "title": "Time Zone Rule Version Number", + "x-ms-dataverse-attribute": "timezoneruleversionnumber", + "x-ms-dataverse-type": "IntegerType" + }, + "transactioncurrencyid": { + "type": "string", + "title": "Currency", + "x-ms-dataverse-attribute": "transactioncurrencyid", + "x-ms-dataverse-type": "LookupType" + }, + "transactioncurrencyidname": { + "type": "string", + "title": "transactioncurrencyidname", + "x-ms-dataverse-attribute": "transactioncurrencyidname", + "x-ms-dataverse-type": "StringType", + "maxLength": 100 + }, + "traversedpath": { + "type": "string", + "title": "(Deprecated) Traversed Path", + "x-ms-dataverse-attribute": "traversedpath", + "x-ms-dataverse-type": "StringType", + "maxLength": 1250 + }, + "utcconversiontimezonecode": { + "type": "string", + "title": "UTC Conversion Time Zone Code", + "x-ms-dataverse-attribute": "utcconversiontimezonecode", + "x-ms-dataverse-type": "IntegerType" + }, + "versionnumber": { + "type": "string", + "title": "Version Number", + "x-ms-dataverse-attribute": "versionnumber", + "x-ms-dataverse-type": "BigIntType" + }, + "websiteurl": { + "type": "string", + "title": "Website", + "x-ms-dataverse-attribute": "websiteurl", + "x-ms-dataverse-type": "StringType", + "maxLength": 200 + }, + "yomifirstname": { + "type": "string", + "title": "Yomi First Name", + "x-ms-dataverse-attribute": "yomifirstname", + "x-ms-dataverse-type": "StringType", + "maxLength": 150 + }, + "yomifullname": { + "type": "string", + "title": "Yomi Full Name", + "x-ms-dataverse-attribute": "yomifullname", + "x-ms-dataverse-type": "StringType", + "maxLength": 450 + }, + "yomilastname": { + "type": "string", + "title": "Yomi Last Name", + "x-ms-dataverse-attribute": "yomilastname", + "x-ms-dataverse-type": "StringType", + "maxLength": 150 + }, + "yomimiddlename": { + "type": "string", + "title": "Yomi Middle Name", + "x-ms-dataverse-attribute": "yomimiddlename", + "x-ms-dataverse-type": "StringType", + "maxLength": 150 + } + }, + "required": [ + "contactid", + "lastname", + "ownerid", + "owneridname", + "owneridtype", + "owneridyominame", + "parentcustomeridname", + "parentcustomeridyominame", + "statecode" + ] + } + } +} \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/.power/schemas/office365users/office365users.Schema.json b/samples/DataverseFluentTeamsInspired/.power/schemas/office365users/office365users.Schema.json new file mode 100644 index 0000000..3fe5bfd --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/.power/schemas/office365users/office365users.Schema.json @@ -0,0 +1,2055 @@ +{ + "name": "shared_office365users", + "id": "/providers/Microsoft.PowerApps/apis/shared_office365users", + "type": "Microsoft.PowerApps/apis", + "properties": { + "displayName": "Office 365 Users", + "iconUri": "https://conn-afd-prod-endpoint-bmc9bqahasf3grgk.b01.azurefd.net/v1.0.1751/1.0.1751.4213/office365users/icon.png", + "iconBrandColor": "#eb3c00", + "apiEnvironment": "Shared", + "isCustomApi": false, + "blobUrisAreProxied": false, + "connectionParameters": { + "Token": { + "type": "oauthSetting", + "oAuthSettings": { + "identityProvider": "office365usercertificate", + "clientId": "7ab7862c-4c57-491e-8a45-d52a7e023983", + "scopes": [], + "redirectMode": "GlobalPerConnector", + "redirectUrl": "https://global.consent.azure-apim.net/redirect/office365users", + "properties": { + "IsFirstParty": "True", + "IsOnbehalfofLoginSupported": true + }, + "customParameters": { + "ResourceUri": { + "value": "https://graph.microsoft.com" + }, + "loginUri": { + "value": "https://login.windows.net" + }, + "LoginUriAAD": { + "value": "https://login.windows.net" + } + } + }, + "uiDefinition": { + "displayName": "Log in with Office 365 Credentials", + "description": "Log in with Office 365 Credentials", + "tooltip": "Provide Office 365 Credentials", + "constraints": { + "required": "true" + } + } + }, + "Token:TenantId": { + "type": "string", + "metadata": { + "sourceType": "AzureActiveDirectoryTenant" + }, + "uiDefinition": { + "displayName": "Tenant", + "description": "The tenant ID of for the Microsoft Entra ID application", + "constraints": { + "required": "false", + "hidden": "true" + } + } + } + }, + "swagger": { + "swagger": "2.0", + "info": { + "version": "1.0", + "title": "Office 365 Users", + "description": "Office 365 Users Connection provider lets you access user profiles in your organization using your Office 365 account. You can perform various actions such as get your profile, a user\u0027s profile, a user\u0027s manager or direct reports and also update a user profile.", + "x-ms-api-annotation": { + "status": "Production" + } + }, + "host": "usa002-004.azure-apihub.net", + "basePath": "/apim/office365users", + "schemes": [ + "https" + ], + "produces": [ + "application/json" + ], + "paths": { + "/{connectionId}/codeless/v1.0/me": { + "patch": { + "summary": "Update my profile", + "description": "Updates the profile of the current user", + "operationId": "UpdateMyProfile", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "$ref": "#/definitions/GraphUserUpdateable_V1" + } + } + ], + "responses": { + "default": { + "description": "default" + } + }, + "deprecated": false, + "x-ms-visibility": "advanced", + "x-ms-api-annotation": { + "status": "Production" + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#update-my-profile" + } + }, + "get": { + "summary": "Get my profile (V2)", + "description": "Retrieves the profile of the current user. Learn more about available fields to select: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/user#properties", + "operationId": "MyProfile_V2", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "$select", + "in": "query", + "required": false, + "type": "string", + "description": "Comma separated list of fields to select. Example: surname, department, jobTitle", + "x-ms-summary": "Select fields", + "x-ms-visibility": "advanced" + } + ], + "deprecated": false, + "x-ms-api-annotation": { + "status": "Production", + "family": "MyProfile", + "revision": 2 + }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/GraphUser_V1" + } + } + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-my-profile-(v2)" + } + } + }, + "/{connectionId}/codeless/v1.0/me/photo/$value": { + "put": { + "summary": "Update my profile photo", + "description": "Updates the profile photo of the current user. The size of the photo must be less than 4 MB.", + "operationId": "UpdateMyPhoto", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "string", + "format": "binary" + }, + "required": true, + "description": "Image content", + "x-ms-summary": "Image content" + }, + { + "name": "Content-Type", + "in": "header", + "type": "string", + "default": "image/jpeg", + "required": true, + "description": "Image content type (like \u0027image/jpeg\u0027)", + "x-ms-summary": "Content-Type", + "x-ms-visibility": "advanced" + } + ], + "responses": { + "default": { + "description": "default" + } + }, + "deprecated": false, + "x-ms-visibility": "advanced", + "x-ms-api-annotation": { + "status": "Production" + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#update-my-profile-photo" + } + } + }, + "/{connectionId}/codeless/beta/me/insights/trending": { + "get": { + "summary": "Get my trending documents", + "description": "Retrieves the trending documents for the signed in user", + "operationId": "MyTrendingDocuments", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "$filter", + "in": "query", + "required": false, + "type": "string", + "description": "An OData filter to filter the resources selected. Filter selected resources on ResourceVisualization/Type or ResourceVisualization/containerType", + "x-ms-summary": "Filter query" + }, + { + "name": "extractSensitivityLabel", + "in": "query", + "description": "Select if you want to extract Sensitivity label ( \u0022false\u0022, \u0022true\u0022).", + "required": false, + "x-ms-summary": "Extract Sensitivity Label", + "type": "string", + "default": "false", + "enum": [ + "false", + "true" + ] + }, + { + "name": "fetchSensitivityLabelMetadata", + "in": "query", + "required": false, + "description": "A boolean whether to fetch sensitivity label Metadata for associated LabelId.", + "x-ms-summary": "Sensitivity Label Metadata", + "type": "string", + "default": "false", + "enum": [ + "false", + "true" + ] + } + ], + "responses": { + "200": { + "description": "200", + "schema": { + "description": "List of trending documents", + "type": "object", + "properties": { + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/GraphTrending" + }, + "description": "value", + "x-ms-summary": "value" + } + } + } + } + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-my-trending-documents" + } + } + }, + "/{connectionId}/users/{userId}/relevantpeople": { + "get": { + "tags": [ + "People" + ], + "summary": "Get relevant people", + "description": "Get relevant people.", + "operationId": "RelevantPeople", + "consumes": [], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "userId", + "in": "path", + "description": "User principal name or id.", + "required": true, + "x-ms-summary": "User (UPN)", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/LinklessEntityListResponse[List[Person]]" + } + }, + "default": { + "description": "Operation Failed." + } + }, + "deprecated": false, + "x-ms-visibility": "advanced", + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-relevant-people" + } + } + }, + "/{connectionId}/users/me": { + "get": { + "tags": [ + "Users" + ], + "summary": "Get my profile (V1)", + "description": "Retrieves the profile of the current user.", + "operationId": "MyProfile", + "consumes": [], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "responses": { + "202": { + "description": "Operation was successful" + }, + "200": { + "description": "Operation was successful", + "schema": { + "$ref": "#/definitions/User" + } + }, + "400": { + "description": "BadRequest" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Internal Server Error" + }, + "default": { + "description": "Operation Failed." + } + }, + "deprecated": true, + "x-ms-visibility": "advanced", + "x-ms-api-annotation": { + "status": "Production", + "family": "MyProfile", + "revision": 1 + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-my-profile-(v1)-%5bdeprecated%5d" + }, + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + } + ] + } + }, + "/{connectionId}/users/{userId}": { + "get": { + "tags": [ + "Users" + ], + "summary": "Get user profile (V1)", + "description": "Retrieves the profile of a specific user.", + "operationId": "UserProfile", + "consumes": [], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "userId", + "in": "path", + "description": "User principal name or id.", + "required": true, + "x-ms-summary": "User (UPN)", + "type": "string" + } + ], + "responses": { + "202": { + "description": "Operation was successful" + }, + "200": { + "description": "Operation was successful", + "schema": { + "$ref": "#/definitions/User" + } + }, + "400": { + "description": "BadRequest" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Internal Server Error" + }, + "default": { + "description": "Operation Failed." + } + }, + "deprecated": true, + "x-ms-visibility": "advanced", + "x-ms-api-annotation": { + "status": "Production", + "family": "UserProfile", + "revision": 1 + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-user-profile-(v1)-%5bdeprecated%5d" + } + } + }, + "/{connectionId}/users/photo": { + "get": { + "tags": [ + "Users" + ], + "summary": "Get user photo metadata", + "description": "Get user photo metadata.", + "operationId": "UserPhotoMetadata", + "consumes": [], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "userId", + "in": "query", + "description": "User principal name or id.", + "required": true, + "x-ms-summary": "User (UPN)", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/ClientPhotoMetadata" + } + }, + "default": { + "description": "Operation Failed." + } + }, + "deprecated": false, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-user-photo-metadata" + } + } + }, + "/{connectionId}/users/photo/value": { + "get": { + "tags": [ + "Users" + ], + "summary": "Get user photo (V1)", + "description": "Retrieves the photo of the specified user if they have one.", + "operationId": "UserPhoto", + "consumes": [], + "produces": [], + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "userId", + "in": "query", + "description": "User principal name or id.", + "required": true, + "x-ms-summary": "User (UPN)", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string", + "x-ms-media-kind": "image", + "x-ms-summary": "Image file content" + } + }, + "default": { + "description": "Operation Failed." + } + }, + "deprecated": true, + "x-ms-visibility": "advanced", + "x-ms-api-annotation": { + "status": "Production", + "family": "UserPhoto", + "revision": 1 + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-user-photo-(v1)-%5bdeprecated%5d" + } + } + }, + "/{connectionId}/users/{userId}/manager": { + "get": { + "tags": [ + "Users" + ], + "summary": "Get manager (V1)", + "description": "Retrieves the profile of the specified user\u0027s manager.", + "operationId": "Manager", + "consumes": [], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "userId", + "in": "path", + "description": "User principal name or id.", + "required": true, + "x-ms-summary": "User (UPN)", + "type": "string" + } + ], + "responses": { + "202": { + "description": "Operation was successful" + }, + "200": { + "description": "Operation was successful", + "schema": { + "$ref": "#/definitions/User" + } + }, + "400": { + "description": "BadRequest" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Internal Server Error" + }, + "default": { + "description": "Operation Failed." + } + }, + "deprecated": true, + "x-ms-visibility": "advanced", + "x-ms-api-annotation": { + "status": "Production", + "family": "Manager", + "revision": 1 + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-manager-(v1)-%5bdeprecated%5d" + } + } + }, + "/{connectionId}/users/{userId}/directReports": { + "get": { + "tags": [ + "Users" + ], + "summary": "Get direct reports (V1)", + "description": "Retrieves the user profiles of the specified user\u0027s direct reports.", + "operationId": "DirectReports", + "consumes": [], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "userId", + "in": "path", + "description": "User principal name or id.", + "required": true, + "x-ms-summary": "User (UPN)", + "type": "string" + } + ], + "responses": { + "202": { + "description": "Operation was successful" + }, + "200": { + "description": "Operation was successful", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/User" + } + } + }, + "400": { + "description": "BadRequest" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Internal Server Error" + }, + "default": { + "description": "Operation Failed." + } + }, + "deprecated": true, + "x-ms-visibility": "advanced", + "x-ms-api-annotation": { + "status": "Production", + "family": "DirectReports", + "revision": 1 + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-direct-reports-(v1)-%5bdeprecated%5d" + } + } + }, + "/{connectionId}/users": { + "get": { + "tags": [ + "Users" + ], + "summary": "Search for users", + "description": "Retrieves the user profiles that match the search term.", + "operationId": "SearchUser", + "consumes": [], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "searchTerm", + "in": "query", + "description": "Search string (applies to: display name, given name, surname, mail, mail nickname and user principal name).", + "required": false, + "x-ms-summary": "Search term", + "type": "string" + }, + { + "name": "top", + "in": "query", + "description": "Limit on the number of results to return. By default returns all entries.", + "required": false, + "x-ms-summary": "Top", + "x-ms-visibility": "advanced", + "type": "integer", + "format": "int32", + "default": 0 + } + ], + "responses": { + "202": { + "description": "Operation was successful" + }, + "200": { + "description": "Operation was successful", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/User" + } + } + }, + "400": { + "description": "BadRequest" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Internal Server Error" + }, + "default": { + "description": "Operation Failed." + } + }, + "deprecated": true, + "x-ms-visibility": "advanced", + "x-ms-api-annotation": { + "status": "Production", + "family": "SearchUser", + "revision": 1 + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#search-for-users-%5bdeprecated%5d" + } + } + }, + "/{connectionId}/v2/users": { + "get": { + "tags": [ + "Users" + ], + "summary": "Search for users (V2)", + "description": "Retrieves the user profiles that match the search term (V2).", + "operationId": "SearchUserV2", + "consumes": [], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "searchTerm", + "in": "query", + "description": "Search string (applies to: display name, given name, surname, mail, mail nickname and user principal name).", + "required": false, + "x-ms-summary": "Search term", + "type": "string" + }, + { + "name": "top", + "in": "query", + "description": "Limit on the number of results to return. Minimum value is 1. Default value is 1000.", + "required": false, + "x-ms-summary": "Top", + "x-ms-visibility": "advanced", + "type": "integer", + "format": "int32" + }, + { + "name": "isSearchTermRequired", + "in": "query", + "description": "If set to \u0027Yes\u0027 then no user profiles will be returned when the search term is empty. If set to \u0027No\u0027 then no filtering will be applied when the search term is empty.", + "required": false, + "x-ms-summary": "Is search term required", + "x-ms-visibility": "advanced", + "type": "boolean", + "default": true + }, + { + "name": "skipToken", + "in": "query", + "description": "Skip token to get next users.", + "required": false, + "x-ms-summary": "Skip token", + "x-ms-visibility": "internal", + "type": "string" + } + ], + "responses": { + "202": { + "description": "Operation was successful" + }, + "200": { + "description": "Operation was successful", + "schema": { + "$ref": "#/definitions/EntityListResponse[IReadOnlyList[User]]" + } + }, + "400": { + "description": "BadRequest" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Internal Server Error" + }, + "default": { + "description": "Operation Failed." + } + }, + "deprecated": false, + "x-ms-visibility": "advanced", + "x-ms-pageable": { + "nextLinkName": "@odata.nextLink" + }, + "x-ms-api-annotation": { + "status": "Production", + "family": "SearchUser", + "revision": 2 + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#search-for-users-(v2)" + } + } + }, + "/{connectionId}/testconnection": { + "get": { + "tags": [ + "Users" + ], + "summary": "Tests the connection", + "description": "Tests the connection.", + "operationId": "TestConnection", + "consumes": [], + "produces": [], + "responses": { + "200": { + "description": "OK" + }, + "default": { + "description": "Operation Failed." + } + }, + "deprecated": false, + "x-ms-visibility": "internal", + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#tests-the-connection" + }, + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + } + ] + } + }, + "/{connectionId}/codeless/v1.0/users/{id}": { + "get": { + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/GraphUser_V1" + } + } + }, + "summary": "Get user profile (V2)", + "description": "Retrieves the profile of a specific user. Learn more about available fields to select: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/user#properties", + "operationId": "UserProfile_V2", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "User principal name or id.", + "x-ms-summary": "User (UPN)" + }, + { + "name": "$select", + "in": "query", + "required": false, + "type": "string", + "description": "Comma separated list of fields to select. Example: surname, department, jobTitle", + "x-ms-summary": "Select fields", + "x-ms-visibility": "advanced" + } + ], + "deprecated": false, + "x-ms-api-annotation": { + "status": "Production", + "family": "UserProfile", + "revision": 2 + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-user-profile-(v2)" + } + } + }, + "/{connectionId}/codeless/v1.0/users/{id}/manager": { + "get": { + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/GraphUser_V1" + } + } + }, + "summary": "Get manager (V2)", + "description": "Retrieves the profile of the specified user\u0027s manager. Learn more about available fields to select: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/user#properties", + "operationId": "Manager_V2", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "User principal name or id.", + "x-ms-summary": "User (UPN)" + }, + { + "name": "$select", + "in": "query", + "required": false, + "type": "string", + "description": "Comma separated list of fields to select. Example: surname, department, jobTitle", + "x-ms-summary": "Select fields", + "x-ms-visibility": "advanced" + } + ], + "deprecated": false, + "x-ms-api-annotation": { + "status": "Production", + "family": "Manager", + "revision": 2 + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-manager-(v2)" + } + } + }, + "/{connectionId}/codeless/v1.0/users/{id}/directReports": { + "get": { + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "List of direct reports", + "type": "object", + "properties": { + "value": { + "description": "Value", + "type": "array", + "items": { + "$ref": "#/definitions/GraphUser_V1" + } + } + } + } + } + }, + "summary": "Get direct reports (V2)", + "description": "Retrieves the user profiles of the specified user\u0027s direct reports. Learn more about available fields to select: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/user#properties", + "operationId": "DirectReports_V2", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "User principal name or id.", + "x-ms-summary": "User (UPN)" + }, + { + "name": "$select", + "in": "query", + "required": false, + "type": "string", + "description": "Comma separated list of fields to select. Example: surname, department, jobTitle", + "x-ms-summary": "Select fields", + "x-ms-visibility": "advanced" + }, + { + "name": "$top", + "in": "query", + "description": "Limit on the number of results to return. By default returns all entries.", + "required": false, + "x-ms-summary": "Top", + "x-ms-visibility": "advanced", + "type": "integer", + "format": "int32" + } + ], + "deprecated": false, + "x-ms-api-annotation": { + "status": "Production", + "family": "DirectReports", + "revision": 2 + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-direct-reports-(v2)" + } + } + }, + "/{connectionId}/codeless/v1.0/users/{id}/photo/$value": { + "get": { + "summary": "Get user photo (V2)", + "description": "Retrieves the photo of the specified user if they have one", + "operationId": "UserPhoto_V2", + "consumes": [], + "produces": [], + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "User principal name or id.", + "x-ms-summary": "User (UPN)" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string", + "x-ms-media-kind": "image", + "x-ms-summary": "Image file content" + } + } + }, + "deprecated": false, + "x-ms-api-annotation": { + "status": "Production", + "family": "UserPhoto", + "revision": 2 + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-user-photo-(v2)" + } + } + }, + "/{connectionId}/codeless/beta/users/{id}/insights/trending": { + "get": { + "summary": "Get trending documents", + "description": "Retrieves the trending documents for a user", + "operationId": "TrendingDocuments", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "User principal name or id.", + "x-ms-summary": "User (UPN)" + }, + { + "name": "$filter", + "in": "query", + "required": false, + "type": "string", + "description": "An OData filter to filter the resources selected. Filter selected resources on ResourceVisualization/Type or ResourceVisualization/containerType", + "x-ms-summary": "Filter query" + }, + { + "$ref": "#/parameters/extractSensitivityLabel" + }, + { + "$ref": "#/parameters/fetchSensitivityLabelMetadata" + } + ], + "responses": { + "200": { + "description": "200", + "schema": { + "description": "List of trending documents", + "type": "object", + "properties": { + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/GraphTrending" + }, + "description": "value", + "x-ms-summary": "value" + } + } + } + } + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#get-trending-documents" + } + } + }, + "/{connectionId}/codeless/httprequest": { + "post": { + "summary": "Send an HTTP request", + "description": "Construct a Microsoft Graph REST API request to invoke. These segments are supported: 1st segement: /me, /users/\u003CuserId\u003E 2nd segment: messages, mailFolders, events, calendar, calendars, outlook, inferenceClassification. Learn more: https://docs.microsoft.com/en-us/graph/use-the-api.", + "operationId": "HttpRequest", + "consumes": [], + "produces": [], + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "internal" + }, + { + "name": "Uri", + "in": "header", + "description": "The full or relative URI. Example: https://graph.microsoft.com/{version}/{resource}.", + "required": true, + "x-ms-summary": "URI", + "type": "string" + }, + { + "name": "Method", + "in": "header", + "description": "The HTTP method (default is GET).", + "default": "GET", + "enum": [ + "GET", + "POST", + "PUT", + "PATCH", + "DELETE" + ], + "required": true, + "x-ms-summary": "Method", + "type": "string" + }, + { + "name": "Body", + "in": "body", + "description": "The request body content.", + "required": false, + "schema": { + "format": "binary", + "type": "string" + }, + "x-ms-summary": "Body" + }, + { + "name": "ContentType", + "in": "header", + "description": "The content-type header for the body (default is application/json).", + "required": false, + "x-ms-summary": "Content-Type", + "type": "string", + "default": "application/json" + }, + { + "name": "CustomHeader1", + "in": "header", + "description": "Custom header 1. Specify in format: header-name: header-value", + "required": false, + "x-ms-summary": "CustomHeader1", + "type": "string", + "x-ms-visibility": "advanced" + }, + { + "name": "CustomHeader2", + "in": "header", + "description": "Custom header 2. Specify in format: header-name: header-value", + "required": false, + "x-ms-summary": "CustomHeader2", + "type": "string", + "x-ms-visibility": "advanced" + }, + { + "name": "CustomHeader3", + "in": "header", + "description": "Custom header 3. Specify in format: header-name: header-value", + "required": false, + "x-ms-summary": "CustomHeader3", + "type": "string", + "x-ms-visibility": "advanced" + }, + { + "name": "CustomHeader4", + "in": "header", + "description": "Custom header 4. Specify in format: header-name: header-value", + "required": false, + "x-ms-summary": "CustomHeader4", + "type": "string", + "x-ms-visibility": "advanced" + }, + { + "name": "CustomHeader5", + "in": "header", + "description": "Custom header 5. Specify in format: header-name: header-value", + "required": false, + "x-ms-summary": "CustomHeader5", + "type": "string", + "x-ms-visibility": "advanced" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/ObjectWithoutType" + } + }, + "default": { + "description": "Operation Failed." + } + }, + "deprecated": false, + "x-ms-visibility": "important", + "x-ms-api-annotation": { + "status": "Production" + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users/#send-an-http-request" + } + } + } + }, + "definitions": { + "GraphUserUpdateable_V1": { + "description": "Updateable parts of user from Graph API", + "type": "object", + "properties": { + "aboutMe": { + "type": "string", + "description": "About Me", + "x-ms-summary": "About Me" + }, + "birthday": { + "type": "string", + "format": "date-time", + "description": "Birthday", + "x-ms-summary": "Birthday" + }, + "interests": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Interests", + "x-ms-summary": "Interests" + }, + "mySite": { + "type": "string", + "description": "My Site", + "x-ms-summary": "My Site" + }, + "pastProjects": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Past Projects", + "x-ms-summary": "Past Projects" + }, + "schools": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Schools", + "x-ms-summary": "Schools" + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Skills", + "x-ms-summary": "Skills" + } + } + }, + "GraphTrending": { + "description": "Trending documents from Graph API", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of the relationship", + "x-ms-summary": "Id" + }, + "weight": { + "type": "number", + "format": "float", + "description": "Value indicating how much the document is currently trending", + "x-ms-summary": "Weight" + }, + "resourceVisualization": { + "$ref": "#/definitions/resourceVisualization" + }, + "resourceReference": { + "$ref": "#/definitions/resourceReference" + } + } + }, + "resourceVisualization": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "The item\u0027s title text", + "x-ms-summary": "Title" + }, + "type": { + "type": "string", + "description": "The item\u0027s media type (can be used for filtering for a specific file based on a specific type)", + "x-ms-summary": "Type" + }, + "mediaType": { + "type": "string", + "description": "The items media type (can be used for filtering for a specific type of file based on supported IANA Media MIME types)", + "x-ms-summary": "Media type" + }, + "previewImageUrl": { + "type": "string", + "description": "A URL leading to the preview image for the item", + "x-ms-summary": "Preview image URL" + }, + "previewText": { + "type": "string", + "description": "A preview text for the item", + "x-ms-summary": "Preview text" + }, + "containerWebUrl": { + "type": "string", + "description": "A path leading to the folder in which the item is stored", + "x-ms-summary": "Container web URL" + }, + "containerDisplayName": { + "type": "string", + "description": "A string describing where the item is stored", + "x-ms-summary": "Container display name" + }, + "containerType": { + "type": "string", + "description": "Can be used for filtering by the type of container in which the file is stored", + "x-ms-summary": "Container type" + } + }, + "description": "resourceVisualization", + "x-ms-summary": "Resource visualization" + }, + "resourceReference": { + "type": "object", + "properties": { + "webUrl": { + "type": "string", + "description": "A URL leading to the referenced item", + "x-ms-summary": "Web URL" + }, + "id": { + "type": "string", + "description": "The item\u0027s unique identifier", + "x-ms-summary": "Id" + }, + "type": { + "type": "string", + "description": "A string value that can be used to classify the item, such as \u0022microsoft.graph.driveItem\u0022", + "x-ms-summary": "Type" + } + }, + "description": "resourceReference", + "x-ms-summary": "Resource reference" + }, + "LinklessEntityListResponse[List[Person]]": { + "description": "Represents a list from the Graph API", + "type": "object", + "properties": { + "value": { + "description": "Value", + "type": "array", + "items": { + "$ref": "#/definitions/Person" + } + } + } + }, + "Person": { + "description": "Represents a Person", + "type": "object", + "properties": { + "id": { + "description": "A unique identifier for the Person object in the directory", + "type": "string", + "x-ms-summary": "Person id" + }, + "displayName": { + "description": "The person\u0027s display name", + "type": "string", + "x-ms-summary": "Display name" + }, + "givenName": { + "description": "The person\u0027s given name", + "type": "string", + "x-ms-summary": "Given name" + }, + "surname": { + "description": "The person\u0027s surname", + "type": "string", + "x-ms-summary": "Surname" + }, + "birthday": { + "description": "The person\u0027s birthday", + "type": "string", + "x-ms-summary": "Birthday" + }, + "personNotes": { + "description": "Free-form notes that the current user has taken about this person", + "type": "string", + "x-ms-summary": "Person Notes" + }, + "isFavorite": { + "description": "If the current user has flagged this person as a favorite", + "type": "boolean", + "x-ms-summary": "Is Favorite?" + }, + "jobTitle": { + "description": "The person\u0027s job title", + "type": "string", + "x-ms-summary": "Job title" + }, + "companyName": { + "description": "The name of the person\u0027s company", + "type": "string", + "x-ms-summary": "Company name" + }, + "department": { + "description": "The person\u0027s department", + "type": "string", + "x-ms-summary": "Department" + }, + "officeLocation": { + "description": "The location of the person\u0027s office", + "type": "string", + "x-ms-summary": "Office location" + }, + "profession": { + "description": "The person\u0027s profession", + "type": "string", + "x-ms-summary": "Profession" + }, + "userPrincipalName": { + "description": "The user principal name(UPN) of the user.The UPN is an Internet-style login name for the user based on the Internet standard RFC 822. By convention, this should map to the user\u0027s email name.The general format is alias @domain, where domain must be present in the tenant\u0027s collection of verified domains.", + "type": "string", + "x-ms-summary": "User Principal Name (UPN)" + }, + "imAddress": { + "description": "The person\u0027s VOIP SIP address", + "type": "string", + "x-ms-summary": "IM Address" + }, + "scoredEmailAddresses": { + "description": "Collection of the person\u0027s email addresses with a relevance score", + "type": "array", + "items": { + "$ref": "#/definitions/ScoredEmailAddress" + }, + "x-ms-summary": "Scored Email Addresses" + }, + "phones": { + "description": "The person\u0027s phone numbers", + "type": "array", + "items": { + "$ref": "#/definitions/Phone" + }, + "x-ms-summary": "Phones" + } + } + }, + "ScoredEmailAddress": { + "description": "Represents a scored email address", + "type": "object", + "properties": { + "address": { + "description": "The email address", + "type": "string", + "x-ms-summary": "Email Address" + }, + "relevanceScore": { + "format": "double", + "description": "The relevance score of the email address. A relevance score is used as a sort key, in relation to the other returned results. A higher relevance score value corresponds to a more relevant result. Relevance is determined by the user\u0027s communication and collaboration patterns and business relationships.", + "type": "number", + "x-ms-summary": "Relevance Score" + } + } + }, + "Phone": { + "description": "Represents a phone number", + "type": "object", + "properties": { + "number": { + "description": "The phone number", + "type": "string", + "x-ms-summary": "Phone Number" + }, + "type": { + "description": "The type of phone number. Possible values: home, business, mobile, other, assistant, homeFax, businessFax, otherFax, pager, radio.", + "type": "string", + "x-ms-summary": "Phone Type" + } + } + }, + "User": { + "description": "Represents a User object in the directory", + "required": [ + "Id" + ], + "type": "object", + "properties": { + "Id": { + "description": "A unique identifier for the user object in the directory.", + "type": "string", + "x-ms-summary": "User id" + }, + "AccountEnabled": { + "description": "true if the account is enabled; otherwise, false. This property is required when a user is created.", + "type": "boolean", + "x-ms-summary": "Account enabled?" + }, + "BusinessPhones": { + "description": "A list of business phone numbers for the user", + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "x-ms-summary": "Business phones" + }, + "City": { + "description": "The city in which the user is located.", + "type": "string", + "x-ms-summary": "City" + }, + "CompanyName": { + "description": "The name of the company in which the user works.", + "type": "string", + "x-ms-summary": "Company name" + }, + "Country": { + "description": "The country/region in which the user is located; for example, \u0022US\u0022 or \u0022UK\u0022.", + "type": "string", + "x-ms-summary": "Country" + }, + "Department": { + "description": "The name of the department in which the user works.", + "type": "string", + "x-ms-summary": "Department" + }, + "DisplayName": { + "description": "The name displayed in the address book for the user. This is usually the combination of the user\u0027s first name, middle initial and last name. This property is required when a user is created and it cannot be cleared during updates.", + "type": "string", + "x-ms-summary": "Display name" + }, + "GivenName": { + "description": "The given name (first name) of the user.", + "type": "string", + "x-ms-summary": "Given name" + }, + "JobTitle": { + "description": "The user\u2019s job title.", + "type": "string", + "x-ms-summary": "Job title" + }, + "Mail": { + "description": "The SMTP/email address for the user, for example, \u0022jeff@contoso.onmicrosoft.com\u0022. Read-Only.", + "type": "string", + "x-ms-summary": "Email" + }, + "MailNickname": { + "description": "The mail alias for the user. This property must be specified when a user is created.", + "type": "string", + "x-ms-summary": "Nickname" + }, + "mobilePhone": { + "description": "The primary cellular telephone number for the user.", + "type": "string", + "x-ms-visibility": "internal" + }, + "OfficeLocation": { + "description": "The office location in the user\u0027s place of business.", + "type": "string", + "x-ms-summary": "Office location" + }, + "PostalCode": { + "description": "The postal code for the user\u0027s postal address. The postal code is specific to the user\u0027s country/region. In the United States of America, this attribute contains the ZIP code.", + "type": "string", + "x-ms-summary": "Postal code" + }, + "Surname": { + "description": "The user\u0027s surname (family name or last name).", + "type": "string", + "x-ms-summary": "Surname" + }, + "TelephoneNumber": { + "description": "The primary cellular telephone number for the user.", + "type": "string", + "x-ms-summary": "Telephone number" + }, + "UserPrincipalName": { + "description": "The user principal name (UPN) of the user. The UPN is an Internet-style login name for the user based on the Internet standard RFC 822. By convention, this should map to the user\u2019s email name. The general format is alias@domain, where domain must be present in the tenant\u2019s collection of verified domains.", + "type": "string", + "x-ms-summary": "User Principal Name (UPN)" + } + } + }, + "ClientPhotoMetadata": { + "description": "Photo Metadata class", + "type": "object", + "properties": { + "HasPhoto": { + "description": "Has photo", + "type": "boolean", + "x-ms-summary": "Has photo" + }, + "Height": { + "format": "int32", + "description": "Height of photo", + "type": "integer", + "x-ms-summary": "Height" + }, + "Width": { + "format": "int32", + "description": "Width of photo", + "type": "integer", + "x-ms-summary": "Width" + }, + "ContentType": { + "description": "Content Type of photo", + "type": "string", + "x-ms-summary": "ContentType" + }, + "ImageFileExtension": { + "description": "File extension for the photo (ex: \u0022.jpg\u0022)", + "type": "string", + "readOnly": true, + "x-ms-summary": "Image File Extension" + } + } + }, + "Object": { + "type": "object", + "properties": {} + }, + "EntityListResponse[IReadOnlyList[User]]": { + "description": "Class representing entity list response from an Office API.", + "type": "object", + "properties": { + "value": { + "description": "Value", + "type": "array", + "items": { + "$ref": "#/definitions/User" + } + }, + "@odata.nextLink": { + "description": "Next page link", + "type": "string" + } + } + }, + "GraphUser_V1": { + "description": "User from Graph API", + "type": "object", + "properties": { + "aboutMe": { + "description": "About Me", + "type": "string", + "x-ms-summary": "About Me" + }, + "accountEnabled": { + "description": "true if the account is enabled; otherwise, false. This property is required when a user is created.", + "type": "boolean", + "x-ms-summary": "Account enabled?" + }, + "birthday": { + "description": "Birthday", + "type": "string", + "format": "date-time", + "x-ms-summary": "Birthday" + }, + "businessPhones": { + "description": "Business Phones", + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Business Phones" + }, + "city": { + "description": "The city in which the user is located.", + "type": "string", + "x-ms-summary": "City" + }, + "companyName": { + "description": "The name of the company in which the user works.", + "type": "string", + "x-ms-summary": "Company name" + }, + "country": { + "description": "The country/region in which the user is located; for example, \u0022US\u0022 or \u0022UK\u0022.", + "type": "string", + "x-ms-summary": "Country" + }, + "department": { + "description": "The name of the department in which the user works.", + "type": "string", + "x-ms-summary": "Department" + }, + "displayName": { + "description": "Display Name", + "type": "string", + "x-ms-summary": "Display Name" + }, + "givenName": { + "description": "Given Name", + "type": "string", + "x-ms-summary": "Given Name" + }, + "hireDate": { + "type": "string", + "format": "date-time", + "description": "Hire Date", + "x-ms-summary": "Hire Date" + }, + "id": { + "description": "Id", + "type": "string", + "x-ms-summary": "Id" + }, + "interests": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Interests", + "x-ms-summary": "Interests" + }, + "jobTitle": { + "description": "Job Title", + "type": "string", + "x-ms-summary": "Job Title" + }, + "mail": { + "description": "Mail", + "type": "string", + "x-ms-summary": "Mail" + }, + "mailNickname": { + "description": "The mail alias for the user. This property must be specified when a user is created.", + "type": "string", + "x-ms-summary": "Nickname" + }, + "mobilePhone": { + "description": "Mobile Phone", + "type": "string", + "x-ms-summary": "Mobile Phone" + }, + "mySite": { + "type": "string", + "description": "My Site", + "x-ms-summary": "My Site" + }, + "officeLocation": { + "description": "Office Location", + "type": "string", + "x-ms-summary": "Office Location" + }, + "pastProjects": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Past Projects", + "x-ms-summary": "Past Projects" + }, + "postalCode": { + "description": "The postal code for the user\u0027s postal address. The postal code is specific to the user\u0027s country/region. In the United States of America, this attribute contains the ZIP code.", + "type": "string", + "x-ms-summary": "Postal code" + }, + "preferredLanguage": { + "description": "Preferred Language", + "type": "string", + "x-ms-summary": "Preferred Language" + }, + "preferredName": { + "type": "string", + "description": "Preferred Name", + "x-ms-summary": "Preferred Name" + }, + "responsibilities": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Responsibilities", + "x-ms-summary": "Responsibilities" + }, + "schools": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Schools", + "x-ms-summary": "Schools" + }, + "skills": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Skills", + "x-ms-summary": "Skills" + }, + "state": { + "type": "string", + "description": "State", + "x-ms-summary": "State" + }, + "streetAddress": { + "type": "string", + "description": "Street Address", + "x-ms-summary": "Street Address" + }, + "surname": { + "description": "Surname", + "type": "string", + "x-ms-summary": "Surname" + }, + "userPrincipalName": { + "description": "User Principal Name", + "type": "string", + "x-ms-summary": "User Principal Name" + }, + "userType": { + "type": "string", + "description": "User Type", + "x-ms-summary": "User Type" + } + } + }, + "ObjectWithoutType": {} + }, + "securityDefinitions": { + "oauth2_auth": { + "type": "oauth2", + "flow": "accessCode", + "authorizationUrl": "https://login.windows.net/common/oauth2/authorize", + "tokenUrl": "https://login.windows.net/common/oauth2/authorize", + "scopes": { + "Sites.Read.All User.ReadBasic.All User.ReadWrite": "Sites.Read.All User.ReadBasic.All User.ReadWrite" + } + } + }, + "security": [ + { + "oauth2_auth": [ + "Sites.Read.All User.ReadBasic.All User.ReadWrite" + ] + } + ], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.office.com/" + } + ], + "x-ms-capabilities": { + "testConnection": { + "operationId": "TestConnection", + "parameters": {} + } + }, + "parameters": { + "extractSensitivityLabel": { + "name": "extractSensitivityLabel", + "in": "query", + "description": "Select if you want to extract Sensitivity label ( \u0022false\u0022, \u0022true\u0022).", + "required": false, + "x-ms-summary": "Extract Sensitivity Label", + "type": "string", + "default": "false", + "enum": [ + "false", + "true" + ] + }, + "fetchSensitivityLabelMetadata": { + "name": "fetchSensitivityLabelMetadata", + "in": "query", + "required": false, + "description": "A boolean whether to fetch sensitivity label Metadata for associated LabelId.", + "x-ms-summary": "Sensitivity Label Metadata", + "type": "string", + "default": "false", + "enum": [ + "false", + "true" + ] + } + }, + "externalDocs": { + "url": "https://docs.microsoft.com/connectors/office365users" + } + }, + "wadlUrl": "https://pafeblobprodcy.blob.core.windows.net/apiwadls-14f3bf5a-bd4f-4830-95e5-9912bc3ee986/shared%3A2Doffice365users?skoid=1b4c3c9e-b403-4e0f-9933-e50756645683\u0026sktid=975f013f-7f24-47e8-a7d3-abc4752bf346\u0026skt=2025-08-06T14%3A00%3A00Z\u0026ske=2025-08-13T14%3A00%3A00Z\u0026sks=b\u0026skv=2025-01-05\u0026sv=2025-01-05\u0026spr=https\u0026st=2025-08-06T14%3A27%3A15Z\u0026se=2025-08-07T02%3A28%3A15Z\u0026sr=c\u0026sp=rl\u0026scid=11382d1f-5c0c-446a-b1c1-18aab888b16c\u0026sig=6gqshuIaHvBYIMxB5UH2P6k%2BIHCHmrWMjmyOOzEaOC8%3D", + "runtimeUrls": [ + "https://c65e3148-8866-ec07-b22b-0ff9a71b8616.12.common.usa002.azure-apihub.net/apim/office365users" + ], + "primaryRuntimeUrl": "https://c65e3148-8866-ec07-b22b-0ff9a71b8616.12.common.usa002.azure-apihub.net/apim/office365users", + "doNotUseApiHubNetRuntimeUrl": "https://c65e3148-8866-ec07-b22b-0ff9a71b8616.12.common.usa002.azure-apihub.net/apim/office365users", + "metadata": { + "source": "marketplace", + "brandColor": "#eb3c00", + "useNewApimVersion": "true", + "version": { + "previous": "releases/v1.0.1746\\1.0.1746.4174", + "current": "v1.0.1751\\1.0.1751.4213" + } + }, + "capabilities": [ + "actions" + ], + "interfaces": {}, + "description": "Office 365 Users Connection provider lets you access user profiles in your organization using your Office 365 account. You can perform various actions such as get your profile, a user\u0027s profile, a user\u0027s manager or direct reports and also update a user profile.", + "createdTime": "2024-03-26T19:22:24.6319451Z", + "changedTime": "2025-05-08T16:29:50.8889201Z", + "releaseTag": "Production", + "tier": "Standard", + "publisher": "Microsoft", + "scopes": { + "will": [ + "Read your full user profile", + "Read the full profile of all users" + ], + "wont": [ + "Modify or delete any user-profile information" + ] + }, + "rateLimit": 0, + "apiVersion": "None" + } +} \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/README.md b/samples/DataverseFluentTeamsInspired/README.md new file mode 100644 index 0000000..6d78099 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/README.md @@ -0,0 +1,71 @@ +# Code App Dataverse (React + Vite) + +Power Platform “code app” built with React + TypeScript + Vite and Fluent UI v9. Look and feel inspired by Microsoft Teams. It integrates with: + +- Dataverse tables (contacts, accounts) +- Office 365 Users connector (profile/photo) + +## Prerequisites + +- Node.js LTS (v18+ recommended) +- Power Platform CLI (pac) +- Optional: Power Platform Tools for VS Code + +## Get started + +Follow these steps the first time you clone the repo so the app is created in YOUR target environment. + +1. Install dependencies (use legacy peer deps to avoid conflicts): + +```powershell +npm install --legacy-peer-deps +``` + +1. Sign in & select environment: + +```powershell +pac auth who # shows current authenticated user & default environment +pac auth create # run only if you are not signed in yet +pac env list # list available environments (Name, Environment ID) +pac env select --environment +pac auth who # verify the correct environment is now active +``` + +1. Configure `power.config.json`: + +- Ensure `appId` is an empty string: `"appId": ""` (blank forces creation of a new app record on first push) +- Set `environmentId` to the GUID of the environment you just selected (from `pac env list` output) +- Replace the `instanceUrl` under `databaseReferences.default.cds.instanceUrl` with YOUR Dataverse org URL (e.g. `https://.crm.dynamics.com/`) so it matches the environment you selected. +- Leave the remaining values as-is for now + +1. Build the app (required before first push so the dist folder exists): + +```powershell +npm run build +``` + +1. Push the app to create/register it in the environment (this will assign a new `appId` automatically): + +```powershell +pac code push +``` + + After a successful push you can (optionally) copy the generated `appId` back into `power.config.json` if the CLI does not update it automatically. + +1. Run locally (starts the Local Player runtime + Vite dev server): + +```powershell +npm run dev +``` + +If you change the target environment later, blank out `appId` again and update `environmentId`, then run `pac code push` before using `npm run dev`. + +## Build + +```powershell +npm run build +``` + +## Troubleshooting + +- Install issues: always use `npm install --legacy-peer-deps` in this repo. diff --git a/samples/DataverseFluentTeamsInspired/eslint.config.js b/samples/DataverseFluentTeamsInspired/eslint.config.js new file mode 100644 index 0000000..d94e7de --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { globalIgnores } from 'eslint/config' + +export default tseslint.config([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/samples/DataverseFluentTeamsInspired/index.html b/samples/DataverseFluentTeamsInspired/index.html new file mode 100644 index 0000000..e4b78ea --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/samples/DataverseFluentTeamsInspired/package-lock.json b/samples/DataverseFluentTeamsInspired/package-lock.json new file mode 100644 index 0000000..5324892 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/package-lock.json @@ -0,0 +1,5197 @@ +{ + "name": "code-app-dataverse", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "code-app-dataverse", + "version": "0.0.0", + "dependencies": { + "@fluentui/react-components": "^9.68.2", + "@fluentui/react-icons": "^2.0.282", + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@eslint/js": "^9.30.1", + "@pa-client/power-code-sdk": "https://github.com/microsoft/PowerAppsCodeApps/releases/download/v0.0.4/7-31-pa-client-power-code-sdk-0.0.1.tgz", + "@types/node": "^24.2.0", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.6.0", + "eslint": "^9.30.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.35.1", + "vite": "^7.0.4" + } + }, + "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, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.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/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", + "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", + "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/devtools": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/devtools/-/devtools-0.2.1.tgz", + "integrity": "sha512-8PHJLbD6VhBh+LJ1uty/Bz30qs02NXCE5u8WpOhSewlYXUWl03GNXknr9AS2yaAWJEQaY27x7eByJs44gODBcw==", + "peerDependencies": { + "@floating-ui/dom": ">=1.5.4" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.3.tgz", + "integrity": "sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@fluentui/keyboard-keys": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.8.tgz", + "integrity": "sha512-iUSJUUHAyTosnXK8O2Ilbfxma+ZyZPMua5vB028Ys96z80v+LFwntoehlFsdH3rMuPsA8GaC1RE7LMezwPBPdw==", + "license": "MIT", + "dependencies": { + "@swc/helpers": "^0.5.1" + } + }, + "node_modules/@fluentui/priority-overflow": { + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.1.15.tgz", + "integrity": "sha512-/3jPBBq64hRdA416grVj+ZeMBUIaKZk2S5HiRg7CKCAV1JuyF84Do0rQI6ns8Vb9XOGuc4kurMcL/UEftoEVrg==", + "license": "MIT", + "dependencies": { + "@swc/helpers": "^0.5.1" + } + }, + "node_modules/@fluentui/react-accordion": { + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.8.4.tgz", + "integrity": "sha512-VLWQgnH651e+3qfajoagsIYu4LoznP+5LtEXakgKUUDWnNMxM/PVg2/zuBNjm1o8p6lW4jkXAOgCsFzF/Wl/Hg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-motion": "^9.10.2", + "@fluentui/react-motion-components-preview": "^0.8.2", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-alert": { + "version": "9.0.0-beta.124", + "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.124.tgz", + "integrity": "sha512-yFBo3B5H9hnoaXxlkuz8wRz04DEyQ+ElYA/p5p+Vojf19Zuta8DmFZZ6JtWdtxcdnnQ4LvAfC5OYYlzdReozPA==", + "license": "MIT", + "dependencies": { + "@fluentui/react-avatar": "^9.6.29", + "@fluentui/react-button": "^9.3.83", + "@fluentui/react-icons": "^2.0.239", + "@fluentui/react-jsx-runtime": "^9.0.39", + "@fluentui/react-tabster": "^9.21.5", + "@fluentui/react-theme": "^9.1.19", + "@fluentui/react-utilities": "^9.18.10", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-aria": { + "version": "9.16.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.16.3.tgz", + "integrity": "sha512-M5jHqcedz6+iJwNFYVXBbqHJdCAjBwdb6G1sNLaTbanO/AC5igl0t9v0QXcA/vP9+D0L0tTOLiSjW5SyJuzzAQ==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-utilities": "^9.23.2", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-avatar": { + "version": "9.9.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.9.4.tgz", + "integrity": "sha512-QUUpCtJ86dQuZ5XScjxxb0+K6rPhkNm0H73f+art2+Yjyrfj637rxbKTEt+Gg8JvPAG9y3uECJTrekBW29FHyw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-badge": "^9.4.3", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-popover": "^9.12.4", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-tooltip": "^9.8.3", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-badge": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.4.3.tgz", + "integrity": "sha512-c5sgFcyN4+VxTkXKQSezYCYUasqB1fKYAmpOL3uDowm5CyUcysx/0WO24u18AttcdmRsKrAuQBWi6eEaRYXIxg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-breadcrumb": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.3.4.tgz", + "integrity": "sha512-ND1F+5LSVT6gfeUN4q0SooCWFq9IBVUdfLDrsdIU3KHyW/cQC7W/maabw/jqUSEfBl+SkGs+G3UkeaPJIdu9Ig==", + "license": "MIT", + "dependencies": { + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-button": "^9.6.4", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-link": "^9.6.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-button": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.6.4.tgz", + "integrity": "sha512-IbRBmGFdo3MKiVMoreOR2YJSjvrKBbRJpmfjNxQQufjE4Q9ouhli7fpX/1SPKbEgnS1EvKnmwxy/6HUNp6srSQ==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-card": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.4.4.tgz", + "integrity": "sha512-qwbxyvYIV30Hmrs4eyCfdHDhdpL0EQhDPXPLH7C3Ad/PNI1E8u4P4Wzu3eiRJqESXqzZKVlxko9ngZHHpy/mpg==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-text": "^9.6.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-carousel": { + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.8.4.tgz", + "integrity": "sha512-6Qi0M42ceqodOJUMfqZmwJZBeHlA93SDIwC7b7Wqprrgl77KMa4j0d+Iy7kF1p/DtW/TK19RjshWYpd77OWOUg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-button": "^9.6.4", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-tooltip": "^9.8.3", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1", + "embla-carousel": "^8.5.1", + "embla-carousel-autoplay": "^8.5.1", + "embla-carousel-fade": "^8.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-checkbox": { + "version": "9.5.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.5.3.tgz", + "integrity": "sha512-CrGwo5BuO1JUOY7eKtDP/8P+WwvvVjYUoMvIKb4uBez+Vp5utseSeecGiWVmWk4q7Ao6yDaGkf7Lif0A9BexGw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-label": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-color-picker": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-color-picker/-/react-color-picker-9.2.3.tgz", + "integrity": "sha512-fEx+xDPlJleQWPd+9u4qcRX4eqUOk8VKxxOm0wIO7r2WrvqUJsPojXJlwyAIMXMcJlIfy6TCaqJ9ZIUMd7NO/Q==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.3.4", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-combobox": { + "version": "9.16.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.16.4.tgz", + "integrity": "sha512-V+JKfaiAQwgI6N6WgAaKjUI1uyFVJbWFqA754pq+mQ3pxF+0kIEZPyqUauEua4EHgm8/ZRgai1WqLo/lY6uBAQ==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-portal": "^9.8.0", + "@fluentui/react-positioning": "^9.20.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-components": { + "version": "9.68.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.68.3.tgz", + "integrity": "sha512-baVsbfRTeVxtYTryLgSePmNRUqz+7OUsF5CsgOtZ6n5F0ZQLElTMVuECyZEYrccV8o6XSBCWwUEVMHdoifdyxw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-accordion": "^9.8.4", + "@fluentui/react-alert": "9.0.0-beta.124", + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-avatar": "^9.9.4", + "@fluentui/react-badge": "^9.4.3", + "@fluentui/react-breadcrumb": "^9.3.4", + "@fluentui/react-button": "^9.6.4", + "@fluentui/react-card": "^9.4.4", + "@fluentui/react-carousel": "^9.8.4", + "@fluentui/react-checkbox": "^9.5.3", + "@fluentui/react-color-picker": "^9.2.3", + "@fluentui/react-combobox": "^9.16.4", + "@fluentui/react-dialog": "^9.14.4", + "@fluentui/react-divider": "^9.4.3", + "@fluentui/react-drawer": "^9.9.4", + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-image": "^9.3.3", + "@fluentui/react-infobutton": "9.0.0-beta.102", + "@fluentui/react-infolabel": "^9.4.4", + "@fluentui/react-input": "^9.7.3", + "@fluentui/react-label": "^9.3.3", + "@fluentui/react-link": "^9.6.3", + "@fluentui/react-list": "^9.4.2", + "@fluentui/react-menu": "^9.19.4", + "@fluentui/react-message-bar": "^9.6.4", + "@fluentui/react-motion": "^9.10.2", + "@fluentui/react-nav": "^9.3.4", + "@fluentui/react-overflow": "^9.5.4", + "@fluentui/react-persona": "^9.5.4", + "@fluentui/react-popover": "^9.12.4", + "@fluentui/react-portal": "^9.8.0", + "@fluentui/react-positioning": "^9.20.3", + "@fluentui/react-progress": "^9.4.3", + "@fluentui/react-provider": "^9.22.3", + "@fluentui/react-radio": "^9.5.3", + "@fluentui/react-rating": "^9.3.3", + "@fluentui/react-search": "^9.3.3", + "@fluentui/react-select": "^9.4.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-skeleton": "^9.4.3", + "@fluentui/react-slider": "^9.5.3", + "@fluentui/react-spinbutton": "^9.5.3", + "@fluentui/react-spinner": "^9.7.3", + "@fluentui/react-swatch-picker": "^9.4.3", + "@fluentui/react-switch": "^9.4.3", + "@fluentui/react-table": "^9.18.4", + "@fluentui/react-tabs": "^9.9.3", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-tag-picker": "^9.7.4", + "@fluentui/react-tags": "^9.7.4", + "@fluentui/react-teaching-popover": "^9.6.4", + "@fluentui/react-text": "^9.6.3", + "@fluentui/react-textarea": "^9.6.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-toast": "^9.6.4", + "@fluentui/react-toolbar": "^9.6.4", + "@fluentui/react-tooltip": "^9.8.3", + "@fluentui/react-tree": "^9.12.4", + "@fluentui/react-utilities": "^9.23.2", + "@fluentui/react-virtualizer": "9.0.0-alpha.102", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-context-selector": { + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.2.5.tgz", + "integrity": "sha512-rHB5j6k7181klVKMaoEAqXQ9FOPiXqP+44KfgmIbnA9Mu4FXenyDkH6rQ32Hrb4/DyL7J3CB955QYqfbAVZeQA==", + "license": "MIT", + "dependencies": { + "@fluentui/react-utilities": "^9.23.2", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", + "scheduler": ">=0.19.0 <=0.23.0" + } + }, + "node_modules/@fluentui/react-dialog": { + "version": "9.14.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.14.4.tgz", + "integrity": "sha512-4Q7Z+tyIpWADz8ATeow28eqljlMocY7GdjEOuH2IaXvIVTOeDWEhIj6Fd+8uBMYmIm5XFgAiQcRT91eAnnVL5w==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-motion": "^9.10.2", + "@fluentui/react-motion-components-preview": "^0.8.2", + "@fluentui/react-portal": "^9.8.0", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-divider": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.4.3.tgz", + "integrity": "sha512-CjOGmh0hWngO0cHiORgqvEcJ5kRSrvX6w+5VU3tpox3Zljy94pYRZAohJmMwjcxKunyf1agSiWbT+SVV6JSD7w==", + "license": "MIT", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-drawer": { + "version": "9.9.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.9.4.tgz", + "integrity": "sha512-cfYJbWIgpXGYwGmU5SLkSE6KOl854A+/De5oOqL+bh0x8suSynvlakQz78kgHTvG4g+9f13diVvG+EHelZpDCQ==", + "license": "MIT", + "dependencies": { + "@fluentui/react-dialog": "^9.14.4", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-motion": "^9.10.2", + "@fluentui/react-portal": "^9.8.0", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-field": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.4.3.tgz", + "integrity": "sha512-JXDYGa8oH6AUkt+2ByCCP2/ie4gX+kfGcgOSwb3d1FZu0qs/ryHLQowezwyLIPJKG5jruqYm5+YPdgg+P3+Sbg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-label": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-icons": { + "version": "2.0.307", + "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.307.tgz", + "integrity": "sha512-HSXrzQ6o+RWPnNy68EJN2M/Dh9LAJ8l5U9zWfwaFWDgktMF7dJxItyckA5BsH6inFisi6cqKtazsq9oZdAj32A==", + "license": "MIT", + "dependencies": { + "@griffel/react": "^1.0.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-image": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.3.3.tgz", + "integrity": "sha512-3gpJzHMz5NiAjrgNKzFV12JrGaV9ytYK4wygICCVj4nJraQi82kz8i+u2aH6mmE969GLd7DYDoL4PjqHvp4lMQ==", + "license": "MIT", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-infobutton": { + "version": "9.0.0-beta.102", + "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.102.tgz", + "integrity": "sha512-3kA4F0Vga8Ds6JGlBajLCCDOo/LmPuS786Wg7ui4ZTDYVIMzy1yp2XuVcZniifBFvEp0HQCUoDPWUV0VI3FfzQ==", + "license": "MIT", + "dependencies": { + "@fluentui/react-icons": "^2.0.237", + "@fluentui/react-jsx-runtime": "^9.0.36", + "@fluentui/react-label": "^9.1.68", + "@fluentui/react-popover": "^9.9.6", + "@fluentui/react-tabster": "^9.21.0", + "@fluentui/react-theme": "^9.1.19", + "@fluentui/react-utilities": "^9.18.7", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-infolabel": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.4.4.tgz", + "integrity": "sha512-gr00rSUgi3qLCcRoa2E1gMacyWiN5+rKjjhLpxOXA1hQw36CsLqqVfzlhLFNeeYWzCWS64r+Q215+eO83FXphw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-label": "^9.3.3", + "@fluentui/react-popover": "^9.12.4", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-input": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.7.3.tgz", + "integrity": "sha512-Dsu2eFat2EBMLwozzkY3S3fixhDgJUWlh0rzLExb2rlY3+kO9q1C7YdwZkh3MUCp0KN9y+3F7zJWKFdjaEzKzg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-jsx-runtime": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.1.5.tgz", + "integrity": "sha512-etBvll043KjJTeK4Cchmnh+b4z5pOyC+Y/IHEPOllxWJmUGSsPVsBgNNAFPbxkcBxcZ1YCLSSL8/jef1Sr/6Fg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-utilities": "^9.23.2", + "@swc/helpers": "^0.5.1", + "react-is": "^17.0.2" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-label": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.3.3.tgz", + "integrity": "sha512-4fUwrluhhBYB/UROhDsorsxjKzV1Nrkf986bh2ggEqCpWmiGOkGIcavDPNsHSz5Gu7aNG5rvmDnLMgBohcmLyw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-link": { + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.6.3.tgz", + "integrity": "sha512-uuJMPPrX1Su5+OUr0GXIKdXR0J1EDHH1GV6RLSlnVW2jC3y59ndh+TKnma+jgTyK19si8UKLjLSfM4tAUsKT+A==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-list": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-list/-/react-list-9.4.2.tgz", + "integrity": "sha512-/4QbChGBqwG5kBXTSii+v9YHGmsnZ3aHcbc2+KDMhDdDIpZ8UwbF/FIM3UiwwC5qTOcQMkUSHiO7b19RHZNYXA==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-checkbox": "^9.5.3", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-menu": { + "version": "9.19.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.19.4.tgz", + "integrity": "sha512-EFQXHOy2uF6V9CQiCRXiTiWT/+5EByzKh3sOxRG53mRImy0QgfsEiyiK031wTxPk6rkwkJmjfpa03X7WzzlhFA==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-portal": "^9.8.0", + "@fluentui/react-positioning": "^9.20.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-message-bar": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.6.4.tgz", + "integrity": "sha512-WtN/hoFRhaBQlUi6znfMClxhnAKqBU93mNCJ/B+A5TxfvycszYdwOgP+Q8tvEHkuZLWhyxAeGgcoTRL1KfqqCQ==", + "license": "MIT", + "dependencies": { + "@fluentui/react-button": "^9.6.4", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-link": "^9.6.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1", + "react-transition-group": "^4.4.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-motion": { + "version": "9.10.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.10.2.tgz", + "integrity": "sha512-DIWvYdpJQwVvBdoDNUPlg23sBgiPeb7Ai2sz5wV4TwW3Fq1Hkc74FJaUIe5q+oq1DcU1+U13QmmwiEs/sQyfHQ==", + "license": "MIT", + "dependencies": { + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-utilities": "^9.23.2", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-motion-components-preview": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.8.2.tgz", + "integrity": "sha512-JAmpEwaI6EoyDynFTyPc7f4jG+Yq4JZoA5MS88mCNFA8HmivD9gMdkf7EiFLj2TBYKHXAw4TMO5aHq15inD3Rg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-motion": "*", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-nav": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-nav/-/react-nav-9.3.4.tgz", + "integrity": "sha512-xRjEnFhsOWIhe4Pk12i0qS+ghkVYEN1rsQLfwYno03jbkbxdWgVh9snTFMFuv2tkaCMW86HT0+QJ+lZ3DPAbyw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-button": "^9.6.4", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-divider": "^9.4.3", + "@fluentui/react-drawer": "^9.9.4", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-motion": "^9.10.2", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-tooltip": "^9.8.3", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-overflow": { + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.5.4.tgz", + "integrity": "sha512-BRZwNez7jtxlg26yKSziOViZg6jNdVQtxtAtaPVduuZ9cVsfaXmZXQKzNx7fhzbMQKPzStv6Iigj9NgACy9icA==", + "license": "MIT", + "dependencies": { + "@fluentui/priority-overflow": "^9.1.15", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-persona": { + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.5.4.tgz", + "integrity": "sha512-ya1jQX5JztEVxmOAkF0nhO1+hC9aHuYjZG0xGSPZB04GQnBBWNr6+/PX0Zy2MOrXcPHf50jiOzVibOVELWX8ZQ==", + "license": "MIT", + "dependencies": { + "@fluentui/react-avatar": "^9.9.4", + "@fluentui/react-badge": "^9.4.3", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-popover": { + "version": "9.12.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.12.4.tgz", + "integrity": "sha512-5O0gWCOmz0ShRVzPEbQ19KkdF9MaPpu9ygK6VuHdajXNuzXrLsr2WpbJKIg4an2781JTLzuxIlLa6u6KhDAEMQ==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-portal": "^9.8.0", + "@fluentui/react-positioning": "^9.20.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-portal": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.8.0.tgz", + "integrity": "sha512-t2Y9sV3jqvlzFrPWGFr/6iHmDHdQKAj6Ho6RUxtrGWQoHggB9mqz3JO72JoXaeHRlc9te3HXNQUiKMjFwFvTMQ==", + "license": "MIT", + "dependencies": { + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-positioning": { + "version": "9.20.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.20.3.tgz", + "integrity": "sha512-h94K/Jer230ljaN6yAslNHARm5iFsIRJLkHgKZQjiQjXbnvgNAyNNDa85HJTVq1r7pD6cgkysPYY8JPM/Qj5Rg==", + "license": "MIT", + "dependencies": { + "@floating-ui/devtools": "0.2.1", + "@floating-ui/dom": "^1.6.12", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-progress": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.4.3.tgz", + "integrity": "sha512-sJ2rWF5rx86Q0EHwo2jRspcjy+2uYyDfF/JhntVOu39ujonTLjmlCEB21wBSxzDqx4ObuhILWPQdtmgoOvZKnw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-provider": { + "version": "9.22.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.22.3.tgz", + "integrity": "sha512-32wAi8YxHATBo0jf0JtOOvXU1OGW2yqgq89OOozEHc88B1iwq9gG/Xj8kWfjZca7n7QWl1w/dKdYMk6hUwv9+Q==", + "license": "MIT", + "dependencies": { + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/core": "^1.16.0", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-radio": { + "version": "9.5.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.5.3.tgz", + "integrity": "sha512-C8A4OM2x/MO/U+95GYp/Bmgbmp6ZdjSgHs3YX5v7Vxef3dAl0vf2SprOPpOIY7fng5oB+alXPa/Pz49I6cVaIg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-label": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-rating": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.3.3.tgz", + "integrity": "sha512-ShJaYeVsLljq/XbTZpF3EnddBfFXUT3MFhnGF1vUfOceWVLHfNgwJ0l9spaqrnC3+TqEKZu2RBP86jwuMw3XUg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-search": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.3.3.tgz", + "integrity": "sha512-CA2+Re9dNemfYMDeys3dAtxVcsoJkstA6LC8C7j1UGikehK3hfYpkmIBC8CHg5y7NvAW7E9iiZ0nUQ8aZtiQpQ==", + "license": "MIT", + "dependencies": { + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-input": "^9.7.3", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-select": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.4.3.tgz", + "integrity": "sha512-c5xZV427qRro+XFuN/8L/jvOpBbrFnX7TsIxOBHPzm4fv2a8DJbY6xah7ELy3nxnO3N6GAY1vhqyY1Bjgn745w==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-shared-contexts": { + "version": "9.24.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.24.1.tgz", + "integrity": "sha512-gQmynczh226aiPTV8PyzpOlSX0QTOZt0DG7ok/Q53DLWqBkRqsmfMHCEKZcDnjnemizu1IzB01NiXjXtk3WKzQ==", + "license": "MIT", + "dependencies": { + "@fluentui/react-theme": "^9.2.0", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-skeleton": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.4.3.tgz", + "integrity": "sha512-SuwIMlZvbsP3IXHOKTf6FIuDbRqk8NEpB4XFGvkCb1Im2UJ0ofXWuce6gyFr+Z7uYUz0sGzuFwlqq2eoHad/cw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-slider": { + "version": "9.5.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.5.3.tgz", + "integrity": "sha512-6pySypFo+DLC0UZrqDt3DYIU7QIcVGtF0DVjkLwRrUyK61fq50VQvGjE3xf2d7QYfuBDmJqAGbOXm4400vJ5kA==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-spinbutton": { + "version": "9.5.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.5.3.tgz", + "integrity": "sha512-agZvrT6cJo1KmmeaySaG3o6ThbWNXdPt1p4XYDH1d/IIKcsJHQUHD6jkYh8vmd/KkzwvqbNZ/Jk18fvvCGk9/w==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-spinner": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.7.3.tgz", + "integrity": "sha512-TnMBI+bCPgjKc53l4bibsTWarX222AY6y38HZWAwW9wjqw4YmxbkO4keDM9ZehtvBz8/m+rUY3Ykz1GGvfV/Og==", + "license": "MIT", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-label": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-swatch-picker": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.4.3.tgz", + "integrity": "sha512-R2x+Lv1V5KBrQc+uQ3QdKFqYB3iVdbg92WkNcOjZeQvfl7ykoe0EOtwCGEFVENLPvaTpSWSWQnaQoGZjmvSTYw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-switch": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.4.3.tgz", + "integrity": "sha512-fvOeb49gnWLVsySyM3tCwX3Vxn74RhQG7sIZVbRKyQ+E0YEI1mBnAYEZKO7u9UWcZeMb3gz+Lr45c3UiQP/dmw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-label": "^9.3.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-table": { + "version": "9.18.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.18.4.tgz", + "integrity": "sha512-6ysCLzsU4OHDJmKGjxWS5Yd8v3dgKjo6iqMNqEDcwASF2K617URODXEA+vXuGpacgvu/TD8l2Xryjz3mjYg8cA==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-avatar": "^9.9.4", + "@fluentui/react-checkbox": "^9.5.3", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-radio": "^9.5.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tabs": { + "version": "9.9.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.9.3.tgz", + "integrity": "sha512-F/+KIDYUlApjG50YF6KJ4HrGxGmB084vaFALiaqt0upHq75K53KSU9R+USHYAf+NzJVjc1Jd30x04YZmXe4IfQ==", + "license": "MIT", + "dependencies": { + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tabster": { + "version": "9.26.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.26.3.tgz", + "integrity": "sha512-7Lq1GiWIYTsr+Y5jDkvn18VrL6ujXO7aNBU6HHvRlRbC7IY0q3l8tHCAlBcS6jZ7ztS+GeK35fN9RyedIE1s4g==", + "license": "MIT", + "dependencies": { + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1", + "keyborg": "^2.6.0", + "tabster": "^8.5.5" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tag-picker": { + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.7.4.tgz", + "integrity": "sha512-Kk51El82xLcywkioXUuxJpZiIUzQUUBim+3NIstJM+SC89VR4D1Gp1l40w/9RO6H29/GBhmXTsvngr2Xvi3tnA==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-combobox": "^9.16.4", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-portal": "^9.8.0", + "@fluentui/react-positioning": "^9.20.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-tags": "^9.7.4", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tags": { + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.7.4.tgz", + "integrity": "sha512-4oyoMzqXyccDeVZA2d5QxOfaTfA+uW89aOmKIzVIe1sNiRiuHN+3y3eeHvsI0QfOER1a/+IMCwryOs3g1zUaWg==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-avatar": "^9.9.4", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-teaching-popover": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.6.4.tgz", + "integrity": "sha512-OLiHXyFufQB4ciCtsYJdQdNnmgxVHkWyddaT9Dj/7hOc0GWqLXTzq/D7ewa0cTjxqgsFNBp8SbzHS0nMoWfG0g==", + "license": "MIT", + "dependencies": { + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-button": "^9.6.4", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-popover": "^9.12.4", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-text": { + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.6.3.tgz", + "integrity": "sha512-wYidjCPCfUBObCESK1v3PkaV9FYZGSB/r00xlLQgpgrKaQeuJgPSmDi45s9onA3T/CtF1CTTDE1+Yp22yH8t4w==", + "license": "MIT", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-textarea": { + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.6.3.tgz", + "integrity": "sha512-j1bgUevTgu/1pFbwfYieDZ53h8V885kjhQLmN/K7YHrZIK0c5LYAA/oc6eATxi3tohGGd0xn9HlxFVLU4Ei8yw==", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.3", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-theme": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.2.0.tgz", + "integrity": "sha512-Q0zp/MY1m5RjlkcwMcjn/PQRT2T+q3bgxuxWbhgaD07V+tLzBhGROvuqbsdg4YWF/IK21zPfLhmGyifhEu0DnQ==", + "license": "MIT", + "dependencies": { + "@fluentui/tokens": "1.0.0-alpha.22", + "@swc/helpers": "^0.5.1" + } + }, + "node_modules/@fluentui/react-toast": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.6.4.tgz", + "integrity": "sha512-uJSXqYK/S+xTBS7u3hvhyRNnQNH9WXwWMcvdqucDC5aE6Ippq/mNDk3J7KKDrnjC8OyWWlHv5nwtkdtTkXxugA==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-motion": "^9.10.2", + "@fluentui/react-motion-components-preview": "^0.8.2", + "@fluentui/react-portal": "^9.8.0", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-toolbar": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.6.4.tgz", + "integrity": "sha512-wiSRzZxfJ5b8wytLqtUEe1PB4092iFWdbPvXh+kHCcpenDActdaGaVX3yCAX34BnEYGPWVoVbi7F5j8SRnBpKg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-button": "^9.6.4", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-divider": "^9.4.3", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-radio": "^9.5.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tooltip": { + "version": "9.8.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.8.3.tgz", + "integrity": "sha512-kuyV5RwK5P84Qe0LdYByqFqEQ3AEHj7zAYg+6uz1IqKgIyscZillfhY3X9vaMrGG+2DOO2JLlkPQ46bhPsz/Zg==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-portal": "^9.8.0", + "@fluentui/react-positioning": "^9.20.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tree": { + "version": "9.12.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.12.4.tgz", + "integrity": "sha512-6kdKupn+yHIrjHCC3SAzVqIzHyHd2mr8y29NEBaDgROrrsmfuVaIuaaG9NhV0cgGf/7nxg04Ab5mTzBfl7uy9g==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-aria": "^9.16.3", + "@fluentui/react-avatar": "^9.9.4", + "@fluentui/react-button": "^9.6.4", + "@fluentui/react-checkbox": "^9.5.3", + "@fluentui/react-context-selector": "^9.2.5", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.1.5", + "@fluentui/react-motion": "^9.10.2", + "@fluentui/react-motion-components-preview": "^0.8.2", + "@fluentui/react-radio": "^9.5.3", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-tabster": "^9.26.3", + "@fluentui/react-theme": "^9.2.0", + "@fluentui/react-utilities": "^9.23.2", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-utilities": { + "version": "9.23.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.23.2.tgz", + "integrity": "sha512-ke2Ey3wz8UpCmL2WtxJQlWtT9XSe8aTXSi8kMJjwlu4uxhfq9LavVNMM/bs+CavB7fwyxtIH3ceAkVK6a4uTVQ==", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-shared-contexts": "^9.24.1", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-virtualizer": { + "version": "9.0.0-alpha.102", + "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.102.tgz", + "integrity": "sha512-kt/kuAMTKTTY/00ToUlgUwUCty2HGj4Tnr+fxKRmr7Ziy5VWhi1YoNJ8vcgmxog5J90t4tS29LB0LP0KztQUVg==", + "license": "MIT", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.1.4", + "@fluentui/react-shared-contexts": "^9.24.1", + "@fluentui/react-utilities": "^9.23.1", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/tokens": { + "version": "1.0.0-alpha.22", + "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.22.tgz", + "integrity": "sha512-i9fgYyyCWFRdUi+vQwnV6hp7wpLGK4p09B+O/f2u71GBXzPuniubPYvrIJYtl444DD6shLjYToJhQ1S6XTFwLg==", + "license": "MIT", + "dependencies": { + "@swc/helpers": "^0.5.1" + } + }, + "node_modules/@griffel/core": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.19.2.tgz", + "integrity": "sha512-WkB/QQkjy9dE4vrNYGhQvRRUHFkYVOuaznVOMNTDT4pS9aTJ9XPrMTXXlkpcwaf0D3vNKoerj4zAwnU2lBzbOg==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.0", + "@griffel/style-types": "^1.3.0", + "csstype": "^3.1.3", + "rtl-css-js": "^1.16.1", + "stylis": "^4.2.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@griffel/react": { + "version": "1.5.30", + "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.30.tgz", + "integrity": "sha512-1q4ojbEVFY5YA0j1NamP0WWF4BKh+GHsVugltDYeEgEaVbH3odJ7tJabuhQgY+7Nhka0pyEFWSiHJev0K3FSew==", + "license": "MIT", + "dependencies": { + "@griffel/core": "^1.19.2", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.8.0 <20.0.0" + } + }, + "node_modules/@griffel/style-types": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@griffel/style-types/-/style-types-1.3.0.tgz", + "integrity": "sha512-bHwD3sUE84Xwv4dH011gOKe1jul77M1S6ZFN9Tnq8pvZ48UMdY//vtES6fv7GRS5wXYT4iqxQPBluAiYAfkpmw==", + "license": "MIT", + "dependencies": { + "csstype": "^3.1.3" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pa-client/power-code-sdk": { + "version": "0.0.1", + "resolved": "https://github.com/microsoft/PowerAppsCodeApps/releases/download/v0.0.4/7-31-pa-client-power-code-sdk-0.0.1.tgz", + "integrity": "sha512-+jdD0rT8sCpmkeCJlJibMm85Ly05gPhU+EPXsfbcjE5Gezq2OkRA1cxTI171FREAbnPwxcXJrMeI92dY2G6/vw==", + "dev": true, + "license": "UNLICENSED" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz", + "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz", + "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz", + "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz", + "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz", + "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz", + "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz", + "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz", + "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz", + "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz", + "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz", + "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz", + "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz", + "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz", + "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz", + "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz", + "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz", + "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz", + "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz", + "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz", + "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.0.tgz", + "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, + "node_modules/@types/react": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz", + "integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz", + "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz", + "integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.39.0", + "@typescript-eslint/type-utils": "8.39.0", + "@typescript-eslint/utils": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.39.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz", + "integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.39.0", + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/typescript-estree": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.0.tgz", + "integrity": "sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.39.0", + "@typescript-eslint/types": "^8.39.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz", + "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz", + "integrity": "sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz", + "integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/typescript-estree": "8.39.0", + "@typescript-eslint/utils": "8.39.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", + "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz", + "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.39.0", + "@typescript-eslint/tsconfig-utils": "8.39.0", + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz", + "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.39.0", + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/typescript-estree": "8.39.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz", + "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.39.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001731", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz", + "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==", + "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" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.197", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.197.tgz", + "integrity": "sha512-m1xWB3g7vJ6asIFz+2pBUbq3uGmfmln1M9SSvBe4QIFWYrRHylP73zL/3nMjDmwz8V+1xAXQDfBd6+HPW0WvDQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/embla-carousel": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", + "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", + "license": "MIT" + }, + "node_modules/embla-carousel-autoplay": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-autoplay/-/embla-carousel-autoplay-8.6.0.tgz", + "integrity": "sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/embla-carousel-fade": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-fade/-/embla-carousel-fade-8.6.0.tgz", + "integrity": "sha512-qaYsx5mwCz72ZrjlsXgs1nKejSrW+UhkbOMwLgfRT7w2LtdEB03nPRI06GHuHv5ac2USvbEiX2/nAHctcDwvpg==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/esbuild": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", + "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.32.0", + "@eslint/plugin-kit": "^0.3.4", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyborg": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.6.0.tgz", + "integrity": "sha512-o5kvLbuTF+o326CMVYpjlaykxqYP9DphFQZ2ZpgrvBouyvOxyEB7oqe8nOLFpiV5VCtz0D3pt8gXQYWpLpBnmA==", + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", + "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", + "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.1" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", + "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.46.2", + "@rollup/rollup-android-arm64": "4.46.2", + "@rollup/rollup-darwin-arm64": "4.46.2", + "@rollup/rollup-darwin-x64": "4.46.2", + "@rollup/rollup-freebsd-arm64": "4.46.2", + "@rollup/rollup-freebsd-x64": "4.46.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", + "@rollup/rollup-linux-arm-musleabihf": "4.46.2", + "@rollup/rollup-linux-arm64-gnu": "4.46.2", + "@rollup/rollup-linux-arm64-musl": "4.46.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", + "@rollup/rollup-linux-ppc64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-musl": "4.46.2", + "@rollup/rollup-linux-s390x-gnu": "4.46.2", + "@rollup/rollup-linux-x64-gnu": "4.46.2", + "@rollup/rollup-linux-x64-musl": "4.46.2", + "@rollup/rollup-win32-arm64-msvc": "4.46.2", + "@rollup/rollup-win32-ia32-msvc": "4.46.2", + "@rollup/rollup-win32-x64-msvc": "4.46.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/rtl-css-js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", + "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tabster": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/tabster/-/tabster-8.5.6.tgz", + "integrity": "sha512-2vfrRGrx8O9BjdrtSlVA5fvpmbq5HQBRN13XFRg6LAvZ1Fr3QdBnswgT4YgFS5Bhoo5nxwgjRaRueI2Us/dv7g==", + "license": "MIT", + "dependencies": { + "keyborg": "2.6.0", + "tslib": "^2.8.1" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "4.40.0" + } + }, + "node_modules/tabster/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz", + "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.39.0.tgz", + "integrity": "sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.39.0", + "@typescript-eslint/parser": "8.39.0", + "@typescript-eslint/typescript-estree": "8.39.0", + "@typescript-eslint/utils": "8.39.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/vite": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/samples/DataverseFluentTeamsInspired/package.json b/samples/DataverseFluentTeamsInspired/package.json new file mode 100644 index 0000000..c6b8197 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/package.json @@ -0,0 +1,33 @@ +{ + "name": "code-app-dataverse", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "start pac code run && vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@fluentui/react-components": "^9.68.2", + "@fluentui/react-icons": "^2.0.282", + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@eslint/js": "^9.30.1", + "@pa-client/power-code-sdk": "https://github.com/microsoft/PowerAppsCodeApps/releases/download/v0.0.4/7-31-pa-client-power-code-sdk-0.0.1.tgz", + "@types/node": "^24.2.0", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.6.0", + "eslint": "^9.30.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.35.1", + "vite": "^7.0.4" + } +} \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/power.config.json b/samples/DataverseFluentTeamsInspired/power.config.json new file mode 100644 index 0000000..e0293ff --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/power.config.json @@ -0,0 +1,43 @@ +{ + "appId": "", + "appDisplayName": "code-app-dataverse", + "description": null, + "environmentId": "replace-with-yours", + "buildPath": "./dist", + "buildEntryPoint": "index.html", + "logoPath": ".\\src\\assets\\react.svg", + "localAppUrl": "http://localhost:3000/", + "connectionReferences": { + "ca8d5b93-3d31-4ed0-a0d8-64b2e9cb85a7": { + "id": "/providers/Microsoft.PowerApps/apis/shared_office365users", + "displayName": "Office 365 Users", + "dataSources": [ + "office365users" + ], + "authenticationType": null, + "sharedConnectionId": null, + "dataSets": {} + } + }, + "databaseReferences": { + "default.cds": { + "state": "Configured", + "instanceUrl": "https://replace-with-yours.crm.dynamics.com/", + "webApiVersion": "v9.0", + "dataSources": { + "accounts": { + "entitySetName": "accounts", + "logicalName": "account", + "isHidden": false + }, + "contacts": { + "entitySetName": "contacts", + "logicalName": "contact", + "isHidden": false + } + }, + "version": "v9.0", + "environmentVariableName": "" + } + } +} \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/public/vite.svg b/samples/DataverseFluentTeamsInspired/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/src/App.tsx b/samples/DataverseFluentTeamsInspired/src/App.tsx new file mode 100644 index 0000000..f99ae75 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/App.tsx @@ -0,0 +1,219 @@ +import { useState, Suspense, lazy } from 'react' +// Lazily load heavier / less frequently accessed pages to reduce initial bundle size. +const ContactsPage = lazy(() => import('./pages/ContactsPage')) +const AccountsPage = lazy(() => import('./pages/AccountsPage')) +const StarterPage = lazy(() => import('./pages/StarterPage')) +const SettingsPage = lazy(() => import('./pages/SettingsPage')) +import { TitleBar, Sidebar, UserProfile } from './components' +import { useUserProfile } from './hooks' +import { + Text, + makeStyles, + shorthands, + tokens, + Spinner, + FluentProvider, + webLightTheme, + webDarkTheme +} from '@fluentui/react-components' + + +const useStyles = makeStyles({ + root: { + display: 'flex', + flexDirection: 'column', + width: '100vw', + height: '100vh', + margin: 0, + padding: 0, + backgroundColor: tokens.colorNeutralBackground1, + color: tokens.colorNeutralForeground1, + overflow: 'hidden', + }, + titleBar: { + height: '48px', + backgroundColor: tokens.colorNeutralBackground2, + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + ...shorthands.padding('0', '20px'), + borderBottom: `1px solid ${tokens.colorNeutralStroke2}`, + width: '100%', + boxSizing: 'border-box', + overflow: 'visible', + }, + mainLayout: { + display: 'flex', + flex: 1, + overflow: 'hidden', + }, + sidebar: { + width: '56px', + backgroundColor: tokens.colorNeutralBackground2, + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + ...shorthands.padding('8px', '4px'), + ...shorthands.gap('4px'), + borderRight: `1px solid ${tokens.colorNeutralStroke2}`, + }, + sidebarButton: { + width: '48px', + height: '60px', + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + ...shorthands.borderRadius('6px'), + ...shorthands.padding('6px', '2px'), + fontSize: '10px', + fontWeight: '400', + lineHeight: '12px', + }, + mainContent: { + flex: 1, + display: 'flex', + flexDirection: 'column', + }, + contentArea: { + flex: 1, + ...shorthands.padding('0px'), + display: 'flex', + flexDirection: 'column', + height: '100%', // Ensure full height + overflow: 'auto', // Allow scrolling if content overflows + }, + profilePopover: { + minWidth: '280px', + maxWidth: 'min(400px, calc(100vw - 40px))', + width: 'max-content', + ...shorthands.padding('16px'), + }, + profilePopoverHeader: { + display: 'flex', + alignItems: 'center', + ...shorthands.gap('12px'), + ...shorthands.margin('0', '0', '12px', '0'), + }, + profilePopoverText: { + whiteSpace: 'nowrap', + }, + profileAvatar: { + cursor: 'pointer', + '&:hover': { + opacity: 0.8, + }, + } +}) + +function App() { + const styles = useStyles() + // Initialize theme from localStorage or default to dark theme + const [isDarkTheme, setIsDarkTheme] = useState(() => { + const savedTheme = localStorage.getItem('isDarkTheme') + return savedTheme ? JSON.parse(savedTheme) : true + }) + + const [isProfilePopoverOpen, setIsProfilePopoverOpen] = useState(false) + + // Initialize current page from localStorage; map deprecated 'Home' to 'Contacts' + const [currentPage, setCurrentPage] = useState(() => { + const savedPage = localStorage.getItem('currentPage') + if (savedPage === 'Home') return 'Contacts' + return savedPage ? savedPage : 'Contacts' + }) + + // Function to toggle theme and persist to localStorage + const toggleTheme = () => { + const newTheme = !isDarkTheme + setIsDarkTheme(newTheme) + localStorage.setItem('isDarkTheme', JSON.stringify(newTheme)) + } + + // Function to change page and persist to localStorage + const changePage = (page: string) => { + setCurrentPage(page) + localStorage.setItem('currentPage', page) + } + + const { user, userPhoto, loading } = useUserProfile() + + const renderPageContent = () => { + switch (currentPage) { + case 'Contacts': + return + case 'Accounts': + return + case 'Starter': + return + case 'Teams': + case 'Apps': + return
Page removed.
+ case 'Settings': + return + default: + return
Page not found
+ } + } + + const userProfileComponent = loading ? ( + + ) : user ? ( + + ) : ( + + Profile unavailable + + ) + + return ( + +
+ + +
+ + +
+
+
}> + {renderPageContent()} + +
+
+
+ +
+ ) +} + +export default App diff --git a/samples/DataverseFluentTeamsInspired/src/Models/CommonModels.ts b/samples/DataverseFluentTeamsInspired/src/Models/CommonModels.ts new file mode 100644 index 0000000..b59cc99 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/Models/CommonModels.ts @@ -0,0 +1,17 @@ +/*! + * Copyright (C) Microsoft Corporation. All rights reserved. + * This file is autogenerated. Do not edit this file directly. + */ + +export interface IGetOptions { + select?: string[]; +}; + +export interface IGetAllOptions { + maxPageSize?: number; + select?: string[]; + filter?: string; + orderBy?: string[]; + top?: number; + skip?: number; +} diff --git a/samples/DataverseFluentTeamsInspired/src/Models/Office365UsersModel.ts b/samples/DataverseFluentTeamsInspired/src/Models/Office365UsersModel.ts new file mode 100644 index 0000000..585f5e4 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/Models/Office365UsersModel.ts @@ -0,0 +1,240 @@ +/*! + * Copyright (C) Microsoft Corporation. All rights reserved. + * This file is autogenerated. Do not edit this file directly. + */ + +export interface GraphUserUpdateable_V1 { + // About Me + aboutMe?: string; + // Birthday + birthday?: string; + // Interests + interests?: string[]; + // My Site + mySite?: string; + // Past Projects + pastProjects?: string[]; + // Schools + schools?: string[]; + // Skills + skills?: string[]; +} + +export interface GraphTrending { + // Unique identifier of the relationship + id?: string; + // Value indicating how much the document is currently trending + weight?: number; + resourceVisualization?: resourceVisualization; + resourceReference?: resourceReference; +} + +export interface resourceVisualization { + // The item's title text + title?: string; + // The item's media type (can be used for filtering for a specific file based on a specific type) + type?: string; + // The items media type (can be used for filtering for a specific type of file based on supported IANA Media MIME types) + mediaType?: string; + // A URL leading to the preview image for the item + previewImageUrl?: string; + // A preview text for the item + previewText?: string; + // A path leading to the folder in which the item is stored + containerWebUrl?: string; + // A string describing where the item is stored + containerDisplayName?: string; + // Can be used for filtering by the type of container in which the file is stored + containerType?: string; +} + +export interface resourceReference { + // A URL leading to the referenced item + webUrl?: string; + // The item's unique identifier + id?: string; + // A string value that can be used to classify the item, such as "microsoft.graph.driveItem" + type?: string; +} + +export interface LinklessEntityListResponse_List_Person { + // Value + value?: Person[]; +} + +export interface Person { + // A unique identifier for the Person object in the directory + id?: string; + // The person's display name + displayName?: string; + // The person's given name + givenName?: string; + // The person's surname + surname?: string; + // The person's birthday + birthday?: string; + // Free-form notes that the current user has taken about this person + personNotes?: string; + // If the current user has flagged this person as a favorite + isFavorite?: boolean; + // The person's job title + jobTitle?: string; + // The name of the person's company + companyName?: string; + // The person's department + department?: string; + // The location of the person's office + officeLocation?: string; + // The person's profession + profession?: string; + // The user principal name(UPN) of the user.The UPN is an Internet-style login name for the user based on the Internet standard RFC 822. By convention, this should map to the user's email name.The general format is alias @domain, where domain must be present in the tenant's collection of verified domains. + userPrincipalName?: string; + // The person's VOIP SIP address + imAddress?: string; + // Collection of the person's email addresses with a relevance score + scoredEmailAddresses?: ScoredEmailAddress[]; + // The person's phone numbers + phones?: Phone[]; +} + +export interface ScoredEmailAddress { + // The email address + address?: string; + // The relevance score of the email address. A relevance score is used as a sort key, in relation to the other returned results. A higher relevance score value corresponds to a more relevant result. Relevance is determined by the user's communication and collaboration patterns and business relationships. + relevanceScore?: number; +} + +export interface Phone { + // The phone number + number?: string; + // The type of phone number. Possible values: home, business, mobile, other, assistant, homeFax, businessFax, otherFax, pager, radio. + type?: string; +} + +export interface User { + // A unique identifier for the user object in the directory. + Id: string; + // true if the account is enabled; otherwise, false. This property is required when a user is created. + AccountEnabled?: boolean; + // A list of business phone numbers for the user + BusinessPhones?: string[]; + // The city in which the user is located. + City?: string; + // The name of the company in which the user works. + CompanyName?: string; + // The country/region in which the user is located; for example, "US" or "UK". + Country?: string; + // The name of the department in which the user works. + Department?: string; + // The name displayed in the address book for the user. This is usually the combination of the user's first name, middle initial and last name. This property is required when a user is created and it cannot be cleared during updates. + DisplayName?: string; + // The given name (first name) of the user. + GivenName?: string; + // The user’s job title. + JobTitle?: string; + // The SMTP/email address for the user, for example, "jeff@contoso.onmicrosoft.com". Read-Only. + Mail?: string; + // The mail alias for the user. This property must be specified when a user is created. + MailNickname?: string; + // The primary cellular telephone number for the user. + mobilePhone?: string; + // The office location in the user's place of business. + OfficeLocation?: string; + // The postal code for the user's postal address. The postal code is specific to the user's country/region. In the United States of America, this attribute contains the ZIP code. + PostalCode?: string; + // The user's surname (family name or last name). + Surname?: string; + // The primary cellular telephone number for the user. + TelephoneNumber?: string; + // The user principal name (UPN) of the user. The UPN is an Internet-style login name for the user based on the Internet standard RFC 822. By convention, this should map to the user’s email name. The general format is alias@domain, where domain must be present in the tenant’s collection of verified domains. + UserPrincipalName?: string; +} + +export interface ClientPhotoMetadata { + // Has photo + HasPhoto?: boolean; + // Height of photo + Height?: number; + // Width of photo + Width?: number; + // Content Type of photo + ContentType?: string; + // File extension for the photo (ex: ".jpg") + ImageFileExtension?: string; +} + +export type Object = object; + +export interface EntityListResponse_IReadOnlyList_User { + // Value + value?: User[]; + // Next page link + "@odata.nextLink"?: string; +} + +export interface GraphUser_V1 { + // About Me + aboutMe?: string; + // true if the account is enabled; otherwise, false. This property is required when a user is created. + accountEnabled?: boolean; + // Birthday + birthday?: string; + // Business Phones + businessPhones?: string[]; + // The city in which the user is located. + city?: string; + // The name of the company in which the user works. + companyName?: string; + // The country/region in which the user is located; for example, "US" or "UK". + country?: string; + // The name of the department in which the user works. + department?: string; + // Display Name + displayName?: string; + // Given Name + givenName?: string; + // Hire Date + hireDate?: string; + // Id + id?: string; + // Interests + interests?: string[]; + // Job Title + jobTitle?: string; + // Mail + mail?: string; + // The mail alias for the user. This property must be specified when a user is created. + mailNickname?: string; + // Mobile Phone + mobilePhone?: string; + // My Site + mySite?: string; + // Office Location + officeLocation?: string; + // Past Projects + pastProjects?: string[]; + // The postal code for the user's postal address. The postal code is specific to the user's country/region. In the United States of America, this attribute contains the ZIP code. + postalCode?: string; + // Preferred Language + preferredLanguage?: string; + // Preferred Name + preferredName?: string; + // Responsibilities + responsibilities?: string[]; + // Schools + schools?: string[]; + // Skills + skills?: string[]; + // State + state?: string; + // Street Address + streetAddress?: string; + // Surname + surname?: string; + // User Principal Name + userPrincipalName?: string; + // User Type + userType?: string; +} + +export type ObjectWithoutType = object; diff --git a/samples/DataverseFluentTeamsInspired/src/Models/accountsModel.ts b/samples/DataverseFluentTeamsInspired/src/Models/accountsModel.ts new file mode 100644 index 0000000..7d09c48 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/Models/accountsModel.ts @@ -0,0 +1,222 @@ +/*! + * Copyright (C) Microsoft Corporation. All rights reserved. + * This file is autogenerated. Do not edit this file directly. + */ + +export interface accounts { + accountcategorycode?: string; + accountcategorycodename?: string; + accountclassificationcode?: string; + accountclassificationcodename?: string; + accountid: string; + accountnumber?: string; + accountratingcode?: string; + accountratingcodename?: string; + address1_addressid?: string; + address1_addresstypecode?: string; + address1_addresstypecodename?: string; + address1_city?: string; + address1_composite?: string; + address1_country?: string; + address1_county?: string; + address1_fax?: string; + address1_freighttermscode?: string; + address1_freighttermscodename?: string; + address1_latitude?: string; + address1_line1?: string; + address1_line2?: string; + address1_line3?: string; + address1_longitude?: string; + address1_name?: string; + address1_postalcode?: string; + address1_postofficebox?: string; + address1_primarycontactname?: string; + address1_shippingmethodcode?: string; + address1_shippingmethodcodename?: string; + address1_stateorprovince?: string; + address1_telephone1?: string; + address1_telephone2?: string; + address1_telephone3?: string; + address1_upszone?: string; + address1_utcoffset?: string; + address2_addressid?: string; + address2_addresstypecode?: string; + address2_addresstypecodename?: string; + address2_city?: string; + address2_composite?: string; + address2_country?: string; + address2_county?: string; + address2_fax?: string; + address2_freighttermscode?: string; + address2_freighttermscodename?: string; + address2_latitude?: string; + address2_line1?: string; + address2_line2?: string; + address2_line3?: string; + address2_longitude?: string; + address2_name?: string; + address2_postalcode?: string; + address2_postofficebox?: string; + address2_primarycontactname?: string; + address2_shippingmethodcode?: string; + address2_shippingmethodcodename?: string; + address2_stateorprovince?: string; + address2_telephone1?: string; + address2_telephone2?: string; + address2_telephone3?: string; + address2_upszone?: string; + address2_utcoffset?: string; + adx_createdbyipaddress?: string; + adx_createdbyusername?: string; + adx_modifiedbyipaddress?: string; + adx_modifiedbyusername?: string; + aging30?: string; + aging30_base?: string; + aging60?: string; + aging60_base?: string; + aging90?: string; + aging90_base?: string; + businesstypecode?: string; + businesstypecodename?: string; + createdby?: string; + createdbyexternalparty?: string; + createdbyexternalpartyname?: string; + createdbyexternalpartyyominame?: string; + createdbyname?: string; + createdbyyominame?: string; + createdon?: string; + createdonbehalfby?: string; + createdonbehalfbyname?: string; + createdonbehalfbyyominame?: string; + creditlimit?: string; + creditlimit_base?: string; + creditonhold?: string; + creditonholdname?: string; + customersizecode?: string; + customersizecodename?: string; + customertypecode?: string; + customertypecodename?: string; + description?: string; + donotbulkemail?: string; + donotbulkemailname?: string; + donotbulkpostalmail?: string; + donotbulkpostalmailname?: string; + donotemail?: string; + donotemailname?: string; + donotfax?: string; + donotfaxname?: string; + donotphone?: string; + donotphonename?: string; + donotpostalmail?: string; + donotpostalmailname?: string; + donotsendmarketingmaterialname?: string; + donotsendmm?: string; + emailaddress1?: string; + emailaddress2?: string; + emailaddress3?: string; + entityimage?: string; + entityimage_timestamp?: string; + entityimage_url?: string; + entityimageid?: string; + exchangerate?: string; + fax?: string; + followemail?: string; + followemailname?: string; + ftpsiteurl?: string; + importsequencenumber?: string; + industrycode?: string; + industrycodename?: string; + isprivate?: string; + isprivatename?: string; + lastonholdtime?: string; + lastusedincampaign?: string; + marketcap?: string; + marketcap_base?: string; + marketingonly?: string; + marketingonlyname?: string; + masteraccountidname?: string; + masteraccountidyominame?: string; + masterid?: string; + merged?: string; + mergedname?: string; + modifiedby?: string; + modifiedbyexternalparty?: string; + modifiedbyexternalpartyname?: string; + modifiedbyexternalpartyyominame?: string; + modifiedbyname?: string; + modifiedbyyominame?: string; + modifiedon?: string; + modifiedonbehalfby?: string; + modifiedonbehalfbyname?: string; + modifiedonbehalfbyyominame?: string; + msa_managingpartnerid?: string; + msa_managingpartneridname?: string; + msa_managingpartneridyominame?: string; + name: string; + numberofemployees?: string; + onholdtime?: string; + overriddencreatedon?: string; + ownerid: string; + owneridname: string; + owneridtype: string; + owneridyominame: string; + ownershipcode?: string; + ownershipcodename?: string; + owningbusinessunit?: string; + owningbusinessunitname?: string; + owningteam?: string; + owninguser?: string; + parentaccountid?: string; + parentaccountidname?: string; + parentaccountidyominame?: string; + participatesinworkflow?: string; + participatesinworkflowname?: string; + paymenttermscode?: string; + paymenttermscodename?: string; + preferredappointmentdaycode?: string; + preferredappointmentdaycodename?: string; + preferredappointmenttimecode?: string; + preferredappointmenttimecodename?: string; + preferredcontactmethodcode?: string; + preferredcontactmethodcodename?: string; + preferredsystemuserid?: string; + preferredsystemuseridname?: string; + preferredsystemuseridyominame?: string; + primarycontactid?: string; + primarycontactidname?: string; + primarycontactidyominame?: string; + primarysatoriid?: string; + primarytwitterid?: string; + processid?: string; + revenue?: string; + revenue_base?: string; + sharesoutstanding?: string; + shippingmethodcode?: string; + shippingmethodcodename?: string; + sic?: string; + slaid?: string; + slainvokedid?: string; + slainvokedidname?: string; + slaname?: string; + stageid?: string; + statecode: string; + statecodename?: string; + statuscode?: string; + statuscodename?: string; + stockexchange?: string; + telephone1?: string; + telephone2?: string; + telephone3?: string; + territorycode?: string; + territorycodename?: string; + tickersymbol?: string; + timespentbymeonemailandmeetings?: string; + timezoneruleversionnumber?: string; + transactioncurrencyid?: string; + transactioncurrencyidname?: string; + traversedpath?: string; + utcconversiontimezonecode?: string; + versionnumber?: string; + websiteurl?: string; + yominame?: string; +} diff --git a/samples/DataverseFluentTeamsInspired/src/Models/contactsModel.ts b/samples/DataverseFluentTeamsInspired/src/Models/contactsModel.ts new file mode 100644 index 0000000..99e9888 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/Models/contactsModel.ts @@ -0,0 +1,318 @@ +/*! + * Copyright (C) Microsoft Corporation. All rights reserved. + * This file is autogenerated. Do not edit this file directly. + */ + +export interface contacts { + accountid?: string; + accountidname?: string; + accountidyominame?: string; + accountrolecode?: string; + accountrolecodename?: string; + address1_addressid?: string; + address1_addresstypecode?: string; + address1_addresstypecodename?: string; + address1_city?: string; + address1_composite?: string; + address1_country?: string; + address1_county?: string; + address1_fax?: string; + address1_freighttermscode?: string; + address1_freighttermscodename?: string; + address1_latitude?: string; + address1_line1?: string; + address1_line2?: string; + address1_line3?: string; + address1_longitude?: string; + address1_name?: string; + address1_postalcode?: string; + address1_postofficebox?: string; + address1_primarycontactname?: string; + address1_shippingmethodcode?: string; + address1_shippingmethodcodename?: string; + address1_stateorprovince?: string; + address1_telephone1?: string; + address1_telephone2?: string; + address1_telephone3?: string; + address1_upszone?: string; + address1_utcoffset?: string; + address2_addressid?: string; + address2_addresstypecode?: string; + address2_addresstypecodename?: string; + address2_city?: string; + address2_composite?: string; + address2_country?: string; + address2_county?: string; + address2_fax?: string; + address2_freighttermscode?: string; + address2_freighttermscodename?: string; + address2_latitude?: string; + address2_line1?: string; + address2_line2?: string; + address2_line3?: string; + address2_longitude?: string; + address2_name?: string; + address2_postalcode?: string; + address2_postofficebox?: string; + address2_primarycontactname?: string; + address2_shippingmethodcode?: string; + address2_shippingmethodcodename?: string; + address2_stateorprovince?: string; + address2_telephone1?: string; + address2_telephone2?: string; + address2_telephone3?: string; + address2_upszone?: string; + address2_utcoffset?: string; + address3_addressid?: string; + address3_addresstypecode?: string; + address3_addresstypecodename?: string; + address3_city?: string; + address3_composite?: string; + address3_country?: string; + address3_county?: string; + address3_fax?: string; + address3_freighttermscode?: string; + address3_freighttermscodename?: string; + address3_latitude?: string; + address3_line1?: string; + address3_line2?: string; + address3_line3?: string; + address3_longitude?: string; + address3_name?: string; + address3_postalcode?: string; + address3_postofficebox?: string; + address3_primarycontactname?: string; + address3_shippingmethodcode?: string; + address3_shippingmethodcodename?: string; + address3_stateorprovince?: string; + address3_telephone1?: string; + address3_telephone2?: string; + address3_telephone3?: string; + address3_upszone?: string; + address3_utcoffset?: string; + adx_confirmremovepassword?: string; + adx_confirmremovepasswordname?: string; + adx_createdbyipaddress?: string; + adx_createdbyusername?: string; + adx_identity_accessfailedcount?: string; + adx_identity_emailaddress1confirmed?: string; + adx_identity_emailaddress1confirmedname?: string; + adx_identity_lastsuccessfullogin?: string; + adx_identity_locallogindisabled?: string; + adx_identity_locallogindisabledname?: string; + adx_identity_lockoutenabled?: string; + adx_identity_lockoutenabledname?: string; + adx_identity_lockoutenddate?: string; + adx_identity_logonenabled?: string; + adx_identity_logonenabledname?: string; + adx_identity_mobilephoneconfirmed?: string; + adx_identity_mobilephoneconfirmedname?: string; + adx_identity_newpassword?: string; + adx_identity_passwordhash?: string; + adx_identity_securitystamp?: string; + adx_identity_twofactorenabled?: string; + adx_identity_twofactorenabledname?: string; + adx_identity_username?: string; + adx_modifiedbyipaddress?: string; + adx_modifiedbyusername?: string; + adx_organizationname?: string; + adx_preferredlcid?: string; + adx_profilealert?: string; + adx_profilealertdate?: string; + adx_profilealertinstructions?: string; + adx_profilealertname?: string; + adx_profileisanonymous?: string; + adx_profileisanonymousname?: string; + adx_profilelastactivity?: string; + adx_profilemodifiedon?: string; + adx_publicprofilecopy?: string; + adx_timezone?: string; + aging30?: string; + aging30_base?: string; + aging60?: string; + aging60_base?: string; + aging90?: string; + aging90_base?: string; + anniversary?: string; + annualincome?: string; + annualincome_base?: string; + assistantname?: string; + assistantphone?: string; + birthdate?: string; + business2?: string; + callback?: string; + childrensnames?: string; + company?: string; + contactid: string; + createdby?: string; + createdbyexternalparty?: string; + createdbyexternalpartyname?: string; + createdbyexternalpartyyominame?: string; + createdbyname?: string; + createdbyyominame?: string; + createdon?: string; + createdonbehalfby?: string; + createdonbehalfbyname?: string; + createdonbehalfbyyominame?: string; + creditlimit?: string; + creditlimit_base?: string; + creditonhold?: string; + creditonholdname?: string; + customersizecode?: string; + customersizecodename?: string; + customertypecode?: string; + customertypecodename?: string; + department?: string; + description?: string; + donotbulkemail?: string; + donotbulkemailname?: string; + donotbulkpostalmail?: string; + donotbulkpostalmailname?: string; + donotemail?: string; + donotemailname?: string; + donotfax?: string; + donotfaxname?: string; + donotphone?: string; + donotphonename?: string; + donotpostalmail?: string; + donotpostalmailname?: string; + donotsendmarketingmaterialname?: string; + donotsendmm?: string; + educationcode?: string; + educationcodename?: string; + emailaddress1?: string; + emailaddress2?: string; + emailaddress3?: string; + employeeid?: string; + entityimage?: string; + entityimage_timestamp?: string; + entityimage_url?: string; + entityimageid?: string; + exchangerate?: string; + externaluseridentifier?: string; + familystatuscode?: string; + familystatuscodename?: string; + fax?: string; + firstname?: string; + followemail?: string; + followemailname?: string; + ftpsiteurl?: string; + fullname?: string; + gendercode?: string; + gendercodename?: string; + governmentid?: string; + haschildrencode?: string; + haschildrencodename?: string; + home2?: string; + importsequencenumber?: string; + isautocreate?: string; + isbackofficecustomer?: string; + isbackofficecustomername?: string; + isprivate?: string; + isprivatename?: string; + jobtitle?: string; + lastname: string; + lastonholdtime?: string; + lastusedincampaign?: string; + leadsourcecode?: string; + leadsourcecodename?: string; + managername?: string; + managerphone?: string; + marketingonly?: string; + marketingonlyname?: string; + mastercontactidname?: string; + mastercontactidyominame?: string; + masterid?: string; + merged?: string; + mergedname?: string; + middlename?: string; + mobilephone?: string; + modifiedby?: string; + modifiedbyexternalparty?: string; + modifiedbyexternalpartyname?: string; + modifiedbyexternalpartyyominame?: string; + modifiedbyname?: string; + modifiedbyyominame?: string; + modifiedon?: string; + modifiedonbehalfby?: string; + modifiedonbehalfbyname?: string; + modifiedonbehalfbyyominame?: string; + msa_managingpartnerid?: string; + msa_managingpartneridname?: string; + msa_managingpartneridyominame?: string; + msdyn_disablewebtracking?: string; + msdyn_disablewebtrackingname?: string; + msdyn_isminor?: string; + msdyn_isminorname?: string; + msdyn_isminorwithparentalconsent?: string; + msdyn_isminorwithparentalconsentname?: string; + msdyn_portaltermsagreementdate?: string; + mspp_userpreferredlcid?: string; + mspp_userpreferredlcidname?: string; + nickname?: string; + numberofchildren?: string; + onholdtime?: string; + overriddencreatedon?: string; + ownerid: string; + owneridname: string; + owneridtype: string; + owneridyominame: string; + owningbusinessunit?: string; + owningbusinessunitname?: string; + owningteam?: string; + owninguser?: string; + pager?: string; + parentcontactid?: string; + parentcontactidname?: string; + parentcontactidyominame?: string; + parentcustomerid?: string; + parentcustomeridname: string; + parentcustomeridtype?: string; + parentcustomeridyominame: string; + participatesinworkflow?: string; + participatesinworkflowname?: string; + paymenttermscode?: string; + paymenttermscodename?: string; + preferredappointmentdaycode?: string; + preferredappointmentdaycodename?: string; + preferredappointmenttimecode?: string; + preferredappointmenttimecodename?: string; + preferredcontactmethodcode?: string; + preferredcontactmethodcodename?: string; + preferredsystemuserid?: string; + preferredsystemuseridname?: string; + preferredsystemuseridyominame?: string; + processid?: string; + salutation?: string; + shippingmethodcode?: string; + shippingmethodcodename?: string; + slaid?: string; + slainvokedid?: string; + slainvokedidname?: string; + slaname?: string; + spousesname?: string; + stageid?: string; + statecode: string; + statecodename?: string; + statuscode?: string; + statuscodename?: string; + subscriptionid?: string; + suffix?: string; + telephone1?: string; + telephone2?: string; + telephone3?: string; + territorycode?: string; + territorycodename?: string; + timespentbymeonemailandmeetings?: string; + timezoneruleversionnumber?: string; + transactioncurrencyid?: string; + transactioncurrencyidname?: string; + traversedpath?: string; + utcconversiontimezonecode?: string; + versionnumber?: string; + websiteurl?: string; + yomifirstname?: string; + yomifullname?: string; + yomilastname?: string; + yomimiddlename?: string; +} diff --git a/samples/DataverseFluentTeamsInspired/src/PowerProvider.tsx b/samples/DataverseFluentTeamsInspired/src/PowerProvider.tsx new file mode 100644 index 0000000..6e9cfee --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/PowerProvider.tsx @@ -0,0 +1,43 @@ +import { useEffect, useMemo, useState, type ReactNode } from "react"; +import { PowerRuntimeContext, type PowerRuntimeContextType } from "./contexts/powerRuntimeContext"; + +interface PowerProviderProps { + children: ReactNode; +} + +export default function PowerProvider({ children }: PowerProviderProps) { + const [isReady, setIsReady] = useState(false); + const [error, setError] = useState(null); + const [initializedAt, setInitializedAt] = useState(null); + + useEffect(() => { + let cancelled = false; + const initApp = async () => { + try { + // Dynamically import to allow the SDK (and its dependencies) to be code-split from the initial UI shell. + const mod = await import("@pa-client/power-code-sdk/lib/Lifecycle"); + if (cancelled) return; + await mod.initialize(); + if (cancelled) return; + setIsReady(true); + setInitializedAt(new Date().toISOString()); + console.log('Power Platform SDK initialized successfully'); + } catch (err) { + if (cancelled) return; + const message = err instanceof Error ? err.message : 'Unknown error'; + setError(message); + console.error('Failed to initialize Power Platform SDK:', err); + } + }; + initApp(); + return () => { cancelled = true; }; + }, []); + + const value = useMemo(() => ({ isReady, error, initializedAt }), [isReady, error, initializedAt]); + + return ( + + {children} + + ); +} \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/src/Services/Office365UsersService.ts b/samples/DataverseFluentTeamsInspired/src/Services/Office365UsersService.ts new file mode 100644 index 0000000..2118145 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/Services/Office365UsersService.ts @@ -0,0 +1,336 @@ +/*! + * Copyright (C) Microsoft Corporation. All rights reserved. + * This file is autogenerated. Do not edit this file directly. + */ + +import type { ClientPhotoMetadata } from '../Models/Office365UsersModel'; +import type { EntityListResponse_IReadOnlyList_User } from '../Models/Office365UsersModel'; +import type { GraphTrending } from '../Models/Office365UsersModel'; +import type { GraphUserUpdateable_V1 } from '../Models/Office365UsersModel'; +import type { GraphUser_V1 } from '../Models/Office365UsersModel'; +import type { IOperationResult } from '@pa-client/power-code-sdk/lib/'; +import type { LinklessEntityListResponse_List_Person } from '../Models/Office365UsersModel'; +import type { ObjectWithoutType } from '../Models/Office365UsersModel'; +import type { User } from '../Models/Office365UsersModel'; +import { dataSourcesInfo } from '../../.power/appschemas/dataSourcesInfo'; +import { getPowerSdkInstance } from '@pa-client/power-code-sdk/lib/'; + +export class Office365UsersService { + private static readonly dataSourceName = 'office365users'; + + /** + * Update my profile + * Updates the profile of the current user + */ + public static async UpdateMyProfile(body?: GraphUserUpdateable_V1): Promise> { + const parameters: { body?: GraphUserUpdateable_V1 } = { body }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ body?: GraphUserUpdateable_V1 }, void>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'UpdateMyProfile', + parameters + }, + }); + return result; + } + + /** + * Get my profile (V2) + * Retrieves the profile of the current user. Learn more about available fields to select: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/user#properties + */ + public static async MyProfile_V2($select?: string): Promise> { + const parameters: { $select?: string } = { $select }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ $select?: string }, GraphUser_V1>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'MyProfile_V2', + parameters + }, + }); + return result; + } + + /** + * Update my profile photo + * Updates the profile photo of the current user. The size of the photo must be less than 4 MB. + */ + public static async UpdateMyPhoto(body: string, Content_Type: string): Promise> { + const parameters: { body: string, Content_Type: string } = { body, Content_Type }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ body: string, Content_Type: string }, void>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'UpdateMyPhoto', + parameters + }, + }); + return result; + } + + /** + * Get my trending documents + * Retrieves the trending documents for the signed in user + */ + public static async MyTrendingDocuments($filter?: string, extractSensitivityLabel?: string, fetchSensitivityLabelMetadata?: string): Promise> { + const parameters: { $filter?: string, extractSensitivityLabel?: string, fetchSensitivityLabelMetadata?: string } = { $filter, extractSensitivityLabel, fetchSensitivityLabelMetadata }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ $filter?: string, extractSensitivityLabel?: string, fetchSensitivityLabelMetadata?: string }, { value: GraphTrending[] }>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'MyTrendingDocuments', + parameters + }, + }); + return result; + } + + /** + * Get relevant people + * Get relevant people. + */ + public static async RelevantPeople(userId: string): Promise> { + const parameters: { userId: string } = { userId }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ userId: string }, LinklessEntityListResponse_List_Person>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'RelevantPeople', + parameters + }, + }); + return result; + } + + /** + * Get my profile (V1) + * Retrieves the profile of the current user. + */ + public static async MyProfile(): Promise> { + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'MyProfile', + }, + }); + return result; + } + + /** + * Get user profile (V1) + * Retrieves the profile of a specific user. + */ + public static async UserProfile(userId: string): Promise> { + const parameters: { userId: string } = { userId }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ userId: string }, User>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'UserProfile', + parameters + }, + }); + return result; + } + + /** + * Get user photo metadata + * Get user photo metadata. + */ + public static async UserPhotoMetadata(userId: string): Promise> { + const parameters: { userId: string } = { userId }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ userId: string }, ClientPhotoMetadata>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'UserPhotoMetadata', + parameters + }, + }); + return result; + } + + /** + * Get user photo (V1) + * Retrieves the photo of the specified user if they have one. + */ + public static async UserPhoto(userId: string): Promise> { + const parameters: { userId: string } = { userId }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ userId: string }, string>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'UserPhoto', + parameters + }, + }); + return result; + } + + /** + * Get manager (V1) + * Retrieves the profile of the specified user's manager. + */ + public static async Manager(userId: string): Promise> { + const parameters: { userId: string } = { userId }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ userId: string }, User>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'Manager', + parameters + }, + }); + return result; + } + + /** + * Get direct reports (V1) + * Retrieves the user profiles of the specified user's direct reports. + */ + public static async DirectReports(userId: string): Promise> { + const parameters: { userId: string } = { userId }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ userId: string }, User[]>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'DirectReports', + parameters + }, + }); + return result; + } + + /** + * Search for users + * Retrieves the user profiles that match the search term. + */ + public static async SearchUser(searchTerm?: string, top?: number): Promise> { + const parameters: { searchTerm?: string, top?: number } = { searchTerm, top }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ searchTerm?: string, top?: number }, User[]>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'SearchUser', + parameters + }, + }); + return result; + } + + /** + * Search for users (V2) + * Retrieves the user profiles that match the search term (V2). + */ + public static async SearchUserV2(searchTerm?: string, top?: number, isSearchTermRequired?: boolean, skipToken?: string): Promise> { + const parameters: { searchTerm?: string, top?: number, isSearchTermRequired?: boolean, skipToken?: string } = { searchTerm, top, isSearchTermRequired, skipToken }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ searchTerm?: string, top?: number, isSearchTermRequired?: boolean, skipToken?: string }, EntityListResponse_IReadOnlyList_User>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'SearchUserV2', + parameters + }, + }); + return result; + } + + /** + * Tests the connection + * Tests the connection. + */ + public static async TestConnection(): Promise> { + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'TestConnection', + }, + }); + return result; + } + + /** + * Get user profile (V2) + * Retrieves the profile of a specific user. Learn more about available fields to select: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/user#properties + */ + public static async UserProfile_V2(id: string, $select?: string): Promise> { + const parameters: { id: string, $select?: string } = { id, $select }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ id: string, $select?: string }, GraphUser_V1>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'UserProfile_V2', + parameters + }, + }); + return result; + } + + /** + * Get manager (V2) + * Retrieves the profile of the specified user's manager. Learn more about available fields to select: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/user#properties + */ + public static async Manager_V2(id: string, $select?: string): Promise> { + const parameters: { id: string, $select?: string } = { id, $select }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ id: string, $select?: string }, GraphUser_V1>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'Manager_V2', + parameters + }, + }); + return result; + } + + /** + * Get direct reports (V2) + * Retrieves the user profiles of the specified user's direct reports. Learn more about available fields to select: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/user#properties + */ + public static async DirectReports_V2(id: string, $select?: string, $top?: number): Promise> { + const parameters: { id: string, $select?: string, $top?: number } = { id, $select, $top }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ id: string, $select?: string, $top?: number }, { value: GraphUser_V1[] }>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'DirectReports_V2', + parameters + }, + }); + return result; + } + + /** + * Get user photo (V2) + * Retrieves the photo of the specified user if they have one + */ + public static async UserPhoto_V2(id: string): Promise> { + const parameters: { id: string } = { id }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ id: string }, string>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'UserPhoto_V2', + parameters + }, + }); + return result; + } + + /** + * Get trending documents + * Retrieves the trending documents for a user + */ + public static async TrendingDocuments(id: string, $filter?: string, extractSensitivityLabel?: string, fetchSensitivityLabelMetadata?: string): Promise> { + const parameters: { id: string, $filter?: string, extractSensitivityLabel?: string, fetchSensitivityLabelMetadata?: string } = { id, $filter, extractSensitivityLabel, fetchSensitivityLabelMetadata }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ id: string, $filter?: string, extractSensitivityLabel?: string, fetchSensitivityLabelMetadata?: string }, { value: GraphTrending[] }>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'TrendingDocuments', + parameters + }, + }); + return result; + } + + /** + * Send an HTTP request + * Construct a Microsoft Graph REST API request to invoke. These segments are supported: 1st segement: /me, /users/ 2nd segment: messages, mailFolders, events, calendar, calendars, outlook, inferenceClassification. Learn more: https://docs.microsoft.com/en-us/graph/use-the-api. + */ + public static async HttpRequest(Uri: string, Method: string, Body?: string, ContentType?: string, CustomHeader1?: string, CustomHeader2?: string, CustomHeader3?: string, CustomHeader4?: string, CustomHeader5?: string): Promise> { + const parameters: { Uri: string, Method: string, Body?: string, ContentType?: string, CustomHeader1?: string, CustomHeader2?: string, CustomHeader3?: string, CustomHeader4?: string, CustomHeader5?: string } = { Uri, Method, Body, ContentType, CustomHeader1, CustomHeader2, CustomHeader3, CustomHeader4, CustomHeader5 }; + const result = await getPowerSdkInstance(dataSourcesInfo).Data.executeAsync<{ Uri: string, Method: string, Body?: string, ContentType?: string, CustomHeader1?: string, CustomHeader2?: string, CustomHeader3?: string, CustomHeader4?: string, CustomHeader5?: string }, ObjectWithoutType>({ + connectorOperation: { + tableName: Office365UsersService.dataSourceName, + operationName: 'HttpRequest', + parameters + }, + }); + return result; + } +} diff --git a/samples/DataverseFluentTeamsInspired/src/Services/accountsService.ts b/samples/DataverseFluentTeamsInspired/src/Services/accountsService.ts new file mode 100644 index 0000000..746491b --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/Services/accountsService.ts @@ -0,0 +1,52 @@ +/*! + * Copyright (C) Microsoft Corporation. All rights reserved. + * This file is autogenerated. Do not edit this file directly. + */ + +import { getPowerSdkInstance } from '@pa-client/power-code-sdk/lib/'; +import { dataSourcesInfo } from '../../.power/appschemas/dataSourcesInfo'; +import type { IOperationResult } from '@pa-client/power-code-sdk/lib/'; +import type { IGetOptions, IGetAllOptions } from '../Models/CommonModels'; +import type { accounts } from '../Models/accountsModel'; + +export class accountsService { + private static readonly dataSourceName = 'accounts'; + + public static async create(record: Omit): Promise> { + const result = await getPowerSdkInstance(dataSourcesInfo).Data.createRecordAsync, accounts>( + accountsService.dataSourceName, + record + ); + return result; + } + + public static async update(id: string, changedFields: Partial>): Promise> { + const result = await getPowerSdkInstance(dataSourcesInfo).Data.updateRecordAsync>, accounts>( + accountsService.dataSourceName, + id.toString(), + changedFields + ); + return result; + } + + public static async delete(id: string): Promise { + await getPowerSdkInstance(dataSourcesInfo).Data.deleteRecordAsync(accountsService.dataSourceName, id.toString()); + } + + public static async get(id: string, options?: IGetOptions): Promise> { + const result = await getPowerSdkInstance(dataSourcesInfo).Data.retrieveRecordAsync( + accountsService.dataSourceName, + id.toString(), + options + ); + return result; + } + + public static async getAll(options?: IGetAllOptions): Promise> { + const result = await getPowerSdkInstance(dataSourcesInfo).Data.retrieveMultipleRecordsAsync( + accountsService.dataSourceName, + options + ); + return result; + } +} diff --git a/samples/DataverseFluentTeamsInspired/src/Services/contactsService.ts b/samples/DataverseFluentTeamsInspired/src/Services/contactsService.ts new file mode 100644 index 0000000..edb1656 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/Services/contactsService.ts @@ -0,0 +1,52 @@ +/*! + * Copyright (C) Microsoft Corporation. All rights reserved. + * This file is autogenerated. Do not edit this file directly. + */ + +import { getPowerSdkInstance } from '@pa-client/power-code-sdk/lib/'; +import { dataSourcesInfo } from '../../.power/appschemas/dataSourcesInfo'; +import type { IOperationResult } from '@pa-client/power-code-sdk/lib/'; +import type { IGetOptions, IGetAllOptions } from '../Models/CommonModels'; +import type { contacts } from '../Models/contactsModel'; + +export class contactsService { + private static readonly dataSourceName = 'contacts'; + + public static async create(record: Omit): Promise> { + const result = await getPowerSdkInstance(dataSourcesInfo).Data.createRecordAsync, contacts>( + contactsService.dataSourceName, + record + ); + return result; + } + + public static async update(id: string, changedFields: Partial>): Promise> { + const result = await getPowerSdkInstance(dataSourcesInfo).Data.updateRecordAsync>, contacts>( + contactsService.dataSourceName, + id.toString(), + changedFields + ); + return result; + } + + public static async delete(id: string): Promise { + await getPowerSdkInstance(dataSourcesInfo).Data.deleteRecordAsync(contactsService.dataSourceName, id.toString()); + } + + public static async get(id: string, options?: IGetOptions): Promise> { + const result = await getPowerSdkInstance(dataSourcesInfo).Data.retrieveRecordAsync( + contactsService.dataSourceName, + id.toString(), + options + ); + return result; + } + + public static async getAll(options?: IGetAllOptions): Promise> { + const result = await getPowerSdkInstance(dataSourcesInfo).Data.retrieveMultipleRecordsAsync( + contactsService.dataSourceName, + options + ); + return result; + } +} diff --git a/samples/DataverseFluentTeamsInspired/src/assets/react.svg b/samples/DataverseFluentTeamsInspired/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/src/components/common/AboutCard.tsx b/samples/DataverseFluentTeamsInspired/src/components/common/AboutCard.tsx new file mode 100644 index 0000000..edc463e --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/common/AboutCard.tsx @@ -0,0 +1,40 @@ +import { CardHeader, CardPreview, Title1, Title2, Body1 } from '@fluentui/react-components' +import CommonCard from './CommonCard' +import { STYLE_CONSTANTS, COMMON_STYLES } from '../../constants/styles' +import reactLogo from '../../assets/react.svg' +import viteLogo from '/vite.svg' + +interface AboutCardProps { + style?: React.CSSProperties +} + +const AboutCard: React.FC = ({ style }) => { + return ( + + +
+ Vite logo + + + React logo +
+
+ About this Power Platform Code App} + description={ + + This application is built with React + TypeScript + Vite and integrated with Microsoft's Fluent UI design system. + It connects to Dataverse and Office 365 services, providing a modern Teams-inspired interface for Power Platform development. + + } + /> +
+ ) +} + +export default AboutCard diff --git a/samples/DataverseFluentTeamsInspired/src/components/common/BasePage.tsx b/samples/DataverseFluentTeamsInspired/src/components/common/BasePage.tsx new file mode 100644 index 0000000..070f9f0 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/common/BasePage.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import { makeStyles, tokens } from '@fluentui/react-components'; + +const useStyles = makeStyles({ + page: { + display: 'flex', + flexDirection: 'column', + height: '100vh', + width: '100%', + overflow: 'hidden', + }, + header: { + position: 'sticky', + top: 0, + zIndex: 10, + backgroundColor: tokens.colorNeutralBackground1, + padding: '16px 24px', + flexShrink: 0, // Don't shrink the header + }, + content: { + flex: 1, + overflow: 'auto', + padding: '0px 24px 24px 24px', // No top padding for seamless header-content connection + }, + contentNoHeader: { + flex: 1, + overflow: 'auto', + padding: '24px', + height: '100vh', + } +}); + +interface BasePageProps { + header?: React.ReactNode; + children: React.ReactNode; +} + +const BasePage: React.FC = ({ header, children }) => { + const styles = useStyles(); + + return ( +
+ {header && ( +
+ {header} +
+ )} +
+ {children} +
+
+ ); +}; + +export default BasePage; \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/src/components/common/CommonCard.tsx b/samples/DataverseFluentTeamsInspired/src/components/common/CommonCard.tsx new file mode 100644 index 0000000..12ec456 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/common/CommonCard.tsx @@ -0,0 +1,17 @@ +import { Card } from '@fluentui/react-components' +import { COMMON_STYLES } from '../../constants/styles' + +interface CommonCardProps { + children: React.ReactNode + style?: React.CSSProperties +} + +const CommonCard: React.FC = ({ children, style }) => { + return ( + + {children} + + ) +} + +export default CommonCard diff --git a/samples/DataverseFluentTeamsInspired/src/components/common/ConfirmDialog.tsx b/samples/DataverseFluentTeamsInspired/src/components/common/ConfirmDialog.tsx new file mode 100644 index 0000000..9353367 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/common/ConfirmDialog.tsx @@ -0,0 +1,106 @@ +import React from 'react'; +import { makeStyles } from '@fluentui/react-components'; +import { + Dialog, + DialogSurface, + DialogTitle, + DialogContent, + DialogBody, + DialogActions, + Button, + tokens, +} from '@fluentui/react-components'; + +export interface ConfirmDialogProps { + open: boolean; + title?: string; + message: React.ReactNode; + confirmLabel?: string; + cancelLabel?: string; + onConfirm: () => void | Promise; + onCancel: () => void; + loading?: boolean; + disabled?: boolean; + /** Optional width control */ + maxWidth?: string | number; + /** Predefined sizing shortcut; ignored if maxWidth provided */ + size?: 'small' | 'medium' | 'large'; + /** Prevent message text wrapping (may overflow on very small screens) */ + nowrap?: boolean; +} + +const useStyles = makeStyles({ + messageContainer: { + width: '100%', + display: 'block', + whiteSpace: 'normal', + wordBreak: 'break-word', + lineHeight: '1.4', + flexGrow: 1, + minWidth: 0, + }, + messageInner: { + width: '100%', + display: 'block', + margin: 0, + }, + body: { + width: '100%', + flexGrow: 1, + display: 'block', + }, + actions: { + marginTop: tokens.spacingVerticalM, + }, +}); + +// Reusable confirmation dialog following Fluent UI v9 patterns. +const ConfirmDialog: React.FC = ({ + open, + title = 'Confirm', + message, + confirmLabel = 'Confirm', + cancelLabel = 'Cancel', + onConfirm, + onCancel, + loading = false, + disabled = false, + maxWidth, + size = 'small', + nowrap = false, +}) => { + const widthBySize: Record = { + small: '420px', + medium: '560px', + large: '680px', + }; + const surfaceMaxWidth = maxWidth ?? widthBySize[size] ?? widthBySize.small; + const styles = useStyles(); + + return ( + { if (!data.open && !loading) onCancel(); }}> + + {title} + + +
+ {typeof message === 'string' ? ( +
{message}
+ ) : ( +
{message}
+ )} +
+
+ + + + +
+
+
+ ); +}; + +export default ConfirmDialog; diff --git a/samples/DataverseFluentTeamsInspired/src/components/common/ErrorAlert.tsx b/samples/DataverseFluentTeamsInspired/src/components/common/ErrorAlert.tsx new file mode 100644 index 0000000..9fd75ed --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/common/ErrorAlert.tsx @@ -0,0 +1,25 @@ +import { Text } from '@fluentui/react-components' + +interface ErrorAlertProps { + error: string + maxWidth?: string +} + +const ErrorAlert: React.FC = ({ error, maxWidth = '400px' }) => { + return ( +
+ Error loading user profile +
+ {error} +
+ ) +} + +export default ErrorAlert diff --git a/samples/DataverseFluentTeamsInspired/src/components/common/NavigationButton.tsx b/samples/DataverseFluentTeamsInspired/src/components/common/NavigationButton.tsx new file mode 100644 index 0000000..80fad8e --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/common/NavigationButton.tsx @@ -0,0 +1,80 @@ +import React from 'react' +import { tokens } from '@fluentui/react-components' + +interface NavigationButtonProps { + icon: React.ReactElement + label: string + onClick: () => void + className?: string + isActive?: boolean +} + +const NavigationButton: React.FC = ({ + icon, + label, + onClick, + className, + isActive = false +}) => { + // Teams-style design: blue vertical line + blue icon/text for selected state + const containerStyle: React.CSSProperties = { + position: 'relative', + width: '100%', + height: '60px', + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + cursor: 'pointer', + backgroundColor: 'transparent', // No background change - Teams style + color: isActive ? tokens.colorBrandForeground1 : tokens.colorNeutralForeground1, + border: 'none', + borderRadius: '0', + padding: '8px 4px', + gap: '2px', + transition: 'all 0.2s ease', + } + + // Blue vertical line overlay for selected state + // Selection indicator: positioned so it sits flush with the outer left edge of the sidebar. + // Sidebar has 4px horizontal padding; button sits inside. Using -4px compensates exactly. + const blueLineStyle: React.CSSProperties = { + position: 'absolute', + left: '-6px', // Slightly closer to extreme left edge + top: '6px', + bottom: '6px', + width: '2px', // Thinner + backgroundColor: tokens.colorBrandBackground, + borderRadius: '0 3px 3px 0', + boxShadow: `0 0 0 1px ${tokens.colorNeutralBackground2}`, + display: isActive ? 'block' : 'none', + } + + return ( + + ) +} + +export default NavigationButton diff --git a/samples/DataverseFluentTeamsInspired/src/components/common/ThemeToggleCard.tsx b/samples/DataverseFluentTeamsInspired/src/components/common/ThemeToggleCard.tsx new file mode 100644 index 0000000..846d3f4 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/common/ThemeToggleCard.tsx @@ -0,0 +1,63 @@ +import React from 'react' +import { Card, CardHeader, Title3, Switch, Label } from '@fluentui/react-components' +import { COMMON_STYLES, STYLE_CONSTANTS } from '../../constants/styles' + +interface ThemeToggleCardProps { + isDarkTheme: boolean + onThemeToggle: () => void + style?: React.CSSProperties +} + +const ThemeToggleCard: React.FC = ({ isDarkTheme, onThemeToggle, style }) => { + return ( + + Theme Settings} + /> + +
+ {/* Dark Mode Setting */} +
+ + +
+ + {/* Future theme settings can be added here */} + {/* Example: +
+ + {}} + /> +
+ */} +
+
+ ) +} + +export default ThemeToggleCard diff --git a/samples/DataverseFluentTeamsInspired/src/components/common/UserProfile.tsx b/samples/DataverseFluentTeamsInspired/src/components/common/UserProfile.tsx new file mode 100644 index 0000000..fd1d666 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/common/UserProfile.tsx @@ -0,0 +1,91 @@ +import React from 'react' +import { + Avatar, + Text, + Tooltip, + Popover, + PopoverTrigger, + PopoverSurface, + tokens +} from '@fluentui/react-components' +import type { GraphUser_V1 } from '../../Models/Office365UsersModel' +import { COMMON_STYLES } from '../../constants/styles' + +interface UserProfileProps { + user: GraphUser_V1 + userPhoto?: string | null + isPopoverOpen: boolean + onPopoverOpenChange: (open: boolean) => void + className?: string +} + +const UserProfile: React.FC = ({ + user, + userPhoto, + isPopoverOpen, + onPopoverOpenChange, + className +}) => { + const displayName = user.displayName || `${user.givenName || ''} ${user.surname || ''}`.trim() + + return ( + onPopoverOpenChange(data.open)} + positioning="below-end" + > + + + + + + +
+ +
+ + {displayName} + +
+ + {user.mail} + +
+
+
+ + Office 365 User Profile + +
+ + Connected via Power Platform + +
+
+
+ ) +} + +export default UserProfile diff --git a/samples/DataverseFluentTeamsInspired/src/components/common/index.ts b/samples/DataverseFluentTeamsInspired/src/components/common/index.ts new file mode 100644 index 0000000..808dfc7 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/common/index.ts @@ -0,0 +1,8 @@ +export { default as ErrorAlert } from './ErrorAlert' +export { default as NavigationButton } from './NavigationButton' +export { default as UserProfile } from './UserProfile' +export { default as AboutCard } from './AboutCard' +export { default as ThemeToggleCard } from './ThemeToggleCard' +// CenteredContent removed (unused) +export { default as BasePage } from './BasePage' +export { default as ConfirmDialog } from './ConfirmDialog' diff --git a/samples/DataverseFluentTeamsInspired/src/components/form/PhoneField.tsx b/samples/DataverseFluentTeamsInspired/src/components/form/PhoneField.tsx new file mode 100644 index 0000000..3854cbe --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/form/PhoneField.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { Field, Input } from '@fluentui/react-components'; +import { sanitizePhoneInput, formatPhone, getPhoneError } from '../../utils/validation'; + +export interface PhoneFieldProps { + value: string; + onChange: (value: string) => void; + label?: string; + required?: boolean; + disabled?: boolean; + placeholder?: string; +} + +export const PhoneField: React.FC = ({ + value, + onChange, + label = 'Phone', + required, + disabled, + placeholder = 'Enter phone number' +}) => { + const error = getPhoneError(value); + return ( + + onChange(sanitizePhoneInput(d.value))} + onBlur={() => onChange(formatPhone(value))} + placeholder={placeholder} + /> + + ); +}; + +export default PhoneField; diff --git a/samples/DataverseFluentTeamsInspired/src/components/index.ts b/samples/DataverseFluentTeamsInspired/src/components/index.ts new file mode 100644 index 0000000..68f83b6 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/index.ts @@ -0,0 +1,2 @@ +export * from './common' +export * from './layout' diff --git a/samples/DataverseFluentTeamsInspired/src/components/layout/Sidebar.tsx b/samples/DataverseFluentTeamsInspired/src/components/layout/Sidebar.tsx new file mode 100644 index 0000000..ca6a3ae --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/layout/Sidebar.tsx @@ -0,0 +1,69 @@ +import React from 'react' +import NavigationButton from '../common/NavigationButton' +import { + ContactCard24Regular, + Building24Regular, + Lightbulb24Regular, + Settings24Regular +} from '@fluentui/react-icons' + +interface SidebarProps { + currentPage: string + onPageChange: (page: string) => void + className?: string + buttonClassName?: string +} + +const mainNavigationItems = [ + { key: 'Contacts', icon: , label: 'Contacts' }, + { key: 'Accounts', icon: , label: 'Accounts' }, + { key: 'Starter', icon: , label: 'Starter' }, +] + +const bottomNavigationItems = [ + { key: 'Settings', icon: , label: 'Settings' } +] + +const Sidebar: React.FC = ({ + currentPage, + onPageChange, + className, + buttonClassName +}) => { + return ( +
+ {/* Main navigation items */} +
+ {mainNavigationItems.map((item) => ( + onPageChange(item.key)} + className={buttonClassName} + isActive={currentPage === item.key} + /> + ))} +
+ + {/* Spacer to push bottom items down */} +
+ + {/* Bottom navigation items (Settings) */} +
+ {bottomNavigationItems.map((item) => ( + onPageChange(item.key)} + className={buttonClassName} + isActive={currentPage === item.key} + /> + ))} +
+
+ ) +} + +export default Sidebar diff --git a/samples/DataverseFluentTeamsInspired/src/components/layout/TitleBar.tsx b/samples/DataverseFluentTeamsInspired/src/components/layout/TitleBar.tsx new file mode 100644 index 0000000..f961db1 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/layout/TitleBar.tsx @@ -0,0 +1,47 @@ +import React from 'react' +import { Button, Text } from '@fluentui/react-components' +import { WeatherSunny24Regular, WeatherMoon24Regular } from '@fluentui/react-icons' +import { COMMON_STYLES, STYLE_CONSTANTS } from '../../constants/styles' +// Import assets through Vite so URLs are resolved correctly under HTTPS wrappers +import reactLogo from '../../assets/react.svg' + +interface TitleBarProps { + isDarkTheme: boolean + onThemeToggle: () => void + userProfileComponent: React.ReactNode + className?: string +} + +const TitleBar: React.FC = ({ + isDarkTheme, + onThemeToggle, + userProfileComponent, + className +}) => { + return ( +
+
+ React logo + + Power Platform Code App using Dataverse (Fluent UI React v9 & Teams inspired) + +
+ +
+
+
+ ) +} + +export default TitleBar diff --git a/samples/DataverseFluentTeamsInspired/src/components/layout/index.ts b/samples/DataverseFluentTeamsInspired/src/components/layout/index.ts new file mode 100644 index 0000000..ae35786 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/components/layout/index.ts @@ -0,0 +1,2 @@ +export { default as TitleBar } from './TitleBar' +export { default as Sidebar } from './Sidebar' diff --git a/samples/DataverseFluentTeamsInspired/src/constants/styles.ts b/samples/DataverseFluentTeamsInspired/src/constants/styles.ts new file mode 100644 index 0000000..c09e0a0 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/constants/styles.ts @@ -0,0 +1,85 @@ +// Common style constants and patterns used across components +// Following Fluent UI design tokens and Microsoft Teams patterns + +export const STYLE_CONSTANTS = { + // Card dimensions - used by InteractiveCounter and AboutCard + CARD: { + width: '400px', + maxWidth: '90%', + }, + + // Settings page card dimensions - wider cards for settings + SETTINGS_CARD: { + width: '800px', // Double the standard width + maxWidth: '90%', + }, + + // Common opacity values for secondary text + OPACITY: { + SECONDARY: 0.7, + }, + + // Spacing values following Fluent design tokens + SPACING: { + MD: '16px', + LG: '24px', + }, + + // Common layout patterns + LAYOUT: { + PAGE_PADDING: '24px 24px 20px 24px', + ICON_SIZE: { + width: '24px', + height: '24px', + }, + }, +} as const + +// Common style combinations +export const COMMON_STYLES = { + // Card with standard dimensions + standardCard: { + width: STYLE_CONSTANTS.CARD.width, + maxWidth: STYLE_CONSTANTS.CARD.maxWidth, + minHeight: 'fit-content', // Maintain content-based height + flexShrink: 0, // Prevent shrinking + }, + + // Card with settings page dimensions (wider) + settingsCard: { + width: STYLE_CONSTANTS.SETTINGS_CARD.width, + maxWidth: STYLE_CONSTANTS.SETTINGS_CARD.maxWidth, + minHeight: 'fit-content', // Maintain content-based height + flexShrink: 0, // Prevent shrinking + }, + + // Secondary text styling + secondaryText: { + opacity: STYLE_CONSTANTS.OPACITY.SECONDARY, + }, + + // Page title styling + pageTitle: { + marginBottom: STYLE_CONSTANTS.SPACING.MD, + marginTop: '0', + }, + + // Icon styling + icon: STYLE_CONSTANTS.LAYOUT.ICON_SIZE, + + // Row layouts + centeredRow: { + display: 'flex', + alignItems: 'center', + flexShrink: 1, + minWidth: 0, + }, + + rightAlignedRow: { + display: 'flex', + alignItems: 'center', + gap: STYLE_CONSTANTS.SPACING.MD, + flexShrink: 0, + marginRight: '0', + }, +} as const diff --git a/samples/DataverseFluentTeamsInspired/src/contexts/powerRuntimeContext.ts b/samples/DataverseFluentTeamsInspired/src/contexts/powerRuntimeContext.ts new file mode 100644 index 0000000..814bfb0 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/contexts/powerRuntimeContext.ts @@ -0,0 +1,9 @@ +import { createContext } from 'react'; + +export type PowerRuntimeContextType = { + isReady: boolean; + error: string | null; + initializedAt: string | null; +}; + +export const PowerRuntimeContext = createContext(undefined); diff --git a/samples/DataverseFluentTeamsInspired/src/hooks/index.ts b/samples/DataverseFluentTeamsInspired/src/hooks/index.ts new file mode 100644 index 0000000..5a91cab --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/hooks/index.ts @@ -0,0 +1,5 @@ +export { useUserProfile } from './useUserProfile' +// usePageAlignment removed +export { useDebouncedValue } from './useDebouncedValue' +export { useStatusMessage } from './useStatusMessage' + diff --git a/samples/DataverseFluentTeamsInspired/src/hooks/useDebouncedValue.ts b/samples/DataverseFluentTeamsInspired/src/hooks/useDebouncedValue.ts new file mode 100644 index 0000000..6e2b86f --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/hooks/useDebouncedValue.ts @@ -0,0 +1,10 @@ +import { useEffect, useState } from 'react'; + +export function useDebouncedValue(value: T, delay = 250): T { + const [debounced, setDebounced] = useState(value); + useEffect(() => { + const id = setTimeout(() => setDebounced(value), delay); + return () => clearTimeout(id); + }, [value, delay]); + return debounced; +} diff --git a/samples/DataverseFluentTeamsInspired/src/hooks/usePowerRuntime.ts b/samples/DataverseFluentTeamsInspired/src/hooks/usePowerRuntime.ts new file mode 100644 index 0000000..bb607b5 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/hooks/usePowerRuntime.ts @@ -0,0 +1,8 @@ +import { useContext } from 'react'; +import { PowerRuntimeContext, type PowerRuntimeContextType } from '../contexts/powerRuntimeContext'; + +export function usePowerRuntime(): PowerRuntimeContextType { + const ctx = useContext(PowerRuntimeContext); + if (!ctx) throw new Error('usePowerRuntime must be used within PowerProvider'); + return ctx; +} diff --git a/samples/DataverseFluentTeamsInspired/src/hooks/useStatusMessage.ts b/samples/DataverseFluentTeamsInspired/src/hooks/useStatusMessage.ts new file mode 100644 index 0000000..9a3548d --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/hooks/useStatusMessage.ts @@ -0,0 +1,25 @@ +import { useCallback, useState } from 'react'; + +export interface StatusMessage { + intent: 'success' | 'error' | 'warning' | 'info'; + text: string; + id: number; +} + +export function useStatusMessage(timeoutMs = 6000) { + const [message, setMessage] = useState(null); + + const show = useCallback((intent: StatusMessage['intent'], text: string) => { + const id = Date.now(); + setMessage({ intent, text, id }); + if (timeoutMs > 0) { + setTimeout(() => { + setMessage(current => (current && current.id === id ? null : current)); + }, timeoutMs); + } + }, [timeoutMs]); + + const clear = useCallback(() => setMessage(null), []); + + return { message, showSuccess: (t: string) => show('success', t), showError: (t: string) => show('error', t), clear }; +} diff --git a/samples/DataverseFluentTeamsInspired/src/hooks/useUserProfile.ts b/samples/DataverseFluentTeamsInspired/src/hooks/useUserProfile.ts new file mode 100644 index 0000000..2fc3444 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/hooks/useUserProfile.ts @@ -0,0 +1,63 @@ +import { useState, useEffect } from 'react' +import { Office365UsersService } from '../Services/Office365UsersService' +import type { GraphUser_V1 } from '../Models/Office365UsersModel' +import { usePowerRuntime } from './usePowerRuntime' + +interface UseUserProfileReturn { + user: GraphUser_V1 | null + userPhoto: string | null + loading: boolean + error: string | null +} + +export const useUserProfile = (): UseUserProfileReturn => { + const [user, setUser] = useState(null) + const [userPhoto, setUserPhoto] = useState(null) + const [loading, setLoading] = useState(true) + const [error, setError] = useState(null) + + const { isReady } = usePowerRuntime() + + useEffect(() => { + if (!isReady) return + const loadUserProfile = async () => { + try { + console.log('Starting to load user profile...') + + // Get user profile + const profileResult = await Office365UsersService.MyProfile_V2('displayName,mail,givenName,surname,id') + console.log('Profile result:', profileResult) + + if (profileResult.success && profileResult.data) { + console.log('Profile data:', profileResult.data) + setUser(profileResult.data) + + // Get user photo using the user ID + if (profileResult.data.id) { + console.log('Loading photo for user ID:', profileResult.data.id) + const photoResult = await Office365UsersService.UserPhoto_V2(profileResult.data.id) + console.log('Photo result:', photoResult) + + if (photoResult.success && photoResult.data) { + setUserPhoto(photoResult.data) + } else { + console.log('Photo failed or no data:', photoResult.error) + } + } + } else { + console.error('Profile request failed:', profileResult.error) + setError(profileResult.error || 'Unknown error loading profile') + } + } catch (error) { + console.error('Error loading user profile:', error) + setError(error instanceof Error ? error.message : 'Unknown error') + } finally { + setLoading(false) + } + } + + loadUserProfile() + }, [isReady]) + + return { user, userPhoto, loading, error } +} diff --git a/samples/DataverseFluentTeamsInspired/src/index.css b/samples/DataverseFluentTeamsInspired/src/index.css new file mode 100644 index 0000000..af5a267 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/index.css @@ -0,0 +1,19 @@ +/* Essential global styles for Power Platform Code App */ +/* Fluent UI handles all component styling */ + +html, +body { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + overflow: hidden; +} + +#root { + width: 100vw; + height: 100vh; + margin: 0; + padding: 0; + overflow: hidden; +} \ No newline at end of file diff --git a/samples/DataverseFluentTeamsInspired/src/main.tsx b/samples/DataverseFluentTeamsInspired/src/main.tsx new file mode 100644 index 0000000..e6308db --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/main.tsx @@ -0,0 +1,13 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' +import PowerProvider from './PowerProvider.tsx' + +createRoot(document.getElementById('root')!).render( + + + + + , +) diff --git a/samples/DataverseFluentTeamsInspired/src/pages/AccountsPage.tsx b/samples/DataverseFluentTeamsInspired/src/pages/AccountsPage.tsx new file mode 100644 index 0000000..40008a4 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/pages/AccountsPage.tsx @@ -0,0 +1,597 @@ +import React, { useState, useEffect, useMemo, useCallback } from 'react'; +import { + Button, + Input, + Dialog, + DialogSurface, + DialogTitle, + DialogContent, + DialogBody, + DialogActions, + Field, + DataGrid, + DataGridHeader, + DataGridHeaderCell, + DataGridBody, + DataGridRow, + DataGridCell, + createTableColumn, + type TableColumnDefinition, + MessageBar, + MessageBarBody, + MessageBarActions, + Spinner, + SearchBox, + Text, + makeStyles, + tokens, + Title1, +} from '@fluentui/react-components'; +import { + AddRegular, + EditRegular, + DeleteRegular, + SearchRegular, + ArrowClockwiseRegular, + DismissRegular, +} from '@fluentui/react-icons'; +import { accountsService } from '../Services/accountsService'; +import type { accounts } from '../Models/accountsModel'; +import { usePowerRuntime } from '../hooks/usePowerRuntime'; +import BasePage from '../components/common/BasePage'; +import { ConfirmDialog } from '../components/common'; +import { getEmailError, coercePhone } from '../utils/validation'; +import { PhoneField } from '../components/form/PhoneField'; +import { useDebouncedValue, useStatusMessage } from '../hooks'; + +const useStyles = makeStyles({ + headerContainer: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalS, + }, + topRow: { + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + width: '100%', + gap: tokens.spacingHorizontalXL, + }, + titleGroup: { + display: 'flex', + alignItems: 'center', + gap: tokens.spacingHorizontalS, + minWidth: 0, + }, + actionsGroup: { + display: 'flex', + alignItems: 'center', + gap: tokens.spacingHorizontalM, + }, + searchBox: { + width: '340px', + }, + fullWidthContainer: { + // Expand to match the header content width exactly + width: 'calc(100% + 48px)', // Account for the 24px padding on each side + marginLeft: '-24px', + marginRight: '-24px', + paddingLeft: '24px', + paddingRight: '24px', + boxSizing: 'border-box', + }, + gridContainer: { + border: `1px solid ${tokens.colorNeutralStroke2}`, + borderRadius: tokens.borderRadiusMedium, + overflow: 'hidden', + }, + actionButton: { + minWidth: 'auto', + }, + loadingContainer: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + height: '200px', + }, + emptyState: { + textAlign: 'center', + padding: tokens.spacingVerticalXXL, + color: tokens.colorNeutralForeground3, + }, + accountForm: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalM, + marginTop: tokens.spacingVerticalXS, + width: '100%', + // About 15% narrower than original 420px + minWidth: '360px', + boxSizing: 'border-box' + }, + narrowDialogSurface: { + // ~15% narrower than default ~500px + maxWidth: '430px', + width: '100%' + }, + fullWidthField: { + width: '100%', + '& > *': { width: '100%' } + }, + fullWidthInput: { + width: '100%', + maxWidth: '100%', + boxSizing: 'border-box' + }, +}); + +interface AccountFormData { + name: string; + accountnumber?: string; + emailaddress1?: string; + address1_telephone1?: string; + websiteurl?: string; +} + +const emptyAccount: AccountFormData = { + name: '', + accountnumber: '', + emailaddress1: '', + address1_telephone1: '', + websiteurl: '', +}; + +export const AccountsPage: React.FC = () => { + const styles = useStyles(); + const { isReady } = usePowerRuntime(); + const [accounts, setAccounts] = useState([]); + const [filteredAccounts, setFilteredAccounts] = useState([]); + const [loading, setLoading] = useState(true); + const [searchTerm, setSearchTerm] = useState(''); + const debouncedSearch = useDebouncedValue(searchTerm, 300); + const [error, setError] = useState(null); + const { message, showSuccess, showError, clear } = useStatusMessage(); + + // Form state + const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false); + const [isEditDialogOpen, setIsEditDialogOpen] = useState(false); + const [formData, setFormData] = useState(emptyAccount); + const [editingAccountId, setEditingAccountId] = useState(null); + const [isSubmitting, setIsSubmitting] = useState(false); + // Delete confirmation state + const [deleteTarget, setDeleteTarget] = useState(null); + const [isDeleting, setIsDeleting] = useState(false); + const emailError = useMemo(() => getEmailError(formData.emailaddress1), [formData.emailaddress1]); + // Phone validation handled internally by PhoneField + + // Load accounts + const loadAccounts = useCallback(async () => { + if (!isReady) return; + + setLoading(true); + setError(null); + + try { + const result = await accountsService.getAll({ + orderBy: ['name'], + top: 100 + }); + if (result?.success) { + const accountsList = (result.data as accounts[]) || []; + setAccounts(accountsList); + setFilteredAccounts(accountsList); + } else { + setError('Failed to load accounts'); + setAccounts([]); + setFilteredAccounts([]); + } + } catch (err) { + setError(err instanceof Error ? err.message : 'Failed to load accounts'); + setAccounts([]); + setFilteredAccounts([]); + } finally { + setLoading(false); + } + }, [isReady]); + + // Search filtering + useEffect(() => { + if (!debouncedSearch.trim()) { + setFilteredAccounts(accounts); + } else { + const filtered = accounts.filter(account => + account.name?.toLowerCase().includes(debouncedSearch.toLowerCase()) || + account.emailaddress1?.toLowerCase().includes(debouncedSearch.toLowerCase()) || + account.address1_telephone1?.toLowerCase().includes(debouncedSearch.toLowerCase()) || + account.websiteurl?.toLowerCase().includes(debouncedSearch.toLowerCase()) || + account.accountnumber?.toLowerCase().includes(debouncedSearch.toLowerCase()) + ); + setFilteredAccounts(filtered); + } + }, [accounts, debouncedSearch]); + + // Load accounts when ready + useEffect(() => { + loadAccounts(); + }, [loadAccounts]); + + // Form handlers + const handleInputChange = (field: keyof AccountFormData, value: string) => { + setFormData(prev => ({ ...prev, [field]: value })); + }; + + const handleCreate = () => { + setFormData(emptyAccount); + setIsCreateDialogOpen(true); + }; + + const handleEdit = useCallback((account: accounts) => { + setFormData({ + name: account.name || '', + accountnumber: account.accountnumber || '', + emailaddress1: account.emailaddress1 || '', + address1_telephone1: account.address1_telephone1 || '', + websiteurl: account.websiteurl || '', + }); + setEditingAccountId(account.accountid || ''); + setIsEditDialogOpen(true); + }, []); + + const promptDelete = useCallback((account: accounts) => { + setDeleteTarget(account); + }, []); + + const handleConfirmDelete = useCallback(async () => { + if (!deleteTarget?.accountid) { + setDeleteTarget(null); + return; + } + setIsDeleting(true); + try { + await accountsService.delete(deleteTarget.accountid); + showSuccess('Account deleted successfully'); + setDeleteTarget(null); + loadAccounts(); + } catch (err) { + setError(err instanceof Error ? err.message : 'Failed to delete account'); + } finally { + setIsDeleting(false); + } + }, [deleteTarget, loadAccounts, showSuccess]); + + const handleSubmitCreate = async () => { + if (!formData.name.trim()) { + setError('Account name is required'); + return; + } + if (emailError) { + setError('Please fix validation errors before submitting'); + return; + } + + setIsSubmitting(true); + setError(null); + + try { + const prepared: AccountFormData = { + ...formData, + address1_telephone1: coercePhone(formData.address1_telephone1) + }; + const result = await accountsService.create(prepared as Omit); + if (result?.success) { + showSuccess('Account created successfully'); + setIsCreateDialogOpen(false); + setFormData(emptyAccount); + // Clear search so the newly added account is visible + setSearchTerm(''); + loadAccounts(); + } else { + showError('Failed to create account'); + } + } catch (err) { + showError(err instanceof Error ? err.message : 'Failed to create account'); + } finally { + setIsSubmitting(false); + } + }; + + const handleSubmitEdit = async () => { + if (!formData.name.trim() || !editingAccountId) { + setError('Account name is required'); + return; + } + if (emailError) { + setError('Please fix validation errors before submitting'); + return; + } + + setIsSubmitting(true); + setError(null); + + try { + const prepared: AccountFormData = { + ...formData, + address1_telephone1: coercePhone(formData.address1_telephone1) + }; + const result = await accountsService.update(editingAccountId, prepared); + if (result?.success) { + showSuccess('Account updated successfully'); + setIsEditDialogOpen(false); + setFormData(emptyAccount); + setEditingAccountId(null); + loadAccounts(); + } else { + showError('Failed to update account'); + } + } catch (err) { + showError(err instanceof Error ? err.message : 'Failed to update account'); + } finally { + setIsSubmitting(false); + } + }; + + // Column definitions + const columns: TableColumnDefinition[] = useMemo(() => [ + createTableColumn({ + columnId: 'name', + compare: (a, b) => (a.name || '').localeCompare(b.name || ''), + renderHeaderCell: () => 'Name', + renderCell: (account) => account.name || '-', + }), + createTableColumn({ + columnId: 'accountnumber', + compare: (a, b) => (a.accountnumber || '').localeCompare(b.accountnumber || ''), + renderHeaderCell: () => 'Account Number', + renderCell: (account) => account.accountnumber || '-', + }), + createTableColumn({ + columnId: 'email', + compare: (a, b) => (a.emailaddress1 || '').localeCompare(b.emailaddress1 || ''), + renderHeaderCell: () => 'Email', + renderCell: (account) => account.emailaddress1 || '-', + }), + createTableColumn({ + columnId: 'phone', + compare: (a, b) => (a.address1_telephone1 || '').localeCompare(b.address1_telephone1 || ''), + renderHeaderCell: () => 'Phone', + renderCell: (account) => account.address1_telephone1 || '-', + }), + createTableColumn({ + columnId: 'website', + compare: (a, b) => (a.websiteurl || '').localeCompare(b.websiteurl || ''), + renderHeaderCell: () => 'Website', + renderCell: (account) => account.websiteurl || '-', + }), + createTableColumn({ + columnId: 'actions', + renderHeaderCell: () => 'Actions', + renderCell: (account) => ( +
+
+ ), + }), + ], [handleEdit, promptDelete]); + + const headerContent = ( +
+ {/* Top Row with Title + Refresh (left) and Search + New Account (right) */} +
+
+ Accounts +
+
+ setSearchTerm(data.value)} + contentBefore={} + className={styles.searchBox} + /> + +
+
+ + {/* Messages */} + {error && ( + + {error} + + )} + {message && ( + + {message.text} + +
+ ); + + return ( + + {/* Data Grid */} + {loading ? ( +
+ + Loading accounts... +
+ ) : filteredAccounts.length === 0 ? ( +
+ + {searchTerm ? 'No accounts found matching your search.' : 'No accounts found.'} + +
+ ) : ( +
+ account.accountid ?? crypto.randomUUID()} + aria-label="Accounts data grid" + > + + + {({ renderHeaderCell }) => ( + {renderHeaderCell()} + )} + + + > + {({ item, rowId }) => ( + key={rowId}> + {({ renderCell }) => ( + {renderCell(item)} + )} + + )} + + +
+ )} + + {/* Create Dialog */} + setIsCreateDialogOpen(data.open)}> + + + Create New Account + +
{ e.preventDefault(); void handleSubmitCreate(); }} className={styles.accountForm}> + + handleInputChange('name', data.value)} + placeholder="Enter account name" required /> + + + handleInputChange('accountnumber', data.value)} + placeholder="Enter account number" /> + + + handleInputChange('emailaddress1', data.value)} + placeholder="Enter email address" + aria-invalid={!!emailError} /> + + handleInputChange('address1_telephone1', v)} /> + + handleInputChange('websiteurl', data.value)} + placeholder="Enter website URL" /> + + + + + + +
+
+
+
+ + {/* Edit Dialog */} + setIsEditDialogOpen(data.open)}> + + + Edit Account + +
{ e.preventDefault(); void handleSubmitEdit(); }} className={styles.accountForm}> + + handleInputChange('name', data.value)} + placeholder="Enter account name" required /> + + + handleInputChange('accountnumber', data.value)} + placeholder="Enter account number" /> + + + handleInputChange('emailaddress1', data.value)} + placeholder="Enter email address" + aria-invalid={!!emailError} /> + + handleInputChange('address1_telephone1', v)} /> + + handleInputChange('websiteurl', data.value)} + placeholder="Enter website URL" /> + + + + + + +
+
+
+
+ + Are you sure you want to delete {deleteTarget?.name || 'this account'}? This action cannot be undone.} + confirmLabel="Delete" + cancelLabel="Cancel" + onCancel={() => setDeleteTarget(null)} + onConfirm={handleConfirmDelete} + loading={isDeleting} + disabled={false} + size="large" + maxWidth="510px" + /> +
+ ); +}; + +export default AccountsPage; diff --git a/samples/DataverseFluentTeamsInspired/src/pages/ContactsPage.tsx b/samples/DataverseFluentTeamsInspired/src/pages/ContactsPage.tsx new file mode 100644 index 0000000..9ab9f23 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/pages/ContactsPage.tsx @@ -0,0 +1,559 @@ +import React, { useState, useEffect, useMemo, useCallback } from 'react'; +import { + Button, + Input, + Dialog, + DialogTrigger, + DialogSurface, + DialogTitle, + DialogContent, + DialogBody, + DialogActions, + Field, + DataGrid, + DataGridHeader, + DataGridHeaderCell, + DataGridBody, + DataGridRow, + DataGridCell, + createTableColumn, + type TableColumnDefinition, + MessageBar, + MessageBarBody, + MessageBarActions, + Spinner, + SearchBox, + Text, + makeStyles, + tokens, + Title1, +} from '@fluentui/react-components'; +import { + AddRegular, + EditRegular, + DeleteRegular, + SearchRegular, + ArrowClockwiseRegular, + DismissRegular, +} from '@fluentui/react-icons'; +import { contactsService } from '../Services/contactsService'; +import type { contacts } from '../Models/contactsModel'; +import { usePowerRuntime } from '../hooks/usePowerRuntime'; +import BasePage from '../components/common/BasePage'; +import { ConfirmDialog } from '../components/common'; +import { getEmailError, coercePhone } from '../utils/validation'; +import { PhoneField } from '../components/form/PhoneField'; +import { useDebouncedValue, useStatusMessage } from '../hooks'; + +const useStyles = makeStyles({ + headerContainer: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalS, + }, + topRow: { + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + width: '100%', + gap: tokens.spacingHorizontalXL, + }, + titleGroup: { + display: 'flex', + alignItems: 'center', + gap: tokens.spacingHorizontalS, + minWidth: 0, + }, + actionsGroup: { + display: 'flex', + alignItems: 'center', + gap: tokens.spacingHorizontalM, + }, + searchBox: { + width: '340px', + }, + fullWidthContainer: { + // Expand to match the header content width exactly + width: 'calc(100% + 48px)', // Account for the 24px padding on each side + marginLeft: '-24px', + marginRight: '-24px', + paddingLeft: '24px', + paddingRight: '24px', + boxSizing: 'border-box', + }, + gridContainer: { + border: `1px solid ${tokens.colorNeutralStroke2}`, + borderRadius: tokens.borderRadiusMedium, + overflow: 'hidden', + }, + actionButton: { + minWidth: 'auto', + }, + loadingContainer: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + height: '200px', + }, + emptyState: { + textAlign: 'center', + padding: tokens.spacingVerticalXXL, + color: tokens.colorNeutralForeground3, + }, + contactForm: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalM, + marginTop: tokens.spacingVerticalXS, + width: '100%', + // About 15% narrower than original 420px + minWidth: '360px', + boxSizing: 'border-box' + }, + narrowDialogSurface: { + // Constrain overall surface width (~15% narrower than ~500px default) + maxWidth: '430px', + width: '100%' + }, + fullWidthField: { + width: '100%', + '& > *': { width: '100%' } + }, + fullWidthInput: { + width: '100%', + maxWidth: '100%', + boxSizing: 'border-box' + }, +}); + +interface ContactFormData { + firstname?: string; + lastname: string; + emailaddress1?: string; + telephone1?: string; + jobtitle?: string; +} + +const emptyContact: ContactFormData = { + firstname: '', + lastname: '', + emailaddress1: '', + telephone1: '', + jobtitle: '', +}; + +export const ContactsPage: React.FC = () => { + const styles = useStyles(); + const { isReady } = usePowerRuntime(); + const [contacts, setContacts] = useState([]); + const [filteredContacts, setFilteredContacts] = useState([]); + const [loading, setLoading] = useState(true); + const [searchTerm, setSearchTerm] = useState(''); + const debouncedSearch = useDebouncedValue(searchTerm, 300); + const [error, setError] = useState(null); + const { message, showSuccess, showError, clear } = useStatusMessage(); + + // Form state + const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false); + const [isEditDialogOpen, setIsEditDialogOpen] = useState(false); + const [formData, setFormData] = useState(emptyContact); + const [editingContactId, setEditingContactId] = useState(null); + const [isSubmitting, setIsSubmitting] = useState(false); + // Delete confirmation state + const [deleteTarget, setDeleteTarget] = useState(null); + const [isDeleting, setIsDeleting] = useState(false); + const emailError = useMemo(() => getEmailError(formData.emailaddress1), [formData.emailaddress1]); + // Phone validation handled inside PhoneField component + + // Load contacts + const loadContacts = useCallback(async () => { + if (!isReady) return; + + setLoading(true); + setError(null); + + try { + const result = await contactsService.getAll({ + orderBy: ['fullname'], + top: 100 + }); + if (result?.success) { + const contactsList = (result.data as contacts[]) || []; + setContacts(contactsList); + setFilteredContacts(contactsList); + } else { + setError('Failed to load contacts'); + setContacts([]); + setFilteredContacts([]); + } + } catch (err) { + setError(err instanceof Error ? err.message : 'Failed to load contacts'); + setContacts([]); + setFilteredContacts([]); + } finally { + setLoading(false); + } + }, [isReady]); + + // Search filtering + useEffect(() => { + if (!debouncedSearch.trim()) { + setFilteredContacts(contacts); + } else { + const filtered = contacts.filter(contact => + contact.fullname?.toLowerCase().includes(debouncedSearch.toLowerCase()) || + contact.emailaddress1?.toLowerCase().includes(debouncedSearch.toLowerCase()) || + contact.telephone1?.toLowerCase().includes(debouncedSearch.toLowerCase()) || + contact.jobtitle?.toLowerCase().includes(debouncedSearch.toLowerCase()) + ); + setFilteredContacts(filtered); + } + }, [contacts, debouncedSearch]); + + // Load contacts when ready + useEffect(() => { + loadContacts(); + }, [loadContacts]); + + // Form handlers + const handleInputChange = (field: keyof ContactFormData, value: string) => { + setFormData(prev => ({ ...prev, [field]: value })); + }; + + const handleCreate = () => { + setFormData(emptyContact); + setIsCreateDialogOpen(true); + }; + + const handleEdit = useCallback((contact: contacts) => { + setFormData({ + firstname: contact.firstname || '', + lastname: contact.lastname || '', + emailaddress1: contact.emailaddress1 || '', + telephone1: contact.telephone1 || '', + jobtitle: contact.jobtitle || '', + }); + setEditingContactId(contact.contactid || null); + setIsEditDialogOpen(true); + }, []); + + const promptDelete = useCallback((contact: contacts) => { + setDeleteTarget(contact); + }, []); + + const handleConfirmDelete = useCallback(async () => { + if (!deleteTarget?.contactid) { + setDeleteTarget(null); + return; + } + setIsDeleting(true); + try { + await contactsService.delete(deleteTarget.contactid); + showSuccess('Contact deleted successfully'); + setDeleteTarget(null); + loadContacts(); + } catch (err) { + setError(err instanceof Error ? err.message : 'Failed to delete contact'); + } finally { + setIsDeleting(false); + } + }, [deleteTarget, loadContacts, showSuccess]); + + const handleSubmitCreate = async () => { + if (!formData.lastname.trim()) { + setError('Last name is required'); + return; + } + if (emailError) { + setError('Please fix validation errors before submitting'); + return; + } + + setIsSubmitting(true); + setError(null); + + try { + const prepared = { ...formData, telephone1: coercePhone(formData.telephone1) }; + const result = await contactsService.create(prepared as Omit); + if (result?.success) { + showSuccess('Contact created successfully'); + setIsCreateDialogOpen(false); + setFormData(emptyContact); + // Clear search to ensure the newly added contact is visible in full list + setSearchTerm(''); + loadContacts(); + } else { + showError('Failed to create contact'); + } + } catch (err) { + showError(err instanceof Error ? err.message : 'Failed to create contact'); + } finally { + setIsSubmitting(false); + } + }; + + const handleSubmitEdit = async () => { + if (!formData.lastname.trim() || !editingContactId) { + setError('Last name is required'); + return; + } + if (emailError) { + setError('Please fix validation errors before submitting'); + return; + } + + setIsSubmitting(true); + setError(null); + + try { + const prepared = { ...formData, telephone1: coercePhone(formData.telephone1) }; + const result = await contactsService.update(editingContactId, prepared); + if (result?.success) { + showSuccess('Contact updated successfully'); + setIsEditDialogOpen(false); + setFormData(emptyContact); + setEditingContactId(null); + loadContacts(); + } else { + showError('Failed to update contact'); + } + } catch (err) { + showError(err instanceof Error ? err.message : 'Failed to update contact'); + } finally { + setIsSubmitting(false); + } + }; + + // Column definitions + const columns: TableColumnDefinition[] = useMemo(() => [ + createTableColumn({ + columnId: 'name', + compare: (a, b) => (a.fullname || '').localeCompare(b.fullname || ''), + renderHeaderCell: () => 'Name', + renderCell: (contact) => contact.fullname || '-', + }), + createTableColumn({ + columnId: 'email', + compare: (a, b) => (a.emailaddress1 || '').localeCompare(b.emailaddress1 || ''), + renderHeaderCell: () => 'Email', + renderCell: (contact) => contact.emailaddress1 || '-', + }), + createTableColumn({ + columnId: 'phone', + compare: (a, b) => (a.telephone1 || '').localeCompare(b.telephone1 || ''), + renderHeaderCell: () => 'Phone', + renderCell: (contact) => contact.telephone1 || '-', + }), + createTableColumn({ + columnId: 'jobTitle', + compare: (a, b) => (a.jobtitle || '').localeCompare(b.jobtitle || ''), + renderHeaderCell: () => 'Job Title', + renderCell: (contact) => contact.jobtitle || '-', + }), + createTableColumn({ + columnId: 'actions', + renderHeaderCell: () => 'Actions', + renderCell: (contact) => ( +
+
+ ), + }), + ], [handleEdit, promptDelete]); + + const headerContent = ( +
+ {/* Top Row with Title + Refresh (left) and Search + New Contact (right) */} +
+
+ Contacts +
+
+ setSearchTerm(data.value)} + contentBefore={} + className={styles.searchBox} + /> + +
+
+ + {/* Messages */} + {error && ( + + {error} + + )} + {message && ( + + {message.text} + +
+ ); + + return ( + + {/* Data Grid */} + {loading ? ( +
+ + Loading contacts... +
+ ) : filteredContacts.length === 0 ? ( +
+ + {searchTerm ? 'No contacts found matching your search.' : 'No contacts found.'} + +
+ ) : ( +
+ contact.contactid ?? crypto.randomUUID()} + aria-label="Contacts data grid" + > + + + {({ renderHeaderCell }) => ( + {renderHeaderCell()} + )} + + + > + {({ item, rowId }) => ( + key={rowId}> + {({ renderCell }) => ( + {renderCell(item)} + )} + + )} + + +
+ )} + + {/* Create Dialog */} + setIsCreateDialogOpen(data.open)}> + + + Create New Contact + +
{ e.preventDefault(); void handleSubmitCreate(); }} className={styles.contactForm}> + + handleInputChange('firstname', d.value)} placeholder="Enter first name" /> + + + handleInputChange('lastname', d.value)} placeholder="Enter last name" required /> + + + handleInputChange('emailaddress1', d.value)} placeholder="Enter email address" aria-invalid={!!emailError} /> + + handleInputChange('telephone1', v)} /> + + handleInputChange('jobtitle', d.value)} placeholder="Enter job title" /> + + + + + + + + +
+
+
+
+ + {/* Edit Dialog */} + setIsEditDialogOpen(data.open)}> + + + Edit Contact + +
{ e.preventDefault(); void handleSubmitEdit(); }} className={styles.contactForm}> + + handleInputChange('firstname', d.value)} placeholder="Enter first name" /> + + + handleInputChange('lastname', d.value)} placeholder="Enter last name" required /> + + + handleInputChange('emailaddress1', d.value)} placeholder="Enter email address" aria-invalid={!!emailError} /> + + handleInputChange('telephone1', v)} /> + + handleInputChange('jobtitle', d.value)} placeholder="Enter job title" /> + + + + + + + + +
+
+
+
+ + Are you sure you want to delete {deleteTarget?.fullname || 'this contact'}? This action cannot be undone.} + confirmLabel="Delete" + cancelLabel="Cancel" + onCancel={() => setDeleteTarget(null)} + onConfirm={handleConfirmDelete} + loading={isDeleting} + disabled={false} + size="large" + maxWidth="510px" + /> +
+ ); +}; + +export default ContactsPage; diff --git a/samples/DataverseFluentTeamsInspired/src/pages/SettingsPage.tsx b/samples/DataverseFluentTeamsInspired/src/pages/SettingsPage.tsx new file mode 100644 index 0000000..b7ae23d --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/pages/SettingsPage.tsx @@ -0,0 +1,49 @@ +import React from 'react' +import { Text, Title1, makeStyles } from '@fluentui/react-components' +import { BasePage, AboutCard, ThemeToggleCard } from '../components' +import { COMMON_STYLES } from '../constants/styles' + +const useStyles = makeStyles({ + centeredContainer: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + gap: '24px', + maxWidth: '800px', + margin: '0 auto', + width: '100%' + } +}) + +interface SettingsPageProps { + title: string + isDarkTheme: boolean + onThemeToggle: () => void +} + +const SettingsPage: React.FC = ({ title, isDarkTheme, onThemeToggle }) => { + const styles = useStyles() + const header = {title}; + + return ( + +
+ + + + Click on the Vite and React logos to learn more about the technologies powering this app. + The sidebar navigation follows Microsoft Teams design patterns for familiarity. + +
+
+ ) +} + +export default SettingsPage diff --git a/samples/DataverseFluentTeamsInspired/src/pages/StarterPage.tsx b/samples/DataverseFluentTeamsInspired/src/pages/StarterPage.tsx new file mode 100644 index 0000000..ce244ae --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/pages/StarterPage.tsx @@ -0,0 +1,20 @@ +import { BasePage } from '../components' +import { Text, Title1 } from '@fluentui/react-components' + +interface StarterPageProps { + title: string +} + +const StarterPage: React.FC = ({ title }) => { + const header = {title}; + + return ( + + + Replace with your own page... + + + ) +} + +export default StarterPage diff --git a/samples/DataverseFluentTeamsInspired/src/utils/validation.ts b/samples/DataverseFluentTeamsInspired/src/utils/validation.ts new file mode 100644 index 0000000..70f493f --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/utils/validation.ts @@ -0,0 +1,102 @@ +// Reusable validation utilities +// Add more validators here as needed. + +/** + * Basic email format validation. + * Accepts most standard email formats while remaining lightweight. + * Returns true for empty strings so optional email fields can skip validation upstream. + */ +export function isValidEmail(email: string | undefined | null): boolean { + if (!email) return true; // treat empty as valid when field optional + const trimmed = email.trim(); + if (!trimmed) return true; + // Simple pattern: local-part@domain.tld (at least one dot in domain part) + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + return emailRegex.test(trimmed); +} + +/** + * Returns an error message if invalid, otherwise null. + */ +export function getEmailError(email: string | undefined | null): string | null { + return isValidEmail(email) ? null : 'Please enter a valid email address.'; +} + +/** + * Sanitize phone input as the user types. + * Removes any characters except digits and the explicitly allowed formatting chars: ( ) - and a single space + * (space only allowed after a closing parenthesis for 10-digit formatting convenience). + */ +export function sanitizePhoneInput(raw: string | undefined | null): string { + if (!raw) return ''; + // Keep digits and these symbols. Remove everything else. + return raw.replace(/[^0-9()\-\s]/g, ''); +} + +/** + * Format a string containing a 7- or 10-digit US-style phone number. + * 7 digits => XXX-XXXX + * 10 digits => (XXX) XXX-XXXX + * If the digit count is not 7 or 10 the original (sanitized) string is returned. + */ +export function formatPhone(raw: string | undefined | null): string { + if (!raw) return ''; + const digits = raw.replace(/\D/g, ''); + if (digits.length === 7) { + return `${digits.slice(0, 3)}-${digits.slice(3)}`; + } + if (digits.length === 10) { + return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`; + } + return raw.trim(); +} + +/** + * Check if a phone number string is valid (7 or 10 digits) and properly formatted OR format-able. + * Accepts already formatted values: (XXX) XXX-XXXX or XXX-XXXX. + * Attempts to auto-format if possible before flagging invalid. + * Empty / undefined returns true so optional fields can be left blank. + */ +export function isValidPhone(phone: string | undefined | null): boolean { + if (!phone) return true; // treat empty as valid for optional fields + const trimmed = phone.trim(); + if (!trimmed) return true; + + // Direct pattern matches (allow optional single space after parenthesis) + const tenPattern = /^\(\d{3}\)\s?\d{3}-\d{4}$/; // (123) 456-7890 or (123)456-7890 + const sevenPattern = /^\d{3}-\d{4}$/; // 123-4567 + if (tenPattern.test(trimmed) || sevenPattern.test(trimmed)) return true; + + // Attempt reformatting based purely on digit count. + const digits = trimmed.replace(/\D/g, ''); + return digits.length === 7 || digits.length === 10; +} + +/** + * Returns a standardized, formatted phone string if possible, else the original trimmed value. + * If invalid (cannot be formatted to 7 or 10 digit pattern) returns original and caller can use getPhoneError. + */ +export function coercePhone(phone: string | undefined | null): string { + if (!phone) return ''; + const trimmed = phone.trim(); + if (!trimmed) return ''; + const formatted = formatPhone(trimmed); + // If formatted introduces correct pattern, use it; else original trimmed. + if (isValidPhone(formatted)) return formatted; + return trimmed; +} + +/** + * Return error message (null if valid) for phone numbers. + * Will attempt formatting; if formatting possible result is considered valid. + */ +export function getPhoneError(phone: string | undefined | null): string | null { + if (!phone || !phone.trim()) return null; // optional empty + if (isValidPhone(phone)) return null; + const digits = phone.replace(/\D/g, ''); + if (digits.length !== 7 && digits.length !== 10) { + return 'Phone must have exactly 7 or 10 digits.'; + } + return 'Invalid phone number format.'; +} + diff --git a/samples/DataverseFluentTeamsInspired/src/vite-env.d.ts b/samples/DataverseFluentTeamsInspired/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/samples/DataverseFluentTeamsInspired/tsconfig.app.json b/samples/DataverseFluentTeamsInspired/tsconfig.app.json new file mode 100644 index 0000000..227a6c6 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/tsconfig.app.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/samples/DataverseFluentTeamsInspired/tsconfig.json b/samples/DataverseFluentTeamsInspired/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/samples/DataverseFluentTeamsInspired/tsconfig.node.json b/samples/DataverseFluentTeamsInspired/tsconfig.node.json new file mode 100644 index 0000000..f85a399 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/tsconfig.node.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/samples/DataverseFluentTeamsInspired/vite.config.ts b/samples/DataverseFluentTeamsInspired/vite.config.ts new file mode 100644 index 0000000..13df482 --- /dev/null +++ b/samples/DataverseFluentTeamsInspired/vite.config.ts @@ -0,0 +1,33 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import * as path from 'path' + +// https://vite.dev/config/ +export default defineConfig({ + base: "./", + server: { + host: "::", + port: 3000, + }, + plugins: [react()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, + build: { + rollupOptions: { + output: { + // Strategic vendor chunking for better long-term caching & smaller initial bundle. + manualChunks(id) { + if (id.includes('node_modules')) { + // Order matters: check more specific packages first to avoid them being captured by generic 'react' substring. + if (id.includes('@fluentui')) return 'fluentui'; + if (id.includes('@pa-client/power-code-sdk')) return 'power-sdk'; + if (/react-dom|node_modules\\react\\|node_modules\/react\//.test(id)) return 'react'; + } + } + } + } + } +}); \ No newline at end of file