diff --git a/CHANGELOG.json b/CHANGELOG.json index a7353d41f..8ea45a0e2 100644 --- a/CHANGELOG.json +++ b/CHANGELOG.json @@ -1,5 +1,29 @@ { "versions": [ + { + "version": "3.19.0", + "changes": { + "new": [], + "enhancements": [], + "fixes": [] + }, + "contributions": [] + }, + { + "version": "3.18.1", + "changes": { + "new": [], + "enhancements": [], + "fixes": [ + "`FilePicker`: Fix issue with adding link by typing in 'From a link' tab [#1814](https://github.com/pnp/sp-dev-fx-controls-react/pull/1814)", + "Update nl-nl.ts [#1823](https://github.com/pnp/sp-dev-fx-controls-react/pull/1823)" + ] + }, + "contributions": [ + "[Antanina Druzhkina](https://github.com/Ateina)", + "[Elio Struyf](https://github.com/estruyf)" + ] + }, { "version": "3.18.0", "changes": { @@ -7,17 +31,28 @@ "enhancements": [ "`DynamicField`: Added orderBy to DynamicField props for lookup fields [#1747](https://github.com/pnp/sp-dev-fx-controls-react/pull/1747)", "`DateTimePicker`: disable array of dates [#516](https://github.com/pnp/sp-dev-fx-controls-react/issues/516)", - "`DynamicForm`: new `customIcons` property to allow custom icons for the form [#1745](https://github.com/pnp/sp-dev-fx-controls-react/pull/1745)" + "`DynamicForm`: new `customIcons` property to allow custom icons for the form [#1745](https://github.com/pnp/sp-dev-fx-controls-react/pull/1745)", + "`RichText`: Added style property to Rich text control [#1773](https://github.com/pnp/sp-dev-fx-controls-react/pull/1773)", + "`fast-serve`: Fast-serve update to match the most recent changes. [#1782](https://github.com/pnp/sp-dev-fx-controls-react/pull/1782)", + "`PeoplePicker`: Added context optimization [#1764](https://github.com/pnp/sp-dev-fx-controls-react/pull/1764)", + "`Multiple controls`: Wrong fluentui imports cause webpack build errors [#1763](https://github.com/pnp/sp-dev-fx-controls-react/issues/1763)", + "`FileTypeIcon`: Added standard events [#1789](https://github.com/pnp/sp-dev-fx-controls-react/pull/1789)" ], "fixes": [ "`FolderPicker`: Update documentation on how to use the control with siteAbsoluteUrl property [#1743](https://github.com/pnp/sp-dev-fx-controls-react/pull/1743)", "Readme documents highlight extension does not work correctly [#1495](https://github.com/pnp/sp-dev-fx-controls-react/issues/1495)", - "`DynamicForm`: Error on rendering DynamicForm when having a Date Field with internal name starting with underscore ('_')[#1738](https://github.com/pnp/sp-dev-fx-controls-react/issues/1738)" + "`DynamicForm`: Error on rendering DynamicForm when having a Date Field with internal name starting with underscore ('_')[#1738](https://github.com/pnp/sp-dev-fx-controls-react/issues/1738)", + "`DynamicForm`: Dynamic form loading error in other site [#1758](https://github.com/pnp/sp-dev-fx-controls-react/issues/1758)" ] }, "contributions": [ "[Guido Zambarda](https://github.com/GuidoZam)", + "[Harminder Singh](https://github.com/HarminderSethi)", + "[IRRDC](https://github.com/IRRDC)", + "[Matthias Z'Brun](https://github.com/raclettierer)", + "[Michaël Maillot](https://github.com/michaelmaillot)", "[Nishkalank Bezawada](https://github.com/NishkalankBezawada)", + "[Sergei Sergeev](https://github.com/s-KaiNet)", "[srpmtt](https://github.com/srpmtt)" ] }, diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cca2eece..e4cd0f735 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Releases +## 3.19.0 + +## 3.18.1 + +### Fixes + +- `FilePicker`: Fix issue with adding link by typing in 'From a link' tab [#1814](https://github.com/pnp/sp-dev-fx-controls-react/pull/1814) +- Update nl-nl.ts [#1823](https://github.com/pnp/sp-dev-fx-controls-react/pull/1823) + +### Contributors + +Special thanks to our contributors (in alphabetical order): [Antanina Druzhkina](https://github.com/Ateina), [Elio Struyf](https://github.com/estruyf). + ## 3.18.0 ### Enhancements @@ -7,16 +20,22 @@ - `DynamicField`: Added orderBy to DynamicField props for lookup fields [#1747](https://github.com/pnp/sp-dev-fx-controls-react/pull/1747) - `DateTimePicker`: disable array of dates [#516](https://github.com/pnp/sp-dev-fx-controls-react/issues/516) - `DynamicForm`: new `customIcons` property to allow custom icons for the form [#1745](https://github.com/pnp/sp-dev-fx-controls-react/pull/1745) +- `RichText`: Added style property to Rich text control [#1773](https://github.com/pnp/sp-dev-fx-controls-react/pull/1773) +- `fast-serve`: Fast-serve update to match the most recent changes. [#1782](https://github.com/pnp/sp-dev-fx-controls-react/pull/1782) +- `PeoplePicker`: Added context optimization [#1764](https://github.com/pnp/sp-dev-fx-controls-react/pull/1764) +- `Multiple controls`: Wrong fluentui imports cause webpack build errors [#1763](https://github.com/pnp/sp-dev-fx-controls-react/issues/1763) +- `FileTypeIcon`: Added standard events [#1789](https://github.com/pnp/sp-dev-fx-controls-react/pull/1789) ### Fixes - `FolderPicker`: Update documentation on how to use the control with siteAbsoluteUrl property [#1743](https://github.com/pnp/sp-dev-fx-controls-react/pull/1743) - Readme documents highlight extension does not work correctly [#1495](https://github.com/pnp/sp-dev-fx-controls-react/issues/1495) - `DynamicForm`: Error on rendering DynamicForm when having a Date Field with internal name starting with underscore ('_')[#1738](https://github.com/pnp/sp-dev-fx-controls-react/issues/1738) +- `DynamicForm`: Dynamic form loading error in other site [#1758](https://github.com/pnp/sp-dev-fx-controls-react/issues/1758) ### Contributors -Special thanks to our contributors (in alphabetical order): [Guido Zambarda](https://github.com/GuidoZam), [Nishkalank Bezawada](https://github.com/NishkalankBezawada), [srpmtt](https://github.com/srpmtt). +Special thanks to our contributors (in alphabetical order): [Guido Zambarda](https://github.com/GuidoZam), [Harminder Singh](https://github.com/HarminderSethi), [IRRDC](https://github.com/IRRDC), [Matthias Z'Brun](https://github.com/raclettierer), [Michaël Maillot](https://github.com/michaelmaillot), [Nishkalank Bezawada](https://github.com/NishkalankBezawada), [Sergei Sergeev](https://github.com/s-KaiNet), [srpmtt](https://github.com/srpmtt). ## 3.17.0 diff --git a/docs/documentation/docs/about/release-notes.md b/docs/documentation/docs/about/release-notes.md index 5cca2eece..e4cd0f735 100644 --- a/docs/documentation/docs/about/release-notes.md +++ b/docs/documentation/docs/about/release-notes.md @@ -1,5 +1,18 @@ # Releases +## 3.19.0 + +## 3.18.1 + +### Fixes + +- `FilePicker`: Fix issue with adding link by typing in 'From a link' tab [#1814](https://github.com/pnp/sp-dev-fx-controls-react/pull/1814) +- Update nl-nl.ts [#1823](https://github.com/pnp/sp-dev-fx-controls-react/pull/1823) + +### Contributors + +Special thanks to our contributors (in alphabetical order): [Antanina Druzhkina](https://github.com/Ateina), [Elio Struyf](https://github.com/estruyf). + ## 3.18.0 ### Enhancements @@ -7,16 +20,22 @@ - `DynamicField`: Added orderBy to DynamicField props for lookup fields [#1747](https://github.com/pnp/sp-dev-fx-controls-react/pull/1747) - `DateTimePicker`: disable array of dates [#516](https://github.com/pnp/sp-dev-fx-controls-react/issues/516) - `DynamicForm`: new `customIcons` property to allow custom icons for the form [#1745](https://github.com/pnp/sp-dev-fx-controls-react/pull/1745) +- `RichText`: Added style property to Rich text control [#1773](https://github.com/pnp/sp-dev-fx-controls-react/pull/1773) +- `fast-serve`: Fast-serve update to match the most recent changes. [#1782](https://github.com/pnp/sp-dev-fx-controls-react/pull/1782) +- `PeoplePicker`: Added context optimization [#1764](https://github.com/pnp/sp-dev-fx-controls-react/pull/1764) +- `Multiple controls`: Wrong fluentui imports cause webpack build errors [#1763](https://github.com/pnp/sp-dev-fx-controls-react/issues/1763) +- `FileTypeIcon`: Added standard events [#1789](https://github.com/pnp/sp-dev-fx-controls-react/pull/1789) ### Fixes - `FolderPicker`: Update documentation on how to use the control with siteAbsoluteUrl property [#1743](https://github.com/pnp/sp-dev-fx-controls-react/pull/1743) - Readme documents highlight extension does not work correctly [#1495](https://github.com/pnp/sp-dev-fx-controls-react/issues/1495) - `DynamicForm`: Error on rendering DynamicForm when having a Date Field with internal name starting with underscore ('_')[#1738](https://github.com/pnp/sp-dev-fx-controls-react/issues/1738) +- `DynamicForm`: Dynamic form loading error in other site [#1758](https://github.com/pnp/sp-dev-fx-controls-react/issues/1758) ### Contributors -Special thanks to our contributors (in alphabetical order): [Guido Zambarda](https://github.com/GuidoZam), [Nishkalank Bezawada](https://github.com/NishkalankBezawada), [srpmtt](https://github.com/srpmtt). +Special thanks to our contributors (in alphabetical order): [Guido Zambarda](https://github.com/GuidoZam), [Harminder Singh](https://github.com/HarminderSethi), [IRRDC](https://github.com/IRRDC), [Matthias Z'Brun](https://github.com/raclettierer), [Michaël Maillot](https://github.com/michaelmaillot), [Nishkalank Bezawada](https://github.com/NishkalankBezawada), [Sergei Sergeev](https://github.com/s-KaiNet), [srpmtt](https://github.com/srpmtt). ## 3.17.0 diff --git a/docs/documentation/docs/controls/Carousel.md b/docs/documentation/docs/controls/Carousel.md index e87673ad4..994ce13be 100644 --- a/docs/documentation/docs/controls/Carousel.md +++ b/docs/documentation/docs/controls/Carousel.md @@ -104,8 +104,8 @@ The Carousel component can be configured with the following properties: | isInfinite | boolean | no | Indicates if infinite scrolling is enabled. | | canMoveNext | boolean | no | Property indicates if the next item button can be clicked. If not provided, status of the button is calculated based on the current index.
It is mandatory when triggerPageEvent is used. | | canMovePrev | boolean | no | Property indicates if the previous item button can be clicked. If not provided, status of the button is calculated based on the current index.
It is mandatory when triggerPageEvent is used. | -| buttonsLocation | CarouselButtonsLocation | yes | Specifies the location of the buttons inside the container. | -| buttonsDisplay | CarouselButtonsDisplay | yes | Specifies the buttons container display mode. | +| buttonsLocation | CarouselButtonsLocation | no | Specifies the location of the buttons inside the container. Default: center | +| buttonsDisplay | CarouselButtonsDisplay | no | Specifies the buttons container display mode. Default: block | | containerStyles | ICssInput | no | Allows to specify own styles for carousel container. | | loadingComponentContainerStyles | ICssInput | no | Allows to specify own styles for loading component. | | contentContainerStyles | ICssInput | no | Allows to specify own styles for elements container. | @@ -134,6 +134,7 @@ The Carousel component can be configured with the following properties: | indicatorsContainerStyles | ICssInput | no | Allows to specify own styles for indicators container when indicatorsDisplay is set to "block" | | prevButtonAriaLabel | string | no | Aria label of the PreviousItem button. Default 'Previous item'. | | nextButtonAriaLabel | string | no | Aria label of the NextItem button. Default 'Next item'. | +| contentHeight | number | no | Allows to specify the height of the content. Can be used instead of providing styles for the content container (`contentContainerStyles`). | enum `CarouselButtonsLocation` diff --git a/docs/documentation/docs/controls/FileTypeIcon.md b/docs/documentation/docs/controls/FileTypeIcon.md index d37f8bb77..208faed80 100644 --- a/docs/documentation/docs/controls/FileTypeIcon.md +++ b/docs/documentation/docs/controls/FileTypeIcon.md @@ -42,5 +42,11 @@ The FileTypeIcon component can be configured with the following properties: | path | string | no | Path to the document. If this is provided, the control will use the file extension to display the corresponding icon. | | size | ImageSize | no | This is a property that only needs to be used when the type is set to image. It allows you to specify the image size. small (16px), normal (20px), medium (48px) and large (96px) are possible. Use the **ImageSize** enum to get the list of available images sizes. | | type | IconType | yes | This property specifies is you want to use the icon font or image. Use the **IconType** enum to get the list of available icon types. | +| onClick | React.MouseEvent<HTMLElement> | no | Event triggered when the icon is clicked. | +| onDoubleClick | React.MouseEvent<HTMLElement> | no | Event triggered when the icon is double clicked. | +| onMouseEnter | React.MouseEvent<HTMLElement> | no | Event triggered when the mouse cursor enters the icon (without event bubbling). | +| onMouseLeave | React.MouseEvent<HTMLElement> | no | Event triggered when the mouse cursor leaves the icon. | +| onMouseOver | React.MouseEvent<HTMLElement> | no | Event triggered when the mouse cursor enters the icon (with event bubbling). | +| onMouseUp | React.MouseEvent<HTMLElement> | no | Event triggered when the mouse button is released after clicked on the icon. | ![](https://telemetry.sharepointpnp.com/sp-dev-fx-controls-react/wiki/controls/FileTypeIcon) diff --git a/docs/documentation/docs/controls/PeoplePicker.md b/docs/documentation/docs/controls/PeoplePicker.md index ab8f623ba..372386807 100644 --- a/docs/documentation/docs/controls/PeoplePicker.md +++ b/docs/documentation/docs/controls/PeoplePicker.md @@ -17,21 +17,26 @@ This control renders a People picker field which can be used to select one or mo ![Selected people](../assets/Peoplepicker-multiplechoices.png) - ## How to use this control in your solutions - Check that you installed the `@pnp/spfx-controls-react` dependency. Check out the [getting started](../../#getting-started) page for more information about installing the dependency. - Import the following modules to your component: ```typescript -import { PeoplePicker, PrincipalType } from "@pnp/spfx-controls-react/lib/PeoplePicker"; +import { IPeoplePickerContext, PeoplePicker, PrincipalType } from "@pnp/spfx-controls-react/lib/PeoplePicker"; ``` - Use the `PeoplePicker` control in your code as follows: ```typescript +const peoplePickerContext: IPeoplePickerContext = { + absoluteUrl: this.props.context.pageContext.web.absoluteUrl, + msGraphClientFactory: this.props.context.msGraphClientFactory, + spHttpClient: this.props.context.spHttpClient +}; + | no | Styles to apply on control | +| placeholder | string | no | Short text hint to display in empty picker | | +| styles | Partial | no | Styles to apply on control | | | searchTextLimit | number | no | Specifies the minimum character count needed to begin retrieving search results. | 2 | Enum `PrincipalType` @@ -97,13 +102,21 @@ The `PrincipalType` enum can be used to specify the types of information you wan | SecurityGroup | 4 | | SharePointGroup | 8 | +Interface `IPeoplePickerContext` -## MSGraph Permissions required +Provides mandatory properties to search users on the tenant -This control requires the following scopes if groupId is of type String: +| Value | Type | Description | +| ---- | ---- | ---- | +| absoluteUrl | string | Current `SPWeb` absolute URL. | +| msGraphClientFactory | MSGraphClientFactory | Instance of MSGraphClientFactory used for querying Microsoft Graph REST API. | +| spHttpClient | SPHttpClient | Instance of SPHttpClient used for querying SharePoint REST API. | -at least : GroupMember.Read.All, Directory.Read.All +## MSGraph Permissions required +This control requires at least one the following scopes if `groupId` is of type `string`: -![](https://telemetry.sharepointpnp.com/sp-dev-fx-controls-react/wiki/controls/PeoplePicker) +- *GroupMember.Read.All* + *User.ReadBasic.All* +- *Directory.Read.All* +![](https://telemetry.sharepointpnp.com/sp-dev-fx-controls-react/wiki/controls/PeoplePicker) diff --git a/docs/documentation/docs/controls/RichText.md b/docs/documentation/docs/controls/RichText.md index 74249e044..b9a76b8de 100644 --- a/docs/documentation/docs/controls/RichText.md +++ b/docs/documentation/docs/controls/RichText.md @@ -70,6 +70,7 @@ The RichText control can be configured with the following properties: | id | string | no | The ID to apply to the RichText control. | | label | string | no | The label displayed above the RichText control. | | className | string | no | The custom CSS class to apply to the RichText control. | +| style | React.CSSProperties | no | The custom styles to apply to the RichText control. | | isEditMode | boolean | no | `true` indicates that users will be able to edit the content of the RichText control. `false` will display the rich text as read-only. | | styleOptions | StyleOptions | no | Define the styles you want to show or hide for the rich text editor | | value | string | no | Sets the rich text to display in the RichText control. | diff --git a/fast-serve/config.json b/fast-serve/config.json deleted file mode 100644 index 632a692f9..000000000 --- a/fast-serve/config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/s-KaiNet/spfx-fast-serve/master/schema/config.1.1.schema.json", - "cli": { - "isLibraryComponent": false - } -} \ No newline at end of file diff --git a/fast-serve/webpack.extend.js b/fast-serve/webpack.extend.js deleted file mode 100644 index 22e737e60..000000000 --- a/fast-serve/webpack.extend.js +++ /dev/null @@ -1,24 +0,0 @@ -/* -* User webpack settings file. You can add your own settings here. -* Changes from this file will be merged into the base webpack configuration file. -* This file will not be overwritten by the subsequent spfx-fast-serve calls. -*/ - -// you can add your project related webpack configuration here, it will be merged using webpack-merge module -// i.e. plugins: [new webpack.Plugin()] -const webpackConfig = { - -} - -// for even more fine-grained control, you can apply custom webpack settings using below function -const transformConfig = function (initialWebpackConfig) { - // transform the initial webpack config here, i.e. - // initialWebpackConfig.plugins.push(new webpack.Plugin()); etc. - - return initialWebpackConfig; -} - -module.exports = { - webpackConfig, - transformConfig -} diff --git a/package-lock.json b/package-lock.json index b96ec9ca8..c2342d70a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@pnp/spfx-controls-react", - "version": "3.18.0", + "version": "3.19.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@pnp/spfx-controls-react", - "version": "3.18.0", + "version": "3.19.0", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -114,7 +114,7 @@ "react-test-renderer": "17.0.1", "request-promise": "4.2.5", "sonarqube-scanner": "2.8.2", - "spfx-fast-serve-helpers": "1.18.4", + "spfx-fast-serve-helpers": "1.18.11", "ts-jest": "^29.1.1", "tslib": "2.3.1", "typescript": "4.7.4", @@ -24810,9 +24810,9 @@ } }, "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", + "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==", "dev": true }, "node_modules/ip-regex": { @@ -34659,9 +34659,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", "dev": true, "funding": [ { @@ -34678,7 +34678,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -38839,13 +38839,13 @@ "dev": true }, "node_modules/spfx-fast-serve-helpers": { - "version": "1.18.4", - "resolved": "https://registry.npmjs.org/spfx-fast-serve-helpers/-/spfx-fast-serve-helpers-1.18.4.tgz", - "integrity": "sha512-gJvw5bbhDQth3khWEKldKmgFlb4VERHyozozKf0fcy2rh8ZK3EKu77Tw0yu8KLuZm6GFeFRSSu4uecnuUu8AEw==", + "version": "1.18.11", + "resolved": "https://registry.npmjs.org/spfx-fast-serve-helpers/-/spfx-fast-serve-helpers-1.18.11.tgz", + "integrity": "sha512-hSsvuPYIlHf7r7IvEPYCzHFChlVxXMxGm3sCungQy52BzFhbD8YASSKx36mlhQb/qiwHbB1IYfoHdtDMwvppog==", "dev": true, "dependencies": { - "@microsoft/loader-load-themed-styles": "2.0.45", - "@microsoft/spfx-heft-plugins": "1.18.0", + "@microsoft/loader-load-themed-styles": "2.1.7", + "@microsoft/spfx-heft-plugins": "1.18.2", "@pmmmwh/react-refresh-webpack-plugin": "0.5.7", "@types/copy-webpack-plugin": "6.4.3", "@types/cross-spawn": "6.0.3", @@ -38855,6 +38855,7 @@ "autoprefixer": "9.8.8", "clean-css-loader": "3.0.0", "colors": "1.4.0", + "commander": "11.1.0", "copy-webpack-plugin": "6.4.0", "cross-spawn": "7.0.3", "css-loader": "5.2.4", @@ -38867,8 +38868,8 @@ "kill-port": "1.6.1", "loader-utils": "2.0.0", "node-fetch": "2.6.1", - "postcss": "7.0.38", - "postcss-loader": "4.2.0", + "postcss": "8.4.33", + "postcss-loader": "4.3.0", "react-refresh": "0.14.0", "react-refresh-typescript": "2.0.6", "sass": "1.44.0", @@ -38944,1895 +38945,6 @@ "node": ">=10.10.0" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/loader-load-themed-styles": { - "version": "2.0.45", - "resolved": "https://registry.npmjs.org/@microsoft/loader-load-themed-styles/-/loader-load-themed-styles-2.0.45.tgz", - "integrity": "sha512-04foUzzYBbKpBKj16N9pjyKJzt6jthyd2gMzg1fQJPfrIblsJanumlhiUitpZjzyhs/53qYzEsTo0PZCKRHUpQ==", - "dev": true, - "dependencies": { - "loader-utils": "1.4.2" - }, - "peerDependencies": { - "@microsoft/load-themed-styles": "^2.0.47", - "@types/webpack": "^4" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/loader-load-themed-styles/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/loader-load-themed-styles/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/rush-lib": { - "version": "5.100.2", - "resolved": "https://registry.npmjs.org/@microsoft/rush-lib/-/rush-lib-5.100.2.tgz", - "integrity": "sha512-wuyvYok7qEdADNeN98C+tO5lU23CH04kSYbJ/lz4CQfqVIviFLQQExDEPnvRxNP0I1XmuMdsaIVG28m1tLCMMA==", - "dev": true, - "dependencies": { - "@pnpm/dependency-path": "~2.1.2", - "@pnpm/link-bins": "~5.3.7", - "@rushstack/heft-config-file": "0.13.2", - "@rushstack/node-core-library": "3.59.6", - "@rushstack/package-deps-hash": "4.0.41", - "@rushstack/package-extractor": "0.3.11", - "@rushstack/rig-package": "0.4.0", - "@rushstack/rush-amazon-s3-build-cache-plugin": "5.100.2", - "@rushstack/rush-azure-storage-build-cache-plugin": "5.100.2", - "@rushstack/stream-collator": "4.0.259", - "@rushstack/terminal": "0.5.34", - "@rushstack/ts-command-line": "4.15.1", - "@types/node-fetch": "2.6.2", - "@yarnpkg/lockfile": "~1.0.2", - "builtin-modules": "~3.1.0", - "cli-table": "~0.3.1", - "colors": "~1.2.1", - "dependency-path": "~9.2.8", - "figures": "3.0.0", - "git-repo-info": "~2.1.0", - "glob": "~7.0.5", - "glob-escape": "~0.0.2", - "https-proxy-agent": "~5.0.0", - "ignore": "~5.1.6", - "inquirer": "~7.3.3", - "js-yaml": "~3.13.1", - "node-fetch": "2.6.7", - "npm-check": "~6.0.1", - "npm-package-arg": "~6.1.0", - "read-package-tree": "~5.1.5", - "rxjs": "~6.6.7", - "semver": "~7.5.4", - "ssri": "~8.0.0", - "strict-uri-encode": "~2.0.0", - "tapable": "2.2.1", - "tar": "~6.1.11", - "true-case-path": "~2.2.1" - }, - "engines": { - "node": ">=5.6.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/rush-lib/node_modules/@rushstack/terminal": { - "version": "0.5.34", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.5.34.tgz", - "integrity": "sha512-Q7YDkPTsvJZpHapapo5sK2VCxW7byoqhK89tXMUiva6dNwelomgEe0S+njKw4vcmGde4hQD7LAqQPJPYFeU4mw==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "wordwrap": "~1.0.0" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/rush-lib/node_modules/colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/rush-lib/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@microsoft/sp-css-loader/-/sp-css-loader-1.18.0.tgz", - "integrity": "sha512-UFfmsN+3+WcEHx8fEWJoOMTP3pOTTkFAxwa9aEtKxnrT21wfqLnJfzll1ato2X0vT3eYzkCFtrspCeT1atLURw==", - "dev": true, - "dependencies": { - "@microsoft/load-themed-styles": "1.10.292", - "@rushstack/node-core-library": "3.59.6", - "autoprefixer": "9.7.1", - "css-loader": "3.4.2", - "cssnano": "~5.1.14", - "loader-utils": "^1.4.2", - "postcss": "^8.4.19", - "postcss-modules-extract-imports": "~3.0.0", - "postcss-modules-local-by-default": "~4.0.0", - "postcss-modules-scope": "~3.0.0", - "postcss-modules-values": "~4.0.0", - "webpack": "~4.47.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/@microsoft/load-themed-styles": { - "version": "1.10.292", - "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.292.tgz", - "integrity": "sha512-LQWGImtpv2zHKIPySLalR1aFXumXfOq8UuJvR15mIZRKXIoM+KuN9wZq+ved2FyeuePjQSJGOxYynxtCLLwDBA==", - "dev": true - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/autoprefixer": { - "version": "9.7.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.1.tgz", - "integrity": "sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw==", - "dev": true, - "dependencies": { - "browserslist": "^4.7.2", - "caniuse-lite": "^1.0.30001006", - "chalk": "^2.4.2", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.21", - "postcss-value-parser": "^4.0.2" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/autoprefixer/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/css-loader": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", - "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/css-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/css-loader/node_modules/postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/css-loader/node_modules/postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dev": true, - "dependencies": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/css-loader/node_modules/postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/css-loader/node_modules/postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dev": true, - "dependencies": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/postcss/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-css-loader/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/sp-module-interfaces": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@microsoft/sp-module-interfaces/-/sp-module-interfaces-1.18.0.tgz", - "integrity": "sha512-fXLV70zP1S8z2FGYAf1iqfgIIC5rOfPQeeCh/qICFx+RuUFtvkbW+N5vr0ugFYaF6L0rfrYqspcllloHJPOVYQ==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "z-schema": "4.2.4" - }, - "engines": { - "node": ">=16.13.0 <17.0.0 || >=18.17.1 <19.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@microsoft/spfx-heft-plugins/-/spfx-heft-plugins-1.18.0.tgz", - "integrity": "sha512-tWj8mtnz4+gi9LUV/XIIArHw53fPXOs1R9eLh2hm/FcB5d3AMsDObhLyna+XjTY2JpJtsvRjC4A1nypHlG2uVQ==", - "dev": true, - "dependencies": { - "@azure/storage-blob": "~12.11.0", - "@microsoft/load-themed-styles": "1.10.292", - "@microsoft/loader-load-themed-styles": "2.0.68", - "@microsoft/rush-lib": "5.100.2", - "@microsoft/sp-css-loader": "1.18.0", - "@microsoft/sp-module-interfaces": "1.18.0", - "@rushstack/heft-config-file": "0.13.2", - "@rushstack/localization-utilities": "0.8.80", - "@rushstack/node-core-library": "3.59.6", - "@rushstack/rig-package": "0.4.0", - "@rushstack/set-webpack-public-path-plugin": "4.0.15", - "@rushstack/terminal": "0.5.36", - "@rushstack/webpack4-localization-plugin": "0.17.46", - "@rushstack/webpack4-module-minifier-plugin": "0.12.35", - "@types/tapable": "1.0.6", - "autoprefixer": "9.7.1", - "colors": "~1.2.1", - "copy-webpack-plugin": "~6.0.3", - "css-loader": "3.4.2", - "cssnano": "~5.1.14", - "express": "4.18.1", - "file-loader": "6.1.0", - "git-repo-info": "~2.1.1", - "glob": "~7.0.5", - "html-loader": "~0.5.1", - "jszip": "~3.8.0", - "lodash": "4.17.21", - "mime": "2.5.2", - "postcss": "^8.4.19", - "postcss-loader": "^4.2.0", - "resolve": "~1.17.0", - "source-map": "0.6.1", - "source-map-loader": "1.1.3", - "tapable": "1.1.3", - "true-case-path": "~2.2.1", - "uuid": "~3.1.0", - "webpack": "~4.47.0", - "webpack-dev-server": "~4.9.3", - "webpack-sources": "1.4.3", - "xml": "~1.0.1" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/@microsoft/load-themed-styles": { - "version": "1.10.292", - "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.292.tgz", - "integrity": "sha512-LQWGImtpv2zHKIPySLalR1aFXumXfOq8UuJvR15mIZRKXIoM+KuN9wZq+ved2FyeuePjQSJGOxYynxtCLLwDBA==", - "dev": true - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/@microsoft/loader-load-themed-styles": { - "version": "2.0.68", - "resolved": "https://registry.npmjs.org/@microsoft/loader-load-themed-styles/-/loader-load-themed-styles-2.0.68.tgz", - "integrity": "sha512-rScfOP4hEO+zZlhaf0vPzj1I4mVm4XJgACBJ4ym4Z/zT5kt7XkEvlcoCNqr4lbwBvNrafUL9b6GFOTGE6Y8fmg==", - "dev": true, - "dependencies": { - "loader-utils": "1.4.2" - }, - "peerDependencies": { - "@microsoft/load-themed-styles": "^2.0.70", - "@types/webpack": "^4" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/@microsoft/loader-load-themed-styles/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/webpack4-module-minifier-plugin": { - "version": "0.12.35", - "resolved": "https://registry.npmjs.org/@rushstack/webpack4-module-minifier-plugin/-/webpack4-module-minifier-plugin-0.12.35.tgz", - "integrity": "sha512-/tHFN9iuKbsDt0GfSU/XQQEND9XkD1EkDkmQkSsc45YKnip7kCLRN8bpJL410MBiWIMOTWglkafVyiS9pyZ6bw==", - "dev": true, - "dependencies": { - "@rushstack/module-minifier": "0.3.38", - "@rushstack/worker-pool": "0.3.37", - "@types/tapable": "1.0.6", - "tapable": "1.1.3" - }, - "engines": { - "node": ">=10.17.1" - }, - "peerDependencies": { - "@types/node": "*", - "@types/webpack": "*", - "@types/webpack-sources": "*", - "webpack": "^4.31.0", - "webpack-sources": "~1.4.3" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "@types/webpack": { - "optional": true - }, - "@types/webpack-sources": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/autoprefixer": { - "version": "9.7.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.1.tgz", - "integrity": "sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw==", - "dev": true, - "dependencies": { - "browserslist": "^4.7.2", - "caniuse-lite": "^1.0.30001006", - "chalk": "^2.4.2", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.21", - "postcss-value-parser": "^4.0.2" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/autoprefixer/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/copy-webpack-plugin": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.4.tgz", - "integrity": "sha512-zCazfdYAh3q/O4VzZFiadWGpDA2zTs6FC6D7YTHD6H1J40pzo0H4z22h1NYMCl4ArQP4CK8y/KWqPrJ4rVkZ5A==", - "dev": true, - "dependencies": { - "cacache": "^15.0.5", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.2", - "schema-utils": "^2.7.0", - "serialize-javascript": "^4.0.0", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/css-loader": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", - "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/css-loader/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/css-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/file-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.0.tgz", - "integrity": "sha512-26qPdHyTsArQ6gU4P1HJbAbnFTyT2r0pG7czh1GFAd9TZbj0n94wWbupgixZH/ET/meqi2/5+F7DhW4OAXD+Lg==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-extract-imports/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dev": true, - "dependencies": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-local-by-default/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-scope/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dev": true, - "dependencies": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-values/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/webpack-dev-server": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz", - "integrity": "sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@microsoft/spfx-heft-plugins/node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/heft-config-file": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@rushstack/heft-config-file/-/heft-config-file-0.13.2.tgz", - "integrity": "sha512-eJCuVnKR+uSG7qyeyICA57IOBD3OoOlNTpsJgNjcZZiTj+ZlKPaGmJ8/mzXwNiEpTIlRsVvoQURYFz9QY9sfnQ==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "@rushstack/rig-package": "0.4.0", - "jsonpath-plus": "~4.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/localization-utilities": { - "version": "0.8.80", - "resolved": "https://registry.npmjs.org/@rushstack/localization-utilities/-/localization-utilities-0.8.80.tgz", - "integrity": "sha512-kEM8v6ULA3ReikAmdP4faFWMDG4WcATty3lDU2/XFKh2+oj6HLDtnyUgDpYBaASx2FQstu5f5J7QehTLcl21MA==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "@rushstack/typings-generator": "0.10.36", - "pseudolocale": "~1.1.0", - "xmldoc": "~1.1.2" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/module-minifier": { - "version": "0.3.38", - "resolved": "https://registry.npmjs.org/@rushstack/module-minifier/-/module-minifier-0.3.38.tgz", - "integrity": "sha512-o0HzguvsC+VUbpg8gqNCsE9myZ4s6ZIGZggPTR26Qz33yIKvnBHVwHkDu191Y3N1cqMYgVwcZznSUSWifV3qOw==", - "dev": true, - "dependencies": { - "@rushstack/worker-pool": "0.3.37", - "serialize-javascript": "6.0.0", - "source-map": "~0.7.3", - "terser": "^5.9.0" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/module-minifier/node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/module-minifier/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/node-core-library": { - "version": "3.59.6", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.59.6.tgz", - "integrity": "sha512-bMYJwNFfWXRNUuHnsE9wMlW/mOB4jIwSUkRKtu02CwZhQdmzMsUbxE0s1xOLwTpNIwlzfW/YT7OnOHgDffLgYg==", - "dev": true, - "dependencies": { - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.22.1", - "semver": "~7.5.4", - "z-schema": "~5.0.2" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/node-core-library/node_modules/colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/node-core-library/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/node-core-library/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/node-core-library/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/package-deps-hash": { - "version": "4.0.41", - "resolved": "https://registry.npmjs.org/@rushstack/package-deps-hash/-/package-deps-hash-4.0.41.tgz", - "integrity": "sha512-bx1g0I54BidJuIqyQHY2Vr4Azn2ThLgrc6hHjEIBzIVmXeznZxJfYViAPNFAu7BV/TaLIU1BSYeRn/yObu9KZA==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/package-extractor": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@rushstack/package-extractor/-/package-extractor-0.3.11.tgz", - "integrity": "sha512-j5hRGB/ilCozT7qH5q3swM/xdf/TPFtolWkqciYCU8G8WFXxILbN2nwo4goWyWQaD9hFlCiw9S7z8LTEkSmapQ==", - "dev": true, - "dependencies": { - "@pnpm/link-bins": "~5.3.7", - "@rushstack/node-core-library": "3.59.6", - "@rushstack/terminal": "0.5.34", - "ignore": "~5.1.6", - "jszip": "~3.8.0", - "minimatch": "~3.0.3", - "npm-packlist": "~2.1.2" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/package-extractor/node_modules/@rushstack/terminal": { - "version": "0.5.34", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.5.34.tgz", - "integrity": "sha512-Q7YDkPTsvJZpHapapo5sK2VCxW7byoqhK89tXMUiva6dNwelomgEe0S+njKw4vcmGde4hQD7LAqQPJPYFeU4mw==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "wordwrap": "~1.0.0" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/rig-package": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.4.0.tgz", - "integrity": "sha512-FnM1TQLJYwSiurP6aYSnansprK5l8WUK8VG38CmAaZs29ZeL1msjK0AP1VS4ejD33G0kE/2cpsPsS9jDenBMxw==", - "dev": true, - "dependencies": { - "resolve": "~1.22.1", - "strip-json-comments": "~3.1.1" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/rig-package/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/rush-amazon-s3-build-cache-plugin": { - "version": "5.100.2", - "resolved": "https://registry.npmjs.org/@rushstack/rush-amazon-s3-build-cache-plugin/-/rush-amazon-s3-build-cache-plugin-5.100.2.tgz", - "integrity": "sha512-A49NzlRDcp0Hd5WZWN8jvnvI+0MoFOdRXL3iutVI12YAYBH6c7uSul+71MMY83x0yQqk4TcfGYVpFWx1j/n8/Q==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "@rushstack/rush-sdk": "5.100.2", - "https-proxy-agent": "~5.0.0", - "node-fetch": "2.6.7" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/rush-azure-storage-build-cache-plugin": { - "version": "5.100.2", - "resolved": "https://registry.npmjs.org/@rushstack/rush-azure-storage-build-cache-plugin/-/rush-azure-storage-build-cache-plugin-5.100.2.tgz", - "integrity": "sha512-FIAvmIfYLWhnygDCyUWSZOuyTWVRLFHYeG9xPmUpwJSPqxUL3HG5cRGVYlyRgK9oSJSEq+g0mpbe7nE8WwJgtg==", - "dev": true, - "dependencies": { - "@azure/identity": "~2.1.0", - "@azure/storage-blob": "~12.11.0", - "@rushstack/node-core-library": "3.59.6", - "@rushstack/rush-sdk": "5.100.2", - "@rushstack/terminal": "0.5.34" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/@rushstack/terminal": { - "version": "0.5.34", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.5.34.tgz", - "integrity": "sha512-Q7YDkPTsvJZpHapapo5sK2VCxW7byoqhK89tXMUiva6dNwelomgEe0S+njKw4vcmGde4hQD7LAqQPJPYFeU4mw==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "wordwrap": "~1.0.0" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/rush-sdk": { - "version": "5.100.2", - "resolved": "https://registry.npmjs.org/@rushstack/rush-sdk/-/rush-sdk-5.100.2.tgz", - "integrity": "sha512-+4DKbXj6R8vilRYswH8Lb+WIuIoD29/ZjMmazKBKXJTm3x7sgGJy45ozAZbfeXvdOTzqsg11NzIbwaDm8rRhLQ==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "@types/node-fetch": "2.6.2", - "tapable": "2.2.1" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@rushstack/set-webpack-public-path-plugin/-/set-webpack-public-path-plugin-4.0.15.tgz", - "integrity": "sha512-TwXZVRPV0wRrjDfAYGXU38FTFihHjUDIn5iRWtu6rn/MCXNR6y4OwPVg5MlSVbqn/hU8WnmML6/hT54XCdOfPQ==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "@rushstack/webpack-plugin-utilities": "0.2.36" - }, - "peerDependencies": { - "@types/webpack": "^4.39.8" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@rushstack/webpack-plugin-utilities": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/@rushstack/webpack-plugin-utilities/-/webpack-plugin-utilities-0.2.36.tgz", - "integrity": "sha512-LguxiG0b6AKSxUODKbmPqHr9Q08weilpK3qOiyzYMqIQ5nR3WOGoflaYbO/kDsKbjgLyxQWL2XPZdyyYke3gjg==", - "dev": true, - "dependencies": { - "memfs": "3.4.3", - "webpack-merge": "~5.8.0" - }, - "peerDependencies": { - "@types/webpack": "^4.39.8", - "webpack": "^5.35.1" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/webpack": { - "version": "5.89.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", - "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/stream-collator": { - "version": "4.0.259", - "resolved": "https://registry.npmjs.org/@rushstack/stream-collator/-/stream-collator-4.0.259.tgz", - "integrity": "sha512-UfMRCp1avkUUs9pdtWQ8ZE8Nmuxeuw1a9bjLQ7cQJ3meuv8iDxKuxsyJRfrwIfCkVkNVw5OJ9eM6E/edUPP7qw==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "@rushstack/terminal": "0.5.34" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/stream-collator/node_modules/@rushstack/terminal": { - "version": "0.5.34", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.5.34.tgz", - "integrity": "sha512-Q7YDkPTsvJZpHapapo5sK2VCxW7byoqhK89tXMUiva6dNwelomgEe0S+njKw4vcmGde4hQD7LAqQPJPYFeU4mw==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "wordwrap": "~1.0.0" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/terminal": { - "version": "0.5.36", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.5.36.tgz", - "integrity": "sha512-PMigbJYHuiKYe4IxA9pInLSFjOAQI4NV7OmIhTuh8Jy+YYjSexmQfnYwBqsZrwah4k/apY7VZ7lQucHxhJFiiQ==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "wordwrap": "~1.0.0" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/ts-command-line": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.15.1.tgz", - "integrity": "sha512-EL4jxZe5fhb1uVL/P/wQO+Z8Rc8FMiWJ1G7VgnPDvdIt5GVjRfK7vwzder1CZQiX3x0PY6uxENYLNGTFd1InRQ==", - "dev": true, - "dependencies": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/ts-command-line/node_modules/colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/typings-generator": { - "version": "0.10.36", - "resolved": "https://registry.npmjs.org/@rushstack/typings-generator/-/typings-generator-0.10.36.tgz", - "integrity": "sha512-9aB/D8lI+fbmM5LzPgGcUJzuw+Xg4FixGuQVnis70Bss+5SU6YzOk/bfN4/xhSghMzG+AI7S87368x37TgeQtA==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.6", - "chokidar": "~3.4.0", - "glob": "~7.0.5" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/webpack4-localization-plugin": { - "version": "0.17.46", - "resolved": "https://registry.npmjs.org/@rushstack/webpack4-localization-plugin/-/webpack4-localization-plugin-0.17.46.tgz", - "integrity": "sha512-wEEVp6oBp5/OIrRzwgkuuQlawUY6MfjaWsp2T9Zp4MkbqGVgF+gdKG+iKzWtBKW2YbZ9fnVZJH23FoWwh81w4w==", - "dev": true, - "dependencies": { - "@rushstack/localization-utilities": "0.8.83", - "@rushstack/node-core-library": "3.59.7", - "@types/tapable": "1.0.6", - "loader-utils": "1.4.2", - "minimatch": "~3.0.3" - }, - "peerDependencies": { - "@rushstack/set-webpack-public-path-plugin": "^4.0.16", - "@types/node": "*", - "@types/webpack": "^4.39.0", - "webpack": "^4.31.0" - }, - "peerDependenciesMeta": { - "@rushstack/set-webpack-public-path-plugin": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@types/webpack": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/webpack4-localization-plugin/node_modules/@rushstack/localization-utilities": { - "version": "0.8.83", - "resolved": "https://registry.npmjs.org/@rushstack/localization-utilities/-/localization-utilities-0.8.83.tgz", - "integrity": "sha512-0Wjvg/3686xgLIjX4aCxNoOfWb1BOpuckzNMjEK5MZyCEFz4Ral+ln13zP+AMKGGWcdxsYdWs+n1yfkJKEX9fQ==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.7", - "@rushstack/typings-generator": "0.11.1", - "pseudolocale": "~1.1.0", - "xmldoc": "~1.1.2" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/webpack4-localization-plugin/node_modules/@rushstack/node-core-library": { - "version": "3.59.7", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.59.7.tgz", - "integrity": "sha512-ln1Drq0h+Hwa1JVA65x5mlSgUrBa1uHL+V89FqVWQgXd1vVIMhrtqtWGQrhTnFHxru5ppX+FY39VWELF/FjQCw==", - "dev": true, - "dependencies": { - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.22.1", - "semver": "~7.5.4", - "z-schema": "~5.0.2" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/webpack4-localization-plugin/node_modules/@rushstack/typings-generator": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@rushstack/typings-generator/-/typings-generator-0.11.1.tgz", - "integrity": "sha512-pcnA9r14xl1TE4QXW6+t6yGP/5JfGZEGixlL6NH6PHjQVXAFnw91EXvc2NteslePTNdjPuR/34uLqE0i57WNpw==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.59.7", - "chokidar": "~3.4.0", - "fast-glob": "~3.2.4" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/webpack4-localization-plugin/node_modules/colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/webpack4-localization-plugin/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/webpack4-localization-plugin/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/webpack4-localization-plugin/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/webpack4-localization-plugin/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/webpack4-localization-plugin/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@rushstack/worker-pool": { - "version": "0.3.37", - "resolved": "https://registry.npmjs.org/@rushstack/worker-pool/-/worker-pool-0.3.37.tgz", - "integrity": "sha512-KVuklmysCkNdRxTcLb80MNEBG/KrDL74c+1XIYZlTvSlDnTs5j9gdjKIV73lZmYox+SWTpvUWrP6JhWb2noDJg==", - "dev": true, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/@types/eslint": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", @@ -40865,161 +38977,6 @@ "integrity": "sha512-021+XKlD4/hDZkkdgGhgtDGKlcTIXrII1lrCLp/ZNPoU0AHN9HmTNe+i1eKRxcZisFObX3ItTncemegEACgnsw==", "dev": true }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -41199,6 +39156,15 @@ "node": ">=0.1.90" } }, + "node_modules/spfx-fast-serve-helpers/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, "node_modules/spfx-fast-serve-helpers/node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -41320,40 +39286,6 @@ "postcss": "^8.1.0" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/css-loader/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/spfx-fast-serve-helpers/node_modules/css-loader/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/css-loader/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -41432,21 +39364,6 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "node_modules/spfx-fast-serve-helpers/node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/eslint": { "version": "7.32.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", @@ -41689,22 +39606,6 @@ "node": ">=0.10.0" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/file-loader": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", @@ -41824,26 +39725,6 @@ "node": ">=6" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "node_modules/spfx-fast-serve-helpers/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/globals": { "version": "13.23.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", @@ -42014,15 +39895,6 @@ "node": ">=6" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/is-descriptor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", @@ -42111,18 +39983,6 @@ "node": ">=8" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/jest-worker": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", @@ -42137,12 +39997,6 @@ "node": ">= 10.13.0" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/spfx-fast-serve-helpers/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -42152,17 +40006,6 @@ "node": ">=0.10.0" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6.11.5" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/loader-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", @@ -42202,18 +40045,6 @@ "node": ">=10" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/memfs": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.3.tgz", - "integrity": "sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg==", - "dev": true, - "dependencies": { - "fs-monkey": "1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -42329,65 +40160,6 @@ "node": ">=6" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/postcss": { - "version": "7.0.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.38.tgz", - "integrity": "sha512-wNrSHWjHDQJR/IZL5IKGxRtFgrYNaAA/UrkW2WqbtZO6uxSLMxMN+s2iqUMwnAWm3fMROlDYZB41dr0Mt7vBwQ==", - "dev": true, - "dependencies": { - "nanocolors": "^0.2.2", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/postcss-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.2.0.tgz", - "integrity": "sha512-mqgScxHqbiz1yxbnNcPdKYo/6aVt+XExURmEbQlviFVWogDbM4AJ0A/B+ZBpYsJrTRxKw7HyRazg9x0Q9SWwLA==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/postcss-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -42418,18 +40190,6 @@ "node": ">= 0.8" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -42639,12 +40399,6 @@ "node": ">=0.10.0" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, "node_modules/spfx-fast-serve-helpers/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -42658,46 +40412,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/validator": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", - "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/spfx-fast-serve-helpers/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, "node_modules/spfx-fast-serve-helpers/node_modules/webpack-dev-server": { "version": "3.11.3", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", @@ -43159,16 +40873,6 @@ "yargs-parser": "^13.1.2" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/spfx-fast-serve-helpers/node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", @@ -43253,26 +40957,6 @@ "decamelize": "^1.2.0" } }, - "node_modules/spfx-fast-serve-helpers/node_modules/z-schema": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-4.2.4.tgz", - "integrity": "sha512-YvBeW5RGNeNzKOUJs3rTL4+9rpcvHXt5I051FJbOcitV8bl40pEfcG0Q+dWSwS0/BIYrMZ/9HHoqLllMkFhD0w==", - "dev": true, - "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.6.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "engines": { - "node": ">=6.0.0" - }, - "optionalDependencies": { - "commander": "^2.7.1" - } - }, "node_modules/spfx-uifabric-themes": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/spfx-uifabric-themes/-/spfx-uifabric-themes-0.9.0.tgz", diff --git a/package.json b/package.json index 79c914783..855eba825 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "@pnp/spfx-controls-react", "description": "Reusable React controls for SharePoint Framework solutions", - "version": "3.18.0", + "version": "3.19.0", "node": ">=16.13.0 <17.0.0 || >=18.17.1 <19.0.0", "scripts": { "build": "gulp build", "clean": "gulp clean", "test": "gulp test", "test:unit": "npx jest --silent --maxWorkers=4", - "serve": "gulp bundle --custom-serve --max_old_space_size=4096 && fast-serve", + "serve": "fast-serve", "prepublishOnly": "gulp", "versionUpdater": "gulp versionUpdater", "karma": "karma start --circle true", @@ -125,7 +125,7 @@ "react-test-renderer": "17.0.1", "request-promise": "4.2.5", "sonarqube-scanner": "2.8.2", - "spfx-fast-serve-helpers": "1.18.4", + "spfx-fast-serve-helpers": "1.18.11", "ts-jest": "^29.1.1", "tslib": "2.3.1", "typescript": "4.7.4", @@ -138,23 +138,19 @@ "license": "MIT", "keywords": [ "sharepoint", + "microsoft365", + "m365", "office365", "tools", "spfx", - "framework" + "sharepoint framework" ], "bugs": { "url": "https://github.com/pnp/sp-dev-fx-controls-react/issues" }, "main": "lib/index.js", "homepage": "https://pnp.github.io/sp-dev-fx-controls-react/", - "contributors": [ - "Gove, Russell ", - "Kent Chris <>", - "Rodrigues, Joel <>", - "Struyf, Elio ", - "Terentiev, Alex " - ], + "contributors": [], "jest": { "transform": { "^.+\\.(ts|tsx)$": "ts-jest" diff --git a/src/common/telemetry/version.ts b/src/common/telemetry/version.ts index e4ed6e8bb..0cdef5191 100644 --- a/src/common/telemetry/version.ts +++ b/src/common/telemetry/version.ts @@ -1 +1 @@ -export const version: string = "3.18.0"; \ No newline at end of file +export const version: string = "3.18.1"; \ No newline at end of file diff --git a/src/controls/accordion/Accordion.tsx b/src/controls/accordion/Accordion.tsx index b682c841f..f4aa14d18 100644 --- a/src/controls/accordion/Accordion.tsx +++ b/src/controls/accordion/Accordion.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import styles from './Accordion.module.scss'; import { IAccordionProps, IAccordionState } from './index'; import { css } from "@uifabric/utilities/lib/css"; -import { DefaultButton } from '@fluentui/react/lib/components/Button'; +import { DefaultButton } from '@fluentui/react/lib/Button'; import { IIconProps } from '@fluentui/react/lib/Icon'; import * as telemetry from '../../common/telemetry'; diff --git a/src/controls/carousel/Carousel.tsx b/src/controls/carousel/Carousel.tsx index 3ec18a1a4..a4938ed49 100644 --- a/src/controls/carousel/Carousel.tsx +++ b/src/controls/carousel/Carousel.tsx @@ -14,6 +14,7 @@ import { isArray } from "@pnp/common"; import * as telemetry from '../../common/telemetry'; import CarouselImage, { ICarouselImageProps } from "./CarouselImage"; import { CarouselIndicatorsDisplay } from "./ICarouselProps"; +import { mergeStyles } from "@fluentui/react/lib/Styling"; export class Carousel extends React.Component { private _intervalId: number | undefined; @@ -74,7 +75,8 @@ export class Carousel extends React.Component { interval, indicatorsDisplay, rootStyles, - indicatorsContainerStyles + indicatorsContainerStyles, + contentHeight } = this.props; const processing = processingState === ProcessingState.processing; @@ -84,6 +86,17 @@ export class Carousel extends React.Component { const element = this.getElementToDisplay(currentIndex); + let contentContainerCustomClassName: ICssInput | undefined = undefined; + if (contentContainerStyles) { + contentContainerCustomClassName = contentContainerStyles; + } + else if (contentHeight) { + contentContainerCustomClassName = mergeStyles({ + height: `${contentHeight}px` + }); + } + + return (
@@ -97,7 +110,7 @@ export class Carousel extends React.Component { onClick={() => { this.onCarouselButtonClicked(false); }} />
{ return ""; } - const buttonsLocation = this.props.buttonsLocation ? this.props.buttonsLocation : CarouselButtonsLocation.top; + const buttonsLocation = this.props.buttonsLocation ? this.props.buttonsLocation : CarouselButtonsLocation.center; let buttonsLocationCss = ""; switch (buttonsLocation) { case CarouselButtonsLocation.top: diff --git a/src/controls/carousel/ICarouselProps.ts b/src/controls/carousel/ICarouselProps.ts index ffade1ae4..4c30103e5 100644 --- a/src/controls/carousel/ICarouselProps.ts +++ b/src/controls/carousel/ICarouselProps.ts @@ -82,12 +82,16 @@ export interface ICarouselProps { /** * Specifies the location of the buttons inside the container. + * + * Default: CarouselButtonsLocation.center */ - buttonsLocation: CarouselButtonsLocation; + buttonsLocation?: CarouselButtonsLocation; /** * Specifies the buttons container display mode. + * + * Default: CarouselButtonsDisplay.block */ - buttonsDisplay: CarouselButtonsDisplay; + buttonsDisplay?: CarouselButtonsDisplay; /** * Allows to specify own styles for carousel container. @@ -221,4 +225,9 @@ export interface ICarouselProps { */ indicatorsContainerStyles?: ICssInput; + /** + * Allows to specify the height of the content. Can be used instead of providing styles for the content container. + */ + contentHeight?: number; + } diff --git a/src/controls/dynamicForm/DynamicForm.tsx b/src/controls/dynamicForm/DynamicForm.tsx index edeaaf9b1..fa1d162d2 100644 --- a/src/controls/dynamicForm/DynamicForm.tsx +++ b/src/controls/dynamicForm/DynamicForm.tsx @@ -17,7 +17,6 @@ import { IDropdownOption } from "@fluentui/react/lib/Dropdown"; import { MessageBar, MessageBarType } from "@fluentui/react/lib/MessageBar"; import { ProgressIndicator } from "@fluentui/react/lib/ProgressIndicator"; import { IStackTokens, Stack } from "@fluentui/react/lib/Stack"; -import { Icon } from "@fluentui/react/lib/components/Icon/Icon"; import { DynamicField } from "./dynamicField"; import { DateFormat, @@ -45,6 +44,7 @@ import CustomFormattingHelper from "../../common/utilities/CustomFormatting"; // Dynamic Form Props / State import { IDynamicFormProps } from "./IDynamicFormProps"; import { IDynamicFormState } from "./IDynamicFormState"; +import { Icon } from "@fluentui/react/lib/Icon"; const stackTokens: IStackTokens = { childrenGap: 20 }; @@ -921,11 +921,11 @@ export class DynamicForm extends React.Component< try { // Fetch form rendering information from SharePoint - const listInfo = await this._spService.getListFormRenderInfo(listId); + const listInfo = await this._spService.getListFormRenderInfo(listId, this.webURL); // Fetch additional information about fields from SharePoint // (Number fields for min and max values, and fields with validation) - const additionalInfo = await this._spService.getAdditionalListFormFieldInfo(listId); + const additionalInfo = await this._spService.getAdditionalListFormFieldInfo(listId, this.webURL); const numberFields = additionalInfo.filter((f) => f.TypeAsString === "Number" || f.TypeAsString === "Currency"); // Build a dictionary of validation formulas and messages @@ -1178,7 +1178,8 @@ export class DynamicForm extends React.Component< const response = await this._spService.getSingleManagedMetadataLabel( listId, listItemId, - field.InternalName + field.InternalName, + this.webURL ); if (response) { selectedTags.push({ @@ -1243,7 +1244,7 @@ export class DynamicForm extends React.Component< } dateFormat = field.DateFormat || "DateOnly"; - defaultDayOfWeek = (await this._spService.getRegionalWebSettings()).FirstDayOfWeek; + defaultDayOfWeek = (await this._spService.getRegionalWebSettings(this.webURL)).FirstDayOfWeek; } // Setup Thumbnail, Location and Boolean fields @@ -1333,7 +1334,8 @@ export class DynamicForm extends React.Component< listItemId, file.fileName, buffer, - undefined + undefined, + this.webURL ); } }; diff --git a/src/controls/dynamicForm/dynamicField/DynamicField.tsx b/src/controls/dynamicForm/dynamicField/DynamicField.tsx index e4d7be4cc..36518c544 100644 --- a/src/controls/dynamicForm/dynamicField/DynamicField.tsx +++ b/src/controls/dynamicForm/dynamicField/DynamicField.tsx @@ -3,7 +3,7 @@ import { sp } from '@pnp/sp/presets/all'; import '@pnp/sp/webs'; import * as strings from 'ControlStrings'; import { ActionButton } from '@fluentui/react/lib/Button'; -import { Dropdown, IDropdownOption, IDropdownProps } from '@fluentui/react/lib/components/Dropdown'; +import { Dropdown, IDropdownOption, IDropdownProps } from '@fluentui/react/lib/Dropdown'; import { DatePicker } from '@fluentui/react/lib/DatePicker'; import { Icon } from '@fluentui/react/lib/Icon'; import { Image } from '@fluentui/react/lib/Image'; @@ -16,7 +16,7 @@ import { DateTimePicker } from '../../dateTimePicker/DateTimePicker'; import { FilePicker, IFilePickerResult } from '../../filePicker'; import { ListItemPicker } from '../../listItemPicker'; import { LocationPicker } from '../../locationPicker'; -import { PeoplePicker, PrincipalType } from '../../peoplepicker'; +import { IPeoplePickerContext, PeoplePicker, PrincipalType } from '../../peoplepicker'; import { RichText } from '../../richText'; import { IPickerTerms, TaxonomyPicker } from '../../taxonomyPicker'; import styles from '../DynamicForm.module.scss'; @@ -94,6 +94,12 @@ export class DynamicField extends React.Component{label}; @@ -378,7 +384,7 @@ export class DynamicField extends React.Component { diff --git a/src/controls/fieldCollectionData/collectionIconField/CollectionIconField.tsx b/src/controls/fieldCollectionData/collectionIconField/CollectionIconField.tsx index b8db38ad9..ab67b85d0 100644 --- a/src/controls/fieldCollectionData/collectionIconField/CollectionIconField.tsx +++ b/src/controls/fieldCollectionData/collectionIconField/CollectionIconField.tsx @@ -1,8 +1,8 @@ import * as React from 'react'; import styles from '../FieldCollectionData.module.scss'; import { ICollectionIconFieldProps } from '.'; -import { TextField } from '@fluentui/react/lib/components/TextField'; -import { Icon } from '@fluentui/react/lib/components/Icon'; +import { TextField } from '@fluentui/react/lib/TextField'; +import { Icon } from '@fluentui/react/lib/Icon'; export class CollectionIconField extends React.Component { diff --git a/src/controls/fields/fieldUserRenderer/FieldUserRenderer.tsx b/src/controls/fields/fieldUserRenderer/FieldUserRenderer.tsx index 02902995d..692e1fd6e 100644 --- a/src/controls/fields/fieldUserRenderer/FieldUserRenderer.tsx +++ b/src/controls/fields/fieldUserRenderer/FieldUserRenderer.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { css } from '@fluentui/react/lib/Utilities'; import clone from 'lodash/clone'; import { IExpandingCardProps } from '@fluentui/react/lib/HoverCard'; -import { DirectionalHint } from '@fluentui/react/lib/common/DirectionalHint'; +import { DirectionalHint } from '@fluentui/react/lib/Callout'; import { Persona, PersonaSize } from '@fluentui/react/lib/Persona'; import { IconButton, Button, ButtonType } from '@fluentui/react/lib/Button'; import { Spinner, SpinnerSize } from '@fluentui/react/lib/Spinner'; diff --git a/src/controls/filePicker/FilePicker.tsx b/src/controls/filePicker/FilePicker.tsx index 3983116eb..32b78215e 100644 --- a/src/controls/filePicker/FilePicker.tsx +++ b/src/controls/filePicker/FilePicker.tsx @@ -5,12 +5,13 @@ import { IIconProps } from "@fluentui/react/lib/Icon"; import { ActionButton, PrimaryButton -} from "@fluentui/react/lib/components/Button"; -import { Label } from "@fluentui/react/lib/components/Label"; +} from "@fluentui/react/lib/Button"; + +import { Label } from "@fluentui/react/lib/Label"; import { Panel, PanelType -} from "@fluentui/react/lib/components/Panel"; +} from "@fluentui/react/lib/Panel"; import { INavLink, INavLinkGroup, diff --git a/src/controls/filePicker/LinkFilePickerTab/LinkFilePickerTab.tsx b/src/controls/filePicker/LinkFilePickerTab/LinkFilePickerTab.tsx index 505db4609..cc707c005 100644 --- a/src/controls/filePicker/LinkFilePickerTab/LinkFilePickerTab.tsx +++ b/src/controls/filePicker/LinkFilePickerTab/LinkFilePickerTab.tsx @@ -4,7 +4,7 @@ import { ILinkFilePickerTabProps } from './ILinkFilePickerTabProps'; import { ILinkFilePickerTabState } from './ILinkFilePickerTabState'; import { GeneralHelper } from '../../../common/utilities/GeneralHelper'; import { IFilePickerResult } from '../FilePicker.types'; -import { PrimaryButton, DefaultButton } from '@fluentui/react/lib/components/Button'; +import { PrimaryButton, DefaultButton } from '@fluentui/react/lib/Button'; import { TextField } from '@fluentui/react/lib/TextField'; import { css } from '@fluentui/react/lib/Utilities'; @@ -34,7 +34,6 @@ export default class LinkFilePickerTab extends React.Component this._getErrorMessagePromise(value)} autoAdjustHeight={false} underlined={false} @@ -64,7 +63,7 @@ export default class LinkFilePickerTab extends React.Component { - const filePickerResult: IFilePickerResult = fileUrl && this._isUrl(fileUrl) ? { + const filePickerResult: IFilePickerResult = fileUrl ? { fileAbsoluteUrl: fileUrl, fileName: GeneralHelper.getFileNameFromUrl(fileUrl), fileNameWithoutExtension: GeneralHelper.getFileNameWithoutExtension(fileUrl), @@ -81,7 +80,7 @@ export default class LinkFilePickerTab extends React.Component => { // DOn't give an error for blank or placeholder value, but don't make it a valid entry either - if (value === undefined || value === 'https://') { + if (value === undefined || value === '') { this.setState({ isValid: false }); return ''; } @@ -89,7 +88,7 @@ export default class LinkFilePickerTab extends React.Component { iconElm = ; } + // Bind events + iconElm.props.onClick = this.props.onClick; + iconElm.props.onDoubleClick = this.props.onDoubleClick; + iconElm.props.onMouseEnter = this.props.onMouseEnter; + iconElm.props.onMouseLeave = this.props.onMouseLeave; + iconElm.props.onMouseOver = this.props.onMouseOver; + iconElm.props.onMouseUp = this.props.onMouseUp; + // Return the icon element return iconElm; } diff --git a/src/controls/fileTypeIcon/IFileTypeIcon.ts b/src/controls/fileTypeIcon/IFileTypeIcon.ts index a70ddf4fc..d2f2d7db7 100644 --- a/src/controls/fileTypeIcon/IFileTypeIcon.ts +++ b/src/controls/fileTypeIcon/IFileTypeIcon.ts @@ -1,3 +1,5 @@ +import { MouseEventHandler } from "react"; + /** * Available icon types */ @@ -225,11 +227,16 @@ export interface ImageInformation { * Interface for the FileTypeIcon component properties */ export interface IFileTypeIconProps { - type: IconType; application?: ApplicationType; path?: string; size?: ImageSize; + onClick?: MouseEventHandler | undefined; + onDoubleClick?: MouseEventHandler | undefined; + onMouseEnter?: MouseEventHandler | undefined; + onMouseLeave?: MouseEventHandler | undefined; + onMouseOver?: MouseEventHandler | undefined; + onMouseUp?: MouseEventHandler | undefined; } /** diff --git a/src/controls/listItemComments/components/ConfirmDelete/ConfirmDelete.tsx b/src/controls/listItemComments/components/ConfirmDelete/ConfirmDelete.tsx index b828481be..bc09f7993 100644 --- a/src/controls/listItemComments/components/ConfirmDelete/ConfirmDelete.tsx +++ b/src/controls/listItemComments/components/ConfirmDelete/ConfirmDelete.tsx @@ -4,7 +4,7 @@ import { ListItemCommentsStateContext } from "../ListItemCommentsStateProvider"; import { Dialog, DialogType, DialogFooter } from "@fluentui/react/lib/Dialog"; import { PrimaryButton, DefaultButton } from "@fluentui/react/lib/Button"; import { CommentItem } from "../Comments/CommentItem"; -import { DocumentCard } from "@fluentui/react/lib/components/DocumentCard"; +import { DocumentCard } from "@fluentui/react/lib/DocumentCard"; import { DocumentCardDetails } from "@fluentui/react/lib/DocumentCard"; import { Stack } from "@fluentui/react/lib/Stack"; import { useListItemCommentsStyles } from "../Comments/useListItemCommentsStyles"; diff --git a/src/controls/listItemPicker/IComboBoxListItemPickerProps.ts b/src/controls/listItemPicker/IComboBoxListItemPickerProps.ts index 9e74e708f..30ee514a1 100644 --- a/src/controls/listItemPicker/IComboBoxListItemPickerProps.ts +++ b/src/controls/listItemPicker/IComboBoxListItemPickerProps.ts @@ -1,7 +1,7 @@ -import { IComboBoxOptionStyles, IComboBoxStyles } from "@fluentui/react/lib/components/ComboBox"; +import { IComboBoxOptionStyles, IComboBoxStyles } from "@fluentui/react/lib/ComboBox"; -import { IAutofillProps } from "@fluentui/react/lib/components/Autofill"; -import { IKeytipProps } from "@fluentui/react/lib/components/Keytip"; +import { IAutofillProps } from "@fluentui/react/lib/Autofill"; +import { IKeytipProps } from "@fluentui/react/lib/Keytip"; import { SPHttpClient } from '@microsoft/sp-http'; export interface IComboBoxListItemPickerProps { diff --git a/src/controls/listItemPicker/ListItemPicker.tsx b/src/controls/listItemPicker/ListItemPicker.tsx index 928bbcdb9..d4c982976 100644 --- a/src/controls/listItemPicker/ListItemPicker.tsx +++ b/src/controls/listItemPicker/ListItemPicker.tsx @@ -1,14 +1,13 @@ import * as strings from 'ControlStrings'; import * as React from "react"; import SPservice from "../../services/SPService"; -import { TagPicker } from "@fluentui/react/lib/components/pickers/TagPicker/TagPicker"; +import { ITag, TagPicker } from '@fluentui/react/lib/Pickers'; import { Label } from "@fluentui/react/lib/Label"; import { getId } from '@fluentui/react/lib/Utilities'; import { IListItemPickerProps } from "./IListItemPickerProps"; import { IListItemPickerState } from "./IListItemPickerState"; import * as telemetry from '../../common/telemetry'; import isEqual from 'lodash/isEqual'; -import { ITag } from '@fluentui/react/lib/components/pickers/TagPicker/TagPicker.types'; import { SPHelper } from '../../common/utilities/SPHelper'; import { Guid } from "@microsoft/sp-core-library" diff --git a/src/controls/listPicker/ListPicker.tsx b/src/controls/listPicker/ListPicker.tsx index 38d273803..5cb6ef0af 100644 --- a/src/controls/listPicker/ListPicker.tsx +++ b/src/controls/listPicker/ListPicker.tsx @@ -1,6 +1,6 @@ import { cloneDeep } from '@microsoft/sp-lodash-subset'; -import { Dropdown, IDropdownOption, IDropdownProps } from '@fluentui/react/lib/components/Dropdown'; -import { Spinner, SpinnerSize } from '@fluentui/react/lib/components/Spinner'; +import { Dropdown, IDropdownOption, IDropdownProps } from '@fluentui/react/lib/Dropdown'; +import { Spinner, SpinnerSize } from '@fluentui/react/lib/Spinner'; import * as React from 'react'; import * as telemetry from '../../common/telemetry'; diff --git a/src/controls/listView/IListView.ts b/src/controls/listView/IListView.ts index 6fed62c20..cd5b1fbd1 100644 --- a/src/controls/listView/IListView.ts +++ b/src/controls/listView/IListView.ts @@ -1,4 +1,4 @@ -import { IColumn, IGroup, SelectionMode, IDetailsRowProps } from '@fluentui/react/lib/components/DetailsList'; +import { IColumn, IGroup, SelectionMode, IDetailsRowProps } from '@fluentui/react/lib/DetailsList'; export { SelectionMode }; diff --git a/src/controls/listView/ListView.tsx b/src/controls/listView/ListView.tsx index 80c5067c0..de3189935 100644 --- a/src/controls/listView/ListView.tsx +++ b/src/controls/listView/ListView.tsx @@ -6,7 +6,7 @@ import { IRenderFunction } from '@fluentui/react/lib/Utilities'; import { mergeStyleSets } from '@fluentui/react/lib/Styling'; import { DetailsList, DetailsListLayoutMode, Selection, SelectionMode, IGroup, IDetailsHeaderProps } from '@fluentui/react/lib/DetailsList'; import { IListViewProps, IListViewState, IViewField, IGrouping, GroupOrder } from './IListView'; -import { IColumn, IGroupRenderProps } from '@fluentui/react/lib/components/DetailsList'; +import { IColumn, IGroupRenderProps } from '@fluentui/react/lib/DetailsList'; import { findIndex, has, sortBy, isEqual, cloneDeep } from '@microsoft/sp-lodash-subset'; import { FileTypeIcon, IconType } from '../fileTypeIcon/index'; import * as strings from 'ControlStrings'; diff --git a/src/controls/map/Map.tsx b/src/controls/map/Map.tsx index 8449e64c7..531f7e8c7 100644 --- a/src/controls/map/Map.tsx +++ b/src/controls/map/Map.tsx @@ -4,11 +4,11 @@ import styles from './Maps.module.scss'; import { IMapProps } from './IMapProps'; import { IMapState } from './IMapState'; import { ICoordinates, MapType, LocationInfo } from './IMap'; -import { Label } from '@fluentui/react/lib/components/Label'; +import { Label } from '@fluentui/react/lib/Label'; import { Spinner, SpinnerSize } from '@fluentui/react/lib/Spinner'; -import { Icon } from "@fluentui/react/lib/components/Icon"; -import { PrimaryButton } from "@fluentui/react/lib/components/Button"; -import { TextField } from "@fluentui/react/lib/components/TextField"; +import { Icon } from "@fluentui/react/lib/Icon"; +import { PrimaryButton } from "@fluentui/react/lib/Button"; +import { TextField } from "@fluentui/react/lib/TextField"; import * as telemetry from '../../common/telemetry'; import { isEqual } from "@microsoft/sp-lodash-subset"; diff --git a/src/controls/modernTaxonomyPicker/ModernTaxonomyPicker.tsx b/src/controls/modernTaxonomyPicker/ModernTaxonomyPicker.tsx index 08649ecc2..5567b78d7 100644 --- a/src/controls/modernTaxonomyPicker/ModernTaxonomyPicker.tsx +++ b/src/controls/modernTaxonomyPicker/ModernTaxonomyPicker.tsx @@ -11,7 +11,7 @@ import * as strings from 'ControlStrings'; import { DefaultButton, IButtonStyles, IconButton, PrimaryButton } from '@fluentui/react/lib/Button'; -import { IIconProps } from '@fluentui/react/lib/components/Icon'; +import { IIconProps } from '@fluentui/react/lib/Icon'; import { Label } from '@fluentui/react/lib/Label'; import { Panel, diff --git a/src/controls/modernTaxonomyPicker/modernTermPicker/ModernTermPicker.tsx b/src/controls/modernTaxonomyPicker/modernTermPicker/ModernTermPicker.tsx index f133b35f7..152c41207 100644 --- a/src/controls/modernTaxonomyPicker/modernTermPicker/ModernTermPicker.tsx +++ b/src/controls/modernTaxonomyPicker/modernTermPicker/ModernTermPicker.tsx @@ -1,19 +1,17 @@ import React from 'react'; -import { BasePicker } from '@fluentui/react/lib/components/pickers/BasePicker'; import { IModernTermPickerProps, ITermItemProps } from './ModernTermPicker.types'; import { TermItem } from '../termItem/TermItem'; import { TermItemSuggestion } from '../termItem/TermItemSuggestion'; -import { IBasePickerStyleProps, - IBasePickerStyles - } from '@fluentui/react/lib/components/pickers/BasePicker.types'; -import { getStyles } from '@fluentui/react/lib/components/pickers/BasePicker.styles'; + import { initializeComponentRef, styled } from '@fluentui/react/lib/Utilities'; -import { ISuggestionItemProps } from '@fluentui/react/lib/components/pickers/Suggestions/SuggestionsItem.types'; + import { ITermInfo } from '@pnp/sp/taxonomy'; +import { BasePicker, IBasePickerStyleProps, IBasePickerStyles, ISuggestionItemProps } from '@fluentui/react/lib/Pickers'; +import { getStyles } from '@fluentui/react/lib/components/pickers/BasePicker.styles'; export class ModernTermPickerBase extends BasePicker { public static defaultProps = { diff --git a/src/controls/modernTaxonomyPicker/modernTermPicker/ModernTermPicker.types.ts b/src/controls/modernTaxonomyPicker/modernTermPicker/ModernTermPicker.types.ts index 7bcbb1111..65f8b41c6 100644 --- a/src/controls/modernTaxonomyPicker/modernTermPicker/ModernTermPicker.types.ts +++ b/src/controls/modernTaxonomyPicker/modernTermPicker/ModernTermPicker.types.ts @@ -1,9 +1,8 @@ import { ITermInfo, ITermStoreInfo } from '@pnp/sp/taxonomy'; -import { IBasePickerProps } from '@fluentui/react/lib/components/pickers/BasePicker.types'; -import { IPickerItemProps } from '@fluentui/react/lib/components/pickers/PickerItem.types'; import { IStyle, ITheme } from '@fluentui/react/lib/Styling'; import { IStyleFunctionOrObject } from '@fluentui/react/lib/Utilities'; import { IReadonlyTheme } from '@microsoft/sp-component-base'; +import { IBasePickerProps, IPickerItemProps } from '@fluentui/react/lib/Pickers'; export interface IModernTermPickerProps extends IBasePickerProps { themeVariant?: IReadonlyTheme; diff --git a/src/controls/modernTaxonomyPicker/termItem/TermItem.styles.ts b/src/controls/modernTaxonomyPicker/termItem/TermItem.styles.ts index eddd099d8..a5e9b6af0 100644 --- a/src/controls/modernTaxonomyPicker/termItem/TermItem.styles.ts +++ b/src/controls/modernTaxonomyPicker/termItem/TermItem.styles.ts @@ -1,7 +1,7 @@ -import { ButtonGlobalClassNames } from "@fluentui/react/lib/components/Button/BaseButton.classNames"; import { getFocusStyle, getGlobalClassNames, HighContrastSelector } from "@fluentui/react/lib/Styling"; import { getRTL } from "@fluentui/react/lib/Utilities"; import { ITermItemStyleProps, ITermItemStyles } from "../modernTermPicker/ModernTermPicker.types"; +import { ButtonGlobalClassNames } from "@fluentui/react/lib/Button"; const GlobalClassNames = { root: 'ms-TagItem', diff --git a/src/controls/modernTaxonomyPicker/termItem/TermItem.tsx b/src/controls/modernTaxonomyPicker/termItem/TermItem.tsx index 282dc459c..f02f85e72 100644 --- a/src/controls/modernTaxonomyPicker/termItem/TermItem.tsx +++ b/src/controls/modernTaxonomyPicker/termItem/TermItem.tsx @@ -1,8 +1,9 @@ -import { IconButton } from '@fluentui/react/lib/components/Button/IconButton/IconButton'; + import { classNamesFunction, styled } from '@fluentui/react/lib/Utilities'; import * as React from 'react'; import { ITermItemProps, ITermItemStyleProps, ITermItemStyles } from '../modernTermPicker/ModernTermPicker.types'; import { getStyles } from './TermItem.styles'; +import { IconButton } from '@fluentui/react/lib/Button'; const getClassNames = classNamesFunction(); diff --git a/src/controls/monacoEditor/Error.tsx b/src/controls/monacoEditor/Error.tsx index 7647cf491..bbd1c1473 100644 --- a/src/controls/monacoEditor/Error.tsx +++ b/src/controls/monacoEditor/Error.tsx @@ -1,5 +1,5 @@ -import { Stack } from "@fluentui/react/lib/components/Stack"; +import { Stack } from "@fluentui/react/lib/Stack"; import { MessageBarType, MessageBar } from "@fluentui/react/lib/MessageBar"; import * as React from "react"; diff --git a/src/controls/peoplepicker/IPeoplePicker.ts b/src/controls/peoplepicker/IPeoplePicker.ts index 2eeb091db..3d6f1cec7 100644 --- a/src/controls/peoplepicker/IPeoplePicker.ts +++ b/src/controls/peoplepicker/IPeoplePicker.ts @@ -1,8 +1,7 @@ -import { BaseComponentContext } from '@microsoft/sp-component-base'; -import { IBasePickerStyles } from "@fluentui/react"; -import { DirectionalHint } from "@fluentui/react/lib/common/DirectionalHint"; -import { IPersonaProps } from "@fluentui/react/lib/components/Persona/Persona.types"; -import { PrincipalType } from "."; +import { DirectionalHint } from '@fluentui/react/lib/Callout'; +import { IPersonaProps } from '@fluentui/react/lib/Persona'; +import { IBasePickerStyles } from '@fluentui/react/lib/Pickers'; +import { IPeoplePickerContext, PrincipalType } from "."; /** * Used to display a placeholder in case of no or temporary content. Button is optional. @@ -12,7 +11,7 @@ export interface IPeoplePickerProps { /** * Context of the component */ - context: BaseComponentContext; + context: IPeoplePickerContext; /** * Text of the Control */ @@ -139,17 +138,6 @@ export interface IPeoplePickerProps { resultFilter?: (result: IPersonaProps[]) => IPersonaProps[]; } -export interface IPeoplePickerState { - mostRecentlyUsedPersons?: IPersonaProps[]; - errorMessage?: string; - internalErrorMessage?: string; - resolveDelay?: number; - - selectedPersons?: IPersonaProps[]; - peoplePersonaMenu?: IPersonaProps[]; - delayResults?: boolean; -} - export interface IPeoplePickerUserItem { /** * LoginName or Id of the principal in the site. diff --git a/src/controls/peoplepicker/IPeoplePickerContext.ts b/src/controls/peoplepicker/IPeoplePickerContext.ts new file mode 100644 index 000000000..7519e487f --- /dev/null +++ b/src/controls/peoplepicker/IPeoplePickerContext.ts @@ -0,0 +1,19 @@ +import { MSGraphClientFactory, SPHttpClient } from "@microsoft/sp-http"; + +/** + * Context for the PeoplePicker control + */ +export interface IPeoplePickerContext { + /** + * Current `SPWeb` absolute URL. + */ + absoluteUrl: string; + /** + * Instance of MSGraphClientFactory used for querying Microsoft Graph REST API. + */ + msGraphClientFactory: MSGraphClientFactory; + /** + * Instance of SPHttpClient used for querying SharePoint REST API. + */ + spHttpClient: SPHttpClient; +} \ No newline at end of file diff --git a/src/controls/peoplepicker/PeoplePickerComponent.tsx b/src/controls/peoplepicker/PeoplePickerComponent.tsx index 2fa52a8dd..b43681c87 100644 --- a/src/controls/peoplepicker/PeoplePickerComponent.tsx +++ b/src/controls/peoplepicker/PeoplePickerComponent.tsx @@ -3,16 +3,26 @@ import * as React from 'react'; import * as telemetry from '../../common/telemetry'; import styles from './PeoplePickerComponent.module.scss'; import SPPeopleSearchService from "../../services/PeopleSearchService"; -import { IPeoplePickerProps, IPeoplePickerState } from './IPeoplePicker'; +import { IPeoplePickerProps } from './IPeoplePicker'; import { TooltipHost } from '@fluentui/react/lib/Tooltip'; import { DirectionalHint } from '@fluentui/react/lib/Callout'; -import { NormalPeoplePicker } from '@fluentui/react/lib/components/pickers/PeoplePicker/PeoplePicker'; -import { Label } from '@fluentui/react/lib/components/Label'; -import { IBasePickerSuggestionsProps } from "@fluentui/react/lib/components/pickers/BasePicker.types"; -import { IPersonaProps } from "@fluentui/react/lib/components/Persona/Persona.types"; +import { Label } from '@fluentui/react/lib/Label'; import FieldErrorMessage from '../errorMessage/ErrorMessage'; import isEqual from 'lodash/isEqual'; import uniqBy from 'lodash/uniqBy'; +import { IPersonaProps } from '@fluentui/react/lib/Persona'; +import { IBasePickerSuggestionsProps, NormalPeoplePicker} from '@fluentui/react/lib/Pickers'; + +interface IPeoplePickerState { + mostRecentlyUsedPersons?: IPersonaProps[]; + errorMessage?: string; + internalErrorMessage?: string; + resolveDelay?: number; + + selectedPersons?: IPersonaProps[]; + peoplePersonaMenu?: IPersonaProps[]; + delayResults?: boolean; +} /** * PeoplePicker component diff --git a/src/controls/peoplepicker/index.ts b/src/controls/peoplepicker/index.ts index 73502887f..b4602fd13 100644 --- a/src/controls/peoplepicker/index.ts +++ b/src/controls/peoplepicker/index.ts @@ -1,3 +1,4 @@ export * from './IPeoplePicker'; +export * from './IPeoplePickerContext'; export * from './PeoplePickerComponent'; export * from './PrincipalType'; diff --git a/src/controls/placeholder/PlaceholderComponent.tsx b/src/controls/placeholder/PlaceholderComponent.tsx index 961899516..e5fc0fa2b 100644 --- a/src/controls/placeholder/PlaceholderComponent.tsx +++ b/src/controls/placeholder/PlaceholderComponent.tsx @@ -1,7 +1,7 @@ import { ThemeContext } from '@fluentui/react-theme-provider/lib/ThemeContext'; import { Theme } from '@fluentui/react-theme-provider/lib/types'; import { PrimaryButton } from '@fluentui/react/lib/Button'; -import { Icon } from '@fluentui/react/lib/components/Icon'; +import { Icon } from '@fluentui/react/lib/Icon'; import * as React from 'react'; import { IPlaceholderState } from '.'; import * as telemetry from '../../common/telemetry'; diff --git a/src/controls/richText/RichText.tsx b/src/controls/richText/RichText.tsx index 4a743b535..ec31a0f37 100644 --- a/src/controls/richText/RichText.tsx +++ b/src/controls/richText/RichText.tsx @@ -467,7 +467,7 @@ export class RichText extends React.Component { } // Okay, we're in edit mode. - const { placeholder, styleOptions: { showStyles, showBold, showItalic, showUnderline, showAlign, showList, showLink, showMore, showImage } } = this.props; + const { placeholder,style, styleOptions: { showStyles, showBold, showItalic, showUnderline, showAlign, showList, showLink, showMore, showImage } } = this.props; // Get a unique id for the toolbar const modules = { @@ -516,7 +516,7 @@ export class RichText extends React.Component { ReactQuillInstance.register(sizeClass, true); return ( -
{ this._wrapperRef = ref; }} className={css(styles.richtext && this.state.editing ? 'ql-active' : null, this.props.className || null) || null}> +
{ this._wrapperRef = ref; }} className={css(styles.richtext && this.state.editing ? 'ql-active' : null, this.props.className || null) || null} style={style}> {renderLabel}
{ diff --git a/src/controls/richText/RichText.types.ts b/src/controls/richText/RichText.types.ts index 8a908d416..5852cf7fc 100644 --- a/src/controls/richText/RichText.types.ts +++ b/src/controls/richText/RichText.types.ts @@ -1,3 +1,4 @@ +import React from 'react'; import { ISwatchColor } from './SwatchColorPickerGroup.types'; export interface IRichTextProps { /** @@ -18,6 +19,12 @@ export interface IRichTextProps { */ className?: string; + /** + * Styles to apply to the rich text editor. + * @defaultvalue null + */ + style?: React.CSSProperties; + /** * Indicates if the rich text editor should be in edit mode * @defaultvalue true @@ -28,7 +35,7 @@ export interface IRichTextProps { * Placeholder text to show when editor is empty. * @defaultvalue undefined */ - placeholder? : string; + placeholder?: string; /** * The HTML text containing the rich text diff --git a/src/controls/taxonomyPicker/TaxonomyPicker.tsx b/src/controls/taxonomyPicker/TaxonomyPicker.tsx index 38b5831ed..b91d2297e 100644 --- a/src/controls/taxonomyPicker/TaxonomyPicker.tsx +++ b/src/controls/taxonomyPicker/TaxonomyPicker.tsx @@ -2,7 +2,6 @@ import * as React from 'react'; import { PrimaryButton, DefaultButton, IconButton } from '@fluentui/react/lib/Button'; import { Panel, PanelType } from '@fluentui/react/lib/Panel'; import { Spinner, SpinnerSize } from '@fluentui/react/lib/Spinner'; -import { Autofill } from '@fluentui/react/lib/components/Autofill/Autofill'; import { Label } from '@fluentui/react/lib/Label'; import TermPicker from './TermPicker'; import { IPickerTerms, IPickerTerm } from './ITermPicker'; @@ -18,6 +17,7 @@ import FieldErrorMessage from '../errorMessage/ErrorMessage'; import { initializeIcons } from '@uifabric/icons'; import * as telemetry from '../../common/telemetry'; import { EmptyGuid } from '../../common/Constants'; +import { Autofill } from '@fluentui/react/lib/Autofill'; /** * Image URLs / Base64 diff --git a/src/controls/taxonomyPicker/TermPicker.tsx b/src/controls/taxonomyPicker/TermPicker.tsx index 5843acec6..db00548d3 100644 --- a/src/controls/taxonomyPicker/TermPicker.tsx +++ b/src/controls/taxonomyPicker/TermPicker.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { BasePicker, IBasePickerProps, IInputProps, IPickerItemProps } from '@fluentui/react/lib/Pickers'; +import { Autofill, BasePicker, IBasePickerProps, IInputProps, IPickerItemProps } from '@fluentui/react/lib/Pickers'; import { IPickerTerm, IPickerTerms } from './ITermPicker'; import SPTermStorePickerService from './../../services/SPTermStorePickerService'; import styles from './TaxonomyPicker.module.scss'; @@ -8,7 +8,6 @@ import { BaseComponentContext } from '@microsoft/sp-component-base'; import * as strings from 'ControlStrings'; import { Icon } from '@fluentui/react/lib/Icon'; import { ITermSet } from "../../services/ISPTermStorePickerService"; -import { Autofill } from '@fluentui/react/lib/components/Autofill/Autofill'; import { LegacyRef, KeyboardEvent } from 'react'; export class TermBasePicker extends BasePicker> diff --git a/src/controls/toolbar/InFlowToolbarItem.tsx b/src/controls/toolbar/InFlowToolbarItem.tsx index f6d43160f..10f6bf854 100644 --- a/src/controls/toolbar/InFlowToolbarItem.tsx +++ b/src/controls/toolbar/InFlowToolbarItem.tsx @@ -6,11 +6,11 @@ import { tooltipAsLabelBehavior } from "@fluentui/react-northstar"; import { cloneDeep } from "@microsoft/sp-lodash-subset"; -import { Icon } from "@fluentui/react/lib/components/Icon/Icon"; import * as React from "react"; import { TAction } from "../../common/model/TAction"; import styles from "./Toolbar.module.scss"; import { TToolbarLayout } from "./ToolbarActionsUtils"; +import { Icon } from "@fluentui/react/lib/Icon"; interface IInFlowToolbarItemProps { action: TAction; diff --git a/src/controls/toolbar/Toolbar.tsx b/src/controls/toolbar/Toolbar.tsx index 6507a3f6d..eaac588df 100644 --- a/src/controls/toolbar/Toolbar.tsx +++ b/src/controls/toolbar/Toolbar.tsx @@ -15,11 +15,11 @@ import { ToolbarFind } from "./ToolbarFind"; import { ToolbarTheme } from "./ToolbarTheme"; import "./toolbar.css"; -import { Icon } from "@fluentui/react/lib/components/Icon/Icon"; import { InFlowToolbarItem, toolbarMenuProps } from "./InFlowToolbarItem"; import styles from "./Toolbar.module.scss"; import { flattenedActions, getInFlowToolbarItems, getOverflowToolbarItems, TActionGroups, TFilters, TToolbarItems, TToolbarLayout } from "./ToolbarActionsUtils"; import { useTelemetry } from "../../common/telemetry"; +import { Icon } from "@fluentui/react/lib/Icon"; /** * Toolbar props diff --git a/src/loc/nl-nl.ts b/src/loc/nl-nl.ts index 20ac59f31..8dba0fdb0 100644 --- a/src/loc/nl-nl.ts +++ b/src/loc/nl-nl.ts @@ -145,7 +145,7 @@ define([], () => { "HighlightColorTeal": "Taling", "HighlightColorDarkgreen": "Donkergroen", "HighlightColorPurple": "Paarse", - "HighlightColorMaroon": "Bosneger", + "HighlightColorMaroon": "Kastanjebruin", "HighlightColorGold": "Goud", "HighlightColorDarkgrey": "Donkergrijs", "HighlightColorGrey": "Grijs", diff --git a/src/services/PeopleSearchService.ts b/src/services/PeopleSearchService.ts index 85c16a80c..c7c2820ed 100644 --- a/src/services/PeopleSearchService.ts +++ b/src/services/PeopleSearchService.ts @@ -1,4 +1,3 @@ -import { BaseComponentContext } from '@microsoft/sp-component-base'; import { ISPHttpClientOptions, SPHttpClient } from '@microsoft/sp-http'; import { findIndex } from "@microsoft/sp-lodash-subset"; import { sp } from '@pnp/sp'; @@ -7,7 +6,7 @@ import "@pnp/sp/sputilities"; import "@pnp/sp/webs"; import { Web } from "@pnp/sp/webs"; import { IUserInfo } from "../controls/peoplepicker/IUsers"; -import { IPeoplePickerUserItem, PrincipalType } from "../PeoplePicker"; +import { IPeoplePickerContext, IPeoplePickerUserItem, PrincipalType } from "../PeoplePicker"; /** * Service implementation to search people in SharePoint @@ -19,12 +18,16 @@ export default class SPPeopleSearchService { /** * Service constructor */ - constructor(private context: BaseComponentContext) { + constructor(private context: IPeoplePickerContext) { this.cachedPersonas = {}; this.cachedLocalUsers = {}; - this.cachedLocalUsers[this.context.pageContext.web.absoluteUrl] = []; + this.cachedLocalUsers[context.absoluteUrl] = []; // Setup PnPjs - sp.setup({ pageContext: this.context.pageContext }); + sp.setup({ pageContext: { + web: { + absoluteUrl: context.absoluteUrl + } + }}); } /** @@ -33,7 +36,7 @@ export default class SPPeopleSearchService { * @param value */ public generateUserPhotoLink(value: string): string { - return `${this.context.pageContext.web.absoluteUrl}/_layouts/15/userphoto.aspx?accountname=${encodeURIComponent(value)}&size=M`; + return `${this.context.absoluteUrl}/_layouts/15/userphoto.aspx?accountname=${encodeURIComponent(value)}&size=M`; } /** @@ -109,7 +112,7 @@ export default class SPPeopleSearchService { private async searchTenant(siteUrl: string, query: string, maximumSuggestions: number, principalTypes: PrincipalType[], ensureUser: boolean, allowUnvalidated: boolean, groupId: number | string): Promise { try { // If the running env is SharePoint, loads from the peoplepicker web service - const userRequestUrl: string = `${siteUrl || this.context.pageContext.web.absoluteUrl}/_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerSearchUser`; + const userRequestUrl: string = `${siteUrl || this.context.absoluteUrl}/_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerSearchUser`; // eslint-disable-next-line @typescript-eslint/no-explicit-any const searchBody: any = { queryParams: { @@ -143,7 +146,7 @@ export default class SPPeopleSearchService { // Get user loginName from user email const _users = []; - const batch = Web(this.context.pageContext.web.absoluteUrl).createBatch(); + const batch = Web(this.context.absoluteUrl).createBatch(); for (const value of graphUserResponse.value) { sp.web.inBatch(batch).ensureUser(value.userPrincipalName).then(u => _users.push(u.data)).catch(() => { // no-op @@ -203,7 +206,7 @@ export default class SPPeopleSearchService { for (const value of values) { // Only ensure the user if it is not a SharePoint group if (!value.EntityData || (value.EntityData && typeof value.EntityData.SPGroupID === "undefined" && value.EntityData.PrincipalType !== "UNVALIDATED_EMAIL_ADDRESS")) { - const id = await this.ensureUser(value.Key, siteUrl || this.context.pageContext.web.absoluteUrl); + const id = await this.ensureUser(value.Key, siteUrl || this.context.absoluteUrl); value.LoginName = value.Key; value.Key = id; } diff --git a/src/services/SPService.ts b/src/services/SPService.ts index 7a276ab73..3edcf6f56 100644 --- a/src/services/SPService.ts +++ b/src/services/SPService.ts @@ -654,9 +654,9 @@ export default class SPService implements ISPService { } } - public async getSingleManagedMetadataLabel(listId: string, listItemId: number, fieldName: string): Promise { // eslint-disable-line @typescript-eslint/no-explicit-any + public async getSingleManagedMetadataLabel(listId: string, listItemId: number, fieldName: string, webUrl?: string): Promise { // eslint-disable-line @typescript-eslint/no-explicit-any try { - const webAbsoluteUrl = this._context.pageContext.web.absoluteUrl; + const webAbsoluteUrl = !webUrl ? this._context.pageContext.web.absoluteUrl : webUrl; const apiUrl = `${webAbsoluteUrl}/_api/web/lists(@listId)/RenderListDataAsStream?@listId=guid'${encodeURIComponent(listId)}'`; const data = await this._context.spHttpClient.post(apiUrl, SPHttpClient.configurations.v1, { body: JSON.stringify({ diff --git a/src/webparts/controlsTest/components/ControlsTest.tsx b/src/webparts/controlsTest/components/ControlsTest.tsx index 549f5faee..bb8114ba0 100644 --- a/src/webparts/controlsTest/components/ControlsTest.tsx +++ b/src/webparts/controlsTest/components/ControlsTest.tsx @@ -15,14 +15,14 @@ import { import { DefaultButton, PrimaryButton -} from "@fluentui/react/lib/components/Button"; -import { DialogType, DialogFooter, IDialogContentProps } from "@fluentui/react/lib/components/Dialog"; +} from "@fluentui/react/lib/Button"; +import { DialogType, DialogFooter, IDialogContentProps } from "@fluentui/react/lib/Dialog"; import { IModalProps } from "@fluentui/react/lib/Modal"; import { Dropdown, IDropdownOption -} from "@fluentui/react/lib/components/Dropdown"; -import { Link } from "@fluentui/react/lib/components/Link"; +} from "@fluentui/react/lib/Dropdown"; +import { Link } from "@fluentui/react/lib/Link"; import { DocumentCard, DocumentCardActivity, @@ -142,6 +142,7 @@ import { MapType } from "../../../Map"; import { + IPeoplePickerContext, PeoplePicker, PrincipalType } from "../../../controls/peoplepicker"; @@ -481,6 +482,7 @@ export default class ControlsTest extends React.Component
+
+ Image icons with support to events: + console.log("onClick on FileTypeIcon!")} + onDoubleClick={(e) => console.log("onDoubleClick on FileTypeIcon!")} + onMouseEnter={(e) => console.log("onMouseEnter on FileTypeIcon!")} + onMouseLeave={(e) => console.log("onMouseLeave on FileTypeIcon!")} + onMouseOver={(e) => console.log("onMouseOver on FileTypeIcon!")} + onMouseUp={(e) => console.log("onMouseUp on FileTypeIcon!")} + /> +
Icon size tester: @@ -1791,6 +1810,13 @@ export default class ControlsTest extends React.Component
+
+

Carousel with minimal configuration:

+ +