@pnp/spfx-controls-react 3.26.0-beta.4125643 → 3.26.0-beta.4125690
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/jest-output/JUnit.xml +121 -121
- package/lib/common/telemetry/version.js +1 -1
- package/lib/controls/richText/RichText.d.ts.map +1 -1
- package/lib/controls/richText/RichText.js +6 -6
- package/lib/controls/richText/RichText.js.map +1 -1
- package/lib/controls/richText/RichTextPropertyPane.d.ts +2 -2
- package/lib/controls/richText/RichTextPropertyPane.d.ts.map +1 -1
- package/lib/controls/richText/RichTextPropertyPane.js.map +1 -1
- package/lib-commonjs/common/telemetry/version.js +1 -1
- package/lib-commonjs/controls/richText/RichText.js +6 -6
- package/lib-commonjs/controls/richText/RichText.js.map +1 -1
- package/lib-commonjs/controls/richText/RichTextPropertyPane.js.map +1 -1
- package/lib-commonjs/webparts/controlsTest/components/ControlsTest.js +4 -2
- package/lib-commonjs/webparts/controlsTest/components/ControlsTest.js.map +1 -1
- package/package.json +1 -1
- package/release/analysis-logs/lint.sarif +19 -450
- package/release/manifests/45165954-80f9-44c1-9967-cd38ae92a33b.manifest.json +1 -1
- package/release/manifests/57ebd944-98ed-43f9-b722-e959d6dac6ad.manifest.json +1 -1
- package/release/manifests/f9c6b930-8d5d-4550-bfd9-ed5f6ca443a8.manifest.json +1 -1
|
@@ -9826,181 +9826,10 @@
|
|
|
9826
9826
|
"index": 320
|
|
9827
9827
|
},
|
|
9828
9828
|
"region": {
|
|
9829
|
-
"startLine":
|
|
9830
|
-
"startColumn": 34,
|
|
9831
|
-
"endLine": 1029,
|
|
9832
|
-
"endColumn": 37,
|
|
9833
|
-
"snippet": {
|
|
9834
|
-
"text": "any"
|
|
9835
|
-
}
|
|
9836
|
-
}
|
|
9837
|
-
}
|
|
9838
|
-
}
|
|
9839
|
-
],
|
|
9840
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
9841
|
-
"ruleIndex": 0,
|
|
9842
|
-
"suppressions": []
|
|
9843
|
-
},
|
|
9844
|
-
{
|
|
9845
|
-
"level": "warning",
|
|
9846
|
-
"message": {
|
|
9847
|
-
"text": "Unexpected any. Specify a different type."
|
|
9848
|
-
},
|
|
9849
|
-
"locations": [
|
|
9850
|
-
{
|
|
9851
|
-
"physicalLocation": {
|
|
9852
|
-
"artifactLocation": {
|
|
9853
|
-
"uri": "src/controls/richText/RichText.tsx",
|
|
9854
|
-
"index": 320
|
|
9855
|
-
},
|
|
9856
|
-
"region": {
|
|
9857
|
-
"startLine": 1029,
|
|
9858
|
-
"startColumn": 47,
|
|
9859
|
-
"endLine": 1029,
|
|
9860
|
-
"endColumn": 50,
|
|
9861
|
-
"snippet": {
|
|
9862
|
-
"text": "any"
|
|
9863
|
-
}
|
|
9864
|
-
}
|
|
9865
|
-
}
|
|
9866
|
-
}
|
|
9867
|
-
],
|
|
9868
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
9869
|
-
"ruleIndex": 0,
|
|
9870
|
-
"suppressions": []
|
|
9871
|
-
},
|
|
9872
|
-
{
|
|
9873
|
-
"level": "warning",
|
|
9874
|
-
"message": {
|
|
9875
|
-
"text": "Unexpected any. Specify a different type."
|
|
9876
|
-
},
|
|
9877
|
-
"locations": [
|
|
9878
|
-
{
|
|
9879
|
-
"physicalLocation": {
|
|
9880
|
-
"artifactLocation": {
|
|
9881
|
-
"uri": "src/controls/richText/RichText.tsx",
|
|
9882
|
-
"index": 320
|
|
9883
|
-
},
|
|
9884
|
-
"region": {
|
|
9885
|
-
"startLine": 1029,
|
|
9886
|
-
"startColumn": 60,
|
|
9887
|
-
"endLine": 1029,
|
|
9888
|
-
"endColumn": 63,
|
|
9889
|
-
"snippet": {
|
|
9890
|
-
"text": "any"
|
|
9891
|
-
}
|
|
9892
|
-
}
|
|
9893
|
-
}
|
|
9894
|
-
}
|
|
9895
|
-
],
|
|
9896
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
9897
|
-
"ruleIndex": 0,
|
|
9898
|
-
"suppressions": []
|
|
9899
|
-
},
|
|
9900
|
-
{
|
|
9901
|
-
"level": "warning",
|
|
9902
|
-
"message": {
|
|
9903
|
-
"text": "Unexpected any. Specify a different type."
|
|
9904
|
-
},
|
|
9905
|
-
"locations": [
|
|
9906
|
-
{
|
|
9907
|
-
"physicalLocation": {
|
|
9908
|
-
"artifactLocation": {
|
|
9909
|
-
"uri": "src/controls/richText/RichText.tsx",
|
|
9910
|
-
"index": 320
|
|
9911
|
-
},
|
|
9912
|
-
"region": {
|
|
9913
|
-
"startLine": 1147,
|
|
9914
|
-
"startColumn": 10,
|
|
9915
|
-
"endLine": 1147,
|
|
9916
|
-
"endColumn": 13,
|
|
9917
|
-
"snippet": {
|
|
9918
|
-
"text": "any"
|
|
9919
|
-
}
|
|
9920
|
-
}
|
|
9921
|
-
}
|
|
9922
|
-
}
|
|
9923
|
-
],
|
|
9924
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
9925
|
-
"ruleIndex": 0,
|
|
9926
|
-
"suppressions": []
|
|
9927
|
-
},
|
|
9928
|
-
{
|
|
9929
|
-
"level": "warning",
|
|
9930
|
-
"message": {
|
|
9931
|
-
"text": "Unexpected any. Specify a different type."
|
|
9932
|
-
},
|
|
9933
|
-
"locations": [
|
|
9934
|
-
{
|
|
9935
|
-
"physicalLocation": {
|
|
9936
|
-
"artifactLocation": {
|
|
9937
|
-
"uri": "src/controls/richText/RichText.tsx",
|
|
9938
|
-
"index": 320
|
|
9939
|
-
},
|
|
9940
|
-
"region": {
|
|
9941
|
-
"startLine": 1148,
|
|
9942
|
-
"startColumn": 13,
|
|
9943
|
-
"endLine": 1148,
|
|
9944
|
-
"endColumn": 16,
|
|
9945
|
-
"snippet": {
|
|
9946
|
-
"text": "any"
|
|
9947
|
-
}
|
|
9948
|
-
}
|
|
9949
|
-
}
|
|
9950
|
-
}
|
|
9951
|
-
],
|
|
9952
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
9953
|
-
"ruleIndex": 0,
|
|
9954
|
-
"suppressions": []
|
|
9955
|
-
},
|
|
9956
|
-
{
|
|
9957
|
-
"level": "warning",
|
|
9958
|
-
"message": {
|
|
9959
|
-
"text": "Unexpected any. Specify a different type."
|
|
9960
|
-
},
|
|
9961
|
-
"locations": [
|
|
9962
|
-
{
|
|
9963
|
-
"physicalLocation": {
|
|
9964
|
-
"artifactLocation": {
|
|
9965
|
-
"uri": "src/controls/richText/RichText.tsx",
|
|
9966
|
-
"index": 320
|
|
9967
|
-
},
|
|
9968
|
-
"region": {
|
|
9969
|
-
"startLine": 1149,
|
|
9970
|
-
"startColumn": 11,
|
|
9971
|
-
"endLine": 1149,
|
|
9972
|
-
"endColumn": 14,
|
|
9973
|
-
"snippet": {
|
|
9974
|
-
"text": "any"
|
|
9975
|
-
}
|
|
9976
|
-
}
|
|
9977
|
-
}
|
|
9978
|
-
}
|
|
9979
|
-
],
|
|
9980
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
9981
|
-
"ruleIndex": 0,
|
|
9982
|
-
"suppressions": []
|
|
9983
|
-
},
|
|
9984
|
-
{
|
|
9985
|
-
"level": "warning",
|
|
9986
|
-
"message": {
|
|
9987
|
-
"text": "Unexpected any. Specify a different type."
|
|
9988
|
-
},
|
|
9989
|
-
"locations": [
|
|
9990
|
-
{
|
|
9991
|
-
"physicalLocation": {
|
|
9992
|
-
"artifactLocation": {
|
|
9993
|
-
"uri": "src/controls/richText/RichText.tsx",
|
|
9994
|
-
"index": 320
|
|
9995
|
-
},
|
|
9996
|
-
"region": {
|
|
9997
|
-
"startLine": 1133,
|
|
9829
|
+
"startLine": 1137,
|
|
9998
9830
|
"startColumn": 43,
|
|
9999
|
-
"endLine":
|
|
10000
|
-
"endColumn": 46
|
|
10001
|
-
"snippet": {
|
|
10002
|
-
"text": "any"
|
|
10003
|
-
}
|
|
9831
|
+
"endLine": 1137,
|
|
9832
|
+
"endColumn": 46
|
|
10004
9833
|
}
|
|
10005
9834
|
}
|
|
10006
9835
|
}
|
|
@@ -10027,13 +9856,10 @@
|
|
|
10027
9856
|
"index": 320
|
|
10028
9857
|
},
|
|
10029
9858
|
"region": {
|
|
10030
|
-
"startLine":
|
|
9859
|
+
"startLine": 1217,
|
|
10031
9860
|
"startColumn": 19,
|
|
10032
|
-
"endLine":
|
|
10033
|
-
"endColumn": 22
|
|
10034
|
-
"snippet": {
|
|
10035
|
-
"text": "any"
|
|
10036
|
-
}
|
|
9861
|
+
"endLine": 1217,
|
|
9862
|
+
"endColumn": 22
|
|
10037
9863
|
}
|
|
10038
9864
|
}
|
|
10039
9865
|
}
|
|
@@ -10060,13 +9886,10 @@
|
|
|
10060
9886
|
"index": 320
|
|
10061
9887
|
},
|
|
10062
9888
|
"region": {
|
|
10063
|
-
"startLine":
|
|
9889
|
+
"startLine": 1277,
|
|
10064
9890
|
"startColumn": 26,
|
|
10065
|
-
"endLine":
|
|
10066
|
-
"endColumn": 29
|
|
10067
|
-
"snippet": {
|
|
10068
|
-
"text": "any"
|
|
10069
|
-
}
|
|
9891
|
+
"endLine": 1277,
|
|
9892
|
+
"endColumn": 29
|
|
10070
9893
|
}
|
|
10071
9894
|
}
|
|
10072
9895
|
}
|
|
@@ -10093,13 +9916,10 @@
|
|
|
10093
9916
|
"index": 320
|
|
10094
9917
|
},
|
|
10095
9918
|
"region": {
|
|
10096
|
-
"startLine":
|
|
9919
|
+
"startLine": 1286,
|
|
10097
9920
|
"startColumn": 33,
|
|
10098
|
-
"endLine":
|
|
10099
|
-
"endColumn": 36
|
|
10100
|
-
"snippet": {
|
|
10101
|
-
"text": "any"
|
|
10102
|
-
}
|
|
9921
|
+
"endLine": 1286,
|
|
9922
|
+
"endColumn": 36
|
|
10103
9923
|
}
|
|
10104
9924
|
}
|
|
10105
9925
|
}
|
|
@@ -21357,61 +21177,6 @@
|
|
|
21357
21177
|
}
|
|
21358
21178
|
]
|
|
21359
21179
|
},
|
|
21360
|
-
{
|
|
21361
|
-
"level": "warning",
|
|
21362
|
-
"message": {
|
|
21363
|
-
"text": "Unexpected any. Specify a different type."
|
|
21364
|
-
},
|
|
21365
|
-
"locations": [
|
|
21366
|
-
{
|
|
21367
|
-
"physicalLocation": {
|
|
21368
|
-
"artifactLocation": {
|
|
21369
|
-
"uri": "src/webparts/controlsTest/components/TestControl.tsx",
|
|
21370
|
-
"index": 914
|
|
21371
|
-
},
|
|
21372
|
-
"region": {
|
|
21373
|
-
"startLine": 45,
|
|
21374
|
-
"startColumn": 17,
|
|
21375
|
-
"endLine": 45,
|
|
21376
|
-
"endColumn": 20,
|
|
21377
|
-
"snippet": {
|
|
21378
|
-
"text": "any"
|
|
21379
|
-
}
|
|
21380
|
-
}
|
|
21381
|
-
}
|
|
21382
|
-
}
|
|
21383
|
-
],
|
|
21384
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
21385
|
-
"ruleIndex": 0
|
|
21386
|
-
},
|
|
21387
|
-
{
|
|
21388
|
-
"level": "warning",
|
|
21389
|
-
"message": {
|
|
21390
|
-
"text": "Unexpected any. Specify a different type."
|
|
21391
|
-
},
|
|
21392
|
-
"locations": [
|
|
21393
|
-
{
|
|
21394
|
-
"physicalLocation": {
|
|
21395
|
-
"artifactLocation": {
|
|
21396
|
-
"uri": "src/webparts/controlsTest/components/ControlsTest.tsx",
|
|
21397
|
-
"index": 915
|
|
21398
|
-
},
|
|
21399
|
-
"region": {
|
|
21400
|
-
"startLine": 324,
|
|
21401
|
-
"startColumn": 23,
|
|
21402
|
-
"endLine": 324,
|
|
21403
|
-
"endColumn": 26,
|
|
21404
|
-
"snippet": {
|
|
21405
|
-
"text": "any"
|
|
21406
|
-
}
|
|
21407
|
-
}
|
|
21408
|
-
}
|
|
21409
|
-
}
|
|
21410
|
-
],
|
|
21411
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
21412
|
-
"ruleIndex": 0,
|
|
21413
|
-
"suppressions": []
|
|
21414
|
-
},
|
|
21415
21180
|
{
|
|
21416
21181
|
"level": "warning",
|
|
21417
21182
|
"message": {
|
|
@@ -21552,34 +21317,6 @@
|
|
|
21552
21317
|
"ruleIndex": 0,
|
|
21553
21318
|
"suppressions": []
|
|
21554
21319
|
},
|
|
21555
|
-
{
|
|
21556
|
-
"level": "warning",
|
|
21557
|
-
"message": {
|
|
21558
|
-
"text": "Unexpected any. Specify a different type."
|
|
21559
|
-
},
|
|
21560
|
-
"locations": [
|
|
21561
|
-
{
|
|
21562
|
-
"physicalLocation": {
|
|
21563
|
-
"artifactLocation": {
|
|
21564
|
-
"uri": "src/webparts/controlsTest/components/ControlsTest.tsx",
|
|
21565
|
-
"index": 915
|
|
21566
|
-
},
|
|
21567
|
-
"region": {
|
|
21568
|
-
"startLine": 1067,
|
|
21569
|
-
"startColumn": 38,
|
|
21570
|
-
"endLine": 1067,
|
|
21571
|
-
"endColumn": 41,
|
|
21572
|
-
"snippet": {
|
|
21573
|
-
"text": "any"
|
|
21574
|
-
}
|
|
21575
|
-
}
|
|
21576
|
-
}
|
|
21577
|
-
}
|
|
21578
|
-
],
|
|
21579
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
21580
|
-
"ruleIndex": 0,
|
|
21581
|
-
"suppressions": []
|
|
21582
|
-
},
|
|
21583
21320
|
{
|
|
21584
21321
|
"level": "warning",
|
|
21585
21322
|
"message": {
|
|
@@ -21667,7 +21404,7 @@
|
|
|
21667
21404
|
{
|
|
21668
21405
|
"level": "warning",
|
|
21669
21406
|
"message": {
|
|
21670
|
-
"text": "File has too many lines (
|
|
21407
|
+
"text": "File has too many lines (3260). Maximum allowed is 2000."
|
|
21671
21408
|
},
|
|
21672
21409
|
"locations": [
|
|
21673
21410
|
{
|
|
@@ -21679,10 +21416,10 @@
|
|
|
21679
21416
|
"region": {
|
|
21680
21417
|
"startLine": 2001,
|
|
21681
21418
|
"startColumn": 1,
|
|
21682
|
-
"endLine":
|
|
21419
|
+
"endLine": 3261,
|
|
21683
21420
|
"endColumn": 1,
|
|
21684
21421
|
"snippet": {
|
|
21685
|
-
"text": " </div>\n }\n {controlVisibility.ListItemPicker &&\n <div id=\"ListItemPickerDiv\" className={styles.container}>\n <div className=\"ms-font-m\">List Item picker list data tester:\n\n <ListItemPicker listId={'b1416fca-dc77-4198-a082-62a7657dcfa9'}\n columnInternalName=\"DateAndTime\"\n keyColumnInternalName=\"Id\"\n // filter={\"Title eq 'SPFx'\"}\n orderBy={'Title desc'}\n itemLimit={5}\n context={this.props.context}\n placeholder={'Select list items'}\n onSelectedItem={this.listItemPickerDataSelected} />\n\n </div>\n </div>\n }\n {controlVisibility.ListItemComments &&\n <div id=\"ListItemCommentsDiv\" className={styles.container}>\n <div className=\"ms-font-m\">List Item Comments Tester\n <ListItemComments webUrl='https://contoso.sharepoint.com/sites/ThePerspective'\n listId='6f151a33-a7af-4fae-b8c4-f2f04cbc690f'\n itemId={\"1\"}\n serviceScope={this.props.context.serviceScope}\n numberCommentsPerPage={10}\n label=\"ListItem Comments\"\n />\n </div>\n </div>\n }\n {controlVisibility.ViewPicker &&\n <div id=\"ViewPickerDiv\" className={styles.container}>\n <div className=\"ms-font-m\">View picker tester:\n <ViewPicker context={this.props.context}\n label=\"Select view(s)\"\n listId={\"9f3908cd-1e88-4ab3-ac42-08efbbd64ec9\"}\n placeholder={'Select list view(s)'}\n orderBy={1}\n multiSelect={true}\n onSelectionChanged={this.onViewPickerChange} />\n </div>\n </div>\n }\n {controlVisibility.FieldPicker &&\n <div id=\"FieldPickerDiv\" className={styles.container}>\n <div className=\"ms-font-m\">Field picker tester:\n <FieldPicker\n context={this.props.context}\n label={'Select a field'}\n listId={this.state.selectedList}\n onSelectionChanged={(fields) => {\n console.log(fields);\n }}\n />\n </div>\n </div>\n }\n {controlVisibility.IconPicker &&\n <div id=\"IconPickerDiv\" className={styles.container}>\n <div>Icon Picker</div>\n <div>\n <IconPicker\n renderOption=\"panel\"\n onSave={(value) => { console.log(value); }}\n currentIcon={'Warning'}\n buttonLabel=\"Icon Picker\" />\n </div>\n <IconPicker buttonLabel={'Icon'}\n onChange={(iconName: string) => { console.log(iconName); }}\n onCancel={() => { console.log(\"Panel closed\"); }}\n onSave={(iconName: string) => { console.log(iconName); }} />\n </div>\n }\n {controlVisibility.ComboBoxListItemPicker &&\n <div id=\"ComboBoxListItemPickerDiv\" className={styles.container}>\n <div className=\"ms-font-m\">ComboBoxListItemPicker:\n\n <ComboBoxListItemPicker listId={this.state.comboBoxListItemPickerListId}\n columnInternalName='Title'\n keyColumnInternalName='Id'\n orderBy='Title desc'\n multiSelect={true}\n onSelectedItem={(data) => {\n console.log(`Item(s):`, data);\n }}\n defaultSelectedItems={this.state.comboBoxListItemPickerIds}\n webUrl={this.props.context.pageContext.web.absoluteUrl}\n spHttpClient={this.props.context.spHttpClient} />\n\n <PrimaryButton text=\"Change List\" onClick={() => {\n this.setState({\n comboBoxListItemPickerListId: '71210430-8436-4962-a14d-5525475abd6b'\n });\n }} />\n <PrimaryButton text=\"Change default items\" onClick={() => {\n this.setState({\n comboBoxListItemPickerIds: [{ Id: 2, Title: '222' }]\n });\n }} />\n\n </div>\n </div>\n }\n {controlVisibility.IFrameDialog &&\n <div id=\"IFrameDialogDiv\" className={styles.container}>\n <div className=\"ms-font-m\">iframe dialog tester:\n <PrimaryButton\n text=\"Open iframe Dialog\"\n onClick={() => { this.setState({ iFrameDialogOpened: true }); }} />\n <IFrameDialog\n url={iframeUrl}\n iframeOnLoad={(iframe: any) => { console.log('iframe loaded'); }}\n hidden={!this.state.iFrameDialogOpened}\n onDismiss={() => { this.setState({ iFrameDialogOpened: false }); }}\n modalProps={{\n isBlocking: true,\n styles: {\n root: {\n backgroundColor: '#00ff00'\n },\n main: {\n backgroundColor: '#ff0000'\n }\n }\n }}\n dialogContentProps={{\n type: DialogType.close,\n showCloseButton: true\n }}\n width={'570px'}\n height={'315px'} />\n </div>\n </div>\n }\n {controlVisibility.IFramePanel &&\n <div id=\"IFramePanelDiv\" className={styles.container}>\n <div className=\"ms-font-m\">iframe Panel tester:\n <PrimaryButton\n text=\"Open iframe Panel\"\n onClick={() => { this.setState({ iFramePanelOpened: true }); }} />\n <IFramePanel\n url={iframeUrl}\n type={PanelType.medium}\n // height=\"300px\"\n headerText=\"iframe panel title\"\n closeButtonAriaLabel=\"Close\"\n isOpen={this.state.iFramePanelOpened}\n onDismiss={() => { this.setState({ iFramePanelOpened: false }); }}\n iframeOnLoad={(iframe: any) => { console.log('iframe loaded'); }}\n />\n </div>\n </div>\n }\n {controlVisibility.ImagePicker &&\n <div id=\"ImagePickerDiv\" className={styles.container}>\n <ImagePicker\n context={this.props.context}\n onFileSelected={(file) => { console.log(file); this.setState({ selectedUrlImagePicker: file.fileAbsoluteUrl }); }}\n onDeleteFile={() => { console.log('file deleted'); }}\n selectedFileUrl={this.state.selectedUrlImagePicker}\n />\n </div>\n }\n {controlVisibility.FolderPicker &&\n <div id=\"FolderPickerDiv\" className={styles.container}>\n <FolderPicker context={this.props.context}\n rootFolder={{\n Name: 'Documents',\n ServerRelativeUrl: `${this.props.context.pageContext.web.serverRelativeUrl === '/' ? '' : this.props.context.pageContext.web.serverRelativeUrl}/Shared Documents`\n }}\n onSelect={this._onFolderSelect}\n label='Folder Picker'\n required={true}\n canCreateFolders={true}\n />\n </div>\n }\n <div id=\"FilterBarDiv\" className={styles.container} hidden={!controlVisibility.FilterBar}>\n <FilterBar items={this.state.filters} inlineItemCount={3} onClearFilters={this.onClearFilters} onRemoveFilter={this.onRemoveFilter} />\n <button onClick={this.addFilter}>Add new filter</button>\n </div>\n {controlVisibility.Carousel &&\n\n <div id=\"CarouselDiv\" className={styles.container}>\n <div>\n <h3>Carousel with fixed elements:</h3>\n <Carousel\n buttonsLocation={CarouselButtonsLocation.top}\n buttonsDisplay={CarouselButtonsDisplay.block}\n\n contentContainerStyles={styles.carouselContent}\n containerButtonsStyles={styles.carouselButtonsContainer}\n\n isInfinite={true}\n\n element={this.carouselElements}\n onMovePrevClicked={(index: number) => { console.log(`Prev button clicked: ${index}`); }}\n />\n </div>\n <div>\n <h3>Carousel with CarouselImage elements:</h3>\n <Carousel\n buttonsLocation={CarouselButtonsLocation.center}\n buttonsDisplay={CarouselButtonsDisplay.buttonsOnly}\n\n contentContainerStyles={styles.carouselImageContent}\n //containerButtonsStyles={styles.carouselButtonsContainer}\n\n isInfinite={true}\n indicatorShape={CarouselIndicatorShape.circle}\n indicatorsDisplay={CarouselIndicatorsDisplay.block}\n pauseOnHover={true}\n\n element={[\n {\n imageSrc: 'https://images.unsplash.com/photo-1588614959060-4d144f28b207?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=3078&q=80',\n title: 'Colosseum',\n description: 'This is Colosseum',\n url: 'https://en.wikipedia.org/wiki/Colosseum',\n showDetailsOnHover: true,\n imageFit: ImageFit.cover\n },\n {\n imageSrc: 'https://www.telegraph.co.uk/content/dam/science/2018/06/20/stonehenge-2326750_1920_trans%2B%2BZgEkZX3M936N5BQK4Va8RWtT0gK_6EfZT336f62EI5U.jpg',\n title: 'Stonehenge',\n description: 'This is Stonehendle',\n url: 'https://en.wikipedia.org/wiki/Stonehenge',\n showDetailsOnHover: true,\n imageFit: ImageFit.cover\n },\n {\n imageSrc: 'https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/All_Gizah_Pyramids.jpg/2560px-All_Gizah_Pyramids.jpg',\n title: 'Pyramids of Giza',\n description: 'This are Pyramids of Giza (Egypt)',\n url: 'https://en.wikipedia.org/wiki/Egyptian_pyramids',\n showDetailsOnHover: true,\n imageFit: ImageFit.cover\n }\n ]}\n onMoveNextClicked={(index: number) => { console.log(`Next button clicked: ${index}`); }}\n onMovePrevClicked={(index: number) => { console.log(`Prev button clicked: ${index}`); }}\n rootStyles={mergeStyles({\n backgroundColor: '#C3C3C3'\n })}\n />\n </div>\n <div>\n <h3>Carousel with triggerPageElement:</h3>\n <Carousel\n buttonsLocation={CarouselButtonsLocation.bottom}\n buttonsDisplay={CarouselButtonsDisplay.buttonsOnly}\n\n contentContainerStyles={styles.carouselContent}\n\n canMoveNext={this.state.canMoveNext}\n canMovePrev={this.state.canMovePrev}\n triggerPageEvent={this.triggerNextElement}\n element={this.state.currentCarouselElement}\n />\n </div>\n <div>\n <h3>Carousel with minimal configuration:</h3>\n <Carousel\n element={this.carouselElements}\n contentHeight={200}\n />\n </div>\n </div>\n }\n {controlVisibility.SiteBreadcrumb &&\n <div id=\"SiteBreadcrumbDiv\" className={styles.container}>\n <div className={styles.siteBreadcrumb}>\n <SiteBreadcrumb context={this.props.context} />\n </div>\n </div>\n }\n {controlVisibility.FilePicker &&\n <div id=\"FilePickerDiv\" className={styles.container}>\n <div>\n <h3>File Picker</h3>\n <TextField\n label=\"Default SiteFileTab Folder\"\n onChange={debounce((ev, newVal) => { this.setState({ filePickerDefaultFolderAbsolutePath: newVal }); }, 500)}\n styles={{ root: { marginBottom: 10 } }}\n />\n <FilePicker\n bingAPIKey=\"<BING API KEY>\"\n //webAbsoluteUrl=\"https://023xn.sharepoint.com/sites/test1\"\n //defaultFolderAbsolutePath={\"https://aterentiev.sharepoint.com/sites/SPFxinTeamsDemo/Shared%20Documents/General\"}\n //accepts={[\".gif\", \".jpg\", \".jpeg\", \".bmp\", \".dib\", \".tif\", \".tiff\", \".ico\", \".png\", \".jxr\", \".svg\"]}\n buttonLabel=\"Add File\"\n buttonIconProps={{ iconName: 'Add', styles: { root: { fontSize: 42 } } }}\n onSave={this._onFilePickerSave}\n onChange={(filePickerResult: IFilePickerResult[]) => { console.log(filePickerResult); }}\n context={this.props.context}\n hideRecentTab={false}\n includePageLibraries={true}\n checkIfFileExists={false}\n />\n {\n this.state.filePickerResult &&\n <div>\n <div>\n FileName: {this.state.filePickerResult[0].fileName}\n </div>\n <div>\n File size: {GeneralHelper.formatBytes(this.state.filePickerResult[0].fileSize, 2)}\n </div>\n </div>\n }\n </div>\n\n <div>\n <h3>File Picker with target folder browser</h3>\n <FilePicker\n bingAPIKey=\"<BING API KEY>\"\n //accepts={[\".gif\", \".jpg\", \".jpeg\", \".bmp\", \".dib\", \".tif\", \".tiff\", \".ico\", \".png\", \".jxr\", \".svg\"]}\n buttonLabel=\"Upload image\"\n buttonIcon=\"FileImage\"\n onSave={this._onFilePickerSave}\n onChange={(filePickerResult: IFilePickerResult[]) => { console.log(filePickerResult); }}\n context={this.props.context}\n hideRecentTab={false}\n renderCustomUploadTabContent={() => (\n <FolderExplorer context={this.props.context}\n rootFolder={this.rootFolder}\n defaultFolder={this.rootFolder}\n onSelect={this._onFolderSelect}\n canCreateFolders={true}\n />)}\n />\n </div>\n <p><a href=\"javascript:;\" onClick={this.deleteItem}>Deletes second item</a></p>\n </div>\n }\n {controlVisibility.Progress &&\n <div id=\"ProgressDiv\" className={styles.container}>\n <Progress title={'Progress Test'}\n showOverallProgress={true}\n showIndeterminateOverallProgress={false}\n hideNotStartedActions={false}\n actions={this.state.progressActions}\n currentActionIndex={this.state.currentProgressActionIndex}\n longRunningText={'This operation takes longer than expected'}\n longRunningTextDisplayDelay={7000}\n height={'350px'}\n inProgressIconName={'ChromeBackMirrored'} />\n <PrimaryButton text={'Start Progress'} onClick={this._startProgress} />\n </div>\n }\n {controlVisibility.ProgressStepsIndicator &&\n <div id=\"ProgressStepsIndicatorDiv\" className={styles.container}>\n <ProgressStepsIndicator steps={this.progressSteps} currentStep={0} themeVariant={this.props.themeVariant} />\n </div>\n }\n {controlVisibility.Toast &&\n <div id=\"ToastDiv\" className={styles.container}>\n <h3>Toast</h3>\n <Toast\n title=\"Decision saved\"\n body=\"This native Fluent UI toast will dismiss after five seconds.\"\n subtitle=\"Controls Test\"\n intent=\"success\"\n dismissible\n autoDismiss\n duration={5}\n durationUnit=\"seconds\"\n />\n </div>\n }\n {controlVisibility.GridLayout &&\n <div id=\"GridLayoutDiv\" className={styles.container}>\n <div className=\"ms-font-l\">Grid Layout</div>\n <GridLayout\n ariaLabel={\"List of content, use right and left arrow keys to navigate, arrow down to access details.\"}\n items={sampleGridData}\n onRenderGridItem={(item: any, finalSize: ISize, isCompact: boolean) => this._onRenderGridItem(item, finalSize, isCompact)}\n itemMinWidth={250}\n itemMaxWidth={600}\n itemPadding={60}\n //compactThreshold={220}\n //rowsPerPage={1}\n />\n </div>\n }\n {controlVisibility.HoverReactionsBar &&\n <div ref={this.divRefAddReaction} id=\"HoverReactionsBarDiv\" className={styles.container}>\n <PrimaryButton text=\"Open HoverReactionsBar\" onClick={() => { this.setState({ isOpenHoverReactionBar: true }); }} />\n <HoverReactionsBar\n isOpen={this.state.isOpenHoverReactionBar}\n onSelect={(emoji, emojiInfo) => { console.log(emoji); }}\n onDismiss={(): void => {\n this.setState({ isOpenHoverReactionBar: false });\n }}\n target={this.divRefAddReaction.current as HTMLDivElement} />\n </div>\n }\n {controlVisibility.FolderExplorer &&\n <div id=\"FolderExplorerDiv\" className={styles.container}>\n <FolderExplorer\n context={this.props.context}\n rootFolder={{\n Name: 'Documents',\n ServerRelativeUrl: `${this.props.context.pageContext.web.serverRelativeUrl === '/' ? '' : this.props.context.pageContext.web.serverRelativeUrl}/Shared Documents`\n }}\n defaultFolder={{\n Name: 'Documents',\n ServerRelativeUrl: `${this.props.context.pageContext.web.serverRelativeUrl === '/' ? '' : this.props.context.pageContext.web.serverRelativeUrl}/Shared Documents`\n }}\n onSelect={this._onFolderSelect}\n canCreateFolders={true}\n orderby='Name' //'ListItemAllFields/Created'\n orderAscending={true}\n showFiles={true}\n onFileClick={this._onFileClick}\n />\n </div>\n }\n {controlVisibility.TreeView &&\n <div id=\"TreeViewDiv\" className={styles.container}>\n <h3>Tree View</h3>\n <TreeView items={this.treeitems}\n defaultExpanded={false}\n selectionMode={TreeViewSelectionMode.Multiple}\n showCheckboxes={true}\n treeItemActionsDisplayMode={TreeItemActionsDisplayMode.ContextualMenu}\n defaultSelectedKeys={this.state.treeViewSelectedKeys}\n onExpandCollapse={this.onExpandCollapseTree}\n onSelect={this.onItemSelected}\n defaultExpandedChildren={true}\n theme={this.props.themeVariant}\n //expandToSelected={true}\n // onRenderItem={this.renderCustomTreeItem}\n />\n <PrimaryButton onClick={() => { this.setState({ treeViewSelectedKeys: [] }); }}>Clear selection</PrimaryButton>\n </div>\n }\n {controlVisibility.Pagination &&\n <div id=\"PaginationDiv\" className={styles.container}>\n <Pagination\n currentPage={3}\n onChange={(page) => (this._getPage(page))}\n totalPages={this.props.paginationTotalPages || 13}\n //limiter={3}\n // hideFirstPageJump\n //hideLastPageJump\n //limiterIcon={\"NumberedListText\"}\n />\n </div>\n }\n {controlVisibility.FieldCollectionData &&\n <div id=\"FieldCollectionDataDiv\" className={styles.container}>\n <FieldCollectionData\n key={\"FieldCollectionData\"}\n label={\"Fields Collection\"}\n itemsPerPage={3}\n manageBtnLabel={\"Manage\"}\n onChanged={(value) => { console.log(value); }}\n panelHeader={\"Manage values\"}\n enableSorting={true}\n panelProps={{ type: PanelType.custom, customWidth: \"98vw\" }}\n fields={[\n { id: \"Field1\", title: \"String field\", type: CustomCollectionFieldType.string, required: true },\n { id: \"Field2\", title: \"Number field\", type: CustomCollectionFieldType.number },\n { id: \"Field3\", title: \"URL field\", type: CustomCollectionFieldType.url },\n { id: \"Field4\", title: \"Boolean field\", type: CustomCollectionFieldType.boolean },\n {\n id: \"Field5\", title: \"People picker\", type: CustomCollectionFieldType.peoplepicker, required: true,\n minimumUsers: 2, minimumUsersMessage: \"2 Users is the minimum\", maximumUsers: 3,\n },\n {\n id: \"Field6\", title: \"Combo Single\", type: CustomCollectionFieldType.combobox, required: true,\n multiSelect: false, options: [{ key: \"choice 1\", text: \"choice 1\" }, { key: \"choice 2\", text: \"choice 2\" }, { key: \"choice 3\", text: \"choice 3\" }]\n },\n {\n id: \"Field7\", title: \"Combo Multi\", type: CustomCollectionFieldType.combobox,\n allowFreeform: true, multiSelect: true, options: [{ key: \"choice 1\", text: \"choice 1\" }, { key: \"choice 2\", text: \"choice 2\" }, { key: \"choice 3\", text: \"choice 3\" }]\n },\n { id: \"Field8\", title: \"Date field\", type: CustomCollectionFieldType.date, placeholder: \"Select a date\" }\n ]}\n value={this.getRandomCollectionFieldData()}\n\n // value = {null}\n context={this.props.context as any} //error when this is omitted and people picker is used\n usePanel={true}\n noDataMessage=\"No data is selected\" //overrides the default message\n />\n </div>\n }\n {controlVisibility.ContentTypePicker &&\n <ContentTypePicker\n context={this.props.context}\n // group=\"Content Feedback\"\n // includeHidden={false}\n // includeReadOnly={false}\n // label=\"Select your content type\"\n // multiSelect={false}\n // orderBy={ContentTypesOrderBy.Name}\n // listId=\"00000000-0000-0000-0000-000000000000\"\n // onSelectionChanged={this.onContentTypePickerChanged}\n // showBlankOption={true}\n />\n }\n {controlVisibility.Dashboard &&\n <div id=\"DashboardDiv\" className={styles.container}>\n <Dashboard\n widgets={[{\n title: \"Card 1\",\n desc: \"Last updated Monday, April 4 at 11:15 AM (PT)\",\n widgetActionGroup: calloutItemsExample,\n size: WidgetSize.Quadruple,\n body: [\n {\n id: \"t1\",\n title: \"Tab 1\",\n content: (\n <Flex\n vAlign=\"center\"\n hAlign=\"center\"\n styles={{ height: \"100%\", border: \"1px dashed rgb(179, 176, 173)\" }}\n >\n <NorthstarText size=\"large\" weight=\"semibold\">\n Content #1\n </NorthstarText>\n </Flex>\n ),\n },\n {\n id: \"t2\",\n title: \"Tab 2\",\n content: (\n <Flex\n vAlign=\"center\"\n hAlign=\"center\"\n styles={{ height: \"100%\", border: \"1px dashed rgb(179, 176, 173)\" }}\n >\n <NorthstarText size=\"large\" weight=\"semibold\">\n Content #2\n </NorthstarText>\n </Flex>\n ),\n },\n {\n id: \"t3\",\n title: \"Tab 3\",\n content: (\n <Flex\n vAlign=\"center\"\n hAlign=\"center\"\n styles={{ height: \"100%\", border: \"1px dashed rgb(179, 176, 173)\" }}\n >\n <NorthstarText size=\"large\" weight=\"semibold\">\n Content #3\n </NorthstarText>\n </Flex>\n ),\n },\n ],\n link: linkExample,\n },\n {\n title: \"Card 2\",\n size: WidgetSize.Single,\n link: customizedLinkExample,\n rowSpan: 2\n },\n {\n title: \"Card 3\",\n size: WidgetSize.Double,\n link: linkExample,\n },\n {\n title: \"Card 4\",\n size: WidgetSize.Single,\n link: customizedLinkExample,\n },\n {\n title: \"Card 5\",\n size: WidgetSize.Single,\n link: linkExample,\n },\n {\n title: \"Card 6\",\n size: WidgetSize.Single,\n link: linkExample,\n }]} />\n </div>\n }\n {controlVisibility.Toolbar &&\n <div id=\"ToolbarDiv\" className={styles.container}>\n <div>\n <h3>Uncontrolled toolbar</h3>\n <Toolbar actionGroups={{\n 'group1': {\n 'action1': {\n title: 'Edit',\n iconName: 'Edit',\n onClick: () => { console.log('Edit action click'); }\n },\n 'action2': {\n title: 'New',\n iconName: 'Add',\n onClick: () => { console.log('New action click'); }\n }\n }\n }}\n filters={toolbarFilters}\n onSelectedFiltersChange={this.onToolbarSelectedFiltersChange}\n />\n </div>\n <div>\n <h3>Controlled toolbar</h3>\n <Toolbar actionGroups={{\n 'group1': {\n 'action1': {\n title: 'Edit',\n iconName: 'Edit',\n onClick: () => { console.log('Edit action click'); }\n },\n 'action2': {\n title: 'New',\n iconName: 'Add',\n onClick: () => { console.log('New action click'); }\n }\n }\n }}\n filters={toolbarFilters}\n selectedFilterIds={this.state.selectedFilters}\n onSelectedFiltersChange={this.onToolbarSelectedFiltersChange} />\n </div>\n <div>Selected filter IDs: {this.state.selectedFilters.join(\", \")}</div>\n <PrimaryButton text='Toggle filter1' onClick={() => this.toggleToolbarFilter(\"filter1\")} />\n <PrimaryButton text='Toggle filter2' onClick={() => this.toggleToolbarFilter(\"filter2\")} />\n </div>\n }\n {controlVisibility.AnimatedDialog &&\n <div id=\"AnimatedDialogDiv\" className={styles.container}>\n <h3>Animated Dialogs</h3>\n\n {/* Multiple elements added only for demo - can be controlled with fewer elements */}\n\n <PrimaryButton text='Show animated dialog' onClick={() => { this.setState({ showAnimatedDialog: true }); }} />\n {/* Normal animated dialog */}\n <AnimatedDialog\n hidden={!this.state.showAnimatedDialog}\n onDismiss={() => { this.setState({ showAnimatedDialog: false }); }}\n dialogContentProps={animatedDialogContentProps}\n modalProps={animatedModalProps}\n >\n <DialogFooter>\n <PrimaryButton onClick={() => { this.setState({ showAnimatedDialog: false }); }} text=\"Yes\" />\n <DefaultButton onClick={() => { this.setState({ showAnimatedDialog: false }); }} text=\"No\" />\n </DialogFooter>\n </AnimatedDialog>\n <br />\n <br />\n\n <PrimaryButton text='Show animated dialog with icon' onClick={() => { this.setState({ showCustomisedAnimatedDialog: true }); }} />\n {/* Animated dialog with icon */}\n <AnimatedDialog\n hidden={!this.state.showCustomisedAnimatedDialog}\n onDismiss={() => { this.setState({ showCustomisedAnimatedDialog: false }); }}\n dialogContentProps={customizedAnimatedDialogContentProps}\n modalProps={customizedAnimatedModalProps}\n dialogAnimationInType='fadeInDown'\n dialogAnimationOutType='fadeOutDown'\n iconName='UnknownSolid'\n iconAnimationType='zoomInDown'\n showAnimatedDialogFooter={true}\n okButtonText=\"Yes\"\n cancelButtonText=\"No\"\n onOkClick={() => timeout(1500)}\n onSuccess={() => {\n this.setState({ showCustomisedAnimatedDialog: false });\n this.setState({ showSuccessDialog: true });\n }}\n onError={() => {\n this.setState({ showCustomisedAnimatedDialog: false });\n this.setState({ showErrorDialog: true });\n }}>\n <div className={styles.dialogContent}>\n <span>Do you like the animated dialog?</span>\n </div>\n </AnimatedDialog>\n\n {/* Success animated dialog */}\n <AnimatedDialog\n hidden={!this.state.showSuccessDialog}\n onDismiss={() => { this.setState({ showSuccessDialog: false }); }}\n dialogContentProps={successDialogContentProps}\n modalProps={customizedAnimatedModalProps}\n iconName='CompletedSolid'\n >\n <div className={styles.dialogContent}><span>Thank you.</span></div>\n <div className={styles.dialogFooter}>\n <PrimaryButton onClick={() => { this.setState({ showSuccessDialog: false }); }} text=\"OK\" />\n </div>\n </AnimatedDialog>\n\n {/* Error animated dialog */}\n <AnimatedDialog\n hidden={!this.state.showErrorDialog}\n onDismiss={() => { this.setState({ showErrorDialog: false }); }}\n dialogContentProps={errorDialogContentProps}\n modalProps={customizedAnimatedModalProps}\n iconName='StatusErrorFull'\n >\n <div className={styles.dialogContent}><span>Ther was an error.</span></div>\n <div className={styles.dialogFooter}>\n <PrimaryButton onClick={() => { this.setState({ showErrorDialog: false }); }} text=\"OK\" />\n </div>\n </AnimatedDialog>\n </div>\n }\n {controlVisibility.LivePersona &&\n <div id=\"LivePersonaDiv\" className={styles.container}>\n <LivePersona upn=\"meganb@contoso.onmicrosoft.com\"\n template={\n <>\n <Persona text=\"Megan Bowen\" secondaryText=\"meganb@contoso.onmicrosoft.com\" coinSize={48} />\n </>\n }\n serviceScope={this.props.context.serviceScope}\n />\n </div>\n }\n {controlVisibility.LocationPicker &&\n <div id=\"LocationPickerDiv\" className={styles.container}>\n <LocationPicker context={this.props.context} label=\"Location\" onChange={(locValue: ILocationPickerItem) => { console.log(locValue.DisplayName + \", \" + locValue.Address.Street); }} />\n </div>\n }\n {controlVisibility.ModernTaxonomyPicker &&\n <div id=\"ModernTaxonomyPickerDiv\" className={styles.container}>\n <ModernTaxonomyPicker\n allowMultipleSelections={true}\n termSetId={this.termSetId}\n panelTitle=\"Panel title\"\n label={\"Modern Taxonomy Picker\"}\n context={this.props.context}\n required={false}\n disabled={false}\n customPanelWidth={400}\n />\n </div>\n }\n {controlVisibility.MonacoEditor &&\n <div id=\"MonacoEditorDiv\" className={styles.container}>\n <MonacoEditor value={\"\"}\n showMiniMap={true}\n onValueChange={(value, validationErrors) => { console.log(value); console.log(validationErrors); }}\n language={\"javascript\"} />\n </div>\n }\n {controlVisibility.AdaptiveCardHost &&\n <div id=\"AdaptiveCardHostDiv\" className={styles.container}>\n <h3>Adaptive Card Host</h3>\n <AdaptiveCardHost\n card={{\n \"$schema\": \"http://adaptivecards.io/schemas/adaptive-card.json\",\n \"type\": \"AdaptiveCard\",\n \"version\": \"1.0\",\n \"body\": [\n {\n \"type\": \"TextBlock\",\n \"size\": \"medium\",\n \"weight\": \"bolder\",\n \"text\": \" ${ParticipantInfoForm.title}\",\n \"horizontalAlignment\": \"center\",\n \"wrap\": true,\n \"style\": \"heading\"\n },\n {\n \"type\": \"Input.Text\",\n \"label\": \"Name\",\n \"style\": \"text\",\n \"id\": \"SimpleVal\",\n \"isRequired\": true,\n \"errorMessage\": \"Name is required\"\n },\n {\n \"type\": \"Input.Text\",\n \"label\": \"Homepage\",\n \"style\": \"url\",\n \"id\": \"UrlVal\"\n },\n {\n \"type\": \"Input.Text\",\n \"label\": \"Email\",\n \"style\": \"email\",\n \"id\": \"EmailVal\"\n },\n {\n \"type\": \"Input.Text\",\n \"label\": \"Phone\",\n \"style\": \"tel\",\n \"id\": \"TelVal\"\n },\n {\n \"type\": \"Input.Text\",\n \"label\": \"Comments\",\n \"style\": \"text\",\n \"isMultiline\": true,\n \"id\": \"MultiLineVal\"\n },\n {\n \"type\": \"Input.Number\",\n \"label\": \"Quantity\",\n \"min\": -5,\n \"max\": 5,\n \"value\": 1,\n \"id\": \"NumVal\",\n \"errorMessage\": \"The quantity must be between -5 and 5\"\n },\n {\n \"type\": \"Input.Date\",\n \"label\": \"Due Date\",\n \"id\": \"DateVal\",\n \"value\": \"2017-09-20\"\n },\n {\n \"type\": \"Input.Time\",\n \"label\": \"Start time\",\n \"id\": \"TimeVal\",\n \"value\": \"16:59\"\n },\n {\n \"type\": \"TextBlock\",\n \"size\": \"medium\",\n \"weight\": \"bolder\",\n \"text\": \"${Survey.title} \",\n \"horizontalAlignment\": \"center\",\n \"wrap\": true,\n \"style\": \"heading\"\n },\n {\n \"type\": \"Input.ChoiceSet\",\n \"id\": \"CompactSelectVal\",\n \"label\": \"${Survey.questions[0].question}\",\n \"style\": \"compact\",\n \"value\": \"1\",\n \"choices\": [\n {\n \"$data\": \"${Survey.questions[0].items}\",\n \"title\": \"${choice}\",\n \"value\": \"${value}\"\n }\n ]\n },\n {\n \"type\": \"Input.ChoiceSet\",\n \"id\": \"SingleSelectVal\",\n \"label\": \"${Survey.questions[1].question}\",\n \"style\": \"expanded\",\n \"value\": \"1\",\n \"choices\": [\n {\n \"$data\": \"${Survey.questions[1].items}\",\n \"title\": \"${choice}\",\n \"value\": \"${value}\"\n }\n ]\n },\n {\n \"type\": \"Input.ChoiceSet\",\n \"id\": \"MultiSelectVal\",\n \"label\": \"${Survey.questions[2].question}\",\n \"isMultiSelect\": true,\n \"value\": \"1,3\",\n \"choices\": [\n {\n \"$data\": \"${Survey.questions[2].items}\",\n \"title\": \"${choice}\",\n \"value\": \"${value}\"\n }\n ]\n },\n {\n \"type\": \"TextBlock\",\n \"size\": \"medium\",\n \"weight\": \"bolder\",\n \"text\": \"Input.Toggle\",\n \"horizontalAlignment\": \"center\",\n \"wrap\": true,\n \"style\": \"heading\"\n },\n {\n \"type\": \"Input.Toggle\",\n \"label\": \"Please accept the terms and conditions:\",\n \"title\": \"${Survey.questions[3].question}\",\n \"valueOn\": \"true\",\n \"valueOff\": \"false\",\n \"id\": \"AcceptsTerms\",\n \"isRequired\": true,\n \"errorMessage\": \"Accepting the terms and conditions is required\"\n },\n {\n \"type\": \"Input.Toggle\",\n \"label\": \"How do you feel about red cars?\",\n \"title\": \"${Survey.questions[4].question}\",\n \"valueOn\": \"RedCars\",\n \"valueOff\": \"NotRedCars\",\n \"id\": \"ColorPreference\"\n }\n ],\n \"actions\": [\n {\n \"type\": \"Action.Submit\",\n \"title\": \"Submit\",\n \"data\": {\n \"id\": \"1234567890\"\n }\n },\n {\n \"type\": \"Action.ShowCard\",\n \"title\": \"Show Card\",\n \"card\": {\n \"type\": \"AdaptiveCard\",\n \"body\": [\n {\n \"type\": \"Input.Text\",\n \"label\": \"enter comment\",\n \"style\": \"text\",\n \"id\": \"CommentVal\"\n }\n ],\n \"actions\": [\n {\n \"type\": \"Action.Submit\",\n \"title\": \"OK\"\n }\n ]\n }\n }\n ]\n }}\n data={{\n \"$root\": {\n \"ParticipantInfoForm\": {\n \"title\": \"Input.Text elements\"\n },\n \"Survey\": {\n \"title\": \"Input ChoiceSet\",\n \"questions\": [\n {\n \"question\": \"What color do you want? (compact)\",\n \"items\": [\n {\n \"choice\": \"Red\",\n \"value\": \"1\"\n },\n {\n \"choice\": \"Green\",\n \"value\": \"2\"\n },\n {\n \"choice\": \"Blue\",\n \"value\": \"3\"\n }\n ]\n },\n {\n \"question\": \"What color do you want? (expanded)\",\n \"items\": [\n {\n \"choice\": \"Red\",\n \"value\": \"1\"\n },\n {\n \"choice\": \"Green\",\n \"value\": \"2\"\n },\n {\n \"choice\": \"Blue\",\n \"value\": \"3\"\n }\n ]\n },\n {\n \"question\": \"What color do you want? (multiselect)\",\n \"items\": [\n {\n \"choice\": \"Red\",\n \"value\": \"1\"\n },\n {\n \"choice\": \"Green\",\n \"value\": \"2\"\n },\n {\n \"choice\": \"Blue\",\n \"value\": \"3\"\n }\n ]\n },\n {\n \"question\": \"I accept the terms and conditions (True/False)\"\n },\n {\n \"question\": \"Red cars are better than other cars\"\n }\n ]\n }\n }\n }}\n theme={this.props.themeVariant}\n themeType={AdaptiveCardHostThemeType.SharePoint}\n onInvokeAction={(action) => alert(JSON.stringify(action))}\n onError={(error) => console.log(error.message)}\n onSetCustomElements={(registry: CardObjectRegistry<CardElement>) => { }}\n onSetCustomActions={(registry: CardObjectRegistry<Action>) => { }}\n onUpdateHostCapabilities={(hostCapabilities: HostCapabilities) => {\n hostCapabilities.setCustomProperty(\"CustomPropertyName\", Date.now);\n }}\n context={this.props.context}\n />\n </div>\n }\n {controlVisibility.VariantThemeProvider &&\n <div id=\"VariantThemeProviderDiv\" className={styles.container}>\n <h3>Variant Theme Provider</h3>\n <VariantThemeProvider variantType={VariantType.Strong}>\n <Stack tokens={{ childrenGap: 5, padding: 5 }}>\n <Label>This Web Part implements an example on how to use the 'Fluent UI' theme library and how to apply/generate theme variation for the Web Part itself.</Label>\n <PrimaryButton>Primary Button</PrimaryButton>\n <DefaultButton>Default Button</DefaultButton>\n <Link>Link</Link>\n </Stack>\n </VariantThemeProvider>\n </div>\n }\n {controlVisibility.EnhancedThemeProvider &&\n <div id=\"EnhancedThemeProviderDiv\" className={styles.container}>\n <h3>Enhanced Theme Provider</h3>\n <EnhancedThemeProvider applyTo=\"element\" context={this.props.context} theme={this.props.themeVariant}>\n <ControlsTestEnhancedThemeProviderFunctionComponent />\n <ControlsTestEnhancedThemeProvider />\n </EnhancedThemeProvider>\n </div>\n }\n {controlVisibility.AdaptiveCardDesignerHost &&\n <div id=\"AdaptiveCardDesignerHostDiv\" className={styles.container}>\n <h3>Adaptive Card Designer Host</h3>\n <AdaptiveCardDesignerHost\n headerText={`Adaptive Card Designer`}\n buttonText=\"Open Designer\"\n card={{ \"$schema\": \"http://adaptivecards.io/schemas/adaptive-card.json\", \"type\": \"AdaptiveCard\", \"version\": \"1.5\", \"body\": [{ \"type\": \"ColumnSet\", \"columns\": [{ \"width\": \"auto\", \"items\": [{ \"type\": \"Image\", \"size\": \"Small\", \"style\": \"Person\", \"url\": \"/_layouts/15/userphoto.aspx?size=M&username=${$root['@context']['userInfo']['email']}\" }], \"type\": \"Column\" }, { \"width\": \"stretch\", \"items\": [{ \"type\": \"TextBlock\", \"text\": \"${$root['@context']['userInfo']['displayName']}\", \"weight\": \"Bolder\" }, { \"type\": \"TextBlock\", \"spacing\": \"None\", \"text\": \"${$root['@context']['userInfo']['email']}\" }], \"type\": \"Column\" }] }] }}\n data={undefined}\n context={this.props.context}\n theme={this.props.themeVariant}\n onSave={(payload: object) => alert(JSON.stringify(payload))}\n snippets={[{\n name: \"Persona\",\n category: \"Snippets\",\n payload: {\n type: \"ColumnSet\",\n columns: [\n {\n width: \"auto\",\n items: [\n {\n type: \"Image\",\n size: \"Small\",\n style: \"Person\",\n url: \"/_layouts/15/userphoto.aspx?size=M&username=${$root['@context']['userInfo']['email']}\"\n }\n ]\n },\n {\n width: \"stretch\",\n items: [\n {\n type: \"TextBlock\",\n text: \"${$root['@context']['userInfo']['displayName']}\",\n weight: \"Bolder\"\n },\n {\n type: \"TextBlock\",\n spacing: \"None\",\n text: \"${$root['@context']['userInfo']['email']}\"\n }\n ]\n }\n ]\n }\n }]}\n />\n </div>\n }\n {controlVisibility.ShareDialog &&\n <div id=\"ShareDialogDiv\" className={styles.container}>\n <PrimaryButton text=\"Open Share dialog\" onClick={() => { this.setState({ isOpenShareDialog: true }); }} />\n <ShareDialog\n isOpen={this.state.isOpenShareDialog}\n onClose={() => this.setState({ isOpenShareDialog: false })}\n options={{\n siteUrl: this.props.context.pageContext.web.absoluteUrl,\n listId: 'b1416fca-dc77-4198-a082-62a7657dcfa9',\n itemId: 1,\n name: 'Document Name'\n }} />\n </div>\n }\n {controlVisibility.TaxonomyTree &&\n <div id=\"TaxonomyTreeDiv\" className={styles.container} hidden={!controlVisibility.TaxonomyTree}>\n <h3>Modern Taxonomy Tree</h3>\n {this.state.termStoreInfo && (\n <TaxonomyTree\n languageTag={this.state.termStoreInfo.defaultLanguageTag}\n onLoadMoreData={this.spTaxonomyService.getTerms}\n pageSize={50}\n setTerms={(value) => this.setState({ testTerms: value as any })}\n termStoreInfo={this.state.termStoreInfo}\n termSetInfo={this.state.termSetInfo}\n terms={this.state.testTerms as any[]}\n onRenderActionButton={() => <button>test button</button>}\n hideDeprecatedTerms={false}\n showIcons={true}\n />\n )}\n </div>\n }\n {controlVisibility.ListToolbar &&\n <div id=\"ListToolbarDiv\" className={styles.container}>\n <h3>ListToolbar</h3>\n <ListToolbar\n context={this.props.context}\n theme={this.props.themeVariant as any}\n items={[\n { key: 'new', label: 'New', icon: <span>+</span>, onClick: () => console.log('New clicked'), group: 'actions' },\n { key: 'edit', label: 'Edit', icon: <span>✎</span>, onClick: () => console.log('Edit clicked'), group: 'actions' },\n { key: 'delete', label: 'Delete', icon: <span>🗑</span>, onClick: () => console.log('Delete clicked'), appearance: 'subtle', group: 'danger' },\n ]}\n farItems={[\n { key: 'filter', label: 'Filter', icon: <span>🔍</span>, onClick: () => console.log('Filter clicked'), isFarItem: true },\n { key: 'settings', label: 'Settings', icon: <span>⚙</span>, onClick: () => console.log('Settings clicked'), isFarItem: true },\n ]}\n totalCount={10}\n showGroupDividers={true}\n ariaLabel=\"List Toolbar\"\n />\n </div>\n }\n {controlVisibility.TestControl &&\n <div id=\"TestControlDiv\" className={styles.container}>\n <TestControl context={this.props.context} themeVariant={this.props.themeVariant} />\n </div>\n }\n {controlVisibility.UploadFiles &&\n <div id=\"UploadFilesDiv\" className={styles.container}>\n <h3>Upload Files</h3>\n <EnhancedThemeProvider theme={this.props.themeVariant} context={this.props.context}>\n <Stack>\n <UploadFiles\n context={this.props.context}\n title=\"Upload Files\"\n onUploadFiles={(files) => {\n console.log(\"files\", files);\n }}\n themeVariant={this.props.themeVariant}\n />\n </Stack>\n </EnhancedThemeProvider>\n </div>\n }\n {controlVisibility.UserPicker &&\n <div id=\"UserPickerDiv\" className={styles.container}>\n <UserPicker\n context={this.props.context}\n secondaryTextPropertyName=\"mail\"\n theme={this.props.themeVariant}\n placeholder={\"Search User\"}\n // label={\n // <div>\n // <Person20Filled color={tokens.colorBrandForeground1} />\n // <Body1>Select User</Body1>\n // </div>\n // }\n // onSelectedUsers={onSelectedUsers}\n // onRemoveSelectedUser={onRemovedUser}\n />\n </div>\n }\n {\n controlVisibility.Calendar &&\n <div id=\"CalendarDiv\" className={styles.container}>\n <TestCalendarControl\n context={this.props.context} theme={this.props.themeVariant as any} hasTeamsContext={false} themeString={'default'} title={'Calendar'} appHostName={EAppHostName.SharePoint} />\n </div>\n\n }\n {\n controlVisibility.SPFilePicker &&\n <div id=\"SPFilePickerDiv\" className={styles.container}>\n <TestSPFilePickerControl context={this.props.context} />\n </div>\n\n }\n {controlVisibility.WorldMap &&\n <div id=\"WorldMapDiv\" className={styles.container}>\n <WorldMap description={'World Map Sample'} isDarkTheme={false} hasTeamsContext={false} title={'Microsoft Locations Worldwide'} />\n </div>\n }\n </div>\n </React.Suspense>\n );\n }\n\n private getRandomCollectionFieldData = (): Record<string, unknown>[] => {\n const result: Record<string, unknown>[] = [];\n for (let i = 1; i < 16; i++) {\n\n const sampleDate = new Date();\n sampleDate.setDate(sampleDate.getDate() + i);\n\n result.push({\n \"Field1\": `String${i}`,\n \"Field2\": i,\n \"Field3\": \"https://pnp.github.io/\",\n \"Field4\": true,\n \"Field5\": null as any,\n \"Field6\": { key: \"choice 1\", text: \"choice 1\" },\n \"Field7\": [{ key: \"choice 1\", text: \"choice 1\" }, { key: \"choice 2\", text: \"choice 2\" }],\n \"Field8\": sampleDate\n });\n }\n return result;\n }\n\n private onExpandCollapseTree(item: ITreeItem, isExpanded: boolean): void {\n console.log((isExpanded ? \"item expanded: \" : \"item collapsed: \") + item);\n }\n\n private onItemSelected(items: ITreeItem[]): void {\n console.log(\"items selected: \" + items.length);\n }\n\n private renderCustomTreeItem(item: ITreeItem): JSX.Element {\n return (\n <span>\n {\n item.iconProps &&\n <i className={\"ms-Icon ms-Icon--\" + item.iconProps.iconName} style={{ paddingRight: '4px' }} />\n }\n {item.label}\n </span>\n );\n }\n\n private _getPage(page: number): void {\n console.log('Page:', page);\n }\n\n // private _onFolderSelect = (folder: IFolder): void => {\n // console.log('selected folder', folder);\n //\n}\n"
|
|
21422
|
+
"text": " </div>\n }\n {controlVisibility.ListItemPicker &&\n <div id=\"ListItemPickerDiv\" className={styles.container}>\n <div className=\"ms-font-m\">List Item picker list data tester:\n\n <ListItemPicker listId={'b1416fca-dc77-4198-a082-62a7657dcfa9'}\n columnInternalName=\"DateAndTime\"\n keyColumnInternalName=\"Id\"\n // filter={\"Title eq 'SPFx'\"}\n orderBy={'Title desc'}\n itemLimit={5}\n context={this.props.context}\n placeholder={'Select list items'}\n onSelectedItem={this.listItemPickerDataSelected} />\n\n </div>\n </div>\n }\n {controlVisibility.ListItemComments &&\n <div id=\"ListItemCommentsDiv\" className={styles.container}>\n <div className=\"ms-font-m\">List Item Comments Tester\n <ListItemComments webUrl='https://contoso.sharepoint.com/sites/ThePerspective'\n listId='6f151a33-a7af-4fae-b8c4-f2f04cbc690f'\n itemId={\"1\"}\n serviceScope={this.props.context.serviceScope}\n numberCommentsPerPage={10}\n label=\"ListItem Comments\"\n />\n </div>\n </div>\n }\n {controlVisibility.ViewPicker &&\n <div id=\"ViewPickerDiv\" className={styles.container}>\n <div className=\"ms-font-m\">View picker tester:\n <ViewPicker context={this.props.context}\n label=\"Select view(s)\"\n listId={\"9f3908cd-1e88-4ab3-ac42-08efbbd64ec9\"}\n placeholder={'Select list view(s)'}\n orderBy={1}\n multiSelect={true}\n onSelectionChanged={this.onViewPickerChange} />\n </div>\n </div>\n }\n {controlVisibility.FieldPicker &&\n <div id=\"FieldPickerDiv\" className={styles.container}>\n <div className=\"ms-font-m\">Field picker tester:\n <FieldPicker\n context={this.props.context}\n label={'Select a field'}\n listId={this.state.selectedList}\n onSelectionChanged={(fields) => {\n console.log(fields);\n }}\n />\n </div>\n </div>\n }\n {controlVisibility.IconPicker &&\n <div id=\"IconPickerDiv\" className={styles.container}>\n <div>Icon Picker</div>\n <div>\n <IconPicker\n renderOption=\"panel\"\n onSave={(value) => { console.log(value); }}\n currentIcon={'Warning'}\n buttonLabel=\"Icon Picker\" />\n </div>\n <IconPicker buttonLabel={'Icon'}\n onChange={(iconName: string) => { console.log(iconName); }}\n onCancel={() => { console.log(\"Panel closed\"); }}\n onSave={(iconName: string) => { console.log(iconName); }} />\n </div>\n }\n {controlVisibility.ComboBoxListItemPicker &&\n <div id=\"ComboBoxListItemPickerDiv\" className={styles.container}>\n <div className=\"ms-font-m\">ComboBoxListItemPicker:\n\n <ComboBoxListItemPicker listId={this.state.comboBoxListItemPickerListId}\n columnInternalName='Title'\n keyColumnInternalName='Id'\n orderBy='Title desc'\n multiSelect={true}\n onSelectedItem={(data) => {\n console.log(`Item(s):`, data);\n }}\n defaultSelectedItems={this.state.comboBoxListItemPickerIds}\n webUrl={this.props.context.pageContext.web.absoluteUrl}\n spHttpClient={this.props.context.spHttpClient} />\n\n <PrimaryButton text=\"Change List\" onClick={() => {\n this.setState({\n comboBoxListItemPickerListId: '71210430-8436-4962-a14d-5525475abd6b'\n });\n }} />\n <PrimaryButton text=\"Change default items\" onClick={() => {\n this.setState({\n comboBoxListItemPickerIds: [{ Id: 2, Title: '222' }]\n });\n }} />\n\n </div>\n </div>\n }\n {controlVisibility.IFrameDialog &&\n <div id=\"IFrameDialogDiv\" className={styles.container}>\n <div className=\"ms-font-m\">iframe dialog tester:\n <PrimaryButton\n text=\"Open iframe Dialog\"\n onClick={() => { this.setState({ iFrameDialogOpened: true }); }} />\n <IFrameDialog\n url={iframeUrl}\n iframeOnLoad={(iframe: HTMLIFrameElement) => { console.log('iframe loaded'); }}\n hidden={!this.state.iFrameDialogOpened}\n onDismiss={() => { this.setState({ iFrameDialogOpened: false }); }}\n modalProps={{\n isBlocking: true,\n styles: {\n root: {\n backgroundColor: '#00ff00'\n },\n main: {\n backgroundColor: '#ff0000'\n }\n }\n }}\n dialogContentProps={{\n type: DialogType.close,\n showCloseButton: true\n }}\n width={'570px'}\n height={'315px'} />\n </div>\n </div>\n }\n {controlVisibility.IFramePanel &&\n <div id=\"IFramePanelDiv\" className={styles.container}>\n <div className=\"ms-font-m\">iframe Panel tester:\n <PrimaryButton\n text=\"Open iframe Panel\"\n onClick={() => { this.setState({ iFramePanelOpened: true }); }} />\n <IFramePanel\n url={iframeUrl}\n type={PanelType.medium}\n // height=\"300px\"\n headerText=\"iframe panel title\"\n closeButtonAriaLabel=\"Close\"\n isOpen={this.state.iFramePanelOpened}\n onDismiss={() => { this.setState({ iFramePanelOpened: false }); }}\n iframeOnLoad={(iframe: HTMLIFrameElement) => { console.log('iframe loaded'); }}\n />\n </div>\n </div>\n }\n {controlVisibility.ImagePicker &&\n <div id=\"ImagePickerDiv\" className={styles.container}>\n <ImagePicker\n context={this.props.context}\n onFileSelected={(file) => { console.log(file); this.setState({ selectedUrlImagePicker: file.fileAbsoluteUrl }); }}\n onDeleteFile={() => { console.log('file deleted'); }}\n selectedFileUrl={this.state.selectedUrlImagePicker}\n />\n </div>\n }\n {controlVisibility.FolderPicker &&\n <div id=\"FolderPickerDiv\" className={styles.container}>\n <FolderPicker context={this.props.context}\n rootFolder={{\n Name: 'Documents',\n ServerRelativeUrl: `${this.props.context.pageContext.web.serverRelativeUrl === '/' ? '' : this.props.context.pageContext.web.serverRelativeUrl}/Shared Documents`\n }}\n onSelect={this._onFolderSelect}\n label='Folder Picker'\n required={true}\n canCreateFolders={true}\n />\n </div>\n }\n <div id=\"FilterBarDiv\" className={styles.container} hidden={!controlVisibility.FilterBar}>\n <FilterBar items={this.state.filters} inlineItemCount={3} onClearFilters={this.onClearFilters} onRemoveFilter={this.onRemoveFilter} />\n <button onClick={this.addFilter}>Add new filter</button>\n </div>\n {controlVisibility.Carousel &&\n\n <div id=\"CarouselDiv\" className={styles.container}>\n <div>\n <h3>Carousel with fixed elements:</h3>\n <Carousel\n buttonsLocation={CarouselButtonsLocation.top}\n buttonsDisplay={CarouselButtonsDisplay.block}\n\n contentContainerStyles={styles.carouselContent}\n containerButtonsStyles={styles.carouselButtonsContainer}\n\n isInfinite={true}\n\n element={this.carouselElements}\n onMovePrevClicked={(index: number) => { console.log(`Prev button clicked: ${index}`); }}\n />\n </div>\n <div>\n <h3>Carousel with CarouselImage elements:</h3>\n <Carousel\n buttonsLocation={CarouselButtonsLocation.center}\n buttonsDisplay={CarouselButtonsDisplay.buttonsOnly}\n\n contentContainerStyles={styles.carouselImageContent}\n //containerButtonsStyles={styles.carouselButtonsContainer}\n\n isInfinite={true}\n indicatorShape={CarouselIndicatorShape.circle}\n indicatorsDisplay={CarouselIndicatorsDisplay.block}\n pauseOnHover={true}\n\n element={[\n {\n imageSrc: 'https://images.unsplash.com/photo-1588614959060-4d144f28b207?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=3078&q=80',\n title: 'Colosseum',\n description: 'This is Colosseum',\n url: 'https://en.wikipedia.org/wiki/Colosseum',\n showDetailsOnHover: true,\n imageFit: ImageFit.cover\n },\n {\n imageSrc: 'https://www.telegraph.co.uk/content/dam/science/2018/06/20/stonehenge-2326750_1920_trans%2B%2BZgEkZX3M936N5BQK4Va8RWtT0gK_6EfZT336f62EI5U.jpg',\n title: 'Stonehenge',\n description: 'This is Stonehendle',\n url: 'https://en.wikipedia.org/wiki/Stonehenge',\n showDetailsOnHover: true,\n imageFit: ImageFit.cover\n },\n {\n imageSrc: 'https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/All_Gizah_Pyramids.jpg/2560px-All_Gizah_Pyramids.jpg',\n title: 'Pyramids of Giza',\n description: 'This are Pyramids of Giza (Egypt)',\n url: 'https://en.wikipedia.org/wiki/Egyptian_pyramids',\n showDetailsOnHover: true,\n imageFit: ImageFit.cover\n }\n ]}\n onMoveNextClicked={(index: number) => { console.log(`Next button clicked: ${index}`); }}\n onMovePrevClicked={(index: number) => { console.log(`Prev button clicked: ${index}`); }}\n rootStyles={mergeStyles({\n backgroundColor: '#C3C3C3'\n })}\n />\n </div>\n <div>\n <h3>Carousel with triggerPageElement:</h3>\n <Carousel\n buttonsLocation={CarouselButtonsLocation.bottom}\n buttonsDisplay={CarouselButtonsDisplay.buttonsOnly}\n\n contentContainerStyles={styles.carouselContent}\n\n canMoveNext={this.state.canMoveNext}\n canMovePrev={this.state.canMovePrev}\n triggerPageEvent={this.triggerNextElement}\n element={this.state.currentCarouselElement}\n />\n </div>\n <div>\n <h3>Carousel with minimal configuration:</h3>\n <Carousel\n element={this.carouselElements}\n contentHeight={200}\n />\n </div>\n </div>\n }\n {controlVisibility.SiteBreadcrumb &&\n <div id=\"SiteBreadcrumbDiv\" className={styles.container}>\n <div className={styles.siteBreadcrumb}>\n <SiteBreadcrumb context={this.props.context} />\n </div>\n </div>\n }\n {controlVisibility.FilePicker &&\n <div id=\"FilePickerDiv\" className={styles.container}>\n <div>\n <h3>File Picker</h3>\n <TextField\n label=\"Default SiteFileTab Folder\"\n onChange={debounce((ev, newVal) => { this.setState({ filePickerDefaultFolderAbsolutePath: newVal }); }, 500)}\n styles={{ root: { marginBottom: 10 } }}\n />\n <FilePicker\n bingAPIKey=\"<BING API KEY>\"\n //webAbsoluteUrl=\"https://023xn.sharepoint.com/sites/test1\"\n //defaultFolderAbsolutePath={\"https://aterentiev.sharepoint.com/sites/SPFxinTeamsDemo/Shared%20Documents/General\"}\n //accepts={[\".gif\", \".jpg\", \".jpeg\", \".bmp\", \".dib\", \".tif\", \".tiff\", \".ico\", \".png\", \".jxr\", \".svg\"]}\n buttonLabel=\"Add File\"\n buttonIconProps={{ iconName: 'Add', styles: { root: { fontSize: 42 } } }}\n onSave={this._onFilePickerSave}\n onChange={(filePickerResult: IFilePickerResult[]) => { console.log(filePickerResult); }}\n context={this.props.context}\n hideRecentTab={false}\n includePageLibraries={true}\n checkIfFileExists={false}\n />\n {\n this.state.filePickerResult &&\n <div>\n <div>\n FileName: {this.state.filePickerResult[0].fileName}\n </div>\n <div>\n File size: {GeneralHelper.formatBytes(this.state.filePickerResult[0].fileSize, 2)}\n </div>\n </div>\n }\n </div>\n\n <div>\n <h3>File Picker with target folder browser</h3>\n <FilePicker\n bingAPIKey=\"<BING API KEY>\"\n //accepts={[\".gif\", \".jpg\", \".jpeg\", \".bmp\", \".dib\", \".tif\", \".tiff\", \".ico\", \".png\", \".jxr\", \".svg\"]}\n buttonLabel=\"Upload image\"\n buttonIcon=\"FileImage\"\n onSave={this._onFilePickerSave}\n onChange={(filePickerResult: IFilePickerResult[]) => { console.log(filePickerResult); }}\n context={this.props.context}\n hideRecentTab={false}\n renderCustomUploadTabContent={() => (\n <FolderExplorer context={this.props.context}\n rootFolder={this.rootFolder}\n defaultFolder={this.rootFolder}\n onSelect={this._onFolderSelect}\n canCreateFolders={true}\n />)}\n />\n </div>\n <p><a href=\"javascript:;\" onClick={this.deleteItem}>Deletes second item</a></p>\n </div>\n }\n {controlVisibility.Progress &&\n <div id=\"ProgressDiv\" className={styles.container}>\n <Progress title={'Progress Test'}\n showOverallProgress={true}\n showIndeterminateOverallProgress={false}\n hideNotStartedActions={false}\n actions={this.state.progressActions}\n currentActionIndex={this.state.currentProgressActionIndex}\n longRunningText={'This operation takes longer than expected'}\n longRunningTextDisplayDelay={7000}\n height={'350px'}\n inProgressIconName={'ChromeBackMirrored'} />\n <PrimaryButton text={'Start Progress'} onClick={this._startProgress} />\n </div>\n }\n {controlVisibility.ProgressStepsIndicator &&\n <div id=\"ProgressStepsIndicatorDiv\" className={styles.container}>\n <ProgressStepsIndicator steps={this.progressSteps} currentStep={0} themeVariant={this.props.themeVariant} />\n </div>\n }\n {controlVisibility.Toast &&\n <div id=\"ToastDiv\" className={styles.container}>\n <h3>Toast</h3>\n <Toast\n title=\"Decision saved\"\n body=\"This native Fluent UI toast will dismiss after five seconds.\"\n subtitle=\"Controls Test\"\n intent=\"success\"\n dismissible\n autoDismiss\n duration={5}\n durationUnit=\"seconds\"\n />\n </div>\n }\n {controlVisibility.GridLayout &&\n <div id=\"GridLayoutDiv\" className={styles.container}>\n <div className=\"ms-font-l\">Grid Layout</div>\n <GridLayout\n ariaLabel={\"List of content, use right and left arrow keys to navigate, arrow down to access details.\"}\n items={sampleGridData}\n onRenderGridItem={this._onRenderGridItem}\n itemMinWidth={250}\n itemMaxWidth={600}\n itemPadding={60}\n //compactThreshold={220}\n //rowsPerPage={1}\n />\n </div>\n }\n {controlVisibility.HoverReactionsBar &&\n <div ref={this.divRefAddReaction} id=\"HoverReactionsBarDiv\" className={styles.container}>\n <PrimaryButton text=\"Open HoverReactionsBar\" onClick={() => { this.setState({ isOpenHoverReactionBar: true }); }} />\n <HoverReactionsBar\n isOpen={this.state.isOpenHoverReactionBar}\n onSelect={(emoji, emojiInfo) => { console.log(emoji); }}\n onDismiss={(): void => {\n this.setState({ isOpenHoverReactionBar: false });\n }}\n target={this.divRefAddReaction.current as HTMLDivElement} />\n </div>\n }\n {controlVisibility.FolderExplorer &&\n <div id=\"FolderExplorerDiv\" className={styles.container}>\n <FolderExplorer\n context={this.props.context}\n rootFolder={{\n Name: 'Documents',\n ServerRelativeUrl: `${this.props.context.pageContext.web.serverRelativeUrl === '/' ? '' : this.props.context.pageContext.web.serverRelativeUrl}/Shared Documents`\n }}\n defaultFolder={{\n Name: 'Documents',\n ServerRelativeUrl: `${this.props.context.pageContext.web.serverRelativeUrl === '/' ? '' : this.props.context.pageContext.web.serverRelativeUrl}/Shared Documents`\n }}\n onSelect={this._onFolderSelect}\n canCreateFolders={true}\n orderby='Name' //'ListItemAllFields/Created'\n orderAscending={true}\n showFiles={true}\n onFileClick={this._onFileClick}\n />\n </div>\n }\n {controlVisibility.TreeView &&\n <div id=\"TreeViewDiv\" className={styles.container}>\n <h3>Tree View</h3>\n <TreeView items={this.treeitems}\n defaultExpanded={false}\n selectionMode={TreeViewSelectionMode.Multiple}\n showCheckboxes={true}\n treeItemActionsDisplayMode={TreeItemActionsDisplayMode.ContextualMenu}\n defaultSelectedKeys={this.state.treeViewSelectedKeys}\n onExpandCollapse={this.onExpandCollapseTree}\n onSelect={this.onItemSelected}\n defaultExpandedChildren={true}\n theme={this.props.themeVariant}\n //expandToSelected={true}\n // onRenderItem={this.renderCustomTreeItem}\n />\n <PrimaryButton onClick={() => { this.setState({ treeViewSelectedKeys: [] }); }}>Clear selection</PrimaryButton>\n </div>\n }\n {controlVisibility.Pagination &&\n <div id=\"PaginationDiv\" className={styles.container}>\n <Pagination\n currentPage={3}\n onChange={(page) => (this._getPage(page))}\n totalPages={this.props.paginationTotalPages || 13}\n //limiter={3}\n // hideFirstPageJump\n //hideLastPageJump\n //limiterIcon={\"NumberedListText\"}\n />\n </div>\n }\n {controlVisibility.FieldCollectionData &&\n <div id=\"FieldCollectionDataDiv\" className={styles.container}>\n <FieldCollectionData\n key={\"FieldCollectionData\"}\n label={\"Fields Collection\"}\n itemsPerPage={3}\n manageBtnLabel={\"Manage\"}\n onChanged={(value) => { console.log(value); }}\n panelHeader={\"Manage values\"}\n enableSorting={true}\n panelProps={{ type: PanelType.custom, customWidth: \"98vw\" }}\n fields={[\n { id: \"Field1\", title: \"String field\", type: CustomCollectionFieldType.string, required: true },\n { id: \"Field2\", title: \"Number field\", type: CustomCollectionFieldType.number },\n { id: \"Field3\", title: \"URL field\", type: CustomCollectionFieldType.url },\n { id: \"Field4\", title: \"Boolean field\", type: CustomCollectionFieldType.boolean },\n {\n id: \"Field5\", title: \"People picker\", type: CustomCollectionFieldType.peoplepicker, required: true,\n minimumUsers: 2, minimumUsersMessage: \"2 Users is the minimum\", maximumUsers: 3,\n },\n {\n id: \"Field6\", title: \"Combo Single\", type: CustomCollectionFieldType.combobox, required: true,\n multiSelect: false, options: [{ key: \"choice 1\", text: \"choice 1\" }, { key: \"choice 2\", text: \"choice 2\" }, { key: \"choice 3\", text: \"choice 3\" }]\n },\n {\n id: \"Field7\", title: \"Combo Multi\", type: CustomCollectionFieldType.combobox,\n allowFreeform: true, multiSelect: true, options: [{ key: \"choice 1\", text: \"choice 1\" }, { key: \"choice 2\", text: \"choice 2\" }, { key: \"choice 3\", text: \"choice 3\" }]\n },\n { id: \"Field8\", title: \"Date field\", type: CustomCollectionFieldType.date, placeholder: \"Select a date\" }\n ]}\n value={this.getRandomCollectionFieldData()}\n\n // value = {null}\n context={this.props.context as any} //error when this is omitted and people picker is used\n usePanel={true}\n noDataMessage=\"No data is selected\" //overrides the default message\n />\n </div>\n }\n {controlVisibility.ContentTypePicker &&\n <ContentTypePicker\n context={this.props.context}\n // group=\"Content Feedback\"\n // includeHidden={false}\n // includeReadOnly={false}\n // label=\"Select your content type\"\n // multiSelect={false}\n // orderBy={ContentTypesOrderBy.Name}\n // listId=\"00000000-0000-0000-0000-000000000000\"\n // onSelectionChanged={this.onContentTypePickerChanged}\n // showBlankOption={true}\n />\n }\n {controlVisibility.Dashboard &&\n <div id=\"DashboardDiv\" className={styles.container}>\n <Dashboard\n widgets={[{\n title: \"Card 1\",\n desc: \"Last updated Monday, April 4 at 11:15 AM (PT)\",\n widgetActionGroup: calloutItemsExample,\n size: WidgetSize.Quadruple,\n body: [\n {\n id: \"t1\",\n title: \"Tab 1\",\n content: (\n <Flex\n vAlign=\"center\"\n hAlign=\"center\"\n styles={{ height: \"100%\", border: \"1px dashed rgb(179, 176, 173)\" }}\n >\n <NorthstarText size=\"large\" weight=\"semibold\">\n Content #1\n </NorthstarText>\n </Flex>\n ),\n },\n {\n id: \"t2\",\n title: \"Tab 2\",\n content: (\n <Flex\n vAlign=\"center\"\n hAlign=\"center\"\n styles={{ height: \"100%\", border: \"1px dashed rgb(179, 176, 173)\" }}\n >\n <NorthstarText size=\"large\" weight=\"semibold\">\n Content #2\n </NorthstarText>\n </Flex>\n ),\n },\n {\n id: \"t3\",\n title: \"Tab 3\",\n content: (\n <Flex\n vAlign=\"center\"\n hAlign=\"center\"\n styles={{ height: \"100%\", border: \"1px dashed rgb(179, 176, 173)\" }}\n >\n <NorthstarText size=\"large\" weight=\"semibold\">\n Content #3\n </NorthstarText>\n </Flex>\n ),\n },\n ],\n link: linkExample,\n },\n {\n title: \"Card 2\",\n size: WidgetSize.Single,\n link: customizedLinkExample,\n rowSpan: 2\n },\n {\n title: \"Card 3\",\n size: WidgetSize.Double,\n link: linkExample,\n },\n {\n title: \"Card 4\",\n size: WidgetSize.Single,\n link: customizedLinkExample,\n },\n {\n title: \"Card 5\",\n size: WidgetSize.Single,\n link: linkExample,\n },\n {\n title: \"Card 6\",\n size: WidgetSize.Single,\n link: linkExample,\n }]} />\n </div>\n }\n {controlVisibility.Toolbar &&\n <div id=\"ToolbarDiv\" className={styles.container}>\n <div>\n <h3>Uncontrolled toolbar</h3>\n <Toolbar actionGroups={{\n 'group1': {\n 'action1': {\n title: 'Edit',\n iconName: 'Edit',\n onClick: () => { console.log('Edit action click'); }\n },\n 'action2': {\n title: 'New',\n iconName: 'Add',\n onClick: () => { console.log('New action click'); }\n }\n }\n }}\n filters={toolbarFilters}\n onSelectedFiltersChange={this.onToolbarSelectedFiltersChange}\n />\n </div>\n <div>\n <h3>Controlled toolbar</h3>\n <Toolbar actionGroups={{\n 'group1': {\n 'action1': {\n title: 'Edit',\n iconName: 'Edit',\n onClick: () => { console.log('Edit action click'); }\n },\n 'action2': {\n title: 'New',\n iconName: 'Add',\n onClick: () => { console.log('New action click'); }\n }\n }\n }}\n filters={toolbarFilters}\n selectedFilterIds={this.state.selectedFilters}\n onSelectedFiltersChange={this.onToolbarSelectedFiltersChange} />\n </div>\n <div>Selected filter IDs: {this.state.selectedFilters.join(\", \")}</div>\n <PrimaryButton text='Toggle filter1' onClick={() => this.toggleToolbarFilter(\"filter1\")} />\n <PrimaryButton text='Toggle filter2' onClick={() => this.toggleToolbarFilter(\"filter2\")} />\n </div>\n }\n {controlVisibility.AnimatedDialog &&\n <div id=\"AnimatedDialogDiv\" className={styles.container}>\n <h3>Animated Dialogs</h3>\n\n {/* Multiple elements added only for demo - can be controlled with fewer elements */}\n\n <PrimaryButton text='Show animated dialog' onClick={() => { this.setState({ showAnimatedDialog: true }); }} />\n {/* Normal animated dialog */}\n <AnimatedDialog\n hidden={!this.state.showAnimatedDialog}\n onDismiss={() => { this.setState({ showAnimatedDialog: false }); }}\n dialogContentProps={animatedDialogContentProps}\n modalProps={animatedModalProps}\n >\n <DialogFooter>\n <PrimaryButton onClick={() => { this.setState({ showAnimatedDialog: false }); }} text=\"Yes\" />\n <DefaultButton onClick={() => { this.setState({ showAnimatedDialog: false }); }} text=\"No\" />\n </DialogFooter>\n </AnimatedDialog>\n <br />\n <br />\n\n <PrimaryButton text='Show animated dialog with icon' onClick={() => { this.setState({ showCustomisedAnimatedDialog: true }); }} />\n {/* Animated dialog with icon */}\n <AnimatedDialog\n hidden={!this.state.showCustomisedAnimatedDialog}\n onDismiss={() => { this.setState({ showCustomisedAnimatedDialog: false }); }}\n dialogContentProps={customizedAnimatedDialogContentProps}\n modalProps={customizedAnimatedModalProps}\n dialogAnimationInType='fadeInDown'\n dialogAnimationOutType='fadeOutDown'\n iconName='UnknownSolid'\n iconAnimationType='zoomInDown'\n showAnimatedDialogFooter={true}\n okButtonText=\"Yes\"\n cancelButtonText=\"No\"\n onOkClick={() => timeout(1500)}\n onSuccess={() => {\n this.setState({ showCustomisedAnimatedDialog: false });\n this.setState({ showSuccessDialog: true });\n }}\n onError={() => {\n this.setState({ showCustomisedAnimatedDialog: false });\n this.setState({ showErrorDialog: true });\n }}>\n <div className={styles.dialogContent}>\n <span>Do you like the animated dialog?</span>\n </div>\n </AnimatedDialog>\n\n {/* Success animated dialog */}\n <AnimatedDialog\n hidden={!this.state.showSuccessDialog}\n onDismiss={() => { this.setState({ showSuccessDialog: false }); }}\n dialogContentProps={successDialogContentProps}\n modalProps={customizedAnimatedModalProps}\n iconName='CompletedSolid'\n >\n <div className={styles.dialogContent}><span>Thank you.</span></div>\n <div className={styles.dialogFooter}>\n <PrimaryButton onClick={() => { this.setState({ showSuccessDialog: false }); }} text=\"OK\" />\n </div>\n </AnimatedDialog>\n\n {/* Error animated dialog */}\n <AnimatedDialog\n hidden={!this.state.showErrorDialog}\n onDismiss={() => { this.setState({ showErrorDialog: false }); }}\n dialogContentProps={errorDialogContentProps}\n modalProps={customizedAnimatedModalProps}\n iconName='StatusErrorFull'\n >\n <div className={styles.dialogContent}><span>Ther was an error.</span></div>\n <div className={styles.dialogFooter}>\n <PrimaryButton onClick={() => { this.setState({ showErrorDialog: false }); }} text=\"OK\" />\n </div>\n </AnimatedDialog>\n </div>\n }\n {controlVisibility.LivePersona &&\n <div id=\"LivePersonaDiv\" className={styles.container}>\n <LivePersona upn=\"meganb@contoso.onmicrosoft.com\"\n template={\n <>\n <Persona text=\"Megan Bowen\" secondaryText=\"meganb@contoso.onmicrosoft.com\" coinSize={48} />\n </>\n }\n serviceScope={this.props.context.serviceScope}\n />\n </div>\n }\n {controlVisibility.LocationPicker &&\n <div id=\"LocationPickerDiv\" className={styles.container}>\n <LocationPicker context={this.props.context} label=\"Location\" onChange={(locValue: ILocationPickerItem) => { console.log(locValue.DisplayName + \", \" + locValue.Address.Street); }} />\n </div>\n }\n {controlVisibility.ModernTaxonomyPicker &&\n <div id=\"ModernTaxonomyPickerDiv\" className={styles.container}>\n <ModernTaxonomyPicker\n allowMultipleSelections={true}\n termSetId={this.termSetId}\n panelTitle=\"Panel title\"\n label={\"Modern Taxonomy Picker\"}\n context={this.props.context}\n required={false}\n disabled={false}\n customPanelWidth={400}\n />\n </div>\n }\n {controlVisibility.MonacoEditor &&\n <div id=\"MonacoEditorDiv\" className={styles.container}>\n <MonacoEditor value={\"\"}\n showMiniMap={true}\n onValueChange={(value, validationErrors) => { console.log(value); console.log(validationErrors); }}\n language={\"javascript\"} />\n </div>\n }\n {controlVisibility.AdaptiveCardHost &&\n <div id=\"AdaptiveCardHostDiv\" className={styles.container}>\n <h3>Adaptive Card Host</h3>\n <AdaptiveCardHost\n card={{\n \"$schema\": \"http://adaptivecards.io/schemas/adaptive-card.json\",\n \"type\": \"AdaptiveCard\",\n \"version\": \"1.0\",\n \"body\": [\n {\n \"type\": \"TextBlock\",\n \"size\": \"medium\",\n \"weight\": \"bolder\",\n \"text\": \" ${ParticipantInfoForm.title}\",\n \"horizontalAlignment\": \"center\",\n \"wrap\": true,\n \"style\": \"heading\"\n },\n {\n \"type\": \"Input.Text\",\n \"label\": \"Name\",\n \"style\": \"text\",\n \"id\": \"SimpleVal\",\n \"isRequired\": true,\n \"errorMessage\": \"Name is required\"\n },\n {\n \"type\": \"Input.Text\",\n \"label\": \"Homepage\",\n \"style\": \"url\",\n \"id\": \"UrlVal\"\n },\n {\n \"type\": \"Input.Text\",\n \"label\": \"Email\",\n \"style\": \"email\",\n \"id\": \"EmailVal\"\n },\n {\n \"type\": \"Input.Text\",\n \"label\": \"Phone\",\n \"style\": \"tel\",\n \"id\": \"TelVal\"\n },\n {\n \"type\": \"Input.Text\",\n \"label\": \"Comments\",\n \"style\": \"text\",\n \"isMultiline\": true,\n \"id\": \"MultiLineVal\"\n },\n {\n \"type\": \"Input.Number\",\n \"label\": \"Quantity\",\n \"min\": -5,\n \"max\": 5,\n \"value\": 1,\n \"id\": \"NumVal\",\n \"errorMessage\": \"The quantity must be between -5 and 5\"\n },\n {\n \"type\": \"Input.Date\",\n \"label\": \"Due Date\",\n \"id\": \"DateVal\",\n \"value\": \"2017-09-20\"\n },\n {\n \"type\": \"Input.Time\",\n \"label\": \"Start time\",\n \"id\": \"TimeVal\",\n \"value\": \"16:59\"\n },\n {\n \"type\": \"TextBlock\",\n \"size\": \"medium\",\n \"weight\": \"bolder\",\n \"text\": \"${Survey.title} \",\n \"horizontalAlignment\": \"center\",\n \"wrap\": true,\n \"style\": \"heading\"\n },\n {\n \"type\": \"Input.ChoiceSet\",\n \"id\": \"CompactSelectVal\",\n \"label\": \"${Survey.questions[0].question}\",\n \"style\": \"compact\",\n \"value\": \"1\",\n \"choices\": [\n {\n \"$data\": \"${Survey.questions[0].items}\",\n \"title\": \"${choice}\",\n \"value\": \"${value}\"\n }\n ]\n },\n {\n \"type\": \"Input.ChoiceSet\",\n \"id\": \"SingleSelectVal\",\n \"label\": \"${Survey.questions[1].question}\",\n \"style\": \"expanded\",\n \"value\": \"1\",\n \"choices\": [\n {\n \"$data\": \"${Survey.questions[1].items}\",\n \"title\": \"${choice}\",\n \"value\": \"${value}\"\n }\n ]\n },\n {\n \"type\": \"Input.ChoiceSet\",\n \"id\": \"MultiSelectVal\",\n \"label\": \"${Survey.questions[2].question}\",\n \"isMultiSelect\": true,\n \"value\": \"1,3\",\n \"choices\": [\n {\n \"$data\": \"${Survey.questions[2].items}\",\n \"title\": \"${choice}\",\n \"value\": \"${value}\"\n }\n ]\n },\n {\n \"type\": \"TextBlock\",\n \"size\": \"medium\",\n \"weight\": \"bolder\",\n \"text\": \"Input.Toggle\",\n \"horizontalAlignment\": \"center\",\n \"wrap\": true,\n \"style\": \"heading\"\n },\n {\n \"type\": \"Input.Toggle\",\n \"label\": \"Please accept the terms and conditions:\",\n \"title\": \"${Survey.questions[3].question}\",\n \"valueOn\": \"true\",\n \"valueOff\": \"false\",\n \"id\": \"AcceptsTerms\",\n \"isRequired\": true,\n \"errorMessage\": \"Accepting the terms and conditions is required\"\n },\n {\n \"type\": \"Input.Toggle\",\n \"label\": \"How do you feel about red cars?\",\n \"title\": \"${Survey.questions[4].question}\",\n \"valueOn\": \"RedCars\",\n \"valueOff\": \"NotRedCars\",\n \"id\": \"ColorPreference\"\n }\n ],\n \"actions\": [\n {\n \"type\": \"Action.Submit\",\n \"title\": \"Submit\",\n \"data\": {\n \"id\": \"1234567890\"\n }\n },\n {\n \"type\": \"Action.ShowCard\",\n \"title\": \"Show Card\",\n \"card\": {\n \"type\": \"AdaptiveCard\",\n \"body\": [\n {\n \"type\": \"Input.Text\",\n \"label\": \"enter comment\",\n \"style\": \"text\",\n \"id\": \"CommentVal\"\n }\n ],\n \"actions\": [\n {\n \"type\": \"Action.Submit\",\n \"title\": \"OK\"\n }\n ]\n }\n }\n ]\n }}\n data={{\n \"$root\": {\n \"ParticipantInfoForm\": {\n \"title\": \"Input.Text elements\"\n },\n \"Survey\": {\n \"title\": \"Input ChoiceSet\",\n \"questions\": [\n {\n \"question\": \"What color do you want? (compact)\",\n \"items\": [\n {\n \"choice\": \"Red\",\n \"value\": \"1\"\n },\n {\n \"choice\": \"Green\",\n \"value\": \"2\"\n },\n {\n \"choice\": \"Blue\",\n \"value\": \"3\"\n }\n ]\n },\n {\n \"question\": \"What color do you want? (expanded)\",\n \"items\": [\n {\n \"choice\": \"Red\",\n \"value\": \"1\"\n },\n {\n \"choice\": \"Green\",\n \"value\": \"2\"\n },\n {\n \"choice\": \"Blue\",\n \"value\": \"3\"\n }\n ]\n },\n {\n \"question\": \"What color do you want? (multiselect)\",\n \"items\": [\n {\n \"choice\": \"Red\",\n \"value\": \"1\"\n },\n {\n \"choice\": \"Green\",\n \"value\": \"2\"\n },\n {\n \"choice\": \"Blue\",\n \"value\": \"3\"\n }\n ]\n },\n {\n \"question\": \"I accept the terms and conditions (True/False)\"\n },\n {\n \"question\": \"Red cars are better than other cars\"\n }\n ]\n }\n }\n }}\n theme={this.props.themeVariant}\n themeType={AdaptiveCardHostThemeType.SharePoint}\n onInvokeAction={(action) => alert(JSON.stringify(action))}\n onError={(error) => console.log(error.message)}\n onSetCustomElements={(registry: CardObjectRegistry<CardElement>) => { }}\n onSetCustomActions={(registry: CardObjectRegistry<Action>) => { }}\n onUpdateHostCapabilities={(hostCapabilities: HostCapabilities) => {\n hostCapabilities.setCustomProperty(\"CustomPropertyName\", Date.now);\n }}\n context={this.props.context}\n />\n </div>\n }\n {controlVisibility.VariantThemeProvider &&\n <div id=\"VariantThemeProviderDiv\" className={styles.container}>\n <h3>Variant Theme Provider</h3>\n <VariantThemeProvider variantType={VariantType.Strong}>\n <Stack tokens={{ childrenGap: 5, padding: 5 }}>\n <Label>This Web Part implements an example on how to use the 'Fluent UI' theme library and how to apply/generate theme variation for the Web Part itself.</Label>\n <PrimaryButton>Primary Button</PrimaryButton>\n <DefaultButton>Default Button</DefaultButton>\n <Link>Link</Link>\n </Stack>\n </VariantThemeProvider>\n </div>\n }\n {controlVisibility.EnhancedThemeProvider &&\n <div id=\"EnhancedThemeProviderDiv\" className={styles.container}>\n <h3>Enhanced Theme Provider</h3>\n <EnhancedThemeProvider applyTo=\"element\" context={this.props.context} theme={this.props.themeVariant}>\n <ControlsTestEnhancedThemeProviderFunctionComponent />\n <ControlsTestEnhancedThemeProvider />\n </EnhancedThemeProvider>\n </div>\n }\n {controlVisibility.AdaptiveCardDesignerHost &&\n <div id=\"AdaptiveCardDesignerHostDiv\" className={styles.container}>\n <h3>Adaptive Card Designer Host</h3>\n <AdaptiveCardDesignerHost\n headerText={`Adaptive Card Designer`}\n buttonText=\"Open Designer\"\n card={{ \"$schema\": \"http://adaptivecards.io/schemas/adaptive-card.json\", \"type\": \"AdaptiveCard\", \"version\": \"1.5\", \"body\": [{ \"type\": \"ColumnSet\", \"columns\": [{ \"width\": \"auto\", \"items\": [{ \"type\": \"Image\", \"size\": \"Small\", \"style\": \"Person\", \"url\": \"/_layouts/15/userphoto.aspx?size=M&username=${$root['@context']['userInfo']['email']}\" }], \"type\": \"Column\" }, { \"width\": \"stretch\", \"items\": [{ \"type\": \"TextBlock\", \"text\": \"${$root['@context']['userInfo']['displayName']}\", \"weight\": \"Bolder\" }, { \"type\": \"TextBlock\", \"spacing\": \"None\", \"text\": \"${$root['@context']['userInfo']['email']}\" }], \"type\": \"Column\" }] }] }}\n data={undefined}\n context={this.props.context}\n theme={this.props.themeVariant}\n onSave={(payload: object) => alert(JSON.stringify(payload))}\n snippets={[{\n name: \"Persona\",\n category: \"Snippets\",\n payload: {\n type: \"ColumnSet\",\n columns: [\n {\n width: \"auto\",\n items: [\n {\n type: \"Image\",\n size: \"Small\",\n style: \"Person\",\n url: \"/_layouts/15/userphoto.aspx?size=M&username=${$root['@context']['userInfo']['email']}\"\n }\n ]\n },\n {\n width: \"stretch\",\n items: [\n {\n type: \"TextBlock\",\n text: \"${$root['@context']['userInfo']['displayName']}\",\n weight: \"Bolder\"\n },\n {\n type: \"TextBlock\",\n spacing: \"None\",\n text: \"${$root['@context']['userInfo']['email']}\"\n }\n ]\n }\n ]\n }\n }]}\n />\n </div>\n }\n {controlVisibility.ShareDialog &&\n <div id=\"ShareDialogDiv\" className={styles.container}>\n <PrimaryButton text=\"Open Share dialog\" onClick={() => { this.setState({ isOpenShareDialog: true }); }} />\n <ShareDialog\n isOpen={this.state.isOpenShareDialog}\n onClose={() => this.setState({ isOpenShareDialog: false })}\n options={{\n siteUrl: this.props.context.pageContext.web.absoluteUrl,\n listId: 'b1416fca-dc77-4198-a082-62a7657dcfa9',\n itemId: 1,\n name: 'Document Name'\n }} />\n </div>\n }\n {controlVisibility.TaxonomyTree &&\n <div id=\"TaxonomyTreeDiv\" className={styles.container} hidden={!controlVisibility.TaxonomyTree}>\n <h3>Modern Taxonomy Tree</h3>\n {this.state.termStoreInfo && (\n <TaxonomyTree\n languageTag={this.state.termStoreInfo.defaultLanguageTag}\n onLoadMoreData={this.spTaxonomyService.getTerms}\n pageSize={50}\n setTerms={(value) => this.setState(state => ({\n testTerms: typeof value === 'function' ? value(state.testTerms) : value\n }))}\n termStoreInfo={this.state.termStoreInfo}\n termSetInfo={this.state.termSetInfo}\n terms={this.state.testTerms}\n onRenderActionButton={() => <button>test button</button>}\n hideDeprecatedTerms={false}\n showIcons={true}\n />\n )}\n </div>\n }\n {controlVisibility.ListToolbar &&\n <div id=\"ListToolbarDiv\" className={styles.container}>\n <h3>ListToolbar</h3>\n <ListToolbar\n context={this.props.context}\n theme={this.props.themeVariant as any}\n items={[\n { key: 'new', label: 'New', icon: <span>+</span>, onClick: () => console.log('New clicked'), group: 'actions' },\n { key: 'edit', label: 'Edit', icon: <span>✎</span>, onClick: () => console.log('Edit clicked'), group: 'actions' },\n { key: 'delete', label: 'Delete', icon: <span>🗑</span>, onClick: () => console.log('Delete clicked'), appearance: 'subtle', group: 'danger' },\n ]}\n farItems={[\n { key: 'filter', label: 'Filter', icon: <span>🔍</span>, onClick: () => console.log('Filter clicked'), isFarItem: true },\n { key: 'settings', label: 'Settings', icon: <span>⚙</span>, onClick: () => console.log('Settings clicked'), isFarItem: true },\n ]}\n totalCount={10}\n showGroupDividers={true}\n ariaLabel=\"List Toolbar\"\n />\n </div>\n }\n {controlVisibility.TestControl &&\n <div id=\"TestControlDiv\" className={styles.container}>\n <TestControl context={this.props.context} themeVariant={this.props.themeVariant as Theme} />\n </div>\n }\n {controlVisibility.UploadFiles &&\n <div id=\"UploadFilesDiv\" className={styles.container}>\n <h3>Upload Files</h3>\n <EnhancedThemeProvider theme={this.props.themeVariant} context={this.props.context}>\n <Stack>\n <UploadFiles\n context={this.props.context}\n title=\"Upload Files\"\n onUploadFiles={(files) => {\n console.log(\"files\", files);\n }}\n themeVariant={this.props.themeVariant}\n />\n </Stack>\n </EnhancedThemeProvider>\n </div>\n }\n {controlVisibility.UserPicker &&\n <div id=\"UserPickerDiv\" className={styles.container}>\n <UserPicker\n context={this.props.context}\n secondaryTextPropertyName=\"mail\"\n theme={this.props.themeVariant}\n placeholder={\"Search User\"}\n // label={\n // <div>\n // <Person20Filled color={tokens.colorBrandForeground1} />\n // <Body1>Select User</Body1>\n // </div>\n // }\n // onSelectedUsers={onSelectedUsers}\n // onRemoveSelectedUser={onRemovedUser}\n />\n </div>\n }\n {\n controlVisibility.Calendar &&\n <div id=\"CalendarDiv\" className={styles.container}>\n <TestCalendarControl\n context={this.props.context} theme={this.props.themeVariant as any} hasTeamsContext={false} themeString={'default'} title={'Calendar'} appHostName={EAppHostName.SharePoint} />\n </div>\n\n }\n {\n controlVisibility.SPFilePicker &&\n <div id=\"SPFilePickerDiv\" className={styles.container}>\n <TestSPFilePickerControl context={this.props.context} />\n </div>\n\n }\n {controlVisibility.WorldMap &&\n <div id=\"WorldMapDiv\" className={styles.container}>\n <WorldMap description={'World Map Sample'} isDarkTheme={false} hasTeamsContext={false} title={'Microsoft Locations Worldwide'} />\n </div>\n }\n </div>\n </React.Suspense>\n );\n }\n\n private getRandomCollectionFieldData = (): Record<string, unknown>[] => {\n const result: Record<string, unknown>[] = [];\n for (let i = 1; i < 16; i++) {\n\n const sampleDate = new Date();\n sampleDate.setDate(sampleDate.getDate() + i);\n\n result.push({\n \"Field1\": `String${i}`,\n \"Field2\": i,\n \"Field3\": \"https://pnp.github.io/\",\n \"Field4\": true,\n \"Field5\": null,\n \"Field6\": { key: \"choice 1\", text: \"choice 1\" },\n \"Field7\": [{ key: \"choice 1\", text: \"choice 1\" }, { key: \"choice 2\", text: \"choice 2\" }],\n \"Field8\": sampleDate\n });\n }\n return result;\n }\n\n private onExpandCollapseTree(item: ITreeItem, isExpanded: boolean): void {\n console.log((isExpanded ? \"item expanded: \" : \"item collapsed: \") + item);\n }\n\n private onItemSelected(items: ITreeItem[]): void {\n console.log(\"items selected: \" + items.length);\n }\n\n private renderCustomTreeItem(item: ITreeItem): JSX.Element {\n return (\n <span>\n {\n item.iconProps &&\n <i className={\"ms-Icon ms-Icon--\" + item.iconProps.iconName} style={{ paddingRight: '4px' }} />\n }\n {item.label}\n </span>\n );\n }\n\n private _getPage(page: number): void {\n console.log('Page:', page);\n }\n\n // private _onFolderSelect = (folder: IFolder): void => {\n // console.log('selected folder', folder);\n //\n}\n"
|
|
21686
21423
|
}
|
|
21687
21424
|
}
|
|
21688
21425
|
}
|
|
@@ -21692,62 +21429,6 @@
|
|
|
21692
21429
|
"ruleIndex": 16,
|
|
21693
21430
|
"suppressions": []
|
|
21694
21431
|
},
|
|
21695
|
-
{
|
|
21696
|
-
"level": "warning",
|
|
21697
|
-
"message": {
|
|
21698
|
-
"text": "Unexpected any. Specify a different type."
|
|
21699
|
-
},
|
|
21700
|
-
"locations": [
|
|
21701
|
-
{
|
|
21702
|
-
"physicalLocation": {
|
|
21703
|
-
"artifactLocation": {
|
|
21704
|
-
"uri": "src/webparts/controlsTest/components/ControlsTest.tsx",
|
|
21705
|
-
"index": 915
|
|
21706
|
-
},
|
|
21707
|
-
"region": {
|
|
21708
|
-
"startLine": 2114,
|
|
21709
|
-
"startColumn": 42,
|
|
21710
|
-
"endLine": 2114,
|
|
21711
|
-
"endColumn": 45,
|
|
21712
|
-
"snippet": {
|
|
21713
|
-
"text": "any"
|
|
21714
|
-
}
|
|
21715
|
-
}
|
|
21716
|
-
}
|
|
21717
|
-
}
|
|
21718
|
-
],
|
|
21719
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
21720
|
-
"ruleIndex": 0,
|
|
21721
|
-
"suppressions": []
|
|
21722
|
-
},
|
|
21723
|
-
{
|
|
21724
|
-
"level": "warning",
|
|
21725
|
-
"message": {
|
|
21726
|
-
"text": "Unexpected any. Specify a different type."
|
|
21727
|
-
},
|
|
21728
|
-
"locations": [
|
|
21729
|
-
{
|
|
21730
|
-
"physicalLocation": {
|
|
21731
|
-
"artifactLocation": {
|
|
21732
|
-
"uri": "src/webparts/controlsTest/components/ControlsTest.tsx",
|
|
21733
|
-
"index": 915
|
|
21734
|
-
},
|
|
21735
|
-
"region": {
|
|
21736
|
-
"startLine": 2151,
|
|
21737
|
-
"startColumn": 42,
|
|
21738
|
-
"endLine": 2151,
|
|
21739
|
-
"endColumn": 45,
|
|
21740
|
-
"snippet": {
|
|
21741
|
-
"text": "any"
|
|
21742
|
-
}
|
|
21743
|
-
}
|
|
21744
|
-
}
|
|
21745
|
-
}
|
|
21746
|
-
],
|
|
21747
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
21748
|
-
"ruleIndex": 0,
|
|
21749
|
-
"suppressions": []
|
|
21750
|
-
},
|
|
21751
21432
|
{
|
|
21752
21433
|
"level": "warning",
|
|
21753
21434
|
"message": {
|
|
@@ -21776,34 +21457,6 @@
|
|
|
21776
21457
|
"ruleIndex": 17,
|
|
21777
21458
|
"suppressions": []
|
|
21778
21459
|
},
|
|
21779
|
-
{
|
|
21780
|
-
"level": "warning",
|
|
21781
|
-
"message": {
|
|
21782
|
-
"text": "Unexpected any. Specify a different type."
|
|
21783
|
-
},
|
|
21784
|
-
"locations": [
|
|
21785
|
-
{
|
|
21786
|
-
"physicalLocation": {
|
|
21787
|
-
"artifactLocation": {
|
|
21788
|
-
"uri": "src/webparts/controlsTest/components/ControlsTest.tsx",
|
|
21789
|
-
"index": 915
|
|
21790
|
-
},
|
|
21791
|
-
"region": {
|
|
21792
|
-
"startLine": 2379,
|
|
21793
|
-
"startColumn": 42,
|
|
21794
|
-
"endLine": 2379,
|
|
21795
|
-
"endColumn": 45,
|
|
21796
|
-
"snippet": {
|
|
21797
|
-
"text": "any"
|
|
21798
|
-
}
|
|
21799
|
-
}
|
|
21800
|
-
}
|
|
21801
|
-
}
|
|
21802
|
-
],
|
|
21803
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
21804
|
-
"ruleIndex": 0,
|
|
21805
|
-
"suppressions": []
|
|
21806
|
-
},
|
|
21807
21460
|
{
|
|
21808
21461
|
"level": "warning",
|
|
21809
21462
|
"message": {
|
|
@@ -21845,65 +21498,9 @@
|
|
|
21845
21498
|
"index": 915
|
|
21846
21499
|
},
|
|
21847
21500
|
"region": {
|
|
21848
|
-
"startLine":
|
|
21849
|
-
"startColumn": 76,
|
|
21850
|
-
"endLine": 3113,
|
|
21851
|
-
"endColumn": 79,
|
|
21852
|
-
"snippet": {
|
|
21853
|
-
"text": "any"
|
|
21854
|
-
}
|
|
21855
|
-
}
|
|
21856
|
-
}
|
|
21857
|
-
}
|
|
21858
|
-
],
|
|
21859
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
21860
|
-
"ruleIndex": 0,
|
|
21861
|
-
"suppressions": []
|
|
21862
|
-
},
|
|
21863
|
-
{
|
|
21864
|
-
"level": "warning",
|
|
21865
|
-
"message": {
|
|
21866
|
-
"text": "Unexpected any. Specify a different type."
|
|
21867
|
-
},
|
|
21868
|
-
"locations": [
|
|
21869
|
-
{
|
|
21870
|
-
"physicalLocation": {
|
|
21871
|
-
"artifactLocation": {
|
|
21872
|
-
"uri": "src/webparts/controlsTest/components/ControlsTest.tsx",
|
|
21873
|
-
"index": 915
|
|
21874
|
-
},
|
|
21875
|
-
"region": {
|
|
21876
|
-
"startLine": 3116,
|
|
21877
|
-
"startColumn": 50,
|
|
21878
|
-
"endLine": 3116,
|
|
21879
|
-
"endColumn": 53,
|
|
21880
|
-
"snippet": {
|
|
21881
|
-
"text": "any"
|
|
21882
|
-
}
|
|
21883
|
-
}
|
|
21884
|
-
}
|
|
21885
|
-
}
|
|
21886
|
-
],
|
|
21887
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
21888
|
-
"ruleIndex": 0,
|
|
21889
|
-
"suppressions": []
|
|
21890
|
-
},
|
|
21891
|
-
{
|
|
21892
|
-
"level": "warning",
|
|
21893
|
-
"message": {
|
|
21894
|
-
"text": "Unexpected any. Specify a different type."
|
|
21895
|
-
},
|
|
21896
|
-
"locations": [
|
|
21897
|
-
{
|
|
21898
|
-
"physicalLocation": {
|
|
21899
|
-
"artifactLocation": {
|
|
21900
|
-
"uri": "src/webparts/controlsTest/components/ControlsTest.tsx",
|
|
21901
|
-
"index": 915
|
|
21902
|
-
},
|
|
21903
|
-
"region": {
|
|
21904
|
-
"startLine": 3129,
|
|
21501
|
+
"startLine": 3131,
|
|
21905
21502
|
"startColumn": 51,
|
|
21906
|
-
"endLine":
|
|
21503
|
+
"endLine": 3131,
|
|
21907
21504
|
"endColumn": 54,
|
|
21908
21505
|
"snippet": {
|
|
21909
21506
|
"text": "any"
|
|
@@ -21929,9 +21526,9 @@
|
|
|
21929
21526
|
"index": 915
|
|
21930
21527
|
},
|
|
21931
21528
|
"region": {
|
|
21932
|
-
"startLine":
|
|
21529
|
+
"startLine": 3191,
|
|
21933
21530
|
"startColumn": 82,
|
|
21934
|
-
"endLine":
|
|
21531
|
+
"endLine": 3191,
|
|
21935
21532
|
"endColumn": 85,
|
|
21936
21533
|
"snippet": {
|
|
21937
21534
|
"text": "any"
|
|
@@ -21944,34 +21541,6 @@
|
|
|
21944
21541
|
"ruleIndex": 0,
|
|
21945
21542
|
"suppressions": []
|
|
21946
21543
|
},
|
|
21947
|
-
{
|
|
21948
|
-
"level": "warning",
|
|
21949
|
-
"message": {
|
|
21950
|
-
"text": "Unexpected any. Specify a different type."
|
|
21951
|
-
},
|
|
21952
|
-
"locations": [
|
|
21953
|
-
{
|
|
21954
|
-
"physicalLocation": {
|
|
21955
|
-
"artifactLocation": {
|
|
21956
|
-
"uri": "src/webparts/controlsTest/components/ControlsTest.tsx",
|
|
21957
|
-
"index": 915
|
|
21958
|
-
},
|
|
21959
|
-
"region": {
|
|
21960
|
-
"startLine": 3222,
|
|
21961
|
-
"startColumn": 27,
|
|
21962
|
-
"endLine": 3222,
|
|
21963
|
-
"endColumn": 30,
|
|
21964
|
-
"snippet": {
|
|
21965
|
-
"text": "any"
|
|
21966
|
-
}
|
|
21967
|
-
}
|
|
21968
|
-
}
|
|
21969
|
-
}
|
|
21970
|
-
],
|
|
21971
|
-
"ruleId": "@typescript-eslint/no-explicit-any",
|
|
21972
|
-
"ruleIndex": 0,
|
|
21973
|
-
"suppressions": []
|
|
21974
|
-
},
|
|
21975
21544
|
{
|
|
21976
21545
|
"level": "warning",
|
|
21977
21546
|
"message": {
|